summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-04-11 09:13:11 +0000
committer <>2014-04-23 12:05:38 +0000
commit6af3fdec2262dd94954acc5e426ef71cbd4521d3 (patch)
tree9be02de9a80f7935892a2d03741adee44723e65d /libstdc++-v3
parent19be2b4342ac32e9edc78ce6fed8f61b63ae98d1 (diff)
downloadgcc-tarball-6af3fdec2262dd94954acc5e426ef71cbd4521d3.tar.gz
Imported from /home/lorry/working-area/delta_gcc-tarball/gcc-4.7.3.tar.bz2.gcc-4.7.3
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog2620
-rw-r--r--libstdc++-v3/ChangeLog-20116365
-rw-r--r--libstdc++-v3/Makefile.am8
-rw-r--r--libstdc++-v3/Makefile.in30
-rw-r--r--libstdc++-v3/acinclude.m4713
-rw-r--r--libstdc++-v3/config.h.in83
-rw-r--r--libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt77
-rw-r--r--libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt369
-rw-r--r--libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt75
-rw-r--r--libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt75
-rw-r--r--libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt75
-rw-r--r--libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt75
-rw-r--r--libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt22
-rw-r--r--libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt68
-rw-r--r--libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt29
-rw-r--r--libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt75
-rw-r--r--libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt3687
-rw-r--r--libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver51
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver115
-rw-r--r--libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h6
-rw-r--r--libstdc++-v3/config/locale/gnu/monetary_members.cc4
-rw-r--r--libstdc++-v3/config/locale/newlib/ctype_members.cc280
-rw-r--r--libstdc++-v3/config/os/aix/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/aix/ctype_noninline.h91
-rw-r--r--libstdc++-v3/config/os/bionic/ctype_configure_char.cc105
-rw-r--r--libstdc++-v3/config/os/bionic/ctype_noninline.h98
-rw-r--r--libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/bsd/darwin/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/bsd/darwin/os_defines.h3
-rw-r--r--libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/bsd/netbsd/ctype_base.h6
-rw-r--r--libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc101
-rw-r--r--libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h94
-rw-r--r--libstdc++-v3/config/os/djgpp/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/djgpp/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/generic/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/generic/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc196
-rw-r--r--libstdc++-v3/config/os/gnu-linux/ctype_noninline.h190
-rw-r--r--libstdc++-v3/config/os/gnu-linux/os_defines.h9
-rw-r--r--libstdc++-v3/config/os/hpux/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/hpux/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/irix/irix6.5/ctype_configure_char.cc101
-rw-r--r--libstdc++-v3/config/os/irix/irix6.5/ctype_noninline.h94
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/ctype_base.h64
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc243
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/ctype_inline.h75
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/error_constants.h142
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/os_defines.h81
-rw-r--r--libstdc++-v3/config/os/mingw32/ctype_configure_char.cc243
-rw-r--r--libstdc++-v3/config/os/mingw32/ctype_noninline.h236
-rw-r--r--libstdc++-v3/config/os/mingw32/error_constants.h36
-rw-r--r--libstdc++-v3/config/os/mingw32/os_defines.h9
-rw-r--r--libstdc++-v3/config/os/newlib/ctype_configure_char.cc105
-rw-r--r--libstdc++-v3/config/os/newlib/ctype_noninline.h97
-rw-r--r--libstdc++-v3/config/os/osf/ctype_base.h59
-rw-r--r--libstdc++-v3/config/os/osf/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/osf/ctype_inline.h168
-rw-r--r--libstdc++-v3/config/os/osf/error_constants.h178
-rw-r--r--libstdc++-v3/config/os/osf/os_defines.h41
-rw-r--r--libstdc++-v3/config/os/qnx/qnx6.1/ctype_configure_char.cc97
-rw-r--r--libstdc++-v3/config/os/qnx/qnx6.1/ctype_noninline.h89
-rw-r--r--libstdc++-v3/config/os/solaris/solaris2.7/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h32
-rw-r--r--libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h (renamed from libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h)0
-rw-r--r--libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h (renamed from libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h)0
-rw-r--r--libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h42
-rw-r--r--libstdc++-v3/config/os/tpf/ctype_configure_char.cc120
-rw-r--r--libstdc++-v3/config/os/tpf/ctype_noninline.h113
-rw-r--r--libstdc++-v3/config/os/uclibc/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/uclibc/ctype_noninline.h92
-rw-r--r--libstdc++-v3/config/os/vxworks/ctype_configure_char.cc99
-rw-r--r--libstdc++-v3/config/os/vxworks/ctype_noninline.h92
-rwxr-xr-xlibstdc++-v3/configure1761
-rw-r--r--libstdc++-v3/configure.ac79
-rw-r--r--libstdc++-v3/configure.host30
-rw-r--r--libstdc++-v3/crossconfig.m48
-rw-r--r--libstdc++-v3/doc/Makefile.am222
-rw-r--r--libstdc++-v3/doc/Makefile.in230
-rw-r--r--libstdc++-v3/doc/doxygen/doxygroups.cc8
-rw-r--r--libstdc++-v3/doc/doxygen/user.cfg.in611
-rw-r--r--libstdc++-v3/doc/html/api.html35
-rw-r--r--libstdc++-v3/doc/html/bk02.html4
-rw-r--r--libstdc++-v3/doc/html/bk03.html4
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/PythonPoweredSmall.gifbin361 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/acks.html65
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.pngbin21668 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.svg491
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_container_traits.html170
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_design.html46
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_examples.html151
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_performance_tests.html345
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_regression_tests.html93
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/assoc_tests.html24
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/associative_container_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/basic_hash_table.html436
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/basic_hash_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/basic_invalidation_guarantee.html26
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/basic_tree.html660
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/basic_tree_assoc_container_const_node_iterator.html383
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/basic_tree_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/binary_heap_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_gcc.pngbin5357 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.pngbin6710 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_msvc.pngbin5373 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/binomial_heap_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_max_collision_check_resize_trigger.html532
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_gcc.pngbin7074 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.pngbin8534 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_msvc.pngbin7235 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_gcc.pngbin6811 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_local.pngbin8445 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_msvc.pngbin7230 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_gcc.pngbin7636 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_local.pngbin9396 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_msvc.pngbin6840 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_table.html724
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/cc_hash_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_gcc.pngbin7355 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.pngbin9557 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_msvc.pngbin7572 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/checked_by_tidy.gifbin1367 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/concepts.html118
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/contact.html22
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/container_base.html1063
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/container_cd.pngbin11884 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/container_cd.svg418
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/container_tag.html24
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/counter_lu_policy.html259
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/design.html96
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/direct_mask_range_hashing.html167
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/direct_mod_range_hashing.html144
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/disclaimer.html34
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/ds_gen.html344
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/examples.html24
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/exceptions.html46
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_gcc.pngbin6194 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.pngbin7916 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_msvc.pngbin6140 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_gcc.pngbin6110 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.pngbin7570 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_msvc.pngbin6314 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_gcc.pngbin6763 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_local.pngbin8499 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_msvc.pngbin6721 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_table.html891
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/gp_hash_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_based_containers.html835
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_exponential_size_policy.html183
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_load_check_resize_trigger.html583
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_prime_size_policy.html149
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test.html173
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_gcc.pngbin6356 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.pngbin7405 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_msvc.pngbin6401 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_find_find_timing_test.html247
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_find_timing_test.html220
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_insert_timing_test.html365
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_standard_resize_policy.html795
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_text_find_find_timing_test.html164
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_find_timing_test.html163
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_gcc.pngbin6910 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.pngbin8436 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_msvc.pngbin7204 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/index.html146
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/insert_error.html53
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/interface.html446
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/introduction.html120
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_cd.pngbin8331 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/join_error.html48
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/linear_probe_fn.html140
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/list_update.html316
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/list_update_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/lu_based_containers.html229
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/misc.html26
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/motivation.html993
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/move_to_front_lu_policy.html194
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large.html215
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_gcc.pngbin6323 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.pngbin7299 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_msvc.pngbin6490 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_gcc.pngbin6284 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.pngbin6706 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_msvc.pngbin6204 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small.html215
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_gcc.pngbin6237 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_local.pngbin6732 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_msvc.pngbin6268 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_gcc.pngbin6064 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.pngbin6396 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_msvc.pngbin6012 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large.html210
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.pngbin6835 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.pngbin7275 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.pngbin6588 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.pngbin6778 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.pngbin7191 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.pngbin6535 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small.html212
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.pngbin6449 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.pngbin6845 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.pngbin6570 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.pngbin6419 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.pngbin6925 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.pngbin6569 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large.html212
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_gcc.pngbin6380 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_local.pngbin7000 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_msvc.pngbin6460 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_gcc.pngbin6204 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.pngbin6764 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_msvc.pngbin6357 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small.html217
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_gcc.pngbin6456 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.pngbin7035 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_msvc.pngbin6547 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_gcc.pngbin6111 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.pngbin6853 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_msvc.pngbin6430 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/null_hash_fn.html32
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/null_lu_metadata.html25
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/null_mapped_type.html25
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/null_probe_fn.html29
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/null_tree_node_update.html101
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/null_trie_node_update.html102
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/ov_tree_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_heap_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_gcc.pngbin5395 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.pngbin6892 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_msvc.pngbin5514 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_gcc.pngbin5678 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.pngbin6760 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_msvc.pngbin5878 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pat_trie_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/point_invalidation_guarantee.html51
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pq_container_traits.html132
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pq_design.html381
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pq_examples.html54
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pq_performance_tests.html332
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pq_regression_tests.html52
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/pq_tests.html24
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/prerequisites.html46
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue.html995
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test.html161
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_gcc.pngbin7350 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.pngbin9275 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_msvc.pngbin7065 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test.html200
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_gcc.pngbin7021 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.pngbin8986 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_msvc.pngbin7100 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.pngbin10845 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.svg368
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test.html141
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_gcc.pngbin6458 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_local.pngbin7989 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_msvc.pngbin6461 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test.html204
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_gcc.pngbin6788 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_local.pngbin7633 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_msvc.pngbin6956 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_gcc.pngbin5007 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.pngbin5878 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_msvc.pngbin4996 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test.html222
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_gcc.pngbin6950 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_local.pngbin7748 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_msvc.pngbin6983 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_gcc.pngbin4867 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.pngbin6105 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_msvc.pngbin5216 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test.html143
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_gcc.pngbin6582 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.pngbin7424 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_msvc.pngbin6849 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test.html209
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_gcc.pngbin7072 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.pngbin9006 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_msvc.pngbin7289 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test.html219
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_gcc.pngbin6832 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_local.pngbin8477 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_msvc.pngbin7266 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/quadratic_probe_fn.html141
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_gcc.pngbin5960 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.pngbin7377 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_msvc.pngbin5636 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/range_invalidation_guarantee.html52
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/rb_tree_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/rc_binomial_heap_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/references.html258
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/resize_error.html50
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_probe_fn.html152
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_range_hashing.html172
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_hash_fn.html171
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_probe_fn.html178
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_resize_policy.html413
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_resize_trigger.html462
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_size_policy.html163
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_tree_node_update.html193
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_trie_e_access_traits.html231
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_trie_node_update.html194
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/sample_update_policy.html178
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/splay_tree_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/string_trie_e_access_traits.html400
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tests.html24
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_gcc.pngbin7013 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_local.pngbin9361 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_msvc.pngbin6932 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_gcc.pngbin6207 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_local.pngbin7650 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_msvc.pngbin6059 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/thin_heap_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree.html516
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_based_containers.html358
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_node_iterator.html143
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_node_update.html678
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test.html118
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_gcc.pngbin5698 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_local.pngbin6739 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_msvc.pngbin5684 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_random_int_find_find_timing_test.html160
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test.html143
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_gcc.pngbin5649 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_local.pngbin6734 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_msvc.pngbin5675 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_find_find_timing_test.html162
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test.html226
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_gcc.pngbin5373 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.pngbin6690 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_msvc.pngbin5212 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_gcc.pngbin4895 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.pngbin6011 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_msvc.pngbin4881 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_gcc.pngbin5140 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.pngbin6270 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_msvc.pngbin5131 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_find_timing_test.html126
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_gcc.pngbin6162 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.pngbin7796 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_msvc.pngbin5831 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie.html489
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie_based_containers.html241
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie_const_node_iterator.html478
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie_node_iterator.html235
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie_order_statistics_node_update.html770
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie_prefix_search_node_update.html628
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trie_tag.html47
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/trivial_iterator_tag.html25
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/tutorial.html670
-rw-r--r--libstdc++-v3/doc/html/ext/pb_ds/update_policy_cd.pngbin8570 -> 0 bytes
-rw-r--r--libstdc++-v3/doc/html/faq.html304
-rw-r--r--libstdc++-v3/doc/html/images/confdeps.pngbin0 -> 20653 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_balls_and_bins.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/balls_and_bins.png)bin10139 -> 10139 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.pngbin0 -> 32915 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push_pop.pngbin0 -> 33264 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_cc_hash_int_find.pngbin0 -> 66803 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_find.pngbin0 -> 67129 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_insert.pngbin0 -> 67625 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_ccgp_hash_int_subscript_insert.pngbin0 -> 64083 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_container_tag_hierarchy.pngbin0 -> 85192 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_different_underlying_dss_1.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/different_underlying_dss.png)bin31858 -> 31858 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_different_underlying_dss_2.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/pq_different_underlying_dss.png)bin15660 -> 15660 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_embedded_lists_1.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_1.png)bin16350 -> 16350 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_embedded_lists_2.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_2.png)bin18206 -> 18206 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_embedded_lists_3.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_3.png)bin5612 -> 5612 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_exception_hierarchy.pngbin0 -> 18245 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_gp_hash_int_find.pngbin0 -> 46447 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_find.pngbin0 -> 47232 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_insert.pngbin0 -> 49697 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_int_erase_mem.pngbin0 -> 48012 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_policy_cd.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/hash_policy_cd.png)bin25302 -> 25302 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_range_hashing_seq_diagram.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/hash_range_hashing_seq_diagram.png)bin12962 -> 12962 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_range_hashing_seq_diagram2.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/hash_range_hashing_seq_diagram2.png)bin8918 -> 8918 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_ranged_hash_range_hashing_fns.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/hash_ranged_hash_range_hashing_fns.png)bin19773 -> 19773 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_text_find.pngbin0 -> 57070 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_hash_zlob_int_find.pngbin0 -> 53858 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram1.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram1.png)bin25834 -> 25834 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram2.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram2.png)bin25522 -> 25522 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram3.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram3.png)bin24542 -> 24542 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_invalidation_guarantee_erase.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_erase.png)bin25884 -> 25884 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_invalidation_tag_hierarchy.pngbin0 -> 14178 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_list_update.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/lu.png)bin20987 -> 20987 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_hash.pngbin0 -> 45704 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_tree.pngbin0 -> 37835 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_hash.pngbin0 -> 44996 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_tree.pngbin0 -> 37341 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_hash.pngbin0 -> 46498 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_tree.pngbin0 -> 37488 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_hash.pngbin0 -> 49055 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_tree.pngbin0 -> 41256 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_hash.pngbin0 -> 48026 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_tree.pngbin0 -> 40541 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_hash.pngbin0 -> 47330 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_tree.pngbin0 -> 38337 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_node_invariants.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/node_invariants.png)bin16553 -> 16553 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_down_thin.pngbin0 -> 25795 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_up_thin.pngbin0 -> 26470 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push.pngbin0 -> 35873 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push_pop.pngbin0 -> 34785 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_pat_trie.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/pat_trie.png)bin26182 -> 26182 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_point_iterator_hierarchy.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/point_iterators_cd.png)bin20307 -> 20307 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_point_iterators_range_ops_1.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/point_iterators_range_ops_1.png)bin14206 -> 14206 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_point_iterators_range_ops_2.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/point_iterators_range_ops_2.png)bin12876 -> 12876 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_different_underlying_dss.pngbin0 -> 15660 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_int_push.pngbin0 -> 44300 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_int_push_pop.pngbin0 -> 47243 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_tag_hierarchy.pngbin0 -> 29346 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_text_join.pngbin0 -> 49521 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_down.pngbin0 -> 45433 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_up.pngbin0 -> 44676 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_text_pop_mem.pngbin0 -> 44599 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_text_push.pngbin0 -> 43555 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_priority_queue_text_push_pop.pngbin0 -> 44314 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_rationale_null_node_updator.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/rationale_null_node_updator.png)bin25097 -> 25097 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_resize_policy_cd.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/resize_policy_cd.png)bin20806 -> 20806 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_restoring_node_invariants.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/restoring_node_invariants.png)bin14432 -> 14432 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_simple_list.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/simple_list.png)bin4299 -> 4299 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_int_find.pngbin0 -> 37647 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_node_invalidations.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/node_invariant_invalidations.png)bin32276 -> 32276 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_node_invariants.pngbin0 -> 16553 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_node_updator_policy_cd.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/tree_node_updator_policy_cd.png)bin9236 -> 9236 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_order_statistics.pngbin0 -> 36565 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_split_join.pngbin0 -> 38092 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_text_find.pngbin0 -> 43323 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_text_insert_node.pngbin0 -> 35682 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_text_insert_trie.pngbin0 -> 28044 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_text_insert_vector.pngbin0 -> 28291 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.pngbin0 -> 43242 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/trie_node_updator_policy_cd.png)bin12126 -> 12126 bytes
-rw-r--r--libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png (renamed from libstdc++-v3/doc/html/ext/pb_ds/update_seq_diagram.png)bin10789 -> 10789 bytes
-rw-r--r--libstdc++-v3/doc/html/index.html209
-rw-r--r--libstdc++-v3/doc/html/manual/abi.html162
-rw-r--r--libstdc++-v3/doc/html/manual/algorithms.html26
-rw-r--r--libstdc++-v3/doc/html/manual/api.html44
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_contributing.html55
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_free.html16
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_gfdl.html42
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_gpl.html70
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_porting.html146
-rw-r--r--libstdc++-v3/doc/html/manual/associative.html22
-rw-r--r--libstdc++-v3/doc/html/manual/atomics.html14
-rw-r--r--libstdc++-v3/doc/html/manual/backwards.html267
-rw-r--r--libstdc++-v3/doc/html/manual/bitmap_allocator.html323
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02.html16
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html14
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html8
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html12
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html54
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html14
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html20
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html28
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html16
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html10
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html92
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html39
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html161
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html79
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html107
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html354
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html50
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html59
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html41
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html36
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html45
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html36
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03pr01.html19
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt04.html32
-rw-r--r--libstdc++-v3/doc/html/manual/bugs.html204
-rw-r--r--libstdc++-v3/doc/html/manual/concurrency.html16
-rw-r--r--libstdc++-v3/doc/html/manual/configure.html31
-rw-r--r--libstdc++-v3/doc/html/manual/containers.html26
-rw-r--r--libstdc++-v3/doc/html/manual/containers_and_c.html8
-rw-r--r--libstdc++-v3/doc/html/manual/debug.html64
-rw-r--r--libstdc++-v3/doc/html/manual/debug_mode.html11
-rw-r--r--libstdc++-v3/doc/html/manual/diagnostics.html16
-rw-r--r--libstdc++-v3/doc/html/manual/documentation_hacking.html334
-rw-r--r--libstdc++-v3/doc/html/manual/dynamic_memory.html12
-rw-r--r--libstdc++-v3/doc/html/manual/ext_algorithms.html10
-rw-r--r--libstdc++-v3/doc/html/manual/ext_allocators.html397
-rw-r--r--libstdc++-v3/doc/html/manual/ext_compile_checks.html10
-rw-r--r--libstdc++-v3/doc/html/manual/ext_concurrency.html23
-rw-r--r--libstdc++-v3/doc/html/manual/ext_containers.html45
-rw-r--r--libstdc++-v3/doc/html/manual/ext_demangling.html10
-rw-r--r--libstdc++-v3/doc/html/manual/ext_io.html21
-rw-r--r--libstdc++-v3/doc/html/manual/ext_iterators.html10
-rw-r--r--libstdc++-v3/doc/html/manual/ext_numerics.html24
-rw-r--r--libstdc++-v3/doc/html/manual/ext_utilities.html27
-rw-r--r--libstdc++-v3/doc/html/manual/extensions.html73
-rw-r--r--libstdc++-v3/doc/html/manual/facets.html139
-rw-r--r--libstdc++-v3/doc/html/manual/fstreams.html14
-rw-r--r--libstdc++-v3/doc/html/manual/generalized_numeric_operations.html12
-rw-r--r--libstdc++-v3/doc/html/manual/index.html164
-rw-r--r--libstdc++-v3/doc/html/manual/internals.html27
-rw-r--r--libstdc++-v3/doc/html/manual/intro.html10
-rw-r--r--libstdc++-v3/doc/html/manual/io.html14
-rw-r--r--libstdc++-v3/doc/html/manual/io_and_c.html12
-rw-r--r--libstdc++-v3/doc/html/manual/iterators.html20
-rw-r--r--libstdc++-v3/doc/html/manual/license.html158
-rw-r--r--libstdc++-v3/doc/html/manual/localization.html45
-rw-r--r--libstdc++-v3/doc/html/manual/make.html8
-rw-r--r--libstdc++-v3/doc/html/manual/memory.html185
-rw-r--r--libstdc++-v3/doc/html/manual/mt_allocator.html23
-rw-r--r--libstdc++-v3/doc/html/manual/numerics.html20
-rw-r--r--libstdc++-v3/doc/html/manual/numerics_and_c.html10
-rw-r--r--libstdc++-v3/doc/html/manual/pairs.html13
-rw-r--r--libstdc++-v3/doc/html/manual/parallel_mode.html16
-rw-r--r--libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html3762
-rw-r--r--libstdc++-v3/doc/html/manual/policy_data_structures.html1308
-rw-r--r--libstdc++-v3/doc/html/manual/policy_data_structures_ack.html29
-rw-r--r--libstdc++-v3/doc/html/manual/policy_data_structures_design.html1430
-rw-r--r--libstdc++-v3/doc/html/manual/policy_data_structures_using.html483
-rw-r--r--libstdc++-v3/doc/html/manual/profile_mode.html24
-rw-r--r--libstdc++-v3/doc/html/manual/setup.html31
-rw-r--r--libstdc++-v3/doc/html/manual/source_code_style.html1232
-rw-r--r--libstdc++-v3/doc/html/manual/source_design_notes.html1714
-rw-r--r--libstdc++-v3/doc/html/manual/source_organization.html180
-rw-r--r--libstdc++-v3/doc/html/manual/spine.html67
-rw-r--r--libstdc++-v3/doc/html/manual/status.html218
-rw-r--r--libstdc++-v3/doc/html/manual/streambufs.html18
-rw-r--r--libstdc++-v3/doc/html/manual/strings.html50
-rw-r--r--libstdc++-v3/doc/html/manual/stringstreams.html8
-rw-r--r--libstdc++-v3/doc/html/manual/support.html28
-rw-r--r--libstdc++-v3/doc/html/manual/termination.html12
-rw-r--r--libstdc++-v3/doc/html/manual/test.html58
-rw-r--r--libstdc++-v3/doc/html/manual/traits.html8
-rw-r--r--libstdc++-v3/doc/html/manual/using.html12
-rw-r--r--libstdc++-v3/doc/html/manual/using_concurrency.html131
-rw-r--r--libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html28
-rw-r--r--libstdc++-v3/doc/html/manual/using_exceptions.html59
-rw-r--r--libstdc++-v3/doc/html/manual/using_headers.html49
-rw-r--r--libstdc++-v3/doc/html/manual/using_macros.html8
-rw-r--r--libstdc++-v3/doc/html/manual/using_namespaces.html16
-rw-r--r--libstdc++-v3/doc/html/manual/utilities.html18
-rw-r--r--libstdc++-v3/doc/html/spine.html62
-rw-r--r--libstdc++-v3/doc/xml/api.xml10
-rw-r--r--libstdc++-v3/doc/xml/class.txml83
-rw-r--r--libstdc++-v3/doc/xml/faq.xml15
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_balls_and_bins.pngbin0 -> 10139 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdfbin0 -> 81428 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pngbin0 -> 32915 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg442
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdfbin0 -> 81328 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pngbin0 -> 33264 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg442
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdfbin0 -> 90172 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pngbin0 -> 66803 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg593
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdfbin0 -> 90040 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pngbin0 -> 67129 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg593
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdfbin0 -> 90196 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pngbin0 -> 67625 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg594
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdfbin0 -> 77608 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pngbin0 -> 64083 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg402
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdfbin0 -> 9605 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pngbin0 -> 85192 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg256
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.pngbin0 -> 31858 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.pngbin0 -> 15660 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.pngbin0 -> 16350 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.pngbin0 -> 18206 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.pngbin0 -> 5612 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdfbin0 -> 7520 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pngbin0 -> 18245 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg76
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdfbin0 -> 76134 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pngbin0 -> 46447 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg365
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdfbin0 -> 76225 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pngbin0 -> 47232 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg365
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdfbin0 -> 76238 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pngbin0 -> 49697 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg365
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdfbin0 -> 77175 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pngbin0 -> 48012 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg412
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.pngbin0 -> 25302 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.pngbin0 -> 12962 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.pngbin0 -> 8918 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.pngbin0 -> 19773 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdfbin0 -> 83353 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_text_find.pngbin0 -> 57070 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg479
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdfbin0 -> 89031 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pngbin0 -> 53858 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg552
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.pngbin0 -> 25834 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.pngbin0 -> 25522 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.pngbin0 -> 24542 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.pngbin0 -> 25884 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdfbin0 -> 6903 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pngbin0 -> 14178 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg40
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_list_update.pngbin0 -> 20987 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdfbin0 -> 67642 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pngbin0 -> 45704 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg235
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdfbin0 -> 70583 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pngbin0 -> 37835 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg277
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdfbin0 -> 67623 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pngbin0 -> 44996 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg235
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdfbin0 -> 70942 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pngbin0 -> 37341 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg277
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdfbin0 -> 67457 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pngbin0 -> 46498 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg235
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdfbin0 -> 70759 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pngbin0 -> 37488 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg277
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdfbin0 -> 67786 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pngbin0 -> 49055 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg240
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdfbin0 -> 70776 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pngbin0 -> 41256 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg282
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdfbin0 -> 67808 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pngbin0 -> 48026 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg249
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdfbin0 -> 70972 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pngbin0 -> 40541 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg291
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdfbin0 -> 67656 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pngbin0 -> 47330 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg235
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdfbin0 -> 70738 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pngbin0 -> 38337 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg277
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_node_invariants.pngbin0 -> 16553 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdfbin0 -> 68294 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pngbin0 -> 25795 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg251
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdfbin0 -> 68500 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pngbin0 -> 26470 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg252
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdfbin0 -> 82821 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pngbin0 -> 35873 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg475
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdfbin0 -> 75989 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pngbin0 -> 34785 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg365
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_pat_trie.pngbin0 -> 26182 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.pngbin0 -> 20307 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.pngbin0 -> 14206 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.pngbin0 -> 12876 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.pngbin0 -> 15660 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdfbin0 -> 103791 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pngbin0 -> 44300 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg821
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdfbin0 -> 103910 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pngbin0 -> 47243 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg821
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdfbin0 -> 7842 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pngbin0 -> 29346 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg88
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdfbin0 -> 103511 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pngbin0 -> 49521 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg817
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdfbin0 -> 103701 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pngbin0 -> 45433 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg821
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdfbin0 -> 103554 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pngbin0 -> 44676 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg821
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdfbin0 -> 102962 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pngbin0 -> 44599 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg831
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdfbin0 -> 103249 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pngbin0 -> 43555 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg821
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdfbin0 -> 103894 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pngbin0 -> 44314 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg821
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.pngbin0 -> 25097 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.pngbin0 -> 20806 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.pngbin0 -> 14432 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_simple_list.pngbin0 -> 4299 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdfbin0 -> 82717 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_int_find.pngbin0 -> 37647 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg501
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.pngbin0 -> 32276 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.pngbin0 -> 16553 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.pngbin0 -> 9236 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdfbin0 -> 81007 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pngbin0 -> 36565 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg442
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdfbin0 -> 82727 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_split_join.pngbin0 -> 38092 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg501
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdfbin0 -> 84206 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_find.pngbin0 -> 43323 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg538
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdfbin0 -> 80772 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pngbin0 -> 35682 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg442
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdfbin0 -> 68209 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pngbin0 -> 28044 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg251
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdfbin0 -> 68484 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pngbin0 -> 28291 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg273
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdfbin0 -> 82720 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pngbin0 -> 43242 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg501
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.pngbin0 -> 12126 bytes
-rw-r--r--libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.pngbin0 -> 10789 bytes
-rw-r--r--libstdc++-v3/doc/xml/manual/abi.xml551
-rw-r--r--libstdc++-v3/doc/xml/manual/algorithms.xml6
-rw-r--r--libstdc++-v3/doc/xml/manual/allocator.xml37
-rw-r--r--libstdc++-v3/doc/xml/manual/appendix_contributing.xml27
-rw-r--r--libstdc++-v3/doc/xml/manual/backwards_compatibility.xml251
-rw-r--r--libstdc++-v3/doc/xml/manual/bitmap_allocator.xml12
-rw-r--r--libstdc++-v3/doc/xml/manual/build_hacking.xml180
-rw-r--r--libstdc++-v3/doc/xml/manual/codecvt.xml38
-rw-r--r--libstdc++-v3/doc/xml/manual/concurrency_extensions.xml23
-rw-r--r--libstdc++-v3/doc/xml/manual/configure.xml24
-rw-r--r--libstdc++-v3/doc/xml/manual/ctype.xml9
-rw-r--r--libstdc++-v3/doc/xml/manual/debug.xml26
-rw-r--r--libstdc++-v3/doc/xml/manual/debug_mode.xml10
-rw-r--r--libstdc++-v3/doc/xml/manual/diagnostics.xml2
-rw-r--r--libstdc++-v3/doc/xml/manual/documentation_hacking.xml198
-rw-r--r--libstdc++-v3/doc/xml/manual/evolution.xml2
-rw-r--r--libstdc++-v3/doc/xml/manual/extensions.xml211
-rw-r--r--libstdc++-v3/doc/xml/manual/internals.xml7
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml18
-rw-r--r--libstdc++-v3/doc/xml/manual/iterators.xml2
-rw-r--r--libstdc++-v3/doc/xml/manual/locale.xml9
-rw-r--r--libstdc++-v3/doc/xml/manual/messages.xml36
-rw-r--r--libstdc++-v3/doc/xml/manual/mt_allocator.xml6
-rw-r--r--libstdc++-v3/doc/xml/manual/parallel_mode.xml4
-rw-r--r--libstdc++-v3/doc/xml/manual/policy_data_structures.xml5129
-rw-r--r--libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml1452
-rw-r--r--libstdc++-v3/doc/xml/manual/prerequisites.xml26
-rw-r--r--libstdc++-v3/doc/xml/manual/profile_mode.xml4
-rw-r--r--libstdc++-v3/doc/xml/manual/shared_ptr.xml139
-rw-r--r--libstdc++-v3/doc/xml/manual/spine.xml143
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxx200x.xml2628
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxx2011.xml2683
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxxtr1.xml16
-rw-r--r--libstdc++-v3/doc/xml/manual/strings.xml2
-rw-r--r--libstdc++-v3/doc/xml/manual/test.xml8
-rw-r--r--libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml9723
-rw-r--r--libstdc++-v3/doc/xml/manual/using.xml153
-rw-r--r--libstdc++-v3/doc/xml/manual/using_exceptions.xml65
-rw-r--r--libstdc++-v3/doc/xml/manual/utilities.xml5
-rw-r--r--libstdc++-v3/doc/xml/spine.xml205
-rw-r--r--libstdc++-v3/doc/xsl/customization.xsl.in16
-rw-r--r--libstdc++-v3/fragment.am10
-rw-r--r--libstdc++-v3/include/Makefile.am217
-rw-r--r--libstdc++-v3/include/Makefile.in231
-rw-r--r--libstdc++-v3/include/backward/auto_ptr.h24
-rw-r--r--libstdc++-v3/include/backward/binders.h9
-rw-r--r--libstdc++-v3/include/backward/hashtable.h41
-rw-r--r--libstdc++-v3/include/bits/algorithmfwd.h15
-rw-r--r--libstdc++-v3/include/bits/alloc_traits.h568
-rw-r--r--libstdc++-v3/include/bits/allocator.h75
-rw-r--r--libstdc++-v3/include/bits/atomic_0.h660
-rw-r--r--libstdc++-v3/include/bits/atomic_2.h669
-rw-r--r--libstdc++-v3/include/bits/atomic_base.h723
-rw-r--r--libstdc++-v3/include/bits/basic_ios.h20
-rw-r--r--libstdc++-v3/include/bits/basic_string.h1274
-rw-r--r--libstdc++-v3/include/bits/basic_string.tcc16
-rw-r--r--libstdc++-v3/include/bits/c++0x_warning.h6
-rw-r--r--libstdc++-v3/include/bits/c++config27
-rw-r--r--libstdc++-v3/include/bits/char_traits.h94
-rw-r--r--libstdc++-v3/include/bits/codecvt.h40
-rw-r--r--libstdc++-v3/include/bits/deque.tcc24
-rw-r--r--libstdc++-v3/include/bits/forward_list.h379
-rw-r--r--libstdc++-v3/include/bits/forward_list.tcc51
-rw-r--r--libstdc++-v3/include/bits/functional_hash.h80
-rw-r--r--libstdc++-v3/include/bits/gslice.h13
-rw-r--r--libstdc++-v3/include/bits/hashtable.h1186
-rw-r--r--libstdc++-v3/include/bits/hashtable_policy.h806
-rw-r--r--libstdc++-v3/include/bits/ios_base.h30
-rw-r--r--libstdc++-v3/include/bits/list.tcc6
-rw-r--r--libstdc++-v3/include/bits/locale_classes.h132
-rw-r--r--libstdc++-v3/include/bits/locale_classes.tcc25
-rw-r--r--libstdc++-v3/include/bits/locale_facets.h613
-rw-r--r--libstdc++-v3/include/bits/locale_facets_nonio.h331
-rw-r--r--libstdc++-v3/include/bits/move.h86
-rw-r--r--libstdc++-v3/include/bits/ptr_traits.h182
-rw-r--r--libstdc++-v3/include/bits/random.h601
-rw-r--r--libstdc++-v3/include/bits/random.tcc118
-rw-r--r--libstdc++-v3/include/bits/range_access.h12
-rw-r--r--libstdc++-v3/include/bits/regex.h676
-rw-r--r--libstdc++-v3/include/bits/regex_error.h4
-rw-r--r--libstdc++-v3/include/bits/shared_ptr.h148
-rw-r--r--libstdc++-v3/include/bits/shared_ptr_base.h449
-rw-r--r--libstdc++-v3/include/bits/slice_array.h10
-rw-r--r--libstdc++-v3/include/bits/stl_algo.h1469
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h133
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h105
-rw-r--r--libstdc++-v3/include/bits/stl_construct.h6
-rw-r--r--libstdc++-v3/include/bits/stl_deque.h234
-rw-r--r--libstdc++-v3/include/bits/stl_function.h22
-rw-r--r--libstdc++-v3/include/bits/stl_heap.h110
-rw-r--r--libstdc++-v3/include/bits/stl_iterator.h93
-rw-r--r--libstdc++-v3/include/bits/stl_iterator_base_funcs.h15
-rw-r--r--libstdc++-v3/include/bits/stl_list.h322
-rw-r--r--libstdc++-v3/include/bits/stl_map.h212
-rw-r--r--libstdc++-v3/include/bits/stl_multimap.h192
-rw-r--r--libstdc++-v3/include/bits/stl_multiset.h146
-rw-r--r--libstdc++-v3/include/bits/stl_numeric.h100
-rw-r--r--libstdc++-v3/include/bits/stl_pair.h78
-rw-r--r--libstdc++-v3/include/bits/stl_queue.h32
-rw-r--r--libstdc++-v3/include/bits/stl_relops.h24
-rw-r--r--libstdc++-v3/include/bits/stl_set.h180
-rw-r--r--libstdc++-v3/include/bits/stl_stack.h14
-rw-r--r--libstdc++-v3/include/bits/stl_tempbuf.h15
-rw-r--r--libstdc++-v3/include/bits/stl_tree.h54
-rw-r--r--libstdc++-v3/include/bits/stl_uninitialized.h58
-rw-r--r--libstdc++-v3/include/bits/stl_vector.h399
-rw-r--r--libstdc++-v3/include/bits/stream_iterator.h10
-rw-r--r--libstdc++-v3/include/bits/streambuf_iterator.h26
-rw-r--r--libstdc++-v3/include/bits/unique_ptr.h181
-rw-r--r--libstdc++-v3/include/bits/unordered_map.h18
-rw-r--r--libstdc++-v3/include/bits/unordered_set.h46
-rw-r--r--libstdc++-v3/include/bits/uses_allocator.h109
-rw-r--r--libstdc++-v3/include/bits/vector.tcc233
-rw-r--r--libstdc++-v3/include/c_global/cinttypes14
-rw-r--r--libstdc++-v3/include/c_global/cmath716
-rw-r--r--libstdc++-v3/include/c_global/cstdalign44
-rw-r--r--libstdc++-v3/include/c_global/cstdio7
-rw-r--r--libstdc++-v3/include/c_global/cstdlib4
-rw-r--r--libstdc++-v3/include/c_std/cmath7
-rw-r--r--libstdc++-v3/include/c_std/cstdio6
-rw-r--r--libstdc++-v3/include/debug/bitset74
-rw-r--r--libstdc++-v3/include/debug/debug.h5
-rw-r--r--libstdc++-v3/include/debug/deque50
-rw-r--r--libstdc++-v3/include/debug/formatter.h46
-rw-r--r--libstdc++-v3/include/debug/forward_list61
-rw-r--r--libstdc++-v3/include/debug/functions.h9
-rw-r--r--libstdc++-v3/include/debug/list47
-rw-r--r--libstdc++-v3/include/debug/macros.h18
-rw-r--r--libstdc++-v3/include/debug/map.h67
-rw-r--r--libstdc++-v3/include/debug/multimap.h54
-rw-r--r--libstdc++-v3/include/debug/multiset.h44
-rw-r--r--libstdc++-v3/include/debug/safe_base.h2
-rw-r--r--libstdc++-v3/include/debug/safe_iterator.h138
-rw-r--r--libstdc++-v3/include/debug/safe_iterator.tcc15
-rw-r--r--libstdc++-v3/include/debug/safe_local_iterator.h369
-rw-r--r--libstdc++-v3/include/debug/safe_local_iterator.tcc75
-rw-r--r--libstdc++-v3/include/debug/safe_sequence.h10
-rw-r--r--libstdc++-v3/include/debug/safe_unordered_base.h175
-rw-r--r--libstdc++-v3/include/debug/safe_unordered_container.h81
-rw-r--r--libstdc++-v3/include/debug/safe_unordered_container.tcc100
-rw-r--r--libstdc++-v3/include/debug/set.h45
-rw-r--r--libstdc++-v3/include/debug/string96
-rw-r--r--libstdc++-v3/include/debug/unordered_map452
-rw-r--r--libstdc++-v3/include/debug/unordered_set410
-rw-r--r--libstdc++-v3/include/debug/vector88
-rw-r--r--libstdc++-v3/include/decimal/decimal.h2
-rw-r--r--libstdc++-v3/include/ext/algorithm28
-rw-r--r--libstdc++-v3/include/ext/alloc_traits.h229
-rw-r--r--libstdc++-v3/include/ext/array_allocator.h37
-rw-r--r--libstdc++-v3/include/ext/atomicity.h8
-rw-r--r--libstdc++-v3/include/ext/bitmap_allocator.h44
-rw-r--r--libstdc++-v3/include/ext/cast.h2
-rw-r--r--libstdc++-v3/include/ext/concurrence.h51
-rw-r--r--libstdc++-v3/include/ext/extptr_allocator.h46
-rw-r--r--libstdc++-v3/include/ext/functional28
-rw-r--r--libstdc++-v3/include/ext/malloc_allocator.h38
-rw-r--r--libstdc++-v3/include/ext/memory8
-rw-r--r--libstdc++-v3/include/ext/mt_allocator.h34
-rw-r--r--libstdc++-v3/include/ext/new_allocator.h34
-rw-r--r--libstdc++-v3/include/ext/pb_ds/assoc_container.hpp817
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp173
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp67
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/traits.hpp85
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp211
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp405
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp70
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp81
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp34
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp151
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp31
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp97
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp101
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp164
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp48
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp31
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp21
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp42
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp121
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp281
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp87
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp144
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp63
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp24
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp68
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp68
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp85
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp30
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp97
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp144
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp201
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp74
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp68
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp23
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp163
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp48
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp44
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp69
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp11
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp90
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp105
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp119
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp66
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp95
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp356
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp77
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp54
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp11
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp11
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp43
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp39
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp15
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp111
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp103
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp226
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp196
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp3
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp153
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp45
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp11
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp15
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp17
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp11
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp9
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp357
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp26
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp50
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp3
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp84
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp72
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp51
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp61
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp48
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp50
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp85
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp154
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp30
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp54
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp249
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp79
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp55
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp149
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp13
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp41
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp13
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp176
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp86
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp51
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp88
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp55
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp52
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp74
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp128
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp32
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp58
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp57
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp382
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp47
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp85
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp43
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp45
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp9
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp37
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp143
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp69
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp93
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp79
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp111
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp84
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp60
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp158
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp152
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp124
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp277
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp599
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp171
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp128
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp338
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp86
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp494
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp1361
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp484
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp196
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp93
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp218
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp229
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp340
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp73
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp24
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp29
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp30
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp67
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp178
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp67
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp88
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp44
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp40
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp24
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp168
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp131
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp32
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp3
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp59
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp162
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp185
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp58
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp28
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp23
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp26
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp19
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp17
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp27
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp114
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp183
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp36
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp84
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp86
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp33
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp59
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp103
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp104
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp56
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp195
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp93
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp50
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp62
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp46
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp114
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp93
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp50
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp93
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp66
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp77
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp89
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp48
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp99
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp156
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp99
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp264
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp68
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp151
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp78
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp133
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp79
-rw-r--r--libstdc++-v3/include/ext/pb_ds/exception.hpp25
-rw-r--r--libstdc++-v3/include/ext/pb_ds/hash_policy.hpp192
-rw-r--r--libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp168
-rw-r--r--libstdc++-v3/include/ext/pb_ds/priority_queue.hpp94
-rw-r--r--libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp309
-rw-r--r--libstdc++-v3/include/ext/pb_ds/tree_policy.hpp128
-rw-r--r--libstdc++-v3/include/ext/pb_ds/trie_policy.hpp343
-rw-r--r--libstdc++-v3/include/ext/pod_char_traits.h5
-rw-r--r--libstdc++-v3/include/ext/pointer.h51
-rw-r--r--libstdc++-v3/include/ext/pool_allocator.h37
-rw-r--r--libstdc++-v3/include/ext/rc_string_base.h18
-rw-r--r--libstdc++-v3/include/ext/rope44
-rw-r--r--libstdc++-v3/include/ext/ropeimpl.h14
-rw-r--r--libstdc++-v3/include/ext/stdio_filebuf.h15
-rw-r--r--libstdc++-v3/include/ext/string_conversions.h8
-rw-r--r--libstdc++-v3/include/ext/throw_allocator.h49
-rw-r--r--libstdc++-v3/include/ext/type_traits.h56
-rw-r--r--libstdc++-v3/include/ext/typelist.h8
-rw-r--r--libstdc++-v3/include/ext/vstring.h112
-rw-r--r--libstdc++-v3/include/ext/vstring.tcc8
-rw-r--r--libstdc++-v3/include/parallel/algo.h2
-rw-r--r--libstdc++-v3/include/parallel/algobase.h5
-rw-r--r--libstdc++-v3/include/parallel/base.h2
-rw-r--r--libstdc++-v3/include/parallel/compatibility.h20
-rw-r--r--libstdc++-v3/include/parallel/equally_split.h13
-rw-r--r--libstdc++-v3/include/parallel/find.h4
-rw-r--r--libstdc++-v3/include/parallel/for_each_selectors.h6
-rw-r--r--libstdc++-v3/include/parallel/losertree.h8
-rw-r--r--libstdc++-v3/include/parallel/multiseq_selection.h4
-rw-r--r--libstdc++-v3/include/parallel/multiway_merge.h39
-rw-r--r--libstdc++-v3/include/parallel/multiway_mergesort.h7
-rw-r--r--libstdc++-v3/include/parallel/par_loop.h6
-rw-r--r--libstdc++-v3/include/parallel/partial_sum.h5
-rw-r--r--libstdc++-v3/include/parallel/queue.h2
-rw-r--r--libstdc++-v3/include/parallel/random_number.h2
-rw-r--r--libstdc++-v3/include/parallel/search.h6
-rw-r--r--libstdc++-v3/include/parallel/set_operations.h4
-rw-r--r--libstdc++-v3/include/parallel/sort.h9
-rw-r--r--libstdc++-v3/include/parallel/unique_copy.h4
-rw-r--r--libstdc++-v3/include/precompiled/stdc++.h4
-rw-r--r--libstdc++-v3/include/profile/base.h41
-rw-r--r--libstdc++-v3/include/profile/bitset67
-rw-r--r--libstdc++-v3/include/profile/deque34
-rw-r--r--libstdc++-v3/include/profile/forward_list10
-rw-r--r--libstdc++-v3/include/profile/impl/profiler.h37
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_algos.h37
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_container_size.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_hash_func.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_hashtable_size.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_list_to_slist.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_list_to_vector.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_node.h47
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_state.h48
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_trace.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_vector_size.h41
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_vector_to_list.h41
-rw-r--r--libstdc++-v3/include/profile/iterator_tracker.h4
-rw-r--r--libstdc++-v3/include/profile/list57
-rw-r--r--libstdc++-v3/include/profile/map22
-rw-r--r--libstdc++-v3/include/profile/map.h70
-rw-r--r--libstdc++-v3/include/profile/multimap.h47
-rw-r--r--libstdc++-v3/include/profile/multiset.h35
-rw-r--r--libstdc++-v3/include/profile/set22
-rw-r--r--libstdc++-v3/include/profile/set.h35
-rw-r--r--libstdc++-v3/include/profile/unordered_map203
-rw-r--r--libstdc++-v3/include/profile/unordered_set228
-rw-r--r--libstdc++-v3/include/profile/vector115
-rw-r--r--libstdc++-v3/include/std/array102
-rw-r--r--libstdc++-v3/include/std/atomic459
-rw-r--r--libstdc++-v3/include/std/bitset365
-rw-r--r--libstdc++-v3/include/std/chrono143
-rw-r--r--libstdc++-v3/include/std/complex64
-rw-r--r--libstdc++-v3/include/std/condition_variable73
-rw-r--r--libstdc++-v3/include/std/fstream84
-rw-r--r--libstdc++-v3/include/std/functional359
-rw-r--r--libstdc++-v3/include/std/future544
-rw-r--r--libstdc++-v3/include/std/iomanip111
-rw-r--r--libstdc++-v3/include/std/istream304
-rw-r--r--libstdc++-v3/include/std/limits656
-rw-r--r--libstdc++-v3/include/std/memory1
-rw-r--r--libstdc++-v3/include/std/mutex260
-rw-r--r--libstdc++-v3/include/std/ostream199
-rw-r--r--libstdc++-v3/include/std/ratio353
-rw-r--r--libstdc++-v3/include/std/scoped_allocator387
-rw-r--r--libstdc++-v3/include/std/sstream51
-rw-r--r--libstdc++-v3/include/std/stdexcept22
-rw-r--r--libstdc++-v3/include/std/streambuf125
-rw-r--r--libstdc++-v3/include/std/system_error108
-rw-r--r--libstdc++-v3/include/std/thread57
-rw-r--r--libstdc++-v3/include/std/tuple913
-rw-r--r--libstdc++-v3/include/std/type_traits1497
-rw-r--r--libstdc++-v3/include/std/typeindex20
-rw-r--r--libstdc++-v3/include/std/unordered_map3
-rw-r--r--libstdc++-v3/include/std/unordered_set3
-rw-r--r--libstdc++-v3/include/std/utility58
-rw-r--r--libstdc++-v3/include/std/valarray177
-rw-r--r--libstdc++-v3/include/tr1/cmath207
-rw-r--r--libstdc++-v3/include/tr1/complex9
-rw-r--r--libstdc++-v3/include/tr1/exp_integral.tcc2
-rw-r--r--libstdc++-v3/include/tr1/functional186
-rw-r--r--libstdc++-v3/include/tr1/hashtable.h4
-rw-r--r--libstdc++-v3/include/tr1/poly_hermite.tcc4
-rw-r--r--libstdc++-v3/include/tr1/shared_ptr.h14
-rw-r--r--libstdc++-v3/include/tr1/type_traits9
-rw-r--r--libstdc++-v3/include/tr2/bool_set320
-rw-r--r--libstdc++-v3/include/tr2/bool_set.tcc277
-rw-r--r--libstdc++-v3/include/tr2/dynamic_bitset1472
-rw-r--r--libstdc++-v3/include/tr2/ratio59
-rw-r--r--libstdc++-v3/include/tr2/type_traits106
-rw-r--r--libstdc++-v3/libsupc++/Makefile.am108
-rw-r--r--libstdc++-v3/libsupc++/Makefile.in108
-rw-r--r--libstdc++-v3/libsupc++/atomic_lockfree_defines.h63
-rw-r--r--libstdc++-v3/libsupc++/bad_alloc.cc6
-rw-r--r--libstdc++-v3/libsupc++/bad_cast.cc6
-rw-r--r--libstdc++-v3/libsupc++/bad_typeid.cc6
-rw-r--r--libstdc++-v3/libsupc++/cxxabi.h95
-rw-r--r--libstdc++-v3/libsupc++/del_op.cc5
-rw-r--r--libstdc++-v3/libsupc++/del_opnt.cc8
-rw-r--r--libstdc++-v3/libsupc++/del_opv.cc5
-rw-r--r--libstdc++-v3/libsupc++/del_opvnt.cc5
-rw-r--r--libstdc++-v3/libsupc++/eh_alloc.cc10
-rw-r--r--libstdc++-v3/libsupc++/eh_arm.cc105
-rw-r--r--libstdc++-v3/libsupc++/eh_call.cc5
-rw-r--r--libstdc++-v3/libsupc++/eh_catch.cc6
-rw-r--r--libstdc++-v3/libsupc++/eh_exception.cc10
-rw-r--r--libstdc++-v3/libsupc++/eh_globals.cc16
-rw-r--r--libstdc++-v3/libsupc++/eh_personality.cc58
-rw-r--r--libstdc++-v3/libsupc++/eh_ptr.cc55
-rw-r--r--libstdc++-v3/libsupc++/eh_throw.cc14
-rw-r--r--libstdc++-v3/libsupc++/eh_tm.cc126
-rw-r--r--libstdc++-v3/libsupc++/eh_type.cc4
-rw-r--r--libstdc++-v3/libsupc++/exception24
-rw-r--r--libstdc++-v3/libsupc++/exception_ptr.h67
-rw-r--r--libstdc++-v3/libsupc++/guard.cc95
-rw-r--r--libstdc++-v3/libsupc++/initializer_list29
-rw-r--r--libstdc++-v3/libsupc++/nested_exception.cc4
-rw-r--r--libstdc++-v3/libsupc++/nested_exception.h6
-rw-r--r--libstdc++-v3/libsupc++/new36
-rw-r--r--libstdc++-v3/libsupc++/new_op.cc2
-rw-r--r--libstdc++-v3/libsupc++/new_opnt.cc2
-rw-r--r--libstdc++-v3/libsupc++/new_opv.cc5
-rw-r--r--libstdc++-v3/libsupc++/new_opvnt.cc6
-rw-r--r--libstdc++-v3/libsupc++/pure.cc9
-rw-r--r--libstdc++-v3/libsupc++/tinfo.cc5
-rw-r--r--libstdc++-v3/libsupc++/typeinfo40
-rw-r--r--libstdc++-v3/libsupc++/unwind-cxx.h51
-rw-r--r--libstdc++-v3/po/Makefile.in16
-rw-r--r--libstdc++-v3/python/Makefile.am17
-rw-r--r--libstdc++-v3/python/Makefile.in19
-rw-r--r--libstdc++-v3/python/libstdcxx/v6/printers.py462
-rwxr-xr-xlibstdc++-v3/scripts/create_testsuite_files2
-rwxr-xr-xlibstdc++-v3/scripts/extract_symvers.in3
-rw-r--r--libstdc++-v3/scripts/extract_symvers.pl5
-rwxr-xr-xlibstdc++-v3/scripts/make_graph.py444
-rwxr-xr-xlibstdc++-v3/scripts/make_graphs.py160
-rw-r--r--libstdc++-v3/scripts/run_doxygen27
-rw-r--r--libstdc++-v3/src/Makefile.am574
-rw-r--r--libstdc++-v3/src/Makefile.in728
-rw-r--r--libstdc++-v3/src/atomic.cc146
-rw-r--r--libstdc++-v3/src/c++11/Makefile.am122
-rw-r--r--libstdc++-v3/src/c++11/Makefile.in626
-rw-r--r--libstdc++-v3/src/c++11/chrono.cc83
-rw-r--r--libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc161
-rw-r--r--libstdc++-v3/src/c++11/compatibility-c++0x.cc124
-rw-r--r--libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc97
-rw-r--r--libstdc++-v3/src/c++11/condition_variable.cc87
-rw-r--r--libstdc++-v3/src/c++11/debug.cc958
-rw-r--r--libstdc++-v3/src/c++11/fstream-inst.cc (renamed from libstdc++-v3/src/fstream-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++11/functexcept.cc (renamed from libstdc++-v3/src/functexcept.cc)0
-rw-r--r--libstdc++-v3/src/c++11/functional.cc (renamed from libstdc++-v3/src/functional.cc)0
-rw-r--r--libstdc++-v3/src/c++11/future.cc90
-rw-r--r--libstdc++-v3/src/c++11/hash_c++0x.cc56
-rw-r--r--libstdc++-v3/src/c++11/hashtable_c++0x.cc34
-rw-r--r--libstdc++-v3/src/c++11/limits.cc601
-rw-r--r--libstdc++-v3/src/c++11/mutex.cc97
-rw-r--r--libstdc++-v3/src/c++11/placeholders.cc (renamed from libstdc++-v3/src/placeholders.cc)0
-rw-r--r--libstdc++-v3/src/c++11/regex.cc45
-rw-r--r--libstdc++-v3/src/c++11/shared_ptr.cc39
-rw-r--r--libstdc++-v3/src/c++11/string-inst.cc (renamed from libstdc++-v3/src/string-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++11/system_error.cc103
-rw-r--r--libstdc++-v3/src/c++11/thread.cc147
-rw-r--r--libstdc++-v3/src/c++11/wstring-inst.cc (renamed from libstdc++-v3/src/wstring-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/Makefile.am226
-rw-r--r--libstdc++-v3/src/c++98/Makefile.in743
-rw-r--r--libstdc++-v3/src/c++98/allocator-inst.cc (renamed from libstdc++-v3/src/allocator-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/bitmap_allocator.cc (renamed from libstdc++-v3/src/bitmap_allocator.cc)0
-rw-r--r--libstdc++-v3/src/c++98/codecvt.cc (renamed from libstdc++-v3/src/codecvt.cc)0
-rw-r--r--libstdc++-v3/src/c++98/compatibility-debug_list-2.cc (renamed from libstdc++-v3/src/compatibility-debug_list-2.cc)0
-rw-r--r--libstdc++-v3/src/c++98/compatibility-debug_list.cc (renamed from libstdc++-v3/src/compatibility-debug_list.cc)0
-rw-r--r--libstdc++-v3/src/c++98/compatibility-ldbl.cc80
-rw-r--r--libstdc++-v3/src/c++98/compatibility-list-2.cc117
-rw-r--r--libstdc++-v3/src/c++98/compatibility-list.cc146
-rw-r--r--libstdc++-v3/src/c++98/compatibility-parallel_list-2.cc (renamed from libstdc++-v3/src/compatibility-parallel_list-2.cc)0
-rw-r--r--libstdc++-v3/src/c++98/compatibility-parallel_list.cc (renamed from libstdc++-v3/src/compatibility-parallel_list.cc)0
-rw-r--r--libstdc++-v3/src/c++98/compatibility.cc554
-rw-r--r--libstdc++-v3/src/c++98/complex_io.cc (renamed from libstdc++-v3/src/complex_io.cc)0
-rw-r--r--libstdc++-v3/src/c++98/concept-inst.cc (renamed from libstdc++-v3/src/concept-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/ctype.cc134
-rw-r--r--libstdc++-v3/src/c++98/ext-inst.cc (renamed from libstdc++-v3/src/ext-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/globals_io.cc (renamed from libstdc++-v3/src/globals_io.cc)0
-rw-r--r--libstdc++-v3/src/c++98/hash-long-double-tr1-aux.cc56
-rw-r--r--libstdc++-v3/src/c++98/hash_tr1.cc58
-rw-r--r--libstdc++-v3/src/c++98/hashtable_tr1.cc33
-rw-r--r--libstdc++-v3/src/c++98/ios-inst.cc (renamed from libstdc++-v3/src/ios-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/ios.cc (renamed from libstdc++-v3/src/ios.cc)0
-rw-r--r--libstdc++-v3/src/c++98/ios_failure.cc (renamed from libstdc++-v3/src/ios_failure.cc)0
-rw-r--r--libstdc++-v3/src/c++98/ios_init.cc (renamed from libstdc++-v3/src/ios_init.cc)0
-rw-r--r--libstdc++-v3/src/c++98/ios_locale.cc (renamed from libstdc++-v3/src/ios_locale.cc)0
-rw-r--r--libstdc++-v3/src/c++98/iostream-inst.cc (renamed from libstdc++-v3/src/iostream-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/istream-inst.cc (renamed from libstdc++-v3/src/istream-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/istream.cc687
-rw-r--r--libstdc++-v3/src/c++98/list.cc147
-rw-r--r--libstdc++-v3/src/c++98/locale-inst.cc (renamed from libstdc++-v3/src/locale-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/locale.cc444
-rw-r--r--libstdc++-v3/src/c++98/locale_facets.cc (renamed from libstdc++-v3/src/locale_facets.cc)0
-rw-r--r--libstdc++-v3/src/c++98/locale_init.cc (renamed from libstdc++-v3/src/locale_init.cc)0
-rw-r--r--libstdc++-v3/src/c++98/localename.cc (renamed from libstdc++-v3/src/localename.cc)0
-rw-r--r--libstdc++-v3/src/c++98/math_stubs_float.cc (renamed from libstdc++-v3/src/math_stubs_float.cc)0
-rw-r--r--libstdc++-v3/src/c++98/math_stubs_long_double.cc (renamed from libstdc++-v3/src/math_stubs_long_double.cc)0
-rw-r--r--libstdc++-v3/src/c++98/misc-inst.cc (renamed from libstdc++-v3/src/misc-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/mt_allocator.cc (renamed from libstdc++-v3/src/mt_allocator.cc)0
-rw-r--r--libstdc++-v3/src/c++98/ostream-inst.cc (renamed from libstdc++-v3/src/ostream-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/parallel_settings.cc (renamed from libstdc++-v3/src/parallel_settings.cc)0
-rw-r--r--libstdc++-v3/src/c++98/pool_allocator.cc (renamed from libstdc++-v3/src/pool_allocator.cc)0
-rw-r--r--libstdc++-v3/src/c++98/sstream-inst.cc (renamed from libstdc++-v3/src/sstream-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/stdexcept.cc91
-rw-r--r--libstdc++-v3/src/c++98/streambuf-inst.cc (renamed from libstdc++-v3/src/streambuf-inst.cc)0
-rw-r--r--libstdc++-v3/src/c++98/streambuf.cc (renamed from libstdc++-v3/src/streambuf.cc)0
-rw-r--r--libstdc++-v3/src/c++98/strstream.cc (renamed from libstdc++-v3/src/strstream.cc)0
-rw-r--r--libstdc++-v3/src/c++98/tree.cc466
-rw-r--r--libstdc++-v3/src/c++98/valarray.cc108
-rw-r--r--libstdc++-v3/src/c++98/wlocale-inst.cc (renamed from libstdc++-v3/src/wlocale-inst.cc)0
-rw-r--r--libstdc++-v3/src/chrono.cc83
-rw-r--r--libstdc++-v3/src/compatibility-c++0x.cc84
-rw-r--r--libstdc++-v3/src/compatibility-ldbl.cc87
-rw-r--r--libstdc++-v3/src/compatibility-list-2.cc111
-rw-r--r--libstdc++-v3/src/compatibility-list.cc146
-rw-r--r--libstdc++-v3/src/compatibility.cc554
-rw-r--r--libstdc++-v3/src/condition_variable.cc93
-rw-r--r--libstdc++-v3/src/ctype.cc139
-rw-r--r--libstdc++-v3/src/debug.cc792
-rw-r--r--libstdc++-v3/src/future.cc112
-rw-r--r--libstdc++-v3/src/hash-long-double-aux.cc50
-rw-r--r--libstdc++-v3/src/hash_c++0x.cc34
-rw-r--r--libstdc++-v3/src/hash_tr1.cc58
-rw-r--r--libstdc++-v3/src/hashtable_c++0x.cc34
-rw-r--r--libstdc++-v3/src/hashtable_tr1.cc33
-rw-r--r--libstdc++-v3/src/istream.cc690
-rw-r--r--libstdc++-v3/src/limits.cc551
-rw-r--r--libstdc++-v3/src/list.cc144
-rw-r--r--libstdc++-v3/src/locale.cc444
-rw-r--r--libstdc++-v3/src/mutex.cc121
-rw-r--r--libstdc++-v3/src/regex.cc38
-rw-r--r--libstdc++-v3/src/shared/hashtable-aux.cc (renamed from libstdc++-v3/src/hashtable-aux.cc)0
-rw-r--r--libstdc++-v3/src/shared_ptr.cc39
-rw-r--r--libstdc++-v3/src/stdexcept.cc91
-rw-r--r--libstdc++-v3/src/system_error.cc106
-rw-r--r--libstdc++-v3/src/thread.cc104
-rw-r--r--libstdc++-v3/src/tree.cc454
-rw-r--r--libstdc++-v3/src/valarray.cc109
-rw-r--r--libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc22
-rw-r--r--libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc33
-rw-r--r--libstdc++-v3/testsuite/18_support/50594.cc72
-rw-r--r--libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc26
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc24
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/18_support/nested_exception/51438.cc33
-rw-r--r--libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc6
-rw-r--r--libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc6
-rw-r--r--libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc28
-rw-r--r--libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc7
-rw-r--r--libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc6
-rw-r--r--libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc8
-rw-r--r--libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc90
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/members/construct.cc79
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/members/destroy.cc84
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/members/max_size.cc67
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/members/select.cc68
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs.cc54
-rw-r--r--libstdc++-v3/testsuite/20_util/bind/48698.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc65
-rw-r--r--libstdc++-v3/testsuite/20_util/bind/ref_neg.cc20
-rw-r--r--libstdc++-v3/testsuite/20_util/bind/socket.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/arithmetic/dr2020.cc66
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc11
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc5
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/forward/1_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/20_util/forward/c_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/forward/f_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/55320.cc46
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/addressof.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc44
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc57
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc56
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc61
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/is_assignable/requirements/explicit_instantiation.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/is_assignable/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_assignable/value.cc675
-rw-r--r--libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_compound/value.cc57
-rw-r--r--libstdc++-v3/testsuite/20_util/is_constructible/51185.cc39
-rw-r--r--libstdc++-v3/testsuite/20_util/is_constructible/value-2.cc821
-rw-r--r--libstdc++-v3/testsuite/20_util/is_convertible/value.cc6
-rw-r--r--libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_copy_assignable/value.cc66
-rw-r--r--libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_copy_constructible/value.cc73
-rw-r--r--libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_default_constructible/value.cc141
-rw-r--r--libstdc++-v3/testsuite/20_util/is_destructible/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_destructible/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_destructible/value.cc100
-rw-r--r--libstdc++-v3/testsuite/20_util/is_floating_point/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_floating_point/requirements/typedefs.cc35
-rw-r--r--libstdc++-v3/testsuite/20_util/is_floating_point/value.cc68
-rw-r--r--libstdc++-v3/testsuite/20_util/is_function/24808.cc38
-rw-r--r--libstdc++-v3/testsuite/20_util/is_function/35637.cc32
-rw-r--r--libstdc++-v3/testsuite/20_util/is_function/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_function/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_function/value.cc52
-rw-r--r--libstdc++-v3/testsuite/20_util/is_fundamental/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_fundamental/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_fundamental/value.cc57
-rw-r--r--libstdc++-v3/testsuite/20_util/is_integral/value.cc12
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_function_pointer/value.cc58
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_object_pointer/value.cc58
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_member_pointer/value.cc53
-rw-r--r--libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_move_assignable/value.cc66
-rw-r--r--libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_move_constructible/value.cc73
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/explicit_instantiation.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_assignable/value.cc58
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc6
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/value.cc75
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/value.cc74
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/value.cc74
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/value.cc75
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/value.cc73
-rw-r--r--libstdc++-v3/testsuite/20_util/is_object/24808.cc38
-rw-r--r--libstdc++-v3/testsuite/20_util/is_object/requirements/explicit_instantiation.cc29
-rw-r--r--libstdc++-v3/testsuite/20_util/is_object/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_object/value.cc47
-rw-r--r--libstdc++-v3/testsuite/20_util/is_signed/value.cc12
-rw-r--r--libstdc++-v3/testsuite/20_util/is_unsigned/value.cc12
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc17
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc17
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc14
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc17
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc17
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc12
-rw-r--r--libstdc++-v3/testsuite/20_util/monotonic_clock/constexpr_data.cc52
-rw-r--r--libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc119
-rw-r--r--libstdc++-v3/testsuite/20_util/move_if_noexcept/requirements/explicit_instantiation.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc26
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/cons/noexcept_move_construct.cc42
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/constexpr_get.cc28
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/get.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/make_pair/constexpr.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/noexcept_move_assign.cc42
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/noexcept_swap.cc81
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/piecewise2.cc60
-rw-r--r--libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to.cc54
-rw-r--r--libstdc++-v3/testsuite/20_util/pointer_traits/requirements/explicit_instantiation.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc46
-rw-r--r--libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc13
-rw-r--r--libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc33
-rw-r--r--libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc21
-rw-r--r--libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc11
-rw-r--r--libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc16
-rw-r--r--libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc103
-rw-r--r--libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc105
-rw-r--r--libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc47
-rw-r--r--libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc67
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc65
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc44
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc28
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc35
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc12
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc_min.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc52
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc52
-rw-r--r--libstdc++-v3/testsuite/20_util/system_clock/1.cc7
-rw-r--r--libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/time_point/1.cc6
-rw-r--r--libstdc++-v3/testsuite/20_util/time_point/nonmember/constexpr.cc45
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/51365.cc27
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc169
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc63
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc60
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc47
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc59
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr.cc87
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/tuple_cat.cc131
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cv_tuple_element.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size.cc45
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/moveable2.cc8
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc59
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/noexcept_swap.cc116
-rw-r--r--libstdc++-v3/testsuite/20_util/underlying_type/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-1.cc42
-rw-r--r--libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-2.cc44
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/54351.cc70
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/comparison/dr1401.cc65
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc47
-rw-r--r--libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc108
-rw-r--r--libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc10
-rw-r--r--libstdc++-v3/testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc3
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc3
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/char/pop_back.cc41
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/wchar_t/pop_back.cc41
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc11
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc11
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc37
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc31
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc33
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc6
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc7
-rw-r--r--libstdc++-v3/testsuite/21_strings/debug/shrink_to_fit.cc39
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt_byname/50714.cc95
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype_base/53678.cc28
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc7
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc55
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc8
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/capacity/constexpr_functions.cc53
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc51
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc51
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/capacity/size.cc51
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater_or_equal.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/comparison_operators/less.cc42
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/comparison_operators/less_or_equal.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/comparison_operators/not_equal.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/cons/aggregate_initialization.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/54388.cc42
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/at_out_of_range.cc54
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/back.cc48
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_element_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/data.cc48
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/front.cc48
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/iterators/end_is_one_past.cc42
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_functions.cc54
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/requirements/contiguous.cc43
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/requirements/member_swap.cc46
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/requirements/zero_sized_arrays.cc59
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap.cc46
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc49
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc46
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr-2.cc36
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/shrink_to_fit.cc51
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/52799.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc50
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/modifiers/push_front/49836.cc50
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc8
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc94
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/1.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/2.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/3.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/52799.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/1.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/4.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/42352.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/5.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5_c++0x.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc42
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/operations/count.cc106
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5_c++0x.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc106
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5_c++0x.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc104
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5_c++0x.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/operations/count.cc104
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5_c++0x.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc69
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_compare_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_range_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_erased_local_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_local_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc39
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc116
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc47
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/operations/count.cc108
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc37
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53339.cc36
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/55043.cc69
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_compare_neg.cc35
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_range_neg.cc35
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_erased_local_iterator_neg.cc35
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_iterator_neg.cc35
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_local_iterator_neg.cc35
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc36
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/2.cc90
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc72
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/51866.cc87
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc59
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc101
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc110
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc48
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/count.cc108
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/53339.cc36
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc73
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc45
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_compare_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_range_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_erased_local_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_local_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc36
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/2.cc89
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc20
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc39
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/51866.cc87
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/52476.cc77
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/53115.cc101
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/hash_policy.cc69
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc19
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc15
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc88
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc48
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/count.cc106
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/55043.cc73
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_compare_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_range_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_erased_local_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_local_iterator_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc36
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc39
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/load_factor.cc58
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc62
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/insert/hash_policy.cc113
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc41
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc77
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc89
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc67
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc106
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc37
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/52591.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc57
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc61
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc46
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc61
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc76
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc61
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable2.cc45
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable2.cc57
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc61
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc43
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/alloc_prop.cc89
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc42
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/shrink_to_fit.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/2.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/2.cc63
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/52799.cc28
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc77
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc50
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc12
-rw-r--r--libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc27
-rw-r--r--libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc29
-rw-r--r--libstdc++-v3/testsuite/24_iterators/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/34595.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc52
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/fill/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/heap/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc8
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc6
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/max/1.cc8
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/min/1.cc8
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/minmax/1.cc8
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc16
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/partition/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc8
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc38
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc37
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc16
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc6
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc6
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc12
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc8
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/sort/35588.cc3
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc4
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc4
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc30
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc43
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc4
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/swap/noexcept.cc26
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc10
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc6
-rw-r--r--libstdc++-v3/testsuite/26_numerics/cmath/51083.cc62
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/50880.cc53
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/51083.cc54
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/cons/48760_c++0x.cc59
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/53503.cc21
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc62
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc21
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/values.cc50
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc52
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc58
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc16
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc52
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/values.cc51
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/explicit_instantiation/1.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc60
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc16
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc58
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc30
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc58
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc16
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc55
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/values.cc51
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/explicit_instantiation/1.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc58
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc16
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc58
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc16
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/values.cc50
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/explicit_instantiation/1.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/explicit_instantiation/1.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc40
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/swap.cc37
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc1
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc11
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc11
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/51288.cc48
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc48
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/51288.cc49
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc31
-rw-r--r--libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc31
-rw-r--r--libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc12
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc12
-rw-r--r--libstdc++-v3/testsuite/28_regex/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc42
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc6
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc91
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc29
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc71
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc26
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc11
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc95
-rw-r--r--libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/42819.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/49668.cc62
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/54297.cc51
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/any.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/async.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/launch.cc94
-rw-r--r--libstdc++-v3/testsuite/30_threads/async/sync.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/call_once/39909.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/call_once/49668.cc51
-rw-r--r--libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc62
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc10
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc50
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc80
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/53830.cc68
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc10
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/requirements/typedefs.cc30
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/cons/move.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/45133.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/get.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/get2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/share.cc73
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/valid.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/wait.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc10
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc10
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/lock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/lock/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/lock/3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/lock/4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc9
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc51
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc56
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc2.cc40
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc34
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc9
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/requirements/typedefs.cc31
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc32
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc42
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/alloc_min.cc40
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/move.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc12
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc16
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/members/swap.cc11
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/uses_allocator.cc32
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc14
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc14
-rw-r--r--libstdc++-v3/testsuite/30_threads/this_thread/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/this_thread/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/this_thread/3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/this_thread/4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/adl.cc39
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc51
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/5.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/6.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/7.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/8.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/9.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/members/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/members/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/members/3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/members/4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/members/5.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc10
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc45
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/swap/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/try_lock/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/try_lock/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/try_lock/3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/try_lock/4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc6
-rw-r--r--libstdc++-v3/testsuite/Makefile.am47
-rw-r--r--libstdc++-v3/testsuite/Makefile.in61
-rw-r--r--libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc2
-rw-r--r--libstdc++-v3/testsuite/backward/hash_set/49060.cc35
-rw-r--r--libstdc++-v3/testsuite/data/make_graph_htmls.xml60
-rw-r--r--libstdc++-v3/testsuite/data/make_graph_test_infos.xml177
-rw-r--r--libstdc++-v3/testsuite/decimal/mixed-mode-arith_neg.cc139
-rw-r--r--libstdc++-v3/testsuite/decimal/mixed-mode-cmp_neg.cc105
-rw-r--r--libstdc++-v3/testsuite/decimal/mixed-mode_neg.cc206
-rw-r--r--libstdc++-v3/testsuite/decimal/operator_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/decimal/pr54036-1.cc70
-rw-r--r--libstdc++-v3/testsuite/decimal/pr54036-2.cc70
-rw-r--r--libstdc++-v3/testsuite/decimal/pr54036-3.cc70
-rw-r--r--libstdc++-v3/testsuite/ext/codecvt/char-1.cc13
-rw-r--r--libstdc++-v3/testsuite/ext/codecvt/char-2.cc13
-rw-r--r--libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc39
-rw-r--r--libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc16
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc12
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc24
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc10
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/hash_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc189
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc189
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc54
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc54
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc116
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc116
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc142
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc144
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc144
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc131
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc (renamed from libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc)0
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc131
-rw-r--r--libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc27
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/modifiers/char/pop_back.cc45
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc45
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc11
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc11
-rw-r--r--libstdc++-v3/testsuite/lib/dg-options.exp29
-rw-r--r--libstdc++-v3/testsuite/lib/gdb-test.exp217
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp316
-rw-r--r--libstdc++-v3/testsuite/lib/prune.exp8
-rw-r--r--libstdc++-v3/testsuite/libstdc++-abi/abi.exp4
-rw-r--r--libstdc++-v3/testsuite/libstdc++-dg/conformance.exp1
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/48362.cc36
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc100
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc92
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp51
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc83
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc92
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/copy_construct/unordered_set.cc43
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/insert/unordered_set.cc42
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/insert_erase/41975.cc183
-rw-r--r--libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc2
-rw-r--r--libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc2
-rw-r--r--libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc8
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/30_threads/future/polling.cc4
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_find.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_find_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_find.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_insert.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/all_text_find.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/hash_int_erase_mem.cc118
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc118
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_int_find.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find.hpp (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_large.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_small.cc42
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc42
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert.hpp (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing.hpp)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_large.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem.hpp (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage.hpp)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_large.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_small.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_small.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_large.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc41
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push_pop.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify.hpp (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.hpp)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down.cc37
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc37
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up.cc37
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc37
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem.cc122
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc119
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics.cc105
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc105
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join.cc107
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc107
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find.cc (renamed from libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc13
-rw-r--r--libstdc++-v3/testsuite/tr1/3_function_objects/bind/cv_quals.cc53
-rw-r--r--libstdc++-v3/testsuite/tr1/3_function_objects/bind/mixed.cc139
-rw-r--r--libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc41
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/51083.cc62
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc63
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc51
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/51083.cc54
-rw-r--r--libstdc++-v3/testsuite/tr2/bases/requirements/explicit_instantiation.cc32
-rw-r--r--libstdc++-v3/testsuite/tr2/bases/requirements/typedefs.cc31
-rw-r--r--libstdc++-v3/testsuite/tr2/bases/value.cc97
-rw-r--r--libstdc++-v3/testsuite/tr2/direct_bases/requirements/explicit_instantiation.cc32
-rw-r--r--libstdc++-v3/testsuite/tr2/direct_bases/requirements/typedefs.cc31
-rw-r--r--libstdc++-v3/testsuite/tr2/direct_bases/value.cc91
-rw-r--r--libstdc++-v3/testsuite/tr2/headers/all.cc24
-rw-r--r--libstdc++-v3/testsuite/tr2/headers/using_namespace_std_tr2.cc26
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp296
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp6
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp10
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp12
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp20
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp60
-rw-r--r--libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp12
-rw-r--r--libstdc++-v3/testsuite/util/debug/checks.h44
-rw-r--r--libstdc++-v3/testsuite/util/debug/unordered_checks.h190
-rw-r--r--libstdc++-v3/testsuite/util/exception/safety.h126
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp6
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_map.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_multimap.hpp8
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp20
-rw-r--r--libstdc++-v3/testsuite/util/native_type/native_set.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp56
-rw-r--r--libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/common_type.hpp33
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h2
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc61
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp28
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc14
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp25
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp50
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp10
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp12
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc109
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_allocator.h252
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_common_types.h48
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_container_traits.h5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_containers.h2
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_error.h14
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_io.h2
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_random.h181
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_rvalref.h17
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_tr1.h446
2479 files changed, 139314 insertions, 77770 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index a2b34f5768..eb4207202d 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,1361 +1,1695 @@
-2011-10-26 Release Manager
+2013-04-11 Release Manager
- * GCC 4.6.2 released.
+ * GCC 4.7.3 released.
-2011-10-05 Benjamin Kosnik <bkoz@redhat.com
- Jonathan Wakely <jwakely.gcc@gmail.com>
+2013-03-30 Gerald Pfeifer <gerald@pfeifer.com>
- PR libstdc++/48698
- * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Set libtool_VERSION here.
- * configure.ac: Move AC_SUBST of libtool_VERSION past call to
- GLIBCXX_ENABLE_SYMVERS.
- * configure: Regenerate.
- * include/bits/c++config: Use __7 as versioned namespace name.
- * config/abi/pre/gnu-versioned-namespace.ver: Change mangling as
- per above.
- * include/c_global/cwchar: Adjust nested namespaces.
- * testsuite/20_util/bind/48698.cc: Add test case.
- * testsuite/ext/profile/mutex_extensions_neg.cc: Change line number.
+ * doc/xml/manual/allocator.xml: Adjust link to Dr.Dobb's article.q
-2011-09-30 François Dumont <fdumont@gcc.gnu.org>
+ * doc/xml/manual/appendix_contributing.xml: Adjust link to GNU
+ Coding Standards.
- * include/debug/vector (vector<>::erase(iterator, iterator)): Check
- iterators equality using normal iterators.
- * include/debug/deque (deque<>::erase(iterator, iterator)): Likewise.
+ * doc/xml/manual/debug.xml: Adjust link for ThreadSanitizer.
-2011-09-30 Paolo Carlini <paolo.carlini@oracle.com>
+ * doc/xml/manual/debug_mode.xml: Adjust link for SafeSTL.
- PR libstdc++/50529
- * include/bits/vector.tcc (vector<>::erase(iterator, iterator)):
- Fix to do nothing if the range is empty.
- * include/bits/stl_bvector.h: Likewise.
- * include/bits/deque.tcc: Likewise.
- * include/debug/vector: Adjust.
- * include/debug/deque: Likewise.
- * testsuite/23_containers/vector/modifiers/erase/50529.cc: New.
- * testsuite/23_containers/deque/modifiers/erase/50529.cc: Likewise.
- * testsuite/23_containers/deque/modifiers/erase/3.cc: Adjust.
+ * doc/xml/manual/documentation_hacking.xml: Adjust Doxygen link.
-2011-09-27 Paolo Carlini <paolo.carlini@oracle.com>
+ * doc/xml/manual/messages.xml: Adjust link to Java API specs.
- PR libstdc++/49559
- * include/bits/stl_algo.h (__move_merge_backward): Remove.
- (__move_merge_adaptive, __move_merge_adaptive_backward): New.
- (__merge_adaptive): Use the latter two.
- (__rotate_adaptive): Avoid self move-assignment.
- * include/bits/stl_algobase.h (move_backward): Fix comment.
- * testsuite/25_algorithms/stable_sort/49559.cc: New.
- * testsuite/25_algorithms/inplace_merge/49559.cc: Likewise.
- * testsuite/25_algorithms/inplace_merge/moveable.cc: Extend.
- * testsuite/25_algorithms/inplace_merge/moveable2.cc: Likewise.
- * testsuite/util/testsuite_rvalref.h (rvalstruct::operator=
- (rvalstruct&&)): Check for self move-assignment.
+ * doc/xml/manual/policy_data_structures: Remove direct link to
+ IBM Haifa Research Labs.
-2011-09-24 John Salmon <john.salmon@deshaw.com>
+ * doc/xml/manual/policy_data_structures_biblio.xml: Adjust links
+ for biblio.maverik_lowerbounds and biblio.nelson96stlpq.
- PR libstdc++/50510
- * include/bits/random.tcc (seed_seq::generate): Fix computation.
+ * doc/xml/manual/profile_mode.xml: Adjust two links to acm.org
+ papers.
-2011-09-24 John Salmon <john.salmon@deshaw.com>
+ * doc/xml/manual/shared_ptr.xml: Use canonical address for
+ www.boost.org.
- PR libstdc++/50509
- * include/bits/random.tcc (seed_seq::generate): Fix computation.
+2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-09-02 Paolo Carlini <paolo.carlini@oracle.com>
+ PR libstdc++/56468
+ * libsupc++/exception_ptr.h (type_info): Declare.
- * include/bits/hashtable.h (_Hashtable<>::_Hashtable(_Hashtable&&)):
- rearrange to consistently update __ht._M_rehash_policy before using
- _M_next_bkt on it.
+2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-09-02 Paolo Carlini <paolo.carlini@oracle.com>
- Marc Glisse <marc.glisse@normalesup.org>
+ PR libstdc++/56002
+ * include/std/mutex (lock_guard, unique_lock, lock): Define without
+ depending on _GLIBCXX_HAS_GTHREADS.
+ * testsuite/30_threads/lock_guard/cons/1.cc: Run on all targets.
- PR libstdc++/50268
- * include/std/bitset (struct _Sanitize_val): Add.
- (bitset<>::bitset(unsigned long long)): Fix.
- * testsuite/23_containers/bitset/cons/50268.cc: New.
+2013-03-09 François Dumont <fdumont@gcc.gnu.org>
-2011-07-31 Paolo Carlini <paolo.carlini@oracle.com>
+ * include/bits/vector.tcc (vector<>operator=(const vector<>&):
+ Reset pointers after deallocation when memory can be reused.
+ * testsuite/23_containers/vector/allocator/minimal.cc: Insert
+ elements to really challenge C++11 allocator integration.
+ * testsuite/23_containers/vector/allocator/copy.cc: Likewise.
+ * testsuite/23_containers/vector/allocator/copy_assign.cc:
+ Likewise.
+ * testsuite/23_containers/vector/allocator/move_assign.cc:
+ Likewise.
+ * testsuite/23_containers/vector/allocator/swap.cc: Likewise and
+ swap vector back before checks on memory/personality mapping are
+ performed.
+
+2013-02-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/56012
+ * include/bits/atomic_base.h (atomic_flag): Fix narrowing conversion.
+ * testsuite/29_atomics/atomic/operators/56012.cc: New.
+
+ PR libstdc++/56011
+ * include/std/atomic (atomic<bool>::operator=(bool) volatile): Add
+ missing overload.
+ * testsuite/29_atomics/atomic/operators/56011.cc: New.
+
+2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/streambuf (basic_streambuf): Fix unclosed Doxygen group.
+
+2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/55043
+ * include/bits/alloc_traits.h (allocator_traits::construct): Disable
+ unless construction would be well-formed.
+ (__allow_copy_cons, __check_copy_constructible): Define.
+ * include/bits/unordered_map.h (__check_copy_constructible): Use as
+ base class so copy constructor will be deleted if appropriate.
+ * include/bits/unordered_set.h: Likewise.
+ * include/std/unordered_set: Include alloc_traits.h.
+ * include/std/unordered_set: Likewise.
+ * include/debug/unordered_map.h: Default copy and move constructors.
+ * include/debug/unordered_set.h: Likewise.
+ * testsuite/23_containers/unordered_map/55043.cc: Fix test.
+ * testsuite/23_containers/unordered_multimap/55043.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/55043.cc: Likewise.
+ * testsuite/23_containers/unordered_set/55043.cc: Likewise.
+ * testsuite/23_containers/unordered_map/requirements/53339.cc: XFAIL,
+ cannot support incomplete types.
+ * testsuite/23_containers/unordered_multimap/requirements/53339.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust
+ dg-error line number.
- * include/parallel/algo.h: Trivial uglification fixes.
+2013-02-18 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-07-31 Paolo Carlini <paolo.carlini@oracle.com>
+ * include/std/functional (mem_fn): Qualify to prevent ADL.
+ * testsuite/20_util/function_objects/mem_fn/adl.cc: New.
- PR libstdc++/49925
- * include/bits/shared_ptr.h (make_shared): Qualify allocate_shared
- with std::.
- * include/bits/shared_ptr_base.h (__make_shared): Likewise.
+2013-02-18 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-07-27 Jeffrey Yasskin <jyasskin@google.com>
+ * include/bits/hashtable.h: Improve comments.
+ * include/bits/hashtable_policy.h: Likewise.
- * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Updated.
+2013-01-24 Paolo Carlini <paolo.carlini@oracle.com>
-2011-07-22 Uros Bizjak <ubizjak@gmail.com>
+ PR libstdc++/56085
+ * include/std/complex (pow(const complex<>&, int)): Avoid __n
+ signed overflow.
- Backport from mainline
- 2011-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+2013-01-17 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/49293
- * testsuite/22_locale/time_get/get_weekday/char/38081-1.cc: Tweak
- for glibc 2.14.
- * testsuite/22_locale/time_get/get_weekday/char/38081-2.cc: Likewise.
+ PR libstdc++/52887
+ * src/c++11/regex.cc: Add instantiations for AIX.
-2011-06-27 Release Manager
+2013-01-08 Jonathan Wakely <jwakely.gcc@gmail.com>
- * GCC 4.6.1 released.
+ * doc/xml/manual/status_cxx2011.xml: Document that N3189 is missing.
-2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+2013-01-06 Jonathan Wakely <jwakely.gcc@gmail.com>
- * config/abi/pre/gnu.ver: Correct last change, export instead
- at the existing @3.4.16.
- * configure.ac: Revert last change.
- * testsuite/util/testsuite_abi.cc: Likewise.
- * configure: Regenerate.
+ * doc/xml/manual/abi.xml: Update library and symbol versions.
-2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+2012-12-18 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
- * config/abi/pre/gnu.ver: Export recently added basic_streambuf
- and basic_stringbuf symbols @3.4.17.
- * configure.ac: Update.
- * testsuite/util/testsuite_abi.cc: Likewise.
- * configure: Regenerate.
+ Backport from mainline
+ 2012-10-15 Matthias Klose <doko@ubuntu.com>
-2011-05-24 Paolo Carlini <paolo.carlini@oracle.com>
+ * configure.host: Match arm*-*-linux-* for ARM Linux/GNU.
+ * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Likewise.
- PR libstdc++/49141
- * testsuite/26_numerics/complex/cons/48760.cc: Use dg-require-c-std.
- * testsuite/26_numerics/headers/cmath/19322.cc: Likewise.
+2012-12-18 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-05-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+ * doc/xml/manual/abi.xml: Update URLs for C++ ABI.
+ * doc/xml/manual/policy_data_structures_biblio.xml: Add xmlns
+ * doc/xml/manual/policy_data_structures.xml: Set filename for chunk.
+ * doc/xml/manual/spine.xml: Update copyright years.
+ * doc/html/*: Regenerate.
- * testsuite/20_util/bind/cv_quals_2.cc: New.
+2012-12-17 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-05-22 Paolo Carlini <paolo.carlini@oracle.com>
+ * src/c++11/thread.cc: Update copyright years.
- PR libstdc++/49058
- * include/std/functional (_Bind<_Functor(_Bound_args...)>::
- operator()(_Args&&...)): Don't cv qualify _Functor directly
- in the default template argument, SFINAE doesn't apply when
- the functor has no arguments.
- * testsuite/20_util/bind/49058_1.cc: New.
- * testsuite/20_util/bind/49058_2.cc: Likewise.
+2012-12-16 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-05-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+ * src/c++11/thread.cc (execute_native_thread_routine): Do not swallow
+ __forced_unwind exceptions.
+ * testsuite/30_threads/thread/native_handle/cancel.cc: New.
- * doc/xml/manual/status_cxx200x.xml: Update to reflect current status
- and FDIS content.
- * doc/xml/manual/documentation_hacking.xml: Fix typo.
- * doc/html/*: Regenerate.
+2012-12-12 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-05-03 Ollie Wild <aaw@google.com>
-
- * include/ext/sso_string_base.h (__sso_string_base<>::_M_construct):
- Fix unqualified lookup.
- (__sso_string_base<>::_M_construct): Likewise.
- (__sso_string_base<>::_M_construct): Likewise.
- (__sso_string_base<>::_M_assign): Likewise.
- (__sso_string_base<>::_M_reserve): Likewise.
- (__sso_string_base<>::_M_mutate): Likewise.
- (__sso_string_base<>::_M_erase): Likewise.
- * include/ext/vstring.h (__versa_string<>::replace): Likewise.
- (__versa_string<>::compare): Likewise.
- * include/ext/vstring.tcc (__versa_string<>::compare): Likewise.
- (__versa_string<>::compare): Likewise.
- (__versa_string<>::compare): Likewise.
- (__versa_string<>::compare): Likewise.
- (__versa_string<>::compare): Likewise.
-
-2011-05-03 Paolo Carlini <paolo.carlini@oracle.com>
-
- PR libstdc++/48750
- * include/parallel/multiway_merge.h: Run _ValueType destructors.
- * include/parallel/multiway_mergesort.h: Likewise.
- * include/parallel/quicksort.h: Likewise.
- * include/parallel/random_shuffle.h: Likewise.
- * include/parallel/partial_sum.h: Likewise.
- * include/parallel/losertree.h: Run destructors; minor tweaks.
- * include/parallel/par_loop.h: Run destructors, fix memory
- allocations and deallocations.
- * testsuite/26_numerics/accumulate/48750.cc: New.
-
- * testsuite/ext/profile/mutex_extensions_neg.cc: Do not run in
- parallel-mode to avoid spurious multiple errors.
-
-2011-04-30 Doug Kwan <dougkwan@google.com>
-
- * include/Makefile.am (install-freestanding-headers): Also install
- cxxabi_tweaks.h.
- * include/Makefile.in: Regenerate.
+ PR libstdc++/55631
+ * include/ext/alloc_traits.h: Include missing header.
+ * include/ext/pointer.h: Likewise.
+ * include/ext/string_conversions.h: Require C++11.
+ * libsupc++/initializer_list: Reindent.
-2011-04-29 Paolo Carlini <paolo.carlini@oracle.com>
-
- PR libstdc++/48760
- * include/std/complex (complex<float>::complex(float, float),
- complex<double>::complex(double, double),
- complex<long double>::complex(long double, long double)): Initialize
- in the body in C++03 mode (no fix in C++0x mode).
- * testsuite/26_numerics/complex/cons/48760.cc: New.
-
-2011-04-23 Jonathan Wakely <jwakely.gcc@gmail.com>
-
- PR libstdc++/48521
- * include/std/type_traits (result_of): Handle pointer to member.
- * include/std/functional (__invoke): Likewise.
- (_Function_to_function_pointer): Remove.
- (_Reference_wrapper_base): Provide nested types independent of
- unary_function and binary_function.
- (reference_wrapper::operator()): DR 2017.
- (ref(const A&&), cref(const A&&): Define as deleted.
- * include/std/future (async): Simplify SFINAE and use result_of to
- support pointer to member.
- * testsuite/20_util/reference_wrapper/invoke.cc: Test pointer to
- member.
- * testsuite/20_util/reference_wrapper/24803.cc: Likewise.
- * testsuite/20_util/reference_wrapper/typedefs.cc: Test for types
- instead of derivation from unary_function and binary_function.
- * testsuite/20_util/reference_wrapper/invoke-2.cc: New.
- * testsuite/20_util/reference_wrapper/ref_neg.c: New.
- * testsuite/20_util/reference_wrapper/typedefs-3.c: New.
-
-2011-04-19 Hans-Peter Nilsson <hp@axis.com>
-
- PR testsuite/48675
- * testsuite/20_util/hash/chi2_quality.cc (test_document_words): Stub
- this part if SAMPLES < 100000.
-
-2011-04-17 Daniel Krugler <daniel.kruegler@googlemail.com>
- Paolo Carlini <paolo.carlini@oracle.com>
+2012-12-12 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/48635 (again)
- * include/bits/unique_ptr.h (unique_ptr<>::unique_ptr(unique_ptr<>&&),
- unique_ptr<_Tp[]>::unique_ptr(unique_ptr<>&&),
- unique_ptr<>::operator=(unique_ptr<>&&),
- unique_ptr<_Tp[]>::operator=(unique_ptr<>&&)): Use forward<_Ep>, not
- forward<_Dp>, to forward the deleter.
- * testsuite/20_util/unique_ptr/assign/48635_neg.cc: New.
+ * doc/xml/manual/documentation_hacking.xml: Fix validation issue.
-2011-04-15 Daniel Krugler <daniel.kruegler@googlemail.com>
- Paolo Carlini <paolo.carlini@oracle.com>
+2012-12-10 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/48631
- * include/bits/unique_ptr.h (default_delete<_Tp[]>): Add deleted
- function call operator.
- * testsuite/20_util/default_delete/48631_neg.cc: New.
- * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-error
- line numbers.
+ * doc/Makefile.am (xml_sources_manual): Add
+ policy_data_structures_biblio.xml.
+ (${docbook_outdir}/latex): Add.
+ (doc-xml-validate-docbook): Split into..
+ (doc-xml-validate-dtd-db):... this for DTD.
+ (doc-xml-validate-rng-db):... this for Relax NG.
+ (doc-pdf-docbook-dirs): Add.
+ (doc-pdf-docbook-pre): Add.
+ * doc/xml/manual/build_hacking.xml: Add literal markup.
+ * doc/xml/manual/documentation_hacking.xml: Clean whitespace in
+ <filename> markup. Add notes about debugging the generation process.
+ * doc/xml/manual/policy_data_structures.xml: Split biblio into...
+ * doc/xml/manual/policy_data_structures_biblio.xml: ... this. New.
+ * doc/xml/manual/test_policy_data_structures.xml: Fixup <filename>
+ markup.
-2011-04-15 Daniel Krugler <daniel.kruegler@googlemail.com>
- Paolo Carlini <paolo.carlini@oracle.com>
+2012-12-10 Matthias Klose <doko@ubuntu.com>
- PR libstdc++/48635
- * include/bits/unique_ptr.h (unique_ptr<>::operator=(unique_ptr&&),
- unique_ptr<>::operator=(unique_ptr<>&&),
- unique_ptr<_Tp[],>::operator=(unique_ptr&&),
- unique_ptr<_Tp[],>::operator=(unique_ptr<>&&)): Forward the deleter
- instead of moving it.
- * testsuite/20_util/unique_ptr/assign/48635.cc: New.
-
-2011-04-15 Paolo Carlini <paolo.carlini@oracle.com>
-
- * include/std/istream: Fix comments in the light of DR60 + N3168.
-
-2011-04-15 Takaya Saito <gintensubaru@gmail.com>
-
- PR libstdc++/48476
- * include/std/tuple (_Tuple_impl<>::_Tuple_impl(_Tuple_impl<>&&),
- _Tuple_impl<>::operator=(_Tuple_impl&&), _Tuple_impl<>::operator=
- (_Tuple_impl<>&&), tuple_cat): Use std::forward where appropriate.
- * testsuite/20_util/tuple/cons/48476.cc: New.
- * testsuite/20_util/tuple/48476.cc: Likewise.
- * testsuite/20_util/tuple/creation_functions/48476.cc: Likewise.
-
-2011-04-12 Allan McRae <allan@archlinux.org>
-
- PR libstdc++/48566
- * testsuite/tr1/6_containers/unordered_map/requirements/
- iterator_null_neg.cc: Include <cstddef>.
- * testsuite/tr1/6_containers/unordered_set/requirements/
- iterator_null_neg.cc: Likewise.
- * testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc: Include
- <cstring>.
- * testsuite/util/testsuite_common_types.h: Include <limits>.
- * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc:
- Adjust dg-error line numbers.
- * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
- * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
+ * src/Makefile.am (libstdc++-symbols.ver): Use CONFIG_HEADER.
+ * src/Makefile.in: Regenerate.
+
+2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR libstdc++/55503
+ * testsuite/30_threads/condition_variable/members/53841.cc: Add
+ hppa*-hp-hpux11* to -pthread dg-options.
+
+2012-11-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/55413
+ * include/bits/hashtable.h (_Hashtable<>::_M_rehash_aux): Initialize
+ __bbegin_bkt and __prev_bkt to avoid uninitialized warnings.
+ * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust
+ dg-error line number.
+
+2012-11-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53841
+ * include/std/condition_variable (condition_variable::wait_until):
+ Handle clocks with higher resolution than __clock_t.
+ * testsuite/30_threads/condition_variable/members/53841.cc: New.
+
+2012-11-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/55320
+ * include/std/functional (function::function(F)): Set _M_manager after
+ operations that could throw.
+ (_Function_base::_Ref_manager::_M_init_functor): Use addressof.
+ * include/tr1/functional
+ (_Function_base::_Ref_manager::_M_init_functor): Use addressof.
+ (_Function_base::_Base_manager::_M_get_pointer): Likewise.
+ * testsuite/20_util/function/cons/55320.cc: New.
+ * testsuite/20_util/function/cons/addressof.cc: New.
+ * testsuite/20_util/bind/ref_neg.cc: Adjust dg-error line numbers.
+ * testsuite/tr1/3_function_objects/function/10.cc: New.
+
+2012-11-12 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (atomic_future): Remove declaration of
+ non-standard name.
+
+2012-11-08 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/54075
+ * include/bits/hashtable.h (_Hashtable<>::rehash): Reset hash
+ policy state if no rehash.
+ * testsuite/23_containers/unordered_set/modifiers/reserve.cc
+ (test02): New.
+
+2012-11-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/profile/iterator_tracker.h (operator++): Fix returning
+ dangling reference.
+ (operator--): Likewise.
+
+2012-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/shared_ptr/cons/55123.cc: Remove duplicate
+ include.
+
+2012-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/*: Fix copying permission statements.
+
+2012-11-05 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/28811
+ PR libstdc++/54482
+ * configure.ac (glibcxx_lt_pic_flag,
+ glibcxx_compiler_pic_flag,
+ glibcxx_compiler_shared_flag): New. Use them.
+ (lt_prog_compiler_pic_CXX): Set via glibcxx_*_flag(s) above.
+ (pic_mode): Set to default.
+ (PIC_CXXFLAGS): Remove.
+ * Makefile.am (PICFLAG, PICFLAG_FOR_TARGET): Remove. Comment.
+ * libsupc++/Makefile.am: Use glibcxx_ld_pic_flag and
+ glibcxx_compiler_shared_flag. Comment.
+ * src/c++11/Makefile.am: Same.
+ * src/c++98/Makefile.am: Same.
+ * src/Makefile.am: Use glibcxx_compiler_pic_flag.
+
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Same.
+ * configure: Same.
+ * doc/Makefile.in: Same.
+ * include/Makefile.in: Same.
+ * libsupc++/Makefile.in: Same.
+ * po/Makefile.in: Same.
+ * python/Makefile.in: Same.
+ * src/Makefile.in: Same.
+ * src/c++11/Makefile.in: Same.
+ * src/c++98/Makefile.in: Same.
+ * testsuite/Makefile.in: Same.
+
+ * src/c++11/compatibility-atomic-c++0x.cc: Use
+ _GLIBCXX_SHARED instead of PIC to designate shared-only
+ code blocks.
+ * src/c++11/compatibility-c++0x.cc: Same.
+ * src/c++11/compatibility-thread-c++0x.cc: Same.
+ * src/c++98/compatibility-list-2.cc: Same.
+ * src/c++98/compatibility.cc: : Same.
+
+ * testsuite/17_intro/shared_with_static_deps.cc: New.
+
+ * doc/xml/manual/build_hacking.xml: Separate configure from
+ make/build issues, add build details.
+
+2012-11-05 Benjamin Kosnik <bkoz@redhat.com>
+ Oleg Smolsky <oleg@smolsky.net>
+
+ PR libstdc++/55028
+ * config/abi/pre/gnu-versioned-namespace.ver: Add symbols.
+ * testsuite/23_containers/unordered_multimap/insert/55028-debug.cc: New.
+
+2012-11-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/55215
+ * include/bits/random.tcc (mersenne_twister_engine<>::seed(_Sseq&)):
+ Assign state_size to _M_p.
+ * testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc:
+ New.
+ * testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc:
Likewise.
- * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
+ * testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc:
Likewise.
- * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
+ * testsuite/26_numerics/random/subtract_with_carry_engine/cons/
+ 55215.cc: Likewise.
+ * testsuite/26_numerics/random/discard_block_engine/cons/55215.cc:
Likewise.
- * testsuite/29_atomics/atomic/cons/assign_neg.cc: Likewise.
- * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
+ * testsuite/26_numerics/random/linear_congruential_engine/cons/
+ 55215.cc: Likewise.
-2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-11-02 Paolo Carlini <paolo.carlini@oracle.com>
- * testsuite/20_util/function/48451.cc: Rename to...
- * testsuite/20_util/function/48541.cc: This.
+ PR libstdc++/55169
+ * include/bits/random.h: Remove all uses of param().
-2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-11-01 Haakan Younes <hyounes@google.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
- PR libstdc++/48541
- * include/std/functional (_Base_manager::_M_get_pointer): Use
- addressof.
- * testsuite/20_util/function/48451.cc: New.
+ PR libstdc++/55047
+ * include/bits/random.h (exponential_distribution<>::operator):
+ Fix formula to std::log(result_type(1) - __aurng()).
+ * include/bits/random.tcc: Likewise, everywhere.
-2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-10-29 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/48465
- * configure.ac (libtool_VERSION): Bump library version to 6:16:0.
- * configure: Regenerate.
- * config/abi/pre/gnu.ver (GLIBCXX_3.4.16): Export missing symbols.
- * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.16.
+ PR libstdc++/55123
+ * include/bits/shared_ptr_base.h (__shared_count::_S_create_from_up):
+ Do not instantiate allocator with element_type.
+ * testsuite/20_util/shared_ptr/cons/55123.cc: New.
-2011-04-06 Jeffrey Yasskin <jyasskin@google.com>
+2012-10-10 Andrew MacLeod <amacleod@redhat.com>
- * include/ext/algorithm (is_sorted): In C++0x mode import from
- namespace std.
- * include/ext/numeric (iota): In C++0x mode import from
- namespace std.
- * testsuite/ext/is_sorted/cxx0x.cc: New.
- * testsuite/ext/iota/cxx0x.cc: New.
+ PR libstdc++/54861
+ * include/bits/atomic_base.h (atomic_signal_fence): Call
+ __atomic_signal_fence instead of __atomic_thread_fence.
-2011-04-02 Jonathan Wakely <redi@gcc.gnu.org>
+2012-09-20 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/48398
- * include/bits/unique_ptr.h (__tuple_type): Store pointer type.
- * testsuite/20_util/unique_ptr/modifiers/48398.cc: New.
- * testsuite/20_util/unique_ptr/requirements/pointer_type.cc: Remove
- unused parameter name.
+ PR libstdc++/54102, part 2
+ * doc/Makefile.am (XSL_HTML_STYLE): use xhtml, not html.
+ * doc/Makefile.in: Regenerate.
+ * doc/html/*: Same.
-2011-03-31 Jeffrey Yasskin <jyasskin@google.com>
+2012-09-20 Benjamin Kosnik <bkoz@redhat.com>
- * libsupc++/exception_ptr.h: Forward-declare std::type_info.
- * libsupc++/nested_exception.h (__throw_with_nested): Remove a
- redundant default argument from std::__throw_with_nested.
+ * doc/html/*: Regenerate.
-2011-03-26 Paolo Carlini <paolo.carlini@oracle.com>
+2012-09-20 Benjamin Kosnik <bkoz@redhat.com>
- * include/bits/random.h (negative_binomial_distribution<>::
- negative_binomial_distribution(_IntType, double),
- negative_binomial_distribution<>::
- negative_binomial_distribution(const param_type&)): Fix thinko
- p / (1 - p) for (1 - p) / p.
- * include/bits/random.tcc (negative_binomial_distribution<>::
- operator()): Fix.
+ PR libstdc++/54102
+ * doc/xsl/customization.xsl.in: New.
+ * configure.ac: Output local copy of customization xsl.
+ * doc/Makefile.am (stamp-html-single-docbook): Use XSL_LOCAL_STYLE.
+ (stamp-html-docbook): Set stringparam to UTF-8.
+ * Makefile.in: Regenerated.
+ * configure: Same.
+ * doc/Makefile.in: Same.
-2011-03-25 Release Manager
+2012-09-20 Release Manager
- * GCC 4.6.0 released.
+ * GCC 4.7.2 released.
-2011-03-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+2012-09-11 Jakub Jelinek <jakub@redhat.com>
- * config/abi/post/solaris2.8/baseline_symbols.txt: Regenerate.
- * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
+ PR libstdc++/54172
+ * libsupc++/guard.cc (__cxa_guard_acquire): Fix up the last
+ argument of the first __atomic_compare_exchange_n.
-2011-03-23 Matthias Klose <doko@ubuntu.com>
+2012-09-09 Thiago Macieira <thiago.macieira@intel.com>
- * config/abi/post/sparc-linux-gnu/baseline_symbols.txt: Regenerated.
+ PR libstdc++/54172
+ * libsupc++/guard.cc (__cxa_guard_acquire): Exit the loop earlier if
+ we detect that another thread has had success. Don't compare_exchange
+ from a finished state back to a waiting state. Comment.
-2011-03-23 Uros Bizjak <ubizjak@gmail.com>
+2012-09-09 Jonathan Wakely <jwakely.gcc@gmail.com>
- * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Regenerated.
+ PR libstdc++/54388
+ * include/std/array (array::at() const): Ensure lvalue result.
+ * testsuite/23_containers/array/element_access/54388.cc: New.
-2011-03-22 Jakub Jelinek <jakub@redhat.com>
+2012-09-06 Marc Glisse <marc.glisse@inria.fr>
+ Paolo Carlini <paolo.carlini@oracle.com>
- * config/abi/pre/gnu.ver (GLIBCXX_3.4.15): Export _ZNSsC2EOSs
- and _ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_.
- * config/abi/post/solaris2.8/baseline_symbols.txt: Regenerated.
- * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
- * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise.
- * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt:
- Likewise.
- * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
- * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise.
- * testsuite/21_strings/basic_string/cons/char/moveable2.cc: New test.
- * testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc: New
- test.
+ PR libstdc++/54376
+ * include/bits/random.h (lognormal_distribution<>::operator==,
+ gamma_distribution<>::operator==,
+ chi_squared_distribution<>::operator==,
+ fisher_f_distribution<>::operator==,
+ student_t_distribution<>::operator==,
+ binomial_distribution<>::operator==,
+ negative_binomial_distribution<>::operator==,
+ poisson_distribution<>::operator==): Change inline friend definition
+ to non-template.
+ * testsuite/26_numerics/random/binomial_distribution/requirements/
+ explicit_instantiation/1.cc: New.
+ * testsuite/26_numerics/random/cauchy_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/chi_squared_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/discrete_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/exponential_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/extreme_value_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/fisher_f_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/gamma_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/geometric_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/lognormal_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/negative_binomial_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/normal_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/piecewise_constant_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/piecewise_linear_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/poisson_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/student_t_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/uniform_int_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/uniform_real_distribution/
+ requirements/explicit_instantiation/1.cc: Likewise.
+ * testsuite/26_numerics/random/weibull_distribution/requirements/
+ explicit_instantiation/1.cc: Likewise.
+
+2012-08-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/30_threads/async/54297.cc: Add dg-require-nanosleep.
+
+2012-08-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/54297
+ * src/c++11/future.cc (~_Async_state_common): Move to...
+ * src/c++11/compatibility-thread-c++0x.cc (~_Async_state_common):
+ Here.
+ (_GLIBCXX_ABI_COMPAT_ASYNC): Rename to _GLIBCXX_ASYNC_ABI_COMPAT.
+ * include/std/future (_GLIBCXX_ABI_COMPAT_ASYNC): Likewise.
+
+2012-08-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+ Geoff Romer <gromer@google.com>
+
+ PR libstdc++/54351
+ * include/bits/unique_ptr.h (unique_ptr<T>::~unique_ptr): Do not use
+ reset().
+ (unique_ptr<T[]>::~unique_ptr()): Likewise.
+ * testsuite/20_util/unique_ptr/54351.cc: New.
+ * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Adjust dg-error
+ line numbers.
-2011-03-21 Jakub Jelinek <jakub@redhat.com>
+2012-08-25 Jonathan Wakely <jwakely.gcc@gmail.com>
- * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
- * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt:
+ PR libstdc++/54297
+ * include/std/future (~_Async_state_impl): Join thread before
+ derived class members are destroyed.
+ (~_Async_state_common): Only define non-trivial destructor when
+ included from future.cc for ABI compatibility reasons.
+ * src/c++11/future.cc (_GLIBCXX_ABI_COMPAT_ASYNC): Define.
+ * testsuite/30_threads/async/54297.cc: New.
+
+2012-08-13 David Adler <d.adler.s@gmail.com>
+
+ PR libstdc++/54185
+ * src/c++11/condition_variable.cc (condition_variable): Always
+ destroy native type in destructor.
+ * testsuite/30_threads/condition_variable/54185.cc: New.
+
+2012-08-06 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR libstdc++/54036
+ * include/decimal/decimal.h (_DEFINE_DECIMAL_UNARY_OP): Use _Op as
+ a unary operator.
+ * testsuite/decimal/pr54036-1.cc: New test.
+ * testsuite/decimal/pr54036-2.cc: Likewise.
+ * testsuite/decimal/pr54036-3.cc: Likewise.
+
+2012-08-02 Michael Hope <michael.hope@linaro.org>
+
+ Backport from mainline r186389:
+ 2012-04-12 Andreas Schwab <schwab@linux-m68k.org>
+
+ * testsuite/Makefile.am (check_DEJAGNUnormal0): Run
+ prettyprinters.exp.
+ * testsuite/Makefile.in: Regenerated.
+
+2012-07-29 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/54075
+ * include/bits/hashtable_policy.h
+ (_Prime_rehash_policy::_M_next_bkt): Add a growth factor set to 2
+ to boost growth in the number of buckets.
+ * testsuite/performance/23_containers/insert/unordered_set.cc: New.
+
+2012-07-26 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/54075
+ * include/bits/hashtable.h
+ (_Hashtable<>::_Hashtable(_InputIterator, _InputIterator,
+ size_type, ...): Remove std::max usage to guarantee that hashtable
+ state is consistent with hash policy state.
+ (_Hashtable<>::rehash): Likewise. Set _M_prev_resize to 0 to avoid
+ the hashtable shrinking on next insertion.
+ * testsuite/23_containers/unordered_set/modifiers/reserve.cc: New.
+ * testsuite/23_containers/unordered_multiset/modifiers/reserve.cc: New.
+ * testsuite/23_containers/unordered_map/modifiers/reserve.cc: New.
+ * testsuite/23_containers/unordered_multimap/modifiers/reserve.cc: New.
+
+2012-07-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/30_threads/thread/adl.cc: Add missing dg-requires.
+
+2012-07-16 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53270
+ * include/ext/concurrence.h: Use NSDMI for gthreads types.
+ * include/ext/rope: Likewise. Destroy mutexes in destructors. Add
+ system_header pragma.
+
+ Revert:
+ 2012-06-19 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53270
+ * config/os/gnu-linux/os_defines.h: Disable static initializer macros
+ for gthreads types in C++11 mode.
+
+2012-07-16 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53978
+ * include/bits/alloc_traits.h (allocator_traits): Define static
+ constants.
+ * include/bits/ptr_traits.h (pointer_traits): Likewise.
+ * include/ext/alloc_traits.h (__allocator_always_compares_equal):
Likewise.
- * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise.
- * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
- * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
- * testsuite/util/testsuite_abi.cc (check_version): Set incompatible
- even when adding symbols to CXXABI_1.3, GLIBCXX_LDBL_3.4 and
- CXXABI_LDBL_1.3 versions.
+2012-07-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/53657
+ * include/bits/stl_pair.h (pair<>::pair(pair&&)): Declare defaulted,
+ per C++11.
+ * include/bits/stl_map.h (map<>::insert(_Pair&&), map<>::insert
+ (const_iterator, _Pair&&)): Constrain with std::is_constructible,
+ per LWG2005.
+ * include/bits/stl_multimap.h (multimap<>::insert(_Pair&&),
+ multimap<>::insert(const_iterator, _Pair&&)): Likewise.
+ * include/bits/hashtable_policy.h (_Insert<>::insert(_Pair&&),
+ _Insert<>::insert(const_iterator, _Pair&&)): Likewise.
+ * include/debug/unordered_map: Adjust.
+ * include/debug/map.h: Likewise.
+ * include/debug/multimap.h: Likewise.
+ * include/profile/unordered_map: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/multimap.h: Likewise.
+
+2012-07-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53578
+ * include/ext/concurrence.h (__recursive_mutex::_S_destroy): Fix
+ narrowing conversion.
+ * include/std/mutex (__recursive_mutex_base::_S_destroy): Likewise.
+
+2012-07-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/53872
+ * include/std/thread (thread::_M_make_routine): Qualify make_shared
+ to prevent ADL.
+ * testsuite/30_threads/thread/adl.cc: New.
+
+2012-07-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/condition_variable: Update copyright years.
+
+2012-07-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53830
+ * include/std/condition_variable (condition_variable_any::wait):
+ Move _Unlock type to class scope.
+ (condition_variable_any::wait_until): Reuse it.
+ * testsuite/30_threads/condition_variable_any/53830.cc: New.
+
+2012-07-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ Revert:
+ 2011-10-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49561
+ * include/bits/stl_list.h (_List_base<>::_List_impl::_M_size):
+ Add in C++0x mode.
+ (_List_base<>::_List_impl, _List_base<>::_M_get_node,
+ _List_base<>::_M_put_node, _List_base<>::_List_base(_List_base&&),
+ list<>::size, list<>::swap, list<>::splice): Use it.
+ (operator==(const list<>&, const list<>&)): Rewrite in C++0x mode.
+ * include/bits/list.tcc (list<>::erase): Likewise.
+ (list<>::merge): Adjust in C++0x mode.
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+ Adjust dg-error line number.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
-2011-03-21 Benjamin Kosnik <bkoz@redhat.com>
+2012-06-19 Jonathan Wakely <jwakely.gcc@gmail.com>
- * config/abi/pre/gnu.ver: Remove typeinfo name exports for C++0x types.
+ PR libstdc++/53270
+ * config/os/gnu-linux/os_defines.h: Disable static initializer macros
+ for gthreads types in C++11 mode.
-2011-03-21 Jakub Jelinek <jakub@redhat.com>
+2012-06-19 Jörg Sonnenberger <joerg@britannica.bec.de>
+ Jonathan Wakely <jwakely.gcc@gmail.com>
- * config/abi/pre/gnu.ver (CXXABI_1.3): Don't export _ZT[IS][PK]*[no].
- (CXXABI_1.3.5): Export _ZTI[PK]*[no].
+ PR libstdc++/53678
+ * config/os/bsd/netbsd/ctype_base.h: Check for _CTYPE_U.
+ * testsuite/22_locale/ctype_base/53678.cc: New.
-2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+2012-06-14 Release Manager
- * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on
- sparc*-sun-solaris2.10 && lp64.
-
-2011-03-16 Benjamin Kosnik <bkoz@redhat.com>
-
- * src/Makefile.am: Add functional.cc, shared_ptr.cc.
- * src/Makefile.in: Regenerate.
- * libsupc++/Makefile.am: Add nested_exception.cc.
- * libsupc++/Makefile.in: Regenerate.
- * src/system_error.cc: Add ctor and dtor definitions for error_category.
- * src/functional.cc: New. Add dtor definition for bad_function_call.
- * src/stdexcept.cc: Add dtor definitions for domain_error,
- invalid_argument, length_error, out_of_range, range_error,
- overflow_error, underflow_error.
- * src/future.cc: Add dtor definition for __future_base::_Result_base.
- * src/shared_ptr.cc: New. Add dtor definition for bad_weak_ptr.
- * include/std/system_error: Adjust.
- * include/std/stdexcept: Same.
- * include/std/future: Same.
- * include/std/functional: Same.
- * include/bits/shared_ptr_base.h: Same.
- * libsupc++/nested_exception.cc: New. Add dtor for nested_exception.
- * libsupc++/nested_exception.h: Adjust.
- * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers.
- * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Same.
- * config/abi/pre/gnu.ver: Add new exports.
-
- * src/future.cc: Guard definitions.
- * libsupc++/nested_exception.cc: Same.
-
- * config/abi/pre/gnu.ver: Make nested_exception exports super clear.
- Move bad_function_call exports from CXXABI_1.3.5 to GLIBCXX_3.4.15.
- Add base destructors for stdexcept classes.
-
- * testsuite/19_diagnostics/stdexcept.cc: New.
-
-2011-03-15 Doug Kwan <dougkwan@google.com>
-
- PR libstdc++/48123
- * include/Makefile.am (install-freestanding-headers): Install
- cpu_defines.h
- * include/Makefile.in: Regenerate.
+ * GCC 4.7.1 released.
-2011-03-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+2012-05-28 Paolo Carlini <paolo.carlini@oracle.com>
- * doc/xml/manual/abi.xml: Replace docs.sun.com URLs by their OTN
- equivalents.
- * doc/html/manual/abi.html: Regenerate.
+ PR c++/53503
+ * testsuite/26_numerics/headers/cmath/53503.cc: New.
-2011-03-14 Andrey Zholos <aaz@althenia.net>
+2012-05-10 DJ Delorie <dj@redhat.com>
- PR libstdc++/48114
- * include/bits/random.h (geometric_distribution): Correct formula
- in comment, per C++0x.
- (geometric_distribution<>::param_type::param_type(double)): Fix check.
- (geometric_distribution<>::param_type::_M_initialize):
- Store log(1 - p).
- * include/bits/random.tcc (geometric_distribution<>::operator()):
- Fix computation.
- (binomial_distribution<>::operator()): Likewise.
+ * include/bits/random.tcc (seed_seq::generate): Cast max()
+ operands to size_t to ensure a template match.
+ * include/std/bitset (_M_copy_from_ptr): Cast min() operands to
+ size_t to ensure a template match.
-2011-03-09 Paolo Carlini <paolo.carlini@oracle.com>
+2012-05-02 Paolo Carlini <paolo.carlini@oracle.com>
- * testsuite/util/testsuite_rvalref.h: Minor tweaks.
+ PR libstdc++/53193
+ * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust
+ dg-error line number.
-2011-03-09 Jonathan Wakely <redi@gcc.gnu.org>
- Chris Jefferson <chris@bubblescope.net>
- Paolo Carlini <paolo.carlini@oracle.com>
+2012-05-01 François Dumont <fdumont@gcc.gnu.org>
- * testsuite/util/testsuite_rvalref.h (rvalstruct_compare_by_value):
- New.
- * testsuite/25_algorithms/sort_heap/check_compare_by_value.cc:
+ PR libstdc++/53115
+ * include/bits/hashtable.h
+ (_Hashtable<>::_M_rehash_aux(size_type, false_type)): Fix buckets
+ after insertion of several equivalent elements.
+ * testsuite/23_containers/unordered_multiset/insert/53115.cc: New.
+ * testsuite/23_containers/unordered_multimap/insert/53115.cc: New.
+
+2012-04-30 Andreas Tobler <andreast@fgznet.ch>
+
+ Backport from mainline
+ 2012-03-21 Andreas Tobler <andreast@fgznet.ch>
+
+ * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc:
+ Skip this test on powerpc64-*-freebsd*.
+
+2012-04-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/scoped_allocator (scoped_allocator::__outermost): Do
+ not pass non-POD to varargs function.
+ * testsuite/20_util/scoped_allocator/1.cc: Fix test.
+
+2012-04-23 Chris Jefferson <chris@bubblescope.net>
+
+ PR testsuite/53046
+ * testsuite/25_algorithms/stable_partition/mem_check.cc: Fix size
+ of array A.
+ * testsuite/25_algorithms/stable_sort/mem_check.cc: Likewise.
+
+2012-04-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/53067
+ * include/bits/hashtable_policy.h: Change inheritances to public.
+ * testsuite/23_containers/unordered_map/requirements/53067.cc: New.
+ * testsuite/23_containers/unordered_set/requirements/53067.cc: Likewise.
+
+2012-04-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53027
+ * include/bits/ptr_traits.h (pointer_traits::rebind): Make public.
+ * testsuite/20_util/pointer_traits/requirements/typedefs.cc: Check
+ rebind works.
+
+2012-04-21 Alan Modra <amodra@gmail.com>
+
+ PR libstdc++/52839
+ * acinclude.m4 (_GLIBCXX_ATOMIC_BUILTINS): Do not depend on
+ glibcxx_cv_atomic_long_long.
+ * configure: Regenerate.
+
+2012-04-16 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+ PR bootstrap/52840
+ * src/Makefile.am (build-debug): Do not adjust vpath dir, remove
+ Makefile.tmp
+ * src/Makefile.in: Adjust as per above.
+
+2012-04-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/52689
+ * libsupc++/Makefile.am (LTCXXCOMPILE, CXXLINK): Tweak.
+ * libsupc++/Makefile.in: Regenerated.
+ * src/Makefile.am (LTCXXCOMPILE, CXXLINK): Tweak.
+ (libstdc___la_SOURCES): Add in compatiblity files, with content
+ that varies with -DPIC.
+ * src/Makefile.in: Regenerated.
+ * src/c++11/Makefile.am (LTCXXCOMPILE, CXXLINK): Tweak.
+ * src/c++11/Makefile.in: Regenerated.
+ * src/c++11/compatibility-atomic-c++0x.cc: Guard with PIC.
+ * src/c++11/compatibility-c++0x.cc: Same.
+ * src/c++11/future.cc: Consolidate compatibility bits into..
+ * src/c++11/mutex.cc: Consolidate compatibility bits into..
+ * src/c++11/compatibility-thread-cxx0x.cc: ...here. New.
+ * src/c++98/Makefile.am (LTCXXCOMPILE, CXXLINK): Tweak.
+ * src/c++98/Makefile.in: Regenerated.
+ * src/c++98/compatibility-list-2.cc: Guard with PIC.
+ * src/c++98/compatibility.cc: Tweak comments.
+
+2012-04-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/ext/pb_ds/detail/pat_trie_/
+ constructors_destructor_fn_imps.hpp: Increment after recursion.
+ * include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp: Convert
+ node_type markup from brief.
+
+2012-04-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/52699
+ * include/bits/random.tcc (independent_bits_engine<>::operator()())
+ Avoid various overflows; use common_type on result_type and
+ _RandomNumberEngine::result_type; avoid floating point computations;
+ other smaller tweaks.
+
+ * include/bits/random.tcc (uniform_int_distribution<>::operator())
+ Use common_type; assume _UniformRandomNumberGenerator::result_type
+ unsigned; tidy.
+
+ * include/bits/stl_algobase.h (__lg(unsigned), __lg(unsigned long),
+ __lg(unsigned long long)): Add.
+
+2012-04-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/debug/safe_iterator.h (_BeforeBeginHelper<>::
+ _S_Is_Beginnest): Add.
+ * include/debug/forward_list (_BeforeBeginHelper<>::
+ _S_Is_Beginnest): Likewise.
+ (_Safe_iterator<>::_M_is_beginnest): Add.
+ * include/debug/safe_iterator.tcc (_Safe_iterator<>::_M_valid_range):
+ Use the latter.
+ * testsuite/23_containers/forward_list/debug/splice_after.cc:
+ Add test.
+
+2012-04-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/forward_list.h (splice_after(const_iterator,
+ forward_list&), splice_after(const_iterator, forward_list&,
+ consst_iterator), splice_after(const_iterator, forward_list&,
+ const_iterator, const_iterator), merge(forward_list&),
+ merge(forward_list&, _Comp)): Add per C++11 as published (and
+ LWG 1310).
+ * include/debug/forward_list: Adjust.
+
+ * include/bits/forward_list.h (splice_after(const_iterator,
+ forward_list&&, const_iterator)): Only declare.
+ (_M_transfer_after): Remove.
+ (_M_splice_after(const_iterator, forward_list&&)): Change signature.
+ (splice_after(const_iterator, forward_list&&, const_iterator,
+ const_iterator)): Use the latter.
+ * include/bits/forward_list.tcc (splice_after(const_iterator,
+ forward_list&&, const_iterator)): Define here.
+ (_M_splice_after): Define, use throughout.
+
+ * include/bits/forward_list.h (insert_after(const_iterator,
+ std::initializer_list<_Tp>)): Forward to insert_after(const_iterator,
+ _InputIterator, _InputIterator).
+ * include/bits/forward_list.tcc: Remove definition.
+
+ * testsuite/23_containers/forward_list/modifiers/6.cc: New.
+ * testsuite/23_containers/forward_list/operations/1.cc: Adjust.
+
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ assign_neg.cc: Adjust dg-error line number.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2012-04-12 Jeffrey Yasskin <jyasskin@google.com>
+
+ PR libstdc++/52822
+ * include/bits/stl_algo.h (__find_if_not): Expose in C++98 mode.
+ (__find_if_not_n): Like __find_if_not, but works on and updates a
+ counted range instead of a bounded range.
+ (stable_partition): Guarantee !__pred(*__first) in call to
+ __stable_partition_adaptive() or __inplace_stable_partition().
+ (__stable_partition_adaptive): Use new precondition to avoid
+ moving/copying objects onto themselves. Guarantee new
+ precondition to recursive calls.
+ (__inplace_stable_partition): Use new precondition to simplify
+ base case, remove __last parameter. Guarantee new precondition to
+ recursive calls.
+ * testsuite/25_algorithms/stable_partition/moveable.cc (test02):
+ Test a sequence that starts with a value matching the predicate.
+ * testsuite/25_algorithms/stable_partition/pr52822.cc: Test
+ vectors, which have a destructive self-move-assignment.
+
+2012-04-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/52942
+ * include/bits/stl_function.h (_Identity, _Select1st, _Select2nd):
+ In C++11 mode do not derive from std::unary_function.
+ * include/ext/functional (identity, select1st, select2nd): Adjust.
+ * testsuite/23_containers/unordered_map/requirements/52942.cc: New.
+ * testsuite/23_containers/unordered_set/requirements/52942.cc: Likewise.
+
+2012-04-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/52924
+ * include/bits/shared_ptr_base.h (_Sp_counted_deleter): Add
+ user-defined destructor.
+ (_Sp_counted_inplace): Likewise.
+ * testsuite/20_util/shared_ptr/cons/52924.cc: New.
+ * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error
+ line numbers.
+
+2012-04-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/performance/30_threads/future/polling.cc: Adjust.
+
+2012-04-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/52591
+ * include/bits/stl_vector.h (vector::operator=(vector&&)): Dispatch
+ to _M_move_assign depending on whether allocator is moved.
+ (vector::_M_move_assign): Add overloaded functions.
+ * testsuite/23_containers/vector/52591.cc: New.
+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+ Adjust dg-error line number.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc:
Likewise.
- * testsuite/25_algorithms/partial_sort/check_compare_by_value:
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc:
Likewise.
- * testsuite/25_algorithms/stable_sort/check_compare_by_value.cc:
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
Likewise.
- * testsuite/25_algorithms/sort/check_compare_by_value: Likewise.
-2011-03-09 Chris Jefferson <chris@bubblescope.net>
+2012-04-09 François Dumont <fdumont@gcc.gnu.org>
- PR libstdc++/48038
- * include/bits/stl_algo.h (__merge_backward): Rename to
- __move_merge_backward and change to always move rather than copy.
- (__move_merge): New function similar to std::merge except values
- are moved instead of copied.
- (__merge_adaptive, __merge_sort_loop): Change from using std::merge
- and __merge_backward to __move_merge and __move_merge_backward.
+ PR libstdc++/52476
+ * include/bits/hashtable.h (_Hashtable<>::_M_rehash_aux): Add.
+ (_Hashtable<>::_M_rehash): Use the latter.
+ * testsuite/23_containers/unordered_multimap/insert/52476.cc: New.
+ * testsuite/23_containers/unordered_multiset/insert/52476.cc: New.
-2011-03-07 Jason Merrill <jason@redhat.com>
+2012-04-09 Terry Guo <terry.guo@arm.com>
- * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Adjust
- expected errors.
+ Backport from mainline
+ 2012-03-28 Terry Guo <terry.guo@arm.com>
-2011-03-07 Benjamin Kosnik <bkoz@redhat.com>
- Matthias Klose <doko@ubuntu.com>
- Jonathan Wakely <redi@gcc.gnu.org>
+ * testsuite/Makefile.am (TEST_GCC_EXEC_PREFIX): New.
+ * testsuite/Makefile.in: Regenerated.
- PR libstdc++/47145
- * acinclude.m4 (GLIBCXX_CONFIGURE_DOCBOOK): Define.
- * configure.ac: Use it.
- * doc/Makefile.am (XSL_STYLE_DIR): Set at configure time.
- * configure: Regenerate.
- * doc/Makefile.in: Regenerate.
+2012-03-30 Jeffrey Yasskin <jyasskin@gcc.gnu.org>
+ Paolo Carlini <paolo.carlini@oracle.com>
-2011-03-04 Benjamin Kosnik <bkoz@chula>
+ PR libstdc++/52799
+ * include/bits/deque.tcc (emplace): Fix thinko, replace push_front
+ -> emplace_front, and likewise for *_back.
+ * testsuite/23_containers/deque/modifiers/emplace/52799.cc: New.
+ * testsuite/23_containers/list/modifiers/emplace/52799.cc: Likewise.
+ * testsuite/23_containers/vector/modifiers/emplace/52799.cc: Likewise.
- * src/Makefile.am (inst_sources): Make source instantion files
- conditional.
- (XTEMPLATE_FLAGS): Make -fno-implicit-templates conditional.
- * src/Makefile.in: Regenerate.
- * src/valarray-inst.cc: Move to..
- * src/valarray.cc: ...this.
- * acinclude.m4 (GLIBCXX_ENABLE_EXTERN_TEMPLATE]): Define.
- * configure.ac (GLIBCXX_ENABLE_EXTERN_TEMPLATE): Use it.
- * configure: Regenerate.
- * include/Makefile.am (stamp-extern-template): Add.
+2012-03-23 David S. Miller <davem@davemloft.net>
+
+ * config/abi/post/sparc-linux-gnu/baseline_symbols.txt: Update.
+
+2012-03-23 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/forward_list.h: Fix comments.
+
+2012-03-23 Paweł Sikora <pawel.sikora@agmk.net>
+
+ PR libstdc++/52540
+ * include/Makefile.am (c++config.h): Fix sed rule to not break
+ the _GLIBCXX_EXTERN_TEMPLATE redefinition.
* include/Makefile.in: Regenerate.
- * doc/xml/manual/configure.xml: Document --enable-extern-template.
+2012-03-22 Jonathan Wakely <jwakely.gcc@gmail.com>
- * include/bits/locale_classes.tcc: Adjust comment.
- * include/bits/locale_facets.tcc: Same.
- * include/bits/basic_ios.tcc: Same.
- * include/bits/istream.tcc: Same.
- * include/bits/codecvt.h: Same.
- * include/bits/ostream.tcc: Same.
- * include/bits/sstream.tcc: Same.
- * include/bits/c++config: Same.
- * include/bits/basic_string.tcc: Same.
- * include/bits/ostream_insert.h: Same.
- * include/bits/locale_facets_nonio.tcc: Same.
- * include/bits/streambuf.tcc: Same.
- * include/bits/allocator.h: Same.
- * include/bits/fstream.tcc: Same.
+ PR libstdc++/52433
+ * include/debug/safe_iterator.h (_Safe_iterator): Add move
+ constructor and move assignment operator.
+ * testsuite/23_containers/vector/debug/52433.cc: New.
- * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers.
+2012-03-22 Paolo Carlini <paolo.carlini@oracle.com>
-2011-03-02 Benjamin Kosnik <bkoz@redhat.com>
+ * include/std/array (array<>::at(size_type) const): Fix version
+ for undefined __EXCEPTIONS.
- * testsuite/Makefile.am: Make clean fixups.
- * testsuite/Makefile.in: Regenerate.
+2012-03-22 Release Manager
-2011-03-02 Marc Glisse <marc.glisse@normalesup.org>
+ * GCC 4.7.0 released.
- * include/std/ratio (ratio_less): Add comments.
+2012-03-10 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-2011-03-02 Marc Glisse <marc.glisse@normalesup.org>
+ PR libstdc++/52456
+ * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.
- PR libstdc++/47913
- * include/std/ratio (ratio_add): Avoid denominator overflow.
- * testsuite/20_util/ratio/operations/47913.cc: New.
+2012-03-09 Andreas Schwab <schwab@linux-m68k.org>
-2011-02-28 Benjamin Kosnik <bkoz@redhat.com>
+ * config/locale/gnu/monetary_members.cc
+ (moneypunct<char,true>::_M_initialize_moneypunct): Throw caught
+ exception again.
+ (moneypunct<char,false>::_M_initialize_moneypunct): Likewise.
+ * testsuite/22_locale/locale/cons/12352.cc: Also test en_US
+ locale.
- * testsuite/20_util/hash/chi2_quality.cc: Use C++0x mode on simulators.
- * testsuite/20_util/hash/quality.cc: Same.
+2012-03-02 Benjamin Kosnik <bkoz@redhat.com>
-2011-02-28 Paolo Carlini <paolo.carlini@oracle.com>
+ * include/c_global/cstdio: Remove extraneous extern.
+ * include/c_std/cstdio: Same.
- PR libstdc++/47921
- * include/std/streambuf (basic_streambuf<>::__safe_gbump,
- __safe_pbump): Add.
- * include/bits/streambuf.tcc (basic_streambuf<>::xgetn,
- xputn): Use the latter.
- * include/bits/streambuf_iterator.h: Likewise.
- * src/strstream.cc: Likewise.
- * src/streambuf.cc: Likewise.
- * src/compatibility.cc: Likewise.
- * src/istream.cc: Likewise.
- * include/bits/fstream.tcc (basic_filebuf<>::xsgetn): Use setg
- instead of gbump.
- * include/std/sstream (basic_stringbuf<>::_M_pbump): Add.
- * include/bits/sstream.tcc (basic_stringbuf<>::seekoff,
- seekpos, _M_sync): Use setg, setp, and _M_pbump.
- * config/abi/pre/gnu.ver: Tweak.
+2012-03-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-2011-02-28 Paolo Carlini <paolo.carlini@oracle.com>
+ * config/abi/post/solaris2.8/baseline_symbols.txt: Regenerate.
+ * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
- * testsuite/20_util/ratio/comparisons/comp3.cc: New.
+2012-03-01 Benjamin Kosnik <bkoz@redhat.com>
+ Ramana Radhakrishnan <ramana@gcc.gnu.org>
-2011-02-28 Marc Glisse <marc.glisse@normalesup.org>
+ PR libstdc++/51785
+ * acinclude.m4 (GLIBCXX_CHECK_STDIO_PROTO): New.
+ * configure.ac: Call it.
+ * configure: Regenerate.
+ * config.h.in: Same.
+ * config/os/gnu-linux/os_defines.h: Conditionally undefine
+ _GLIBCXX_HAVE_GETS.
+ * include/c_global/cstdio: Conditionally declare deprecated gets.
+ * include/c_std/cstdio: Same.
- PR libstdc++/42622
- * include/std/ratio (ratio_less): Reimplement to never overflow.
- * testsuite/20_util/ratio/comparisons/comp2.cc: Extend.
+2012-03-01 Michael Spertus <mike_spertus@symantec.com>
-2011-02-24 Benjamin Kosnik <bkoz@redhat.com>
+ * include/tr2/type_traits (typelist): To __reflection_typelist.
+ (first, rest, empty): Remove.
- * testsuite/18_support/type_info/fundamental.cc: New.
+2012-03-01 Benjamin Kosnik <bkoz@redhat.com>
- * testsuite/Makefile.am: Make clean fixups.
+ * testsuite/Makefile.am (CLEANFILES): Add *.gdb.
* testsuite/Makefile.in: Regenerate.
-2011-02-19 François Dumont <francois.cppdevs@free.fr>
+2012-02-29 H.J. Lu <hongjiu.lu@intel.com>
- * include/debug/string (basic_string::insert): Add iterator check and
- pass normal iterator to normal insert.
- * include/debug/macros.h (__glibcxx_check_heap,
- __glibcxx_check_heap_pred): Remove __glibcxx_check_valid_range,
- already done.
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
-2011-02-17 Paolo Carlini <paolo.carlini@oracle.com>
+2012-02-28 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/47776
- * testsuite/ext/vstring/hash/char/1.cc: Fix.
- * testsuite/ext/vstring/hash/wchar_t/1.cc: Likewise.
+ PR libstdc++/52191
+ * testsuite/util/testsuite_abi.cc (compare_symbols): Check new
+ symbols added into the latest version. Mark tls entities as
+ undesignated.
-2011-02-17 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-02-28 Jakub Jelinek <jakub@redhat.com>
- * include/bits/regex.h (basic_regex::traits_type): Add typedef.
- (basic_regex::basic_regex(basic_regex&&)): Add noexcept.
- (basic_regex::operator=(basic_regex&&)): Likewise.
- (basic_regex::assign(basic_regex&&)): Likewise.
- (operator==(sub_match,...)): Implement DR 1181.
- (match_results::match_results(match_results&&)): Define.
- (match_results::operator=(const match_results&)): Fix parameter type.
- (match_results::operator=(match_results&&)): Define.
+ PR bootstrap/52414
+ * src/Makefile.am (libstdc++-symbols.ver): Only remove comment lines
+ if they are at the beginning of lines (with optional whitespace before
+ #).
+ * src/Makefile.in: Regenerated.
-2011-02-17 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-02-27 Jakub Jelinek <jakub@redhat.com>
- PR libstdc++/47724
- * include/bits/regex_compiler.h (_Scanner::_M_advance): Do not treat
- line anchors as metacharacters.
- * testsuite/28_regex/basic_regex/ctors/47724.cc: New.
+ * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
+ * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt:
+ Likewise.
+ * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
-2011-02-16 Paolo Carlini <paolo.carlini@oracle.com>
+2012-02-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
- PR libstdc++/47773
- * include/ext/vstring.h (hash<__gnu_cxx::__vstring>,
- hash<__gnu_cxx::__wvstring>, hash<__gnu_cxx::__u16vstring>,
- hash<__gnu_cxx::__u32vstring>): Add.
- * testsuite/ext/vstring/hash/char/1.cc: New.
- * testsuite/ext/vstring/hash/wchar_t/1.cc: Likewise.
+ PR libstdc++/52188
+ * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Remove symvers_renaming.
+ Remove ENABLE_SYMVERS_SOL2.
+ * configure: Regenerate.
+ * src/Makefile.am [ENABLE_SYMVERS] (libstdc++-symbols.ver):
+ Postprocess mapfile.
+ [ENABLE_SYMVERS_GNU]: Remove ENABLE_SYMVERS_SOL2 handling.
+ * src/Makefile.in: Regenerate.
-2011-02-16 Jonathan Wakely <jwakely.gcc@gmail.com>
+ * config/abi/pre/gnu.ver (GLIBCXX_3.4.5) [!__sun__ && !__svr4__]:
+ Don't export
+ _ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv.
+
+2012-02-25 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR testsuite/52201
+ * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc:
+ Require atomic builtins.
+ * testsuite/29_atomics/atomic/operators/51811.cc: Likewise.
+
+2012-02-23 Jason Merrill <jason@redhat.com>
+
+ * include/bits/locale_facets.h (class num_get): Undo reordering of
+ do_get virtual functions.
+
+2012-02-14 Edward Smith-Rowland <3dw4rd@verizon.net>
+
+ * testsuite/26_numerics/random/
+ uniform_real_distribution/requirements/typedefs.cc: Check param_type.
+ * testsuite/26_numerics/random/
+ piecewise_constant_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ chi_squared_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ normal_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ uniform_int_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ poisson_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ bernoulli_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ discrete_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ weibull_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ cauchy_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ negative_binomial_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ gamma_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ fisher_f_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ exponential_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ binomial_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ lognormal_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ extreme_value_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ piecewise_linear_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ student_t_distribution/requirements/typedefs.cc: Ditto.
+ * testsuite/26_numerics/random/
+ geometric_distribution/requirements/typedefs.cc: Ditto.
+
+2012-02-21 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/50349
+ * config/abi/pre/gnu.ver: Only one local.
+ * config/abi/pre/gnu-versioned-namespace.ver: Same.
+
+2012-02-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/52317 (cont)
+ * include/profile/unordered_map: Ad Library Exception comment.
+ * include/profile/set: Likewise.
+ * include/profile/base.h: Likewise.
+ * include/profile/impl/profiler_list_to_slist.h: Likewise.
+ * include/profile/impl/profiler_container_size.h: Likewise.
+ * include/profile/impl/profiler_vector_size.h: Likewise.
+ * include/profile/impl/profiler_hash_func.h: Likewise.
+ * include/profile/impl/profiler_trace.h: Likewise.
+ * include/profile/impl/profiler_list_to_vector.h: Likewise.
+ * include/profile/impl/profiler_vector_to_list.h: Likewise.
+ * include/profile/impl/profiler.h: Likewise.
+ * include/profile/impl/profiler_state.h: Likewise.
+ * include/profile/impl/profiler_map_to_unordered_map.h: Likewise.
+ * include/profile/impl/profiler_algos.h: Likewise.
+ * include/profile/impl/profiler_hashtable_size.h: Likewise.
+ * include/profile/impl/profiler_node.h: Likewise.
+ * include/profile/vector: Likewise.
+ * include/profile/unordered_set: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/map: Likewise.
+
+2012-02-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/52317
+ * python/Makefile.am: Update boilerplate license text to GPLv3.
+ * include/profile/unordered_map: Likewise.
+ * include/profile/set: Likewise.
+ * include/profile/base.h: Likewise.
+ * include/profile/impl/profiler_list_to_slist.h: Likewise.
+ * include/profile/impl/profiler_container_size.h: Likewise.
+ * include/profile/impl/profiler_vector_size.h: Likewise.
+ * include/profile/impl/profiler_hash_func.h: Likewise.
+ * include/profile/impl/profiler_trace.h: Likewise.
+ * include/profile/impl/profiler_list_to_vector.h: Likewise.
+ * include/profile/impl/profiler_vector_to_list.h: Likewise.
+ * include/profile/impl/profiler.h: Likewise.
+ * include/profile/impl/profiler_state.h: Likewise.
+ * include/profile/impl/profiler_map_to_unordered_map.h: Likewise.
+ * include/profile/impl/profiler_algos.h: Likewise.
+ * include/profile/impl/profiler_hashtable_size.h: Likewise.
+ * include/profile/impl/profiler_node.h: Likewise.
+ * include/profile/vector: Likewise.
+ * include/profile/unordered_set: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/map: Likewise.
+ * testsuite/21_strings/basic_string/numeric_conversions/
+ wchar_t/dr1261.cc: Likewise.
+ * testsuite/21_strings/basic_string/numeric_conversions/
+ char/dr1261.cc: Likewise.
+ * testsuite/20_util/reference_wrapper/invoke-2.cc: Likewise.
+
+2012-02-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/52241
+ * src/c++98/tree.cc (local_Rb_tree_increment,
+ local_Rb_tree_decrement): Add.
+ (_Rb_tree_increment(const _Rb_tree_node_base*),
+ _Rb_tree_decrement(const _Rb_tree_node_base*)): Use the latter.
+ (_Rb_tree_increment(_Rb_tree_node_base*),
+ _Rb_tree_decrement(_Rb_tree_node_base*)): New.
+
+2012-02-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/52309
+ * include/bits/hashtable_policy.h (_Equality_base<, true,>::
+ _M_equal(const _Hashtable&)): Compare values with operator==.
+ * testsuite/23_containers/unordered_set/operators/52309.cc: New.
+
+2012-02-17 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/51798 continued.
+ * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Grep for
+ __atomic_, not __sync.
+ * configure: Regenerated.
- * include/bits/regex.h (match_results::format): Use char_traits.
+2012-02-17 Benjamin Kosnik <bkoz@redhat.com>
-2011-02-16 Benjamin Kosnik <bkoz@redhat.com>
+ PR libstdc++/47058
+ * acinclude.m4 (GLIBCXX_ENABLE_WERROR): New.
+ (GLIBCXX_EXPORT_FLAGS): Add -Wabi to WARN_FLAGS
+ * configure.ac: Use it.
+ * fragment.am: Set WERROR_FLAG conditionally on --disable-werror.
+ * configure: Regenerate.
+ * python/Makefile.in: Same.
+ * Makefile.in: Same.
+ * doc/Makefile.in: Same.
+ * include/Makefile.in: Same.
+ * po/Makefile.in: Same.
+ * python/Makefile.in: Same.
+ * src/Makefile.in: Same.
+ * src/c++11/Makefile.in: Same.
+ * src/c++98/Makefile.in: Same.
+ * testsuite/Makefile.in: Same.
+
+2012-02-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR libstdc++/52189
+ * acinclude.m4 (GLIBCXX_CHECK_GTHREADS): Handle
+ --enable-libstdcxx-threads.
+ Disable on Solaris 8/9 with symbol versioning.
+ * configure.ac (GLIBCXX_CHECK_GTHREADS): Move after
+ GLIBCXX_ENABLE_SYMVERS.
+ * configure: Regenerate.
+ * doc/xml/manual/configure.xml (--enable-libstdcxx-threads): Explain.
- * include/std/atomic: Remove atomic_address, uplift to N3225.
- * include/bits/atomic_0.h: Same.
- * include/bits/atomic_2.h: Same.
- * include/bits/atomic_base.h: Same.
- * testsuite/29_atomics/atomic_address/*: Delete.
+2012-02-15 DJ Delorie <dj@redhat.com>
-2011-02-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+ * src/c++98/locale.cc (locale::facet::_S_get_c_locale): Fix typo.
- * include/bits/regex.h (sub_match::sub_match): Add.
- (match_results::ready): Add.
- (match_results::empty): Adjust.
- (match_results::length): Add missing dereference.
- (match_results::operator[],prefix,suffix): Add debug mode checks.
- (match_results::cend): Re-use end().
- (match_results::format): Adjust signatures.
- (operator==(match_results,match_results)): Implement.
- * include/bits/regex_compiler.h (_Scanner_base): Use constexpr.
- * include/bits/regex_constants.h (syntax_option_type): Likewise.
- * include/bits/regex_grep_matcher.h: Fix comment typo.
- (_SpecializedResults::_SpecializedResults): Simplify.
- * include/bits/regex_cursor.h: Fix comment typo.
- * include/bits/regex_nfa.h: Likewise.
- * testsuite/28_regex/basic_regex/ctors/basic/string_range_01_02_03.cc:
- Fix error code, remove xfail.
- * testsuite/28_regex/basic_regex/ctors/extended/
- string_range_01_02_03.cc: Likewise.
+2012-02-15 Benjamin Kosnik <bkoz@redhat.com>
-2011-02-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+ PR libstdc++/51368
+ * acinclude.m4 (GLIBCXX_ENABLE_PYTHON): New.
+ * configure.ac: Use it.
+ * python/Makefile.am: Same.
+ * configure: Regenerate.
+ * python/Makefile.in: Regenerate.
+ * Makefile.in: Same.
+ * doc/Makefile.in: Same.
+ * include/Makefile.in: Same.
+ * po/Makefile.in: Same.
+ * src/Makefile.in: Same.
+ * src/c++11/Makefile.in: Same.
+ * src/c++98/Makefile.in: Same.
+ * testsuite/Makefile.in: Same.
- * include/bits/regex_compiler.h: Remove unnecessary bind() calls.
- * include/bits/regex_nfa.h: Remove unnecessary base classes.
+2012-02-14 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ * 30_threads/thread/native_handle/typesizes.cc: Do not run on cygwin.
- * configure: Regenerate.
+2012-02-14 Tom Tromey <tromey@redhat.com>
+
+ * testsuite/libstdc++-prettyprinters/cxx11.cc (main): Add new
+ tests.
+ * python/libstdcxx/v6/printers.py (Tr1HashtableIterator.__init__):
+ Rewrite.
+ (Tr1HashtableIterator.update): Remove.
+ (Tr1HashtableIterator.next): Rewrite.
+
+2012-02-13 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers.
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc: Same.
-2011-02-12 Paolo Carlini <paolo.carlini@oracle.com>
+2012-02-13 Richard Henderson <rth@redhat.com>
- PR libstdc++/47709
- * include/ext/algorithm (is_heap): In C++0x mode import from
- namespace std.
- * testsuite/ext/is_heap/47709.cc: New.
+ PR libstdc++/51798 continued.
+ * include/bits/shared_ptr_base.h
+ (_Sp_counted_base<_S_atomic>::_M_add_ref_lock): Hoist initial load
+ outside compare_exchange loop.
+ * include/tr1/shared_ptr.h: Same.
+ * include/parallel/compatibility.h (__compare_and_swap_32): Use strong
+ version of compare_exchange.
+ (__compare_and_swap_64): Same.
+ * include/profile/impl/profiler_state.h (__gnu_profile::__turn): Same.
+ * libsupc++/guard.cc (__cxa_guard_acquire): Same.
-2011-02-12 Jakub Jelinek <jakub@redhat.com>
+2012-02-10 Benjamin Kosnik <bkoz@redhat.com>
Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/47662
- * testsuite/17_intro/headers/c++200x/operator_names.cc: New.
- * testsuite/17_intro/headers/c++1998/operator_names.cc: Add comment.
+ PR libstdc++/51798 continued.
+ * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Use __atomic_*
+ builtins instead of __sync_* builtins for atomic functionality.
+ * include/bits/shared_ptr_base.h: Same.
+ * include/parallel/compatibility.h: Same.
+ * include/profile/impl/profiler_state.h: Same.
+ * include/tr1/shared_ptr.h: Same.
+ * libsupc++/eh_ptr.cc: Same.
+ * libsupc++/eh_throw.cc: Same.
+ * libsupc++/eh_tm.cc: Same.
+ * libsupc++/guard.cc: Same.
+ * configure: Regenerated.
+ * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers.
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc: Same.
-2011-02-12 Paolo Carlini <paolo.carlini@oracle.com>
+2012-02-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
- * include/tr1/cmath (fabs): Define.
- * include/tr1/complex (acos, asin, atan): Avoid duplicate definitions
- in C++0x mode.
+ PR libstdc++/51296
+ * config/os/osf/ctype_base.h,
+ config/os/osf/ctype_configure_char.cc,
+ config/os/osf/ctype_inline.h, config/os/osf/error_constants.h:
+ Copy from config/os/generic.
+ * config/os/osf/os_defines.h: Likewise.
+ (_GTHREAD_USE_MUTEX_INIT_FUNC, _GTHREAD_USE_COND_INIT_FUNC):
+ Define.
+ * configure.host <osf*>: Use os/osf for os_include_dir.
-2011-02-12 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-02-10 Uros Bizjak <ubizjak@gmail.com>
- * testsuite/tr1/headers/c++200x/complex.cc: New.
+ * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Regenerated.
-2011-02-11 Johannes Singler <singler@kit.edu>
+2012-02-09 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/47433
- * include/parallel/losertree.h
- (_LoserTreeUnguarded<>::__delete_min_insert):
- Add missing "using std::swap;", as for other variants.
+ * doc/xml/manual/documentation_hacking.xml: Fix invalid attribute.
-2011-02-10 Benjamin Kosnik <bkoz@redhat.com>
+2012-02-08 Jonathan Wakely <jwakely.gcc@gmail.com>
- * src/Makefile.am (sources): Add regex.cc.
- * src/Makefile.in: Regenerate.
- * src/regex.cc: New.
- * include/bits/regex_error.h (error_type): Use constexpr.
- (regex_error): Move ctor and dtor out of line.
-
- * testsuite/28_regex/03_requirements: To...
- * testsuite/28_regex/requirements: ... this.
- * testsuite/28_regex/04_header: To...
- * testsuite/28_regex/headers: ... this.
- * testsuite/28_regex/05_constants: To...
- * testsuite/28_regex/constants: ... this.
- * testsuite/28_regex/06_exception_type: To...
- * testsuite/28_regex/regex_error: ... this.
- * testsuite/28_regex/07_traits: To...
- * testsuite/28_regex/traits: ... this.
- * testsuite/28_regex/08_basic_regex: To...
- * testsuite/28_regex/basic_regex: ... this.
- * testsuite/28_regex/09_sub_match: To...
- * testsuite/28_regex/sub_match: ... this.
- * testsuite/28_regex/10_match_results: To...
- * testsuite/28_regex/match_results: ... this.
- * testsuite/28_regex/11_algorithms: To...
- * testsuite/28_regex/algorithms: ... this.
- * testsuite/28_regex/12_iterators: To...
- * testsuite/28_regex/iterators: ... this.
-
-2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
-
- PR libstdc++/47662
- * include/bits/c++config: Do not use alternative token.
- * testsuite/17_intro/headers/c++1998/operator_names.cc: New.
-
-2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
-
- * src/future.cc (future_error_category::message): Handle no_state.
-
-2011-02-10 Paolo Carlini <paolo.carlini@oracle.com>
-
- * testsuite/23_containers/multimap/modifiers/erase/47628.cc: Do
- not test in C++0x mode.
- * testsuite/23_containers/map/modifiers/erase/47628.cc: Likewise.
- * testsuite/20_util/headers/utility/synopsis.cc: Tweak to work
- in C++0x mode too.
-
-2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
-
- * doc/xml/manual/status_cxx200x.xml: Update.
- * doc/html/*: Regenerate.
+ * doc/xml/manual/status_cxx2011.xml: Update C++11 status table.
-2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-02-07 Benjamin Kosnik <bkoz@redhat.com>
- * doc/xml/manual/debug.xml: Improve data race docs.
+ * doc/doxygen/user.cfg.in: Update to doxygen 1.7.6.1.
+ * doc/xml/manual/documentation_hacking.xml: Update.
-2011-02-09 Paolo Carlini <paolo.carlini@oracle.com>
+2012-02-07 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/47668
- * include/debug/map.h (map): Remove unnecessary using-declaration.
- * include/debug/multimap.h (multimap): Likewise.
- * include/profile/map.h (map): Likewise.
- * include/profile/multimap.h (multimap): Likewise.
+ * testsuite/30_threads/call_once/39909.cc: Remove duplicate target
+ selector.
+ * testsuite/30_threads/call_once/49668.cc: Likewise.
+ * testsuite/30_threads/call_once/call_once1.cc: Likewise.
+ * testsuite/30_threads/lock_guard/cons/1.cc: Likewise.
+ * testsuite/30_threads/mutex/cons/1.cc: Likewise.
+ * testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise.
+ * testsuite/30_threads/mutex/lock/1.cc: Likewise.
+ * testsuite/30_threads/mutex/native_handle/1.cc: Likewise.
+ * testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise.
+ * testsuite/30_threads/mutex/try_lock/1.cc: Likewise.
+ * testsuite/30_threads/mutex/try_lock/2.cc: Likewise.
+ * testsuite/30_threads/mutex/unlock/1.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/1.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/2.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/3.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/4.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/5.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/6.cc: Likewise.
+ * testsuite/30_threads/unique_lock/locking/1.cc: Likewise.
+ * testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
+ * testsuite/30_threads/unique_lock/locking/3.cc: Likewise.
+ * testsuite/30_threads/unique_lock/locking/4.cc: Likewise.
+ * testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise.
+ * testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise.
-2011-02-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-02-07 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/43863
- * libsupc++/guard.cc (recursive_init_error::~recursive_init_error):
- Move to ...
- * libsupc++/guard_error.cc: ... new file.
- * libsupc++/Makefile.am: Update.
- * libsupc++/Makefile.in: Regenerate.
+ PR libstdc++/51296
+ * include/std/mutex (__mutex_base::~__mutex_base): Declare noexcept.
+ * src/c++11/condition_variable.cc (condition_variable): Use macro for
+ initializer function.
-2011-02-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+ PR libstdc++/51906
+ * config/os/bsd/darwin/os_defines.h: Disable static initializer for
+ recursive mutexes.
- * include/std/future (packaged_task::operator bool): Rename to...
- (packaged_task::valid): ...this.
- * testsuite/30_threads/packaged_task/cons/1.cc: Adjust.
- * testsuite/30_threads/packaged_task/cons/2.cc: Adjust.
- * testsuite/30_threads/packaged_task/cons/move.cc: Adjust.
- * testsuite/30_threads/packaged_task/cons/move_assign.cc: Adjust.
- * testsuite/30_threads/packaged_task/cons/alloc.cc: Adjust.
- * testsuite/30_threads/packaged_task/members/invoke.cc: Adjust.
- * testsuite/30_threads/packaged_task/members/reset.cc: Adjust.
- * testsuite/30_threads/packaged_task/members/reset2.cc: Adjust.
- * testsuite/30_threads/packaged_task/members/swap.cc: Adjust.
- * testsuite/30_threads/packaged_task/members/boolconv.cc: Remove.
- * testsuite/30_threads/packaged_task/members/valid.cc: Add.
+2012-02-06 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-02-09 Paolo Carlini <paolo.carlini@oracle.com>
+ PR libstdc++/52128
+ * src/c++11/future.cc: Add explicit instantiation.
- * doc/xml/manual/io.xml: Fix typo.
- * doc/html/manual/streambufs.html: Likewise.
+2012-02-06 François Dumont <fdumont@gcc.gnu.org>
-2011-02-09 Paolo Carlini <paolo.carlini@oracle.com>
+ * include/debug/safe_iterator.h
+ (_Safe_iterator::_M_before_dereferenceable): Avoid the expensive
+ creation of a _Safe_iterator instance to do the check.
- * config/abi/pre/gnu.ver: Fix.
+2012-02-05 Jonathan Wakely <jwakely.gcc@gmail.com>
-2011-02-08 Benjamin Kosnik <bkoz@redhat.com>
+ PR libstdc++/52104
+ * include/std/future (__future_base::_Async_state_common): Define
+ destructor inline for targets without TLS.
+ * src/c++11/future.cc (__future_base::_Async_state_common): Only
+ define destructor for TLS targets.
- * doc/xml/manual/appendix_porting.xml: Add doc section.
- * doc/xml/manual/appendix_contributing.xml: Split out doc bits to...
- * doc/xml/manual/documentation_hacking.xml: ...here.
+2012-02-05 Jonathan Wakely <jwakely.gcc@gmail.com>
- * doc/xml/manual/debug_mode.xml: Adjust.
- * doc/xml/manual/prerequisites.xml: Adjust.
- * doc/Makefile.am (xml_sources): Add dot files,
- documentation_hacking.xml.
- * doc/Makefile.in: Regenerate.
+ PR libstdc++/51956
+ * python/libstdcxx/v6/printers.py (StdPointerPrinter): Rename to...
+ (SharedPointerPrinter): This. Also show weak count.
+ * testsuite/libstdc++-prettyprinters/shared_ptr.cc: New.
- * doc/xml/manual/build_hacking.xml: Use absolute paths for images.
- * doc/xml/images/confdeps.pdf: Add.
+2012-02-05 Jonathan Wakely <jwakely.gcc@gmail.com>
- * doc/html/*: Regenerate.
+ * testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc: Modify to
+ PASS instead of XFAIL.
-2011-02-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-02-05 Jeffrey Yasskin <jyasskin@gcc.gnu.org>
+ Paolo Carlini <paolo.carlini@oracle.com>
- * doc/xml/gnu/fdl-1.2.xml: Remove.
- * doc/xml/gnu/gpl-2.0.xml: Remove.
- * doc/Makefile.am: Update.
- * doc/Makefile.in: Regenerate.
+ PR libstdc++/52119
+ * include/std/limits (__glibcxx_min): Fix to avoid undefined behavior.
-2011-02-07 Paolo Carlini <paolo.carlini@oracle.com>
+2012-02-03 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/47628
- * include/bits/stl_tree.h (_Rb_tree::erase(iterator), erase(iterator,
- iterator)): Add back in C++03 mode.
- * testsuite/23_containers/map/modifiers/erase/47628.cc: New.
- * testsuite/23_containers/multimap/modifiers/erase/47628.cc: Likewise.
+ PR libstdc++/49445
+ * testsuite/29_atomics/atomic/cons/49445.cc: Add.
-2011-02-07 Benjamin Kosnik <bkoz@redhat.com>
+2012-02-03 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/47560 try two
- * config/os/hpux/os_defines.h: Guard for C++.
+ PR libstdc++/51811
+ * include/bits/atomic_base.h (atomic<_Tp*>): Fix offsets.
+ * testsuite/29_atomics/atomic/operators/51811.cc: New.
+ * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: New.
-2011-02-07 Gerald Pfeifer <gerald@pfeifer.com>
+2012-02-03 Jakub Jelinek <jakub@redhat.com>
- * doc/xml/faq.xml: Adjust link to bug database.
- Remove old item on broken header files.
+ * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
+ * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt:
+ Likewise.
+ * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
-2011-02-04 Benjamin Kosnik <bkoz@redhat.com>
+2012-02-02 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/52068
+ * src/c++11/Makefile.am (toolexeclib_LTLIBRARIES,
+ libc__11_la_SOURCES): Remove.
+ * src/c++11/Makefile.in: Regenerate.
+ * src/c++98/Makefile.am (toolexeclib_LTLIBRARIES,
+ libc__98_la_SOURCES): Remove.
+ * src/c++98/Makefile.in: Regenerate.
+
+2012-02-01 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/49204
+ * include/std/future (__future_base::_State_base::wait()): Use lambda
+ expression for predicate and remove redundant test.
+ (__future_base::_State_base::wait_for()): Return future_status and
+ use lambda expression for predicate.
+ (__future_base::_State_base::wait_until()): Likewise.
+ (__basic_future::wait_for(), __basic_future::wait_until()): Likewise.
+ (__future_base::_Async_state): Replace with _Async_state_common
+ class for non-dependent functionality and _Async_state_impl class
+ template for dependent functionality.
+ (__future_base::_Async_state_common::_M_join): Serialize attempts to
+ join thread.
+ (__future_base::_Async_state_common::_M_run_deferred): Join.
+ (__future_base::_Async_state::_M_do_run): Replace with lambda.
+ * src/c++11/future.cc (__future_base::_Async_state_common): Define
+ destructor, so key function is in the library.
+ * config/abi/pre/gnu.ver: Add exports for ~_Async_state_common.
+ * testsuite/30_threads/packaged_task/members/get_future.cc: Expect
+ future_status return instead of bool.
+ * testsuite/30_threads/shared_future/members/wait_until.cc: Likewise.
+ * testsuite/30_threads/shared_future/members/wait_for.cc: Likewise.
+ * testsuite/30_threads/future/members/wait_until.cc: Likewise.
+ * testsuite/30_threads/future/members/wait_for.cc: Likewise.
+ * testsuite/30_threads/promise/members/set_value2.cc: Likewise.
+ * testsuite/30_threads/promise/members/set_value3.cc: Likewise.
+ * testsuite/30_threads/promise/members/swap.cc: Likewise.
+
+2012-01-30 Tom Tromey <tromey@redhat.com>
+
+ PR libstdc++/51649:
+ * testsuite/libstdc++-prettyprinters/debug.cc: New file.
+ * testsuite/lib/gdb-test.exp (regexp-test): New proc.
+ (note-test): Update.
+ (gdb-test): Handle regexp tests. Add some logging.
+ * testsuite/libstdc++-prettyprinters/simple.cc: Compile with -O0.
+ (placeholder, use): Remove.
+ (main): Add tests for deque, list, map, and set iterators. Add
+ tests for slist and slist iterator.
+ * testsuite/libstdc++-prettyprinters/48362.cc (main): Handle __7
+ namespace.
+ * python/libstdcxx/v6/printers.py (StdListPrinter.children): Use
+ the type's _Node typedef.
+ (StdListIteratorPrinter.to_string): Change how node type is
+ computed.
+ (StdSlistPrinter.children): Use the type's _Node typedef.
+ (StdSlistIteratorPrinter.to_string): Likewise.
+ (StdRbtreeIteratorPrinter.to_string): Use the type's _Link_type
+ typedef.
+ (StdMapPrinter.children): Change how the node's type is computed.
+ (StdSetPrinter.children): Likewise.
+ (StdForwardListPrinter.children): Use the type's _Node typedef.
+ (Printer.add_version): New method.
+ (Printer.add_container): New method.
+ (build_libstdcxx_dictionary): Handle __7 and __cxx1998
+ namespaces.
+ (find_type): New function.
+
+2012-01-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/51795
+ * include/bits/random.h (linear_congruential_generator): Add
+ static_assert preventing instantiation for values of 'a' and 'm'
+ currently handled incorrectly by _Mod::__calc.
+ * include/bits/random.tcc (seed_seq::generate): Avoid unsafe
+ uses of _Mod::__calc.
+
+2012-01-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR libstdc++/51798
+ * config/cpu/generic/atomicity_builtins/atomicity.h
+ (__exchange_and_add, __atomic_add): Use __atomic_fetch_add
+ with __ATOMIC_ACQ_REL semantics instead of __sync_fetch_and_add.
+ * include/ext/atomicity.h (__exchange_and_add, __atomic_add):
+ Likewise.
- * include/bits/regex_error.h (__throw_regex_error): Not inline.
- * src/functexcept.cc: Add definition.
- * config/abi/pre/gnu.ver: Export.
+2011-01-27 Rafael Avila de Espindola <rafael.espindola@gmail.com>
-2011-02-04 Ralf Corsépius <ralf.corsepius@rtems.org>
+ * libsupc++/typeinfo: Correctly match #pragma GCC visibility
+ pop with #pragma GCC visibility push.
- * crossconfig.m4 (GLIBCXX_CROSSCONFIG): Add *-rtems*.
- * configure: Regenerate.
+2012-01-27 Benjamin Kosnik <bkoz@redhat.com>
+ Matthias Klose <doko@ubuntu.com>
-2011-02-01 Paolo Carlini <paolo.carlini@oracle.com>
+ * configure.ac (GLIBCXX_ENABLE_DEBUG_FLAGS): Use -gdwarf-4 -g3 -O0.
+ * configure.in: Regenerated.
+ * src/Makefile.am (all-once, install-data-once): New rules.
+ (all-local, install-data-local): Use them.
+ (build-debug, install-debug): Tweak.
+ * src/Makefile.in: Regenerate.
- PR libstdc++/46914
- * include/bits/atomic_0.h (_ATOMIC_STORE_, _ATOMIC_MODIFY_,
- _ATOMIC_CMPEXCHNG_): Rename __v -> __w, and __m -> __n, to
- avoid name conflicts.
+2012-01-27 Richard Henderson <rth@redhat.com>
-2011-02-01 Benjamin Kosnik <bkoz@redhat.com>
+ * include/bits/atomic_base.h (__atomic_flag_base): Define _M_i
+ based on the value of __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
+ (ATOMIC_FLAG_INIT): Initialize with 0, not false.
+ (atomic_flag::atomic_flag): Use __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
- PR libstdc++/47560
- * config/os/hpux/os_defines.h: Remove use of macros on namespace.
+2012-01-26 Jakub Jelinek <jakub@redhat.com>
-2011-02-01 Benjamin Kosnik <bkoz@redhat.com>
+ PR bootstrap/51985
+ * src/c++98/Makefile.am (libc__98_la_SOURCES,
+ libc__98convenience_la_SOURCES): Remove $(inst_sources).
+ * src/c++98/Makefile.in: Regenerated.
- * scripts/run_doxygen: Allow doxygen 1.7.0 again.
- * doc/doxygen/user.cfg.in (PDF_HYPERLINKS): Re-enable.
- (COMPACT_LATEX): Enable.
+2012-01-25 Richard Sandiford <rdsandiford@googlemail.com>
- * include/profile/impl/profiler_container_size.h: Adjust doxygen markup.
- * include/profile/impl/profiler_hash_func.h: Same.
- * include/bits/hashtable.h: Same.
- * include/backward/auto_ptr.h: Same.
- * include/backward/strstream: Same.
- * include/backward/backward_warning.h: Same.
- * include/backward/binders.h: Same.
+ * testsuite/20_util/system_clock/1.cc: Add dg-require-time.
+ * testsuite/22_locale/time_put/put/wchar_t/12439_1.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/12439_2.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/12439_3.cc: Likewise.
+ * testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc: Add
+ dg-require-fileio.
+ * testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc: Likewise.
+ * testsuite/27_io/basic_istream/tellg/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc: Likewise.
+ * testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc:
+ Likewise.
+ * testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc: Likewise.
-2011-02-01 Gerald Pfeifer <gerald@pfeifer.com>
+2012-01-25 Matthias Klose <doko@ubuntu.com>
- * doc/xml/manual/debug.xml: Use GDB instead of gdb.
- Adjust link to GDB manual.
+ * testsuite/30_threads/condition_variable_any/requirements: Remove
+ empty directory.
-2011-01-31 Benjamin Kosnik <bkoz@redhat.com>
+2012-01-23 Benjamin Kosnik <bkoz@redhat.com>
- * include/bits/c++config (_GLIBCXX_DEPRECATED): To
- _GLIBCXX_USE_DEPRECATED.
- (_GLIBCXX_DEPRECATED_ATTR): To _GLIBCXX_DEPRECATED.
- * doc/xml/manual/using.xml: Same.
- * include/std/memory: Same.
- * include/std/streambuf: Same.
- * include/bits/shared_ptr.h: Same.
- * include/bits/unique_ptr.h: Same.
- * include/bits/shared_ptr_base.h: Same.
- * include/bits/stl_function.h: Same.
- * include/tr1/shared_ptr.h: Same.
- * include/backward/auto_ptr.h: Same.
- * include/backward/binders.h: Same.
-
-2011-01-31 Paolo Carlini <paolo.carlini@oracle.com>
-
- * doc/html/ext/lwg-active.html: Update to Revision D73.
- * doc/html/ext/lwg-closed.html: Likewise.
- * doc/html/ext/lwg-defects.html: Likewise.
- * doc/xml/manual/intro.xml: Update status of issues 408, 539, 865.
-
-2011-01-30 Benjamin Kosnik <bkoz@redhat.com>
-
- PR libstdc++/36104 part four
- * include/bits/c++config (_GLIBCXX_STD): Remove.
- (_GLIBCXX_STD_D, _GLIBCXX_PR): Now _GLIBCXX_STD_C.
- (_GLIBCXX_P): Now _GLIBCXX_STD_A.
- (_GLIBCXX_NAMESPACE_DEBUG, _GLIBCXX_NAMESPACE_PARALLEL,
- _GLIBCXX_NAMESPACE_PROFILE, _GLIBCXX_NAMESPACE_VERSION): Remove.
- (_GLIBCXX_INLINE_DEBUG, _GLIBCXX_INLINE_PARALLEL,
- _GLIBCXX_INLINE_PROFILE): Remove.
- (_GLIBCXX_BEGIN_NAMESPACE(X)): Remove.
- (_GLIBCXX_END_NAMESPACE): Remove.
- (_GLIBCXX_BEGIN_NESTED_NAMESPACE(X, Y)): Remove.
- (_GLIBCXX_END_NESTED_NAMESPACE): Remove.
- (_GLIBCXX_BEGIN_NAMESPACE_ALGO): Add.
- (_GLIBCXX_END_NAMESPACE_ALGO): Add.
- (_GLIBCXX_BEGIN_NAMESPACE_CONTAINER): Add.
- (_GLIBCXX_END_NAMESPACE_CONTAINER): Add.
- (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Add.
- (_GLIBCXX_END_NAMESPACE_VERSION): Add.
- (_GLIBCXX_BEGIN_LDBL_NAMESPACE): To _GLIBCXX_BEGIN_NAMESPACE_LDBL.
- (_GLIBCXX_END_LDBL_NAMESPACE): To _GLIBCXX_END_NAMESPACE_LDBL.
- (_GLIBCXX_VISIBILITY_ATTR): Revert to _GLIBCXX_VISIBILITY.
- * include/*: Use new macros for namespace scope.
- * config/*: Same.
- * src/*: Same.
-
- * src/Makefile.am (sources): Remove debug_list.cc, add
- compatibility-debug_list-2.cc.
- (parallel_sources): Remove parallel_list.cc, add
- compatibility-parallel_list-2.cc.
- (compatibility-parallel_list-2.[o,lo]): New rule.
+ * src/Makefile.am (libstdc++convenience.la): Correct stamp rule, copy.
* src/Makefile.in: Regenerate.
- * src/debug_list.cc: Remove.
- * src/parallel_list.cc: Remove.
- * src/compatibility-list-2.cc: New.
- * src/compatibility-debug_list-2.cc: New.
- * src/compatibility-parallel_list-2.cc: New.
-
- * doc/doxygen/user.cfg.in: Adjust macros.
-
- * testsuite/20_util/auto_ptr/assign_neg.cc: Adjust line numbers, macros.
- * testsuite/20_util/declval/requirements/1_neg.cc: Same.
- * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Same.
- * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Same.
- * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Same.
- * testsuite/20_util/forward/c_neg.cc: Same.
- * testsuite/20_util/forward/f_neg.cc: Same.
- * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same.
- * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same.
- * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Same.
- * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Same.
- * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Same.
- * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Same.
- * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Same.
- * testsuite/23_containers/deque/requirements/dr438/
- constructor_1_neg.cc: Same.
- * testsuite/23_containers/deque/requirements/dr438/
- constructor_2_neg.cc: Same.
- * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Same.
- * testsuite/23_containers/forward_list/capacity/1.cc: Same.
- * testsuite/23_containers/forward_list/requirements/dr438/
- assign_neg.cc: Same.
- * testsuite/23_containers/forward_list/requirements/dr438/
- constructor_1_neg.cc: Same.
- * testsuite/23_containers/forward_list/requirements/dr438/
- constructor_2_neg.cc: Same.
- * testsuite/23_containers/forward_list/requirements/dr438/
- insert_neg.cc: Same.
- * testsuite/23_containers/list/capacity/29134.cc: Same.
- * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Same.
- * testsuite/23_containers/list/requirements/dr438/
- constructor_1_neg.cc: Same.
- * testsuite/23_containers/list/requirements/dr438/
- constructor_2_neg.cc: Same.
- * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Same.
- * testsuite/23_containers/vector/bool/capacity/29134.cc: Same.
- * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc: Same.
- * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Same.
- * testsuite/23_containers/vector/requirements/dr438/
- constructor_1_neg.cc: Same.
- * testsuite/23_containers/vector/requirements/dr438/
- constructor_2_neg.cc: Same.
- * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Same.
- * testsuite/25_algorithms/sort/35588.cc: Same.
- * testsuite/27_io/ios_base/cons/assign_neg.cc: Same.
- * testsuite/27_io/ios_base/cons/copy_neg.cc: Same.
- * testsuite/ext/profile/mutex_extensions_neg.cc: Same.
- * testsuite/ext/profile/profiler_algos.cc: Same.
- * testsuite/ext/type_traits/add_unsigned_floating_neg.cc: Same.
- * testsuite/ext/type_traits/add_unsigned_integer_neg.cc: Same.
- * testsuite/ext/type_traits/remove_unsigned_floating_neg.cc: Same.
- * testsuite/ext/type_traits/remove_unsigned_integer_neg.cc: Same.
- * testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc: Same.
-2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
-
- * doc/xml/manual/abi.xml: Adjust link to C++ ABI specification.
- Improve description of one such reference.
-
-2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
-
- * doc/xml/manual/codecvt.xml: Fix link to The Austin Common
- Standards Revision Group.
- * doc/xml/manual/locale.xml: Ditto.
- * doc/xml/manual/messages.xml: Ditto.
- * doc/xml/manual/using_exceptions.xml: Ditto.
-
-2011-01-28 Paolo Carlini <paolo.carlini@oracle.com>
-
- * include/bits/atomic_base.h: Do not include <stddef.h>.
- (kill_dependency): Uglify ret.
-
-2011-01-26 Johannes Singler <singler@kit.edu>
-
- * include/parallel/numeric (inner_product, partial_sum):
- Qualify subsequent call with __gnu_parallel instead of
- _GLIBCXX_STD_P to reenable parallel execution without ambiguity.
- * include/parallel/algobase.h (equal): Likewise.
- * include/parallel/algo.h (find_first_of, search_n, merge,
- nth_element, partial_sort, max_element, min_element): Likewise.
- * testsuite/25_algorithms/headers/algorithm/
- parallel_algorithm_mixed1.cc (main): Add respective test cases.
- * testsuite/25_algorithms/headers/algorithm/
- parallel_algorithm_mixed2.cc (main): Likewise.
- * testsuite/26_numerics/headers/numeric/
- parallel_numeric_mixed1.cc (main): Likewise.
- * testsuite/26_numerics/headers/numeric/
- parallel_numeric_mixed2.cc (main): Likewise.
-
-2011-01-24 Graham Reed <greed@pobox.com>
-
- PR libstdc++/47387
- * config/os/aix/ctype_inline.h (ctype<char>::is): Use _M_table if
- provided.
-
-2011-01-24 Johannes Singler <singler@kit.edu>
-
- PR libstdc++/47433
- * include/parallel/losertree.h
- (_LoserTree<>::__delete_min_insert):
- Do not qualify swap with std:: for value type,
- but include a using directive instead.
- (_LoserTreeUnguarded<>::__delete_min_insert): Likewise.
- * include/parallel/balanced_quicksort.h (__qsb_divide):
- Use std::iter_swap instead of std::swap.
- (__qsb_local_sort_with_helping): Likewise.
- * include/parallel/partition.h (__parallel_partition):
- Likewise. (__parallel_nth_element): Likewise.
-
-2011-01-24 Johannes Singler <singler@kit.edu>
-
- PR libstdc++/47437
- * include/parallel/multiway_merge.h (_UnguardedIterator):
- Remove useless "mutable" from reference declaration.
+2012-01-23 Benjamin Kosnik <bkoz@redhat.com>
-2011-01-21 Benjamin Kosnik <bkoz@redhat.com>
-
- * include/bits/c++config (_GLIBCXX_EXPORT_TEMPLATE): Remove.
- * include/debug/safe_sequence.h: Same.
- * include/debug/safe_iterator.h: Same.
- * include/std/forward_list: Same.
- * include/std/deque: Same.
- * include/std/list: Same.
- * include/std/random: Same.
- * include/std/streambuf: Same.
- * include/std/fstream: Same.
- * include/std/istream: Same.
- * include/std/string: Same.
- * include/std/ostream: Same.
- * include/std/sstream: Same.
- * include/ext/vstring.h: Same.
- * include/bits/basic_ios.h: Same.
- * include/bits/locale_classes.h: Same.
- * include/bits/locale_facets.h: Same.
- * include/bits/valarray_array.h: Same.
- * include/bits/locale_facets_nonio.h: Same.
- * include/tr1/random: Same.
-
-2011-01-20 Jonathan Wakely <jwakely.gcc@gmail.com>
-
- * doc/xml/manual/diagnostics.xml: Replace note about C++0x concepts.
-
-2011-01-20 Benjamin Kosnik <bkoz@redhat.com>
-
- PR libstdc++/36104 part three
- * src/hashtable_c++0x.cc: Adjust namespace macros.
- * testsuite/util/testsuite_rvalref.h: Don't forward declare hash.
- * config/abi/pre/gnu-versioned-namespace.ver: Update.
-
-2011-01-20 Benjamin Kosnik <bkoz@redhat.com>
-
- * include/ext/pb_ds/detail/resize_policy/
- hash_load_check_resize_trigger_imp.hpp: Adjust assert condition.
- * include/ext/pb_ds/detail/pat_trie_/
- constructors_destructor_fn_imps.hpp: Same.
- * include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp: Format.
- * include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp: Same.
- * include/ext/pb_ds/detail/debug_map_base.hpp: Use never_adjustor.
-
- * testsuite/ext/pb_ds/regression/hash_data_map_rand.cc: Adjust
- iterations downward when testing in debug mode.
- * testsuite/ext/pb_ds/regression/trie_data_map_rand.cc: Same.
- * testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc: Same.
- * testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc: Same.
- * testsuite/ext/pb_ds/regression/tree_data_map_rand.cc: Same.
- * testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc: Same.
- * testsuite/ext/pb_ds/example/hash_illegal_resize.cc: Use SIZE,
- reduce in debug mode.
-
-2011-01-19 Benjamin Kosnik <bkoz@redhat.com>
-
- PR libstdc++/36104 part two
- * include/bits/hashtable.h: Revert to non-nested macro usage.
- * include/bits/hashtable_policy.h: Same.
-
-2011-01-19 Graham Reed <greed@pobox.com>
-
- PR libstdc++/47354
- * src/bitmap_allocator.cc (free_list::_M_get): Lock mutex.
-
-2011-01-18 Benjamin Kosnik <bkoz@redhat.com>
-
- * doc/xml/images/confdeps.png: Regenerate.
-
- * include/std/chrono (duration): Mark copy constructor constexpr.
- * testsuite/20_util/duration/cons/constexpr.cc: Add test.
-
-2011-01-18 Paolo Carlini <paolo.carlini@oracle.com>
-
- * include/bits/unique_ptr.h (default_delete<>::default_delete()):
- Declare defaulted per DR 1517.
- * testsuite/util/testsuite_common_types.h
- (constexpr_defaulted_default_constructible): Add.
- * testsuite/20_util/default_delete/cons/constexpr.cc: Use it.
-
-2011-01-17 Paolo Carlini <paolo.carlini@oracle.com>
-
- * include/bits/stl_queue.h (queue<>::swap, priority_queue<>::swap):
- Implement DR 1198.
- * include/bits/stl_stack.h (stack<>::swap): Likewise.
-
-2011-01-16 Paolo Carlini <paolo.carlini@oracle.com>
-
- PR libstdc++/47323
- * testsuite/28_regex/08_basic_regex/requirements/constexpr_data.cc:
- Only test wregex when _GLIBCXX_USE_WCHAR_T is defined.
-
-2011-01-16 Paolo Carlini <paolo.carlini@oracle.com>
-
- PR libstdc++/47320
- * testsuite/18_support/numeric_limits/lowest.cc:
- Only test wchar_t when _GLIBCXX_USE_WCHAR_T is defined.
-
-2011-01-16 Paolo Carlini <paolo.carlini@oracle.com>
-
- PR libstdc++/47321
- * testsuite/21_strings/basic_string/requirements/typedefs.cc:
- Only test std::wstring when _GLIBCXX_USE_WCHAR_T is defined.
-
-2011-01-16 François Dumont <francois.cppdevs@free.fr>
-
- * testsuite/23_containers/forward_list/debug/erase_after1_neg.cc: Move
- to this. Use _neg suffix.
- * testsuite/23_containers/forward_list/debug/erase_after1.cc: ...from
- this.
- * testsuite/23_containers/forward_list/debug/erase_after2_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after2.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after3_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after3.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after4_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after4.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after5_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after5.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after6_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after6.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after7_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after7.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after8_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after8.cc: Same.
- * testsuite/23_containers/forward_list/debug/erase_after9_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/erase_after9.cc: Same.
- * testsuite/23_containers/forward_list/debug/insert_after1_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/insert_after1.cc: Same.
- * testsuite/23_containers/forward_list/debug/insert_after2_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/insert_after2.cc: Same.
- * testsuite/23_containers/forward_list/debug/insert_after3_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/insert_after3.cc: Same.
- * testsuite/23_containers/forward_list/debug/splice_after1_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/splice_after1.cc: Same.
- * testsuite/23_containers/forward_list/debug/splice_after2_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/splice_after2.cc: Same.
- * testsuite/23_containers/forward_list/debug/splice_after3_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/splice_after3.cc: Same.
- * testsuite/23_containers/forward_list/debug/splice_after4_neg.cc:
- Same.
- * testsuite/23_containers/forward_list/debug/splice_after4.cc: Same.
-
-2011-01-14 Benjamin Kosnik <bkoz@redhat.com>
-
- PR libstdc++/36104
- * include/Makefile.am (bits_sup_headers, stamp-bits-sup): New.
- * include/Makefile.in: Regenerate.
- * libsupc++/Makefile.am (std_HEADERS, bits_HEADERS): New.
- (install-stdHEADERS, install-bitsHEADERS): New.
+ PR libstdc++/49829
+ Add libc++98convenience.la, libc++11convenience.la.
+ * src/c++98: New directory.
+ * src/c++11: New directory.
+ * acinclude.m4: (GLIBCXX_CONFIGURE): Add src-c++98, src-c++11.
+ * configure: Regenerated.
+ * Makefile.am (hosted_source): Add src-c++98, src-c++11 to SUBDIRS.
+ * Makefile.in: Regenerate.
+ * libsupc++/Makefile.am (AM_CXXFLAGS): USe XTEMPLATE_FLAGS for
+ -fno-implicit-templates.
* libsupc++/Makefile.in: Regenerate.
+ * src/Makefile.am (inst_sources): Move... C++11 files into
+ separate directory for libstdc++11convenience.la. Files are:
+ fstream-inst.cc, string-inst.cc, wlocale-inst.cc, wstring-inst.cc).
+ (sources): Move C++11 files. Files are: compatibility-c++0x.cc,
+ compatibility-atomic-c++0x.cc, debug.cc, functexcept.cc,
+ functional.cc, hash_c++0x.cc, hashtable_c++0x.cc, limits.cc,
+ system_error.cc, placeholders.cc, regex.cc, shared_ptr.cc,
+ mutex.cc, condition_variable.cc, chrono.cc, thread.cc, future.cc.
+ (libstdc++convenience.la): Add new target.
+ (SUBDIRS): Add c++11, c++98.
+ * src/Makefile.in: Regenerate.
+ * src/c++11/Makefile.am: New.
+ * src/c++11/Makefile.in: Generate.
+ * src/c++98/Makefile.am: New, C++98 files.
+ * src/c++98/Makefile.in: Generate.
- * include/bits/c++config: Update for inline namespaces.
- * libsupc++/cxxabi-forced.h: To...
- * libsupc++/cxxabi_forced.h: ...this.
- * libsupc++/hash_bytes.h: Separate file.
- * libsupc++/typeinfo: Use it.
- * libsupc++/exception: Adjust for bits subdirectory.
- * libsupc++/eh_aux_runtime.cc: Same.
- * libsupc++/eh_ptr.cc: Same.
- * libsupc++/new_op.cc: Same.
- * libsupc++/exception_defines.h: Same.
- * libsupc++/nested_exception.h: Same.
- * libsupc++/eh_terminate.cc: Same.
- * libsupc++/vec.cc: Same.
- * libsupc++/vterminate.cc: Same.
- * libsupc++/exception_ptr.h: Same.
- * libsupc++/eh_personality.cc: Same.
- * libsupc++/eh_call.cc: Same.
- * libsupc++/new_opnt.cc: Same.
- * libsupc++/hash_bytes.cc: Same.
- * config/cpu/arm/cxxabi_tweaks.h: Same.
- * config/cpu/generic/cxxabi_tweaks.h: Same.
- * libsupc++/cxxabi.h: Same. Consolidate _GLIBCXX_NOTHROW defines.
- * include/std/bitset: Same.
- * include/ext/vstring.tcc: Same.
- * include/bits/hashtable.h: Same.
- * include/bits/functional_hash.h: Same.
- * include/bits/hashtable_policy.h: Same.
- * include/bits/basic_string.h: Same.
- * include/bits/istream.tcc: Same.
- * include/bits/ostream.tcc: Same.
- * include/bits/algorithmfwd.h: Same.
- * include/bits/basic_string.tcc: Same.
- * include/bits/ostream_insert.h: Same.
- * include/bits/fstream.tcc: Same.
- * include/bits/functexcept.h: Same.
-
- * doc/doxygen/user.cfg.in: Adjust names.
-
- * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers.
-
-2011-01-14 Paolo Carlini <paolo.carlini@oracle.com>
-
- * testsuite/25_algorithms/is_permutation/check_type.cc: Minor
- tweaks.
- * testsuite/25_algorithms/is_permutation/1.cc: Cosmetic changes.
-
-2011-01-13 Paolo Carlini <paolo.carlini@oracle.com>
-
- * testsuite/25_algorithms/is_permutation/check_type.cc: New.
- * testsuite/25_algorithms/is_permutation/requirements/
- explicit_instantiation/2.cc: Likewise.
- * testsuite/25_algorithms/is_permutation/requirements/
- explicit_instantiation/pod.cc: Likewise.
- * testsuite/25_algorithms/is_permutation/1.cc: Likewise.
-
-2011-01-13 John Lakos <jlakos@bloomberg.net>
- Pablo Halpern <phalpern@halpernwightsoftware.com>
- Paolo Carlini <paolo.carlini@oracle.com>
+2012-01-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
- * include/bits/stl_algo.h (is_permutation): Add, per N3068.
- * include/bits/algorithmfwd.h: Add.
+ libstdc++-v3:
+ * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on
+ 32-bit Solaris 10/x86.
+ * testsuite/22_locale/num_put/put/wchar_t/14220.cc: Likewise.
-2011-01-13 Jonathan Wakely <jwakely.gcc@gmail.com>
+2012-01-21 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/47045
- * config/os/bsd/netbsd/ctype_base.h: Use new macros based on version.
+ PR libstdc++/50982
+ * testsuite/30_threads/*: Add powerpc-ibm-aix* to target selectors.
-2011-01-11 Paolo Carlini <paolo.carlini@oracle.com>
+2012-01-19 Jakub Jelinek <jakub@redhat.com>
- * aclocal.m4: Regenerate.
+ PR libstdc++/51845
+ * include/bits/hashtable.h
+ (_Hashtable<>::erase(const_iterator, const_iterator)): Also update
+ _M_buckets[__n_bkt] if __is_bucket_begin.
+ * testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc:
+ New test.
-2011-01-06 Paolo Carlini <paolo.carlini@oracle.com>
+2012-01-18 Benjamin Kosnik <bkoz@redhat.com>
- PR libstdc++/47185
- * src/placeholders.cc: New.
- * src/Makefile.am: Adjust.
- * src/Makefile.in: Regenerate.
- * include/std/functional (placeholders::_1, _2, ..., _29): Declare
- extern.
- * config/abi/pre/gnu.ver: Export.
+ * acinclude (GLIBCXX_CONFIGURE_DOCBOOK): Fix quoting.
-2011-01-05 François Dumont <francois.cppdevs@free.fr>
+2012-01-18 Benjamin Kosnik <bkoz@redhat.com>
- * include/debug/safe_base.h (_Safe_iterator_base::_M_unlink): New.
- * include/src/debug.cc: Use latter
- * include/debug/forward_list (forward_list<>::_M_swap): Fix to
- correctly handle before_begin iterators.
- * testsuite/23_containers/forward_list/debug/swap.cc: Remove now
- useless _GLIBCXX_DEBUG checks.
+ * configure.ac: Move epub checks...
+ * acinclude (GLIBCXX_CONFIGURE_DOCBOOK): ...here, use
+ test -f instead of AC_CHECK_FILES.
-2011-01-04 Kai Tietz <kai.tietz@onevision.com>
+2012-01-18 François Dumont <fdumont@gcc.gnu.org>
+ Roman Kononov <roman@binarylife.net>
- PR libstdc++/47145
- * configure.ac (AC_CHECK_FILE): Replaced by test -f.
- * configure: Regenerated.
+ PR libstdc++/51866
+ * include/bits/hashtable.h (_Hashtable<>::_M_insert(_Arg, false_type)):
+ Do not keep a reference to a potentially moved instance.
+ * testsuite/23_containers/unordered_multiset/insert/51866.cc: New.
+ * testsuite/23_containers/unordered_multimap/insert/51866.cc: New.
+
+2012-01-17 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/html/*: Regenerate.
+
+2012-01-17 Benjamin Kosnik <bkoz@redhat.com>
+
+ * configure.ac (BUILD_EPUB): Adjust for epub3.
+ * configure: Regenerate.
+ * Makefile.in: Same.
+ * doc/Makefile.am (stamp-epub-docbook): Update for epub3.
+ * doc/Makefile.in: Regenerate.
+ * include/Makefile.in: Same.
+ * libsupc++/Makefile.in: Same.
+ * po/Makefile.in: Same.
+ * python/Makefile.in: Same.
+ * src/Makefile.in: Same.
+ * testsuite/Makefile.in: Same.
+
+ * doc/xml/manual/documentation_hacking.xml: Update.
+
+2012-01-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR target/47852
+ * configure.host (irix6.5*): Add -lpthread to OPT_LDFLAGS.
+
+2012-01-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/stl_iterator.h (reverse_iterator): Doxygen comments.
+
+2012-01-13 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/hashtable_policy.h (_Hash_node_base): New, use it as
+ base class of ...
+ (_Hash_node<Value, true>, _Hash_node<Value, false>): ... those.
+ * include/bits/hashtable.h (_Hashtable): Replace _M_begin_bucket_index
+ by _M_before_begin. Review implementation so that we do not need to
+ look for previous non-empty bucket when inserting nodes.
+
+2012-01-09 Kai Tietz <ktietz@redhat.com>
+
+ PR libstc++/51673 part 2
+ * config/abi/pre/gnu-versioned-namespace.ver: Adjusted new/delete
+ operators signature for LLP64 size_t, and adjusted signatures for
+ mt-allocator using size_t.
+
+2012-01-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstc++/51673 part 1
+ * config/abi/pre/gnu-versioned-namespace.ver: Sync cxxabi symbols
+ with gnu.ver.
+
+2012-01-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ * fragment.am (WARN_CXXFLAGS): Add -Wabi.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Same.
+ * include/Makefile.in: Same.
+ * libsupc++/Makefile.in: Same.
+ * src/Makefile.in: Same.
+ * testsuite/Makefile.in: Same.
+ * po/Makefile.in: Same.
+ * python/Makefile.in: Same.
+
+2012-01-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * python/libstdcxx/v6/printers.py (StdForwardListPrinter): Add.
+ * testsuite/libstdc++-prettyprinters/cxx11.cc: New.
+
+2012-01-06 Jason Merrill <jason@redhat.com>
+
+ * testsuite/abi/demangle/regression/cw-16.cc (main): Adjust
+ expected demangling.
+
+2012-01-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51504
+ * doc/xml/manual/debug.xml: Suggest using symbol interposition
+ to override symbols using annotation macros.
+
+2012-01-05 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/hashtable_policy.h (_Hashtable_base<>::_M_eq()):
+ protected rather than private, use it...
+ * include/bits/hashtable.h (_Hashtable<>::key_eq()): ... here.
+ * testsuite/23_containers/unordered_set/observers.cc: New.
+ * testsuite/23_containers/unordered_multiset/observers.cc: New.
+ * testsuite/23_containers/unordered_map/observers.cc: New.
+ * testsuite/23_containers/unordered_multimap/observers.cc: New.
-2011-01-03 Paolo Carlini <paolo.carlini@oracle.com>
+2012-01-03 François Dumont <fdumont@gcc.gnu.org>
- PR libstdc++/46922
- * config/abi/pre/gnu.ver: Export std::bad_function_call symbols.
+ * include/bits/hashtable_policy.h (_Ebo_helper<>): Rename to the more
+ specific _Hashtable_ebo_helper. Hide this implementation detail thanks
+ to private inheritance.
-
-Copyright (C) 2011 Free Software Foundation, Inc.
+2012-01-03 Paolo Carlini <paolo.carlini@oracle.com>
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
+ PR c++/51738
+ * testsuite/23_containers/map/element_access/39901.cc: New.
diff --git a/libstdc++-v3/ChangeLog-2011 b/libstdc++-v3/ChangeLog-2011
new file mode 100644
index 0000000000..6d1ab92f88
--- /dev/null
+++ b/libstdc++-v3/ChangeLog-2011
@@ -0,0 +1,6365 @@
+2011-12-30 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/extensions.xml: Improve markup and note that some
+ extensions are included in C++11.
+ * doc/xml/manual/concurrency_extensions.xml: Likewise.
+
+2011-12-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/51711
+ * include/bits/regex.h (regex_replace): Fix thinko.
+ * testsuite/28_regex/algorithms/regex_replace/char/51711.cc: New.
+ * testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc:
+ Likewise.
+
+2011-12-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable_policy.h (struct _Ebo_helper<>): Don't use
+ _N, badname on Solaris; minor stylistic changes.
+
+2011-12-29 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/51608
+ * include/bits/hashtable_policy.h (_Equal_helper<>): New, change the
+ way the _Equal functor is used depending on whether hash code is
+ cached or not.
+ (_Ebo_helper<>): New helper type to introduce EBO when possible.
+ (_Hash_code_base): Use _Ebo_helper to limit memory footprint. Move
+ _Equal functor management...
+ (_Hashtable_base): ...here, new, use _Equal_helper.
+ (_Local_iterator_base<>, _Local_iterator<>, _Local_const_iterator<>):
+ New, use _Hash_code_base, implementation of...
+ * include/bits/hashtable.h (_Hashtable<>::local_iterator,
+ _Hashtable<>::const_local_iterator): ...those. Add static assertions
+ checking that some functors are empty depending on whether hash code
+ is cache or not.
+ (_Hashtable<>::_M_bucket_index): New overloads using current bucket
+ count, use through out the _Hastable<> implementation.
+ * include/bits/unordered_set.h (__unordered_set<>,
+ __unordered_multiset<>): Cache hash code iff hash functor is not
+ empty and not final.
+ * include/bits/unordered_map.h (__unordered_map<>,
+ __unordered_multimap<>): Likewise.
+ * include/debug/unordered_map
+ (unordered_map<>::_S_to_local, unordered_multimap<>::_S_to_local):
+ Adapt to match new local iterator implementation.
+ * include/debug/unordered_set (unordered_set<>::_S_to_local,
+ unordered_multiset<>::_S_to_local): Likewise.
+ * include/profile/unordered_map (unordered_map<>::_M_profile_destruct,
+ unordered_multimap<>::_M_profile_destruct): Enhance thanks to usage of
+ local iterators.
+ * include/profile/unordered_set (unordered_set<>::_M_profile_destruct,
+ unordered_multiset<>::_M_profile_destruct): Likewise.
+ * testsuite_files/23_containers/unordered_set/instantiation_neg.cc:
+ Fix error line.
+ * testsuite_files/23_containers/unordered_set/final_hash.cc: New.
+ * testsuite_files/23_containers/unordered_multiset/final_hash.cc: New.
+ * testsuite_files/23_containers/unordered_map/final_hash.cc: New.
+ * testsuite_files/23_containers/unordered_multimap/final_hash.cc: New.
+
+2011-12-29 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51701
+ * doc/xml/manual/extensions.xml (Input and Output): Remove reference
+ to RWLock class.
+
+2011-12-23 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/
+ weak_ptr_expired.cc: Modify to PASS instead of XFAIL.
+
+2011-12-23 Kai Tietz <ktietz@redhat.com>
+
+ * config/os/mingw32-w64/os_defines.h (__USE_MINGW_ANSI_STDIO): Define.
+
+2011-12-23 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/c_global/cinttypes: Update comments that refer to TR1.
+
+2011-12-23 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/49204
+ * include/std/future (future_errc): Implement LWG 2056.
+
+2011-12-23 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/regex.h (match_results::size_type): Use
+ allocator_traits.
+
+2011-12-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48362
+ * testsuite/libstdc++-prettyprinters/48362.cc: New.
+
+2011-12-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48362
+ * python/libstdcxx/v6/printers.py (StdTuplePrinter): Handle empty
+ tuples.
+
+2011-12-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51365
+ * include/std/tuple (_Tuple_impl): Check __is_final as well as
+ is_empty.
+ * testsuite/20_util/tuple/51365.cc: New.
+
+2011-12-19 Benjamin Kosnik <bkoz@redhat.com>
+
+ * libsupc++/eh_tm.cc (free_any_cxa_exception): Use
+ __GCC_ATOMIC_INT_LOCK_FREE, not _GLIBCXX_ATOMIC_BUILTINS_4.
+
+2011-12-19 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/performance/25_algorithms/search_n.cc: Disambiguate
+ local variable.
+
+2011-12-18 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/iterators.xml: Replace "sect1" with "section".
+ * doc/xml/manual/algorithms.xml: Likewise.
+ * doc/html/manual/iterators.html: Likewise.
+ * doc/html/manual/algorithms.html: Likewise.
+
+2011-12-15 Paolo Carlini <paolo.carlini@oracle.com>
+ Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51558
+ * include/bits/functional_hash.h (struct hash): Add static_assert.
+ * src/compatibility-c++0x.cc: Adjust compatibility definitions.
+ * testsuite/23_containers/unordered_map/erase/51142.cc: Adjust.
+ * testsuite/23_containers/unordered_set/erase/51142.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/erase/51142.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/erase/51142.cc: Likewise.
+
+2011-12-15 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/22_locale/num_put/put/char/9780-2.cc: Add test for "C"
+ locale, add sanity checks in case of grouping.
+
+2011-12-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51540
+ * include/bits/stl_numeric.h (partial_sum): Adjust doxygen comments.
+
+2011-12-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ Revert:
+ 2011-12-12 Kai Tietz <ktietz@redhat.com>
+
+ PR libstdc++/51135
+ * libsupc++/cxxabi.h (__cxa_dtor_type): New type.
+ (__cxa_throw): Use it for destructor-argument.
+ * libsupc++/eh_throw.cc (__cxa_throw): Likewise.
+ * libsupc++/unwind-cxx.h (__cxa_exception): Change type of member
+ exceptionDestructor to __cxa_dtor_type.
+ * config/os/mingw32-w64/os_defines.h (_GLIBCXX_USE_THISCALL_ON_DTOR):
+ Define.
+ (__cxa_dtor_type): Declare target secific type variant.
+ * config/os/mingw32/os_defines.h: Likewise.
+
+2011-12-12 Kai Tietz <ktietz@redhat.com>
+
+ PR libstdc++/51135
+ * libsupc++/cxxabi.h (__cxa_dtor_type): New type.
+ (__cxa_throw): Use it for destructor-argument.
+ * libsupc++/eh_throw.cc (__cxa_throw): Likewise.
+ * libsupc++/unwind-cxx.h (__cxa_exception): Change type of member
+ exceptionDestructor to __cxa_dtor_type.
+ * config/os/mingw32-w64/os_defines.h (_GLIBCXX_USE_THISCALL_ON_DTOR):
+ Define.
+ (__cxa_dtor_type): Declare target secific type variant.
+ * config/os/mingw32/os_defines.h: Likewise.
+
+2011-12-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/abi.xml: Replace gcc-x.y.z with GCC x.y.z or x.y,
+ remove excessive duplication of version information.
+ * doc/html/*: Regenerate.
+
+2011-12-10 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/doxygen/user.cfg.in: Add macros, directories.
+ * include/bits/locale_classes.h: Remove doxygen warnings, fix markup.
+ * include/bits/locale_classes.tcc: Same.
+ * include/bits/shared_ptr.h: Same.
+ * include/bits/stl_algo.h: Same.
+ * include/bits/stl_list.h: Same.
+ * include/bits/stl_numeric.h: Same.
+ * include/debug/safe_base.h: Same.
+ * include/parallel/equally_split.h: Same.
+ * include/std/bitset: Same.
+ * include/std/complex: Same.
+ * include/std/fstream: Same.
+ * include/std/istream: Same.
+ * include/std/ostream: Same.
+ * include/tr2/dynamic_bitset: Same.
+ * scripts/run_doxygen: Remove munging for names that no longer exist.
+
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+ Adjust line numbers.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Same.
+
+2011-12-10 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/profile/unordered_set: Minor formatting changes.
+ (unordered_set<>::_M_profile_destruct,
+ unordered_multiset<>::_M_profile_destruct): Fix implementation to not
+ rely on normal implementation details anymore.
+ (unordered_set<>::_M_profile_resize,
+ unordered_multiset<>::_M_profile_resize): Implement consistently
+ accross all unordered containers.
+ (unordered_set<>::emplace, unordered_set<>::emplace_hint,
+ unordered_multiset<>::emplace, unordered_multset<>::emplace_hint): Add
+ to signal rehash to profiling system.
+ * include/profile/unordered_map: Likewise for unordered_map<> and
+ unordered_multimap<>.
+
+2011-12-09 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/44436 (unordered containers emplace, emplace_hint bits)
+ * include/bits/hashtable.h (_Hashtable<>::emplace,
+ _Hashtable<>::emplace_hint): Add.
+ * include/debug/unordered_set (unordered_set<>::emplace,
+ unordered_set<>::emplace_hint, unordered_multiset<>::emplace,
+ unordered_multiset<>::emplace_hint): Add.
+ * include/profile/unordered_set: Likewise.
+ * include/debug/unordered_map (unordered_map<>::emplace,
+ unordered_map<>::emplace_hint, unordered_multimap<>::emplace,
+ unordered_multimap<>::emplace_hint): Add.
+ * include/profile/unordered_map: Likewise.
+ * testsuite/23_containers/unordered_map/modifiers/emplace.cc: New.
+ * testsuite/23_containers/unordered_multimap/modifiers/emplace.cc:
+ New.
+ * testsuite/23_containers/unordered_set/modifiers/emplace.cc: New.
+ * testsuite/23_containers/unordered_multiset/modifiers/emplace.cc:
+ New.
+ * testsuite/util/testsuite_container_traits.h
+ (traits_base::has_emplace): Add and defined as std::true_type for
+ unordered containers.
+ * testsuite/util/exception/safety.h (emplace, emplace_hint): Add and
+ use them in basic_safety exception test case.
+ * doc/xml/manual/status_cxx2011.xml: Update unordered containers
+ status.
+
+2011-12-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/atomic_base.h (__calculate_memory_order): Rename to...
+ (__cmpexch_failure_order): This, and rewrite as constexpr function.
+ (compare_exchange_strong, compare_exchange_weak): Use it.
+ * include/std/atomic (compare_exchange_strong, compare_exchange_weak):
+ Likewise.
+
+2011-12-07 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/51386
+ * include/bits/hashtable_policy.h (_Prime_rehash_policy::_M_next_bkt):
+ Fix computation of _M_prev_resize so that hashtable do not keep on
+ being rehashed when _M_max_load_factor is lower than 1.
+
+2011-12-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/51438
+ * libsupc++/nested_exception.h (nested_exception::~nested_exception):
+ Declare noexcept.
+ * libsupc++/nested_exception.cc: Adjust.
+ * testsuite/18_support/nested_exception/51438.cc: New.
+ * testsuite/18_support/nested_exception/throw_with_nested.cc: Adjust.
+ * testsuite/18_support/nested_exception/rethrow_if_nested.cc:
+ Likewise.
+
+ * src/shared_ptr.cc: Use noexcept where appropriate.
+ * include/std/system_error: Likewise.
+ * include/std/functional: Likewise.
+ * include/bits/shared_ptr_base.h: Likewise.
+ * src/stdexcept.cc: Use _GLIBCXX_USE_NOEXCEPT where appropriate.
+ * include/std/stdexcept: Likewise.
+ * libsupc++/bad_cast.cc: Likewise.
+ * libsupc++/bad_typeid.cc: Likewise.
+ * libsupc++/eh_exception.cc: Likewise.
+ * libsupc++/typeinfo: Likewise.
+ * libsupc++/exception: Likewise.
+ * libsupc++/eh_ptr.cc: Likewise.
+ * libsupc++/bad_alloc.cc: Likewise.
+ * libsupc++/exception_ptr.h: Likewise.
+
+ * include/std/chrono: Use noexcept where appropriate.
+ * src/chrono.cc: Likewise.
+
+2011-12-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+ Chris Jefferson <chris@bubblescope.net>
+
+ PR libstdc++/51183
+ * include/std/stl_pair.h (pair<>::__cons, pair<>::__do_cons): Remove.
+ (pair<>::pair(piecewise_construct_t, tuple<>, tuple<>): Only declare.
+ (pair<>::pair(tuple<>&, tuple<>&, _Index_tuple<>, _Index_tuple<>)):
+ Declare.
+ * include/std/tuple (pair<>::__cons, pair<>::__do_cons): Remove.
+ (pair<>::pair(tuple<>&, tuple<>&, _Index_tuple<>, _Index_tuple<>)):
+ Define.
+ (pair<>::pair(piecewise_construct_t, tuple<>, tuple<>): Define,
+ delegating to the latter.
+ * testsuite/20_util/pair/piecewise2.cc: New.
+
+2011-12-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * libsupc++/initializer_list: Do not declare anything if
+ __GXX_EXPERIMENTAL_CXX0X__ is not defined.
+
+2011-12-04 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/type_traits: Doxygen improvements.
+ * include/bits/move.h: Likewise.
+ * include/tr1/type_traits: Likewise.
+ * include/tr2/type_traits: Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
+ line numbers
+ * testsuite/20_util/forward/c_neg.cc: Likewise.
+ * testsuite/20_util/forward/f_neg.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+
+2011-12-04 Markus Trippelsdorf <markus@trippelsdorf.de>
+ Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/stl_heap.h (pop_heap): Check for non-empty range in
+ overload taking a predicate.
+ * testsuite/25_algorithms/pop_heap/empty2_neg.cc: New.
+
+2011-12-03 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/debug/macros.h (__glibcxx_check_non_empty_range): Define.
+ * include/debug/debug.h (__glibcxx_requires_non_empty_range): Define.
+ * include/debug/formatter.h (__msg_non_empty_range): Add.
+ * src/debug.cc: Message text for __msg_non_empty_range.
+ * include/bits/stl_heap.h (pop_heap): Check for non-empty range.
+ * testsuite/25_algorithms/pop_heap/empty_neg.cc: New.
+
+2011-12-03 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/utilities.xml: Remove outdated text.
+
+2011-12-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/iomanip (put_money): Fix thinko, use __err local,
+ like in, eg, basic_ostream::_M_insert.
+
+2011-11-30 Benjamin Kosnik <bkoz@redhat.com>
+
+ * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Remove
+ size-specific macros. _GLIBCXX_ATOMIC_BUILTINS_1,
+ _GLIBCXX_ATOMIC_BUILTINS_2, _GLIBCXX_ATOMIC_BUILTINS_4,
+ _GLIBCXX_ATOMIC_BUILTINS_8. Use _GLIBCXX_ATOMIC_BUILTINS to
+ indicate use of C++11 atomic builtins.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+ * include/Makefile.am (bits_sup_headers): Add atomic_lockfree_defines.h.
+ * include/Makefile.in: Regenerate.
+ * libsupc++/Makefile.am: Compile C++11 support with -std=gnu++0x.
+ * libsupc++/Makefile.in: Regenerate.
+
+ * include/bits/atomic_base.h: Move lock-free property macros...
+ * libsupc++/atomic_lockfree_defines.h: ...here.
+ * include/std/future: Use C++11 macros.
+ * libsupc++/eh_ptr.cc: Same.
+ * libsupc++/eh_throw.cc: Same.
+ * libsupc++/exception: Same.
+ * libsupc++/exception_ptr.h: Same.
+ * libsupc++/guard.cc: Same.
+ * libsupc++/nested_exception.cc: Same.
+ * libsupc++/nested_exception.h: Same.
+ * src/future.cc: Same.
+
+ * include/ext/atomicity.h: Use _GLIBCXX_ATOMIC_BUILTINS.
+
+ * doc/doxygen/user.cfg.in: Adjust.
+ * doc/xml/manual/concurrency_extensions.xml: Add note.
+
+ * testsuite/18_support/exception_ptr/lifespan.cc: Tweak.
+ * testsuite/lib/libstdc++.exp: Same.
+
+2011-11-29 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/hashtable.h (_Hashtable<>::_M_rehash): Remove code
+ useless now that the hashtable implementation put the hash code in
+ cache if the hash functor throws.
+ * testsuite/23_containers/unordered_set/erase/1.cc: Enhance test by
+ checking also distance between begin and end iterators to validate
+ underlying data model.
+ * testsuite/23_containers/unordered_multiset/erase/1.cc: Likewise.
+ * testsuire/23_containers/unordered_map/erase/1.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/erase/1.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/erase/2.cc: New.
+ * testsuite/23_containers/unordered_multimap/erase/2.cc: New.
+
+2011-11-28 Andrew MacLeod <amacleod@redhat.com>
+
+ * include/bits/atomic_base.h (ATOMIC_*_LOCK_FREE): Use new cpp
+ predefined macros.
+ * testsuite/29_atomics/headers/atomic/macros.cc: Add BOOL and POINTER
+ macro checks. Check for expected compile time values.
+
+2011-11-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/51288
+ * include/std/iomanip (get_money, put_money): Use sentry.
+ * testsuite/27_io/manipulators/extended/get_money/char/51288.cc: New.
+ * testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc:
+ Likewise.
+ * testsuite/27_io/manipulators/extended/put_money/char/51288.cc:
+ Likewise.
+ * testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc:
+ Likewise.
+
+2011-11-27 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/manual/using.xml (Prerequisites): Refer to x86 instead
+ of i386.
+
+2011-11-27 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * scripts/run_doxygen (problematic): Change Linux reference to
+ GNU/Linux.
+
+2011-11-26 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/manual/abi.xml (Prerequisites): Refer to GNU/Linux.
+ Fix reference to GCC.
+
+2011-11-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51296
+ * testsuite/30_threads/thread/native_handle/typesizes.cc: Do not run
+ on alpha*-*-osf*.
+ * testsuite/30_threads/future/cons/constexpr.cc: Disable debug
+ symbols.
+ * testsuite/30_threads/shared_future/cons/constexpr.cc: Likewise.
+
+2011-11-23 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/41975
+ * include/bits/hashtable.h (_Hashtable<>): Major data model
+ modification to limit performance impact of empty buckets in
+ erase(iterator) implementation.
+ * include/bits/hashtable_policy.h (_Hashtable_iterator,
+ _Hashtable_const_iterator): Remove not used anymore.
+ * include/bits/hashtable_policy.h (_Prime_rehash_policy): Remove
+ _M_grow_factor, just use natural evolution of prime numbers. Add
+ _M_prev_size to know when the number of buckets can be reduced.
+ * include/bits/unordered_set.h (__unordered_set<>,
+ __unordered_multiset<>), unordered_map.h (__unordered_map<>,
+ __unordered_multimap<>): Change default value of cache hash code
+ template parameter, false for integral types with noexcept hash
+ functor, true otherwise.
+ * include/debug/unordered_map, unordered_set: Adapt transformation
+ from iterator/const_iterator to respectively
+ local_iterator/const_local_iterator.
+ * testsuite/performance/23_containers/copy_construct/unordered_set.cc:
+ New.
+ * testsuite/23_containers/unordered_set/instantiation_neg.cc: New.
+ * testsuite/23_containers/unordered_set/hash_policy/rehash.cc: New.
+ * testsuite/23_containers/unordered_multiset/cons/copy.cc: New.
+ * testsuite/23_containers/unordered_multiset/erase/1.cc,
+ 24061-multiset.cc: Add checks on the number of bucket elements.
+ * testsuite/23_containers/unordered_multiset/insert/multiset_range.cc,
+ multiset_single.cc, multiset_single_move.cc: Likewise.
+
+2011-11-21 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/functional (is_placeholder, is_bind_expression): Add
+ partial specializations for cv-qualified types.
+ * include/tr1/functional (is_placeholder, is_bind_expression): Add
+ partial specializations for std::bind and std::placeholders and for
+ cv-qualified types.
+ * testsuite/20_util/bind/cv_quals_3.cc: New.
+ * testsuite/tr1/3_function_objects/bind/cv_quals.cc: New.
+ * testsuite/tr1/3_function_objects/bind/mixed.cc: New.
+
+2011-11-21 Andreas Tobler <andreast@fgznet.ch>
+
+ * configure: Regenerate.
+
+2011-11-21 Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ PR libstdc++/51185
+ * include/std/type_traits (__is_base_to_derived_ref,
+ __is_lvalue_to_rvalue_ref): Fix.
+ * testsuite/20_util/is_constructible/51185.cc: New.
+ * testsuite/20_util/is_constructible/value-2.cc: Extend.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
+ line number.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
+ Likewise.
+
+2011-11-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (__conv_types, __one_by_one_convertible,
+ __all_convertible): Remove.
+ (tuple<>::tuple(_UElements&&...),
+ tuple<>::tuple(const tuple<_UElements...>&),
+ tuple<>::tuple(tuple<_UElements...>&&)): Remove wa for c++/48322.
+ * testsuite/20_util/uses_allocator/cons_neg.cc: Adjust dg-error
+ line number.
+
+2011-11-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/48322
+ * include/std/tuple (tuple(_UElements&&...)): Fix SFINAE.
+
+ * testsuite/20_util/bind/ref_neg.cc: Adjust error markings.
+
+2011-11-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/backward/binders.h: Fix examples in doxygen comments and
+ suggest using std::bind instead.
+
+2011-11-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx2011.xml: Fix docbook markup.
+
+2011-11-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/appendix_contributing.xml: Do not use "here" as link
+ text.
+ * doc/xml/faq.xml: Likewise. Do not request standard library issues
+ to be reported to the libstdc++ mailing list.
+ * doc/xml/manual/status_cxx2011.xml: Document implementation-defined
+ behaviour.
+ * doc/xml/manual/status_cxxtr1.xml: Likewise.
+ * doc/xml/manual/utilities.xml: Fix grammar, probably caused by a
+ global search and replace of "part" by "chapter".
+ * doc/xml/manual/shared_ptr.xml: Remove outdated information.
+ * doc/xml/manual/messages.xml: Be more specific about systems where
+ using 'int' for catalog handle is not a problem, mention LWG issue.
+
+2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/debug/bitset (operator[](size_t) const): Declare constexpr.
+ * include/profile/bitset: Likewise.
+ * testsuite/23_containers/bitset/operations/constexpr.cc: Split out
+ non portable bits to...
+ * testsuite/23_containers/bitset/operations/constexpr-2.cc: ... here.
+
+2011-11-18 Harti Brandt <hartmut.brandt@dlr.de>
+
+ PR libstdc++/51209
+ * include/bits/hashtable.h (_Hashtable<>::_M_find_node): Return
+ nullptr when no node is found.
+ * include/tr1/hashtable.h (_Hashtable<>::_M_find_node): Return
+ zero when no node is found.
+
+2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * src/hash-long-double-aux.cc: Rename to...
+ * src/hash-long-double-tr1-aux.cc: ... this.
+ * src/compatibility-ldbl.cc: Adjust.
+ * src/hash_tr1.cc: Likewise.
+ * src/hash_c++0x.cc: Don't use src/hash-long-double-aux.cc.
+ * include/bits/functional_hash.h (hash<_Tp*>::operator(), specs
+ for integer types, hash<float>::operator(), hash<double>::operator(),
+ hash<long double>::operator()): Declare noexcept.
+ * include/debug/bitset (hash<__debug::bitset>::operator()): Likewise.
+ * include/debug/vector (hash<__debug::vector>::operator()): Likewise.
+ * include/std/system_error (hash<error_code>::operator()): Likewise.
+ * include/std/thread (hash<thread::id>::operator()): Likewise.
+ * include/std/bitset (hash<bitset>::operator()): Likewise.
+ * include/std/typeindex (hash<type_index>::operator()): Likewise.
+ * include/profile/bitset (hash<__profile::vector>::operator()):
+ Likewise.
+ * include/profile/vector (hash<__profile::vector>::operator()):
+ Likewise.
+ * include/ext/vstring.h (hash<__vstring>::operator(),
+ hash<__wvstring>::operator(), hash<__u16vstring>::operator(),
+ hash<__u32vstring>::operator()): Likewise.
+ * include/bits/shared_ptr.h (hash<shared_ptr>::operator()): Likewise.
+ * include/bits/shared_ptr_base.h (hash<__shared_ptr>::operator()):
+ Likewise.
+ * include/bits/unique_ptr.h (hash<unique_ptr>::operator()): Likewise.
+ * include/bits/basic_string.h (hash<string>::operator(),
+ hash<wstring>::operator(), hash<u16string>::operator(),
+ hash<u32string>::operator()): Likewise.
+ * include/bits/vector.tcc (hash<vector>::operator()): Likewise.
+ * include/bits/stl_bvector.h (hash<vector>::operator()): Likewise.
+ * libsupc++/typeinfo (type_info::hash_code): Use noexcept instead of
+ throw().
+
+2011-11-17 Richard Henderson <rth@redhat.com>
+
+ PR libstdc++/51181
+ * libsupc++/eh_tm.cc (free_any_cxa_exception): Protect the use
+ of __sync_sub_and_fetch with _GLIBCXX_ATOMIC_BUILTINS_4.
+
+2011-11-18 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/30_threads/thread/native_handle/typesizes.cc: Do not run
+ on darwin.
+
+2011-11-17 Jason Merrill <jason@redhat.com>
+
+ * testsuite/21_strings/basic_string/cons/char/moveable2.cc
+ (tstring): Add defaulted move assignment.
+ * testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc
+ (tstring): Add defaulted move assignment.
+ * testsuite/util/testsuite_tr1.h (NoexceptMoveConsClass): Add
+ defaulted move assignment operator.
+ (NoexceptMoveAssignClass): Add defaulted move constructor.
+
+2011-11-17 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx2011.xml: Status of piecewise construction
+ and ios_base::failure.
+ * doc/xml/manual/backwards_compatibility.xml: List headers in
+ alphabetical order.
+
+2011-11-16 Andrew MacLeod <amacleod@redhat.com>
+
+ PR libstdc++/51102
+ * include/bits/atomic_base.h (ATOMIC_BOOL_LOCK_FREE,
+ ATOMIC_POINTER_LOCK_FREE): New. Add missing macros.
+
+2011-11-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/51142
+ * include/debug/unordered_map (unordered_map<>::erase(iterator),
+ unordered_multimap<>::erase(iterator)): Add, consistently with
+ LWG 2059.
+ * include/debug/unordered_set (unordered_set<>::erase(iterator),
+ unordered_multiset<>::erase(iterator)): Likewise.
+ * include/debug/map.h (map<>::erase(iterator)): Likewise.
+ * include/debug/multimap.h (multimap<>::erase(iterator)): Likewise.
+ * include/profile/map.h (map<>::erase(iterator)): Likewise.
+ * include/profile/multimap.h (multimap<>::erase(iterator)): Likewise.
+ * include/bits/hashtable.h (_Hashtable<>::erase(iterator)): Likewise.
+ * include/bits/stl_map.h (map<>::erase(iterator)): Likewise.
+ * include/bits/stl_multimap.h (multimap<>::erase(iterator)): Likewise.
+ * include/bits/stl_tree.h (_Rb_tree<>::erase(iterator)): Likewise.
+ * testsuite/23_containers/unordered_map/erase/51142.cc: New.
+ * testsuite/23_containers/multimap/modifiers/erase/51142.cc: Likewise.
+ * testsuite/23_containers/set/modifiers/erase/51142.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/erase/51142.cc: Likewise.
+ * testsuite/23_containers/unordered_set/erase/51142.cc: Likewise.
+ * testsuite/23_containers/multiset/modifiers/erase/51142.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/erase/51142.cc: Likewise.
+ * testsuite/23_containers/map/modifiers/erase/51142.cc: Likewise.
+
+2011-11-15 Jason Dick <dickphd@gmail.com>
+
+ PR libstdc++/51133
+ * include/tr1/poly_hermite.tcc (__poly_hermite_recursion): Fix
+ wrong sign in recursion relation.
+
+2011-11-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/c_global/cmath (frexp, modf, remquo): Do not mark constexpr,
+ not viable anyway due to the pointer parameter.
+
+2011-11-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/c_global/cmath (atan2, fmod, pow, copysign, fdim,
+ fma, fmax, fmin, hypot, nextafter, remainder, remquo): Simplify
+ constraining on the return type.
+ * include/tr1/cmath (copysign, fdim, fma, fmax, fmin, hypot,
+ nextafter, remainder, remquo): Likewise.
+
+2011-11-13 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * using.xml: Use GNU/Linux.
+
+2011-11-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/51060
+ * testsuite/25_algorithms/max/1.cc (test01): Drop references.
+ * testsuite/25_algorithms/min/1.cc (test01): Drop references.
+ * testsuite/25_algorithms/minmax/1.cc (test01): Drop references.
+
+2011-11-12 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51083
+ * include/ext/type_traits.h (__promote): Only define __type member
+ for integral and floating point types, to prevent math functions
+ participating in overload resolution for other types.
+ (__promote_2, __promote_3, __promote_4): Use __promote in default
+ template argument values, so deduction only succeeds for integral and
+ floating point types.
+ * testsuite/26_numerics/cmath/51083.cc: New.
+ * testsuite/26_numerics/complex/51083.cc: New.
+ * testsuite/tr1/8_c_compatibility/cmath/51083.cc: New.
+ * testsuite/tr1/8_c_compatibility/complex/51083.cc: New.
+
+2011-11-10 Andrew MacLeod <amacleod@redhat.com>
+
+ PR middle-end/51038
+ * include/bits/atomic_base.h (atomic_thread_fence): Call built-in.
+ (atomic_signal_fence): Call built-in.
+ (test_and_set, clear): Call new atomic built-ins.
+
+2011-11-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/allocator.h (__shrink_to_fit_aux::_S_do_it): Create
+ the new object with the same allocator.
+ * testsuite/23_containers/vector/capacity/shrink_to_fit2.cc: New.
+
+2011-11-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/profile/unordered_map: Add missing copy constructors.
+ * include/profile/unordered_set: Likewise.
+
+2011-11-09 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/51027
+ * include/ext/pointer.h (rebind): Append missing ';'.
+
+2011-11-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/stl_vector.h (vector::_Alloc_traits): Make private.
+ * include/debug/vector: Add allocator-extended constructors, ensure
+ move assignment and swap have same allocator propagation semantics
+ and exceptions specification as base class.
+ * include/profile/vector: Likewise.
+ (vector::push_back(_Tp&&)): Forward argument as rvalue.
+ * testsuite/23_containers/vector/debug/alloc_prop.cc: New.
+ * doc/xml/manual/status_cxx2011.xml: Clarify status of container
+ requirements with respect to allocators.
+ (status.iso.200x): Add anchor for old ID to preserve existing links.
+
+2011-11-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/shared_ptr_base.h (_Sp_counted_ptr): Make 'final'.
+ (_Sp_counted_deleter): Make 'final'. Use allocator_traits.
+ (_Sp_counted_ptr_inplace): Make 'final'. Use allocator_traits.
+ Derive from _Sp_counted_ptr instead of _Sp_counted_deleter to use EBO
+ for the allocator.
+ (__shared_count, __shared_ptr): Use allocator_traits.
+ * include/std/future (__future_base::_Result_alloc): Make 'final'. Use
+ allocator traits.
+ (__future_base::_Task_state): Make 'final'.
+ (__future_base::_Deferred_state): Likewise.
+ (__future_base::_Async_state): Likewise.
+ * testsuite/20_util/shared_ptr/cons/alloc_min.cc: New.
+ * testsuite/20_util/shared_ptr/creation/alloc_min.cc: New.
+ * testsuite/20_util/shared_ptr/creation/private.cc: New.
+ * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers.
+ * testsuite/30_threads/packaged_task/cons/alloc_min.cc: New.
+ * testsuite/30_threads/promise/cons/alloc_min.cc: New.
+
+2011-11-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * acinclude.m4 ([GLIBCXX_ENABLE_VISIBILITY]): Rename to
+ [GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], likewise for the
+ option itself, to --enable-libstdcxx-visibility.
+ * configure.ac: Adjust call.
+ * doc/xml/manual/configure.xml: Update.
+ * configure: Regenerate.
+
+2011-11-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/29_atomics/headers/atomic/macros.cc: Avoid -Wall
+ warnings.
+ * testsuite/29_atomics/atomic/cons/user_pod.cc: Likewise.
+
+2011-11-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/51018
+ * testsuite/30_threads/thread/native_handle/typesizes.cc: Do not run
+ on netbsd.
+
+2011-11-07 Aldy Hernandez <aldyh@redhat.com>
+ Richard Henderson <rth@redhat.com>
+
+ Merged from transactional-memory.
+
+ * testsuite/util/testsuite_abi.cc (check_version): Add CXXABI_TM_1.
+ * libsupc++/eh_tm.cc: New file.
+ * libsupc++/unwind-cxx.h (__cxa_tm_cleanup): Declare.
+ * config/abi/pre/gnu.ver: Export __cxa_tm_cleanup.
+ * config/abi/pre/gnu-versioned-namespace.ver: Likewise.
+ * libsupc++/Makefile.am (sources): Add eh_tm.cc.
+ * libsupc++/Makefile.in: Rebuild.
+
+2011-11-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/51018
+ * include/profile/impl/profiler_node.h (__stack_hash::
+ operator()(__stack_t)): Just use std::size_t everywhere.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (__future_base::_Ptr): Use alias-declaration.
+ (__is_same_pkgdtask): Rename to __constrain_pkgdtask and use decay
+ instead of remove_reference so that cv-quals are removed.
+
+2011-11-07 Ed Smith-Rowland <3dw4rd@verizon.net>
+
+ * include/precompiled/stdc++.h: Add cstdalign.
+
+2011-11-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/complex (complex<>::real(), complex<>::imag()):
+ Remove redundant const qualifiers.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/ptr_traits.h (__rebind): Replace with...
+ (rebind): Implement using alias-declaration.
+ * include/ext/pointer.h (__rebind): Replace with...
+ (rebind): Implement using alias-declaration.
+ * include/bits/alloc_traits.h (__rebind_alloc, __rebind_traits):
+ Replace with...
+ (rebind_alloc, rebind_traits): Implement using alias-declaration.
+ * include/ext/alloc_traits.h (rebind): Use rebind_alloc instead of
+ __rebind_alloc.
+ * include/std/scoped_allocator (rebind): Likewise.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/mutex (call_once): Store closure in __once_functor
+ as bound function wrapper might not be copyable.
+
+2011-11-07 Andrew MacLeod <amacleod@redhat.com>
+
+ * include/bits/atomic_base.h (atomic_thread_fence): Revert.
+ (atomic_signal_fence): Revert.
+
+2011-11-07 Andrew MacLeod <amacleod@redhat.com>
+
+ * include/bits/atomic_base.h (atomic_thread_fence): Call builtin.
+ (atomic_signal_fence): Call builtin.
+ (atomic_flag::test_and_set): Call __atomic_exchange when it is lockfree,
+ otherwise fall back to call __sync_lock_test_and_set.
+ (atomic_flag::clear): Call __atomic_store when it is lockfree,
+ otherwise fall back to call __sync_lock_release.
+
+2011-11-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR bootstrap/50982
+ * include/Makefile.am (${host_builddir}/gthr-posix.h): Reflect
+ gthr-posix.h move.
+ * include/Makefile.in: Regenerate.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * acinclude.m4 (GLIBCXX_CHECK_SC_NPROC_ONLN): Define.
+ (GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP): Define.
+ (GLIBCXX_CHECK_SYSCTL_HW_NCPU): Define.
+ * configure.ac: Use new checks.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+ * src/thread.cc: Check new config macros.
+ * testsuite/lib/libstdc++.exp: Likewise.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * config/abi/pre/gnu.ver: Fix exports for string::pop_back.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * acinclude.m4: Check for <stdalign.h>
+ * configure: Regenerate.
+ * config.h.in: Likewise.
+ * include/Makefile.am: Add <cstdalign>.
+ * include/Makefile.in: Regenerate.
+ * include/c_global/cstdalign: New.
+ * testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: New.
+ * doc/xml/manual/backwards_compatibility.xml: Update.
+ * doc/xml/manual/status_cxx2011.xml: Update.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/50982
+ * include/std/mutex (__once_proxy): Use void parameter list to
+ work on implicit extern "C" systems.
+
+2011-11-07 Xinliang David Li <davidxl@google.com>
+
+ * include/backward/hashtable.h: Make __stl_prime_list
+ in comdat section.
+
+2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/basic_string.h (basic_string::at): Move adjacent to other
+ overload.
+ (basic_string::pop_back): Define.
+ * include/debug/string (__gnu_debug::basic_string::pop_back): Likewise.
+ * include/ext/vstring.h (__versa_string::pop_back): Likewise.
+ * config/abi/pre/gnu.ver: Add new symbols.
+ * testsuite/21_strings/basic_string/modifiers/char/pop_back.cc: New.
+ * testsuite/21_strings/basic_string/modifiers/wchar_t/pop_back.cc: New.
+ * testsuite/21_strings/basic_string/range_access.cc: Split to ...
+ * testsuite/21_strings/basic_string/range_access/char/1.cc: Here and ...
+ * testsuite/21_strings/basic_string/range_access/wchar_t/1.cc: Here.
+ * testsuite/ext/vstring/modifiers/char/pop_back.cc: New.
+ * testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc: New.
+
+2011-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/backwards_compatibility.xml: Fix autoconf tests for
+ C++11 compiler features and library headers. Add stable id
+ attributes. Use <filename> element for headers and surround in angle
+ brackets. Use <classname> for classes.
+ * doc/html/*: Regenerate.
+
+2011-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx2011.xml: Document <cuchar> and
+ <cstdalign> as missing.
+
+2011-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/faq.xml: Replace references to C++0x with C++11.
+ * doc/xml/manual/intro.xml: Likewise.
+ * doc/xml/manual/backwards_compatibility.xml: Likewise.
+ * doc/xml/manual/shared_ptr.xml: Likewise.
+ * doc/xml/manual/configure.xml: Likewise.
+ * doc/xml/manual/evolution.xml: Likewise.
+ * doc/xml/manual/using.xml: Likewise.
+ * doc/xml/manual/strings.xml: Likewise.
+ * doc/xml/manual/debug_mode.xml: Likewise.
+ * doc/xml/manual/policy_data_structures.xml: Likewise.
+ * doc/xml/manual/extensions.xml: Likewise.
+ * doc/xml/manual/diagnostics.xml: Likewise.
+ * doc/xml/manual/test.xml: Likewise.
+ * doc/xml/manual/status_cxx200x.xml: Likewise, and rename to...
+ * doc/xml/manual/status_cxx2011.xml: Here.
+ * doc/Makefile.am: Rename status_cxx200x.xml.
+ * doc/Makefile.in: Regenerate.
+ * doc/html/*: Regenerate.
+
+2011-11-06 François Dumont <fdumont@gcc.gnu.org>
+
+ * testsuite/performance/23_containers/insert_erase/41975.cc: Add
+ tests to check performance with or without cache of hash code and with
+ string type that has a costlier hash functor than int type.
+
+2011-11-06 Benjamin Kosnik <bkoz@redhat.com>
+ Andrew MacLeod <amacleod@redhat.com>
+
+ Merged from cxx-mem-model.
+
+ * include/Makefile.am (bits_headers): Remove atomic_0.h, atomic_2.h.
+ * include/Makefile.in: Regenerate.
+ * src/Makefile.am (sources): Rename atomic.cc to
+ compatibility-atomic-c++0x.cc.
+ * src/Makefile.in: Regenerate.
+ * include/bits/atomic_0.h: Remove.
+ * include/bits/atomic_2.h: Incorporate into...
+ * include/bits/atomic_base.h: ...this. Use new __atomic routines.
+ * include/std/atomic: Add generic atomic calls to basic atomic class.
+ * src/atomic.cc: Move...
+ * src/compatibility-atomic-c++0x.cc: ...here.
+ * src/compatibility-c++0x.cc: Tweak.
+ * testsuite/29_atomics/atomic/cons/user_pod.cc: Fix.
+ * testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc:
+ Same.
+ * testsuite/29_atomics/headers/atomic/macros.cc: Same.
+
+2011-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/test.xml: Fix dg-warning examples.
+
+2011-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/44436
+ * doc/xml/manual/status_cxx200x.xml: Document emplace members are
+ missing.
+
+2011-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/49894
+ PR bootstrap/50982
+ * include/std/mutex (once_flag): Use NSDMI.
+
+2011-11-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * scripts/run_doxygen: Fix sed quoting.
+
+2011-11-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/doxygen/doxygroups.cc: Add markup for namespace tr2.
+ * include/tr2/bool_set: Adjust doxygen markup.
+ * include/tr2/dynamic_bitset: Same.
+ * include/tr2/type_traits: Same.
+
+2011-11-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/html/*: Regenerate.
+
+2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50880
+ * include/std/complex (__complex_acosh): Fix in a better way,
+ use Kahan's formula.
+ * include/tr1/complex (__complex_acosh): Likewise.
+
+2011-11-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50951
+ * include/bits/random.tcc (operator<<(basic_ostream<>&,
+ const mersenne_twister_engine<>&): Output _M_p too.
+ (operator<<(basic_ostream<>&, const
+ subtract_with_carry_engine<>&): Likewise.
+ (operator>>(basic_istream<>&, mersenne_twister_engine<>&):
+ Reload it.
+ (operator>>(basic_istream<>&, subtract_with_carry_engine<>&):
+ Likewise.
+ * include/bits/random.h (mersenne_twister_engine<>::operator==):
+ Compare _M_p too.
+ (subtract_with_carry_engine<>::operator==): Compare _M_carry
+ and _M_p too.
+ (shuffle_order_engine<>::operator==): Compare _M_v(s) and _M_y too.
+ * testsuite/26_numerics/random/independent_bits_engine/
+ operators/serialize.cc: Extend.
+ * testsuite/26_numerics/random/subtract_with_carry_engine/
+ operators/serialize.cc: Likewise.
+ * testsuite/26_numerics/random/discard_block_engine/
+ operators/serialize.cc: Likewise.
+ * testsuite/26_numerics/random/mersenne_twister_engine/
+ operators/serialize.cc: Likewise.
+ * testsuite/26_numerics/random/linear_congruential_engine/
+ operators/serialize.cc: Likewise.
+ * testsuite/26_numerics/random/shuffle_order_engine/
+ operators/serialize.cc: Likewise.
+
+2011-11-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * acinclude.m4 (GLIBCXX_CONFIGURE): Determine and substitute
+ toplevel_builddir.
+ (GLIBCXX_ENABLE_THREADS): Remove glibcxx_thread_h,
+ HAVE_GTHR_DEFAULT, enable_thread.
+ (GLIBCXX_CHECK_GTHREADS): Reflect gthr move to libgcc.
+ * include/Makefile.am (thread_host_headers): Remove
+ ${host_builddir}/gthr-tpf.h.
+ (${host_builddir}/gthr.h): Reflect gthr move to libgcc.
+ Use $<.
+ (${host_builddir}/gthr-single.h): Likewise.
+ (${host_builddir}/gthr-posix.h): Likewise.
+ (${host_builddir}/gthr-tpf.h): Remove.
+ (${host_builddir}/gthr-default.h): Likewise.
+ * configure, config.h.in: Regenerate.
+ * Makefile.in, doc/Makefile.in, include/Makefile.in,
+ libsupc++/Makefile.in, po/Makefile.in, python/Makefile.in,
+ src/Makefile.intestsuite/Makefile.in: Regenerate.
+
+2011-11-02 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/c++config: Add tr2 to versioned namespaces.
+ * scripts/run_doxygen: Adjust generated man files as well.
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers.
+
+2011-11-02 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (promise): Add constructors for uses-allocator
+ construction from rvalue promise.
+ (packaged_task): Implement LWG 2067. Add additional constructors for
+ uses-allocator construction.
+ * testsuite/30_threads/packaged_task/cons/3.cc: New.
+ * testsuite/30_threads/packaged_task/cons/alloc2.cc: New.
+ * testsuite/30_threads/promise/cons/alloc2.cc: New.
+
+2011-10-31 Jason Merrill <jason@redhat.com>
+
+ * include/Makefile.am (install-freestanding-headers): Install
+ c++0x_warning.h.
+ * libsupc++/initializer_list: Include it.
+
+2011-10-31 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * acinclude.m4 (GLIBCXX_CONFIGURE): Refer to GNU/Linux.
+ * configure: Regenerate.
+
+2011-10-31 Jason Merrill <jason@redhat.com>
+
+ PR c++/50920
+ * include/bits/c++0x_warning.h: Change -std=c++0x to -std=c++11.
+
+2011-10-30 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * prerequisites.xml: Refer to GCC (instead of gcc) and GNU/Linux.
+ Remove an obsolete reference to a Red Hat release we do not
+ support any longer.
+ Refer to Debian GNU/Linux.
+
+2011-10-30 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * faq.xml (Who's in charge of it?): Refer to the Linux kernel
+ instead of just Linux.
+ (How do I install libstdc++?): Refer to GNU/Linux instead of
+ just Linux.
+
+2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/30_threads/condition_variable_any/50862.cc: Trivial
+ formatting fixes.
+
+2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/unordered_map/operations/count.cc: New.
+ * testsuite/23_containers/multimap/operations/count.cc: Likewise.
+ * testsuite/23_containers/set/operations/count.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/operations/count.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_set/operations/count.cc: Likewise.
+ * testsuite/23_containers/multiset/operations/count.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/operations/count.cc:
+ Likewise.
+ * testsuite/23_containers/map/operations/count.cc: Likewise.
+
+2011-10-28 Richard B. Kreckel <kreckel@ginac.de>
+
+ * include/std/complex (__complex_acosh): Just use '< _Tp()'.
+ * include/tr1/complex (__complex_acosh): Likewise.
+
+2011-10-27 Richard B. Kreckel <kreckel@ginac.de>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50880
+ * include/std/complex (__complex_acosh): Fix for __z.real() < 0.
+ * include/tr1/complex (__complex_acosh): Likewise.
+ * testsuite/26_numerics/complex/50880.cc: New.
+ * testsuite/tr1/8_c_compatibility/complex/50880.cc: Likewise.
+
+2011-10-27 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/50862
+ * include/std/condition_variable (condition_variable_any::wait): Avoid
+ terminating if relocking user mutex throws during stack-unwinding.
+ * testsuite/30_threads/condition_variable_any/50862.cc: Add dg-require.
+
+2011-10-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/condition_variable (condition_variable_any): Remove
+ unused native_handle_type typedef.
+ * src/condition_variable.cc (condition_variable): Add missing noexcept
+ specifications.
+ * testsuite/30_threads/condition_variable_any/requirements/
+ typedefs.cc: Remove.
+
+2011-10-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/50862
+ * include/std/condition_variable (condition_variable_any::wait): Fix
+ deadlock and ensure _Lock::lock() is called on exit.
+ (condition_variable_any::native_handle): Remove, as per LWG 1500.
+ * testsuite/30_threads/condition_variable_any/50862.cc: New.
+
+2011-10-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/49894
+ * include/std/mutex (__mutex_base,__recursive_mutex_base): Define new
+ base classes to manage construction/destruction of native mutexes,
+ using NSDMI when INIT macros are defined.
+ (mutex,recursive_mutex,timed_mutex,recursive_timed_mutex): Derive from
+ new base classes.
+ * include/std/condition_variable (condition_variable): Use NSDMI when
+ INIT macro is defined. Use noexcept.
+ * src/condition_variable.cc (condition_variable): Explicitly-default
+ constructor/destructor when using NSDMI. Use noexcept.
+ (condition_variable_any): Likewise.
+
+2011-10-24 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/30_threads/async/49668.cc: Add missing dg-require.
+ * testsuite/30_threads/packaged_task/49668.cc: Likewise.
+
+2011-10-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/50834
+ * doc/xml/manual/using.xml: Update thread safety docs w.r.t. C++11.
+
+2011-10-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/50196
+ * acinclude.m4 (GLIBCXX_HAS_GTHREADS): Don't depend on _POSIX_TIMEOUTS.
+ * configure: Regenerate.
+ * include/std/mutex (timed_mutex, recursive_timed_mutex): Define
+ conditionally on GTHREADS_HAS_MUTEX_TIMEDLOCK.
+ * testsuite/lib/libstdc++.exp (check_v3_target_gthreads_timed): Define.
+ * testsuite/lib/dg-options.exp (dg-require-gthreads-timed): Define.
+ * testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc:
+ Use dg-require-gthreads-timed instead of dg-require-gthreads.
+ * testsuite/30_threads/recursive_timed_mutex/native_handle/
+ typesizes.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc:
+ Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc:
+ Likewise.
+ * testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/native_handle/typesizes.cc:
+ Likewise.
+ * testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/cons/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/requirements/standard_layout.cc:
+ Likewise.
+ * testsuite/30_threads/timed_mutex/requirements/typedefs.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/lock/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/5.cc: Likewise.
+ * testsuite/30_threads/unique_lock/cons/6.cc: Likewise.
+ * testsuite/30_threads/unique_lock/locking/3.cc: Likewise.
+ * testsuite/30_threads/unique_lock/locking/4.cc: Likewise.
+
+2011-10-19 Ed Smith-Rowland <3dw4rd@verizon.net>
+
+ * include/tr2/bool_set (bool_set): New.
+ * include/tr2/bool_set.tcc: New.
+ * include/tr2/dynamic_bitset (dynamic_bitset): New.
+ * include/tr2/ratio (kibi, mebi, gibi, tebi, pebi, exbi): New.
+ * include/Makefile.am: Add files.
+ * include/Makefile.in: Regenerate.
+
+2011-10-19 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/doxygen/user.cfg.in: Add tr2 files.
+ * testsuite/tr2/headers/all.cc: New.
+ * testsuite/tr2/headers/using_namespace_std_tr2.cc: New.
+
+ * include/tr2/type_traits: Tweak.
+
+2011-10-18 Jason Merrill <jason@redhat.com>
+
+ PR c++/50500
+ * include/bits/shared_ptr.h: Default copy ctor and assignment.
+ * testsuite/util/testsuite_allocator.h: Define copy assignment.
+ * testsuite/util/testsuite_rvalref.h: Default copy assignment.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Remove note tags.
+
+2011-10-17 Michael Spertus <mike_spertus@symantec.com>
+
+ * include/tr2/type_traits (bases, direct_bases, typelist): New.
+
+2011-10-17 Benjamin Kosnik <bkoz@redhat.com>
+
+ * libstdc++-v3/include/Makefile.am: Add tr2 directory and includes.
+ * libstdc++-v3/include/Makefile.in: Regenerate.
+
+ * scripts/create_testsuite_files: Search tr2 directory.
+ * testsuite/libstdc++-dg/conformance.exp: Same.
+
+ * testsuite/tr2/bases/requirements/explicit_instantiation.cc: New.
+ * testsuite/tr2/bases/requirements/typedefs.cc: New.
+ * testsuite/tr2/bases/value.cc: New.
+ * testsuite/tr2/direct_bases/requirements/
+ explicit_instantiation.cc: New.
+ * testsuite/tr2/direct_bases/requirements/typedefs.cc: New.
+ * testsuite/tr2/direct_bases/value.cc: New.
+
+2011-10-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR bootstrap/50715
+ * config/abi/pre/gnu.ver (CXXABI_1.3.6): Remove duplicate
+ __cxa_get_exception_ptr.
+
+2011-10-14 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/performance/23_containers/insert_erase/41975.cc: New.
+
+2011-10-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/22_locale/codecvt_byname/50714.cc: Fix mychar.
+
+2011-10-14 Jonathan Yong <jon_y@users.sourceforge.net>
+
+ * configure.host: Use config/os/mingw32-w64 instead of
+ config/os/mingw32 if vendor key is "w64".
+ * config/os/mingw32-w64: Duplicate from config/os/mingw32.
+ * config/os/mingw32-w64/os_defines.h: Enable
+ _GLIBCXX_FULLY_DYNAMIC_STRING if undefined.
+ * acinclude.m4: Set fully-dynamic-string to 1 when enabled,
+ 0 when disabled or undefined if unset by user.
+ * include/bits/basic_string.h: Check if
+ _GLIBCXX_FULLY_DYNAMIC_STRING is set to 0 instead of undefined.
+ include/bits/basic_string.tcc: Likewise.
+ * configure: Regenerated.
+ * config.h.in: Likewise.
+
+2011-10-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50714
+ * include/bits/codecvt.h (codecvt<>::codecvt(size_t)): Initialize
+ _M_c_locale_codecvt member.
+ * testsuite/22_locale/codecvt_byname/50714.cc: New.
+
+2011-10-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50594
+ * libsupc++/new (operator new, operator delete): Decorate with
+ __attribute__((__externally_visible__)).
+ * include/bits/c++config: Add _GLIBCXX_THROW.
+ * libsupc++/del_op.cc: Adjust.
+ * libsupc++/del_opv.cc: Likewise.
+ * libsupc++/del_opnt.cc: Likewise.
+ * libsupc++/del_opvnt.cc: Likewise.
+ * libsupc++/new_op.cc: Likewise.
+ * libsupc++/new_opv.cc: Likewise.
+ * libsupc++/new_opnt.cc: Likewise.
+ * libsupc++/new_opvnt.cc: Likewise.
+ * testsuite/18_support/50594.cc: New.
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust dg-error
+ line number.
+
+2011-10-11 Emil Wojak <emil@wojak.eu>
+
+ PR c++/50661
+ * include/bits/stl_algobase.h (equal): Compare arrays of pointers
+ too with memcmp.
+
+2011-10-10 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/49818
+ * config/abi/pre/gnu.ver (CXXABI_1.3.6): Add symbols.
+ * testsuite/util/testsuite_abi.cc: Same.
+ * libsupc++/unwind-cxx.h: Move required eh API...
+ * libsupc++/cxxabi.h: ... to here. Add required forward declarations.
+ Use _GLIBCXX_NOTHROW.
+ * libsupc++/pure.cc (__cxa_deleted_virtual): Add.
+ * libsupc++/eh_alloc.cc: Use _GLIBCXX_NOTHROW.
+ * libsupc++/eh_catch.cc: Same.
+ * libsupc++/eh_globals.cc: Same.
+ * libsupc++/eh_type.cc: Same.
+
+2011-10-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/util/testsuite_allocator.h (uneq_allocator): Add
+ propagate_on_container_swap typedef for C++0x testing.
+
+2011-10-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/27_io/ios_base/cons/assign_neg.cc: Tidy dg- directives,
+ for C++0x testing too.
+ * testsuite/27_io/ios_base/cons/copy_neg.cc: Likewise.
+ * testsuite/ext/pb_ds/example/hash_resize_neg.cc: Likewise.
+ * testsuite/24_iterators/istreambuf_iterator/requirements/
+ base_classes.cc: Adjust for C++0x testing.
+ * testsuite/ext/codecvt/char-1.cc: Avoid warnings in C++0x mode.
+ * testsuite/ext/codecvt/char-2.cc: Likewise.
+ * testsuite/ext/codecvt/wchar_t.cc: Likewise.
+
+2011-10-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/ext/pod_char_traits.h: Avoid warnings in C++0x mode
+ when int_type is unsigned.
+
+2011-10-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49561
+ * include/bits/stl_list.h (_List_base<>::_List_impl::_M_size):
+ Add in C++0x mode.
+ (_List_base<>::_List_impl, _List_base<>::_M_get_node,
+ _List_base<>::_M_put_node, _List_base<>::_List_base(_List_base&&),
+ list<>::size, list<>::swap, list<>::splice): Use it.
+ (operator==(const list<>&, const list<>&)): Rewrite in C++0x mode.
+ * include/bits/list.tcc (list<>::erase): Likewise.
+ (list<>::merge): Adjust in C++0x mode.
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+ Adjust dg-error line number.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2011-10-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/bind/48698.cc (g): Fix return type, avoid -Wall
+ warning.
+
+2011-10-04 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/ext/alloc_traits.h (__alloc_traits::max_size): Define.
+ (__alloc_traits::rebind): Define.
+ * include/bits/stl_vector.h: Use them.
+ * testsuite/util/testsuite_allocator.h (SimpleAllocator): Define.
+ * testsuite/23_containers/vector/allocator/minimal.cc: New.
+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2011-10-03 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/pointer_traits/pointer_to.cc: Define equality
+ operator and use.
+
+2011-10-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::insert(value_type&&),
+ insert(const_iterator, value_type&&)): Don't define here...
+ * include/bits/unordered_set.h (__unordered_set<>,
+ __unordered_multiset<>): ... define here instead.
+
+2011-09-29 Jason Merrill <jason@redhat.com>
+
+ * testsuite/util/testsuite_tr1.h (test_property): Avoid
+ ambiguity.
+
+2011-10-01 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/debug/vector (vector<>::erase(iterator, iterator): Check
+ iterators equality using normal iterators.
+ * include/debug/deque (deque<>::erase(iterator, iterator): Likewise.
+
+2011-09-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::_Hashtable(_Hashtable&&)):
+ Remove noexcept from declaration too.
+
+2011-09-27 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/html/*: Regenerate.
+
+ * doc/Makefile.am: Un-nest the ext output directory.
+ * doc/Makefile.in: Regenerate.
+ * spine.xml: Remove authors, add abstract for short
+ contents. Rename to index.html for html output.
+ * manual/spine.xml: Authors here, manual starts with index.html.
+ * api.xml: Update.
+ * faq.xml: Same.
+
+2011-09-27 Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+ * libsupc++/tinfo.cc (type_info::operator==): Test __name instead
+ of name().
+
+2011-09-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50529
+ * include/bits/vector.tcc (vector<>::erase(iterator, iterator)):
+ Fix to do nothing if the range is empty.
+ * include/bits/stl_bvector.h: Likewise.
+ * include/bits/deque.tcc: Likewise.
+ * include/debug/vector: Adjust.
+ * include/debug/deque: Likewise.
+ * testsuite/23_containers/vector/modifiers/erase/50529.cc: New.
+ * testsuite/23_containers/deque/modifiers/erase/50529.cc: Likewise.
+ * testsuite/23_containers/deque/modifiers/erase/3.cc: Adjust.
+
+2011-09-25 Benjamin Kosnik <bkoz@redhat.com>
+ Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48698
+ * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Set libtool_VERSION here.
+ * configure.ac: Move AC_SUBST of libtool_VERSION past call to
+ GLIBCXX_ENABLE_SYMVERS.
+ * configure: Regenerate.
+ * include/bits/c++config: Use __7 as versioned namespace name.
+ * config/abi/pre/gnu-versioned-namespace.ver: Change mangling as
+ per above.
+ * include/c_global/cwchar: Adjust nested namespaces.
+ * testsuite/20_util/bind/48698.cc: Add test case.
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Change line number.
+
+2011-09-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ Revert (no longer necessary post r179130):
+
+ 2010-04-27 Fabien Chêne <fabien.chene@gmail.com>
+
+ * testsuite/util/testsuite_error.h: Add empty default constructor
+ to __gnu_test::test_category and
+ __gnu_test::test_derived_category.
+ * src/future.cc: Add empty default constructor to
+ future_error_category.
+ * src/system_error.cc: Add default ctor to generic_error_category
+ and system_error_category.
+
+2011-09-24 John Salmon <john.salmon@deshaw.com>
+
+ PR libstdc++/50510
+ * include/bits/random.tcc (seed_seq::generate): Fix computation.
+
+2011-09-24 John Salmon <john.salmon@deshaw.com>
+
+ PR libstdc++/50509
+ * include/bits/random.tcc (seed_seq::generate): Fix computation.
+
+2011-09-21 Benjamin Kosnik <bkoz@redhat.com
+
+ * doc/Makefile.am (stamp-epub-docbook): Fix image directory location.
+ * doc/Makefile.in: Regenerate.
+
+2011-09-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * src/limits.cc: Replace everywhere __int128_t -> __int128, and
+ __uint128_t -> unsigned __int128.
+ * include/std/type_traits: Likewise.
+ * include/std/limits: Likewise.
+ * testsuite/18_support/numeric_limits/dr559.cc: Likewise.
+ * testsuite/18_support/numeric_limits/lowest.cc: Likewise.
+ * testsuite/18_support/numeric_limits/40856.cc: Likewise.
+ * testsuite/18_support/numeric_limits/max_digits10.cc: Likewise.
+ * testsuite/util/testsuite_common_types.h: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise.
+ * testsuite/20_util/is_floating_point/value.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Likewise.
+ * testsuite/20_util/is_signed/value.cc: Likewise.
+ * testsuite/20_util/is_unsigned/value.cc: Likewise.
+ * testsuite/20_util/is_integral/value.cc: Likewise.
+ * config/abi/pre/gnu.ver: Likewise.
+ * acinclude.m4: Likewise.
+ * configure: Regenerate.
+ * config.h.in: Likewise.
+
+2011-09-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/40856
+ * include/std/limits (numeric_limits<__int128_t>,
+ numeric_limits<__uint128_t>): Add.
+ * src/limits.cc:Define.
+ * config/abi/pre/gnu.ver: Export.
+ * include/ext/typelist.h (_GLIBCXX_TYPELIST_CHAIN16, 20): Add.
+ * testsuite/util/testsuite_common_types.h (integral_types_gnu): Add
+ (limits_tl): Use it.
+ * testsuite/18_support/numeric_limits/requirements/
+ constexpr_functions.cc: Likewise.
+ * testsuite/18_support/numeric_limits/40856.cc: New.
+ * testsuite/18_support/numeric_limits/dr559.cc: Extend.
+ * testsuite/18_support/numeric_limits/lowest.cc: Likewise.
+ * testsuite/18_support/numeric_limits/max_digits10.cc: Likewise.
+ * testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error
+ line numbers.
+ * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
+ Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
+ Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
+ Likewise.
+
+2011-09-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50441
+ * acinclude.m4 ([GLIBCXX_ENABLE_INT128_FLOAT128]): Add.
+ * configure.ac: Call it.
+ * include/std/type_traits (__is_integral_helper<__int128_t>,
+ __is_integral_helper<__uint128_t>,
+ __is_floating_point_helper<__float128>,
+ __make_unsigned<__int128_t>, __make_signed<__uint128_t>): Add.
+ * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Extend.
+ * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Likewise.
+ * testsuite/20_util/is_signed/value.cc: Likewise.
+ * testsuite/20_util/is_unsigned/value.cc: Likewise.
+ * testsuite/20_util/is_integral/value.cc: Likewise.
+ * testsuite/20_util/is_floating_point/value.cc: New.
+ * testsuite/20_util/is_floating_point/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_floating_point/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
+ dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+ * configure: Regenerate.
+ * config.h.in: Likewise.
+
+2011-09-17 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/hashtable.h (_Hashtable<>::__rehash_policy(const
+ _RehashPolicy&)): Commit the modification of the policy only if no
+ exception occured.
+ * testsuite/23_containers/unordered_set/max_load_factor/robustness.cc:
+ New.
+
+2011-09-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/array/comparison_operators/
+ less_or_equal.cc: New.
+ * testsuite/23_containers/array/comparison_operators/
+ greater_or_equal.cc: Likewise.
+ * testsuite/23_containers/array/comparison_operators/less.cc: Likewise.
+ * testsuite/23_containers/array/comparison_operators/equal.cc: Likewise.
+ * testsuite/23_containers/array/comparison_operators/not_equal.cc:
+ Likewise.
+ * testsuite/23_containers/array/comparison_operators/greater.cc:
+ Likewise.
+ * testsuite/23_containers/array/iterators/end_is_one_past.cc: Likewise.
+ * testsuite/23_containers/array/capacity/empty.cc: Likewise.
+ * testsuite/23_containers/array/capacity/max_size.cc: Likewise.
+ * testsuite/23_containers/array/capacity/size.cc: Likewise.
+ * testsuite/23_containers/array/tuple_interface/tuple_element.cc:
+ Likewise.
+ * testsuite/23_containers/array/tuple_interface/tuple_size.cc:
+ Likewise.
+ * testsuite/23_containers/array/element_access/at_out_of_range.cc:
+ Likewise.
+ * testsuite/23_containers/array/element_access/back.cc: Likewise.
+ * testsuite/23_containers/array/element_access/front.cc: Likewise.
+ * testsuite/23_containers/array/element_access/data.cc: Likewise.
+ * testsuite/23_containers/array/cons/aggregate_initialization.cc:
+ Likewise.
+ * testsuite/23_containers/array/requirements/zero_sized_arrays.cc:
+ Likewise.
+ * testsuite/23_containers/array/requirements/contiguous.cc: Likewise.
+ * testsuite/23_containers/array/requirements/member_swap.cc: Likewise.
+ * testsuite/23_containers/array/specialized_algorithms/swap.cc:
+ Likewise.
+ * testsuite/23_containers/array/constexpr_get.cc: Move...
+ * testsuite/23_containers/array/tuple_interface/constexpr_get.cc:
+ ... here.
+ * testsuite/23_containers/array/requirements/get.cc: Move...
+ * testsuite/23_containers/array/tuple_interface/get: ... here.
+ * testsuite/23_containers/array/at_neg.cc: Move...
+ * testsuite/23_containers/array/element_access: ... here.
+ * testsuite/23_containers/array/requirements/constexpr_functions.cc:
+ Move...
+ * testsuite/23_containers/array/capacity: ... here.
+ * testsuite/23_containers/array/requirements/
+ constexpr_element_access.cc: Move...
+ * testsuite/23_containers/array/element_access: ... here.
+
+ * testsuite/20_util/duration/cons/1_neg.cc: Avoid -Wall warnings.
+ * testsuite/20_util/tuple/creation_functions/constexpr.cc: Likewise.
+ * testsuite/20_util/pair/make_pair/constexpr.cc: Likewise.
+ * testsuite/20_util/time_point/nonmember/constexpr.cc: Likewise.
+ * testsuite/23_containers/bitset/operations/constexpr.cc: Likewise.
+
+ * testsuite/20_util/duration/cons/1_neg.cc: Discard bogus warning.
+ * testsuite/20_util/forward/1_neg.cc: Likewise.
+
+2011-09-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (make_tuple, forward_as_tuple): Declare constexpr.
+ (_Tuple_impl<>::_Tuple_impl(_Tuple_impl<>&&)): Likewise.
+ * testsuite/20_util/tuple/creation_functions/constexpr.cc: Enable
+ make_tuple test.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-warning
+ line number.
+
+2011-09-14 François Dumont <fdumont@gcc.gnu.org>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::_M_rehash): Take and restore
+ hash policy _M_prev_resize on exception.
+ (_Hashtable<>::_M_insert_bucket): Capture hash policy next resize
+ before using it and use latter method to have it restored on exception.
+ (_Hashtable<>::_M_insert(_Arg&& __v, std::false_type): Likewise.
+ (_Hashtable<>::insert(_InputIterator, _InputIterator): Likewise.
+ (_Hashtable<>::rehash): Likewise.
+ * testsuite/23_containers/unordered_set/insert/hash_policy.cc: New.
+ * testsuite/23_containers/unordered_multiset/insert/hash_policy.cc:
+ Likewise.
+
+2011-09-13 Paul Brook <paul@codesourcery.com>
+
+ * libsupc++/eh_arm.cc (__cxa_end_cleanup): Add C6X implementation.
+ * libsupc++/eh_call.cc (__cxa_call_unexpected): Set rtti_base.
+ * libsupc++/eh_personality.cc (NO_SIZE_OF_ENCODED_VALUE): Remove
+ __ARM_EABI_UNWINDER__ check.
+ (parse_lsda_header): Check _GLIBCXX_OVERRIDE_TTYPE_ENCODING.
+ (get_ttype_entry): Use generic implementation on ARM EABI.
+ (check_exception_spec): Use _Unwind_decode_typeinfo_ptr and
+ UNWIND_STACK_REG.
+ (PERSONALITY_FUNCTION): Set ttype_base.
+
+2011-09-12 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (_Head_base<>::_M_head, _Head_base<>::_M_tail,
+ _Tuple_impl<>::_M_head, _Tuple_impl<>::_M_tail): Change to static
+ constexpr functions; adjust everywhere.
+ (__get_helper, get): Declare constexpr all three overloads.
+ (tuple_cat): Declare constexpr; use late return type to improve
+ error messages.
+ * include/std/utility (__pair_get<>::__get, __pair_get<>::__move_get,
+ __pair_get<>::__const_get, get): Declare all constexpr.
+ * include/std/array (get): Likewise.
+ * testsuite/20_util/tuple/creation_functions/constexpr.cc: Re-enable
+ tuple_cat test.
+ * testsuite/23_containers/array/constexpr_get.cc: New.
+ * testsuite/20_util/tuple/element_access/constexpr_get.cc: Likewise.
+ * testsuite/20_util/pair/constexpr_get.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-error
+ line number.
+
+2011-09-12 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/is_constructible/value-2.cc: Adjust
+ expected values.
+
+2011-09-11 Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ PR libstdc++/50159
+ * include/std/tuple (tuple_cat): Reimplement according to the
+ resolution of LWG 1385.
+ * include/std/type_traits: Define __and_ and __or_ for zero
+ arguments too; minor tweaks.
+ * testsuite/20_util/tuple/creation_functions/tuple_cat.cc: New.
+ * testsuite/20_util/tuple/creation_functions/constexpr.cc: Disable
+ for now tuple_cat test.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
+ line numbers.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * doc/xml/manual/status_cxx200x.xml: Update.
+
+2011-09-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple: Use everywhere std::size_t... instead of int...
+ * include/std/functional: Likewise.
+ * include/std/scoped_allocator: Likewise.
+ * include/bits/stl_pair.h: Likewise.
+
+2011-09-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50336
+ * include/bits/streambuf_iterator.h (class istreambuf_iterator):
+ Implement LWG 445 in C++0x mode.
+ * testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc:
+ New.
+
+2011-09-08 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/33255 - Support -Wunused-local-typedefs warning
+ * include/ext/bitmap_allocator.h
+ (__detail::__mini_vector::__lower_bound): Remove unused typedef.
+ * src/istream.cc (std::operator>>(basic_istream<char>& __in,
+ basic_string<char>& __str)): Likewise.
+ (std::getline): Likewise.
+ * src/valarray.cc (__valarray_product): Likewise.
+
+2011-09-07 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/23_containers/array/at.cc: Revert to...
+ * testsuite/23_containers/array/at_neg.cc: ...this.
+
+2011-09-07 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/bind/ref_neg.cc: Adjust errors.
+ * testsuite/20_util/duration/cons/1_neg.cc: Adjust errors.
+
+2011-09-06 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/tuple (_Tuple_impl::_M_head, _M_tail): Mark constexpr.
+ (tuple(tuple&&)): Same.
+ (tuple(const tuple<_UElements...>& __in)): Same.
+ (tuple(tuple<_UElements...>&& __in)): Same.
+ (tuple_cat(const tuple<_TElements...>&, const tuple<_UElements...>&)):
+ Same.
+ (get): Same.
+ * include/std/array: Consolidate array::data usage.
+ * testsuite/23_containers/array/requirements/constexpr_functions.cc:
+ Remove extra include.
+ * testsuite/20_util/tuple/creation_functions/constexpr.cc: New.
+ * testsuite/20_util/tuple/cons/constexpr-2.cc: Add tests.
+ * testsuite/20_util/tuple/cons/constexpr-3.cc: Same.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust line numbers.
+
+2011-09-06 François Dumont <fdumont@gcc.gnu.org>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable_policy.h (_Prime_rehash_policy::
+ _M_next_bkt): Cast _M_max_load_factor to long double.
+ (_Prime_rehash_policy::_M_bkt_for_elements): Use _M_next_bkt.
+ (_Prime_rehash_policy::_M_need_rehash): Likewise; cast all
+ float quantities to long double.
+
+2011-09-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50257
+ * include/bits/hashtable_policy.h (_Prime_rehash_policy::
+ _M_next_bkt): Optimize for small argument.
+
+2011-09-02 François Dumont <fdumont@gcc.gnu.org>
+
+ * testsuite/util/testsuite_allocator.h (tracker_allocator_counter::
+ allocate): Update allocation count only if allocation succeeded.
+
+2011-09-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/bitset: Trivial formatting fixes.
+
+2011-09-02 Paolo Carlini <paolo.carlini@oracle.com>
+ Marc Glisse <marc.glisse@normalesup.org>
+
+ * include/std/bitset (_Base_bitset<>::_M_are_all_aux): Remove.
+ (_Base_bitset<>::_M_are_all): Add.
+ (bitset<>::all): Use the latter, improve implementation.
+
+2011-09-02 Paolo Carlini <paolo.carlini@oracle.com>
+ Marc Glisse <marc.glisse@normalesup.org>
+
+ PR libstdc++/50268
+ * include/std/bitset (struct _Sanitize_val): Add.
+ (bitset<>::bitset(unsigned long long)): Fix.
+ * testsuite/23_containers/bitset/cons/50268.cc: New.
+
+2011-09-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::_Hashtable(_Hashtable&&)):
+ Remove noexcept, the move constructor allocates memory; rearrange
+ the code in the body to consistently update __ht._M_rehash_policy
+ before using _M_next_bkt on it.
+ * include/debug/unordered_map: Adjust.
+ * include/debug/unordered_set: Likewise.
+ * include/profile/unordered_map: Likewise.
+ * include/profile/unordered_set: Likewise.
+ * testsuite/23_containers/unordered_map/cons/
+ noexcept_move_construct.cc: Remove.
+ * testsuite/23_containers/unordered_set/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/cons/
+ noexcept_move_construct.cc: Likewise.
+
+2011-08-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/chrono (operator*(const _Rep1&, const duration<>&)):
+ Fix order of template parameters per LWG 2004.
+
+2011-08-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_iterator.h (make_move_iterator): Implement DR2061.
+ * testsuite/24_iterators/move_iterator/dr2061.cc: New.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-warning
+ line numbers.
+
+2011-08-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * config/os/mingw32/error_constants.h: Fix commas.
+
+2011-08-29 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/20_util/duration/arithmetic/constexpr.cc: Add.
+
+2011-08-29 Kai Tietz <ktietz@redhat.com>
+
+ * configure: Regenerated.
+ * config.h.in: Regenerated.
+ * acinclude.m4 (GLIBCXX_CHECK_SYSTEM_ERROR) Add
+ checks for ECHILD, ENOSPC, EPERM, ETIMEDOUT, and
+ EWOULDBLOCK.
+ * config/os/mingw32/error_constants.h (errc): Add
+ enumerator values no_child_process, no_space_on_device,
+ not_supported, operation_not_permitted, operation_would_block,
+ timed_out, and value_too_large,
+
+2011-08-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50118
+ * include/bits/stl_list.h (_List_base<>::
+ _List_base(const allocator_type&)): Remove.
+ (_List_base<>::_List_base(const _Node_alloc_type&)): Add.
+ (list<>:list(const allocator_type&), list(size_type, const
+ value_type&, const allocator_type&),
+ list(initializer_list<, const allocator_type&),
+ list(_InputIterator, _InputIterator, const allocator_type&),
+ insert(iterator, size_type, const value_type&),
+ insert(iterator, _InputIterator, _InputIterator)): Adjust.
+ * include/bits/stl_tree.h (_Rb_tree<>::_Rb_tree(const _Compare&,
+ const allocator_type&)): Fix.
+ * include/bits/stl_map.h (map<>::map(const _Compare&,
+ const allocator_type&), map(initializer_list<>,
+ const _Compare&, const allocator_type&), map(_InputIterator,
+ _InputIterator, const _Compare&, const allocator_type&),
+ get_allocator): Adjust.
+ * include/bits/stl_set.h (set<>::set(const _Compare&,
+ const allocator_type&), set(initializer_list<>,
+ const _Compare&, const allocator_type&), set(_InputIterator,
+ _InputIterator, const _Compare&, const allocator_type&),
+ get_allocator): Likewise.
+ * include/bits/stl_multimap.h (multimap<>::multimap(const _Compare&,
+ const allocator_type&), multimap(initializer_list<>,
+ const _Compare&, const allocator_type&), multimap(_InputIterator,
+ _InputIterator, const _Compare&, const allocator_type&),
+ get_allocator): Likewise.
+ * include/bits/stl_multiset.h (multiset<>::multiset(const _Compare&,
+ const allocator_type&), multiset(initializer_list<>,
+ const _Compare&, const allocator_type&), multiset(_InputIterator,
+ _InputIterator, const _Compare&, const allocator_type&),
+ get_allocator): Likewise.
+ * include/bits/forward_list.h (_Fwd_list_base<>::
+ _Fwd_list_base(const _Alloc&), _Fwd_list_base(const _Fwd_list_base&,
+ const _Alloc&), _Fwd_list_base(_Fwd_list_base&&, const _Alloc&)):
+ Remove.
+ (_Fwd_list_base<>::_Fwd_list_base(const _Node_alloc_type&),
+ _Fwd_list_base(const _Fwd_list_base&,
+ const _Node_alloc_type&), _Fwd_list_base(_Fwd_list_base&&,
+ const _Node_alloc_type&)): Add.
+ (forward_list<>::forward_list(const _Alloc&),
+ forward_list(const forward_list&, const _Alloc&),
+ forward_list(forward_list&&, const _Alloc&),
+ forward_list(size_type, const _Tp&, const _Alloc&),
+ forward_list(_InputIterator, _InputIterator, const _Alloc&),
+ forward_list(std::initializer_list<>, const _Alloc&),
+ get_allocator): Adjust.
+ * include/bits/forward_list.tcc: Adjust.
+ * testsuite/util/testsuite_allocator.h (ExplicitConsAlloc): Add.
+ * testsuite/23_containers/unordered_map/requirements/
+ explicit_instantiation/5.cc: New.
+ * testsuite/23_containers/multimap/requirements/
+ explicit_instantiation/5.cc: Likewise.
+ * testsuite/23_containers/multimap/requirements/
+ explicit_instantiation/5_c++0x.cc: Likewise.
+ * testsuite/23_containers/set/requirements/explicit_instantiation/
+ 5.cc: Likewise.
+ * testsuite/23_containers/set/requirements/explicit_instantiation/
+ 5_c++0x.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/requirements/
+ explicit_instantiation/5.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/
+ explicit_instantiation/5.cc: Likewise.
+ * testsuite/23_containers/unordered_set/requirements/
+ explicit_instantiation/5.cc: Likewise.
+ testsuite/23_containers/multiset/requirements/explicit_instantiation/
+ 5.cc: Likewise.
+ * testsuite/23_containers/multiset/requirements/
+ explicit_instantiation/5_c++0x.cc: Likewise.
+ * testsuite/23_containers/list/requirements/explicit_instantiation/
+ 5_c++0x.cc: Likewise.
+ * testsuite/23_containers/list/requirements/explicit_instantiation/
+ 5.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/requirements/
+ explicit_instantiation/5.cc: Likewise.
+ * testsuite/23_containers/map/requirements/explicit_instantiation/
+ 5.cc: Likewise.
+ * testsuite/23_containers/map/requirements/explicit_instantiation/
+ 5_c++0x.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ assign_neg.cc: Adjust dg-error line number.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+ Likewise.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2011-08-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * acinclude.m4 (GLIBCXX_CHECK_MATH_PROTO)
+ (GLIBCXX_CHECK_STDLIB_PROTO): New tests.
+ * configure.ac (GLIBCXX_CHECK_MATH_PROTO)
+ (GLIBCXX_CHECK_STDLIB_PROTO): Call them.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+ * config/os/solaris/solaris2.8/os_defines.h
+ (__CORRECT_ISO_CPP_MATH_H_PROTO2): Don't define.
+ * config/os/solaris/solaris2.9: Remove.
+ * configure.host (solaris2.8): Merge with ...
+ (solaris2.9, solaris2.1[0-9]): ... this.
+ Always use os/solaris/solaris2.8.
+
+2011-08-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (swap(_Tp(&)[_Nm], _Tp(&)[_Nm])): Remove
+ workaround for c++/49045.
+ * include/bits/algorithmfwd.h: Likewise.
+
+2011-08-25 Tom Tromey <tromey@redhat.com>
+
+ * testsuite/libstdc++-prettyprinters/simple.cc: New file.
+ * testsuite/lib/gdb-test.exp: New file.
+ * testsuite/libstdc++-prettyprinters/prettyprinters.exp: New
+ file.
+
+2011-08-18 Marc Glisse <marc.glisse@normalesup.org>
+
+ * include/tr1/cmath: Extend/update comment.
+
+2011-08-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/50119
+ * include/bits/stl_algo.h (__copy_n(_InputIterator, _Size,
+ _OutputIterator, input_iterator_tag)): Fix.
+ * testsuite/25_algorithms/copy_n/50119.cc: New.
+
+2011-08-18 Marc Glisse <marc.glisse@normalesup.org>
+ Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR libstdc++/1773
+ * config/os/solaris2.7: Rename to config/os/solaris2.9.
+ * config/os/solaris/solaris2.9/os_defines.h
+ (__CORRECT_ISO_CPP_MATH_H_PROTO1)
+ (__CORRECT_ISO_CPP_STDLIB_H_PROTO)
+ (__CORRECT_ISO_CPP_STRING_H_PROTO)
+ (__CORRECT_ISO_CPP_WCHAR_H_PROTO): Define.
+ * config/os/solaris2.8/ctype_base.h,
+ config/os/solaris2.8/ctype_configure_char.cc,
+ config/solaris2.8/ctype_inline.h,
+ config/os/solaris2.8/os_defines.h: New files.
+
+ * configure.host (solaris2.[89], solaris2.1[0-9]):
+ Split into ...
+ (solaris2.8): ... this.
+ Use os/solaris/solaris2.8.
+ (solaris2.9, solaris2.1[0-9]): ... and this.
+ Use os/solaris/solaris2.9.
+
+ * include/c_global/cmath (double abs(double)): Wrap in
+ !__CORRECT_ISO_CPP_MATH_H_PROTO1 &&
+ !__CORRECT_ISO_CPP_MATH_H_PROTO2.
+ (float abs(float), long double abs(long double): Wrap in
+ !__CORRECT_ISO_CPP_MATH_H_PROTO1.
+ (float acos(float), long double acos(long double)): Likewise.
+ (float asin(float), long double asin(long double)): Likewise.
+ (float atan(float), long double atan(long double)): Likewise.
+ (float atan2(float, float), long double atan2(long double, long
+ double)): Likewise.
+ (float ceil(float), long double ceil(long double)): Likewise.
+ (float cos(float), long double cos(long double)): Likewise.
+ (float cosh(float), long double cosh(long double)): Likewise.
+ (float exp(float), long double exp(long double)): Likewise.
+ (float fabs(float), long double fabs(long double)): Likewise.
+ (float floor(float), long double floor(long double)): Likewise.
+ (float fmod(float, float), long double fmod(long double, long
+ double)): Likewise.
+ (float frexp(float, int*), long double frexp(long double, int*)):
+ Likewise.
+ (float ldexp(float, int), long double ldexp(long double, int)):
+ Likewise.
+ (float log(float), long double log(long double)): Likewise.
+ (float log10(float), long double log10(long double)): Likewise.
+ (float modf(float, float*), long double modf(long double, long
+ double*))): Likewise.
+ (float pow(float, float), long double pow(long double, long
+ double)): Likewise.
+ (float sin(float), long double sin(long double)): Likewise.
+ (float sinh(float), long double sinh(long double)): Likewise.
+ (float sqrt(float), long double sqrt(long double)): Likewise.
+ (float tan(float), long double tan(long double)): Likewise.
+ (float tanh(float), long double tanh(long double)): Likewise.
+ * include/c_global/cstdlib (long abs(long), ldiv_t div(long,
+ long)): Wrap in !__CORRECT_ISO_CPP_STDLIB_H_PROTO.
+ * include/tr1/cmath (float fabs(float), long double fabs(long
+ double)): Wrap in !__CORRECT_ISO_CPP_MATH_H_PROTO1.
+
+2011-08-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/images/*: Image and image filename changes.
+
+2011-08-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/data/make_graph_test_infos.xml: Edit.
+ * testsuite/data/make_graph_htmls.xml: Remove
+ * scripts/make_graph.py: Edit, fix.
+ * scripts/make_graphs.py: Remove.
+
+ * doc/Makefile.am (doc-svg-performance): New.
+ (doc-html-performance): Remove.
+ * doc/Makefile.in: Regenerate.
+
+ * doc/xml/manual/test_policy_data_structures.xml: Markup changes.
+ * doc/xml/manual/policy_data_structures.xml: Same.
+ * doc/xml/manual/locale.xml: Same.
+
+ Testsuite renames.
+ * performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc:
+ Rename.
+ * performance/ext/pb_ds/random_int_find_timing.cc: Same.
+ * performance/ext/pb_ds/multimap_text_insert_mem_usage.hpp
+ * performance/ext/pb_ds/multimap_text_find_timing.hpp
+ * performance/ext/pb_ds/priority_queue_random_int_push_timing.cc: Same.
+ * performance/ext/pb_ds/priority_queue_text_modify_timing.hpp
+ * performance/ext/pb_ds/tree_order_statistics_timing.cc: Same.
+ * performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc: Same.
+ * performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc: Same.
+ * performance/ext/pb_ds/priority_queue_text_join_timing.cc: Same.
+ * performance/ext/pb_ds/multimap_text_insert_timing_small.cc: Same.
+ * performance/ext/pb_ds/random_int_subscript_insert_timing.cc: Same.
+ * performance/ext/pb_ds/tree_text_lor_find_timing.cc: Same.
+ * performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc: Same.
+ * performance/ext/pb_ds/multimap_text_find_timing_small.cc: Same.
+ * performance/ext/pb_ds/text_find_timing.cc: Same.
+ * performance/ext/pb_ds/tree_text_insert_timing.cc: Same.
+ * performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc: Same.
+ * performance/ext/pb_ds/random_int_subscript_find_timing.cc: Same.
+ * performance/ext/pb_ds/priority_queue_text_push_timing.cc: Same.
+ * performance/ext/pb_ds/tree_split_join_timing.cc: Same.
+ * performance/ext/pb_ds/multimap_text_insert_timing_large.cc: Same.
+ * performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc: Same.
+ * performance/ext/pb_ds/multimap_text_find_timing_large.cc: Same.
+ * performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc:
+ Same.
+ * performance/ext/pb_ds/multimap_text_insert_timing.hpp
+ * performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc: Same.
+ * performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc: Same.
+
+ * performance/ext/pb_ds/all_int_find.cc: To these new files...
+ * performance/ext/pb_ds/all_int_subscript_find.cc: ...this.
+ * performance/ext/pb_ds/all_int_subscript_insert.cc: ...this.
+ * performance/ext/pb_ds/all_text_find.cc: ...this.
+ * performance/ext/pb_ds/hash_int_erase_mem.cc: ...this.
+ * performance/ext/pb_ds/hash_zlob_int_find.cc: ...this.
+ * performance/ext/pb_ds/multimap_text_find.hpp
+ * performance/ext/pb_ds/multimap_text_find_large.cc: ...this.
+ * performance/ext/pb_ds/multimap_text_find_small.cc: ...this.
+ * performance/ext/pb_ds/multimap_text_insert.hpp
+ * performance/ext/pb_ds/multimap_text_insert_large.cc: ...this.
+ * performance/ext/pb_ds/multimap_text_insert_mem.hpp
+ * performance/ext/pb_ds/multimap_text_insert_mem_large.cc: ...this.
+ * performance/ext/pb_ds/multimap_text_insert_mem_small.cc: ...this.
+ * performance/ext/pb_ds/multimap_text_insert_small.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_int_push.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_int_push_pop.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_text_join.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_text_modify_down.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_text_modify.hpp
+ * performance/ext/pb_ds/priority_queue_text_modify_up.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_text_pop_mem.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_text_push.cc: ...this.
+ * performance/ext/pb_ds/priority_queue_text_push_pop.cc: ...this.
+ * performance/ext/pb_ds/tree_order_statistics.cc: ...this.
+ * performance/ext/pb_ds/tree_split_join.cc: ...this.
+ * performance/ext/pb_ds/tree_text_insert.cc: ...this.
+ * performance/ext/pb_ds/tree_text_lor_find.cc: ...this.
+
+ * doc/xml/images/*: Image and image filename changes.
+
+2011-08-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/c_global/cmath (fmod(_Tp, _Up)): Add.
+ * include/c_std/cmath: Likewise.
+
+2011-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/future: constexpr functions are implicitly inline.
+ * include/std/chrono: Likewise.
+ * include/std/complex: Likewise.
+ * include/bits/move.h: Likewise.
+ * include/bits/stl_pair.h: Likewise.
+
+2011-08-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/alloc_traits.h: Fix doxygen @headername.
+
+2011-08-06 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/doxygen/user.cfg.in (PDF_HYPERLINKS): To NO.
+
+2011-08-06 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/doxygen/user.cfg.in: Add scoped_allocator.
+
+ * include/debug/safe_sequence.h: Fix doxygen markup.
+ * include/debug/safe_unordered_base.h: Same.
+ * include/debug/safe_local_iterator.tcc: Same.
+ * include/debug/safe_unordered_container.h: Same.
+ * include/std/valarray: Same.
+ * include/std/iomanip: Same.
+ * include/std/streambuf: Same.
+ * include/std/bitset: Same.
+ * include/std/fstream: Same.
+ * include/std/functional: Same.
+ * include/std/istream: Same.
+ * include/std/ostream: Same.
+ * include/std/scoped_allocator: Same.
+ * include/std/sstream: Same.
+ * include/parallel/multiway_merge.h: Same.
+ * include/parallel/base.h: Same.
+ * include/parallel/for_each_selectors.h: Same.
+ * include/parallel/multiway_mergesort.h: Same.
+ * include/parallel/search.h: Same.
+ * include/parallel/partial_sum.h: Same.
+ * include/parallel/queue.h: Same.
+ * include/parallel/sort.h: Same.
+ * include/parallel/random_number.h: Same.
+ * include/ext/vstring.h: Same.
+ * include/ext/algorithm: Same.
+ * include/ext/pb_ds/assoc_container.h: Same.
+ * include/ext/bitmap_allocator.h: Same.
+ * include/ext/stdio_filebuf.h: Same.
+ * include/ext/memory: Same.
+ * include/ext/functional: Same.
+ * include/bits/basic_ios.h: Same.
+ * include/bits/stl_list.h: Same.
+ * include/bits/stl_map.h: Same.
+ * include/bits/stl_algobase.h: Same.
+ * include/bits/stl_queue.h: Same.
+ * include/bits/gslice.h: Same.
+ * include/bits/locale_classes.h: Same.
+ * include/bits/stl_set.h: Same.
+ * include/bits/locale_facets.h: Same.
+ * include/bits/stl_stack.h: Same.
+ * include/bits/stl_heap.h: Same.
+ * include/bits/forward_list.h: Same.
+ * include/bits/stream_iterator.h: Same.
+ * include/bits/basic_string.h: Same.
+ * include/bits/stl_multimap.h: Same.
+ * include/bits/stl_pair.h: Same.
+ * include/bits/ios_base.h: Same.
+ * include/bits/stl_numeric.h: Same.
+ * include/bits/stl_vector.h: Same.
+ * include/bits/stl_deque.h: Same.
+ * include/bits/codecvt.h: Same.
+ * include/bits/stl_multiset.h: Same.
+ * include/bits/stl_uninitialized.h: Same.
+ * include/bits/ptr_traits.h: Same.
+ * include/bits/slice_array.h: Same.
+ * include/bits/stl_iterator_base_funcs.h: Same.
+ * include/bits/stl_algo.h: Same.
+ * include/bits/stl_iterator.h: Same.
+ * include/bits/stl_tempbuf.h: Same.
+ * include/bits/regex.h: Same.
+ * include/bits/range_access.h: Same.
+ * include/bits/random.h: Same.
+ * include/bits/alloc_traits.h: Same.
+ * include/bits/regex_error.h: Same.
+ * include/bits/locale_facets_nonio.h: Same.
+ * include/bits/stl_relops.h: Same.
+ * include/backward/auto_ptr.h: Same.
+ * libsupc++/initializer_list: Same.
+
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+ Adjust line numbers.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc:
+ Same.
+ * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc:
+ Same.
+
+2011-08-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Point TOPLEVEL_INCLUDES
+ to $(toplevel_srcdir)/libgcc.
+ * configure: Regenerate.
+
+2011-08-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/manual/build_hacking.xml: Use relative fileref for PNG
+ imagedata.
+ * doc/xml/manual/test_policy_data_structures.xml: Same.
+ * doc/xml/manual/policy_data_structures.xml: Same.
+
+ * doc/Makefile.am (stamp-html-docbook-images)
+ (stamp-html-docbook-lwg, stamp-html-docbook-data): New.
+ (xml_extra): Add lwg html file dependencies.
+ (xml_images): Add image html file dependencies.
+ * doc/Makefile.in: Regenerate.
+ (stamp-html): Change to stamp-html-docbook-data.
+ (stamp-html-copy): Remove.
+
+2011-08-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * src/atomic.cc: Use noexcept.
+ * include/std/atomic: Likewise.
+ * include/bits/atomic_0.h: Likewise.
+ * include/bits/atomic_2.h: Likewise.
+ * include/bits/atomic_base.h: Likewise.
+
+2011-08-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/performance/27_io/filebuf_sputn_unbuf.cc: Include
+ unistd.h for unlink.
+ * testsuite/performance/27_io/ofstream_insert_int.cc: Same.
+ * testsuite/performance/27_io/ifstream_extract_int.cc: Same.
+ * testsuite/performance/27_io/ifstream_getline-2.cc: Same.
+ * testsuite/performance/27_io/fstream_seek_write.cc: Same.
+ * testsuite/performance/27_io/ifstream_extract_chars.cc: Same.
+ * testsuite/performance/27_io/ofstream_insert_float.cc: Same.
+ * testsuite/performance/27_io/ifstream_extract_float.cc: Same.
+ * testsuite/performance/27_io/filebuf_sputc.cc: Same.
+
+2011-08-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/tuple: Mark more constructors constexpr.
+ * testsuite/20_util/tuple/cons/constexpr.cc: Split into and extend as:
+ * testsuite/20_util/tuple/cons/constexpr-2.cc: ...this.
+ * testsuite/20_util/tuple/cons/constexpr-3.cc: ... and this.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust line numbers.
+
+2011-08-03 Benjamin Kosnik <bkoz@redhat.com>
+ François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/23_containers/array/at_neg.cc: Move...
+ * testsuite/23_containers/array/at.cc: ...here. Remove
+ -fno-exceptions, call const at member function.
+
+2011-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Generated.
+
+2011-08-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/49813
+ * include/c_global/cmath (isinf): Remove workaround.
+
+2011-07-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49925
+ * include/bits/shared_ptr.h (make_shared): Qualify allocate_shared
+ with std::.
+ * include/bits/shared_ptr_base.h (__make_shared): Likewise.
+
+2011-07-29 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/manual/build_hacking.xml: Markup imagedata changes.
+ * doc/xml/manual/policy_data_structures.xml: Same.
+
+ * doc/xml/class.txml: Remove biblioid.
+ * doc/xml/manual/allocator.xml: Same.
+ * doc/xml/manual/ctype.xml: Same.
+ * doc/xml/manual/codecvt.xml: Same.
+ * doc/xml/manual/backwards_compatibility.xml: Same.
+ * doc/xml/manual/abi.xml: Same.
+ * doc/xml/manual/shared_ptr.xml: Same.
+ * doc/xml/manual/using_exceptions.xml: Same.
+ * doc/xml/manual/messages.xml: Same.
+
+2011-07-29 Benjamin Kosnik <bkoz@redhat.com>
+
+ Docbook conversion of existing ext/pb_ds documentation.
+ * doc/Makefile.am (xml_sources_manual): Add
+ policy_data_structures.xml and
+ test_policy_data_structures.xml.
+ (stamp-html-copy): Remove special-case for ext/pb_ds directory.
+ (XSLTPROC_FLAGS): Split into XSLT_FLAGS and XSLT_PARAM, use.
+ * doc/Makefile.in: Regenerate.
+ * doc/xml/manual/policy_data_structures.xml: New, adapted from
+ previous html-only instance in doc/html/ext/pb_ds.
+ * doc/xml/manual/test_policy_data_structures.xml: New, same as above.
+
+ * doc/xml/spine.xml: Update copyright.
+ * doc/xml/manual/spine.xml: Same.
+ * doc/xml/manual/extensions.xml: Adjust set, chapter, sections.
+ * doc/xml/manual/bitmap_allocator.xml: Same.
+ * doc/xml/manual/mt_allocator.xml: Same.
+
+ Populate image directory.
+ * doc/xml/images/(pbds_balls_and_bins.png,
+ pbds_binary_priority_queue_random_int_push_timing_test_local.pdf,
+ pbds_binary_priority_queue_random_int_push_timing_test_local.png,
+ pbds_binary_priority_queue_random_int_push_timing_test_local.svg,
+ pbds_cc_hash_random_int_find_timing_test_local.pdf,
+ pbds_cc_hash_random_int_find_timing_test_local.png,
+ pbds_cc_hash_random_int_find_timing_test_local.svg,
+ pbds_cc_hash_random_int_subscript_timing_test_find_local.pdf,
+ pbds_cc_hash_random_int_subscript_timing_test_find_local.png,
+ pbds_cc_hash_random_int_subscript_timing_test_find_local.svg,
+ pbds_cc_hash_random_int_subscript_timing_test_insert_local.pdf,
+ pbds_cc_hash_random_int_subscript_timing_test_insert_local.png,
+ pbds_cc_hash_random_int_subscript_timing_test_insert_local.svg,
+ pbds_container_tag_hierarchy.pdf,
+ pbds_container_tag_hierarchy.png,
+ pbds_container_tag_hierarchy.svg,
+ pbds_different_underlying_dss_1.png,
+ pbds_different_underlying_dss_2.png,
+ pbds_embedded_lists_1.png, pbds_embedded_lists_2.png,
+ pbds_embedded_lists_3.png, pbds_exception_hierarchy.pdf,
+ pbds_exception_hierarchy.png, pbds_exception_hierarchy.svg,
+ pbds_gp_hash_random_int_find_timing_test_local.pdf,
+ pbds_gp_hash_random_int_find_timing_test_local.png,
+ pbds_gp_hash_random_int_find_timing_test_local.svg,
+ pbds_gp_hash_random_int_subscript_timing_test_find_local.pdf,
+ pbds_gp_hash_random_int_subscript_timing_test_find_local.png,
+ pbds_gp_hash_random_int_subscript_timing_test_find_local.svg,
+ pbds_gp_hash_random_int_subscript_timing_test_insert_local.pdf,
+ pbds_gp_hash_random_int_subscript_timing_test_insert_local.png,
+ pbds_gp_hash_random_int_subscript_timing_test_insert_local.svg,
+ pbds_hash_policy_cd.png,
+ pbds_hash_random_int_erase_mem_usage_test_local.pdf,
+ pbds_hash_random_int_erase_mem_usage_test_local.png,
+ pbds_hash_random_int_erase_mem_usage_test_local.svg,
+ pbds_hash_ranged_hash_range_hashing_fns.png,
+ pbds_hash_range_hashing_seq_diagram2.png,
+ pbds_hash_range_hashing_seq_diagram.png,
+ pbds_hash_zlob_random_int_find_timing_test_local.pdf,
+ pbds_hash_zlob_random_int_find_timing_test_local.png,
+ pbds_hash_zlob_random_int_find_timing_test_local.svg,
+ pbds_insert_resize_sequence_diagram1.png,
+ pbds_insert_resize_sequence_diagram2.png,
+ pbds_insert_resize_sequence_diagram3.png,
+ pbds_invalidation_guarantee_erase.png,
+ pbds_invalidation_tag_hierarchy.pdf,
+ pbds_invalidation_tag_hierarchy.png,
+ pbds_invalidation_tag_hierarchy.svg, pbds_list_update.png,
+ pbds_multimap_text_find_timing_test_large_s2p_hash_local.pdf,
+ pbds_multimap_text_find_timing_test_large_s2p_hash_local.png,
+ pbds_multimap_text_find_timing_test_large_s2p_hash_local.svg,
+ pbds_multimap_text_find_timing_test_large_s2p_tree_local.pdf,
+ pbds_multimap_text_find_timing_test_large_s2p_tree_local.png,
+ pbds_multimap_text_find_timing_test_large_s2p_tree_local.svg,
+ pbds_multimap_text_find_timing_test_small_s2p_hash_local.pdf,
+ pbds_multimap_text_find_timing_test_small_s2p_hash_local.png,
+ pbds_multimap_text_find_timing_test_small_s2p_hash_local.svg,
+ pbds_multimap_text_find_timing_test_small_s2p_tree_local.pdf,
+ pbds_multimap_text_find_timing_test_small_s2p_tree_local.png,
+ pbds_multimap_text_find_timing_test_small_s2p_tree_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_hash_local.png,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_hash_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.png,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_hash_local.png,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_hash_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.png,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.svg,
+ pbds_multimap_text_insert_timing_test_large_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_timing_test_large_s2p_hash_local.png,
+ pbds_multimap_text_insert_timing_test_large_s2p_hash_local.svg,
+ pbds_multimap_text_insert_timing_test_large_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_timing_test_large_s2p_tree_local.png,
+ pbds_multimap_text_insert_timing_test_large_s2p_tree_local.svg,
+ pbds_multimap_text_insert_timing_test_small_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_timing_test_small_s2p_hash_local.png,
+ pbds_multimap_text_insert_timing_test_small_s2p_hash_local.svg,
+ pbds_multimap_text_insert_timing_test_small_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_timing_test_small_s2p_tree_local.png,
+ pbds_multimap_text_insert_timing_test_small_s2p_tree_local.svg,
+ pbds_node_invariants.png,
+ pbds_pairing_priority_queue_text_push_pop_timing_test_local.pdf,
+ pbds_pairing_priority_queue_text_push_pop_timing_test_local.png,
+ pbds_pairing_priority_queue_text_push_pop_timing_test_local.svg,
+ pbds_pairing_priority_queue_text_push_timing_test_local.pdf,
+ pbds_pairing_priority_queue_text_push_timing_test_local.png,
+ pbds_pairing_priority_queue_text_push_timing_test_local.svg,
+ pbds_pat_trie.png, pbds_point_iterator_hierarchy.png,
+ pbds_point_iterators_range_ops_1.png,
+ pbds_point_iterators_range_ops_2.png,
+ pbds_priority_queue_different_underlying_dss.png,
+ pbds_priority_queue_random_int_push_pop_timing_test_local.pdf,
+ pbds_priority_queue_random_int_push_pop_timing_test_local.png,
+ pbds_priority_queue_random_int_push_pop_timing_test_local.svg,
+ pbds_priority_queue_random_int_push_timing_test_local.pdf,
+ pbds_priority_queue_random_int_push_timing_test_local.png,
+ pbds_priority_queue_random_int_push_timing_test_local.svg,
+ pbds_priority_queue_tag_hierarchy.pdf,
+ pbds_priority_queue_tag_hierarchy.png,
+ pbds_priority_queue_tag_hierarchy.svg,
+ pbds_priority_queue_text_join_timing_test_local.pdf,
+ pbds_priority_queue_text_join_timing_test_local.png,
+ pbds_priority_queue_text_join_timing_test_local.svg,
+ pbds_priority_queue_text_modify_down_timing_test_local.pdf,
+ pbds_priority_queue_text_modify_down_timing_test_local.png,
+ pbds_priority_queue_text_modify_down_timing_test_local.svg,
+ pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.pdf,
+ pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.png,
+ pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.svg,
+ pbds_priority_queue_text_modify_up_timing_test_local.pdf,
+ pbds_priority_queue_text_modify_up_timing_test_local.png,
+ pbds_priority_queue_text_modify_up_timing_test_local.svg,
+ pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.pdf,
+ pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.png,
+ pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.svg,
+ pbds_priority_queue_text_pop_mem_usage_test_local.pdf,
+ pbds_priority_queue_text_pop_mem_usage_test_local.png,
+ pbds_priority_queue_text_pop_mem_usage_test_local.svg,
+ pbds_priority_queue_text_push_pop_timing_test_local.pdf,
+ pbds_priority_queue_text_push_pop_timing_test_local.png,
+ pbds_priority_queue_text_push_pop_timing_test_local.svg,
+ pbds_priority_queue_text_push_timing_test_local.pdf,
+ pbds_priority_queue_text_push_timing_test_local.png,
+ pbds_priority_queue_text_push_timing_test_local.svg,
+ pbds_rationale_null_node_updator.png,
+ pbds_resize_policy_cd.png, pbds_restoring_node_invariants.png,
+ pbds_simple_list.png,
+ pbds_text_find_timing_test_hash_local.pdf,
+ pbds_text_find_timing_test_hash_local.png,
+ pbds_text_find_timing_test_hash_local.svg,
+ pbds_text_find_timing_test_tree_like_local.pdf,
+ pbds_text_find_timing_test_tree_like_local.png,
+ pbds_text_find_timing_test_tree_like_local.svg,
+ pbds_tree_node_invalidations.png,
+ pbds_tree_node_invariants.png,
+ pbds_tree_node_updator_policy_cd.png,
+ pbds_tree_order_statistics_timing_test_local.pdf,
+ pbds_tree_order_statistics_timing_test_local.png,
+ pbds_tree_order_statistics_timing_test_local.svg,
+ pbds_tree_split_join_timing_test_local.pdf,
+ pbds_tree_split_join_timing_test_local.png,
+ pbds_tree_split_join_timing_test_local.svg,
+ pbds_tree_text_insert_timing_test_node_tree_local.pdf,
+ pbds_tree_text_insert_timing_test_node_tree_local.png,
+ pbds_tree_text_insert_timing_test_node_tree_local.svg,
+ pbds_tree_text_insert_timing_test_pat_trie_local.pdf,
+ pbds_tree_text_insert_timing_test_pat_trie_local.png,
+ pbds_tree_text_insert_timing_test_pat_trie_local.svg,
+ pbds_tree_text_insert_timing_test_vector_tree_local.pdf,
+ pbds_tree_text_insert_timing_test_vector_tree_local.png,
+ pbds_tree_text_insert_timing_test_vector_tree_local.svg,
+ pbds_tree_text_lor_find_timing_test_local.pdf,
+ pbds_tree_text_lor_find_timing_test_local.png,
+ pbds_tree_text_lor_find_timing_test_local.svg,
+ pbds_trie_node_updator_policy_cd.png,
+ pbds_update_seq_diagram.png): Add.
+
+ * doc/html/ext/pb_ds: Remove.
+ * doc/html/ext/pb_ds/(acks.html, assoc_container_tag_cd.png,
+ assoc_container_tag_cd.svg, assoc_container_traits.html,
+ assoc_design.html, assoc_examples.html,
+ associative_container_tag.html, assoc_performance_tests.html,
+ assoc_regression_tests.html, assoc_tests.html,
+ balls_and_bins.png, basic_hash_table.html,
+ basic_hash_tag.html, basic_invalidation_guarantee.html,
+ basic_tree_assoc_container_const_node_iterator.html,
+ basic_tree.html, basic_tree_tag.html, binary_heap_tag.html,
+ binary_priority_queue_random_int_push_timing_test_gcc.png,
+ binary_priority_queue_random_int_push_timing_test_local.png,
+ binary_priority_queue_random_int_push_timing_test_msvc.png,
+ binomial_heap_tag.html,
+ ccgp_hash_random_int_subscript_timing_test_insert_gcc.png,
+ ccgp_hash_random_int_subscript_timing_test_insert_local.png,
+ ccgp_hash_random_int_subscript_timing_test_insert_msvc.png,
+ cc_hash_max_collision_check_resize_trigger.html,
+ cc_hash_random_int_find_timing_test_gcc.png,
+ cc_hash_random_int_find_timing_test_local.png,
+ cc_hash_random_int_find_timing_test_msvc.png,
+ cc_hash_random_int_subscript_timing_test_find_gcc.png,
+ cc_hash_random_int_subscript_timing_test_find_local.png,
+ cc_hash_random_int_subscript_timing_test_find_msvc.png,
+ cc_hash_random_int_subscript_timing_test_insert_gcc.png,
+ cc_hash_random_int_subscript_timing_test_insert_local.png,
+ cc_hash_random_int_subscript_timing_test_insert_msvc.png,
+ cc_hash_table.html, cc_hash_tag.html, checked_by_tidy.gif
+ concepts.html, contact.html, container_base.html,
+ container_cd.png, container_cd.svg, container_tag.html,
+ counter_lu_policy.html, design.html,
+ different_underlying_dss.png, direct_mask_range_hashing.html,
+ direct_mod_range_hashing.html, disclaimer.html, ds_gen.html,
+ embedded_lists_1.png, embedded_lists_2.png,
+ embedded_lists_3.png, examples.html, exceptions.html,
+ gp_hash_random_int_find_timing_test_gcc.png,
+ gp_hash_random_int_find_timing_test_local.png,
+ gp_hash_random_int_find_timing_test_msvc.png,
+ gp_hash_random_int_subscript_timing_test_find_gcc.png,
+ gp_hash_random_int_subscript_timing_test_find_local.png,
+ gp_hash_random_int_subscript_timing_test_find_msvc.png,
+ gp_hash_random_int_subscript_timing_test_insert_gcc.png,
+ gp_hash_random_int_subscript_timing_test_insert_local.png,
+ gp_hash_random_int_subscript_timing_test_insert_msvc.png,
+ gp_hash_table.html, gp_hash_tag.html,
+ hash_based_containers.html, hash_exponential_size_policy.html,
+ hash_load_check_resize_trigger.html, hash_policy_cd.png,
+ hash_prime_size_policy.html,
+ hash_random_int_erase_mem_usage_test_gcc.png,
+ hash_random_int_erase_mem_usage_test.html,
+ hash_random_int_erase_mem_usage_test_local.png,
+ hash_random_int_erase_mem_usage_test_msvc.png,
+ hash_random_int_find_find_timing_test.html,
+ hash_random_int_subscript_find_timing_test.html,
+ hash_random_int_subscript_insert_timing_test.html,
+ hash_ranged_hash_range_hashing_fns.png,
+ hash_range_hashing_seq_diagram2.png,
+ hash_range_hashing_seq_diagram.png,
+ hash_standard_resize_policy.html,
+ hash_text_find_find_timing_test.html,
+ hash_zlob_random_int_find_find_timing_test.html,
+ hash_zlob_random_int_find_timing_test_gcc.png,
+ hash_zlob_random_int_find_timing_test_local.png,
+ hash_zlob_random_int_find_timing_test_msvc.png, index.html,
+ insert_error.html, insert_resize_sequence_diagram1.png,
+ insert_resize_sequence_diagram2.png,
+ insert_resize_sequence_diagram3.png, interface.html,
+ introduction.html, invalidation_guarantee_cd.png,
+ invalidation_guarantee_erase.png, join_error.html,
+ linear_probe_fn.html, list_update.html, list_update_tag.html,
+ lu_based_containers.html, lu.png, misc.html, motivation.html,
+ move_to_front_lu_policy.html,
+ multimap_text_find_timing_test_large.html,
+ multimap_text_find_timing_test_large_s2p_hash_gcc.png,
+ multimap_text_find_timing_test_large_s2p_hash_local.png,
+ multimap_text_find_timing_test_large_s2p_hash_msvc.png,
+ multimap_text_find_timing_test_large_s2p_tree_gcc.png,
+ multimap_text_find_timing_test_large_s2p_tree_local.png,
+ multimap_text_find_timing_test_large_s2p_tree_msvc.png,
+ multimap_text_find_timing_test_small.html,
+ multimap_text_find_timing_test_small_s2p_hash_gcc.png,
+ multimap_text_find_timing_test_small_s2p_hash_local.png,
+ multimap_text_find_timing_test_small_s2p_hash_msvc.png,
+ multimap_text_find_timing_test_small_s2p_tree_gcc.png,
+ multimap_text_find_timing_test_small_s2p_tree_local.png,
+ multimap_text_find_timing_test_small_s2p_tree_msvc.png,
+ multimap_text_insert_mem_usage_test_large.html,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_local.png,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_local.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png,
+ multimap_text_insert_mem_usage_test_small.html,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_local.png,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_local.png,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png,
+ multimap_text_insert_timing_test_large.html,
+ multimap_text_insert_timing_test_large_s2p_hash_gcc.png,
+ multimap_text_insert_timing_test_large_s2p_hash_local.png,
+ multimap_text_insert_timing_test_large_s2p_hash_msvc.png,
+ multimap_text_insert_timing_test_large_s2p_tree_gcc.png,
+ multimap_text_insert_timing_test_large_s2p_tree_local.png,
+ multimap_text_insert_timing_test_large_s2p_tree_msvc.png,
+ multimap_text_insert_timing_test_small.html,
+ multimap_text_insert_timing_test_small_s2p_hash_gcc.png,
+ multimap_text_insert_timing_test_small_s2p_hash_local.png,
+ multimap_text_insert_timing_test_small_s2p_hash_msvc.png,
+ multimap_text_insert_timing_test_small_s2p_tree_gcc.png,
+ multimap_text_insert_timing_test_small_s2p_tree_local.png,
+ multimap_text_insert_timing_test_small_s2p_tree_msvc.png,
+ node_invariant_invalidations.png, node_invariants.png,
+ null_hash_fn.html, null_lu_metadata.html,
+ null_mapped_type.html, null_probe_fn.html,
+ null_tree_node_update.html, null_trie_node_update.html,
+ ov_tree_tag.html, pairing_heap_tag.html,
+ pairing_priority_queue_text_push_pop_timing_test_gcc.png,
+ pairing_priority_queue_text_push_pop_timing_test_local.png,
+ pairing_priority_queue_text_push_pop_timing_test_msvc.png,
+ pairing_priority_queue_text_push_timing_test_gcc.png,
+ pairing_priority_queue_text_push_timing_test_local.png,
+ pairing_priority_queue_text_push_timing_test_msvc.png,
+ pat_trie.png, pat_trie_tag.html,
+ point_invalidation_guarantee.html, point_iterators_cd.png,
+ point_iterators_range_ops_1.png,
+ point_iterators_range_ops_2.png, pq_container_traits.html,
+ pq_design.html, pq_different_underlying_dss.png,
+ pq_examples.html, pq_performance_tests.html,
+ pq_regression_tests.html, pq_tests.html, prerequisites.html,
+ priority_queue.html,
+ priority_queue_random_int_push_pop_timing_test_gcc.png,
+ priority_queue_random_int_push_pop_timing_test.html,
+ priority_queue_random_int_push_pop_timing_test_local.png,
+ priority_queue_random_int_push_pop_timing_test_msvc.png,
+ priority_queue_random_int_push_timing_test_gcc.png,
+ priority_queue_random_int_push_timing_test.html,
+ priority_queue_random_int_push_timing_test_local.png,
+ priority_queue_random_int_push_timing_test_msvc.png,
+ priority_queue_tag_cd.png, priority_queue_tag_cd.svg,
+ priority_queue_tag.html,
+ priority_queue_text_join_timing_test_gcc.png,
+ priority_queue_text_join_timing_test.html,
+ priority_queue_text_join_timing_test_local.png,
+ priority_queue_text_join_timing_test_msvc.png,
+ priority_queue_text_modify_down_timing_test_gcc.png,
+ priority_queue_text_modify_down_timing_test.html,
+ priority_queue_text_modify_down_timing_test_local.png,
+ priority_queue_text_modify_down_timing_test_msvc.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_local.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png,
+ priority_queue_text_modify_up_timing_test_gcc.png,
+ priority_queue_text_modify_up_timing_test.html,
+ priority_queue_text_modify_up_timing_test_local.png,
+ priority_queue_text_modify_up_timing_test_msvc.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_local.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png,
+ priority_queue_text_pop_mem_usage_test_gcc.png,
+ priority_queue_text_pop_mem_usage_test.html,
+ priority_queue_text_pop_mem_usage_test_local.png,
+ priority_queue_text_pop_mem_usage_test_msvc.png,
+ priority_queue_text_push_pop_timing_test_gcc.png,
+ priority_queue_text_push_pop_timing_test.html,
+ priority_queue_text_push_pop_timing_test_local.png,
+ priority_queue_text_push_pop_timing_test_msvc.png,
+ priority_queue_text_push_timing_test_gcc.png,
+ priority_queue_text_push_timing_test.html,
+ priority_queue_text_push_timing_test_local.png,
+ priority_queue_text_push_timing_test_msvc.png,
+ PythonPoweredSmall.gif quadratic_probe_fn.html,
+ random_int_find_find_timing_test_tree_gcc.png,
+ random_int_find_find_timing_test_tree_local.png,
+ random_int_find_find_timing_test_tree_msvc.png,
+ range_invalidation_guarantee.html,
+ rationale_null_node_updator.png, rb_tree_tag.html,
+ rc_binomial_heap_tag.html, references.html, resize_error.html,
+ resize_policy_cd.png, restoring_node_invariants.png,
+ sample_probe_fn.html, sample_ranged_hash_fn.html,
+ sample_ranged_probe_fn.html, sample_range_hashing.html,
+ sample_resize_policy.html, sample_resize_trigger.html,
+ sample_size_policy.html, sample_tree_node_update.html,
+ sample_trie_access_traits.html, sample_trie_node_update.html,
+ sample_update_policy.html, simple_list.png,
+ splay_tree_tag.html, tests.html,
+ text_find_timing_test_hash_gcc.png,
+ text_find_timing_test_hash_local.png,
+ text_find_timing_test_hash_msvc.png,
+ text_find_timing_test_tree_like_gcc.png,
+ text_find_timing_test_tree_like_local.png,
+ text_find_timing_test_tree_like_msvc.png, thin_heap_tag.html,
+ tree_based_containers.html, tree.html,
+ tree_node_iterator.html, tree_node_updator_policy_cd.png,
+ tree_order_statistics_node_update.html,
+ tree_order_statistics_timing_test_gcc.png,
+ tree_order_statistics_timing_test.html,
+ tree_order_statistics_timing_test_local.png,
+ tree_order_statistics_timing_test_msvc.png,
+ tree_random_int_find_find_timing_test.html,
+ tree_split_join_timing_test_gcc.png,
+ tree_split_join_timing_test.html,
+ tree_split_join_timing_test_local.png,
+ tree_split_join_timing_test_msvc.png, tree_tag.html,
+ tree_text_find_find_timing_test.html,
+ tree_text_insert_timing_test.html,
+ tree_text_insert_timing_test_node_tree_gcc.png,
+ tree_text_insert_timing_test_node_tree_local.png,
+ tree_text_insert_timing_test_node_tree_msvc.png,
+ tree_text_insert_timing_test_pat_trie_gcc.png,
+ tree_text_insert_timing_test_pat_trie_local.png,
+ tree_text_insert_timing_test_pat_trie_msvc.png,
+ tree_text_insert_timing_test_vector_tree_gcc.png,
+ tree_text_insert_timing_test_vector_tree_local.png,
+ tree_text_insert_timing_test_vector_tree_msvc.png,
+ tree_text_lor_find_find_timing_test.html,
+ tree_text_lor_find_timing_test_gcc.png,
+ tree_text_lor_find_timing_test_local.png,
+ tree_text_lor_find_timing_test_msvc.png,
+ trie_based_containers.html, trie_const_node_iterator.html,
+ trie.html, trie_node_iterator.html,
+ trie_node_updator_policy_cd.png,
+ trie_order_statistics_node_update.html,
+ trie_prefix_search_node_update.html,
+ trie_string_access_traits.html, trie_tag.html,
+ trivial_iterator_tag.html, tutorial.html,
+ update_policy_cd.png, update_seq_diagram.png): Remove.
+
+2011-07-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/49813
+ * include/c_global/cmath: Use _GLIBCXX_CONSTEXPR and constexpr.
+
+2011-07-27 Jeffrey Yasskin <jyasskin@google.com>
+
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Updated.
+
+2011-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/array (at): Remove constexpr when -fno-exceptions.
+ * testsuite/23_containers/array/at_neg.cc: Test.
+
+2011-07-25 Paolo Carlini <paolo.carlini@oracle.com>
+ Nathan Ridge <zeratul976@hotmail.com>
+
+ PR libstdc++/49836
+ * include/bits/stl_vector.h (vector<>::_M_emplace_back_aux):
+ Declare.
+ (vector<>::push_back(const value_type&)): Use it.
+ * include/bits/vector.tcc: Define.
+ (vector<>::emplace_back(_Args&&...)): Use it.
+ * testsuite/util/testsuite_tr1.h (CopyConsOnlyType, MoveConsOnlyType):
+ Add.
+ * testsuite/23_containers/vector/modifiers/push_back/49836.cc: New.
+ * testsuite/23_containers/deque/modifiers/push_back/49836.cc:
+ Likewise.
+ * testsuite/23_containers/deque/modifiers/push_front/49836.cc:
+ Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+ Adjust dg-error line number.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2011-07-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable_policy.h (_Prime_rehash_policy::_M_next_bkt,
+ _M_bkt_for_elements, _M_need_rehash): Fix typos in the last commit.
+
+2011-07-24 François Dumont <francois.cppdevs@free.fr>
+
+ * include/bits/hashtable_policy.h (_Prime_rehash_policy): Use
+ __builtin_floor rather than __builtin_ceil to compute next resize
+ value.
+ * testsuite/23_containers/unordered_set/hash_policy/load_factor.cc:
+ New.
+
+2011-07-22 Benjamin Kosnik <bkoz@redhat.com>
+ Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ * include/bits/move.h (move, forward): Mark constexpr.
+ * include/bits/stl_pair.h (pair): Mark move ctors constexpr.
+ * testsuite/20_util/pair/make_pair/constexpr.cc: New.
+ * testsuite/20_util/pair/cons/constexpr.cc: Add tests.
+
+2011-07-22 Ian Lance Taylor <iant@google.com>
+
+ * fragment.am (CONFIG_CXXFLAGS): Add -frandom-seed.
+ * Makefile.in: Rebuild.
+ * doc/Makefile.in: Rebuild.
+ * include/Makefile.in: Rebuild.
+ * libsupc++/Makefile.in: Rebuild.
+ * po/Makefile.in: Rebuild.
+ * python/Makefile.in: Rebuild.
+ * src/Makefile.in: Rebuild.
+ * testsuite/Makefile.in: Rebuild.
+
+2011-07-21 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/tree_set_rand.cc: ... here.
+ * testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc: Move...
+ * testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc: ... here.
+ * testsuite/ext/pb_ds/regression/tree_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/tree_map_rand.cc: ... here.
+ * testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc: Move...
+ * testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc: ... here.
+
+ * testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/trie_set_rand.cc: ... here.
+ * testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc: Move...
+ * testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc: ... here.
+ * testsuite/ext/pb_ds/regression/trie_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/trie_map_rand.cc: ... here.
+ * testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc: Move...
+ * testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc: ... here.
+
+ * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc: Move.
+ * testsuite/ext/pb_ds/regression/list_update_set_rand.cc: ...here.
+ * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc:
+ Move...
+ * testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc: ...here.
+ * testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/list_update_map_rand.cc: ...here.
+ * testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc:
+ Move...
+ * testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc: ...here.
+
+ * testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/hash_set_rand.cc: ...here.
+ * testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc: Move...
+ * testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc: ...here.
+
+ * testsuite/ext/pb_ds/regression/hash_data_map_rand.cc: Move...
+ * testsuite/ext/pb_ds/regression/hash_map_rand.cc: ...here.
+ * testsuite/ext/pb_ds/regression/hash_data_map_rand_debug.cc: Move...
+ * testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc: ...here.
+
+2011-07-21 François Dumont <francois.cppdevs@free.fr>
+
+ * include/debug/safe_unordered_sequence.h,
+ safe_unordered_sequence.tcc: Rename respectively in...
+ * include/debug/safe_unordered_container.h,
+ safe_unordered_container.tcc: ...those. _Safe_unordered_sequence
+ rename _Safe_unordered_container.
+ * include/debug/safe_unordered_base.h: _Safe_unordered_sequence_base
+ rename _Safe_unordered_container_base.
+ * include/debug/unordered_map, unordered_set: Adapt to previous
+ modifications.
+ * config/abi/pre/gnu.ver: Likewise.
+ * src/debug.cc: Likewise.
+ * include/Makefile.am: Likewise.
+ * include/Makefile.in: Regenerate.
+
+2011-07-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/mutex (timed_mutex, recursive_timed_mutex): Update
+ to use steady_clock instead of monotonic_clock.
+ * config/abi/pre/gnu.ver: Export steady_clock::now.
+
+2011-07-20 Benjamin Kosnik <bkoz@redhat.com>
+ Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ * include/std/array (array::at, array::operator[]): Mark constexpr.
+ * testsuite/23_containers/array/requirements/
+ constexpr_element_access.cc: Add.
+
+2011-07-20 Benjamin Kosnik <bkoz@redhat.com>
+ Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ * include/std/chrono: (system_clock::is_steady): Update to N3291
+ from is_monotonic.
+ (time_point): Mark nonmember arithmetic operators constexpr.
+ * src/chrono.cc: Modify for above.
+ * src/compatibility-c++0x.cc: Same.
+ * testsuite/20_util/time_point/nonmember/constexpr.cc: New.
+ * testsuite/20_util/time_point/1.cc: Modify.
+ * testsuite/20_util/system_clock/constexpr_data.cc: Modify.
+ * testsuite/20_util/system_clock/1.cc: Modify.
+ * testsuite/20_util/monotonic_clock/constexpr_data.cc: Move to...
+ * testsuite/20_util/steady_clock/constexpr_data.cc: ...here.
+ * testsuite/30_threads/condition_variable/members/2.cc: Modify.
+ * testsuite/30_threads/condition_variable_any/members/2.cc: Modify.
+
+2011-07-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/system_error: Use noexcept.
+ * src/system_error.cc: Likewise.
+ * testsuite/19_diagnostics/error_condition/modifiers/39881.cc: Adjust.
+ * testsuite/19_diagnostics/error_condition/cons/39881.cc: Likewise.
+ * testsuite/19_diagnostics/error_code/modifiers/39882.cc: Likewise.
+ * testsuite/19_diagnostics/error_code/cons/39882.cc: Likewise.
+ * testsuite/util/testsuite_error.h: Likewise.
+
+ * include/std/system_error (error_code::error_code(_ErrorCodeEnum)):
+ Use enable_if on template parameter default.
+ (error_condition::error_condition(_ErrorConditionEnum)): Likewise.
+
+2011-07-20 Ed Smith-Rowland <3dw4rd@verizon.net>
+
+ * include/precompiled/stdc++.h: Add scoped_allocator.
+
+2011-07-20 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/bitset (operator[]): Make constexpr.
+ * testsuite/23_containers/bitset/operations/constexpr.cc: New.
+
+2011-07-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/debug/safe_local_iterator.h (_Safe_local_iterator<>::
+ _Safe_local_iterator(const _Iterator&, size_type, const _Sequence*)):
+ Fix typo.
+
+2011-07-19 François Dumont <francois.cppdevs@free.fr>
+
+ * include/debug/safe_unordered_base.h, safe_unordered_sequence.h,
+ safe_unordered_sequence.tcc, safe_local_iterator.h,
+ safe_local_iterator.tcc: New, support for unordered sequence safe
+ local iterators.
+ * include/Makefile.am: Add previous files.
+ * include/Makefile.in: Regenerate.
+ * include/debug/unordered_map, unordered_set: Implement
+ _Safe_unordered_sequence and expose _Safe_local_iterator.
+ * include/debug/safe_iterator.h, safe_iterator.tcc: Refactor
+ _Safe_iterator::_M_get_distance static method to expose it as
+ __get_distance function and use it in _Safe_local_iterator type.
+ * include/debug/formatter.h: Add __msg_local_iter_compare_bad
+ _Debug_msg_id enum entry to notify invalid comparison between local
+ iterators from different buckets. Add _Parameter constructor from
+ _Safe_local_iterator.
+ * include/debug/functions.h: Add __valid_range overload for
+ _Safe_local_iterator.
+ * src/debug.cc: Add _Safe_unordered_sequence_base and
+ _Safe_local_iterator_base methods implementations.
+ * config/abi/pre/gnu.ver: Add export of some
+ _Safe_unordered_sequence_base and _Safe_local_iterator_base methods.
+ * testsuite/util/debug/checks.h: Add use_invalid_iterator function to
+ simulate use of a singular iterator.
+ * testsuite/util/debug/unordered_checks.h: New, several functions
+ to simulate classic invalid usage of unordered sequence local
+ iterators.
+ * testsuite/23_containers/unordered_map/debug/
+ use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
+ use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
+ invalid_local_iterator_compare_neg.cc: New.
+ * testsuite/23_containers/unordered_multimap/debug/
+ use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
+ use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
+ invalid_local_iterator_compare_neg.cc: New.
+ * testsuite/23_containers/unordered_set/debug/
+ use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
+ use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
+ invalid_local_iterator_compare_neg.cc: New.
+ * testsuite/23_containers/unordered_multiset/debug/
+ use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
+ use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
+ invalid_local_iterator_compare_neg.cc: New.
+
+2011-07-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48430
+ * include/bits/shared_ptr.h (struct hash<shared_ptr<>>): Use
+ __hash_base.
+ * include/bits/unique_ptr.h (struct hash<unique_ptr<>>): Likewise.
+
+2011-07-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * crossconfig.m4 (*-netware): Remove.
+ * configure: Regenerate.
+
+2011-07-15 Yufeng Zhang <yufeng.zhang@arm.com>
+
+ * config/locale/newlib/ctype_members.cc: New file.
+ * acinclude.m4 (GLIBCXX_ENABLE_CLOCALE): Add a new C locale
+ kind: newlib. Configure to use the newlib specific
+ ctype_members.cc when with_newlib is enabled.
+ * configure: Regenerate.
+
+2011-07-15 Paolo Carlini <paolo.carlini@oracle.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR libstdc++/49745
+ * acinclude.m4 ([GLIBCXX_CHECK_GTHREADS]): Check separately for
+ _POSIX_TIMEOUTS and define _GTHREADS_USE_MUTEX_TIMEDLOCK.
+ * libsupc++/guard.cc: Include <unistd.h>.
+ * testsuite/17_intro/headers/c++1998/49745.cc: New.
+ * configure: Regenerate.
+ * config.h.in: Likewise.
+
+2011-07-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49559
+ * include/bits/stl_algo.h (__move_merge_backward): Remove.
+ (__move_merge_adaptive, __move_merge_adaptive_backward): New.
+ (__merge_adaptive): Use the latter two.
+ (__rotate_adaptive): Avoid self move-assignment.
+ * include/bits/stl_algobase.h (move_backward): Fix comment.
+ * testsuite/25_algorithms/stable_sort/49559.cc: New.
+ * testsuite/25_algorithms/inplace_merge/49559.cc: Likewise.
+ * testsuite/25_algorithms/inplace_merge/moveable.cc: Extend.
+ * testsuite/25_algorithms/inplace_merge/moveable2.cc: Likewise.
+ * testsuite/util/testsuite_rvalref.h (rvalstruct::operator=
+ (rvalstruct&&)): Check for self move-assignment.
+
+2011-07-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/util/testsuite_allocator.h (propagating_allocator<>::
+ operator=(const propagating_allocator<>&)): Retun *this.
+
+2011-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/Makefile.am: Add new header.
+ * include/Makefile.in: Regenerate.
+ * include/std/scoped_allocator: New.
+ * doc/xml/manual/status_cxx200x.xml: Update.
+ * testsuite/20_util/scoped_allocator/1.cc: New.
+ * testsuite/20_util/scoped_allocator/propagation.cc: New.
+ * testsuite/20_util/scoped_allocator/requirements/typedefs.cc: New.
+ * testsuite/20_util/scoped_allocator/requirements/
+ explicit_instantiation.cc: New.
+
+2011-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/stl_vector.h: Use new allocator model in C++0x mode.
+ * include/bits/vector.tcc: Likewise.
+ * testsuite/util/testsuite_allocator.h (propagating_allocator): Define.
+ * testsuite/23_containers/vector/allocator/copy_assign.cc: New.
+ * testsuite/23_containers/vector/allocator/noexcept.cc: New.
+ * testsuite/23_containers/vector/allocator/copy.cc: New.
+ * testsuite/23_containers/vector/allocator/swap.cc: New.
+ * testsuite/23_containers/vector/allocator/move_assign.cc: New.
+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2011-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/ext/alloc_traits.h (__allocator_always_compares_equal): New
+ trait, provide partial specializations for known allocators.
+ (__alloc_traits::construct, __alloc_traits::destroy): Overload for
+ non-standard pointer types.
+ (__alloc_traits::_S_always_equal): New trait for use with noexcept.
+ (__alloc_traits::_S_nothrow_move): Likewise.
+ (__alloc_traits::_S_nothrow_swap): Likewise.
+
+2011-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/ext/cast.h: Fix typo in include guard.
+ * include/ext/pointer.h (_Unqualified_type): Remove redundant
+ partial specializations for volatile types. Fix typos in comments.
+ (pointer_traits<_Pointer_adaptor<Tp>>::pointer_to): Define.
+
+2011-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/49668
+ * include/std/functional (__bind_simple): Define.
+ * include/std/future (_Task_setter): Parameterize by type of result
+ pointer instead of state object.
+ (_S_task_setter): Type deduction helper.
+ (_Task_state): Use _S_task_setter and __bind_simple.
+ (_Deferred_state, _Async_state): Store call wrapper directly not as
+ std::function. Use _S_task_setter and __bind_simple.
+ (_S_make_deferred_state, _S_make_async_state): Type deduction helpers.
+ (async): Use new functions and __bind_simple.
+ * include/std/mutex (call_once): Use __bind_simple.
+ * include/std/thread (thread): Likewise. Remove unused headers.
+ * src/thread.cc: Add header.
+ * testsuite/30_threads/async/49668.cc: New.
+ * testsuite/30_threads/call_once/49668.cc: New.
+ * testsuite/30_threads/thread/cons/49668.cc: New.
+ * testsuite/30_threads/thread/cons/moveable.cc: Remove unused bool.
+
+2011-07-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * configure.host (abi_baseline_subdir_switch): Describe.
+ Provide default.
+ (*-*-solaris2.[89], *-*-solaris2.1[0-9]): Override.
+ * acinclude.m4 (GLIBCXX_CONFIGURE_TESTSUITE): Substitute
+ baseline_subdir_switch.
+ * testsuite/Makefile.am (site.exp): Emit it.
+ (baseline_subdir): Use it.
+ * testsuite/libstdc++-abi/abi.exp: Use it.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * include/Makefile.in: Regenerate.
+ * libsupc++/Makefile.in: Regenerate.
+ * po/Makefile.in: Regenerate.
+ * python/Makefile.in: Regenerate.
+ * src/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+
+2011-06-29 François Dumont <francois.cppdevs@free.fr>
+
+ * include/debug/set.h, unordered_map, multiset.h, forward_list,
+ unordered_set, vector, deque, string, list, multimap.h: Remove
+ base class default constructor calls.
+ * include/debug/map.h: Likewise and cleanup several redefinition of
+ base iterator typedef.
+
+2011-06-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * libsupc++/eh_arm.c (__cxa_type_match): Construct address of
+ thrown object here. Return succeded_with_ptr_to_base for all
+ pointer cases.
+
+2011-06-23 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc: Fix for
+ C++0x mode.
+ * testsuite/25_algorithms/sort/35588.cc: Likewise.
+ * testsuite/26_numerics/headers/complex/synopsis.cc: Likewise.
+
+2011-06-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/bind/socket.cc: Use variable and remove attribute.
+
+2011-06-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp: Avoid -Wall
+ warning.
+
+2011-06-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/reference_wrapper/invoke.cc: Avoid -Wall warnings.
+ * testsuite/20_util/reference_wrapper/typedefs-3.cc: Likewise.
+ * testsuite/20_util/reference_wrapper/invoke-2.cc: Likewise.
+ * testsuite/20_util/allocator_traits/members/allocate_hint.cc:
+ Likewise.
+ * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Likewise.
+ * testsuite/20_util/bind/socket.cc: Likewise.
+ * testsuite/20_util/pointer_traits/pointer_to.cc: Likewise.
+ * testsuite/util/testsuite_random.h: Likewise.
+
+2011-06-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/Makefile.am: Add alloc_traits.h headers.
+ * include/Makefile.in: Regenerate.
+ * include/std/memory: Include uses_allocator.h explicitly.
+ * include/bits/allocator.h (allocator_traits): Move to ...
+ * include/bits/alloc_traits.h: New header.
+ * include/ext/alloc_traits.h (__alloc_traits): Extension to provide
+ a common allocator interface for C++98 and C++0x.
+ * include/bits/stl_construct.h: Use __alloc_traits.
+ * include/bits/stl_uninitialized.h: Likewise.
+
+2011-06-22 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (__is_nothrow_swappable): Add.
+ (swap(_Tp(&)[_Nm], _Tp(&)[_Nm])): Use noexcept.
+ * include/bits/algorithmfwd.h: Adjust.
+ * testsuite/25_algorithms/swap/noexcept.cc: New.
+
+2011-06-21 Jakub Jelinek <jakub@redhat.com>
+
+ * testsuite/Makefile.am (check_DEJAGNU_normal_targets): Add
+ check-DEJAGNUnormal[4-9].
+ (check-DEJAGNU): Split into 10 jobs for parallel testing instead of 4.
+ * testsuite/Makefile.in: Regenerated.
+
+2011-06-20 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (__conv_types, __one_by_one_convertible,
+ __all_convertible): Add.
+ (tuple): Use the latter.
+ (tuple<_T1>): Remove.
+ * testsuite/20_util/uses_allocator/cons_neg.cc: Adjust dg-error
+ line number.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
+
+2011-06-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/ptr_traits.h (pointer_traits<T*>::pointer_to): Use
+ noexcept.
+
+2011-06-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/valarray (~valarray): Use noexcept.
+ * include/bits/unique_ptr.h (~unique_ptr): Likewise.
+ * testsuite/26_numerics/valarray/noexcept_move_construct.cc: New.
+ * testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc:
+ Likewise.
+ * testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc:
+ Likewise.
+ * testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc:
+ Likewise.
+
+2011-06-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/functional: Use noexcept.
+ * include/bits/stl_tempbuf.h: Likewise.
+
+2011-06-12 François Dumont <francois.cppdevs@free.fr>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/allocator.h (__shrink_to_fit): Rename to
+ __shrink_to_fit_aux, fix.
+ * include/bits/stl_vector.h (_M_shrink_to_fit): Declare.
+ (shrink_to_fit): Use the latter.
+ * include/debug/vector (shrink_to_fit): Likewise.
+ * include/bits/vector.tcc (_M_shrink_to_fit): Define.
+ * include/bits/stl_deque.h (_M_shrink_to_fit): Declare.
+ (shrink_to_fit): Use the latter.
+ * include/debug/deque (shrink_to_fit): Likewise.
+ * include/bits/deque.tcc (_M_shrink_to_fit): Define.
+ * include/bits/vector.tcc (vector<bool>::_M_reallocate): Add.
+ * include/bits/stl_bvector.h (_M_shrink_to_fit): Declare.
+ (shrink_to_fit): Use the latter.
+ (reserve): Use _M_reallocate, move inline.
+ (_Bvector_base<>::_S_nword): Add, use it throughout.
+ * include/debug/string (shrink_to_fit): Redo.
+ * include/ext/vstring.h (shrink_to_fit): Optimize.
+ * include/bits/basic_string.h (shrink_to_fit): Likewise.
+ * testsuite/21_strings/debug/shrink_to_fit.cc: New.
+ * testsuite/23_containers/vector/debug/shrink_to_fit.cc: Likewise.
+ * testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc:
+ Likewise.
+ * testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc:
+ Likewise.
+ * testsuite/23_containers/deque/debug/shrink_to_fit.cc: Likewise.
+
+2011-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/ext/extptr_allocator.h (construct, destroy): Fix for C++0x
+ mode by overloading to take allocator's pointer type.
+ * testsuite/23_containers/vector/ext_pointer/types/2.cc: New.
+ * testsuite/23_containers/vector/ext_pointer/explicit_instantiation/
+ 2.cc: New.
+
+2011-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/allocator_traits/requirements/
+ explicit_instantiation.cc: Add another instantiation.
+
+2011-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/allocator_traits/requirements/typedefs.cc: Check
+ for allocator_type and value_type.
+
+2011-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/30_threads/packaged_task/uses_allocator.cc: New.
+ * testsuite/30_threads/promise/uses_allocator.cc: Likewise.
+
+2011-06-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/ext/throw_allocator.h: Use noexcept.
+ * include/ext/pool_allocator.h: Likewise.
+ * include/ext/bitmap_allocator.h: Likewise.
+ * include/ext/new_allocator.h: Likewise.
+ * include/ext/malloc_allocator.h: Likewise.
+ * include/ext/array_allocator.h: Likewise.
+ * include/ext/mt_allocator.h: Likewise.
+ * include/ext/extptr_allocator.h: Likewise.
+ * testsuite/util/testsuite_allocator.h: Likewise; do not include
+ <cassert> directly, include <testsuite_hooks.h> instead.
+
+2011-06-10 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/ext/pb_ds/*: Doxygen markup redo.
+ * include/Makefile.am: Fold in constructors_destructor_fn_imps.hpp.
+ * include/Makefile.in: Regenerate.
+
+2011-06-10 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/bind/ref_neg.cc: Remove wrong test lines.
+
+ * testsuite/20_util/bind/ref_neg.cc: Remove dg-excess-errors,
+ fix dg-error markup.
+
+2011-06-09 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Adjust.
+
+ * testsuite/lib/prune.exp (libstdc++-dg-prune): Prune notes.
+ * testsuite/20_util/duration/cons/1_neg.cc: Remove dg-excess-errors.
+ * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Likewise.
+ * testsuite/20_util/forward/1_neg.cc: Likewise.
+ * testsuite/20_util/function/cmp/cmp_neg.cc: Likewise.
+ * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Likewise.
+ * testsuite/20_util/reference_wrapper/ref_neg.cc: Likewise.
+ * testsuite/20_util/tuple/comparison_operators/35480_neg.cc: Likewise.
+ * testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc:
+ Likewise.
+ * testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc: Likewise.
+ * testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc: Likewise.
+ * testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc:
+ Likewise.
+ * testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc: Likewise.
+ * testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc:
+ Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/assign/
+ auto_ptr_rvalue_neg.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc:
+ Likewise.
+ * testsuite/20_util/uses_allocator/cons_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
+ Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/map/operators/1_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/
+ bitwise_neg.cc: Likewise.
+ * testsuite/decimal/mixed-mode-arith_neg.cc: Likewise.
+ * testsuite/decimal/mixed-mode-cmp_neg.cc: Likewise.
+ * testsuite/decimal/operator_neg.cc: Likewise.
+
+2011-06-09 Simon Baldwin <simonb@google.com>
+
+ * scripts/extract_symvers.in: Handle processor/OS specific or
+ unknown symbol binding strings from readelf.
+
+2011-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (__is_copy_assignable_impl,
+ __is_nt_copy_assignable_impl): Fix typo.
+
+2011-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/ext/extptr_allocator.h: Include <ext/numeric_traits.h>
+ instead of <limits>.
+ * include/bits/allocator.h: Likewise.
+
+ * include/std/chrono (duration_values<>::min): Call lowest, not min.
+
+2011-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/allocator.h (__shrink_to_fit): Simplify.
+ * include/bits/stl_vector.h (vector<>::shrink_to_fit): Adjust.
+ * include/bits/stl_deque.h: Likewise.
+ * include/bits/stl_bvector.h: Likewise.
+
+2011-06-07 Jason Merrill <jason@redhat.com>
+
+ * testsuite/lib/prune.exp: s/required/instantiated/.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Likewise.
+ * testsuite/20_util/forward/1_neg.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Likewise.
+ * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Likewise.
+ * testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc: Likewise.
+ * testsuite/ext/ext_pointer/1_neg.cc: Likewise.
+ * testsuite/ext/pb_ds/example/hash_resize_neg.cc: Likewise.
+ * testsuite/ext/type_traits/add_unsigned_floating_neg.cc: Likewise.
+ * testsuite/ext/type_traits/add_unsigned_integer_neg.cc: Likewise.
+ * testsuite/ext/type_traits/remove_unsigned_floating_neg.cc: Likewise.
+ * testsuite/ext/type_traits/remove_unsigned_integer_neg.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/assign/
+ shared_ptr_neg.cc: Likewise.
+
+2011-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (struct __move_if_noexcept_cond): Add.
+ (move_if_noexcept): Use the latter.
+ * include/bits/stl_iterator.h (__make_move_if_noexcept_iterator,
+ _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR): Add.
+ * include/bits/stl_uninitialized.h
+ (__uninitialized_move_if_noexcept_a): Add.
+ * include/bits/vector.tcc (vector<>::reserve): Use
+ _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR.
+ (vector<>::_M_insert_aux, _M_fill_insert, _M_default_append,
+ _M_range_insert): Use __uninitialized_move_if_noexcept_a.
+ * testsuite/util/testsuite_rvalref.h (throwing_move_constructor):
+ Add.
+ (copycounter::copycounter(copycounter&&)): Use noexcept.
+ * testsuite/23_containers/vector/modifiers/moveable2.cc: New.
+ * testsuite/23_containers/vector/capacity/resize/moveable2.cc:
+ Likewise.
+ * testsuite/23_containers/vector/capacity/reserve/moveable2.cc:
+ Likewise.
+
+2011-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49293
+ * testsuite/22_locale/time_get/get_weekday/char/38081-1.cc: Tweak
+ for glibc 2.14.
+ * testsuite/22_locale/time_get/get_weekday/char/38081-2.cc: Likewise.
+
+2011-06-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (move_if_noexcept): Use __and_ and __not_.
+
+2011-06-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/ptr_traits.h (pointer_traits): Fix typos.
+ * include/ext/pointer.h (pointer_traits): Add partial specialization
+ for _Pointer_adapter.
+
+2011-06-04 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/util/testsuite_allocator.h (tracker_allocator::construct):
+ Update to C++0x definition using type to construct as template
+ parameter.
+ (tracker_allocator::destroy): Likewise for type to destroy.
+ (uneq_allocator::construct, uneq_allocator::destroy): Likewise.
+
+2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::_Hashtable(_Hashtable&&)):
+ Use std::move on the allocator, use noexcept.
+ (_Hashtable<>::~_Hashtable): Use noexcept.
+ * include/bits/stl_list.h: Likewise.
+ * include/bits/forward_list.h: Likewise.
+ * include/bits/stl_vector.h: Likewise.
+ * include/bits/stl_bvector.h: Likewise.
+ * include/bits/stl_map.h (map<>::map(map&&)): Use noexcept.
+ * include/bits/stl_set.h: Likewise.
+ * include/bits/stl_multimap.h: Likewise.
+ * include/bits/stl_multiset.h: Likewise.
+ * include/bits/stl_tree.h (_Rb_tree<>::_Rb_tree(_Rb_tree&&)): Use
+ std::move on the allocator.
+ (_Rb_tree<>::~_Rb_tree): Use noexcept.
+ * include/bits/stl_deque.h: Likewise.
+ * include/bits/basic_string.h (basic_string<>::~basic_string): Use
+ noexcept.
+ * include/ext/vstring.h (__versa_string<>::~__versa_string): Likewise.
+ * include/debug/set.h: Adjust.
+ * include/debug/unordered_map: Likewise.
+ * include/debug/multiset.h: Likewise.
+ * include/debug/forward_list: Likewise.
+ * include/debug/vector: Likewise.
+ * include/debug/unordered_set: Likewise.
+ * include/debug/deque: Likewise.
+ * include/debug/map.h: Likewise.
+ * include/debug/string: Likewise.
+ * include/debug/list: Likewise.
+ * include/debug/multimap.h: Likewise.
+ * include/profile/set.h: Likewise.
+ * include/profile/unordered_map: Likewise.
+ * include/profile/multiset.h: Likewise.
+ * include/profile/forward_list: Likewise.
+ * include/profile/unordered_set: Likewise.
+ * include/profile/vector: Likewise.
+ * include/profile/deque: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/list: Likewise.
+ * include/profile/multimap.h: Likewise.
+ * testsuite/21_strings/basic_string/cons/wchar_t/
+ noexcept_move_construct.cc: New.
+ * testsuite/21_strings/basic_string/cons/char/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/ext/vstring/cons/noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/unordered_map/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/multimap/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/set/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/forward_list/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/unordered_set/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/vector/bool/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/vector/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/multiset/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/list/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/cons/
+ noexcept_move_construct.cc: Likewise.
+ * testsuite/23_containers/map/cons/noexcept_move_construct.cc
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ assign_neg.cc: Adjust dg-error line numbers.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+ * include/bits/move.h (swap): Use __and_ in the noexcept.
+ * include/bits/algorithmfwd.h: Adjust.
+
+2011-05-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/basic_string.h: Use noexcept per the FDIS (minus
+ compare(const string&), which uses char_traits::compare, which
+ isn't noexcept; also no noexcept in the move assignment operator
+ and move assign, see c++std-lib-30855).
+ * include/bits/basic_string.tcc: Likewise.
+ * include/ext/vstring.h: Likewise.
+ * include/ext/vstring.tcc: Likewise.
+ * include/debug/string: Likewise.
+
+2011-05-31 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update.
+ * doc/html/*: Regenerate.
+
+2011-05-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (__or_, __and_): Add trivial definitions
+ for a single element.
+ * include/bits/stl_pair.h: Use __and_ in noexcept specs and
+ constraints.
+ (pair<>::pair(pair&&)): Define.
+ (pair<>::pair(const pair<>&)): Constrain with is_convertible.
+ (pair<>::pair(pair<>&&)): Likewise, remove noexcept.
+ * include/std/tuple: Use __and_ in noexcept specs and constraints.
+ (_Tuple_impl<>::_Tuple_impl(allocator_arg_t, const _Alloc&,
+ _Tuple_impl&&)): Remove noexcept.
+ (tuple<>::tuple(_UElements&&...), tuple(const tuple<_UElements...>&),
+ tuple(tuple<_UElements...>&&), tuple(const pair<_U1, _U2>&),
+ tuple(pair<_U1, _U2>&&)): Constrain with is_convertible.
+ * testsuite/20_util/tuple/moveable2.cc: Use = delete.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
+
+2011-05-31 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/tuple: Restore is_convertible constraint.
+ * testsuite/20_util/tuple/cons/allocate_noncopyable.cc: Remove.
+
+2011-05-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49236
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-warning
+ line number.
+
+2011-05-30 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/tuple: Implement uses-allocator construction.
+ * include/bits/allocator.h (uses_allocator): Move to ...
+ * include/bits/uses_allocator.h: New file.
+ * include/Makefile.am: Add new header.
+ * include/Makefile.in: Regenerate.
+ * testsuite/20_util/uses_allocator/cons_neg.cc: New.
+ * testsuite/20_util/uses_allocator/construction.cc: New.
+ * testsuite/20_util/tuple/cons/allocate_noncopyable.cc: New.
+ * testsuite/20_util/tuple/cons/allocators.cc: New.
+
+2011-05-28 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/pointer_traits/pointer_to.cc: Fix.
+
+2011-05-28 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * acinclude.m4: Define GLIBCXX_CHECK_GET_NPROCS and
+ GLIBCXX_CHECK_SC_NPROCESSORS_ONLN.
+ * configure.ac: Use them. Increase minor version.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+ * include/std/thread (thread::hardware_concurrency): Remove inline
+ definition.
+ * src/thread.cc (thread::hardware_concurrency): Define.
+ * config/abi/pre/gnu.ver: Export new symbol @3.4.17
+ * testsuite/util/testsuite_abi.cc: Add new version.
+ * testsuite/lib/libstdc++.exp (check_v3_target_nprocs): Add.
+ * testsuite/lib/dg-options.exp (dg-require-nprocs): Add.
+ * testsuite/30_threads/thread/members/hardware_concurrency.cc: Use
+ dg-require-nprocs and verify hardware_concurrency returns non-zero.
+
+2011-05-28 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/pointer_traits/pointer_to.cc: New.
+
+2011-05-28 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/Makefile.am: Add new ptr_traits.h header.
+ * include/Makefile.in: Regenerate.
+ * include/bits/ptr_traits.h (pointer_traits): New.
+ * include/bits/allocator.h (allocator_traits): Add.
+ * include/ext/array_allocator.h (construct, destroy): Update C++0x
+ versions.
+ * include/ext/bitmap_allocator.h (construct, destroy): Likewise.
+ * include/ext/extptr_allocator.h (construct, destroy): Likewise.
+ * include/ext/malloc_allocator.h (construct, destroy): Likewise.
+ * include/ext/mt_allocator.h (construct, destroy): Likewise.
+ * include/ext/new_allocator.h (construct, destroy): Likewise.
+ * include/ext/pool_allocator.h (construct, destroy): Likewise.
+ * include/ext/throw_allocator.h (construct, destroy): Likewise.
+ * testsuite/20_util/allocator_traits/requirements/typedefs.cc: New.
+ * testsuite/20_util/allocator_traits/requirements/
+ explicit_instantiation.cc: New.
+ * testsuite/20_util/allocator_traits/members/max_size.cc: New.
+ * testsuite/20_util/allocator_traits/members/select.cc: New.
+ * testsuite/20_util/allocator_traits/members/construct.cc: New.
+ * testsuite/20_util/allocator_traits/members/allocate_hint.cc: New.
+ * testsuite/20_util/allocator_traits/members/destroy.cc: New.
+ * testsuite/20_util/pointer_traits/requirements/typedefs.cc: New.
+ * testsuite/20_util/pointer_traits/requirements/
+ explicit_instantiation.cc: New.
+
+2011-05-28 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (launch): Update enumerators and define
+ operators required for bitmask type. Remove trailing whitespace.
+ * src/future.cc: Remove trailing whitespace.
+ * testsuite/30_threads/async/any.cc: Adjust.
+ * testsuite/30_threads/async/sync.cc: Adjust.
+ * testsuite/30_threads/async/launch.cc: New.
+
+2011-05-28 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future: Use noexcept.
+ * src/future.cc: Likewise.
+
+2011-05-27 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/thread (this_thread::sleep_until): Move after sleep_for.
+
+2011-05-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49187
+ * include/parallel/losertree.h: Add missing using declarations
+ of _Base::_M_comp.
+ * include/parallel/algobase.h: Include <parallel/algorithmfwd.h>.
+ * include/parallel/multiway_merge.h: Include <parallel/
+ multiseq_selection.h>, forward declare __merge_advance.
+ * include/parallel/multiseq_selection.h: Don't include <parallel/
+ sort.h> here.
+ * include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp: Fix
+ qualification of upper_bound.
+
+ * testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc:
+ Use dg-require-debug-mode.
+ * testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc:
+ Likewise.
+ * testsuite/ext/pb_ds/regression/hash_data_map_rand_debug.cc:
+ Likewise.
+
+ * include/parallel/algo.h: Minor uglification fixes.
+
+2011-05-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * src/list.cc: Use noexcept per the FDIS.
+ * src/compatibility-list-2.cc: Likewise.
+ * include/debug/set.h: Likewise.
+ * include/debug/unordered_map: Likewise.
+ * include/debug/multiset.h: Likewise.
+ * include/debug/forward_list: Likewise.
+ * include/debug/unordered_set: Likewise.
+ * include/debug/vector: Likewise.
+ * include/debug/map.h: Likewise.
+ * include/debug/deque: Likewise.
+ * include/debug/list: Likewise.
+ * include/debug/multimap.h: Likewise.
+ * include/profile/set.h: Likewise.
+ * include/profile/unordered_map: Likewise.
+ * include/profile/multiset.h: Likewise.
+ * include/profile/forward_list: Likewise.
+ * include/profile/vector: Likewise.
+ * include/profile/unordered_set: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/deque: Likewise.
+ * include/profile/list: Likewise.
+ * include/profile/multimap.h: Likewise.
+ * include/bits/hashtable.h: Likewise.
+ * include/bits/stl_list.h: Likewise.
+ * include/bits/stl_map.h: Likewise.
+ * include/bits/hashtable_policy.h: Likewise.
+ * include/bits/stl_set.h: Likewise.
+ * include/bits/forward_list.h: Likewise.
+ * include/bits/stl_multimap.h: Likewise.
+ * include/bits/stl_vector.h: Likewise.
+ * include/bits/stl_deque.h: Likewise.
+ * include/bits/stl_multiset.h: Likewise.
+ * include/bits/stl_bvector.h: Likewise.
+ * include/bits/stl_tree.h: Likewise.
+
+2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_queue.h: Use noexcept per the FDIS.
+ * include/bits/stl_stack.h: Likewise.
+
+2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * config/abi/pre/gnu.ver: Correct last change, export instead
+ at the existing @3.4.16.
+ * configure.ac: Revert last change.
+ * testsuite/util/testsuite_abi.cc: Likewise.
+ * configure: Regenerate.
+
+2011-05-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/documentation_hacking.xml: Minor corrections.
+
+2011-05-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/mutex: Add doxygen comments.
+
+2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * config/abi/pre/gnu.ver: Export recently added basic_streambuf
+ and basic_stringbuf symbols @3.4.17.
+ * configure.ac: Update.
+ * testsuite/util/testsuite_abi.cc: Likewise.
+ * configure: Regenerate.
+
+2011-05-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * libsupc++/guard.cc: Fix comments.
+
+2011-05-25 Ian Lance Taylor <iant@google.com>
+
+ PR libstdc++/49060
+ * include/backward/hashtable.h (hashtable::erase): Don't crash if
+ erasing first and another element with a reference to the other
+ element.
+ * testsuite/backward/hash_set/49060.cc: New.
+
+2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/random.h (random_device::min, max): Specify constexpr.
+
+2011-05-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/thread: Use noexcept throughout per the FDIS.
+ * include/std/mutex: Likewise.
+
+2011-05-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/duration/arithmetic/dr2020.cc: Fix typo.
+
+2011-05-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49151
+ * include/std/chrono (operator+, operator-, operator*, operator/,
+ operator&): Implement LWG 2020 [WP]; specify constexpr.
+ * testsuite/20_util/duration/arithmetic/dr2020.cc: New.
+
+2011-05-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49141
+ * testsuite/26_numerics/complex/cons/48760.cc: Use dg-require-c-std.
+ * testsuite/26_numerics/complex/cons/48760_c++0x.cc: Likewise.
+ * testsuite/26_numerics/headers/cmath/19322.cc: Likewise.
+
+2011-05-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/c++config (_GLIBCXX_NOTHROW): Update for noexcept.
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust dg-error
+ line number.
+
+2011-05-23 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/37144
+ PR libstdc++/28457
+ Interface changes for ext/pb_ds.
+ PB_DS_BASE_C_DEC to unique PB_DS_*_BASE macros.
+ * include/ext/pb_ds/assoc_container.hpp (container_base): Remove.
+ (basic_hash_table, basic_branch, list_update): Derive from
+ container_base_dispatch.
+ * include/ext/pb_ds/list_update_policy.hpp (null_lu_metadata): Remove.
+ (move_to_front_lu_policy): To lu_move_to_front_policy.
+ (counter_lu_policy): To lu_counter_policy.
+ * include/ext/pb_ds/tree_policy.hpp (null_tree_node_update): Remove.
+ * include/ext/pb_ds/tag_and_trait.hpp (container_base_dispatch): Adjust
+ template parameters, declare here.
+ (null_mapped_type) Remove.
+ (null_type): Just use this for template tricks everywhere.
+ * include/ext/pb_ds/hash_policy.hpp (null_hash_fn, null_probe_fn):
+ Remove.
+ * include/ext/pb_ds/trie_policy.hpp (null_trie_node_update): Remove.
+ (string_trie_e_access_traits): To trie_string_access_traits.
+ * include/ext/pb_ds/priority_queue.hpp: Use container_base_dispatch.
+
+ File changes.
+ * include/Makefile.am (pb_headers): Removed and changed file names.
+ * include/Makefile.in: Regenerated.
+ * include/ext/pb_ds/detail/basic_types.hpp: Remove.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ cond_dtor_entry_dealtor.hpp: Remove.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ cond_key_dtor_entry_dealtor.hpp: Remove.
+ * include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp: Move..
+ * include/ext/pb_ds/detail/binary_heap_/
+ point_const_iterator.hpp: ..here.
+ * include/ext/pb_ds/detail/basic_tree_policy: Move to...
+ * include/ext/pb_ds/detail/branch_policy: This.
+ * include/ext/pb_ds/detail/branch_policy/
+ basic_tree_policy_base.hpp: Move...
+ * include/ext/pb_ds/detail/branch_policy/branch_policy.hpp: ...here.
+ * include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp: Add.
+ * include/ext/pb_ds/detail/branch_policy/traits.hpp: Add.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ null_metadata.hpp: Remove.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ const_point_iterator.hpp: Move...
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ point_const_iterator.hpp: ...here.
+ * include/ext/pb_ds/detail/list_update_policy/
+ counter_lu_metadata.hpp: Move..
+ * include/ext/pb_ds/detail/list_update_policy/
+ lu_counter_metadata.hpp: ...here.
+ * include/ext/pb_ds/detail/list_update_policy/
+ counter_lu_policy_imp.hpp: Remove.
+ * include/ext/pb_ds/detail/list_update_policy/
+ mtf_lu_policy_imp.hpp: Remove.
+ * include/ext/pb_ds/detail/trie_policy/
+ string_trie_e_access_traits_imp.hpp: Move...
+ * include/ext/pb_ds/detail/trie_policy/
+ sample_trie_access_traits.hpp: ...here.
+ * include/ext/pb_ds/detail/trie_policy/
+ sample_trie_e_access_traits.hpp: Move...
+ * include/ext/pb_ds/detail/trie_policy/
+ trie_string_access_traits_imp.hpp: ...here.
+ * include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp: Remove.
+ * include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp: Remove.
+ * include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp: Remove.
+ * include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp: New, fold all
+ types found in the following files into pat_trie_base.
+ * include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/
+ cond_dtor_entry_dealtor.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/head.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/leaf.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/node_base.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/internal_node.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp: Folded.
+ * include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp: Move...
+ * include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp: ...here.
+ * include/ext/pb_ds/detail/unordered_iterator/
+ const_point_iterator.hpp: Move...
+ * include/ext/pb_ds/detail/unordered_iterator/
+ point_const_iterator.hpp: ...here.
+
+
+ Adjust for above changes.
+ * include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp: Same.
+ * include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp: Same.
+ * include/ext/pb_ds/detail/resize_policy/
+ sample_resize_trigger.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ binomial_heap_base_.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/container_base_dispatch.hpp: Same. Adjust
+ for template parameter ordering change.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ erase_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ constructor_destructor_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ insert_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ resize_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ constructor_destructor_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ insert_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ entry_list_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ find_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ debug_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ constructor_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ cond_key_dtor_entry_dealtor.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ debug_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ erase_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ resize_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ standard_policies.hpp: Same.
+ * include/ext/pb_ds/detail/tree_trace_base.hpp: Same.
+ * include/ext/pb_ds/detail/unordered_iterator/iterator.hpp: Same.
+ * include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp: Same.
+ * include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/traits.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/traits.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_policy/
+ sample_update_policy.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ erase_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ constructor_destructor_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ insert_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ resize_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ constructor_destructor_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ insert_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ iterator_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ find_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ find_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ debug_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ constructor_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ debug_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ erase_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ resize_no_store_hash_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ standard_policies.hpp: Same.
+ * include/ext/pb_ds/detail/standard_policies.hpp: Same.
+ * include/ext/pb_ds/detail/types_traits.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp: Same.
+ * include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp: Same.
+ * include/ext/pb_ds/detail/tree_policy/
+ sample_tree_node_update.hpp: Same.
+ * include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp: Same.
+ * include/ext/pb_ds/detail/trie_policy/
+ sample_trie_node_update.hpp: Same.
+ * include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp: Same.
+ * include/ext/pb_ds/detail/trie_policy/
+ prefix_search_node_update_imp.hpp: Same.
+ * include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp: Same.
+ * include/ext/pb_ds/detail/cond_dealtor.hpp: Same.
+ * include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp: Same.
+ Adjust for template parameter change, fold into
+ container_base_dispatch.
+ * include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pairing_heap_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp: Same.
+ * include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp: Same.
+ * include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/type_utils.hpp: Same.
+ * include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp: Same.
+ * include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ left_child_next_sibling_heap_.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ const_iterator.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ node.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/traits.hpp: Same.
+ * include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/debug_map_base.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp: Same.
+ * include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/node.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp: Same.
+ * include/ext/pb_ds/detail/splay_tree_/traits.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/
+ entry_metadata_base.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/
+ constructor_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/
+ rc_binomial_heap_.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp: Same.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/
+ split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/node.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/rb_tree_map_/traits.hpp: Same.
+
+
+ Documentation changes.
+ * include/ext/pb_ds/*: Add doxygen markup.
+ * doc/doxygen/user.cfg.in: Add details for extracting comments
+ from pb_ds.
+ * scripts/run_doxygen: Fixup __gnu_pb_ds::detail.
+ * scripts/make_graph.py: Move to svg output. Re-format generated tables.
+
+ * doc/Makefile.am (stamp-html-copy): New rule.
+ (stamp-html): Use it to copy non-generated files into html docs.
+ * doc/Makefile.in: Regenerated.
+
+ * doc/html/ext/pb_ds/sample_trie_e_access_traits.html: Move...
+ * doc/html/ext/pb_ds/trie_string_access_traits.html: ...here.
+ * doc/html/ext/pb_ds/string_trie_e_access_traits.html: Move..
+ * doc/html/ext/pb_ds/sample_trie_access_traits.html: ...here.
+
+ * doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png,
+ hash_random_int_erase_mem_usage_test_local.png,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_local.png,
+ tree_text_insert_timing_test_pat_trie_local.png ,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_local.png ,
+ priority_queue_text_modify_down_timing_test_local.png,
+ gp_hash_random_int_subscript_timing_test_find_local.png,
+ text_find_timing_test_hash_local.png,
+ multimap_text_insert_timing_test_small_s2p_hash_local.png,
+ multimap_text_insert_timing_test_small_s2p_tree_local.png,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_local.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_local.png,
+ multimap_text_insert_timing_test_large_s2p_hash_local.png,
+ hash_zlob_random_int_find_timing_test_local.png,
+ multimap_text_insert_timing_test_large_s2p_tree_local.png,
+ binary_priority_queue_random_int_push_timing_test_local.png,
+ priority_queue_text_pop_mem_usage_test_local.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_local.png,
+ tree_split_join_timing_test_local.png,
+ multimap_text_find_timing_test_small_s2p_hash_local.png,
+ ccgp_hash_random_int_subscript_timing_test_insert_local.png,
+ priority_queue_random_int_push_pop_timing_test_local.png,
+ multimap_text_find_timing_test_small_s2p_tree_local.png,
+ gp_hash_random_int_subscript_timing_test_insert_local.png,
+ priority_queue_text_push_timing_test_local.png,
+ cc_hash_random_int_subscript_timing_test_find_local.png,
+ tree_text_insert_timing_test_vector_tree_local.png,
+ multimap_text_find_timing_test_large_s2p_hash_local.png,
+ pairing_priority_queue_text_push_timing_test_local.png,
+ tree_order_statistics_timing_test_local.png,
+ priority_queue_text_push_pop_timing_test_local.png,
+ text_find_timing_test_tree_like_local.png,
+ multimap_text_find_timing_test_large_s2p_tree_local.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_local.png,
+ cc_hash_random_int_subscript_timing_test_insert_local.png,
+ priority_queue_text_modify_up_timing_test_local.png,
+ random_int_find_find_timing_test_tree_local.png,
+ priority_queue_random_int_push_timing_test_local.png,
+ tree_text_insert_timing_test_node_tree_local.png,
+ pairing_priority_queue_text_push_pop_timing_test_local.png,
+ gp_hash_random_int_find_timing_test_local.png,
+ cc_hash_random_int_find_timing_test_local.png,
+ priority_queue_text_join_timing_test_local.png: Update local pngs.
+
+
+ Testsuite changes.
+ * testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc: New.
+ * testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc: New.
+ * testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc: New.
+ * testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc: New.
+ * testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc: New.
+ * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc:
+ New.
+ * testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc:
+ New.
+ * testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc: New.
+ * testsuite/ext/pb_ds/regression/hash_data_map_rand_debug.cc: New.
+
+ * testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc: Fix typo.
+
+ * testsuite/ext/pb_ds/example/basic_set.cc: Update.
+ * testsuite/ext/pb_ds/example/ranged_hash.cc: Same.
+ * testsuite/ext/pb_ds/example/tree_order_statistics.cc: Same.
+ * testsuite/ext/pb_ds/example/trie_prefix_search.cc: Same.
+ * testsuite/ext/pb_ds/example/trie_dna.cc: Same.
+ * testsuite/ext/pb_ds/example/tree_intervals.cc: Same.
+ * testsuite/ext/pb_ds/example/basic_multimap.cc: Same.
+ * testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc:
+ Same.
+ * testsuite/performance/ext/pb_ds/tree_split_join_timing.cc: Same.
+ * testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc: Same.
+ * testsuite/data/make_graph_test_infos.xml: Same.
+ * testsuite/util/regression/common_type.hpp: Same.
+ * testsuite/util/regression/trait/assoc/native_type_trait.hpp: Same.
+ * testsuite/util/regression/trait/assoc/trait.hpp: Same.
+ * testsuite/util/regression/trait/assoc/type_trait.hpp: Same.
+ * testsuite/util/regression/rand/priority_queue/
+ rand_regression_test.hpp: Same.
+ * testsuite/util/regression/rand/priority_queue/
+ container_rand_regression_test.tcc: Same.
+ * testsuite/util/regression/rand/assoc/rand_regression_test.hpp: Same.
+ * testsuite/util/regression/rand/assoc/container_rand_regression_test.h
+ * testsuite/util/regression/rand/assoc/
+ container_rand_regression_test.tcc: Same.
+ * testsuite/util/native_type/native_priority_queue.hpp: Same.
+ * testsuite/util/native_type/native_multimap.hpp: Same.
+ * testsuite/util/native_type/native_hash_multimap.hpp: Same.
+ * testsuite/util/native_type/native_set.hpp: Same.
+ * testsuite/util/native_type/native_map.hpp: Same.
+ * testsuite/util/native_type/native_hash_set.hpp: Same.
+ * testsuite/util/native_type/native_hash_map.hpp: Same.
+ * testsuite/util/testsuite_containers.h
+ * testsuite/util/common_type/priority_queue/common_type.hpp: Same.
+ * testsuite/util/common_type/assoc/common_type.hpp: Same.
+ * testsuite/util/common_type/assoc/string_form.hpp: Same.
+ * testsuite/util/common_type/assoc/template_policy.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ trigger_policy_string_form.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/ds_string_form.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ size_policy_string_form.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ probe_fn_string_form.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ tree_supports_order_statistics.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ trie_supports_prefix_search.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ list_update_policy_string_form.hpp: Same.
+ * testsuite/util/common_type/assoc/detail/
+ trie_supports_order_statistics.hpp: Same.
+ * testsuite/util/common_type/assoc/native_set.hpp: Same.
+ * testsuite/util/performance/assoc/timing/common_type.hpp: Same.
+ * testsuite/util/performance/assoc/timing/multimap_find_test.hpp: Same.
+ * testsuite/util/performance/assoc/multimap_common_type.hpp: Same.
+
+2011-05-23 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/streambuf_iterator.h: Use noexcept per the FDIS.
+ (istreambuf_iterator<>::istreambuf_iterator(const
+ istreambuf_iterator&), ~istreambuf_iterator()): Add defaulted
+ in C++0x mode.
+
+2011-05-23 Jason Merrill <jason@redhat.com>
+
+ * libsupc++/exception_ptr.h: Fix compilation in C++0x mode.
+
+2011-05-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/bind/cv_quals_2.cc: New.
+
+2011-05-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/49058
+ * include/std/functional (_Bind<_Functor(_Bound_args...)>::
+ operator()(_Args&&...)): Don't cv qualify _Functor directly
+ in the default template argument, SFINAE doesn't apply when
+ the functor has no arguments.
+ * testsuite/20_util/bind/49058_1.cc: New.
+ * testsuite/20_util/bind/49058_2.cc: Likewise.
+
+2011-05-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/unique_ptr.h: Use noexcept per the FDIS.
+
+2011-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/21_strings/basic_string/requirements/exception/
+ propagation_consistent.cc: Fix vs POD-ness of value_type.
+ * testsuite/21_strings/basic_string/requirements/exception/
+ basic.cc: Likewise.
+ * testsuite/ext/vstring/requirements/exception/
+ propagation_consistent.cc: Likewise.
+ * testsuite/ext/vstring/requirements/exception/basic.cc: Likewise.
+
+2011-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/char_traits.h: Use noexcept throughout.
+ * include/std/typeindex: Likewise.
+
+ * include/std/tuple (_Tuple_impl<>_Tuple_impl(_Tuple_impl&&)): Use
+ noexcept; adjust callers.
+ * include/bits/stl_pair.h (pair<>::pair(pair<>&&)): Use noexcept.
+ * testsuite/20_util/tuple/cons/noexcept_move_construct.cc: New.
+ * testsuite/20_util/pair/cons/noexcept_move_construct.cc: Likewise.
+ * testsuite/20_util/pair/noexcept_swap.cc: Likewise.
+ * testsuite/20_util/pair/noexcept_move_assign.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-warning
+ line numbers.
+
+2011-05-20 Jason Merrill <jason@redhat.com>
+
+ * include/ext/pb_ds/assoc_container.hpp: Explicitly qualify calls to
+ functions from dependent bases.
+ * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/tree_policy/
+ order_statistics_imp.hpp: Likewise.
+ * include/ext/pb_ds/detail/trie_policy/
+ prefix_search_node_update_imp.hpp: Likewise.
+ * include/ext/rc_string_base.h: Likewise.
+ * include/ext/rope: Likewise.
+ * include/ext/ropeimpl.h: Likewise.
+ * testsuite/util/exception/safety.h: Likewise.
+ * testsuite/util/native_type/native_priority_queue.hpp: Likewise.
+ * testsuite/util/testsuite_io.h: Likewise.
+ * include/std/functional: Declare mem_fn earlier.
+ * include/tr1/functional: Likewise.
+ * include/tr1/exp_integral.tcc: Declare __expint_E1 earlier.
+
+2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (tuple_element<__i, const _Tp>,
+ tuple_element<__i, volatile _Tp>, tuple_element<__i,
+ const volatile _Tp>, tuple_size<const _Tp>, tuple_size<volatile _Tp>,
+ tuple_size<const volatile _Tp>): Add.
+ * include/std/utility (tuple_size<std::pair<_Tp1, _Tp2>>): Tweak.
+ * include/std/array (tuple_size<array<_Tp, _Nm>>): Likewise.
+ * testsuite/20_util/tuple/cv_tuple_size.cc: New.
+ * testsuite/20_util/tuple/cv_tuple_element.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Tweak dg-warning
+ line number.
+
+2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (tuple<>::operator=(tuple&&)): Specify as
+ noexcept.
+ (__get_helper): Likewise.
+ (_Head_base<>::_M_head, _Tuple_impl<>::_M_head, _M_tail): Likewise.
+ * include/bits/move.h (swap): Likewise.
+ * include/bits/algorithmfwd.h (swap): Adjust.
+ * include/bits/stl_pair.h (pair<>::operator=(pair&&)): Spec noexcept.
+ * testsuite/util/testsuite_allocator.h (uneq_allocator): In C++0x
+ mode, prefer delete to access control to make the type not copy
+ assignable.
+ * testsuite/util/testsuite_tr1.h: Add test classes.
+ * testsuite/20_util/tuple/noexcept_swap.cc: New.
+ * testsuite/20_util/tuple/noexcept_move_assign.cc: Likewise.
+ * testsuite/25_algorithms/reverse/moveable.cc: Likewise, prefer
+ delete to access control.
+ * testsuite/25_algorithms/swap_ranges/moveable.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-warning
+ line numbers.
+
+2011-05-19 Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ * testsuite/util/testsuite_tr1.h: Add test classes.
+ * testsuite/20_util/is_nothrow_assignable/value.cc: Add.
+
+2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (is_assignable, is_copy_assignable,
+ is_move_assignable, is_nothrow_assignable, is_nothrow_copy_assignable,
+ is_nothrow_move_assignable): Add; minor tweaks elsewhere.
+ (has_nothrow_copy_assign): Remove.
+ * testsuite/util/testsuite_tr1.h: Add test classes.
+ * testsuite/20_util/is_assignable/requirements/typedefs.cc: Add.
+ * testsuite/20_util/is_assignable/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_nothrow_assignable/value.cc: Likewise.
+ * testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_nothrow_assignable/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_move_assignable/value.cc: Likewise.
+ * testsuite/20_util/is_move_assignable/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_move_assignable/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_copy_assignable/value.cc: Likewise.
+ * testsuite/20_util/is_copy_assignable/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_copy_assignable/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_nothrow_move_assignable/value.cc: Likewise.
+ * testsuite/20_util/is_nothrow_move_assignable/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_nothrow_move_assignable/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_nothrow_copy_assignable/value.cc: Likewise.
+ * testsuite/20_util/is_nothrow_copy_assignable/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_nothrow_copy_assignable/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
+ dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
+2011-05-18 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/shared_ptr_base.h: Use noexcept. Define special member
+ functions as defaulted/deleted.
+ * include/bits/shared_ptr.h: Use noexcept.
+ * 20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error line numbers.
+ * 20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
+
+2011-05-18 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/bitmap_allocator.xml: Fix typos.
+
+2011-05-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * libsupc++/initializer_list: Use noexcept specifier.
+ (initializer_list<>::size, begin, end): Qualify as const.
+ * include/bits/move.h (__addressof, forward, move, addressof): Specify
+ as noexcept.
+ * include/std/bitset: Use noexcept specifier throughout.
+ * include/debug/bitset: Update.
+ * include/profile/bitset: Likewise.
+
+2011-05-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple: Use noexcept where appropriate.
+ (tuple<>::swap): Rework implementation.
+ (_Head_base<>::_M_swap_impl): Remove.
+ (get(std::tuple<>&&)): Add.
+ * testsuite/20_util/tuple/element_access/get2.cc: New.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-error
+ line number.
+
+2011-05-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/utility: Simplify the last commit, the whole
+ std::get code is C++0x only.
+
+2011-05-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/utility (get(std::pair<>&&)): Add.
+ * include/bits/stl_pair.h (pair::swap(pair&),
+ swap(pair<>&, pair<>&)): Use noexcept.
+ * include/bits/random.h (discard_block_engine<>::base,
+ independent_bits_engine<>::base, shuffle_order_engine<>::base,
+ random_device::entropy): Use noexcept.
+ * include/std/array: Use noexcept where appropriate.
+ (get(array<>&&)): Add.
+ * testsuite/23_containers/array/requirements/get.cc: New.
+ * testsuite/20_util/pair/get.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Tweak dg-error
+ line number.
+
+2011-05-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/c++config (_GLIBCXX_NOEXCEPT, _GLIBCXX_USE_NOEXCEPT):
+ Add.
+ * include/std/limits: Use the latter everywhere.
+ (numeric_limits<char16_t>, numeric_limits<char32_t>): Simplify
+ macro usages, the specializations exist only in C++0x mode.
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust dg-error
+ line number.
+
+2011-05-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc: Use
+ dg-require-cmath.
+ * testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc: Likewise.
+
+2011-05-11 François Dumont <francois.cppdevs@free.fr>
+
+ * include/ext/pb_ds/detail/resize_policy/
+ hash_load_check_resize_trigger_imp.hpp (assert_valid): Replace
+ _GLIBCXX_DEBUG_ASSERT calls with PB_DS_DEBUG_VERIFY.
+ * include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp,
+ find_fn_imps.hpp, insert_fn_imps.hpp, binomial_heap_base_.hpp,
+ constructors_destructor_fn_imps.hpp, split_join_fn_imps.hpp
+ (PB_DS_ASSERT_VALID): Rename in PB_DS_ASSERT_VALID_COND.
+ * include/ext/pb_ds/detail/debug_map_base.hpp,
+ splay_tree_/splay_tree_.hpp, ov_tree_map_/ov_tree_map_.hpp,
+ cc_hash_table_map_/cc_ht_map_.hpp, pat_trie_/pat_trie_.hpp,
+ leaf.hpp, internal_node.hpp, gp_hash_table_map_/gp_ht_map_.hpp,
+ bin_search_tree_/bin_search_tree_.hpp, list_update_map_/lu_map_.hpp,
+ rb_tree_map_/rb_tree_.hpp (PB_DS_ASSERT_VALID, PB_DS_DEBUG_VERIFY,
+ PB_DS_CHECK_KEY_EXISTS, PB_DS_CHECK_KEY_DOES_NOT_EXIST): Duplicate
+ macro definitions move...
+ * include/ext/pb_ds/detail/container_base_dispatch.hpp: ... here...
+ * include/ext/pb_ds/detail/basic_tree_policy/traits.hpp: ... and here.
+ * include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp,
+ resize_policy.hpp, pairing_heap_/pairing_heap_.hpp,
+ left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp,
+ binomial_heap_/binomial_heap_.hpp, thin_heap_/thin_heap_.hpp,
+ rc_binomial_heap_/rc_binomial_heap_.hpp, rc.hpp (PB_DS_ASSERT_VALID,
+ PB_DS_DEBUG_VERIFY): Duplicate macro definitions move...
+ * include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp:
+ ...here.
+
+2011-05-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48933
+ * include/c_global/cmath (acosh, asinh, atanh, cbrt, copysign,
+ erf, erfc, exp2, expm1, fdim, fma, fmax, hypot, ilogb, lgamma,
+ llrint, llround, log1p, log2, logb, lrint, lround, nearbyint,
+ nextafter, nexttoward, remainder, remquo, rint, round, scalbln,
+ scalbn, tgamma, trunc): Use __enable_if on the return type.
+ * include/tr1/cmath: Likewise.
+ * testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc: New.
+ * testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc: Likewise.
+
+2011-05-07 François Dumont <francois.cppdevs@free.fr>
+
+ * include/debug/macro.h (_GLIBCXX_DEBUG_VERIFY_AT): New.
+ (_GLICXX_DEBUG_VERIFY): Use latter.
+ * include/ext/pb_ds/detail/resize_policy/
+ hash_load_check_resize_trigger_imp.hpp: Emit assertion on the line
+ containing the original assert call.
+ * include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp,
+ find_fn_imps.hpp, insert_fn_imps.hpp, binomial_heap_base_.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ erase_store_hash_fn_imps.hpp, insert_no_store_hash_fn_imps.hpp,
+ find_fn_imps.hpp, insert_store_hash_fn_imps.hpp, debug_fn_imps.hpp,
+ debug_no_store_hash_fn_imps.hpp, cc_ht_map_.hpp, resize_fn_imps.hpp,
+ constructor_destructor_fn_imps.hpp, debug_store_hash_fn_imps.hpp,
+ erase_no_store_hash_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp,
+ insert_join_fn_imps.hpp, pat_trie_/head.hpp, debug_fn_imps.hpp,
+ constructors_destructor_fn_imps.hpp, pat_trie_.hpp, split_fn_imps.hpp,
+ leaf.hpp, erase_fn_imps.hpp, node_base.hpp, internal_node.hpp:
+ Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp,
+ r_erase_fn_imps.hpp, constructors_destructor_fn_imps.hpp,
+ debug_fn_imps.hpp, rotate_fn_imps.hpp, erase_fn_imps.hpp,
+ bin_search_tree_.hpp, insert_fn_imps.hpp, split_join_fn_imps.hpp:
+ Likewise.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ erase_store_hash_fn_imps.hpp, insert_no_store_hash_fn_imps.hpp,
+ find_fn_imps.hpp, gp_ht_map_.hpp, insert_store_hash_fn_imps.hpp,
+ debug_fn_imps.hpp, erase_fn_imps.hpp, debug_no_store_hash_fn_imps.hpp,
+ resize_fn_imps.hpp, constructor_destructor_fn_imps.hpp,
+ debug_store_hash_fn_imps.hpp, erase_no_store_hash_fn_imps.hpp:
+ Likewise.
+ * include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
+ erase_fn_imps.hpp, insert_fn_imps.hpp, binary_heap_.hpp,
+ resize_policy.hpp, split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp,
+ find_fn_imps.hpp, insert_fn_imps.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
+ pairing_heap_.hpp, split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_/
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
+ binomial_heap_.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ erase_fn_imps.hpp, left_child_next_sibling_heap_.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp,
+ find_fn_imps.hpp, thin_heap_.hpp, insert_fn_imps.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp,
+ ov_tree_map_.hpp, constructors_destructor_fn_imps.hpp,
+ debug_fn_imps.hpp, split_join_fn_imps.hpp, info_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/debug_map_base.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp,
+ find_fn_imps.hpp, insert_fn_imps.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
+ splay_fn_imps.hpp, split_join_fn_imps.hpp, splay_tree_.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp,
+ find_fn_imps.hpp, lu_map_.hpp, constructor_destructor_fn_imps.hpp,
+ insert_fn_imps.hpp, debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp,
+ rc_binomial_heap_.hpp, insert_fn_imps.hpp,
+ constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp, rc.hpp,
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp,
+ insert_fn_imps.hpp, constructors_destructor_fn_imps.hpp,
+ debug_fn_imps.hpp, rb_tree_.hpp, split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/hash_policy.hpp: Likewise.
+
+2011-05-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/22_locale/messages_byname/named_equivalence.cc: Fix.
+
+2011-05-04 Marc Glisse <marc.glisse@normalesup.org>
+
+ PR libstdc++/47913 (again)
+ * include/std/ratio (ratio_add, ratio_less): Rewrite.
+ * testsuite/20_util/ratio/operations/47913.cc: Extend.
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Adjust dg-error
+ line numbers.
+ * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Likewise.
+
+2011-05-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48848
+ * include/std/valarray (valarray<>::valarray(valarray&&),
+ valarray<>::operator=(valarray&&), valarray<>::swap): Add.
+ * doc/xml/manual/status_cxx200x.xml: Update.
+ * testsuite/26_numerics/valarray/moveable.cc: New.
+ * testsuite/26_numerics/valarray/swap.cc: Likewise.
+
+2011-05-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48750
+ * include/parallel/multiway_merge.h: Run _ValueType destructors.
+ * include/parallel/multiway_mergesort.h: Likewise.
+ * include/parallel/quicksort.h: Likewise.
+ * include/parallel/random_shuffle.h: Likewise.
+ * include/parallel/partial_sum.h: Likewise.
+ * include/parallel/losertree.h: Run destructors; minor tweaks.
+ * include/parallel/par_loop.h: Run destructors, fix memory
+ allocations and deallocations.
+ * testsuite/26_numerics/accumulate/48750.cc: New.
+
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Do not run in
+ parallel-mode to avoid spurious multiple errors.
+
+2011-05-03 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/functional (bind): Remove from overload set when first
+ argument type might be a socket file descriptor.
+ * testsuite/20_util/bind/socket.cc: New.
+
+2011-05-03 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48848
+ * doc/xml/manual/status_cxx200x.xml: Update valarray status.
+ * doc/html/*: Regenerate.
+
+2011-05-02 Ollie Wild <aaw@google.com>
+
+ * include/ext/sso_string_base.h (__sso_string_base<>::_M_construct):
+ Fix unqualified lookup.
+ (__sso_string_base<>::_M_assign): Likewise.
+ (__sso_string_base<>::_M_reserve): Likewise.
+ (__sso_string_base<>::_M_mutate): Likewise.
+ (__sso_string_base<>::_M_erase): Likewise.
+ * include/ext/vstring.h (__versa_string<>::replace): Likewise.
+ (__versa_string<>::compare): Likewise.
+ * include/ext/vstring.tcc (__versa_string<>::compare): Likewise.
+
+2011-05-02 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update to reflect current status
+ and FDIS content.
+ * doc/xml/manual/documentation_hacking.xml: Fix typo.
+ * doc/html/*: Regenerate.
+
+2011-04-30 Daniel Krugler <daniel.kruegler@googlemail.com>
+
+ * include/std/type_traits (__is_default_constructible_atom,
+ __is_default_constructible_safe<, true>,
+ __is_direct_constructible_new_safe,
+ __is_base_to_derived_ref<,, true>, __is_lvalue_to_rvalue_ref<,, true>,
+ __is_direct_constructible_ref_cast, __is_direct_constructible,
+ __is_nary_constructible): Simplify; add comments throughout.
+
+2011-04-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
+2011-04-30 Doug Kwan <dougkwan@google.com>
+
+ * include/Makefile.am (install-freestanding-headers): Also install
+ cxxabi_tweaks.h.
+ * include/Makefile.in: Regenerate.
+
+2011-04-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48760
+ * include/std/complex (complex<float>::complex(float, float),
+ complex<double>::complex(double, double),
+ complex<long double>::complex(long double, long double)): Use
+ list-initialization in C++0x mode, initialize in the body in
+ C++03 mode.
+ * testsuite/26_numerics/complex/cons/48760.cc: New.
+ * testsuite/26_numerics/complex/cons/48760_c++0x.cc: Likewise.
+
+2011-04-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/bitset (_Base_bitset(unsigned long long)): Minor
+ tweak, remove redundant round braces.
+
+2011-04-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (move_if_noexcept): Add.
+ * testsuite/20_util/move_if_noexcept/requirements/
+ explicit_instantiation.cc: New.
+ * testsuite/20_util/move_if_noexcept/1.cc: Likewise.
+
+2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (struct underlying_type): Add.
+ * testsuite/20_util/underlying_type/requirements/typedefs-1.cc: New.
+ * testsuite/20_util/underlying_type/requirements/typedefs-2.cc:
+ Likewise.
+ * testsuite/20_util/underlying_type/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
+ line number.
+
+2011-04-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/parallel/multiway_merge.h: Uglify equally_split
+ and equally_split_point throughout.
+ * include/parallel/par_loop.h: Likewise.
+ * include/parallel/equally_split.h: Likewise.
+ * include/parallel/set_operations.h: Likewise.
+ * include/parallel/unique_copy.h: Likewise.
+ * include/parallel/multiway_mergesort.h: Likewise.
+ * include/parallel/search.h: Likewise.
+ * include/parallel/partial_sum.h: Likewise.
+ * include/parallel/find.h: Likewise.
+
+2011-04-24 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/manual/parallel_mode.xml: Fix link to libgomp online
+ documentation. Expand link text.
+
+2011-04-24 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * libsupc++/cxxabi.h: Adjust link to FAQ entry.
+
+2011-04-22 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/lib/libstdc++.exp (check_v3_target_time): Discard
+ unused compilation result thanks to /dev/null.
+ * testsuite/lib/libstdc++.exp (check_v3_target_debug_mode,
+ check_v3_target_profile_mode, check_v3_target_normal_mode,
+ check_v3_target_cstdint, check_v3_target_cmath,
+ check_v3_target_atomic_builtins, check_v3_target_gthreads,
+ check_v3_target_nanosleep, check_v3_target_sched_yield,
+ check_v3_target_string_conversions, check_v3_target_swprintf,
+ check_v3_target_binary_io): Use simple preprocessing rather than
+ compilation. Discard unused preprocessing result thanks to /dev/null.
+
+2011-04-20 Jim Meyering <meyering@redhat.com>
+
+ * libsupc++/del_opnt.cc (operator delete): Remove useless
+ if-before-free.
+
+2011-04-19 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48521
+ * include/std/type_traits (result_of): Handle pointer to member.
+ * include/std/functional (__invoke): Likewise.
+ (_Function_to_function_pointer): Remove.
+ (_Reference_wrapper_base): Provide nested types independent of
+ unary_function and binary_function.
+ (reference_wrapper::operator()): DR 2017.
+ (ref(const A&&), cref(const A&&): Define as deleted.
+ * include/std/future (async): Simplify SFINAE and use result_of to
+ support pointer to member.
+ * testsuite/20_util/reference_wrapper/invoke.cc: Test pointer to
+ member.
+ * testsuite/20_util/reference_wrapper/24803.cc: Likewise.
+ * testsuite/20_util/reference_wrapper/typedefs.cc: Test for types
+ instead of derivation from unary_function and binary_function.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust.
+ * testsuite/20_util/reference_wrapper/invoke-2.cc: New.
+ * testsuite/20_util/reference_wrapper/ref_neg.c: New.
+ * testsuite/20_util/reference_wrapper/typedefs-3.c: New.
+
+2011-04-19 Hans-Peter Nilsson <hp@axis.com>
+
+ PR testsuite/48675
+ * testsuite/20_util/hash/chi2_quality.cc (test_document_words): Stub
+ this part if SAMPLES < 100000.
+
+2011-04-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (is_nothrow_default_constructible,
+ is_nothrow_copy_constructible, is_nothrow_move_constructible,
+ is_copy_constructible, is_move_constructible): Add.
+ (has_nothrow_default_constructor, has_nothrow_copy_constructor):
+ Remove.
+ (is_nothrow_constructible): Adjust.
+
+ * testsuite/util/testsuite_tr1.h (ThrowDefaultClass,
+ ThrowCopyConsClass, ThrowMoveConsClass, NoexceptDefaultClass,
+ ExceptDefaultClass, NoexceptCopyConsClass, ExceptCopyConsClass,
+ NoexceptMoveConsClass, ExceptMoveConsClass): Add in C++0x mode.
+
+ * testsuite/20_util/has_nothrow_default_constructor: Remove.
+ * testsuite/20_util/has_nothrow_copy_constructor: Likewise.
+
+ * testsuite/20_util/is_nothrow_move_constructible/value.cc: Likewise.
+ * testsuite/20_util/is_nothrow_move_constructible/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_nothrow_move_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_nothrow_copy_constructible/value.cc: Likewise.
+ * testsuite/20_util/is_nothrow_copy_constructible/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_nothrow_copy_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_nothrow_default_constructible/value.cc:
+ Likewise.
+ * testsuite/20_util/is_nothrow_default_constructible/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_nothrow_default_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_move_constructible/value.cc: Likewise.
+ * testsuite/20_util/is_move_constructible/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_move_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_copy_constructible/value.cc: Likewise.
+ * testsuite/20_util/is_copy_constructible/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_copy_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+
+ * testsuite/20_util/is_default_constructible/value.cc: Add tests.
+ * testsuite/20_util/is_nothrow_constructible/value.cc: Likewise.
+
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
+2011-04-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/25_algorithms/partition/moveable.cc: Actually run
+ it in parallel-mode for check-parallel.
+
+2011-04-17 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48635 (again)
+ * include/bits/unique_ptr.h (unique_ptr<>::unique_ptr(unique_ptr<>&&),
+ unique_ptr<_Tp[]>::unique_ptr(unique_ptr<>&&),
+ unique_ptr<>::operator=(unique_ptr<>&&),
+ unique_ptr<_Tp[]>::operator=(unique_ptr<>&&)): Use forward<_Ep>, not
+ forward<_Dp>, to forward the deleter.
+ * testsuite/20_util/unique_ptr/assign/48635_neg.cc: New.
+
+2011-04-15 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48631
+ * include/bits/unique_ptr.h (default_delete<_Tp[]>): Add deleted
+ function call operator.
+ * testsuite/20_util/default_delete/48631_neg.cc: New.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-error
+ line numbers.
+
+2011-04-15 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48635
+ * include/bits/unique_ptr.h (unique_ptr<>::operator=(unique_ptr&&),
+ unique_ptr<>::operator=(unique_ptr<>&&),
+ unique_ptr<_Tp[],>::operator=(unique_ptr&&),
+ unique_ptr<_Tp[],>::operator=(unique_ptr<>&&)): Forward the deleter
+ instead of moving it.
+ * testsuite/20_util/unique_ptr/assign/48635.cc: New.
+
+2011-04-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * scripts/extract_symvers.pl: Handle NOTY.
+
+2011-04-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/istream: Fix comments in the light of DR60 + N3168.
+
+2011-04-13 Daniel Krugler <daniel.kruegler@googlemail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48526
+ * include/std/type_traits (struct is_constructible): Re-implement,
+ according to n3290.
+ (struct is_default_constructible): Add.
+ (struct is_destructible): Likewise.
+ (struct __and_, __or_, __not_): Add and use throughout; reorder some
+ facilities, other minor tweaks.
+ * testsuite/util/testsuite_tr1.h: Add test types.
+ * testsuite/20_util/is_constructible/value-2.cc: New.
+ * testsuite/20_util/is_default_constructible/value.cc: Likewise.
+ * testsuite/20_util/is_default_constructible/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_default_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_destructible/value.cc: Likewise.
+ * testsuite/20_util/is_destructible/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_destructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
+ dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Likewise.
+
+2011-04-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/is_function/value.cc: Add, adapted from the tr
+ testsuite.
+ * testsuite/20_util/is_function/requirements/typedefs.cc: Likewise.
+ * testsuite/20_util/is_function/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_function/24808.cc: Likewise.
+ * testsuite/20_util/is_function/35637.cc: Likewise.
+ * testsuite/20_util/is_object/value.cc: Likewise.
+ * testsuite/20_util/is_object/requirements/typedefs.cc: Likewise.
+ * testsuite/20_util/is_object/requirements/explicit_instantiation.cc:
+ : Likewise.
+ * testsuite/20_util/is_object/24808.cc: Likewise.
+ * testsuite/20_util/is_compound/value.cc: Likewise.
+ * testsuite/20_util/is_compound/requirements/typedefs.cc: Likewise.
+ * testsuite/20_util/is_compound/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_member_object_pointer/value.cc: Likewise.
+ * testsuite/20_util/is_member_object_pointer/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_member_object_pointer/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_fundamental/value.cc: Likewise.
+ * testsuite/20_util/is_fundamental/requirements/typedefs.cc: Likewise.
+ * testsuite/20_util/is_fundamental/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_member_pointer/value.cc: Likewise.
+ * testsuite/20_util/is_member_pointer/requirements/typedefs.cc:
+ Likewise.
+ * testsuite/20_util/is_member_pointer/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/is_member_function_pointer/value.cc: Likewise.
+ * testsuite/20_util/is_member_function_pointer/
+ requirements/typedefs.cc: Likewise.
+ * testsuite/20_util/is_member_function_pointer/requirements/
+ explicit_instantiation.cc: Likewise.
+
+ * testsuite/20_util/is_convertible/value.cc: Minor tweak, adjust
+ Copyright years.
+
+2011-04-12 Takaya Saito <gintensubaru@gmail.com>
+
+ PR libstdc++/48476
+ * include/std/tuple (_Tuple_impl<>::_Tuple_impl(_Tuple_impl<>&&),
+ _Tuple_impl<>::operator=(_Tuple_impl&&), _Tuple_impl<>::operator=
+ (_Tuple_impl<>&&), tuple_cat): Use std::forward where appropriate.
+ * testsuite/20_util/tuple/cons/48476.cc: New.
+ * testsuite/20_util/tuple/48476.cc: Likewise.
+ * testsuite/20_util/tuple/creation_functions/48476.cc: Likewise.
+
+2011-04-12 Allan McRae <allan@archlinux.org>
+
+ PR libstdc++/48566
+ * testsuite/tr1/6_containers/unordered_map/requirements/
+ iterator_null_neg.cc: Include <cstddef>.
+ * testsuite/tr1/6_containers/unordered_set/requirements/
+ iterator_null_neg.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc: Include
+ <cstring>.
+ * testsuite/util/testsuite_common_types.h: Include <limits>.
+ * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
+ Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
+ Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
+ Likewise.
+ * testsuite/29_atomics/atomic/cons/assign_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
+
+2011-04-11 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/is_convertible/value.cc: Adjust.
+
+2011-04-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/25_algorithms/inplace_merge/moveable.cc: Actually run
+ it in parallel-mode for check-parallel.
+ * testsuite/25_algorithms/rotate/moveable.cc: Likewise.
+ * testsuite/25_algorithms/stable_partition/moveable.cc: Likewise.
+ * testsuite/25_algorithms/remove/moveable.cc: Likewise.
+ * testsuite/25_algorithms/sort_heap/check_compare_by_value.cc:
+ Likewise.
+ * testsuite/25_algorithms/unique/moveable.cc: Likewise.
+ * testsuite/25_algorithms/remove_if/moveable.cc: Likewise.
+ * testsuite/25_algorithms/heap/moveable.cc: Likewise.
+
+ * testsuite/25_algorithms/next_permutation/moveable.cc: Only skip
+ the tests based on std::lexicographical_compare for check-parallel.
+ * testsuite/25_algorithms/prev_permutation/moveable.cc: Likewise.
+
+2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48541
+ * include/std/functional (_Base_manager::_M_get_pointer): Use
+ addressof.
+ * testsuite/20_util/function/48541.cc: New.
+
+2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/48465
+ * configure.ac (libtool_VERSION): Bump library version to 6:16:0.
+ * configure: Regenerate.
+ * config/abi/pre/gnu.ver (GLIBCXX_3.4.16): Export missing symbols.
+ * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.16.
+
+2011-04-06 Jeffrey Yasskin <jyasskin@google.com>
+
+ * include/ext/algorithm (is_sorted): In C++0x mode import from
+ namespace std.
+ * include/ext/numeric (iota): In C++0x mode import from
+ namespace std.
+ * testsuite/ext/is_sorted/cxx0x.cc: New.
+ * testsuite/ext/iota/cxx0x.cc: New.
+
+2011-04-02 Jonathan Wakely <redi@gcc.gnu.org>
+
+ PR libstdc++/48398
+ * include/bits/unique_ptr.h (__tuple_type): Store pointer type.
+ * testsuite/20_util/unique_ptr/modifiers/48398.cc: New.
+ * testsuite/20_util/unique_ptr/requirements/pointer_type.cc: Remove
+ unused parameter name.
+
+2011-03-31 Jeffrey Yasskin <jyasskin@google.com>
+
+ * libsupc++/exception_ptr.h: Forward-declare std::type_info.
+ * libsupc++/nested_exception.h (__throw_with_nested): Remove a
+ redundant default argument from std::__throw_with_nested.
+
+2011-03-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/48382
+ * src/ctype.cc: Do not include <bits/ctype_noninline.h>.
+ * src/Makefile.am: Add ctype_configure_char.cc to host_sources.
+ * src/Makefile.in: Regenerate.
+ * include/Makefile.am: Remove ctype_noninline.h from host_headers.
+ * include/Makefile.in: Regenerate.
+ * doc/xml/manual/internals.xml: Update.
+ * config/os/newlib/ctype_noninline.h: Fixup and rename to...
+ * config/os/newlib/ctype_configure_char.cc: ... this.
+ * config/os/aix/ctype_noninline.h: Likewise.
+ * config/os/aix/ctype_configure_char.cc: Likewise.
+ * config/os/vxworks/ctype_noninline.h: Likewise.
+ * config/os/vxworks/ctype_configure_char.cc
+ * config/os/hpux/ctype_noninline.h: Likewise.
+ * config/os/hpux/ctype_configure_char.cc: Likewise.
+ * config/os/gnu-linux/ctype_noninline.h: Likewise.
+ * config/os/gnu-linux/ctype_configure_char.cc: Likewise.
+ * config/os/mingw32/ctype_noninline.h: Likewise.
+ * config/os/mingw32/ctype_configure_char.cc: Likewise.
+ * config/os/tpf/ctype_noninline.h: Likewise.
+ * config/os/tpf/ctype_configure_char.cc: Likewise.
+ * config/os/uclibc/ctype_noninline.h: Likewise.
+ * config/os/uclibc/ctype_configure_char.cc: Likewise.
+ * config/os/bionic/ctype_noninline.h: Likewise.
+ * config/os/bionic/ctype_configure_char.cc: Likewise.
+ * config/os/djgpp/ctype_noninline.h: Likewise.
+ * config/os/djgpp/ctype_configure_char.cc: Likewise.
+ * config/os/qnx/qnx6.1/ctype_noninline.h: Likewise.
+ * config/os/qnx/qnx6.1/ctype_configure_char.cc: Likewise.
+ * config/os/bsd/netbsd/ctype_noninline.h: Likewise.
+ * config/os/bsd/netbsd/ctype_configure_char.cc: Likewise.
+ * config/os/bsd/darwin/ctype_noninline.h: Likewise.
+ * config/os/bsd/darwin/ctype_configure_char.cc: Likewise.
+ * config/os/bsd/freebsd/ctype_noninline.h: Likewise.
+ * config/os/bsd/freebsd/ctype_configure_char.cc: Likewise.
+ * config/os/irix/irix6.5/ctype_noninline.h: Likewise.
+ * config/os/irix/irix6.5/ctype_configure_char.cc: Likewise.
+ * config/os/generic/ctype_noninline.h: Likewise.
+ * config/os/generic/ctype_configure_char.cc: Likewise.
+ * config/os/solaris/solaris2.7/ctype_noninline.h: Likewise.
+ * config/os/solaris/solaris2.7/ctype_configure_char.cc: Likewise.
+
+2011-03-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (future::share): Add.
+ (packaged_task::result_type): Remove as per LWG 2030.
+ (packaged_task::packaged_task): Remove redundant constructors, as per
+ LWG 1514.
+ * testsuite/30_threads/future/members/share.cc: New.
+ * testsuite/30_threads/packaged_task/requirements/typedefs.cc: Remove.
+
+2011-03-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/28_regex/match_results/ctors/char/default.cc: Do not call
+ members which require a fully established result state.
+ * testsuite/28_regex/match_results/ctors/wchar_t/default.cc: Likewise.
+
+2011-03-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/random.h (negative_binomial_distribution<>::
+ negative_binomial_distribution(_IntType, double),
+ negative_binomial_distribution<>::
+ negative_binomial_distribution(const param_type&)): Tweak
+ construction of _M_gd.
+ * include/bits/random.tcc (negative_binomial_distribution<>::
+ operator()): Adjust.
+
+2011-03-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/random.h (negative_binomial_distribution<>::
+ negative_binomial_distribution(_IntType, double),
+ negative_binomial_distribution<>::
+ negative_binomial_distribution(const param_type&)): Fix
+ construction of _M_gd.
+ * include/bits/random.tcc (negative_binomial_distribution<>::
+ operator()): Fix computation, per Leger's algorithm.
+ * testsuite/util/testsuite_random.h (discrete_pdf,
+ negative_binomial_pdf, poisson_pdf, uniform_int_pdf): New.
+ (binomial_pdf): Swap last two parameters.
+ * testsuite/26_numerics/random/discrete_distribution/
+ operators/values.cc: New.
+ * testsuite/26_numerics/random/negative_binomial_distribution/
+ operators/values.cc: Likewise.
+ * testsuite/26_numerics/random/poisson_distribution/
+ operators/values.cc: Likewise.
+ * testsuite/26_numerics/random/uniform_int_distribution/
+ operators/values.cc: Likewise.
+ * testsuite/26_numerics/random/binomial_distribution/
+ operators/values.cc: Adjust.
+
+2011-03-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config/abi/post/solaris2.8/baseline_symbols.txt: Regenerate.
+ * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
+
+2011-03-23 Matthias Klose <doko@ubuntu.com>
+
+ * config/abi/post/sparc-linux-gnu/baseline_symbols.txt: Regenerated.
+
+2011-03-23 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Regenerated.
+
+2011-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.ac: Don't handle powerpc*-*-gnu*.
+ * configure: Regenerate.
+
+2011-03-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/21_strings/basic_string/cons/char/moveable2.cc: Tweak
+ Copyright years.
+ * testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc:
+ Likewise.
+
+2011-03-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/shared_ptr.h (operator>, operator<=, operator>=): Add,
+ per DR 1401.
+ (operator==, operator!=, operator<): Fix per the letter of DR 1401.
+ * include/bits/shared_ptr_base.h: Likewise for __shared_ptr.
+ * include/bits/unique_ptr.h (operator==, operator!=, operator<,
+ operator<=, operator>, operator>=): Fix per the letter of DR 1401.
+ * testsuite/20_util/shared_ptr/comparison/dr1401.cc: New.
+ * testsuite/20_util/unique_ptr/comparison/dr1401.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust.
+
+2011-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ * config/abi/pre/gnu.ver (GLIBCXX_3.4.15): Export _ZNSsC2EOSs
+ and _ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_.
+ * config/abi/post/solaris2.8/baseline_symbols.txt: Regenerated.
+ * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt:
+ Likewise.
+ * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
+ * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise.
+ * testsuite/21_strings/basic_string/cons/char/moveable2.cc: New test.
+ * testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc: New
+ test.
+
+2011-03-21 Jack Howarth <howarth@bromo.med.uc.edu>
+
+ * testsuite/lib/prune.exp (libstdc++-dg-prune): Prune "could not
+ create compact unwind for" warnings.
+
+2011-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
+ * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt:
+ Likewise.
+ * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise.
+ * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise.
+ * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise.
+
+ * testsuite/util/testsuite_abi.cc (check_version): Set incompatible
+ even when adding symbols to CXXABI_1.3, GLIBCXX_LDBL_3.4 and
+ CXXABI_LDBL_1.3 versions.
+
+2011-03-21 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/abi/pre/gnu.ver: Remove typeinfo name exports for C++0x types.
+
+2011-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ * config/abi/pre/gnu.ver (CXXABI_1.3): Don't export _ZT[IS][PK]*[no].
+ (CXXABI_1.3.5): Export _ZTI[PK]*[no].
+
+2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on
+ sparc*-sun-solaris2.10 && lp64.
+
+2011-03-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/lib/libstdc++.exp (check_v3_target_c99_math): Rename
+ to check_v3_target_cmath.
+ * testsuite/lib/dg-options.exp (dg-require-c99_math): Rename
+ to dg-require-cmath.
+ * testsuite/26_numerics/random/binomial_distribution/
+ operators/values.cc: Adjust.
+
+2011-03-18 Diego Novillo <dnovillo@google.com>
+
+ * testsuite/decimal/mixed-mode-arith_neg.cc: Rename from
+ mixed-mode_neg.cc
+ * testsuite/decimal/mixed-mode-cmp_neg.cc: Factor out of
+ mixed-mode-arith_neg.cc
+
+2011-03-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/util/testsuite_random.h: New.
+ * testsuite/lib/libstdc++.exp (check_v3_target_c99_math): Add.
+ * testsuite/lib/dg-options.exp (dg-require-c99_math): Likewise.
+ * testsuite/26_numerics/random/bernoulli_distribution/
+ operators/values.cc: New.
+ * testsuite/26_numerics/random/binomial_distribution/
+ operators/values.cc: Likewise.
+ * testsuite/26_numerics/random/geometric_distribution/
+ operators/values.cc: Likewise.
+
+2011-03-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/abi/pre/gnu.ver: Add base destructors for stdexcept classes.
+ * testsuite/19_diagnostics/stdexcept.cc: New.
+
+2011-03-15 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/thread: Revert.
+ * src/thread.cc: Same.
+ * config/abi/pre/gnu.ver: Same.
+
+2011-03-15 Doug Kwan <dougkwan@google.com>
+
+ PR libstdc++/48123
+ * include/Makefile.am (install-freestanding-headers): Install
+ cpu_defines.h
+ * include/Makefile.in: Regenerate.
+
+2011-03-15 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/abi/pre/gnu.ver: Make nested_exception exports super clear.
+ Move bad_function_call exports from CXXABI_1.3.5 to GLIBCXX_3.4.15.
+
+2011-03-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/48130
+ * src/future.cc: Guard definitions.
+ * libsupc++/nested_exception.cc: Same.
+
+2011-03-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * src/Makefile.am: Add functional.cc, shared_ptr.cc.
+ * src/Makefile.in: Regenerate.
+ * libsupc++/Makefile.am: Add nested_exception.cc.
+ * libsupc++/Makefile.in: Regenerate.
+ * src/system_error.cc: Add ctor and dtor definitions for error_category.
+ * src/functional.cc: New. Add dtor definition for bad_function_call.
+ * src/stdexcept.cc: Add dtor definitions for domain_error,
+ invalid_argument, length_error, out_of_range, range_error,
+ overflow_error, underflow_error.
+ * src/future.cc: Add dtor definition for __future_base::_Result_base.
+ * src/shared_ptr.cc: New. Add dtor definition for bad_weak_ptr.
+ * src/thread.cc: Add dtor for thread::_Impl_base.
+ * include/std/system_error: Adjust.
+ * include/std/stdexcept: Same.
+ * include/std/future: Same.
+ * include/std/functional: Same.
+ * include/std/thread: Same.
+ * include/bits/shared_ptr_base.h: Same.
+ * libsupc++/nested_exception.cc: New. Add dtor for nested_exception.
+ * libsupc++/nested_exception.h: Adjust.
+ * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Same.
+ * config/abi/pre/gnu.ver: Add new exports.
+
+2011-03-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/regex_compiler.h: Nest namespace versioning.
+ * include/bits/regex_grep_matcher.tcc: Same.
+ * include/bits/regex_grep_matcher.h: Same.
+ * include/bits/regex_cursor.h: Same.
+ * include/bits/regex_nfa.h: Same.
+ * include/bits/regex_nfa.tcc: Same.
+
+ * include/bits/regex_grep_matcher.h: Version forward declarations.
+ * include/bits/c++config: Add namespace association for __regex.
+ * include/bits/regex.h: Make sub_match consistent.
+
+2011-03-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * doc/xml/manual/abi.xml: Replace docs.sun.com URLs by their OTN
+ equivalents.
+ * doc/html/manual/abi.html: Regenerate.
+
+2011-03-14 Tom Tromey <tromey@redhat.com>
+
+ * python/libstdcxx/v6/printers.py (_use_gdb_pp): New global.
+ Try to import `gdb.printing' module.
+ (UniquePointerPrinter.__init__): Add 'typename' argument.
+ (StdSlistPrinter.__init__): Likewise.
+ (StdSlistIteratorPrinter.__init__): Likewise.
+ (StdVectorIteratorPrinter.__init__): Likewise.
+ (StdRbtreeIteratorPrinter.__init__): Likewise.
+ (StdDebugIteratorPrinter.__init__): Likewise.
+ (StdDequeIteratorPrinter.__init__): Likewise.
+ (StdStringPrinter.__init__): Likewise.
+ (RxPrinter, Printer): New class.
+ (libstdcxx_printer): New global.
+ (register_libstdcxx_printers): Rewrite.
+ (build_libstdcxx_dictionary): Rewrite.
+ (pretty_printers_dict): Remove.
+
+2011-03-14 Andrey Zholos <aaz@althenia.net>
+
+ PR libstdc++/48114
+ * include/bits/random.h (geometric_distribution): Correct formula
+ in comment, per C++0x.
+ (geometric_distribution<>::param_type::param_type(double)): Fix check.
+ (geometric_distribution<>::param_type::_M_initialize):
+ Store log(1 - p).
+ * include/bits/random.tcc (geometric_distribution<>::operator()):
+ Fix computation.
+ (binomial_distribution<>::operator()): Likewise.
+
+2011-03-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/util/testsuite_rvalref.h: Minor tweaks.
+
+2011-03-09 Jonathan Wakely <redi@gcc.gnu.org>
+ Chris Jefferson <chris@bubblescope.net>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/util/testsuite_rvalref.h (rvalstruct_compare_by_value):
+ New.
+ * testsuite/25_algorithms/sort_heap/check_compare_by_value.cc:
+ Likewise.
+ * testsuite/25_algorithms/partial_sort/check_compare_by_value:
+ Likewise.
+ * testsuite/25_algorithms/stable_sort/check_compare_by_value.cc:
+ Likewise.
+ * testsuite/25_algorithms/sort/check_compare_by_value: Likewise.
+
+2011-03-09 Chris Jefferson <chris@bubblescope.net>
+
+ PR libstdc++/48038
+ * include/bits/stl_algo.h (__merge_backward): Rename to
+ __move_merge_backward and change to always move rather than copy.
+ (__move_merge): New function similar to std::merge except values
+ are moved instead of copied.
+ (__merge_adaptive, __merge_sort_loop): Change from using std::merge
+ and __merge_backward to __move_merge and __move_merge_backward.
+
+2011-03-07 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Adjust
+ expected errors.
+
+2011-03-07 Benjamin Kosnik <bkoz@redhat.com>
+ Matthias Klose <doko@ubuntu.com>
+ Jonathan Wakely <redi@gcc.gnu.org>
+
+ PR libstdc++/47145
+ * acinclude.m4 (GLIBCXX_CONFIGURE_DOCBOOK): Define.
+ * configure.ac: Use it.
+ * doc/Makefile.am (XSL_STYLE_DIR): Set at configure time.
+ * configure: Regenerate.
+ * doc/Makefile.in: Regenerate.
+
+2011-03-04 Benjamin Kosnik <bkoz@chula>
+
+ * src/Makefile.am (inst_sources): Make source instantion files
+ conditional.
+ (XTEMPLATE_FLAGS): Make -fno-implicit-templates conditional.
+ * src/Makefile.in: Regenerate.
+ * src/valarray-inst.cc: Move to..
+ * src/valarray.cc: ...this.
+ * acinclude.m4 (GLIBCXX_ENABLE_EXTERN_TEMPLATE]): Define.
+ * configure.ac (GLIBCXX_ENABLE_EXTERN_TEMPLATE): Use it.
+ * configure: Regenerate.
+ * include/Makefile.am (stamp-extern-template): Add.
+ * include/Makefile.in: Regenerate.
+
+ * doc/xml/manual/configure.xml: Document --enable-extern-template.
+
+ * include/bits/locale_classes.tcc: Adjust comment.
+ * include/bits/locale_facets.tcc: Same.
+ * include/bits/basic_ios.tcc: Same.
+ * include/bits/istream.tcc: Same.
+ * include/bits/codecvt.h: Same.
+ * include/bits/ostream.tcc: Same.
+ * include/bits/sstream.tcc: Same.
+ * include/bits/c++config: Same.
+ * include/bits/basic_string.tcc: Same.
+ * include/bits/ostream_insert.h: Same.
+ * include/bits/locale_facets_nonio.tcc: Same.
+ * include/bits/streambuf.tcc: Same.
+ * include/bits/allocator.h: Same.
+ * include/bits/fstream.tcc: Same.
+
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers.
+
+2011-03-02 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/Makefile.am: Make clean fixups.
+ * testsuite/Makefile.in: Regenerate.
+
+2011-03-02 Marc Glisse <marc.glisse@normalesup.org>
+
+ * include/std/ratio (ratio_less): Add comments.
+
+2011-03-02 Marc Glisse <marc.glisse@normalesup.org>
+
+ PR libstdc++/47913
+ * include/std/ratio (ratio_add): Avoid denominator overflow.
+ * testsuite/20_util/ratio/operations/47913.cc: New.
+
+2011-02-28 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/20_util/hash/chi2_quality.cc: Use C++0x mode on simulators.
+ * testsuite/20_util/hash/quality.cc: Same.
+
+2011-02-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47921
+ * include/std/streambuf (basic_streambuf<>::__safe_gbump,
+ __safe_pbump): Add.
+ * include/bits/streambuf.tcc (basic_streambuf<>::xgetn,
+ xputn): Use the latter.
+ * include/bits/streambuf_iterator.h: Likewise.
+ * src/strstream.cc: Likewise.
+ * src/streambuf.cc: Likewise.
+ * src/compatibility.cc: Likewise.
+ * src/istream.cc: Likewise.
+ * include/bits/fstream.tcc (basic_filebuf<>::xsgetn): Use setg
+ instead of gbump.
+ * include/std/sstream (basic_stringbuf<>::_M_pbump): Add.
+ * include/bits/sstream.tcc (basic_stringbuf<>::seekoff,
+ seekpos, _M_sync): Use setg, setp, and _M_pbump.
+ * config/abi/pre/gnu.ver: Tweak.
+
+2011-02-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/ratio/comparisons/comp3.cc: New.
+
+2011-02-28 Marc Glisse <marc.glisse@normalesup.org>
+
+ PR libstdc++/42622
+ * include/std/ratio (ratio_less): Reimplement to never overflow.
+ * testsuite/20_util/ratio/comparisons/comp2.cc: Extend.
+
+2011-02-24 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/18_support/type_info/fundamental.cc: New.
+
+ * testsuite/Makefile.am: Make clean fixups.
+ * testsuite/Makefile.in: Regenerate.
+
+2011-02-19 François Dumont <francois.cppdevs@free.fr>
+
+ * include/debug/string (basic_string::insert): Add iterator check and
+ pass normal iterator to normal insert.
+ * include/debug/macros.h (__glibcxx_check_heap,
+ __glibcxx_check_heap_pred): Remove __glibcxx_check_valid_range,
+ already done.
+
+2011-02-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47776
+ * testsuite/ext/vstring/hash/char/1.cc: Fix.
+ * testsuite/ext/vstring/hash/wchar_t/1.cc: Likewise.
+
+2011-02-17 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/regex.h (basic_regex::traits_type): Add typedef.
+ (basic_regex::basic_regex(basic_regex&&)): Add noexcept.
+ (basic_regex::operator=(basic_regex&&)): Likewise.
+ (basic_regex::assign(basic_regex&&)): Likewise.
+ (operator==(sub_match,...)): Implement DR 1181.
+ (match_results::match_results(match_results&&)): Define.
+ (match_results::operator=(const match_results&)): Fix parameter type.
+ (match_results::operator=(match_results&&)): Define.
+
+2011-02-17 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/47724
+ * include/bits/regex_compiler.h (_Scanner::_M_advance): Do not treat
+ line anchors as metacharacters.
+ * testsuite/28_regex/basic_regex/ctors/47724.cc: New.
+
+2011-02-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47773
+ * include/ext/vstring.h (hash<__gnu_cxx::__vstring>,
+ hash<__gnu_cxx::__wvstring>, hash<__gnu_cxx::__u16vstring>,
+ hash<__gnu_cxx::__u32vstring>): Add.
+ * testsuite/ext/vstring/hash/char/1.cc: New.
+ * testsuite/ext/vstring/hash/wchar_t/1.cc: Likewise.
+
+2011-02-16 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/regex.h (match_results::format): Use char_traits.
+
+2011-02-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/atomic: Remove atomic_address, uplift to N3225.
+ * include/bits/atomic_0.h: Same.
+ * include/bits/atomic_2.h: Same.
+ * include/bits/atomic_base.h: Same.
+ * testsuite/29_atomics/atomic_address/*: Delete.
+
+2011-02-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/regex.h (sub_match::sub_match): Add.
+ (match_results::ready): Add.
+ (match_results::empty): Adjust.
+ (match_results::length): Add missing dereference.
+ (match_results::operator[],prefix,suffix): Add debug mode checks.
+ (match_results::cend): Re-use end().
+ (match_results::format): Adjust signatures.
+ (operator==(match_results,match_results)): Implement.
+ * include/bits/regex_compiler.h (_Scanner_base): Use constexpr.
+ * include/bits/regex_constants.h (syntax_option_type): Likewise.
+ * include/bits/regex_grep_matcher.h: Fix comment typo.
+ (_SpecializedResults::_SpecializedResults): Simplify.
+ * include/bits/regex_cursor.h: Fix comment typo.
+ * include/bits/regex_nfa.h: Likewise.
+ * testsuite/28_regex/basic_regex/ctors/basic/string_range_01_02_03.cc:
+ Fix error code, remove xfail.
+ * testsuite/28_regex/basic_regex/ctors/extended/
+ string_range_01_02_03.cc: Likewise.
+
+2011-02-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/regex_compiler.h: Remove unnecessary bind() calls.
+ * include/bits/regex_nfa.h: Remove unnecessary base classes.
+
+2011-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure: Regenerate.
+
+2011-02-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47709
+ * include/ext/algorithm (is_heap): In C++0x mode import from
+ namespace std.
+ * testsuite/ext/is_heap/47709.cc: New.
+
+2011-02-12 Jakub Jelinek <jakub@redhat.com>
+ Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/47662
+ * testsuite/17_intro/headers/c++200x/operator_names.cc: New.
+ * testsuite/17_intro/headers/c++1998/operator_names.cc: Add comment.
+
+2011-02-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/tr1/cmath (fabs): Define.
+ * include/tr1/complex (acos, asin, atan): Avoid duplicate definitions
+ in C++0x mode.
+
+2011-02-12 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/tr1/headers/c++200x/complex.cc: New.
+
+2011-02-11 Johannes Singler <singler@kit.edu>
+
+ PR libstdc++/47433
+ * include/parallel/losertree.h
+ (_LoserTreeUnguarded<>::__delete_min_insert):
+ Add missing "using std::swap;", as for other variants.
+
+2011-02-10 Benjamin Kosnik <bkoz@redhat.com>
+
+ * src/Makefile.am (sources): Add regex.cc.
+ * src/Makefile.in: Regenerate.
+ * src/regex.cc: New.
+ * include/bits/regex_error.h (error_type): Use constexpr.
+ (regex_error): Move ctor and dtor out of line.
+
+ * testsuite/28_regex/03_requirements: To...
+ * testsuite/28_regex/requirements: ... this.
+ * testsuite/28_regex/04_header: To...
+ * testsuite/28_regex/headers: ... this.
+ * testsuite/28_regex/05_constants: To...
+ * testsuite/28_regex/constants: ... this.
+ * testsuite/28_regex/06_exception_type: To...
+ * testsuite/28_regex/regex_error: ... this.
+ * testsuite/28_regex/07_traits: To...
+ * testsuite/28_regex/traits: ... this.
+ * testsuite/28_regex/08_basic_regex: To...
+ * testsuite/28_regex/basic_regex: ... this.
+ * testsuite/28_regex/09_sub_match: To...
+ * testsuite/28_regex/sub_match: ... this.
+ * testsuite/28_regex/10_match_results: To...
+ * testsuite/28_regex/match_results: ... this.
+ * testsuite/28_regex/11_algorithms: To...
+ * testsuite/28_regex/algorithms: ... this.
+ * testsuite/28_regex/12_iterators: To...
+ * testsuite/28_regex/iterators: ... this.
+
+2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/47662
+ * include/bits/c++config: Do not use alternative token.
+ * testsuite/17_intro/headers/c++1998/operator_names.cc: New.
+
+2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * src/future.cc (future_error_category::message): Handle no_state.
+
+2011-02-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/multimap/modifiers/erase/47628.cc: Do
+ not test in C++0x mode.
+ * testsuite/23_containers/map/modifiers/erase/47628.cc: Likewise.
+ * testsuite/20_util/headers/utility/synopsis.cc: Tweak to work
+ in C++0x mode too.
+
+2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update.
+ * doc/html/*: Regenerate.
+
+2011-02-10 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/debug.xml: Improve data race docs.
+
+2011-02-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47668
+ * include/debug/map.h (map): Remove unnecessary using-declaration.
+ * include/debug/multimap.h (multimap): Likewise.
+ * include/profile/map.h (map): Likewise.
+ * include/profile/multimap.h (multimap): Likewise.
+
+2011-02-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/43863
+ * libsupc++/guard.cc (recursive_init_error::~recursive_init_error):
+ Move to ...
+ * libsupc++/guard_error.cc: ... new file.
+ * libsupc++/Makefile.am: Update.
+ * libsupc++/Makefile.in: Regenerate.
+
+2011-02-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (packaged_task::operator bool): Rename to...
+ (packaged_task::valid): ...this.
+ * testsuite/30_threads/packaged_task/cons/1.cc: Adjust.
+ * testsuite/30_threads/packaged_task/cons/2.cc: Adjust.
+ * testsuite/30_threads/packaged_task/cons/move.cc: Adjust.
+ * testsuite/30_threads/packaged_task/cons/move_assign.cc: Adjust.
+ * testsuite/30_threads/packaged_task/cons/alloc.cc: Adjust.
+ * testsuite/30_threads/packaged_task/members/invoke.cc: Adjust.
+ * testsuite/30_threads/packaged_task/members/reset.cc: Adjust.
+ * testsuite/30_threads/packaged_task/members/reset2.cc: Adjust.
+ * testsuite/30_threads/packaged_task/members/swap.cc: Adjust.
+ * testsuite/30_threads/packaged_task/members/boolconv.cc: Remove.
+ * testsuite/30_threads/packaged_task/members/valid.cc: Add.
+
+2011-02-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * doc/xml/manual/io.xml: Fix typo.
+ * doc/html/manual/streambufs.html: Likewise.
+
+2011-02-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * config/abi/pre/gnu.ver: Fix.
+
+2011-02-08 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/manual/appendix_porting.xml: Add doc section.
+ * doc/xml/manual/appendix_contributing.xml: Split out doc bits to...
+ * doc/xml/manual/documentation_hacking.xml: ...here.
+
+ * doc/xml/manual/debug_mode.xml: Adjust.
+ * doc/xml/manual/prerequisites.xml: Adjust.
+ * doc/Makefile.am (xml_sources): Add dot files,
+ documentation_hacking.xml.
+ * doc/Makefile.in: Regenerate.
+
+ * doc/xml/manual/build_hacking.xml: Use absolute paths for images.
+ * doc/xml/images/confdeps.pdf: Add.
+
+ * doc/html/*: Regenerate.
+
+2011-02-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/gnu/fdl-1.2.xml: Remove.
+ * doc/xml/gnu/gpl-2.0.xml: Remove.
+ * doc/Makefile.am: Update.
+ * doc/Makefile.in: Regenerate.
+
+2011-02-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47628
+ * include/bits/stl_tree.h (_Rb_tree::erase(iterator), erase(iterator,
+ iterator)): Add back in C++03 mode.
+ * testsuite/23_containers/map/modifiers/erase/47628.cc: New.
+ * testsuite/23_containers/multimap/modifiers/erase/47628.cc: Likewise.
+
+2011-02-07 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/47560 try two
+ * config/os/hpux/os_defines.h: Guard for C++.
+
+2011-02-07 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/faq.xml: Adjust link to bug database.
+ Remove old item on broken header files.
+
+2011-02-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/regex_error.h (__throw_regex_error): Not inline.
+ * src/functexcept.cc: Add definition.
+ * config/abi/pre/gnu.ver: Export.
+
+2011-02-04 Ralf Corsépius <ralf.corsepius@rtems.org>
+
+ * crossconfig.m4 (GLIBCXX_CROSSCONFIG): Add *-rtems*.
+ * configure: Regenerate.
+
+2011-02-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/46914
+ * include/bits/atomic_0.h (_ATOMIC_STORE_, _ATOMIC_MODIFY_,
+ _ATOMIC_CMPEXCHNG_): Rename __v -> __w, and __m -> __n, to
+ avoid name conflicts.
+
+2011-02-01 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/47560
+ * config/os/hpux/os_defines.h: Remove use of macros on namespace.
+
+2011-02-01 Benjamin Kosnik <bkoz@redhat.com>
+
+ * scripts/run_doxygen: Allow doxygen 1.7.0 again.
+ * doc/doxygen/user.cfg.in (PDF_HYPERLINKS): Re-enable.
+ (COMPACT_LATEX): Enable.
+
+ * include/profile/impl/profiler_container_size.h: Adjust doxygen markup.
+ * include/profile/impl/profiler_hash_func.h: Same.
+ * include/bits/hashtable.h: Same.
+ * include/backward/auto_ptr.h: Same.
+ * include/backward/strstream: Same.
+ * include/backward/backward_warning.h: Same.
+ * include/backward/binders.h: Same.
+
+2011-02-01 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/manual/debug.xml: Use GDB instead of gdb.
+ Adjust link to GDB manual.
+
+2011-01-31 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/c++config (_GLIBCXX_DEPRECATED): To
+ _GLIBCXX_USE_DEPRECATED.
+ (_GLIBCXX_DEPRECATED_ATTR): To _GLIBCXX_DEPRECATED.
+ * doc/xml/manual/using.xml: Same.
+ * include/std/memory: Same.
+ * include/std/streambuf: Same.
+ * include/bits/shared_ptr.h: Same.
+ * include/bits/unique_ptr.h: Same.
+ * include/bits/shared_ptr_base.h: Same.
+ * include/bits/stl_function.h: Same.
+ * include/tr1/shared_ptr.h: Same.
+ * include/backward/auto_ptr.h: Same.
+ * include/backward/binders.h: Same.
+
+2011-01-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * doc/html/ext/lwg-active.html: Update to Revision D73.
+ * doc/html/ext/lwg-closed.html: Likewise.
+ * doc/html/ext/lwg-defects.html: Likewise.
+ * doc/xml/manual/intro.xml: Update status of issues 408, 539, 865.
+
+2011-01-30 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/36104 part four
+ * include/bits/c++config (_GLIBCXX_STD): Remove.
+ (_GLIBCXX_STD_D, _GLIBCXX_PR): Now _GLIBCXX_STD_C.
+ (_GLIBCXX_P): Now _GLIBCXX_STD_A.
+ (_GLIBCXX_NAMESPACE_DEBUG, _GLIBCXX_NAMESPACE_PARALLEL,
+ _GLIBCXX_NAMESPACE_PROFILE, _GLIBCXX_NAMESPACE_VERSION): Remove.
+ (_GLIBCXX_INLINE_DEBUG, _GLIBCXX_INLINE_PARALLEL,
+ _GLIBCXX_INLINE_PROFILE): Remove.
+ (_GLIBCXX_BEGIN_NAMESPACE(X)): Remove.
+ (_GLIBCXX_END_NAMESPACE): Remove.
+ (_GLIBCXX_BEGIN_NESTED_NAMESPACE(X, Y)): Remove.
+ (_GLIBCXX_END_NESTED_NAMESPACE): Remove.
+ (_GLIBCXX_BEGIN_NAMESPACE_ALGO): Add.
+ (_GLIBCXX_END_NAMESPACE_ALGO): Add.
+ (_GLIBCXX_BEGIN_NAMESPACE_CONTAINER): Add.
+ (_GLIBCXX_END_NAMESPACE_CONTAINER): Add.
+ (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Add.
+ (_GLIBCXX_END_NAMESPACE_VERSION): Add.
+ (_GLIBCXX_BEGIN_LDBL_NAMESPACE): To _GLIBCXX_BEGIN_NAMESPACE_LDBL.
+ (_GLIBCXX_END_LDBL_NAMESPACE): To _GLIBCXX_END_NAMESPACE_LDBL.
+ (_GLIBCXX_VISIBILITY_ATTR): Revert to _GLIBCXX_VISIBILITY.
+ * include/*: Use new macros for namespace scope.
+ * config/*: Same.
+ * src/*: Same.
+
+ * src/Makefile.am (sources): Remove debug_list.cc, add
+ compatibility-debug_list-2.cc.
+ (parallel_sources): Remove parallel_list.cc, add
+ compatibility-parallel_list-2.cc.
+ (compatibility-parallel_list-2.[o,lo]): New rule.
+ * src/Makefile.in: Regenerate.
+ * src/debug_list.cc: Remove.
+ * src/parallel_list.cc: Remove.
+ * src/compatibility-list-2.cc: New.
+ * src/compatibility-debug_list-2.cc: New.
+ * src/compatibility-parallel_list-2.cc: New.
+
+ * doc/doxygen/user.cfg.in: Adjust macros.
+
+ * testsuite/20_util/auto_ptr/assign_neg.cc: Adjust line numbers, macros.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Same.
+ * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Same.
+ * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Same.
+ * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Same.
+ * testsuite/20_util/forward/c_neg.cc: Same.
+ * testsuite/20_util/forward/f_neg.cc: Same.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same.
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Same.
+ * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Same.
+ * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Same.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Same.
+ * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Same.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_1_neg.cc: Same.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_2_neg.cc: Same.
+ * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Same.
+ * testsuite/23_containers/forward_list/capacity/1.cc: Same.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ assign_neg.cc: Same.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Same.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Same.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Same.
+ * testsuite/23_containers/list/capacity/29134.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Same.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Same.
+ * testsuite/23_containers/vector/bool/capacity/29134.cc: Same.
+ * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc: Same.
+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Same.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Same.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Same.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Same.
+ * testsuite/25_algorithms/sort/35588.cc: Same.
+ * testsuite/27_io/ios_base/cons/assign_neg.cc: Same.
+ * testsuite/27_io/ios_base/cons/copy_neg.cc: Same.
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Same.
+ * testsuite/ext/profile/profiler_algos.cc: Same.
+ * testsuite/ext/type_traits/add_unsigned_floating_neg.cc: Same.
+ * testsuite/ext/type_traits/add_unsigned_integer_neg.cc: Same.
+ * testsuite/ext/type_traits/remove_unsigned_floating_neg.cc: Same.
+ * testsuite/ext/type_traits/remove_unsigned_integer_neg.cc: Same.
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc: Same.
+
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/manual/abi.xml: Adjust link to C++ ABI specification.
+ Improve description of one such reference.
+
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * doc/xml/manual/codecvt.xml: Fix link to The Austin Common
+ Standards Revision Group.
+ * doc/xml/manual/locale.xml: Ditto.
+ * doc/xml/manual/messages.xml: Ditto.
+ * doc/xml/manual/using_exceptions.xml: Ditto.
+
+2011-01-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/atomic_base.h: Do not include <stddef.h>.
+ (kill_dependency): Uglify ret.
+
+2011-01-26 Johannes Singler <singler@kit.edu>
+
+ * include/parallel/numeric (inner_product, partial_sum):
+ Qualify subsequent call with __gnu_parallel instead of
+ _GLIBCXX_STD_P to reenable parallel execution without ambiguity.
+ * include/parallel/algobase.h (equal): Likewise.
+ * include/parallel/algo.h (find_first_of, search_n, merge,
+ nth_element, partial_sort, max_element, min_element): Likewise.
+ * testsuite/25_algorithms/headers/algorithm/
+ parallel_algorithm_mixed1.cc (main): Add respective test cases.
+ * testsuite/25_algorithms/headers/algorithm/
+ parallel_algorithm_mixed2.cc (main): Likewise.
+ * testsuite/26_numerics/headers/numeric/
+ parallel_numeric_mixed1.cc (main): Likewise.
+ * testsuite/26_numerics/headers/numeric/
+ parallel_numeric_mixed2.cc (main): Likewise.
+
+2011-01-24 Graham Reed <greed@pobox.com>
+
+ PR libstdc++/47387
+ * config/os/aix/ctype_inline.h (ctype<char>::is): Use _M_table if
+ provided.
+
+2011-01-24 Johannes Singler <singler@kit.edu>
+
+ PR libstdc++/47433
+ * include/parallel/losertree.h
+ (_LoserTree<>::__delete_min_insert):
+ Do not qualify swap with std:: for value type,
+ but include a using directive instead.
+ (_LoserTreeUnguarded<>::__delete_min_insert): Likewise.
+ * include/parallel/balanced_quicksort.h (__qsb_divide):
+ Use std::iter_swap instead of std::swap.
+ (__qsb_local_sort_with_helping): Likewise.
+ * include/parallel/partition.h (__parallel_partition):
+ Likewise. (__parallel_nth_element): Likewise.
+
+2011-01-24 Johannes Singler <singler@kit.edu>
+
+ PR libstdc++/47437
+ * include/parallel/multiway_merge.h (_UnguardedIterator):
+ Remove useless "mutable" from reference declaration.
+
+2011-01-21 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/c++config (_GLIBCXX_EXPORT_TEMPLATE): Remove.
+ * include/debug/safe_sequence.h: Same.
+ * include/debug/safe_iterator.h: Same.
+ * include/std/forward_list: Same.
+ * include/std/deque: Same.
+ * include/std/list: Same.
+ * include/std/random: Same.
+ * include/std/streambuf: Same.
+ * include/std/fstream: Same.
+ * include/std/istream: Same.
+ * include/std/string: Same.
+ * include/std/ostream: Same.
+ * include/std/sstream: Same.
+ * include/ext/vstring.h: Same.
+ * include/bits/basic_ios.h: Same.
+ * include/bits/locale_classes.h: Same.
+ * include/bits/locale_facets.h: Same.
+ * include/bits/valarray_array.h: Same.
+ * include/bits/locale_facets_nonio.h: Same.
+ * include/tr1/random: Same.
+
+2011-01-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/diagnostics.xml: Replace note about C++0x concepts.
+
+2011-01-20 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/36104 part three
+ * src/hashtable_c++0x.cc: Adjust namespace macros.
+ * testsuite/util/testsuite_rvalref.h: Don't forward declare hash.
+ * config/abi/pre/gnu-versioned-namespace.ver: Update.
+
+2011-01-20 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/ext/pb_ds/detail/resize_policy/
+ hash_load_check_resize_trigger_imp.hpp: Adjust assert condition.
+ * include/ext/pb_ds/detail/pat_trie_/
+ constructors_destructor_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp: Format.
+ * include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp: Same.
+ * include/ext/pb_ds/detail/debug_map_base.hpp: Use never_adjustor.
+
+ * testsuite/ext/pb_ds/regression/hash_data_map_rand.cc: Adjust
+ iterations downward when testing in debug mode.
+ * testsuite/ext/pb_ds/regression/trie_data_map_rand.cc: Same.
+ * testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc: Same.
+ * testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc: Same.
+ * testsuite/ext/pb_ds/regression/tree_data_map_rand.cc: Same.
+ * testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc: Same.
+ * testsuite/ext/pb_ds/example/hash_illegal_resize.cc: Use SIZE,
+ reduce in debug mode.
+
+2011-01-19 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/36104 part two
+ * include/bits/hashtable.h: Revert to non-nested macro usage.
+ * include/bits/hashtable_policy.h: Same.
+
+2011-01-19 Graham Reed <greed@pobox.com>
+
+ PR libstdc++/47354
+ * src/bitmap_allocator.cc (free_list::_M_get): Lock mutex.
+
+2011-01-18 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/images/confdeps.png: Regenerate.
+
+ * include/std/chrono (duration): Mark copy constructor constexpr.
+ * testsuite/20_util/duration/cons/constexpr.cc: Add test.
+
+2011-01-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/unique_ptr.h (default_delete<>::default_delete()):
+ Declare defaulted per DR 1517.
+ * testsuite/util/testsuite_common_types.h
+ (constexpr_defaulted_default_constructible): Add.
+ * testsuite/20_util/default_delete/cons/constexpr.cc: Use it.
+
+2011-01-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_queue.h (queue<>::swap, priority_queue<>::swap):
+ Implement DR 1198.
+ * include/bits/stl_stack.h (stack<>::swap): Likewise.
+
+2011-01-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47323
+ * testsuite/28_regex/08_basic_regex/requirements/constexpr_data.cc:
+ Only test wregex when _GLIBCXX_USE_WCHAR_T is defined.
+
+2011-01-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47320
+ * testsuite/18_support/numeric_limits/lowest.cc:
+ Only test wchar_t when _GLIBCXX_USE_WCHAR_T is defined.
+
+2011-01-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47321
+ * testsuite/21_strings/basic_string/requirements/typedefs.cc:
+ Only test std::wstring when _GLIBCXX_USE_WCHAR_T is defined.
+
+2011-01-16 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/23_containers/forward_list/debug/erase_after1_neg.cc: Move
+ to this. Use _neg suffix.
+ * testsuite/23_containers/forward_list/debug/erase_after1.cc: ...from
+ this.
+ * testsuite/23_containers/forward_list/debug/erase_after2_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after2.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after3_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after3.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after4_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after4.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after5_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after5.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after6_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after6.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after7_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after7.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after8_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after8.cc: Same.
+ * testsuite/23_containers/forward_list/debug/erase_after9_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/erase_after9.cc: Same.
+ * testsuite/23_containers/forward_list/debug/insert_after1_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/insert_after1.cc: Same.
+ * testsuite/23_containers/forward_list/debug/insert_after2_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/insert_after2.cc: Same.
+ * testsuite/23_containers/forward_list/debug/insert_after3_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/insert_after3.cc: Same.
+ * testsuite/23_containers/forward_list/debug/splice_after1_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/splice_after1.cc: Same.
+ * testsuite/23_containers/forward_list/debug/splice_after2_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/splice_after2.cc: Same.
+ * testsuite/23_containers/forward_list/debug/splice_after3_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/splice_after3.cc: Same.
+ * testsuite/23_containers/forward_list/debug/splice_after4_neg.cc:
+ Same.
+ * testsuite/23_containers/forward_list/debug/splice_after4.cc: Same.
+
+2011-01-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/36104
+ * include/Makefile.am (bits_sup_headers, stamp-bits-sup): New.
+ * include/Makefile.in: Regenerate.
+ * libsupc++/Makefile.am (std_HEADERS, bits_HEADERS): New.
+ (install-stdHEADERS, install-bitsHEADERS): New.
+ * libsupc++/Makefile.in: Regenerate.
+
+ * include/bits/c++config: Update for inline namespaces.
+ * libsupc++/cxxabi-forced.h: To...
+ * libsupc++/cxxabi_forced.h: ...this.
+ * libsupc++/hash_bytes.h: Separate file.
+ * libsupc++/typeinfo: Use it.
+ * libsupc++/exception: Adjust for bits subdirectory.
+ * libsupc++/eh_aux_runtime.cc: Same.
+ * libsupc++/eh_ptr.cc: Same.
+ * libsupc++/new_op.cc: Same.
+ * libsupc++/exception_defines.h: Same.
+ * libsupc++/nested_exception.h: Same.
+ * libsupc++/eh_terminate.cc: Same.
+ * libsupc++/vec.cc: Same.
+ * libsupc++/vterminate.cc: Same.
+ * libsupc++/exception_ptr.h: Same.
+ * libsupc++/eh_personality.cc: Same.
+ * libsupc++/eh_call.cc: Same.
+ * libsupc++/new_opnt.cc: Same.
+ * libsupc++/hash_bytes.cc: Same.
+ * config/cpu/arm/cxxabi_tweaks.h: Same.
+ * config/cpu/generic/cxxabi_tweaks.h: Same.
+ * libsupc++/cxxabi.h: Same. Consolidate _GLIBCXX_NOTHROW defines.
+ * include/std/bitset: Same.
+ * include/ext/vstring.tcc: Same.
+ * include/bits/hashtable.h: Same.
+ * include/bits/functional_hash.h: Same.
+ * include/bits/hashtable_policy.h: Same.
+ * include/bits/basic_string.h: Same.
+ * include/bits/istream.tcc: Same.
+ * include/bits/ostream.tcc: Same.
+ * include/bits/algorithmfwd.h: Same.
+ * include/bits/basic_string.tcc: Same.
+ * include/bits/ostream_insert.h: Same.
+ * include/bits/fstream.tcc: Same.
+ * include/bits/functexcept.h: Same.
+
+ * doc/doxygen/user.cfg.in: Adjust names.
+
+ * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers.
+
+2011-01-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/25_algorithms/is_permutation/check_type.cc: Minor
+ tweaks.
+ * testsuite/25_algorithms/is_permutation/1.cc: Cosmetic changes.
+
+2011-01-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/25_algorithms/is_permutation/check_type.cc: New.
+ * testsuite/25_algorithms/is_permutation/requirements/
+ explicit_instantiation/2.cc: Likewise.
+ * testsuite/25_algorithms/is_permutation/requirements/
+ explicit_instantiation/pod.cc: Likewise.
+ * testsuite/25_algorithms/is_permutation/1.cc: Likewise.
+
+2011-01-13 John Lakos <jlakos@bloomberg.net>
+ Pablo Halpern <phalpern@halpernwightsoftware.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_algo.h (is_permutation): Add, per N3068.
+ * include/bits/algorithmfwd.h: Add.
+
+2011-01-13 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/47045
+ * config/os/bsd/netbsd/ctype_base.h: Use new macros based on version.
+
+2011-01-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * aclocal.m4: Regenerate.
+
+2011-01-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/47185
+ * src/placeholders.cc: New.
+ * src/Makefile.am: Adjust.
+ * src/Makefile.in: Regenerate.
+ * include/std/functional (placeholders::_1, _2, ..., _29): Declare
+ extern.
+ * config/abi/pre/gnu.ver: Export.
+
+2011-01-05 François Dumont <francois.cppdevs@free.fr>
+
+ * include/debug/safe_base.h (_Safe_iterator_base::_M_unlink): New.
+ * include/src/debug.cc: Use latter
+ * include/debug/forward_list (forward_list<>::_M_swap): Fix to
+ correctly handle before_begin iterators.
+ * testsuite/23_containers/forward_list/debug/swap.cc: Remove now
+ useless _GLIBCXX_DEBUG checks.
+
+2011-01-04 Kai Tietz <kai.tietz@onevision.com>
+
+ PR libstdc++/47145
+ * configure.ac (AC_CHECK_FILE): Replaced by test -f.
+ * configure: Regenerated.
+
+2011-01-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/46922
+ * config/abi/pre/gnu.ver: Export std::bad_function_call symbols.
+
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
diff --git a/libstdc++-v3/Makefile.am b/libstdc++-v3/Makefile.am
index f1b5b07879..8be4f6c3c4 100644
--- a/libstdc++-v3/Makefile.am
+++ b/libstdc++-v3/Makefile.am
@@ -1,7 +1,7 @@
## Makefile for the toplevel directory of the GNU C++ Standard library.
##
-## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2008, 2009, 2010
-## Free Software Foundation, Inc.
+## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2008, 2009, 2010,
+## 2012 Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
## Process this file with automake to produce Makefile.in.
@@ -24,7 +24,7 @@
include $(top_srcdir)/fragment.am
if GLIBCXX_HOSTED
- hosted_source = doc src po testsuite
+ hosted_source = src doc po testsuite
endif
## Keep this list sync'd with acinclude.m4:GLIBCXX_CONFIGURE.
@@ -152,8 +152,6 @@ AM_MAKEFLAGS = \
"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
"MAKE=$(MAKE)" \
"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
- "PICFLAG=$(PICFLAG)" \
- "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
"SHELL=$(SHELL)" \
"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
"exec_prefix=$(exec_prefix)" \
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index af62df5a63..afc698fea1 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -39,7 +39,8 @@ DIST_COMMON = $(top_srcdir)/fragment.am README ChangeLog \
$(top_srcdir)/configure $(am__configure_deps) \
$(srcdir)/config.h.in $(srcdir)/../mkinstalldirs \
$(top_srcdir)/scripts/testsuite_flags.in \
- $(top_srcdir)/scripts/extract_symvers.in
+ $(top_srcdir)/scripts/extract_symvers.in \
+ $(top_srcdir)/doc/xsl/customization.xsl.in
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
@@ -67,7 +68,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = scripts/testsuite_flags scripts/extract_symvers
+CONFIG_CLEAN_FILES = scripts/testsuite_flags scripts/extract_symvers \
+ doc/xsl/customization.xsl
CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
@@ -91,7 +93,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = include libsupc++ doc src po testsuite python
+DIST_SUBDIRS = include libsupc++ src doc po testsuite python
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -133,7 +135,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -161,7 +162,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -189,7 +189,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -216,6 +215,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -235,10 +235,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -266,6 +268,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -278,6 +281,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -288,19 +292,21 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
-@GLIBCXX_HOSTED_TRUE@hosted_source = doc src po testsuite
+@GLIBCXX_HOSTED_TRUE@hosted_source = src doc po testsuite
SUBDIRS = include libsupc++ $(hosted_source) python
ACLOCAL_AMFLAGS = -I . -I .. -I ../config
@BUILD_XML_FALSE@STAMP_XML =
@@ -349,8 +355,6 @@ AM_MAKEFLAGS = \
"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
"MAKE=$(MAKE)" \
"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
- "PICFLAG=$(PICFLAG)" \
- "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
"SHELL=$(SHELL)" \
"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
"exec_prefix=$(exec_prefix)" \
@@ -432,6 +436,8 @@ scripts/testsuite_flags: $(top_builddir)/config.status $(top_srcdir)/scripts/tes
cd $(top_builddir) && $(SHELL) ./config.status $@
scripts/extract_symvers: $(top_builddir)/config.status $(top_srcdir)/scripts/extract_symvers.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+doc/xsl/customization.xsl: $(top_builddir)/config.status $(top_srcdir)/doc/xsl/customization.xsl.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index d6735e9b5f..319e32784f 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -35,6 +35,7 @@ dnl SUBDIRS
dnl Substs:
dnl glibcxx_builddir (absolute path)
dnl glibcxx_srcdir (absolute path)
+dnl toplevel_builddir (absolute path)
dnl toplevel_srcdir (absolute path)
dnl with_cross_host
dnl with_newlib
@@ -48,7 +49,7 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
# Keep these sync'd with the list in Makefile.am. The first provides an
# expandable list at autoconf time; the second provides an expandable list
# (i.e., shell variable) at configure time.
- m4_define([glibcxx_SUBDIRS],[include libsupc++ python src doc po testsuite])
+ m4_define([glibcxx_SUBDIRS],[include libsupc++ python src src/c++98 src/c++11 doc po testsuite])
SUBDIRS='glibcxx_SUBDIRS'
# These need to be absolute paths, yet at the same time need to
@@ -59,9 +60,11 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
[\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
*) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
esac
+ toplevel_builddir=${glibcxx_builddir}/..
toplevel_srcdir=${glibcxx_srcdir}/..
AC_SUBST(glibcxx_builddir)
AC_SUBST(glibcxx_srcdir)
+ AC_SUBST(toplevel_builddir)
AC_SUBST(toplevel_srcdir)
# We use these options to decide which functions to include. They are
@@ -94,8 +97,8 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
## (Right now, this only matters for enable_wchar_t, but nothing prevents
## other macros from doing the same. This should be automated.) -pme
- # Check for C library flavor since Linux platforms use different configuration
- # directories depending on the C library in use.
+ # Check for C library flavor since GNU/Linux platforms use different
+ # configuration directories depending on the C library in use.
AC_EGREP_CPP([_using_uclibc], [
#include <stdio.h>
#if __UCLIBC__
@@ -564,17 +567,21 @@ dnl be turned on, that does not put empty objects in per-process static
dnl memory (mostly useful together with shared memory allocators, see PR
dnl libstdc++/16612 for details).
dnl
-dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
-dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
+dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1
+dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0
+dnl otherwise undefined
dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
dnl Where DEFAULT is either `yes' or `no'.
dnl
AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
if test $enable_fully_dynamic_string = yes; then
- AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
- [Define if a fully dynamic basic_string is wanted.])
+ enable_fully_dynamic_string_def=1
+ else
+ enable_fully_dynamic_string_def=0
fi
+ AC_DEFINE_UNQUOTED([_GLIBCXX_FULLY_DYNAMIC_STRING], [${enable_fully_dynamic_string_def}],
+ [Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, undefined for platform defaults])
])
@@ -590,6 +597,7 @@ dnl GLIBCXX_TEST_WCHAR_T
dnl GLIBCXX_TEST_THREAD
dnl Substs:
dnl baseline_dir
+dnl baseline_subdir_switch
dnl
AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
if $GLIBCXX_IS_NATIVE ; then
@@ -617,11 +625,13 @@ AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
# Export file names for ABI checking.
baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
AC_SUBST(baseline_dir)
+ baseline_subdir_switch="$abi_baseline_subdir_switch"
+ AC_SUBST(baseline_subdir_switch)
])
dnl
-dnl Does any necessary configuration of the documentation directory.
+dnl Does any necessary configuration for docbook in the docs directory.
dnl
dnl XSLTPROC must be set before this
dnl
@@ -632,7 +642,7 @@ dnl XSL_STYLE_DIR
dnl
AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
-AC_MSG_CHECKING([for stylesheets used in generation of documentation])
+AC_MSG_CHECKING([for docbook stylesheets for documentation creation])
glibcxx_stylesheets=no
if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude http://docbook.sourceforge.net/release/xsl-ns/current/xhtml-1_1/docbook.xsl - 2>/dev/null; then
glibcxx_stylesheets=yes
@@ -659,6 +669,18 @@ if test x"$glibcxx_local_stylesheets" = x"yes"; then
else
glibcxx_stylesheets=no
fi
+
+# Check for epub3 dependencies.
+AC_MSG_CHECKING([for epub3 stylesheets for documentation creation])
+glibcxx_epub_stylesheets=no
+if test x"$glibcxx_local_stylesheets" = x"yes"; then
+ if test -f "$XSL_STYLE_DIR/epub3/chunk.xsl"; then
+ glibcxx_epub_stylesheets=yes
+ fi
+fi
+AC_MSG_RESULT($glibcxx_epub_stylesheets)
+AM_CONDITIONAL(BUILD_EPUB, test x"$glibcxx_epub_stylesheets" = x"yes")
+
])
@@ -682,9 +704,9 @@ AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
fi
# Stuff in the actual top level. Currently only used by libsupc++ to
- # get unwind* headers from the gcc dir.
- #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
- TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
+ # get unwind* headers from the libgcc dir.
+ #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc -I$(toplevel_srcdir)/include'
+ TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc'
# Now, export this to all the little Makefiles....
AC_SUBST(GLIBCXX_INCLUDES)
@@ -707,7 +729,7 @@ AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
# OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
AC_SUBST(OPTIMIZE_CXXFLAGS)
- WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
+ WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi'
AC_SUBST(WARN_FLAGS)
])
@@ -1631,6 +1653,9 @@ AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
# Check for the existence of the <stdbool.h> header.
AC_CHECK_HEADERS(stdbool.h)
+ # Check for the existence of the <stdalign.h> header.
+ AC_CHECK_HEADERS(stdalign.h)
+
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
])
@@ -1690,6 +1715,129 @@ AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
])
dnl
+dnl Check whether required C++ overloads are present in <math.h>.
+dnl
+
+AC_DEFUN([GLIBCXX_CHECK_MATH_PROTO], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ case "$host" in
+ *-*-solaris2.*)
+ # Solaris 8 FCS only had an overload for double std::abs(double) in
+ # <iso/math_iso.h>. Patches 111721-04 (SPARC) and 112757-01 (x86)
+ # introduced the full set also found from Solaris 9 onwards.
+ AC_MSG_CHECKING([for float std::abs(float) overload])
+ AC_CACHE_VAL(glibcxx_cv_abs_float, [
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [#include <math.h>
+ namespace std {
+ inline float abs(float __x)
+ { return __builtin_fabsf(__x); }
+ }
+ ])],
+ [glibcxx_cv_abs_float=no],
+ [glibcxx_cv_abs_float=yes]
+ )])
+
+ # autoheader cannot handle indented templates.
+ AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO1],
+ [/* Define if all C++ overloads are available in <math.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#endif])
+ AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO2],
+ [/* Define if only double std::abs(double) is available in <math.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_MATH_H_PROTO2
+#endif])
+
+ if test $glibcxx_cv_abs_float = yes; then
+ AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
+ else
+ AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
+ fi
+ AC_MSG_RESULT($glibcxx_cv_abs_float)
+ ;;
+ esac
+
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether required C++ overloads are present in <stdlib.h>.
+dnl
+
+AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ case "$host" in
+ *-*-solaris2.*)
+ # Solaris 8 FCS lacked the overloads for long std::abs(long) and
+ # ldiv_t std::div(long, long) in <iso/stdlib_iso.h>. Patches 109607-02
+ # (SPARC) and 109608-02 (x86) introduced them.
+ AC_MSG_CHECKING([for long std::abs(long) overload])
+ AC_CACHE_VAL(glibcxx_cv_abs_long, [
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [#include <stdlib.h>
+ namespace std {
+ inline long
+ abs(long __i) { return labs(__i); }
+ }
+ ])],
+ [glibcxx_cv_abs_long=no],
+ [glibcxx_cv_abs_long=yes]
+ )])
+
+ # autoheader cannot handle indented templates.
+ AH_VERBATIM([__CORRECT_ISO_CPP_STDLIB_H_PROTO],
+ [/* Define if all C++ overloads are available in <stdlib.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
+#endif])
+ if test $glibcxx_cv_abs_long = yes; then
+ AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
+ fi
+ AC_MSG_RESULT($glibcxx_cv_abs_long)
+ ;;
+ esac
+
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether required C++ overloads are present in <stdio.h>.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ AC_MSG_CHECKING([for gets declaration])
+ AC_CACHE_VAL(glibcxx_cv_gets, [
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [#include <stdio.h>
+ namespace test
+ {
+ using ::gets;
+ }
+ ])],
+ [glibcxx_cv_gets=yes],
+ [glibcxx_cv_gets=no]
+ )])
+
+ if test $glibcxx_cv_gets = yes; then
+ AC_DEFINE(HAVE_GETS, 1, [Define if gets is available in <stdio.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_gets)
+
+ AC_LANG_RESTORE
+])
+
+dnl
dnl Check whether macros, etc are present for <system_error>
dnl
AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
@@ -1697,7 +1845,9 @@ AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
m4_pushdef([n_syserr], [1])dnl
m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
- EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
+ EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
+ ECHILD, ENOSPC, EPERM,
+ ETIMEDOUT, EWOULDBLOCK],
[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
AC_MSG_CHECKING([for syserr])
AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
@@ -1753,7 +1903,7 @@ dnl
AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
[use MODEL for target locale package],
- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
+ [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
# Deal with gettext issues. Default to not using it (=no) until we detect
# support for it later. Let the user turn it off via --e/d, but let that
@@ -1764,7 +1914,7 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
[],
[enable_nls=yes])
- # Either a known packaage, or "auto"
+ # Either a known package, or "auto"
if test $enable_clocale = no || test $enable_clocale = yes; then
enable_clocale=auto
fi
@@ -1781,7 +1931,11 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
enable_clocale_flag=darwin
;;
*)
- enable_clocale_flag=generic
+ if test x"$with_newlib" = x"yes"; then
+ enable_clocale_flag=newlib
+ else
+ enable_clocale_flag=generic
+ fi
;;
esac
fi
@@ -1915,6 +2069,22 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
CTIME_CC=config/locale/generic/time_members.cc
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
;;
+ newlib)
+ AC_MSG_RESULT(newlib)
+
+ CLOCALE_H=config/locale/generic/c_locale.h
+ CLOCALE_CC=config/locale/generic/c_locale.cc
+ CCODECVT_CC=config/locale/generic/codecvt_members.cc
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/newlib/ctype_members.cc
+ CMESSAGES_H=config/locale/generic/messages_members.h
+ CMESSAGES_CC=config/locale/generic/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_H=config/locale/generic/time_members.h
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
esac
# This is where the testsuite looks for locale catalogs, using the
@@ -2300,6 +2470,80 @@ EOF
])
dnl
+dnl Check for GNU 128-bit integer and floating point types.
+dnl
+dnl Note: also checks that the types aren't standard types.
+dnl
+dnl Defines:
+dnl _GLIBCXX_USE_INT128
+dnl _GLIBCXX_USE_FLOAT128
+dnl
+AC_DEFUN([GLIBCXX_ENABLE_INT128_FLOAT128], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ # Fake what AC_TRY_COMPILE does, without linking as this is
+ # unnecessary for this test.
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+
+template<typename T>
+ struct same<T, T>;
+
+int main()
+{
+ typename same<long, __int128>::type i1;
+ typename same<long long, __int128>::type i2;
+}
+EOF
+
+ AC_MSG_CHECKING([for __int128])
+ if AC_TRY_EVAL(ac_compile); then
+ AC_DEFINE(_GLIBCXX_USE_INT128, 1,
+ [Define if __int128 is supported on this host.])
+ enable_int128=yes
+ else
+ enable_int128=no
+ fi
+ AC_MSG_RESULT($enable_int128)
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+
+template<typename T>
+ struct same<T, T>;
+
+int main()
+{
+ typename same<double, __float128>::type f1;
+ typename same<long double, __float128>::type f2;
+}
+EOF
+
+ AC_MSG_CHECKING([for __float128])
+ if AC_TRY_EVAL(ac_compile); then
+ AC_DEFINE(_GLIBCXX_USE_FLOAT128, 1,
+ [Define if __float128 is supported on this host.])
+ enable_float128=yes
+ else
+ enable_float128=no
+ fi
+ AC_MSG_RESULT($enable_float128)
+ rm -f conftest*
+
+ AC_LANG_RESTORE
+])
+
+dnl
dnl Check for template specializations for the 'wchar_t' type.
dnl
dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
@@ -2470,7 +2714,7 @@ AC_DEFUN([GLIBCXX_ENABLE_PCH], [
dnl
dnl Check for atomic builtins.
dnl See:
-dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
+dnl http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
dnl
dnl This checks to see if the host supports the compiler-generated
dnl builtins for atomic operations for various integral sizes. Note, this
@@ -2480,12 +2724,6 @@ dnl
dnl Note:
dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
dnl
-dnl Defines:
-dnl _GLIBCXX_ATOMIC_BUILTINS_1
-dnl _GLIBCXX_ATOMIC_BUILTINS_2
-dnl _GLIBCXX_ATOMIC_BUILTINS_4
-dnl _GLIBCXX_ATOMIC_BUILTINS_8
-dnl
AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
@@ -2517,19 +2755,16 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
[typedef bool atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();],
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+ ],
[glibcxx_cv_atomic_bool=yes],
[glibcxx_cv_atomic_bool=no])
])
- if test $glibcxx_cv_atomic_bool = yes; then
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
- [Define if builtin atomic operations for bool are supported on this host.])
- fi
AC_MSG_RESULT($glibcxx_cv_atomic_bool)
AC_MSG_CHECKING([for atomic builtins for short])
@@ -2539,19 +2774,16 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
[typedef short atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();],
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+ ],
[glibcxx_cv_atomic_short=yes],
[glibcxx_cv_atomic_short=no])
])
- if test $glibcxx_cv_atomic_short = yes; then
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
- [Define if builtin atomic operations for short are supported on this host.])
- fi
AC_MSG_RESULT($glibcxx_cv_atomic_short)
AC_MSG_CHECKING([for atomic builtins for int])
@@ -2561,19 +2793,16 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
[typedef int atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();],
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+ ],
[glibcxx_cv_atomic_int=yes],
[glibcxx_cv_atomic_int=no])
])
- if test $glibcxx_cv_atomic_int = yes; then
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
- [Define if builtin atomic operations for int are supported on this host.])
- fi
AC_MSG_RESULT($glibcxx_cv_atomic_int)
AC_MSG_CHECKING([for atomic builtins for long long])
@@ -2583,19 +2812,16 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
[typedef long long atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();],
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+ ],
[glibcxx_cv_atomic_long_long=yes],
[glibcxx_cv_atomic_long_long=no])
])
- if test $glibcxx_cv_atomic_long_long = yes; then
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
- [Define if builtin atomic operations for long long are supported on this host.])
- fi
AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
else
@@ -2614,23 +2840,22 @@ int main()
typedef bool atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
AC_MSG_CHECKING([for atomic builtins for bool])
if AC_TRY_EVAL(ac_compile); then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_bool=no
else
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
- [Define if builtin atomic operations for bool are supported on this host.])
glibcxx_cv_atomic_bool=yes
fi
fi
@@ -2644,23 +2869,22 @@ int main()
typedef short atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
AC_MSG_CHECKING([for atomic builtins for short])
if AC_TRY_EVAL(ac_compile); then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_short=no
else
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
- [Define if builtin atomic operations for short are supported on this host.])
glibcxx_cv_atomic_short=yes
fi
fi
@@ -2675,23 +2899,22 @@ int main()
typedef int atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
AC_MSG_CHECKING([for atomic builtins for int])
if AC_TRY_EVAL(ac_compile); then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_int=no
else
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
- [Define if builtin atomic operations for int are supported on this host.])
glibcxx_cv_atomic_int=yes
fi
fi
@@ -2705,23 +2928,22 @@ int main()
typedef long long atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
AC_MSG_CHECKING([for atomic builtins for long long])
if AC_TRY_EVAL(ac_compile); then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_long_long=no
else
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
- [Define if builtin atomic operations for long long are supported on this host.])
glibcxx_cv_atomic_long_long=yes
fi
fi
@@ -2733,8 +2955,12 @@ EOF
CXXFLAGS="$old_CXXFLAGS"
AC_LANG_RESTORE
- # Set atomicity_dir to builtins if either of above tests pass.
- if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
+ # Set atomicity_dir to builtins if all but the long long test above passes.
+ if test $glibcxx_cv_atomic_bool = yes \
+ && test $glibcxx_cv_atomic_short = yes \
+ && test $glibcxx_cv_atomic_int = yes; then
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
+ [Define if the compiler supports C++11 atomics.])
atomicity_dir=cpu/generic/atomicity_builtins
fi
@@ -2828,15 +3054,15 @@ EOF
dnl
dnl Allow visibility attributes to be used on namespaces, objects, etc.
dnl
-dnl --enable-visibility enables attempt to use visibility attributes.
-dnl --disable-visibility turns off all use of visibility attributes.
-dnl + Usage: GLIBCXX_ENABLE_VISIBILITY[(DEFAULT)]
+dnl --enable-libstdcxx-visibility enables attempt to use visibility attributes.
+dnl --disable-libstdcxx-visibility turns off all use of visibility attributes.
+dnl + Usage: GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY[(DEFAULT)]
dnl Where DEFAULT is 'yes'.
dnl
-AC_DEFUN([GLIBCXX_ENABLE_VISIBILITY], [
-GLIBCXX_ENABLE(visibility,$1,,[enables visibility safe usage])
+AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], [
+GLIBCXX_ENABLE(libstdcxx-visibility,$1,,[enables visibility safe usage])
-if test x$enable_visibility = xyes ; then
+if test x$enable_libstdcxx_visibility = xyes ; then
dnl all hail libgfortran
dnl Check whether the target supports hidden visibility.
AC_CACHE_CHECK([whether the target supports hidden visibility],
@@ -2848,12 +3074,12 @@ if test x$enable_visibility = xyes ; then
glibcxx_cv_have_attribute_visibility=no)
CFLAGS="$save_CFLAGS"])
if test $glibcxx_cv_have_attribute_visibility = no; then
- enable_visibility=no
+ enable_libstdcxx_visibility=no
fi
fi
-GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_visibility = yes)
-AC_MSG_NOTICE([visibility supported: $enable_visibility])
+GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_libstdcxx_visibility = yes)
+AC_MSG_NOTICE([visibility supported: $enable_libstdcxx_visibility])
])
@@ -3007,7 +3233,7 @@ changequote([,])dnl
fi
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:16:0
+libtool_VERSION=6:17:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
@@ -3066,17 +3292,14 @@ if test $enable_symvers != no ; then
# The Solaris 2 runtime linker doesn't support the GNU extension of
# binding the same symbol to different versions
solaris2*)
- symvers_renaming=no ;;
+ ;;
# Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
*)
AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
[Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
- symvers_renaming=yes ;;
+ ;;
esac
-else
- symvers_renaming=no
fi
-GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SOL2, test $symvers_renaming = no)
# Now, set up compatibility support, if any.
# In addition, need this to deal with std::size_t mangling in
@@ -3118,34 +3341,10 @@ dnl having to write complex code (the sed commands to clean the macro
dnl namespace are complex and fragile enough as it is). We must also
dnl add a relative path so that -I- is supported properly.
dnl
-dnl Substs:
-dnl glibcxx_thread_h
-dnl
-dnl Defines:
-dnl HAVE_GTHR_DEFAULT
-dnl
AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
AC_MSG_CHECKING([for thread model used by GCC])
target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
AC_MSG_RESULT([$target_thread_file])
-
- if test $target_thread_file != single; then
- AC_DEFINE(HAVE_GTHR_DEFAULT, 1,
- [Define if gthr-default.h exists
- (meaning that threading support is enabled).])
- fi
-
- glibcxx_thread_h=gthr-$target_thread_file.h
-
- dnl Check for __GTHREADS define.
- gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h}
- if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then
- enable_thread=yes
- else
- enable_thread=no
- fi
-
- AC_SUBST(glibcxx_thread_h)
])
@@ -3154,12 +3353,20 @@ dnl Check if gthread implementation defines the types and functions
dnl required by the c++0x thread library. Conforming gthread
dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
dnl
+dnl GLIBCXX_ENABLE_SYMVERS must be done before this.
+dnl
AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
+ GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support])
+
+ if test x$enable_libstdcxx_threads = xauto ||
+ test x$enable_libstdcxx_threads = xyes; then
+
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions \
+ -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
case $target_thread_file in
@@ -3167,20 +3374,53 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
esac
- AC_MSG_CHECKING([for gthreads library])
+ AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
- AC_TRY_COMPILE([#include "gthr.h"],
+ AC_TRY_COMPILE([#include <unistd.h>],
[
- #ifndef __GTHREADS_CXX0X
+ // In case of POSIX threads check _POSIX_TIMEOUTS.
+ #if (defined(_PTHREADS) \
+ && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
#error
#endif
+ ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
- // In case of POSIX threads check _POSIX_TIMEOUTS too.
- #if (defined(_PTHREADS) \
- && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
+ AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
+ [Define to 1 if mutex_timedlock is available.])
+
+ if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
+ else res_mutex_timedlock=no ; fi
+ AC_MSG_RESULT([$res_mutex_timedlock])
+
+ AC_MSG_CHECKING([for gthreads library])
+
+ AC_TRY_COMPILE([#include "gthr.h"],
+ [
+ #ifndef __GTHREADS_CXX0X
#error
#endif
- ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
+ ], [case $target_os in
+ # gthreads support breaks symbol versioning on Solaris 8/9 (PR
+ # libstdc++/52189).
+ solaris2.[[89]]*)
+ if test x$enable_symvers = xno; then
+ ac_has_gthreads=yes
+ elif test x$enable_libstdcxx_threads = xyes; then
+ AC_MSG_WARN([You have requested C++11 threads support, but])
+ AC_MSG_WARN([this breaks symbol versioning.])
+ ac_has_gthreads=yes
+ else
+ ac_has_gthreads=no
+ fi
+ ;;
+ *)
+ ac_has_gthreads=yes
+ ;;
+ esac],
+ [ac_has_gthreads=no])
+ else
+ ac_has_gthreads=no
+ fi
AC_MSG_RESULT([$ac_has_gthreads])
@@ -3213,6 +3453,181 @@ AC_DEFUN([AC_LC_MESSAGES], [
])
])
+dnl
+dnl Check whether get_nprocs is available in <sys/sysinfo.h>, and define _GLIBCXX_USE_GET_NPROCS.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for get_nprocs])
+ AC_CACHE_VAL(glibcxx_cv_GET_NPROCS, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <sys/sysinfo.h>],
+ [int n = get_nprocs();],
+ [glibcxx_cv_GET_NPROCS=yes],
+ [glibcxx_cv_GET_NPROCS=no])
+ ])
+ if test $glibcxx_cv_GET_NPROCS = yes; then
+ AC_DEFINE(_GLIBCXX_USE_GET_NPROCS, 1, [Define if get_nprocs is available in <sys/sysinfo.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_GET_NPROCS)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether sysconf(_SC_NPROCESSORS_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROCESSORS_ONLN.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for _SC_NPROCESSORS_ONLN])
+ AC_CACHE_VAL(glibcxx_cv_SC_NPROCESSORS_ONLN, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <unistd.h>],
+ [int n = sysconf(_SC_NPROCESSORS_ONLN);],
+ [glibcxx_cv_SC_NPROCESSORS_ONLN=yes],
+ [glibcxx_cv_SC_NPROCESSORS_ONLN=no])
+ ])
+ if test $glibcxx_cv_SC_NPROCESSORS_ONLN = yes; then
+ AC_DEFINE(_GLIBCXX_USE_SC_NPROCESSORS_ONLN, 1, [Define if _SC_NPROCESSORS_ONLN is available in <unistd.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_SC_NPROCESSORS_ONLN)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether sysconf(_SC_NPROC_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROC_ONLN.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for _SC_NPROC_ONLN])
+ AC_CACHE_VAL(glibcxx_cv_SC_NPROC_ONLN, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <unistd.h>],
+ [int n = sysconf(_SC_NPROC_ONLN);],
+ [glibcxx_cv_SC_NPROC_ONLN=yes],
+ [glibcxx_cv_SC_NPROC_ONLN=no])
+ ])
+ if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
+ AC_DEFINE(_GLIBCXX_USE_SC_NPROC_ONLN, 1, [Define if _SC_NPROC_ONLN is available in <unistd.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_SC_NPROC_ONLN)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether pthread_num_processors_np is available in <pthread.h>, and define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for pthreads_num_processors_np])
+ AC_CACHE_VAL(glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <pthread.h>],
+ [int n = pthread_num_processors_np();],
+ [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes],
+ [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no])
+ ])
+ if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
+ AC_DEFINE(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP, 1, [Define if pthreads_num_processors_np is available in <pthread.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether sysctl is available in <pthread.h>, and define _GLIBCXX_USE_SYSCTL_HW_NCPU.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for hw.ncpu sysctl])
+ AC_CACHE_VAL(glibcxx_cv_SYSCTL_HW_NCPU, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [
+ #include <stddef.h>
+ #include <sys/sysctl.h>
+ ],
+ [
+ int count;
+ size_t size = sizeof(count);
+ int mib[] = { CTL_HW, HW_NCPU };
+ sysctl(mib, 2, &count, &size, NULL, 0);
+ ],
+ [glibcxx_cv_SYSCTL_HW_NCPU=yes],
+ [glibcxx_cv_SYSCTL_HW_NCPU=no])
+ ])
+ if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
+ AC_DEFINE(_GLIBCXX_USE_SYSCTL_HW_NCPU, 1, [Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_SYSCTL_HW_NCPU)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check to see if python pretty printing can be activated.
+dnl
+dnl --with-python-dir=dir
+dnl installs directory into $prefix/dir
+AC_DEFUN([GLIBCXX_ENABLE_PYTHON], [
+
+AC_MSG_CHECKING([for custom python install directory])
+AC_ARG_WITH([python-dir],
+ AS_HELP_STRING([--with-python-dir],
+ [the location to install Python modules. This path is relative starting from the prefix.]),
+ [with_python_dir=$withval], [with_python_dir="no"])
+AC_MSG_RESULT(${with_python_dir})
+
+# Needed for installing Python modules during make install.
+python_mod_dir="${with_python_dir}"
+AC_SUBST(python_mod_dir)
+GLIBCXX_CONDITIONAL(ENABLE_PYTHONDIR, test $python_mod_dir != no)
+])
+
+dnl
+dnl Check to see if -Werror is disabled.
+dnl
+dnl --enable-werror/--disable-werror
+AC_DEFUN([GLIBCXX_ENABLE_WERROR], [
+ AC_MSG_CHECKING([for -Werror])
+ GLIBCXX_ENABLE(werror,$1,,[turns on -Werror])
+ AC_MSG_RESULT($enable_werror)
+ GLIBCXX_CONDITIONAL(ENABLE_WERROR, test $enable_werror = yes)
+])
+
+
# Macros from the top-level gcc directory.
m4_include([../config/gc++filt.m4])
m4_include([../config/tls.m4])
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index 6ab257fa34..4dea92b6d1 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -60,6 +60,9 @@
/* Define if ECANCELED exists. */
#undef HAVE_ECANCELED
+/* Define if ECHILD exists. */
+#undef HAVE_ECHILD
+
/* Define if EIDRM exists. */
#undef HAVE_EIDRM
@@ -72,6 +75,9 @@
/* Define if ENOLINK exists. */
#undef HAVE_ENOLINK
+/* Define if ENOSPC exists. */
+#undef HAVE_ENOSPC
+
/* Define if ENOSR exists. */
#undef HAVE_ENOSR
@@ -90,15 +96,24 @@
/* Define if EOWNERDEAD exists. */
#undef HAVE_EOWNERDEAD
+/* Define if EPERM exists. */
+#undef HAVE_EPERM
+
/* Define if EPROTO exists. */
#undef HAVE_EPROTO
/* Define if ETIME exists. */
#undef HAVE_ETIME
+/* Define if ETIMEDOUT exists. */
+#undef HAVE_ETIMEDOUT
+
/* Define if ETXTBSY exists. */
#undef HAVE_ETXTBSY
+/* Define if EWOULDBLOCK exists. */
+#undef HAVE_EWOULDBLOCK
+
/* Define to 1 if you have the <execinfo.h> header file. */
#undef HAVE_EXECINFO_H
@@ -156,9 +171,8 @@
/* Define if _Unwind_GetIPInfo is available. */
#undef HAVE_GETIPINFO
-/* Define if gthr-default.h exists (meaning that threading support is
- enabled). */
-#undef HAVE_GTHR_DEFAULT
+/* Define if gets is available in <stdio.h>. */
+#undef HAVE_GETS
/* Define to 1 if you have the `hypot' function. */
#undef HAVE_HYPOT
@@ -319,6 +333,9 @@
/* Define to 1 if you have the `sqrtl' function. */
#undef HAVE_SQRTL
+/* Define to 1 if you have the <stdalign.h> header file. */
+#undef HAVE_STDALIGN_H
+
/* Define to 1 if you have the <stdbool.h> header file. */
#undef HAVE_STDBOOL_H
@@ -380,6 +397,9 @@
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
+/* Define to 1 if you have the <sys/sysinfo.h> header file. */
+#undef HAVE_SYS_SYSINFO_H
+
/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
@@ -672,24 +692,14 @@
/* Version number of package */
#undef VERSION
-/* Define if builtin atomic operations for bool are supported on this host. */
-#undef _GLIBCXX_ATOMIC_BUILTINS_1
-
-/* Define if builtin atomic operations for short are supported on this host.
- */
-#undef _GLIBCXX_ATOMIC_BUILTINS_2
-
-/* Define if builtin atomic operations for int are supported on this host. */
-#undef _GLIBCXX_ATOMIC_BUILTINS_4
-
-/* Define if builtin atomic operations for long long are supported on this
- host. */
-#undef _GLIBCXX_ATOMIC_BUILTINS_8
+/* Define if the compiler supports C++11 atomics. */
+#undef _GLIBCXX_ATOMIC_BUILTINS
/* Define to use concept checking code from the boost libraries. */
#undef _GLIBCXX_CONCEPT_CHECKS
-/* Define if a fully dynamic basic_string is wanted. */
+/* Define to 1 if a fully dynamic basic_string is wanted, 0 to disable,
+ undefined for platform defaults */
#undef _GLIBCXX_FULLY_DYNAMIC_STRING
/* Define if gthreads library is available. */
@@ -789,9 +799,18 @@
this host. */
#undef _GLIBCXX_USE_DECIMAL_FLOAT
+/* Define if __float128 is supported on this host. */
+#undef _GLIBCXX_USE_FLOAT128
+
/* Defined if gettimeofday is available. */
#undef _GLIBCXX_USE_GETTIMEOFDAY
+/* Define if get_nprocs is available in <sys/sysinfo.h>. */
+#undef _GLIBCXX_USE_GET_NPROCS
+
+/* Define if __int128 is supported on this host. */
+#undef _GLIBCXX_USE_INT128
+
/* Define if LFS support is available. */
#undef _GLIBCXX_USE_LFS
@@ -804,6 +823,9 @@
/* Define if NLS translations are to be used. */
#undef _GLIBCXX_USE_NLS
+/* Define if pthreads_num_processors_np is available in <pthread.h>. */
+#undef _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP
+
/* Define if /dev/random and /dev/urandom are available for the random_device
of TR1 (Chapter 5.1). */
#undef _GLIBCXX_USE_RANDOM_TR1
@@ -811,9 +833,36 @@
/* Defined if sched_yield is available. */
#undef _GLIBCXX_USE_SCHED_YIELD
+/* Define if _SC_NPROCESSORS_ONLN is available in <unistd.h>. */
+#undef _GLIBCXX_USE_SC_NPROCESSORS_ONLN
+
+/* Define if _SC_NPROC_ONLN is available in <unistd.h>. */
+#undef _GLIBCXX_USE_SC_NPROC_ONLN
+
+/* Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>. */
+#undef _GLIBCXX_USE_SYSCTL_HW_NCPU
+
/* Define if code specialized for wchar_t should be used. */
#undef _GLIBCXX_USE_WCHAR_T
+/* Define to 1 if mutex_timedlock is available. */
+#undef _GTHREAD_USE_MUTEX_TIMEDLOCK
+
+/* Define if all C++ overloads are available in <math.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#endif
+
+/* Define if only double std::abs(double) is available in <math.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_MATH_H_PROTO2
+#endif
+
+/* Define if all C++ overloads are available in <stdlib.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
+#endif
+
#if defined (HAVE__ACOSF) && ! defined (HAVE_ACOSF)
# define HAVE_ACOSF 1
# define acosf _acosf
diff --git a/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
index 1f774af9e6..1bf009cd8d 100644
--- a/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -3058,6 +3084,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -3176,6 +3228,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3430,6 +3483,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3455,6 +3509,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX
OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
@@ -3611,6 +3666,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
@@ -3913,3 +3988,5 @@ OBJECT:96:_ZTVSt12ctype_bynameIcE@@GLIBCXX_3.4
OBJECT:96:_ZTVSt5ctypeIcE@@GLIBCXX_3.4
OBJECT:96:_ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:96:_ZTVSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+TLS:8:_ZSt11__once_call@@GLIBCXX_3.4.11
+TLS:8:_ZSt15__once_callable@@GLIBCXX_3.4.11
diff --git a/libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt
index c16b3b28f5..28b4a7a1b6 100644
--- a/libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -143,6 +147,8 @@ FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE2atEj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4cendEv@@GLIBCXX_3.4.14
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4dataEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwj@@GLIBCXX_3.4
@@ -153,12 +159,15 @@ FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5crendEv@@GLIBCXX_3.4.14
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5emptyEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5frontEv@@GLIBCXX_3.4.15
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6cbeginEv@@GLIBCXX_3.4.14
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj@@GLIBCXX_3.4
@@ -170,6 +179,7 @@ FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7crbeginEv@@GLIBCXX_3.4.14
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKc@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj@@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_3.4
@@ -204,6 +214,8 @@ FUNC:_ZNKSs2atEj@@GLIBCXX_3.4
FUNC:_ZNKSs3endEv@@GLIBCXX_3.4
FUNC:_ZNKSs4_Rep12_M_is_leakedEv@@GLIBCXX_3.4
FUNC:_ZNKSs4_Rep12_M_is_sharedEv@@GLIBCXX_3.4
+FUNC:_ZNKSs4backEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSs4cendEv@@GLIBCXX_3.4.14
FUNC:_ZNKSs4copyEPcjj@@GLIBCXX_3.4
FUNC:_ZNKSs4dataEv@@GLIBCXX_3.4
FUNC:_ZNKSs4findEPKcj@@GLIBCXX_3.4
@@ -214,12 +226,15 @@ FUNC:_ZNKSs4rendEv@@GLIBCXX_3.4
FUNC:_ZNKSs4sizeEv@@GLIBCXX_3.4
FUNC:_ZNKSs5beginEv@@GLIBCXX_3.4
FUNC:_ZNKSs5c_strEv@@GLIBCXX_3.4
+FUNC:_ZNKSs5crendEv@@GLIBCXX_3.4.14
FUNC:_ZNKSs5emptyEv@@GLIBCXX_3.4
+FUNC:_ZNKSs5frontEv@@GLIBCXX_3.4.15
FUNC:_ZNKSs5rfindEPKcj@@GLIBCXX_3.4
FUNC:_ZNKSs5rfindEPKcjj@@GLIBCXX_3.4
FUNC:_ZNKSs5rfindERKSsj@@GLIBCXX_3.4
FUNC:_ZNKSs5rfindEcj@@GLIBCXX_3.4
FUNC:_ZNKSs6_M_repEv@@GLIBCXX_3.4
+FUNC:_ZNKSs6cbeginEv@@GLIBCXX_3.4.14
FUNC:_ZNKSs6lengthEv@@GLIBCXX_3.4
FUNC:_ZNKSs6rbeginEv@@GLIBCXX_3.4
FUNC:_ZNKSs6substrEjj@@GLIBCXX_3.4
@@ -231,6 +246,7 @@ FUNC:_ZNKSs7compareEjjPKc@@GLIBCXX_3.4
FUNC:_ZNKSs7compareEjjPKcj@@GLIBCXX_3.4
FUNC:_ZNKSs7compareEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNKSs7compareEjjRKSsjj@@GLIBCXX_3.4
+FUNC:_ZNKSs7crbeginEv@@GLIBCXX_3.4.14
FUNC:_ZNKSs8_M_checkEjPKc@@GLIBCXX_3.4
FUNC:_ZNKSs8_M_limitEjj@@GLIBCXX_3.4
FUNC:_ZNKSs8capacityEv@@GLIBCXX_3.4
@@ -238,7 +254,9 @@ FUNC:_ZNKSs8max_sizeEv@@GLIBCXX_3.4
FUNC:_ZNKSs9_M_ibeginEv@@GLIBCXX_3.4
FUNC:_ZNKSsixEj@@GLIBCXX_3.4
FUNC:_ZNKSt10bad_typeid4whatEv@@GLIBCXX_3.4.9
+FUNC:_ZNKSt10error_code23default_error_conditionEv@@GLIBCXX_3.4.11
FUNC:_ZNKSt10istrstream5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10lock_error4whatEv@@GLIBCXX_3.4.11
FUNC:_ZNKSt10moneypunctIcLb0EE10neg_formatEv@@GLIBCXX_3.4
FUNC:_ZNKSt10moneypunctIcLb0EE10pos_formatEv@@GLIBCXX_3.4
FUNC:_ZNKSt10moneypunctIcLb0EE11curr_symbolEv@@GLIBCXX_3.4
@@ -335,6 +353,8 @@ FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4
FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4
FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4
FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNKSt12bad_weak_ptr4whatEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSt12future_error4whatEv@@GLIBCXX_3.4.14
FUNC:_ZNKSt12strstreambuf6pcountEv@@GLIBCXX_3.4
FUNC:_ZNKSt13bad_exception4whatEv@@GLIBCXX_3.4.9
FUNC:_ZNKSt13basic_filebufIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
@@ -361,6 +381,9 @@ FUNC:_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
FUNC:_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE5rdbufEv@@GLIBCXX_3.4
FUNC:_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
FUNC:_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt14error_category10equivalentERKSt10error_codei@@GLIBCXX_3.4.11
+FUNC:_ZNKSt14error_category10equivalentEiRKSt15error_condition@@GLIBCXX_3.4.11
+FUNC:_ZNKSt14error_category23default_error_conditionEi@@GLIBCXX_3.4.11
FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE4gptrEv@@GLIBCXX_3.4
FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv@@GLIBCXX_3.4
FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5ebackEv@@GLIBCXX_3.4
@@ -398,11 +421,14 @@ FUNC:_ZNKSt4hashIRKSbIwSt11char_traitsIwESaIwEEEclES5_@@GLIBCXX_3.4.10
FUNC:_ZNKSt4hashIRKSsEclES1_@@GLIBCXX_3.4.10
FUNC:_ZNKSt4hashISbIwSt11char_traitsIwESaIwEEEclES3_@@GLIBCXX_3.4.10
FUNC:_ZNKSt4hashISsEclESs@@GLIBCXX_3.4.10
+FUNC:_ZNKSt4hashISt10error_codeEclES0_@@GLIBCXX_3.4.11
FUNC:_ZNKSt4hashIeEclEe@@GLIBCXX_3.4.10
FUNC:_ZNKSt5ctypeIcE10do_tolowerEPcPKc@@GLIBCXX_3.4
FUNC:_ZNKSt5ctypeIcE10do_tolowerEc@@GLIBCXX_3.4
FUNC:_ZNKSt5ctypeIcE10do_toupperEPcPKc@@GLIBCXX_3.4
FUNC:_ZNKSt5ctypeIcE10do_toupperEc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE13_M_widen_initEv@@GLIBCXX_3.4.11
+FUNC:_ZNKSt5ctypeIcE14_M_narrow_initEv@@GLIBCXX_3.4.11
FUNC:_ZNKSt5ctypeIcE8do_widenEPKcS2_Pc@@GLIBCXX_3.4
FUNC:_ZNKSt5ctypeIcE8do_widenEc@@GLIBCXX_3.4
FUNC:_ZNKSt5ctypeIcE9do_narrowEPKcS2_cPc@@GLIBCXX_3.4
@@ -613,6 +639,7 @@ FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_week
FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14
FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
@@ -628,6 +655,7 @@ FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_get_week
FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14
FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
@@ -708,17 +736,23 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIN9__gnu_cxx17__normal_iteratorIPwS2_EEEES6_T_S8_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.14
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_@@GLIBCXX_3.4.14
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE2atEj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_@@GLIBCXX_3.4
@@ -733,6 +767,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.15
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4
@@ -740,16 +775,21 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5clearEv@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EE@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5frontEv@@GLIBCXX_3.4.15
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendESt16initializer_listIwE@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendEjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEOS2_@@GLIBCXX_3.4.14
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignESt16initializer_listIwE@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EESt16initializer_listIwE@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw@@GLIBCXX_3.4
@@ -773,6 +813,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_St16initializer_listIwE@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj@@GLIBCXX_3.4
@@ -780,27 +821,32 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_@@GLIBCXX_3.4.14
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EjwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPKwEET_S6_RKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPwEET_S5_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_@@GLIBCXX_3.4.15
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EjwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@@GLIBCXX_3.4
@@ -808,12 +854,15 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2IPKwEET_S6_RKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2IPwEET_S5_RKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSEOS2_@@GLIBCXX_3.4.14
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSESt16initializer_listIwE@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSEw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLEPKw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLESt16initializer_listIwE@@GLIBCXX_3.4.11
FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLEw@@GLIBCXX_3.4
FUNC:_ZNSdC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
FUNC:_ZNSdC1Ev@@GLIBCXX_3.4
@@ -924,17 +973,23 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
FUNC:_ZNSs12_S_constructEjcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPcSsEEEES2_T_S4_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14
FUNC:_ZNSs12_S_empty_repEv@@GLIBCXX_3.4
FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@@GLIBCXX_3.4
FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@@GLIBCXX_3.4
FUNC:_ZNSs13_S_copy_charsEPcPKcS1_@@GLIBCXX_3.4
FUNC:_ZNSs13_S_copy_charsEPcS_S_@@GLIBCXX_3.4
+FUNC:_ZNSs13shrink_to_fitEv@@GLIBCXX_3.4.14
FUNC:_ZNSs14_M_replace_auxEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs15_M_replace_safeEjjPKcj@@GLIBCXX_3.4
+FUNC:_ZNSs18_S_construct_aux_2EjcRKSaIcE@@GLIBCXX_3.4.14
FUNC:_ZNSs2atEj@@GLIBCXX_3.4
FUNC:_ZNSs3endEv@@GLIBCXX_3.4
FUNC:_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4
@@ -949,6 +1004,7 @@ FUNC:_ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4
FUNC:_ZNSs4_Rep7_M_grabERKSaIcES2_@@GLIBCXX_3.4
FUNC:_ZNSs4_Rep8_M_cloneERKSaIcEj@@GLIBCXX_3.4
FUNC:_ZNSs4_Rep9_S_createEjjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs4backEv@@GLIBCXX_3.4.15
FUNC:_ZNSs4rendEv@@GLIBCXX_3.4
FUNC:_ZNSs4swapERSs@@GLIBCXX_3.4
FUNC:_ZNSs5beginEv@@GLIBCXX_3.4
@@ -956,16 +1012,21 @@ FUNC:_ZNSs5clearEv@@GLIBCXX_3.4
FUNC:_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE@@GLIBCXX_3.4
FUNC:_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_@@GLIBCXX_3.4
FUNC:_ZNSs5eraseEjj@@GLIBCXX_3.4
+FUNC:_ZNSs5frontEv@@GLIBCXX_3.4.15
FUNC:_ZNSs6appendEPKc@@GLIBCXX_3.4
FUNC:_ZNSs6appendEPKcj@@GLIBCXX_3.4
FUNC:_ZNSs6appendERKSs@@GLIBCXX_3.4
FUNC:_ZNSs6appendERKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSs6appendESt16initializer_listIcE@@GLIBCXX_3.4.11
FUNC:_ZNSs6appendEjc@@GLIBCXX_3.4
+FUNC:_ZNSs6assignEOSs@@GLIBCXX_3.4.14
FUNC:_ZNSs6assignEPKc@@GLIBCXX_3.4
FUNC:_ZNSs6assignEPKcj@@GLIBCXX_3.4
FUNC:_ZNSs6assignERKSs@@GLIBCXX_3.4
FUNC:_ZNSs6assignERKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSs6assignESt16initializer_listIcE@@GLIBCXX_3.4.11
FUNC:_ZNSs6assignEjc@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEESt16initializer_listIcE@@GLIBCXX_3.4.11
FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc@@GLIBCXX_3.4
FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@@GLIBCXX_3.4
FUNC:_ZNSs6insertEjPKc@@GLIBCXX_3.4
@@ -989,6 +1050,7 @@ FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_St16initializer_listIcE@@GLIBCXX_3.4.11
FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjPKc@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjPKcj@@GLIBCXX_3.4
@@ -996,27 +1058,32 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
+FUNC:_ZNSsC1EOSs@@GLIBCXX_3.4.14
FUNC:_ZNSsC1EPKcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC1EPKcjRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC1ERKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSsC1ERKSsjj@@GLIBCXX_3.4
FUNC:_ZNSsC1ERKSsjjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1ESt16initializer_listIcERKSaIcE@@GLIBCXX_3.4.11
FUNC:_ZNSsC1EjcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC1Ev@@GLIBCXX_3.4
FUNC:_ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC1IPKcEET_S2_RKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC1IPcEET_S1_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2EOSs@@GLIBCXX_3.4.15
FUNC:_ZNSsC2EPKcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC2EPKcjRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC2ERKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSsC2ERKSsjj@@GLIBCXX_3.4
FUNC:_ZNSsC2ERKSsjjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2ESt16initializer_listIcERKSaIcE@@GLIBCXX_3.4.11
FUNC:_ZNSsC2EjcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC2Ev@@GLIBCXX_3.4
FUNC:_ZNSsC2IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCXX_3.4
@@ -1024,12 +1091,15 @@ FUNC:_ZNSsC2IPKcEET_S2_RKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsC2IPcEET_S1_RKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSsD1Ev@@GLIBCXX_3.4
FUNC:_ZNSsD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSsaSEOSs@@GLIBCXX_3.4.14
FUNC:_ZNSsaSEPKc@@GLIBCXX_3.4
FUNC:_ZNSsaSERKSs@@GLIBCXX_3.4
+FUNC:_ZNSsaSESt16initializer_listIcE@@GLIBCXX_3.4.11
FUNC:_ZNSsaSEc@@GLIBCXX_3.4
FUNC:_ZNSsixEj@@GLIBCXX_3.4
FUNC:_ZNSspLEPKc@@GLIBCXX_3.4
FUNC:_ZNSspLERKSs@@GLIBCXX_3.4
+FUNC:_ZNSspLESt16initializer_listIcE@@GLIBCXX_3.4.11
FUNC:_ZNSspLEc@@GLIBCXX_3.4
FUNC:_ZNSt10__num_base15_S_format_floatERKSt8ios_basePcc@@GLIBCXX_3.4
FUNC:_ZNSt10bad_typeidD0Ev@@GLIBCXX_3.4
@@ -1130,6 +1200,10 @@ FUNC:_ZNSt11range_errorC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
@@ -1146,6 +1220,9 @@ FUNC:_ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@@GLIBCXX_3.4
FUNC:_ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@@GLIBCXX_3.4
FUNC:_ZNSt12__basic_fileIcED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt12ctype_bynameIcEC1EPKcj@@GLIBCXX_3.4
FUNC:_ZNSt12ctype_bynameIcEC2EPKcj@@GLIBCXX_3.4
FUNC:_ZNSt12ctype_bynameIcED0Ev@@GLIBCXX_3.4
@@ -1160,14 +1237,20 @@ FUNC:_ZNSt12domain_errorC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt12domain_errorC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt12domain_errorD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt12domain_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12domain_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12future_errorD0Ev@@GLIBCXX_3.4.14
+FUNC:_ZNSt12future_errorD1Ev@@GLIBCXX_3.4.14
+FUNC:_ZNSt12future_errorD2Ev@@GLIBCXX_3.4.14
FUNC:_ZNSt12length_errorC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt12length_errorC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt12length_errorD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt12length_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12length_errorD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt12out_of_rangeC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt12out_of_rangeC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt12out_of_rangeD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt12out_of_rangeD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12out_of_rangeD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt12strstreambuf3strEv@@GLIBCXX_3.4
FUNC:_ZNSt12strstreambuf6freezeEb@@GLIBCXX_3.4
FUNC:_ZNSt12strstreambuf6setbufEPci@@GLIBCXX_3.4
@@ -1198,10 +1281,14 @@ FUNC:_ZNSt12strstreambufC2Ei@@GLIBCXX_3.4
FUNC:_ZNSt12strstreambufD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt12strstreambufD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt12strstreambufD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12system_errorD0Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt12system_errorD1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt12system_errorD2Ev@@GLIBCXX_3.4.11
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE14_M_get_ext_posER11__mbstate_t@@GLIBCXX_3.4.15
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE15_M_create_pbackEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE16_M_destroy_pbackEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE19_M_terminate_outputEv@@GLIBCXX_3.4
@@ -1209,6 +1296,7 @@ FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@@GLIB
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE26_M_destroy_internal_bufferEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE27_M_allocate_internal_bufferEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCXX_3.4
@@ -1228,6 +1316,7 @@ FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE14_M_get_ext_posER11__mbstate_t@@GLIBCXX_3.4.15
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE15_M_create_pbackEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE16_M_destroy_pbackEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE19_M_terminate_outputEv@@GLIBCXX_3.4
@@ -1235,6 +1324,7 @@ FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@@GLIB
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE26_M_destroy_internal_bufferEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE27_M_allocate_internal_bufferEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE5imbueERKSt6locale@@GLIBCXX_3.4
@@ -1254,21 +1344,27 @@ FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
@@ -1381,21 +1477,27 @@ FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13runtime_errorD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13runtime_errorD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
@@ -1408,21 +1510,27 @@ FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
@@ -1447,17 +1555,29 @@ FUNC:_ZNSt14collate_bynameIwEC2EPKcj@@GLIBCXX_3.4
FUNC:_ZNSt14collate_bynameIwED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14collate_bynameIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt14collate_bynameIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14error_categoryC1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryC2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt14overflow_errorC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt14overflow_errorC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt14overflow_errorD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt14overflow_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14overflow_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt15_List_node_base10_M_reverseEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt15_List_node_base11_M_transferEPS_S0_@@GLIBCXX_3.4.14
FUNC:_ZNSt15_List_node_base4hookEPS_@@GLIBCXX_3.4
FUNC:_ZNSt15_List_node_base4swapERS_S0_@@GLIBCXX_3.4
FUNC:_ZNSt15_List_node_base6unhookEv@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base7_M_hookEPS_@@GLIBCXX_3.4.14
FUNC:_ZNSt15_List_node_base7reverseEv@@GLIBCXX_3.4
FUNC:_ZNSt15_List_node_base8transferEPS_S0_@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1497,6 +1617,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1541,6 +1663,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1558,6 +1681,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1612,6 +1736,7 @@ FUNC:_ZNSt15underflow_errorC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt15underflow_errorC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt15underflow_errorD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt15underflow_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15underflow_errorD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt16__numpunct_cacheIcE8_M_cacheERKSt6locale@@GLIBCXX_3.4
FUNC:_ZNSt16__numpunct_cacheIcEC1Ej@@GLIBCXX_3.4
FUNC:_ZNSt16__numpunct_cacheIcEC2Ej@@GLIBCXX_3.4
@@ -1628,6 +1753,7 @@ FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4
FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt16invalid_argumentD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16invalid_argumentD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt17__timepunct_cacheIcEC1Ej@@GLIBCXX_3.4
FUNC:_ZNSt17__timepunct_cacheIcEC2Ej@@GLIBCXX_3.4
FUNC:_ZNSt17__timepunct_cacheIcED0Ev@@GLIBCXX_3.4
@@ -1638,6 +1764,9 @@ FUNC:_ZNSt17__timepunct_cacheIwEC2Ej@@GLIBCXX_3.4
FUNC:_ZNSt17__timepunct_cacheIwED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt17__timepunct_cacheIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt17__timepunct_cacheIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17bad_function_callD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt17bad_function_callD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt17bad_function_callD2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@@GLIBCXX_3.4
FUNC:_ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@@GLIBCXX_3.4
FUNC:_ZNSt17moneypunct_bynameIcLb0EED0Ev@@GLIBCXX_3.4
@@ -1698,6 +1827,13 @@ FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GL
FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18condition_variable10notify_allEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variable10notify_oneEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableC1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableC2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableD1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableD2Ev@@GLIBCXX_3.4.11
FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCXX_3.4
FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
@@ -1734,6 +1870,10 @@ FUNC:_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@@GLIBCXX_3.4.5
FUNC:_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4
FUNC:_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@@GLIBCXX_3.4.5
FUNC:_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4
+FUNC:_ZNSt22condition_variable_anyC1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt22condition_variable_anyC2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt22condition_variable_anyD1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt22condition_variable_anyD2Ev@@GLIBCXX_3.4.11
FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCXX_3.4
FUNC:_ZNSt5ctypeIcEC1EP15__locale_structPKtbj@@GLIBCXX_3.4
FUNC:_ZNSt5ctypeIcEC1EPKtbj@@GLIBCXX_3.4
@@ -1750,11 +1890,16 @@ FUNC:_ZNSt5ctypeIwEC2Ej@@GLIBCXX_3.4
FUNC:_ZNSt5ctypeIwED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt5ctypeIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt5ctypeIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6__norm15_List_node_base10_M_reverseEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt6__norm15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.14
FUNC:_ZNSt6__norm15_List_node_base4hookEPS0_@@GLIBCXX_3.4.9
FUNC:_ZNSt6__norm15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.9
FUNC:_ZNSt6__norm15_List_node_base6unhookEv@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.14
FUNC:_ZNSt6__norm15_List_node_base7reverseEv@@GLIBCXX_3.4.9
FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
@@ -1797,6 +1942,10 @@ FUNC:_ZNSt6localeC2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
+FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
+FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1Ej@@GLIBCXX_3.4
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj@@GLIBCXX_3.4
@@ -1845,6 +1994,11 @@ FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3
FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8__detail15_List_node_base10_M_reverseEv@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15
FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4
@@ -1931,11 +2085,17 @@ FUNC:_ZNSt8valarrayIjEC2Ej@@GLIBCXX_3.4
FUNC:_ZNSt8valarrayIjED1Ev@@GLIBCXX_3.4
FUNC:_ZNSt8valarrayIjED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt8valarrayIjEixEj@@GLIBCXX_3.4
+FUNC:_ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__cxx199815_List_node_base10_M_reverseEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__cxx199815_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.14
FUNC:_ZNSt9__cxx199815_List_node_base4hookEPS0_@@GLIBCXX_3.4.10
FUNC:_ZNSt9__cxx199815_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.10
FUNC:_ZNSt9__cxx199815_List_node_base6unhookEv@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.14
FUNC:_ZNSt9__cxx199815_List_node_base7reverseEv@@GLIBCXX_3.4.10
FUNC:_ZNSt9__cxx199815_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
FUNC:_ZNSt9bad_allocD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt9bad_allocD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt9bad_allocD2Ev@@GLIBCXX_3.4
@@ -2010,16 +2170,23 @@ FUNC:_ZNSt9strstreamD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt9type_infoD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4
+FUNC:_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11
+FUNC:_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11
FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4
+FUNC:_ZSt11_Hash_bytesPKvjj@@CXXABI_1.3.5
FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4
FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCXX_3.4
FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCXX_3.4
FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCXX_3.4
FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4
+FUNC:_ZSt15_Fnv_hash_bytesPKvjj@@CXXABI_1.3.5
+FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15
FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4
+FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11
FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9
FUNC:_ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9
FUNC:_ZSt16__throw_bad_castv@@GLIBCXX_3.4
+FUNC:_ZSt16generic_categoryv@@GLIBCXX_3.4.11
FUNC:_ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6
FUNC:_ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6
FUNC:_ZSt17__throw_bad_allocv@@GLIBCXX_3.4
@@ -2033,11 +2200,14 @@ FUNC:_ZSt18uncaught_exceptionv@@GLIBCXX_3.4
FUNC:_ZSt19__throw_ios_failurePKc@@GLIBCXX_3.4
FUNC:_ZSt19__throw_logic_errorPKc@@GLIBCXX_3.4
FUNC:_ZSt19__throw_range_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt19__throw_regex_errorNSt15regex_constants10error_typeE@@GLIBCXX_3.4.15
FUNC:_ZSt20_Rb_tree_black_countPKSt18_Rb_tree_node_baseS1_@@GLIBCXX_3.4
FUNC:_ZSt20_Rb_tree_rotate_leftPSt18_Rb_tree_node_baseRS0_@@GLIBCXX_3.4
FUNC:_ZSt20__throw_domain_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt20__throw_future_errori@@GLIBCXX_3.4.14
FUNC:_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4
FUNC:_ZSt20__throw_out_of_rangePKc@@GLIBCXX_3.4
+FUNC:_ZSt20__throw_system_errori@@GLIBCXX_3.4.11
FUNC:_ZSt21_Rb_tree_rotate_rightPSt18_Rb_tree_node_baseRS0_@@GLIBCXX_3.4
FUNC:_ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9
FUNC:_ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9
@@ -2046,6 +2216,7 @@ FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4
FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4
FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4
FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4
+FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14
FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4
FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4
FUNC:_ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4
@@ -2243,14 +2414,19 @@ FUNC:_Znaj@@GLIBCXX_3.4
FUNC:_ZnajRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
+FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
+FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2261,6 +2437,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2273,34 +2450,49 @@ FUNC:__cxa_vec_new3@@CXXABI_1.3
FUNC:__cxa_vec_new@@CXXABI_1.3
FUNC:__dynamic_cast@@CXXABI_1.3
FUNC:__gxx_personality_v0@@CXXABI_1.3
-FUNC:acosl@@GLIBCXX_3.4.3
-FUNC:asinl@@GLIBCXX_3.4.3
-FUNC:atan2l@@GLIBCXX_3.4
-FUNC:atanl@@GLIBCXX_3.4.3
-FUNC:ceill@@GLIBCXX_3.4.3
-FUNC:coshl@@GLIBCXX_3.4
-FUNC:cosl@@GLIBCXX_3.4
-FUNC:expl@@GLIBCXX_3.4
-FUNC:floorl@@GLIBCXX_3.4.3
-FUNC:fmodl@@GLIBCXX_3.4.3
-FUNC:frexpl@@GLIBCXX_3.4.3
-FUNC:hypotl@@GLIBCXX_3.4
-FUNC:ldexpl@@GLIBCXX_3.4.3
-FUNC:log10l@@GLIBCXX_3.4
-FUNC:logl@@GLIBCXX_3.4
-FUNC:modfl@@GLIBCXX_3.4.3
-FUNC:powl@@GLIBCXX_3.4
-FUNC:sinhl@@GLIBCXX_3.4
-FUNC:sinl@@GLIBCXX_3.4
-FUNC:sqrtl@@GLIBCXX_3.4
-FUNC:tanhl@@GLIBCXX_3.4
-FUNC:tanl@@GLIBCXX_3.4
+FUNC:__once_proxy@@GLIBCXX_3.4.11
+FUNC:acosl@GLIBCXX_3.4.3
+FUNC:asinl@GLIBCXX_3.4.3
+FUNC:atan2l@GLIBCXX_3.4
+FUNC:atanl@GLIBCXX_3.4.3
+FUNC:atomic_flag_clear_explicit@@GLIBCXX_3.4.11
+FUNC:atomic_flag_test_and_set_explicit@@GLIBCXX_3.4.11
+FUNC:ceill@GLIBCXX_3.4.3
+FUNC:coshl@GLIBCXX_3.4
+FUNC:cosl@GLIBCXX_3.4
+FUNC:expl@GLIBCXX_3.4
+FUNC:floorl@GLIBCXX_3.4.3
+FUNC:fmodl@GLIBCXX_3.4.3
+FUNC:frexpl@GLIBCXX_3.4.3
+FUNC:hypotl@GLIBCXX_3.4
+FUNC:ldexpl@GLIBCXX_3.4.3
+FUNC:log10l@GLIBCXX_3.4
+FUNC:logl@GLIBCXX_3.4
+FUNC:modfl@GLIBCXX_3.4.3
+FUNC:powl@GLIBCXX_3.4
+FUNC:sinhl@GLIBCXX_3.4
+FUNC:sinl@GLIBCXX_3.4
+FUNC:sqrtl@GLIBCXX_3.4
+FUNC:tanhl@GLIBCXX_3.4
+FUNC:tanl@GLIBCXX_3.4
OBJECT:0:CXXABI_1.3
OBJECT:0:CXXABI_1.3.1
OBJECT:0:CXXABI_1.3.2
+OBJECT:0:CXXABI_1.3.3
+OBJECT:0:CXXABI_1.3.4
+OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
+OBJECT:0:GLIBCXX_3.4.11
+OBJECT:0:GLIBCXX_3.4.12
+OBJECT:0:GLIBCXX_3.4.13
+OBJECT:0:GLIBCXX_3.4.14
+OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2328,17 +2520,22 @@ OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4
+OBJECT:12:_ZTISt10lock_error@@GLIBCXX_3.4.11
OBJECT:12:_ZTISt10ostrstream@@GLIBCXX_3.4
OBJECT:12:_ZTISt11__timepunctIcE@@GLIBCXX_3.4
OBJECT:12:_ZTISt11__timepunctIwE@@GLIBCXX_3.4
OBJECT:12:_ZTISt11logic_error@@GLIBCXX_3.4
OBJECT:12:_ZTISt11range_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt11regex_error@@GLIBCXX_3.4.15
+OBJECT:12:_ZTISt12bad_weak_ptr@@GLIBCXX_3.4.15
OBJECT:12:_ZTISt12ctype_bynameIcE@@GLIBCXX_3.4
OBJECT:12:_ZTISt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:12:_ZTISt12domain_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12future_error@@GLIBCXX_3.4.14
OBJECT:12:_ZTISt12length_error@@GLIBCXX_3.4
OBJECT:12:_ZTISt12out_of_range@@GLIBCXX_3.4
OBJECT:12:_ZTISt12strstreambuf@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12system_error@@GLIBCXX_3.4.11
OBJECT:12:_ZTISt13bad_exception@@GLIBCXX_3.4
OBJECT:12:_ZTISt13basic_filebufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:12:_ZTISt13basic_filebufIwSt11char_traitsIwEE@@GLIBCXX_3.4
@@ -2366,6 +2563,7 @@ OBJECT:12:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE
OBJECT:12:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTISt15underflow_error@@GLIBCXX_3.4
OBJECT:12:_ZTISt16invalid_argument@@GLIBCXX_3.4
+OBJECT:12:_ZTISt17bad_function_call@@GLIBCXX_3.4.15
OBJECT:12:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4
OBJECT:12:_ZTISt17moneypunct_bynameIcLb1EE@@GLIBCXX_3.4
OBJECT:12:_ZTISt17moneypunct_bynameIwLb0EE@@GLIBCXX_3.4
@@ -2420,6 +2618,7 @@ OBJECT:14:_ZTSSt7collateIwE@@GLIBCXX_3.4
OBJECT:15:_ZTSSt10bad_typeid@@GLIBCXX_3.4
OBJECT:15:_ZTSSt10ctype_base@@GLIBCXX_3.4
OBJECT:15:_ZTSSt10istrstream@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt10lock_error@@GLIBCXX_3.4.11
OBJECT:15:_ZTSSt10money_base@@GLIBCXX_3.4
OBJECT:15:_ZTSSt10ostrstream@@GLIBCXX_3.4
OBJECT:15:_ZTSSt8messagesIcE@@GLIBCXX_3.4
@@ -2428,6 +2627,18 @@ OBJECT:15:_ZTSSt8numpunctIcE@@GLIBCXX_3.4
OBJECT:15:_ZTSSt8numpunctIwE@@GLIBCXX_3.4
OBJECT:16:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
OBJECT:16:_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
+OBJECT:16:_ZTIPDd@@CXXABI_1.3.4
+OBJECT:16:_ZTIPDe@@CXXABI_1.3.4
+OBJECT:16:_ZTIPDf@@CXXABI_1.3.4
+OBJECT:16:_ZTIPDi@@CXXABI_1.3.3
+OBJECT:16:_ZTIPDn@@CXXABI_1.3.5
+OBJECT:16:_ZTIPDs@@CXXABI_1.3.3
+OBJECT:16:_ZTIPKDd@@CXXABI_1.3.4
+OBJECT:16:_ZTIPKDe@@CXXABI_1.3.4
+OBJECT:16:_ZTIPKDf@@CXXABI_1.3.4
+OBJECT:16:_ZTIPKDi@@CXXABI_1.3.3
+OBJECT:16:_ZTIPKDn@@CXXABI_1.3.5
+OBJECT:16:_ZTIPKDs@@CXXABI_1.3.3
OBJECT:16:_ZTIPKa@@CXXABI_1.3
OBJECT:16:_ZTIPKb@@CXXABI_1.3
OBJECT:16:_ZTIPKc@@CXXABI_1.3
@@ -2482,21 +2693,79 @@ OBJECT:16:_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:16:_ZTVSt9basic_iosIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:17:_ZTSSt12codecvt_base@@GLIBCXX_3.4
OBJECT:17:_ZTSSt12domain_error@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12future_error@@GLIBCXX_3.4.14
OBJECT:17:_ZTSSt12length_error@@GLIBCXX_3.4
OBJECT:17:_ZTSSt12out_of_range@@GLIBCXX_3.4
OBJECT:17:_ZTSSt12strstreambuf@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12system_error@@GLIBCXX_3.4.11
OBJECT:18:_ZTSNSt6locale5facetE@@GLIBCXX_3.4
OBJECT:18:_ZTSSt13bad_exception@@GLIBCXX_3.4
OBJECT:18:_ZTSSt13messages_base@@GLIBCXX_3.4
OBJECT:18:_ZTSSt13runtime_error@@GLIBCXX_3.4
OBJECT:19:_ZTSSt11__timepunctIcE@@GLIBCXX_3.4
OBJECT:19:_ZTSSt11__timepunctIwE@@GLIBCXX_3.4
+OBJECT:19:_ZTSSt14error_category@@GLIBCXX_3.4.11
OBJECT:19:_ZTSSt14overflow_error@@GLIBCXX_3.4
OBJECT:1:_ZNSs4_Rep11_S_terminalE@@GLIBCXX_3.4
OBJECT:1:_ZNSt10moneypunctIcLb0EE4intlE@@GLIBCXX_3.4
OBJECT:1:_ZNSt10moneypunctIcLb1EE4intlE@@GLIBCXX_3.4
OBJECT:1:_ZNSt10moneypunctIwLb0EE4intlE@@GLIBCXX_3.4
OBJECT:1:_ZNSt10moneypunctIwLb1EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt12placeholders2_1E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_2E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_3E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_4E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_5E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_6E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_7E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_8E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_9E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_10E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_11E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_12E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_13E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_14E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_15E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_16E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_17E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_18E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_19E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_20E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_21E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_22E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_23E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_24E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_25E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_26E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_27E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_28E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_29E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt14numeric_limitsIDiE10is_boundedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE10is_integerE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE12has_infinityE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE13has_quiet_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE14is_specializedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE15has_denorm_lossE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE15tinyness_beforeE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE17has_signaling_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE5trapsE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE8is_exactE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE9is_iec559E@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE9is_moduloE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE9is_signedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE10is_boundedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE10is_integerE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE12has_infinityE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE13has_quiet_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE14is_specializedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE15has_denorm_lossE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE15tinyness_beforeE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE17has_signaling_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE5trapsE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE8is_exactE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE9is_iec559E@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE9is_moduloE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE9is_signedE@@GLIBCXX_3.4.11
OBJECT:1:_ZNSt14numeric_limitsIaE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIaE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIaE12has_infinityE@@GLIBCXX_3.4
@@ -2722,17 +2991,26 @@ OBJECT:1:_ZNSt21__numeric_limits_base8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt21__numeric_limits_base9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
OBJECT:1:_ZSt7nothrow@@GLIBCXX_3.4
OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
OBJECT:20:_ZTVSt11logic_error@@GLIBCXX_3.4
OBJECT:20:_ZTVSt11range_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt11regex_error@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVSt12bad_weak_ptr@@GLIBCXX_3.4.15
OBJECT:20:_ZTVSt12domain_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt12future_error@@GLIBCXX_3.4.14
OBJECT:20:_ZTVSt12length_error@@GLIBCXX_3.4
OBJECT:20:_ZTVSt12out_of_range@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt12system_error@@GLIBCXX_3.4.11
OBJECT:20:_ZTVSt13bad_exception@@GLIBCXX_3.4
OBJECT:20:_ZTVSt13runtime_error@@GLIBCXX_3.4
OBJECT:20:_ZTVSt14overflow_error@@GLIBCXX_3.4
@@ -2740,6 +3018,7 @@ OBJECT:20:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE
OBJECT:20:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVSt16invalid_argument@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15
OBJECT:20:_ZTVSt8bad_cast@@GLIBCXX_3.4
OBJECT:20:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
@@ -2843,6 +3122,7 @@ OBJECT:36:_ZTSSt14codecvt_bynameIwc11__mbstate_tE@@GLIBCXX_3.4
OBJECT:36:_ZTVN10__cxxabiv117__pbase_type_infoE@@CXXABI_1.3
OBJECT:36:_ZTVN10__cxxabiv119__pointer_type_infoE@@CXXABI_1.3
OBJECT:36:_ZTVN10__cxxabiv129__pointer_to_member_type_infoE@@CXXABI_1.3
+OBJECT:36:_ZTVSt14error_category@@GLIBCXX_3.4.11
OBJECT:36:_ZTVSt15numpunct_bynameIcE@@GLIBCXX_3.4
OBJECT:36:_ZTVSt15numpunct_bynameIwE@@GLIBCXX_3.4
OBJECT:36:_ZTVSt8numpunctIcE@@GLIBCXX_3.4
@@ -2944,8 +3224,29 @@ OBJECT:4:_ZNSt10moneypunctIwLb0EE2idE@@GLIBCXX_3.4
OBJECT:4:_ZNSt10moneypunctIwLb1EE2idE@@GLIBCXX_3.4
OBJECT:4:_ZNSt11__timepunctIcE2idE@@GLIBCXX_3.4
OBJECT:4:_ZNSt11__timepunctIwE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIDiE10has_denormE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE11round_styleE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIDiE12max_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE12min_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE14max_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE14min_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE5radixE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE6digitsE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE8digits10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE10has_denormE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE11round_styleE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIDsE12max_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE12min_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE14max_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE14min_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE5radixE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE6digitsE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE8digits10E@@GLIBCXX_3.4.11
OBJECT:4:_ZNSt14numeric_limitsIaE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIaE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIaE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIaE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIaE14max_exponent10E@@GLIBCXX_3.4
@@ -2955,6 +3256,7 @@ OBJECT:4:_ZNSt14numeric_limitsIaE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIaE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIbE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIbE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIbE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIbE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIbE14max_exponent10E@@GLIBCXX_3.4
@@ -2964,6 +3266,7 @@ OBJECT:4:_ZNSt14numeric_limitsIbE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIbE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIcE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIcE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIcE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIcE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIcE14max_exponent10E@@GLIBCXX_3.4
@@ -2973,6 +3276,7 @@ OBJECT:4:_ZNSt14numeric_limitsIcE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIcE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIdE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIdE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIdE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIdE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIdE14max_exponent10E@@GLIBCXX_3.4
@@ -2982,6 +3286,7 @@ OBJECT:4:_ZNSt14numeric_limitsIdE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIdE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIeE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIeE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIeE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIeE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIeE14max_exponent10E@@GLIBCXX_3.4
@@ -2991,6 +3296,7 @@ OBJECT:4:_ZNSt14numeric_limitsIeE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIeE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIfE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIfE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIfE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIfE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIfE14max_exponent10E@@GLIBCXX_3.4
@@ -3000,6 +3306,7 @@ OBJECT:4:_ZNSt14numeric_limitsIfE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIfE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIhE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIhE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIhE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIhE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIhE14max_exponent10E@@GLIBCXX_3.4
@@ -3009,6 +3316,7 @@ OBJECT:4:_ZNSt14numeric_limitsIhE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIhE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIiE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIiE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIiE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIiE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIiE14max_exponent10E@@GLIBCXX_3.4
@@ -3018,6 +3326,7 @@ OBJECT:4:_ZNSt14numeric_limitsIiE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIiE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIjE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIjE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIjE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIjE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIjE14max_exponent10E@@GLIBCXX_3.4
@@ -3027,6 +3336,7 @@ OBJECT:4:_ZNSt14numeric_limitsIjE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIjE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIlE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIlE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIlE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIlE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIlE14max_exponent10E@@GLIBCXX_3.4
@@ -3036,6 +3346,7 @@ OBJECT:4:_ZNSt14numeric_limitsIlE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIlE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsImE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE14max_exponent10E@@GLIBCXX_3.4
@@ -3045,6 +3356,7 @@ OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIsE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE14max_exponent10E@@GLIBCXX_3.4
@@ -3054,6 +3366,7 @@ OBJECT:4:_ZNSt14numeric_limitsIsE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsItE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsItE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsItE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsItE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsItE14max_exponent10E@@GLIBCXX_3.4
@@ -3063,6 +3376,7 @@ OBJECT:4:_ZNSt14numeric_limitsItE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsItE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIwE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIwE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIwE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIwE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIwE14max_exponent10E@@GLIBCXX_3.4
@@ -3072,6 +3386,7 @@ OBJECT:4:_ZNSt14numeric_limitsIwE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIwE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIxE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIxE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIxE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIxE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIxE14max_exponent10E@@GLIBCXX_3.4
@@ -3081,6 +3396,7 @@ OBJECT:4:_ZNSt14numeric_limitsIxE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIxE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIyE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIyE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt14numeric_limitsIyE12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIyE12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIyE14max_exponent10E@@GLIBCXX_3.4
@@ -3090,6 +3406,7 @@ OBJECT:4:_ZNSt14numeric_limitsIyE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIyE8digits10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt21__numeric_limits_base10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt21__numeric_limits_base11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base12max_digits10E@@GLIBCXX_3.4.14
OBJECT:4:_ZNSt21__numeric_limits_base12max_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt21__numeric_limits_base12min_exponentE@@GLIBCXX_3.4
OBJECT:4:_ZNSt21__numeric_limits_base14max_exponent10E@@GLIBCXX_3.4
@@ -3159,6 +3476,7 @@ OBJECT:4:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLI
OBJECT:4:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
OBJECT:4:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
OBJECT:4:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZSt15future_category@@GLIBCXX_3.4.14
OBJECT:4:_ZTSPKa@@CXXABI_1.3
OBJECT:4:_ZTSPKb@@CXXABI_1.3
OBJECT:4:_ZTSPKc@@CXXABI_1.3
@@ -3254,6 +3572,12 @@ OBJECT:8:_ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@G
OBJECT:8:_ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
OBJECT:8:_ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
OBJECT:8:_ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZTIDd@@CXXABI_1.3.4
+OBJECT:8:_ZTIDe@@CXXABI_1.3.4
+OBJECT:8:_ZTIDf@@CXXABI_1.3.4
+OBJECT:8:_ZTIDi@@CXXABI_1.3.3
+OBJECT:8:_ZTIDn@@CXXABI_1.3.5
+OBJECT:8:_ZTIDs@@CXXABI_1.3.3
OBJECT:8:_ZTIN10__cxxabiv115__forced_unwindE@@CXXABI_1.3.2
OBJECT:8:_ZTIN10__cxxabiv119__foreign_exceptionE@@CXXABI_1.3.2
OBJECT:8:_ZTINSt6locale5facetE@@GLIBCXX_3.4
@@ -3261,6 +3585,7 @@ OBJECT:8:_ZTISt10ctype_base@@GLIBCXX_3.4
OBJECT:8:_ZTISt10money_base@@GLIBCXX_3.4
OBJECT:8:_ZTISt12codecvt_base@@GLIBCXX_3.4
OBJECT:8:_ZTISt13messages_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt14error_category@@GLIBCXX_3.4.11
OBJECT:8:_ZTISt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:8:_ZTISt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:8:_ZTISt8ios_base@@GLIBCXX_3.4
diff --git a/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
index d93d24131e..fc05962add 100644
--- a/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -735,6 +739,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -819,6 +824,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
@@ -970,6 +976,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1054,6 +1061,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1287,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1591,6 +1602,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1630,6 +1643,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1674,6 +1689,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1691,6 +1707,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1955,6 +1972,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
@@ -2429,14 +2447,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2447,6 +2468,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2468,6 +2490,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2476,6 +2500,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2500,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -2985,6 +3012,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3171,6 +3199,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
index d93d24131e..fc05962add 100644
--- a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -735,6 +739,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -819,6 +824,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
@@ -970,6 +976,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1054,6 +1061,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1287,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1591,6 +1602,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1630,6 +1643,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1674,6 +1689,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1691,6 +1707,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1955,6 +1972,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
@@ -2429,14 +2447,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2447,6 +2468,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2468,6 +2490,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2476,6 +2500,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2500,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -2985,6 +3012,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3171,6 +3199,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt
index e025a2e792..6c09022746 100644
--- a/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2737,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3245,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3437,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt
index e025a2e792..6c09022746 100644
--- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2737,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3245,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3437,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt
index 1f774af9e6..f2e81e4d33 100644
--- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -3058,6 +3084,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -3176,6 +3228,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3430,6 +3483,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3455,6 +3509,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX
OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
@@ -3611,6 +3666,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
diff --git a/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt
index 36162218e1..dae21a0963 100644
--- a/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2737,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3245,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3437,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt
index 1f774af9e6..f2e81e4d33 100644
--- a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -3058,6 +3084,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -3176,6 +3228,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3430,6 +3483,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3455,6 +3509,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX
OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
@@ -3611,6 +3666,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
diff --git a/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt
index 27ffeef911..d7f3613bbc 100644
--- a/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt
@@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -720,6 +724,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -801,6 +806,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
@@ -949,6 +955,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1030,6 +1037,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
@@ -1258,6 +1266,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1560,6 +1571,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1599,6 +1612,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1643,6 +1658,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1660,6 +1676,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1920,6 +1937,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EPim@@GLIBCXX_3.4
@@ -2392,14 +2410,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2410,6 +2431,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2431,6 +2453,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2439,6 +2463,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2772,6 +2798,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -2887,6 +2939,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:24:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:24:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:24:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -3118,6 +3171,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3143,6 +3197,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX
OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
@@ -3301,6 +3356,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
diff --git a/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt
index fca2a29d08..d2356ba65e 100644
--- a/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt
@@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -720,6 +724,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -801,6 +806,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
@@ -949,6 +955,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1030,6 +1037,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
@@ -1258,6 +1266,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1560,6 +1571,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1599,6 +1612,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1643,6 +1658,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1660,6 +1676,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1920,6 +1937,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EPij@@GLIBCXX_3.4
@@ -2392,14 +2410,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2410,6 +2431,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2431,6 +2453,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2439,6 +2463,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2469,6 +2495,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -2951,6 +2978,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3126,6 +3154,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt
index ae03a09192..912ce2527a 100644
--- a/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt
@@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVli@@GLIBCXX_3.4
@@ -720,6 +724,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -801,6 +806,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
@@ -949,6 +955,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1030,6 +1037,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
@@ -1258,6 +1266,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1560,6 +1571,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1599,6 +1612,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1643,6 +1658,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1660,6 +1676,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1920,6 +1937,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EPim@@GLIBCXX_3.4
@@ -2392,14 +2410,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2410,6 +2431,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2431,6 +2453,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2439,6 +2463,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2772,6 +2798,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -2887,6 +2939,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:24:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:24:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:24:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -3118,6 +3171,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3143,6 +3197,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX
OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
@@ -3301,6 +3356,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
diff --git a/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt
index 6e4db5da7d..143f0f4d73 100644
--- a/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt
@@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -719,6 +723,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -800,6 +805,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
@@ -948,6 +954,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1029,6 +1036,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
@@ -1551,6 +1559,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1590,6 +1600,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1634,6 +1646,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1651,6 +1664,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2369,14 +2383,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2387,6 +2404,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2450,6 +2468,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2458,6 +2478,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
diff --git a/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt
index a30c45eb25..353d537411 100644
--- a/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt
@@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVli@@GLIBCXX_3.4
@@ -719,6 +723,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -800,6 +805,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
@@ -948,6 +954,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1029,6 +1036,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
@@ -1551,6 +1559,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1590,6 +1600,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1634,6 +1646,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1651,6 +1664,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2369,14 +2383,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2387,6 +2404,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2450,6 +2468,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2458,6 +2478,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2788,6 +2810,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -3313,6 +3361,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
diff --git a/libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
index e025a2e792..6c09022746 100644
--- a/libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -877,6 +881,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -961,6 +966,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1116,6 +1122,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1200,6 +1207,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1433,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1741,6 +1752,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1780,6 +1793,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1824,6 +1839,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1841,6 +1857,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -2145,6 +2162,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
@@ -2640,14 +2658,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2658,6 +2679,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2701,7 +2723,9 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_LDBL_1.3
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2710,6 +2734,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2737,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
@@ -3245,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3437,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
index d93d24131e..fc05962add 100644
--- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -735,6 +739,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -819,6 +824,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
@@ -970,6 +976,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1054,6 +1061,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
@@ -1287,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1591,6 +1602,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1630,6 +1643,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1674,6 +1689,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1691,6 +1707,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1955,6 +1972,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
@@ -2429,14 +2447,17 @@ FUNC:_Znwj@@GLIBCXX_3.4
FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2447,6 +2468,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2468,6 +2490,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2476,6 +2500,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2500,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -2985,6 +3012,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3171,6 +3199,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
index d6708de9e6..948bad58a4 100644
--- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
@@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
@@ -735,6 +739,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
@@ -819,6 +824,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4
@@ -970,6 +976,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4
FUNC:_ZNSolsEt@@GLIBCXX_3.4
FUNC:_ZNSolsEx@@GLIBCXX_3.4
FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16
FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
@@ -1054,6 +1061,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4
FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4
@@ -1287,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
@@ -1591,6 +1602,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
@@ -1630,6 +1643,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
@@ -1674,6 +1689,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1691,6 +1707,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
@@ -1955,6 +1972,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@@GLIBCXX_3.4
@@ -2429,14 +2447,17 @@ FUNC:_Znwm@@GLIBCXX_3.4
FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_allocate_exception@@CXXABI_1.3
FUNC:__cxa_bad_cast@@CXXABI_1.3
FUNC:__cxa_bad_typeid@@CXXABI_1.3
FUNC:__cxa_begin_catch@@CXXABI_1.3
FUNC:__cxa_call_unexpected@@CXXABI_1.3
FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
FUNC:__cxa_demangle@@CXXABI_1.3
FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
FUNC:__cxa_free_exception@@CXXABI_1.3
FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
FUNC:__cxa_get_globals@@CXXABI_1.3
@@ -2447,6 +2468,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3
FUNC:__cxa_pure_virtual@@CXXABI_1.3
FUNC:__cxa_rethrow@@CXXABI_1.3
FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
FUNC:__cxa_vec_cctor@@CXXABI_1.3
FUNC:__cxa_vec_cleanup@@CXXABI_1.3
FUNC:__cxa_vec_ctor@@CXXABI_1.3
@@ -2468,6 +2490,8 @@ OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
OBJECT:0:GLIBCXX_3.4.10
@@ -2476,6 +2500,8 @@ OBJECT:0:GLIBCXX_3.4.12
OBJECT:0:GLIBCXX_3.4.13
OBJECT:0:GLIBCXX_3.4.14
OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
OBJECT:0:GLIBCXX_3.4.2
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
@@ -2803,6 +2829,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
@@ -2921,6 +2973,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:24:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:24:_ZTISt10bad_typeid@@GLIBCXX_3.4
OBJECT:24:_ZTISt10istrstream@@GLIBCXX_3.4
@@ -3163,6 +3216,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4
OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11
@@ -3188,6 +3242,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX
OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4
OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
@@ -3335,6 +3390,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
new file mode 100644
index 0000000000..551e738a57
--- /dev/null
+++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
@@ -0,0 +1,3687 @@
+FUNC:_ZN10__cxxabiv116__enum_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv116__enum_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv116__enum_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__array_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__array_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__array_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__class_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__class_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__class_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__pbase_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__pbase_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv117__pbase_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv119__pointer_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv119__pointer_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv119__pointer_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv120__function_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv120__function_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv120__function_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv120__si_class_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv120__si_class_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv120__si_class_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv121__vmi_class_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv121__vmi_class_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv121__vmi_class_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv123__fundamental_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv123__fundamental_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv123__fundamental_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv129__pointer_to_member_type_infoD1Ev@@CXXABI_1.3
+FUNC:_ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev@@CXXABI_1.3
+FUNC:_ZN10__gnu_norm15_List_node_base4hookEPS0_@@GLIBCXX_3.4
+FUNC:_ZN10__gnu_norm15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4
+FUNC:_ZN10__gnu_norm15_List_node_base6unhookEv@@GLIBCXX_3.4
+FUNC:_ZN10__gnu_norm15_List_node_base7reverseEv@@GLIBCXX_3.4
+FUNC:_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug19_Safe_iterator_base12_M_get_mutexEv@@GLIBCXX_3.4.9
+FUNC:_ZN11__gnu_debug19_Safe_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.9
+FUNC:_ZN11__gnu_debug19_Safe_iterator_base16_M_detach_singleEv@@GLIBCXX_3.4.9
+FUNC:_ZN11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug19_Safe_iterator_base9_M_detachEv@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv@@GLIBCXX_3.4.9
+FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
+FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
+FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
+FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
+FUNC:_ZN9__gnu_cxx17__pool_alloc_base12_M_get_mutexEv@@GLIBCXX_3.4.2
+FUNC:_ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEj@@GLIBCXX_3.4.2
+FUNC:_ZN9__gnu_cxx17__pool_alloc_base9_M_refillEj@@GLIBCXX_3.4.2
+FUNC:_ZN9__gnu_cxx18__exchange_and_addEPVii@@GLIBCXX_3.4
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4fileEv@@GLIBCXX_3.4.2
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE5uflowEv@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE8overflowEi@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE9pbackfailEi@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE9underflowEv@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEC1EP8_IO_FILE@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEC2EP8_IO_FILE@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE4fileEv@@GLIBCXX_3.4.2
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE5uflowEv@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE8overflowEj@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE9pbackfailEj@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE9underflowEv@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEC1EP8_IO_FILE@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEC2EP8_IO_FILE@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4.10
+FUNC:_ZN9__gnu_cxx27__verbose_terminate_handlerEv@@CXXABI_1.3
+FUNC:_ZN9__gnu_cxx6__poolILb0EE10_M_destroyEv@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb0EE13_M_initializeEv@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcj@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEjj@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb1EE10_M_destroyEv@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb1EE13_M_initializeEPFvPvE@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb1EE13_M_initializeEv@@GLIBCXX_3.4.6
+FUNC:_ZN9__gnu_cxx6__poolILb1EE16_M_get_thread_idEv@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcj@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEjj@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx6__poolILb1EE21_M_destroy_thread_keyEPv@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx9free_list6_M_getEj@@GLIBCXX_3.4.4
+FUNC:_ZN9__gnu_cxx9free_list8_M_clearEv@@GLIBCXX_3.4.4
+FUNC:_ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv117__pbase_type_info10__do_catchEPKSt9type_infoPPvj@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv117__pbase_type_info15__pointer_catchEPKS0_PPvj@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv119__pointer_type_info14__is_pointer_pEv@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv119__pointer_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv120__function_type_info15__is_function_pEv@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@@CXXABI_1.3
+FUNC:_ZNK10__cxxabiv129__pointer_to_member_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj@@CXXABI_1.3
+FUNC:_ZNK11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug16_Error_formatter13_M_print_wordEPKc@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug16_Error_formatter15_M_print_stringEPKc@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv@@GLIBCXX_3.4.10
+FUNC:_ZNK11__gnu_debug16_Error_formatter8_M_errorEv@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@@GLIBCXX_3.4
+FUNC:_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.5
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_j@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@@GLIBCXX_3.4.5
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_j@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_j@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE2atEj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4cendEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4dataEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_j@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4findEwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5crendEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5emptyEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5frontEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6cbeginEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2_@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE7crbeginEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKc@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv@@GLIBCXX_3.4
+FUNC:_ZNKSbIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4
+FUNC:_ZNKSi6gcountEv@@GLIBCXX_3.4
+FUNC:_ZNKSi6sentrycvbEv@@GLIBCXX_3.4
+FUNC:_ZNKSo6sentrycvbEv@@GLIBCXX_3.4
+FUNC:_ZNKSs11_M_disjunctEPKc@@GLIBCXX_3.4.5
+FUNC:_ZNKSs11_M_disjunctEPKc@GLIBCXX_3.4
+FUNC:_ZNKSs12find_last_ofEPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs12find_last_ofEPKcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs12find_last_ofERKSsj@@GLIBCXX_3.4
+FUNC:_ZNKSs12find_last_ofEcj@@GLIBCXX_3.4
+FUNC:_ZNKSs13find_first_ofEPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs13find_first_ofEPKcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs13find_first_ofERKSsj@@GLIBCXX_3.4
+FUNC:_ZNKSs13find_first_ofEcj@@GLIBCXX_3.4
+FUNC:_ZNKSs13get_allocatorEv@@GLIBCXX_3.4
+FUNC:_ZNKSs15_M_check_lengthEjjPKc@@GLIBCXX_3.4.5
+FUNC:_ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4
+FUNC:_ZNKSs16find_last_not_ofEPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs16find_last_not_ofEPKcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs16find_last_not_ofERKSsj@@GLIBCXX_3.4
+FUNC:_ZNKSs16find_last_not_ofEcj@@GLIBCXX_3.4
+FUNC:_ZNKSs17find_first_not_ofEPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs17find_first_not_ofEPKcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs17find_first_not_ofERKSsj@@GLIBCXX_3.4
+FUNC:_ZNKSs17find_first_not_ofEcj@@GLIBCXX_3.4
+FUNC:_ZNKSs2atEj@@GLIBCXX_3.4
+FUNC:_ZNKSs3endEv@@GLIBCXX_3.4
+FUNC:_ZNKSs4_Rep12_M_is_leakedEv@@GLIBCXX_3.4
+FUNC:_ZNKSs4_Rep12_M_is_sharedEv@@GLIBCXX_3.4
+FUNC:_ZNKSs4backEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSs4cendEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSs4copyEPcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs4dataEv@@GLIBCXX_3.4
+FUNC:_ZNKSs4findEPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs4findEPKcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs4findERKSsj@@GLIBCXX_3.4
+FUNC:_ZNKSs4findEcj@@GLIBCXX_3.4
+FUNC:_ZNKSs4rendEv@@GLIBCXX_3.4
+FUNC:_ZNKSs4sizeEv@@GLIBCXX_3.4
+FUNC:_ZNKSs5beginEv@@GLIBCXX_3.4
+FUNC:_ZNKSs5c_strEv@@GLIBCXX_3.4
+FUNC:_ZNKSs5crendEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSs5emptyEv@@GLIBCXX_3.4
+FUNC:_ZNKSs5frontEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSs5rfindEPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs5rfindEPKcjj@@GLIBCXX_3.4
+FUNC:_ZNKSs5rfindERKSsj@@GLIBCXX_3.4
+FUNC:_ZNKSs5rfindEcj@@GLIBCXX_3.4
+FUNC:_ZNKSs6_M_repEv@@GLIBCXX_3.4
+FUNC:_ZNKSs6cbeginEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSs6lengthEv@@GLIBCXX_3.4
+FUNC:_ZNKSs6rbeginEv@@GLIBCXX_3.4
+FUNC:_ZNKSs6substrEjj@@GLIBCXX_3.4
+FUNC:_ZNKSs7_M_dataEv@@GLIBCXX_3.4
+FUNC:_ZNKSs7_M_iendEv@@GLIBCXX_3.4
+FUNC:_ZNKSs7compareEPKc@@GLIBCXX_3.4
+FUNC:_ZNKSs7compareERKSs@@GLIBCXX_3.4
+FUNC:_ZNKSs7compareEjjPKc@@GLIBCXX_3.4
+FUNC:_ZNKSs7compareEjjPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSs7compareEjjRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSs7compareEjjRKSsjj@@GLIBCXX_3.4
+FUNC:_ZNKSs7crbeginEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSs8_M_checkEjPKc@@GLIBCXX_3.4
+FUNC:_ZNKSs8_M_limitEjj@@GLIBCXX_3.4
+FUNC:_ZNKSs8capacityEv@@GLIBCXX_3.4
+FUNC:_ZNKSs8max_sizeEv@@GLIBCXX_3.4
+FUNC:_ZNKSs9_M_ibeginEv@@GLIBCXX_3.4
+FUNC:_ZNKSsixEj@@GLIBCXX_3.4
+FUNC:_ZNKSt10bad_typeid4whatEv@@GLIBCXX_3.4.9
+FUNC:_ZNKSt10error_code23default_error_conditionEv@@GLIBCXX_3.4.11
+FUNC:_ZNKSt10istrstream5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10lock_error4whatEv@@GLIBCXX_3.4.11
+FUNC:_ZNKSt10moneypunctIcLb0EE10neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE10pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE11curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE11do_groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE11frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE13decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE13do_neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE13do_pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE13negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE13positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE13thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE14do_curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE14do_frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE16do_decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE16do_negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE16do_positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE16do_thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb0EE8groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE10neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE10pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE11curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE11do_groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE11frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE13decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE13do_neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE13do_pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE13negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE13positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE13thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE14do_curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE14do_frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE16do_decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE16do_negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE16do_positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE16do_thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIcLb1EE8groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE10neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE10pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE11curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE11do_groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE11frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE13decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE13do_neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE13do_pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE13negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE13positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE13thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE14do_curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE14do_frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE16do_decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE16do_negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE16do_positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE16do_thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb0EE8groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE10neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE10pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE11curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE11do_groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE11frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE13decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE13do_neg_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE13do_pos_formatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE13negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE13positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE13thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE14do_curr_symbolEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE14do_frac_digitsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE16do_decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE16do_negative_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE16do_positive_signEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE16do_thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10moneypunctIwLb1EE8groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10ostrstream5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt10ostrstream6pcountEv@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE15_M_am_pm_formatEPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE15_M_date_formatsEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE15_M_time_formatsEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE19_M_days_abbreviatedEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE20_M_date_time_formatsEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE21_M_months_abbreviatedEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE6_M_putEPcjPKcPK2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE7_M_daysEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE8_M_am_pmEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIcE9_M_monthsEPPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE15_M_am_pm_formatEPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE15_M_date_formatsEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE15_M_time_formatsEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE19_M_days_abbreviatedEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE20_M_date_time_formatsEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE21_M_months_abbreviatedEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE6_M_putEPwjPKwPK2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNKSt12bad_weak_ptr4whatEv@@GLIBCXX_3.4.15
+FUNC:_ZNKSt12future_error4whatEv@@GLIBCXX_3.4.14
+FUNC:_ZNKSt12strstreambuf6pcountEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13bad_exception4whatEv@@GLIBCXX_3.4.9
+FUNC:_ZNKSt13basic_filebufIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_filebufIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_fstreamIcSt11char_traitsIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4.5
+FUNC:_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_fstreamIwSt11char_traitsIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
+FUNC:_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_istreamIwSt11char_traitsIwEE6gcountEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_istreamIwSt11char_traitsIwEE6sentrycvbEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13basic_ostreamIwSt11char_traitsIwEE6sentrycvbEv@@GLIBCXX_3.4
+FUNC:_ZNKSt13runtime_error4whatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4.5
+FUNC:_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
+FUNC:_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4.5
+FUNC:_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
+FUNC:_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
+FUNC:_ZNKSt14error_category10equivalentERKSt10error_codei@@GLIBCXX_3.4.11
+FUNC:_ZNKSt14error_category10equivalentEiRKSt15error_condition@@GLIBCXX_3.4.11
+FUNC:_ZNKSt14error_category23default_error_conditionEi@@GLIBCXX_3.4.11
+FUNC:_ZNKSt15__exception_ptr13exception_ptr20__cxa_exception_typeEv@@CXXABI_1.3.3
+FUNC:_ZNKSt15__exception_ptr13exception_ptrcvMS0_FvvEEv@@CXXABI_1.3.3
+FUNC:_ZNKSt15__exception_ptr13exception_ptrntEv@@CXXABI_1.3.3
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE4gptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5ebackEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5epptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE6getlocEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE4gptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE4pptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5ebackEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5egptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5epptrEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_istringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
+FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@@GLIBCXX_3.4.10
+FUNC:_ZNKSt3tr14hashIRKSsEclES2_@@GLIBCXX_3.4.10
+FUNC:_ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@@GLIBCXX_3.4.10
+FUNC:_ZNKSt3tr14hashISsEclESs@@GLIBCXX_3.4.10
+FUNC:_ZNKSt3tr14hashIeEclEe@@GLIBCXX_3.4.10
+FUNC:_ZNKSt4hashIRKSbIwSt11char_traitsIwESaIwEEEclES5_@@GLIBCXX_3.4.10
+FUNC:_ZNKSt4hashIRKSsEclES1_@@GLIBCXX_3.4.10
+FUNC:_ZNKSt4hashISbIwSt11char_traitsIwESaIwEEEclES3_@@GLIBCXX_3.4.10
+FUNC:_ZNKSt4hashISsEclESs@@GLIBCXX_3.4.10
+FUNC:_ZNKSt4hashISt10error_codeEclES0_@@GLIBCXX_3.4.11
+FUNC:_ZNKSt4hashIeEclEe@@GLIBCXX_3.4.10
+FUNC:_ZNKSt5ctypeIcE10do_tolowerEPcPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE10do_tolowerEc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE10do_toupperEPcPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE10do_toupperEc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE13_M_widen_initEv@@GLIBCXX_3.4.11
+FUNC:_ZNKSt5ctypeIcE14_M_narrow_initEv@@GLIBCXX_3.4.11
+FUNC:_ZNKSt5ctypeIcE8do_widenEPKcS2_Pc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE8do_widenEc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE9do_narrowEPKcS2_cPc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIcE9do_narrowEcc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE10do_scan_isEtPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE10do_tolowerEPwPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE10do_tolowerEw@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE10do_toupperEPwPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE10do_toupperEw@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE11do_scan_notEtPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE19_M_convert_to_wmaskEt@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE5do_isEPKwS2_Pt@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE5do_isEtw@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE8do_widenEPKcS2_Pw@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE8do_widenEc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE9do_narrowEPKwS2_cPc@@GLIBCXX_3.4
+FUNC:_ZNKSt5ctypeIwE9do_narrowEwc@@GLIBCXX_3.4
+FUNC:_ZNKSt6locale2id5_M_idEv@@GLIBCXX_3.4
+FUNC:_ZNKSt6locale4nameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt6localeeqERKS_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE16do_always_noconvEv@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE5do_inERS0_PKcS4_RS4_PcS6_RS6_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE6do_outERS0_PKcS4_RS4_PcS6_RS6_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_j@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE16do_always_noconvEv@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE5do_inERS0_PKcS4_RS4_PwS6_RS6_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE6do_outERS0_PKwS4_RS4_PcS6_RS6_@@GLIBCXX_3.4
+FUNC:_ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_j@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE10_M_compareEPKcS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE10do_compareEPKcS2_S2_S2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE12_M_transformEPcPKcj@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE12do_transformEPKcS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE4hashEPKcS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE7compareEPKcS2_S2_S2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE7do_hashEPKcS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIcE9transformEPKcS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE10_M_compareEPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE10do_compareEPKwS2_S2_S2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE12_M_transformEPwPKwj@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE12do_transformEPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE4hashEPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE7compareEPKwS2_S2_S2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE7do_hashEPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7collateIwE9transformEPKwS2_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcS9_Ri@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS6_PcS7_Ri@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPKv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basece@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPKv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basece@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwS9_Ri@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES3_S3_RSt8ios_basewT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES3_S3_RSt8ios_basewT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES3_S3_RSt8ios_basewT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES3_S3_RSt8ios_basewT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwS9_Ri@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIeEES3_S3_RSt8ios_basewcT_@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPKv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewe@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewy@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewPKv@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewb@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewd@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewe@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewl@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
+FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
+FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
+FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE20_M_convert_from_charEPc@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE3getEiiiRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE4openERKSsRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE4openERKSsRKSt6localePKc@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE5closeEi@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE6do_getEiiiRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE7do_openERKSsRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIcE8do_closeEi@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE18_M_convert_to_charERKSbIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE20_M_convert_from_charEPc@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE3getEiiiRKSbIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE4openERKSsRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE4openERKSsRKSt6localePKc@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE5closeEi@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE6do_getEiiiRKSbIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE7do_openERKSsRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNKSt8messagesIwE8do_closeEi@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE11do_groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE11do_truenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE12do_falsenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE13decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE13thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE16do_decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE16do_thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE8groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE8truenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIcE9falsenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE11do_groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE11do_truenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE12do_falsenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE13decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE13thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE16do_decimal_pointEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE16do_thousands_sepEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE8groupingEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE8truenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8numpunctIwE9falsenameEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10date_orderEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13do_date_orderEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10date_orderEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE13do_date_orderEv@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmcc@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPK2tmcc@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPK2tmPKwSB_@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPK2tmcc@@GLIBCXX_3.4
+FUNC:_ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewPK2tmcc@@GLIBCXX_3.4
+FUNC:_ZNKSt8valarrayIjE4sizeEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9bad_alloc4whatEv@@GLIBCXX_3.4.9
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE10exceptionsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE3badEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE3eofEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE3tieEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE4goodEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE6narrowEcc@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEEcvPvEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEEntEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE10exceptionsEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE3badEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE3eofEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE3tieEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE4failEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE4fillEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE4goodEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE5widenEc@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE6narrowEwc@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEE7rdstateEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEEcvPvEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9basic_iosIwSt11char_traitsIwEEntEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9exception4whatEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basecRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basece@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basecRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basece@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_bRSt8ios_basewRKSbIwS2_SaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_bRSt8ios_basewe@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_bRSt8ios_basewRKSbIwS2_SaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_bRSt8ios_basewe@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE@@GLIBCXX_3.4
+FUNC:_ZNKSt9strstream5rdbufEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9strstream6pcountEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9type_info10__do_catchEPKS_PPvj@@GLIBCXX_3.4
+FUNC:_ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@@GLIBCXX_3.4
+FUNC:_ZNKSt9type_info14__is_pointer_pEv@@GLIBCXX_3.4
+FUNC:_ZNKSt9type_info15__is_function_pEv@@GLIBCXX_3.4
+FUNC:_ZNSaIcEC1ERKS_@@GLIBCXX_3.4
+FUNC:_ZNSaIcEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIcEC2ERKS_@@GLIBCXX_3.4
+FUNC:_ZNSaIcEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIwEC1ERKS_@@GLIBCXX_3.4
+FUNC:_ZNSaIwEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4
+FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIN9__gnu_cxx17__normal_iteratorIPwS2_EEEES6_T_S8_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE2atEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@@GLIBCXX_3.4.5
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.15
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5clearEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EE@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5frontEv@@GLIBCXX_3.4.15
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendESt16initializer_listIwE@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6appendEjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEOS2_@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignESt16initializer_listIwE@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6assignEjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EESt16initializer_listIwE@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6resizeEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE6resizeEjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@@GLIBCXX_3.4.5
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEv@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@@GLIBCXX_3.4.5
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_St16initializer_listIwE@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EjwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPKwEET_S6_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPwEET_S5_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_@@GLIBCXX_3.4.15
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EjwRKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2IPKwEET_S6_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2IPwEET_S5_RKS1_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSEOS2_@@GLIBCXX_3.4.14
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSESt16initializer_listIwE@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEaSEw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLEPKw@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLESt16initializer_listIwE@@GLIBCXX_3.4.11
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEEpLEw@@GLIBCXX_3.4
+FUNC:_ZNSdC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSdC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSdC2EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSdC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSdD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSdD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSdD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSi10_M_extractIPvEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIbEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIdEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIeEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIfEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIjEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIlEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractImEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractItEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIxEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi10_M_extractIyEERSiRT_@@GLIBCXX_3.4.9
+FUNC:_ZNSi3getEPci@@GLIBCXX_3.4
+FUNC:_ZNSi3getEPcic@@GLIBCXX_3.4
+FUNC:_ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEEc@@GLIBCXX_3.4
+FUNC:_ZNSi3getERc@@GLIBCXX_3.4
+FUNC:_ZNSi3getEv@@GLIBCXX_3.4
+FUNC:_ZNSi4peekEv@@GLIBCXX_3.4
+FUNC:_ZNSi4readEPci@@GLIBCXX_3.4
+FUNC:_ZNSi4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSi5seekgESt4fposI11__mbstate_tE@@GLIBCXX_3.4
+FUNC:_ZNSi5seekgExSt12_Ios_Seekdir@@GLIBCXX_3.4
+FUNC:_ZNSi5tellgEv@@GLIBCXX_3.4
+FUNC:_ZNSi5ungetEv@@GLIBCXX_3.4
+FUNC:_ZNSi6ignoreEi@@GLIBCXX_3.4.5
+FUNC:_ZNSi6ignoreEi@GLIBCXX_3.4
+FUNC:_ZNSi6ignoreEii@@GLIBCXX_3.4
+FUNC:_ZNSi6ignoreEv@@GLIBCXX_3.4.5
+FUNC:_ZNSi6ignoreEv@GLIBCXX_3.4
+FUNC:_ZNSi6sentryC1ERSib@@GLIBCXX_3.4
+FUNC:_ZNSi6sentryC2ERSib@@GLIBCXX_3.4
+FUNC:_ZNSi7getlineEPci@@GLIBCXX_3.4
+FUNC:_ZNSi7getlineEPcic@@GLIBCXX_3.4
+FUNC:_ZNSi7putbackEc@@GLIBCXX_3.4
+FUNC:_ZNSi8readsomeEPci@@GLIBCXX_3.4
+FUNC:_ZNSiC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSiC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSiC2EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSiC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSiD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSiD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSiD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSirsEPFRSiS_E@@GLIBCXX_3.4
+FUNC:_ZNSirsEPFRSt8ios_baseS0_E@@GLIBCXX_3.4
+FUNC:_ZNSirsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@@GLIBCXX_3.4
+FUNC:_ZNSirsEPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSirsERPv@@GLIBCXX_3.4
+FUNC:_ZNSirsERb@@GLIBCXX_3.4
+FUNC:_ZNSirsERd@@GLIBCXX_3.4
+FUNC:_ZNSirsERe@@GLIBCXX_3.4
+FUNC:_ZNSirsERf@@GLIBCXX_3.4
+FUNC:_ZNSirsERi@@GLIBCXX_3.4
+FUNC:_ZNSirsERj@@GLIBCXX_3.4
+FUNC:_ZNSirsERl@@GLIBCXX_3.4
+FUNC:_ZNSirsERm@@GLIBCXX_3.4
+FUNC:_ZNSirsERs@@GLIBCXX_3.4
+FUNC:_ZNSirsERt@@GLIBCXX_3.4
+FUNC:_ZNSirsERx@@GLIBCXX_3.4
+FUNC:_ZNSirsERy@@GLIBCXX_3.4
+FUNC:_ZNSo3putEc@@GLIBCXX_3.4
+FUNC:_ZNSo5flushEv@@GLIBCXX_3.4
+FUNC:_ZNSo5seekpESt4fposI11__mbstate_tE@@GLIBCXX_3.4
+FUNC:_ZNSo5seekpExSt12_Ios_Seekdir@@GLIBCXX_3.4
+FUNC:_ZNSo5tellpEv@@GLIBCXX_3.4
+FUNC:_ZNSo5writeEPKci@@GLIBCXX_3.4
+FUNC:_ZNSo6sentryC1ERSo@@GLIBCXX_3.4
+FUNC:_ZNSo6sentryC2ERSo@@GLIBCXX_3.4
+FUNC:_ZNSo6sentryD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSo6sentryD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSo8_M_writeEPKci@@GLIBCXX_3.4
+FUNC:_ZNSo9_M_insertIPKvEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertIbEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertIdEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertIeEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertIlEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertImEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertIxEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSo9_M_insertIyEERSoT_@@GLIBCXX_3.4.9
+FUNC:_ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSoC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSoC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSoD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSoD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSoD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSolsEPFRSoS_E@@GLIBCXX_3.4
+FUNC:_ZNSolsEPFRSt8ios_baseS0_E@@GLIBCXX_3.4
+FUNC:_ZNSolsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@@GLIBCXX_3.4
+FUNC:_ZNSolsEPKv@@GLIBCXX_3.4
+FUNC:_ZNSolsEPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+FUNC:_ZNSolsEb@@GLIBCXX_3.4
+FUNC:_ZNSolsEd@@GLIBCXX_3.4
+FUNC:_ZNSolsEe@@GLIBCXX_3.4
+FUNC:_ZNSolsEf@@GLIBCXX_3.4
+FUNC:_ZNSolsEi@@GLIBCXX_3.4
+FUNC:_ZNSolsEj@@GLIBCXX_3.4
+FUNC:_ZNSolsEl@@GLIBCXX_3.4
+FUNC:_ZNSolsEm@@GLIBCXX_3.4
+FUNC:_ZNSolsEs@@GLIBCXX_3.4
+FUNC:_ZNSolsEt@@GLIBCXX_3.4
+FUNC:_ZNSolsEx@@GLIBCXX_3.4
+FUNC:_ZNSolsEy@@GLIBCXX_3.4
+FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
+FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
+FUNC:_ZNSs12_S_constructEjcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPcSsEEEES2_T_S4_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14
+FUNC:_ZNSs12_S_empty_repEv@@GLIBCXX_3.4
+FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@@GLIBCXX_3.4
+FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@@GLIBCXX_3.4
+FUNC:_ZNSs13_S_copy_charsEPcPKcS1_@@GLIBCXX_3.4
+FUNC:_ZNSs13_S_copy_charsEPcS_S_@@GLIBCXX_3.4
+FUNC:_ZNSs13shrink_to_fitEv@@GLIBCXX_3.4.14
+FUNC:_ZNSs14_M_replace_auxEjjjc@@GLIBCXX_3.4
+FUNC:_ZNSs15_M_replace_safeEjjPKcj@@GLIBCXX_3.4
+FUNC:_ZNSs18_S_construct_aux_2EjcRKSaIcE@@GLIBCXX_3.4.14
+FUNC:_ZNSs2atEj@@GLIBCXX_3.4
+FUNC:_ZNSs3endEv@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep10_M_disposeERKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep10_M_refcopyEv@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep10_M_refdataEv@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep12_S_empty_repEv@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep13_M_set_leakedEv@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep15_M_set_sharableEv@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep26_M_set_length_and_sharableEj@@GLIBCXX_3.4.5
+FUNC:_ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep7_M_grabERKSaIcES2_@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep8_M_cloneERKSaIcEj@@GLIBCXX_3.4
+FUNC:_ZNSs4_Rep9_S_createEjjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSs4backEv@@GLIBCXX_3.4.15
+FUNC:_ZNSs4rendEv@@GLIBCXX_3.4
+FUNC:_ZNSs4swapERSs@@GLIBCXX_3.4
+FUNC:_ZNSs5beginEv@@GLIBCXX_3.4
+FUNC:_ZNSs5clearEv@@GLIBCXX_3.4
+FUNC:_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE@@GLIBCXX_3.4
+FUNC:_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_@@GLIBCXX_3.4
+FUNC:_ZNSs5eraseEjj@@GLIBCXX_3.4
+FUNC:_ZNSs5frontEv@@GLIBCXX_3.4.15
+FUNC:_ZNSs6appendEPKc@@GLIBCXX_3.4
+FUNC:_ZNSs6appendEPKcj@@GLIBCXX_3.4
+FUNC:_ZNSs6appendERKSs@@GLIBCXX_3.4
+FUNC:_ZNSs6appendERKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSs6appendESt16initializer_listIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSs6appendEjc@@GLIBCXX_3.4
+FUNC:_ZNSs6assignEOSs@@GLIBCXX_3.4.14
+FUNC:_ZNSs6assignEPKc@@GLIBCXX_3.4
+FUNC:_ZNSs6assignEPKcj@@GLIBCXX_3.4
+FUNC:_ZNSs6assignERKSs@@GLIBCXX_3.4
+FUNC:_ZNSs6assignERKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSs6assignESt16initializer_listIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSs6assignEjc@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEESt16initializer_listIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEjPKc@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEjPKcj@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEjRKSs@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEjRKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSs6insertEjjc@@GLIBCXX_3.4
+FUNC:_ZNSs6rbeginEv@@GLIBCXX_3.4
+FUNC:_ZNSs6resizeEj@@GLIBCXX_3.4
+FUNC:_ZNSs6resizeEjc@@GLIBCXX_3.4
+FUNC:_ZNSs7_M_copyEPcPKcj@@GLIBCXX_3.4.5
+FUNC:_ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4
+FUNC:_ZNSs7_M_dataEPc@@GLIBCXX_3.4
+FUNC:_ZNSs7_M_leakEv@@GLIBCXX_3.4
+FUNC:_ZNSs7_M_moveEPcPKcj@@GLIBCXX_3.4.5
+FUNC:_ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_St16initializer_listIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEjjPKc@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEjjPKcj@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
+FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
+FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
+FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
+FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
+FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4
+FUNC:_ZNSsC1EOSs@@GLIBCXX_3.4.14
+FUNC:_ZNSsC1EPKcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1EPKcjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1ERKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSsC1ERKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSsC1ERKSsjjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1ESt16initializer_listIcERKSaIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSsC1EjcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1IPKcEET_S2_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC1IPcEET_S1_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2EOSs@@GLIBCXX_3.4.15
+FUNC:_ZNSsC2EPKcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2EPKcjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2ERKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSsC2ERKSsjj@@GLIBCXX_3.4
+FUNC:_ZNSsC2ERKSsjjRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2ESt16initializer_listIcERKSaIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSsC2EjcRKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSsC2IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2IPKcEET_S2_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsC2IPcEET_S1_RKSaIcE@@GLIBCXX_3.4
+FUNC:_ZNSsD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSsD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSsaSEOSs@@GLIBCXX_3.4.14
+FUNC:_ZNSsaSEPKc@@GLIBCXX_3.4
+FUNC:_ZNSsaSERKSs@@GLIBCXX_3.4
+FUNC:_ZNSsaSESt16initializer_listIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSsaSEc@@GLIBCXX_3.4
+FUNC:_ZNSsixEj@@GLIBCXX_3.4
+FUNC:_ZNSspLEPKc@@GLIBCXX_3.4
+FUNC:_ZNSspLERKSs@@GLIBCXX_3.4
+FUNC:_ZNSspLESt16initializer_listIcE@@GLIBCXX_3.4.11
+FUNC:_ZNSspLEc@@GLIBCXX_3.4
+FUNC:_ZNSt10__num_base15_S_format_floatERKSt8ios_basePcc@@GLIBCXX_3.4
+FUNC:_ZNSt10bad_typeidD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10bad_typeidD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10bad_typeidD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstream3strEv@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC1EPKc@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC1EPKci@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC1EPc@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC1EPci@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC2EPKc@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC2EPKci@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC2EPc@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamC2EPci@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10istrstreamD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10money_base20_S_construct_patternEccc@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EE24_M_initialize_moneypunctEP15__locale_structPKc@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb0EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EE24_M_initialize_moneypunctEP15__locale_structPKc@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIcLb1EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EE24_M_initialize_moneypunctEP15__locale_structPKc@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb0EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EE24_M_initialize_moneypunctEP15__locale_structPKc@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEj@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10moneypunctIwLb1EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstream3strEv@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstream6freezeEb@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamC2EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt10ostrstreamD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcE23_M_initialize_timepunctEP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwE23_M_initialize_timepunctEP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEj@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11__timepunctIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11char_traitsIcE2eqERKcS2_@@GLIBCXX_3.4.5
+FUNC:_ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4
+FUNC:_ZNSt11char_traitsIwE2eqERKwS2_@@GLIBCXX_3.4.5
+FUNC:_ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4
+FUNC:_ZNSt11logic_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt11logic_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt11logic_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11logic_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11logic_errorD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11range_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
+FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE6xsgetnEPci@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE6xsputnEPKci@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE8sys_openEP8_IO_FILESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE8sys_openEiSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcE9showmanycEv@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12ctype_bynameIcEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIcEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIwEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIwEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12ctype_bynameIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12domain_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt12domain_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt12domain_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12domain_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12domain_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12future_errorD0Ev@@GLIBCXX_3.4.14
+FUNC:_ZNSt12future_errorD1Ev@@GLIBCXX_3.4.14
+FUNC:_ZNSt12future_errorD2Ev@@GLIBCXX_3.4.14
+FUNC:_ZNSt12length_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt12length_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt12length_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12length_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12length_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12out_of_rangeC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt12out_of_rangeC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt12out_of_rangeD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12out_of_rangeD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12out_of_rangeD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt12strstreambuf3strEv@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf6freezeEb@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf6setbufEPci@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf7_M_freeEPc@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf8_M_allocEj@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf8_M_setupEPcS0_i@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf8overflowEi@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf9pbackfailEi@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambuf9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPFPvjEPFvS0_E@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPKai@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPKci@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPKhi@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPaiS0_@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPciS0_@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1EPhiS0_@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC1Ei@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPFPvjEPFvS0_E@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPKai@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPKci@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPKhi@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPaiS0_@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPciS0_@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2EPhiS0_@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufC2Ei@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12strstreambufD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt12system_errorD0Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt12system_errorD1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt12system_errorD2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt13__future_base11_State_baseD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base11_State_baseD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base11_State_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base12_Result_baseC1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
+FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE14_M_get_ext_posER11__mbstate_t@@GLIBCXX_3.4.15
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE15_M_create_pbackEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE16_M_destroy_pbackEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE19_M_terminate_outputEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE26_M_destroy_internal_bufferEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE27_M_allocate_internal_bufferEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE8overflowEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE9pbackfailEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE9showmanycEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE14_M_get_ext_posER11__mbstate_t@@GLIBCXX_3.4.15
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE15_M_create_pbackEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE16_M_destroy_pbackEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE19_M_terminate_outputEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE26_M_destroy_internal_bufferEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE27_M_allocate_internal_bufferEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE8overflowEj@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE9pbackfailEj@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE9showmanycEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEE9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_filebufIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_fstreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIPvEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIbEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIdEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIeEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIfEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIjEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIlEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractImEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractItEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIxEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIyEERS2_RT_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE3getERSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE3getERSt15basic_streambufIwS1_Ew@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE3getERw@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE3getEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE4peekEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgESt4fposI11__mbstate_tE@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE5tellgEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE5ungetEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@@GLIBCXX_3.4.5
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@@GLIBCXX_3.4.5
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6sentryC1ERS2_b@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE6sentryC2ERS2_b@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE7putbackEw@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRS2_S3_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRSt8ios_baseS4_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRSt9basic_iosIwS1_ES5_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsEPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERPv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERb@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERd@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERe@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERf@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERj@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERl@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERm@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERs@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERt@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERx@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_istreamIwSt11char_traitsIwEErsERy@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpESt4fposI11__mbstate_tE@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryC1ERS2_@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryC2ERS2_@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIPKvEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIbEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIdEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIeEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIlEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertImEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIxEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIyEERS2_T_@@GLIBCXX_3.4.9
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRS2_S3_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt8ios_baseS4_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt9basic_iosIwS1_ES5_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPKv@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEb@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEd@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEe@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEf@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEi@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEj@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEl@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEm@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEs@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
+FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
+FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13runtime_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt13runtime_errorD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ifstreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_iostreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE5closeEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4.13
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14basic_ofstreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIcEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIcEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIwEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIwEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14collate_bynameIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14error_categoryC1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryC2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14error_categoryD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt14overflow_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt14overflow_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt14overflow_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14overflow_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt14overflow_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt15_List_node_base10_M_reverseEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt15_List_node_base11_M_transferEPS_S0_@@GLIBCXX_3.4.14
+FUNC:_ZNSt15_List_node_base4hookEPS_@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base4swapERS_S0_@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base6unhookEv@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base7_M_hookEPS_@@GLIBCXX_3.4.14
+FUNC:_ZNSt15_List_node_base7reverseEv@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base8transferEPS_S0_@@GLIBCXX_3.4
+FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt15__exception_ptr13exception_ptr4swapERS0_@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrC1ERKS0_@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrC1Ev@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrC2EMS0_FvvE@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrC2ERKS0_@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrC2Ev@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrD1Ev@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptrD2Ev@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptraSERKS0_@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5gbumpEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5pbumpEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sputcEc@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6snextcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6stosscEv@@GLIBCXX_3.4.10
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7pubsyncEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7sungetcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE8in_availEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE8overflowEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE8pubimbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9pbackfailEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9sputbackcEc@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC1ERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC2ERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5gbumpEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5pbumpEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5sputcEw@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE5uflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE6sbumpcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE6snextcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE6stosscEv@@GLIBCXX_3.4.10
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE7pubsyncEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE7sungetcEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE8in_availEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE8overflowEj@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE8pubimbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE9pbackfailEj@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE9showmanycEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE9sputbackcEw@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEEC1ERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEEC2ERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEEaSERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE15_M_update_egptrEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE15_M_update_egptrEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9underflowEv@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIcEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIcEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIwEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIwEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15messages_bynameIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIcEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIcEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIwEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIwEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15numpunct_bynameIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15underflow_errorC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt15underflow_errorC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt15underflow_errorD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15underflow_errorD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt15underflow_errorD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt16__numpunct_cacheIcE8_M_cacheERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIcEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIcEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIwE8_M_cacheERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16invalid_argumentD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt16invalid_argumentD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt16nested_exceptionD0Ev@@CXXABI_1.3.5
+FUNC:_ZNSt16nested_exceptionD1Ev@@CXXABI_1.3.5
+FUNC:_ZNSt16nested_exceptionD2Ev@@CXXABI_1.3.5
+FUNC:_ZNSt17__timepunct_cacheIcEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIcEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17__timepunct_cacheIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17bad_function_callD0Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt17bad_function_callD1Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt17bad_function_callD2Ev@@GLIBCXX_3.4.15
+FUNC:_ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb0EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb0EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb0EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb1EEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb1EEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb1EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb1EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIcLb1EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb0EEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb0EEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb0EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb0EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb0EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb1EEC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb1EEC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb1EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb1EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt17moneypunct_bynameIwLb1EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb0EE8_M_cacheERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb0EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb0EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb0EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb0EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb0EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb1EE8_M_cacheERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb1EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb1EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb1EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb1EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIcLb1EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb0EE8_M_cacheERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb0EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb0EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb0EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb0EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb0EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb1EE8_M_cacheERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb1EEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb1EEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb1EED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb1EED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18__moneypunct_cacheIwLb1EED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt18condition_variable10notify_allEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variable10notify_oneEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableC1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableC2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableD1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt18condition_variableD2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@@GLIBCXX_3.4.5
+FUNC:_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4
+FUNC:_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@@GLIBCXX_3.4.5
+FUNC:_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4
+FUNC:_ZNSt22condition_variable_anyC1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt22condition_variable_anyC2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt22condition_variable_anyD1Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt22condition_variable_anyD2Ev@@GLIBCXX_3.4.11
+FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcEC1EP15__locale_structPKtbj@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcEC1EPKtbj@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcEC2EP15__locale_structPKtbj@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcEC2EPKtbj@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwE19_M_initialize_ctypeEv@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt5ctypeIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6__norm15_List_node_base10_M_reverseEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt6__norm15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.14
+FUNC:_ZNSt6__norm15_List_node_base4hookEPS0_@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base6unhookEv@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.14
+FUNC:_ZNSt6__norm15_List_node_base7reverseEv@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
+FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
+FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
+FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
+FUNC:_ZNSt6locale21_S_normalize_categoryEi@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEj@@GLIBCXX_3.4.7
+FUNC:_ZNSt6locale5_Impl16_M_install_facetEPKNS_2idEPKNS_5facetE@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_Impl16_M_replace_facetEPKS0_PKNS_2idE@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_Impl19_M_replace_categoryEPKS0_PKPKNS_2idE@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_Impl21_M_replace_categoriesEPKS0_i@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplC1EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplC1ERKS0_j@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplC2EPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplC2ERKS0_j@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5_ImplD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facet13_S_get_c_nameEv@@GLIBCXX_3.4.6
+FUNC:_ZNSt6locale5facet15_S_get_c_localeEv@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facet17_S_clone_c_localeERP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facet18_S_create_c_localeERP15__locale_structPKcS2_@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facet19_S_destroy_c_localeERP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facetD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facetD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6locale5facetD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6locale6globalERKS_@@GLIBCXX_3.4
+FUNC:_ZNSt6locale7classicEv@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC1EPKc@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC1EPNS_5_ImplE@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC1ERKS_@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC1ERKS_PKci@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC1ERKS_S1_i@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC2EPKc@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC2EPNS_5_ImplE@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC2ERKS_@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC2ERKS_PKci@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC2ERKS_S1_i@@GLIBCXX_3.4
+FUNC:_ZNSt6localeC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
+FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
+FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
+FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIcc11__mbstate_tEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIcc11__mbstate_tED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIcc11__mbstate_tED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIcc11__mbstate_tED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7codecvtIwc11__mbstate_tED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7collateIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8__detail15_List_node_base10_M_reverseEv@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15
+FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15
+FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base13_M_grow_wordsEib@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base15sync_with_stdioEb@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base17_M_call_callbacksENS_5eventE@@GLIBCXX_3.4.6
+FUNC:_ZNSt8ios_base17register_callbackEPFvNS_5eventERS_iEi@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base20_M_dispose_callbacksEv@@GLIBCXX_3.4.6
+FUNC:_ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base4InitC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base4InitD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base6xallocEv@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base7_M_initEv@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base7failureC1ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base7failureC2ERKSs@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base7failureD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base7failureD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_base7failureD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_baseC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_baseC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_baseD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_baseD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8ios_baseD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwEC1EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwEC2EP15__locale_structPKcj@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8messagesIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcE22_M_initialize_numpunctEP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIcED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwE22_M_initialize_numpunctEP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwEC1EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwEC2EP15__locale_structj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEj@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8numpunctIwED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjEC1ERKS0_@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjEC2ERKS0_@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt8valarrayIjEixEj@@GLIBCXX_3.4
+FUNC:_ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__cxx199815_List_node_base10_M_reverseEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__cxx199815_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__cxx199815_List_node_base4hookEPS0_@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base6unhookEv@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.14
+FUNC:_ZNSt9__cxx199815_List_node_base7reverseEv@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.10
+FUNC:_ZNSt9__cxx199815_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt9bad_allocD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9bad_allocD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9bad_allocD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE10exceptionsESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE11_M_setstateESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE15_M_cache_localeERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEc@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE5rdbufEPSt15basic_streambufIcS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE7copyfmtERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC1EPSt15basic_streambufIcS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC2EPSt15basic_streambufIcS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE10exceptionsESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE11_M_setstateESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE15_M_cache_localeERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE3tieEPSt13basic_ostreamIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE4fillEw@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE4initEPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE5clearESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE5imbueERKSt6locale@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE5rdbufEPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE7copyfmtERKS2_@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEE8setstateESt12_Ios_Iostate@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEEC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEEC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9basic_iosIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9exceptionD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9exceptionD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9exceptionD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4
+FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamC1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamC2EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamC2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9strstreamD2Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9type_infoD0Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4
+FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4
+FUNC:_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11
+FUNC:_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11
+FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4
+FUNC:_ZSt11_Hash_bytesPKvjj@@CXXABI_1.3.5
+FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4
+FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCXX_3.4
+FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4
+FUNC:_ZSt15_Fnv_hash_bytesPKvjj@@CXXABI_1.3.5
+FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15
+FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4
+FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11
+FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9
+FUNC:_ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9
+FUNC:_ZSt16__throw_bad_castv@@GLIBCXX_3.4
+FUNC:_ZSt16generic_categoryv@@GLIBCXX_3.4.11
+FUNC:_ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6
+FUNC:_ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6
+FUNC:_ZSt17__throw_bad_allocv@@GLIBCXX_3.4
+FUNC:_ZSt17__verify_groupingPKcjRKSs@@GLIBCXX_3.4.10
+FUNC:_ZSt17current_exceptionv@@CXXABI_1.3.3
+FUNC:_ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE@@CXXABI_1.3.3
+FUNC:_ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base@@GLIBCXX_3.4
+FUNC:_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base@@GLIBCXX_3.4
+FUNC:_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base@@GLIBCXX_3.4
+FUNC:_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base@@GLIBCXX_3.4
+FUNC:_ZSt18__throw_bad_typeidv@@GLIBCXX_3.4
+FUNC:_ZSt18uncaught_exceptionv@@GLIBCXX_3.4
+FUNC:_ZSt19__throw_ios_failurePKc@@GLIBCXX_3.4
+FUNC:_ZSt19__throw_logic_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt19__throw_range_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt19__throw_regex_errorNSt15regex_constants10error_typeE@@GLIBCXX_3.4.15
+FUNC:_ZSt20_Rb_tree_black_countPKSt18_Rb_tree_node_baseS1_@@GLIBCXX_3.4
+FUNC:_ZSt20_Rb_tree_rotate_leftPSt18_Rb_tree_node_baseRS0_@@GLIBCXX_3.4
+FUNC:_ZSt20__throw_domain_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt20__throw_future_errori@@GLIBCXX_3.4.14
+FUNC:_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt20__throw_out_of_rangePKc@@GLIBCXX_3.4
+FUNC:_ZSt20__throw_system_errori@@GLIBCXX_3.4.11
+FUNC:_ZSt21_Rb_tree_rotate_rightPSt18_Rb_tree_node_baseRS0_@@GLIBCXX_3.4
+FUNC:_ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9
+FUNC:_ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9
+FUNC:_ZSt21__throw_bad_exceptionv@@GLIBCXX_3.4
+FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4
+FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4
+FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14
+FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4
+FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4
+FUNC:_ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt2wsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt4endlIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt4endsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt4endsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
+FUNC:_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4
+FUNC:_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCXX_3.4
+FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4
+FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt10moneypunctIcLb0EEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt10moneypunctIwLb0EEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt11__timepunctIcEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt11__timepunctIwEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt5ctypeIcEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt5ctypeIwEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7codecvtIcc11__mbstate_tEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7codecvtIwc11__mbstate_tEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7collateIcEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7collateIwEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8messagesIcEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8messagesIwEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8numpunctIcEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8numpunctIwEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9has_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9terminatev@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt10moneypunctIcLb0EEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt10moneypunctIcLb1EEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt10moneypunctIwLb0EEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt10moneypunctIwLb1EEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt11__timepunctIcEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt11__timepunctIwEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt5ctypeIwEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7codecvtIcc11__mbstate_tEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7collateIcEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7collateIwEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8messagesIcEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8messagesIwEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8numpunctIwEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZSt9use_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@@GLIBCXX_3.4
+FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKa@@GLIBCXX_3.4
+FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4
+FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKh@@GLIBCXX_3.4
+FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_a@@GLIBCXX_3.4
+FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c@@GLIBCXX_3.4
+FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_h@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St5_Setw@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@@GLIBCXX_3.4
+FUNC:_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@@GLIBCXX_3.4
+FUNC:_ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStlsIdwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStlsIewSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStlsIfcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStlsIfwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKc@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_S3_@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St5_Setw@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_c@@GLIBCXX_3.4
+FUNC:_ZStlsIwSt11char_traitsIwESaIwEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@@GLIBCXX_3.4
+FUNC:_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_@@GLIBCXX_3.4
+FUNC:_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_@@GLIBCXX_3.4
+FUNC:_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES3_RKS6_@@GLIBCXX_3.4
+FUNC:_ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_EPKS3_RKS6_@@GLIBCXX_3.4
+FUNC:_ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ERKS6_S8_@@GLIBCXX_3.4
+FUNC:_ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ES3_RKS6_@@GLIBCXX_3.4
+FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Pa@@GLIBCXX_3.4
+FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ph@@GLIBCXX_3.4
+FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ra@@GLIBCXX_3.4
+FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Rh@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_PS3_@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_RS3_@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St5_Setw@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_Setbase@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@@GLIBCXX_3.4
+FUNC:_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4
+FUNC:_ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStrsIdwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStrsIewSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStrsIfcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStrsIfwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_PS3_@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_RS3_@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St5_Setw@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St8_Setbase@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@@GLIBCXX_3.4
+FUNC:_ZStrsIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4
+FUNC:_ZThn8_NSdD0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSdD1Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt9strstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZThn8_NSt9strstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSdD0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSdD1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSiD0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSiD1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSoD0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSoD1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt10istrstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt10istrstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt10ostrstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt10ostrstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt9strstreamD0Ev@@GLIBCXX_3.4
+FUNC:_ZTv0_n12_NSt9strstreamD1Ev@@GLIBCXX_3.4
+FUNC:_ZdaPv@@GLIBCXX_3.4
+FUNC:_ZdaPvRKSt9nothrow_t@@GLIBCXX_3.4
+FUNC:_ZdlPv@@GLIBCXX_3.4
+FUNC:_ZdlPvRKSt9nothrow_t@@GLIBCXX_3.4
+FUNC:_Znaj@@GLIBCXX_3.4
+FUNC:_ZnajRKSt9nothrow_t@@GLIBCXX_3.4
+FUNC:_Znwj@@GLIBCXX_3.4
+FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
+FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
+FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
+FUNC:__cxa_allocate_exception@@CXXABI_1.3
+FUNC:__cxa_bad_cast@@CXXABI_1.3
+FUNC:__cxa_bad_typeid@@CXXABI_1.3
+FUNC:__cxa_begin_catch@@CXXABI_1.3
+FUNC:__cxa_call_unexpected@@CXXABI_1.3
+FUNC:__cxa_current_exception_type@@CXXABI_1.3
+FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
+FUNC:__cxa_demangle@@CXXABI_1.3
+FUNC:__cxa_end_catch@@CXXABI_1.3
+FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
+FUNC:__cxa_free_exception@@CXXABI_1.3
+FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
+FUNC:__cxa_get_globals@@CXXABI_1.3
+FUNC:__cxa_get_globals_fast@@CXXABI_1.3
+FUNC:__cxa_guard_abort@@CXXABI_1.3
+FUNC:__cxa_guard_acquire@@CXXABI_1.3
+FUNC:__cxa_guard_release@@CXXABI_1.3
+FUNC:__cxa_pure_virtual@@CXXABI_1.3
+FUNC:__cxa_rethrow@@CXXABI_1.3
+FUNC:__cxa_throw@@CXXABI_1.3
+FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
+FUNC:__cxa_vec_cctor@@CXXABI_1.3
+FUNC:__cxa_vec_cleanup@@CXXABI_1.3
+FUNC:__cxa_vec_ctor@@CXXABI_1.3
+FUNC:__cxa_vec_delete2@@CXXABI_1.3
+FUNC:__cxa_vec_delete3@@CXXABI_1.3
+FUNC:__cxa_vec_delete@@CXXABI_1.3
+FUNC:__cxa_vec_dtor@@CXXABI_1.3
+FUNC:__cxa_vec_new2@@CXXABI_1.3
+FUNC:__cxa_vec_new3@@CXXABI_1.3
+FUNC:__cxa_vec_new@@CXXABI_1.3
+FUNC:__dynamic_cast@@CXXABI_1.3
+FUNC:__gxx_personality_v0@@CXXABI_1.3
+FUNC:__once_proxy@@GLIBCXX_3.4.11
+FUNC:atomic_flag_clear_explicit@@GLIBCXX_3.4.11
+FUNC:atomic_flag_test_and_set_explicit@@GLIBCXX_3.4.11
+OBJECT:0:CXXABI_1.3
+OBJECT:0:CXXABI_1.3.1
+OBJECT:0:CXXABI_1.3.2
+OBJECT:0:CXXABI_1.3.3
+OBJECT:0:CXXABI_1.3.4
+OBJECT:0:CXXABI_1.3.5
+OBJECT:0:CXXABI_1.3.6
+OBJECT:0:CXXABI_TM_1
+OBJECT:0:GLIBCXX_3.4
+OBJECT:0:GLIBCXX_3.4.1
+OBJECT:0:GLIBCXX_3.4.10
+OBJECT:0:GLIBCXX_3.4.11
+OBJECT:0:GLIBCXX_3.4.12
+OBJECT:0:GLIBCXX_3.4.13
+OBJECT:0:GLIBCXX_3.4.14
+OBJECT:0:GLIBCXX_3.4.15
+OBJECT:0:GLIBCXX_3.4.16
+OBJECT:0:GLIBCXX_3.4.17
+OBJECT:0:GLIBCXX_3.4.2
+OBJECT:0:GLIBCXX_3.4.3
+OBJECT:0:GLIBCXX_3.4.4
+OBJECT:0:GLIBCXX_3.4.5
+OBJECT:0:GLIBCXX_3.4.6
+OBJECT:0:GLIBCXX_3.4.7
+OBJECT:0:GLIBCXX_3.4.8
+OBJECT:0:GLIBCXX_3.4.9
+OBJECT:1028:_ZNSt3tr18__detail12__prime_listE@@GLIBCXX_3.4.10
+OBJECT:1028:_ZNSt8__detail12__prime_listE@@GLIBCXX_3.4.10
+OBJECT:12:_ZTIN10__cxxabiv116__enum_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv117__array_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv117__pbase_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv119__pointer_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv120__function_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv121__vmi_class_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv123__fundamental_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN10__cxxabiv129__pointer_to_member_type_infoE@@CXXABI_1.3
+OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
+OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4
+OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4
+OBJECT:12:_ZTISt10lock_error@@GLIBCXX_3.4.11
+OBJECT:12:_ZTISt10ostrstream@@GLIBCXX_3.4
+OBJECT:12:_ZTISt11__timepunctIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt11__timepunctIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt11logic_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt11range_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt11regex_error@@GLIBCXX_3.4.15
+OBJECT:12:_ZTISt12bad_weak_ptr@@GLIBCXX_3.4.15
+OBJECT:12:_ZTISt12ctype_bynameIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12ctype_bynameIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12domain_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12future_error@@GLIBCXX_3.4.14
+OBJECT:12:_ZTISt12length_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12out_of_range@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12strstreambuf@@GLIBCXX_3.4
+OBJECT:12:_ZTISt12system_error@@GLIBCXX_3.4.11
+OBJECT:12:_ZTISt13bad_exception@@GLIBCXX_3.4
+OBJECT:12:_ZTISt13basic_filebufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt13basic_filebufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt13basic_fstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt13runtime_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14basic_ifstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14codecvt_bynameIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14codecvt_bynameIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14collate_bynameIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14collate_bynameIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt14overflow_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15basic_stringbufIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15messages_bynameIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15messages_bynameIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15numpunct_bynameIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15numpunct_bynameIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt15underflow_error@@GLIBCXX_3.4
+OBJECT:12:_ZTISt16invalid_argument@@GLIBCXX_3.4
+OBJECT:12:_ZTISt17bad_function_call@@GLIBCXX_3.4.15
+OBJECT:12:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt17moneypunct_bynameIcLb1EE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt17moneypunct_bynameIwLb0EE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt17moneypunct_bynameIwLb1EE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt18basic_stringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt5ctypeIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7collateIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7collateIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt8bad_cast@@GLIBCXX_3.4
+OBJECT:12:_ZTISt8numpunctIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt8numpunctIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9bad_alloc@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9basic_iosIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:12:_ZTISt9strstream@@GLIBCXX_3.4
+OBJECT:12:_ZTSSt5ctypeIcE@@GLIBCXX_3.4
+OBJECT:12:_ZTSSt5ctypeIwE@@GLIBCXX_3.4
+OBJECT:12:_ZTSSt8bad_cast@@GLIBCXX_3.4
+OBJECT:12:_ZTSSt8ios_base@@GLIBCXX_3.4
+OBJECT:13:_ZTSSt9bad_alloc@@GLIBCXX_3.4
+OBJECT:13:_ZTSSt9exception@@GLIBCXX_3.4
+OBJECT:13:_ZTSSt9strstream@@GLIBCXX_3.4
+OBJECT:13:_ZTSSt9time_base@@GLIBCXX_3.4
+OBJECT:13:_ZTSSt9type_info@@GLIBCXX_3.4
+OBJECT:140:_ZSt4cerr@@GLIBCXX_3.4
+OBJECT:140:_ZSt4clog@@GLIBCXX_3.4
+OBJECT:140:_ZSt4cout@@GLIBCXX_3.4
+OBJECT:144:_ZSt3cin@@GLIBCXX_3.4
+OBJECT:144:_ZSt5wcerr@@GLIBCXX_3.4
+OBJECT:144:_ZSt5wclog@@GLIBCXX_3.4
+OBJECT:144:_ZSt5wcout@@GLIBCXX_3.4
+OBJECT:148:_ZSt4wcin@@GLIBCXX_3.4
+OBJECT:14:_ZTSSt7collateIcE@@GLIBCXX_3.4
+OBJECT:14:_ZTSSt7collateIwE@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt10bad_typeid@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt10ctype_base@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt10istrstream@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt10lock_error@@GLIBCXX_3.4.11
+OBJECT:15:_ZTSSt10money_base@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt10ostrstream@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt8messagesIcE@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt8messagesIwE@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt8numpunctIcE@@GLIBCXX_3.4
+OBJECT:15:_ZTSSt8numpunctIwE@@GLIBCXX_3.4
+OBJECT:16:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
+OBJECT:16:_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
+OBJECT:16:_ZTIPDd@@CXXABI_1.3.4
+OBJECT:16:_ZTIPDe@@CXXABI_1.3.4
+OBJECT:16:_ZTIPDf@@CXXABI_1.3.4
+OBJECT:16:_ZTIPDi@@CXXABI_1.3.3
+OBJECT:16:_ZTIPDn@@CXXABI_1.3.5
+OBJECT:16:_ZTIPDs@@CXXABI_1.3.3
+OBJECT:16:_ZTIPKDd@@CXXABI_1.3.4
+OBJECT:16:_ZTIPKDe@@CXXABI_1.3.4
+OBJECT:16:_ZTIPKDf@@CXXABI_1.3.4
+OBJECT:16:_ZTIPKDi@@CXXABI_1.3.3
+OBJECT:16:_ZTIPKDn@@CXXABI_1.3.5
+OBJECT:16:_ZTIPKDs@@CXXABI_1.3.3
+OBJECT:16:_ZTIPKa@@CXXABI_1.3
+OBJECT:16:_ZTIPKb@@CXXABI_1.3
+OBJECT:16:_ZTIPKc@@CXXABI_1.3
+OBJECT:16:_ZTIPKd@@CXXABI_1.3
+OBJECT:16:_ZTIPKe@@CXXABI_1.3
+OBJECT:16:_ZTIPKf@@CXXABI_1.3
+OBJECT:16:_ZTIPKh@@CXXABI_1.3
+OBJECT:16:_ZTIPKi@@CXXABI_1.3
+OBJECT:16:_ZTIPKj@@CXXABI_1.3
+OBJECT:16:_ZTIPKl@@CXXABI_1.3
+OBJECT:16:_ZTIPKm@@CXXABI_1.3
+OBJECT:16:_ZTIPKn@@CXXABI_1.3.5
+OBJECT:16:_ZTIPKo@@CXXABI_1.3.5
+OBJECT:16:_ZTIPKs@@CXXABI_1.3
+OBJECT:16:_ZTIPKt@@CXXABI_1.3
+OBJECT:16:_ZTIPKv@@CXXABI_1.3
+OBJECT:16:_ZTIPKw@@CXXABI_1.3
+OBJECT:16:_ZTIPKx@@CXXABI_1.3
+OBJECT:16:_ZTIPKy@@CXXABI_1.3
+OBJECT:16:_ZTIPa@@CXXABI_1.3
+OBJECT:16:_ZTIPb@@CXXABI_1.3
+OBJECT:16:_ZTIPc@@CXXABI_1.3
+OBJECT:16:_ZTIPd@@CXXABI_1.3
+OBJECT:16:_ZTIPe@@CXXABI_1.3
+OBJECT:16:_ZTIPf@@CXXABI_1.3
+OBJECT:16:_ZTIPh@@CXXABI_1.3
+OBJECT:16:_ZTIPi@@CXXABI_1.3
+OBJECT:16:_ZTIPj@@CXXABI_1.3
+OBJECT:16:_ZTIPl@@CXXABI_1.3
+OBJECT:16:_ZTIPm@@CXXABI_1.3
+OBJECT:16:_ZTIPn@@CXXABI_1.3.5
+OBJECT:16:_ZTIPo@@CXXABI_1.3.5
+OBJECT:16:_ZTIPs@@CXXABI_1.3
+OBJECT:16:_ZTIPt@@CXXABI_1.3
+OBJECT:16:_ZTIPv@@CXXABI_1.3
+OBJECT:16:_ZTIPw@@CXXABI_1.3
+OBJECT:16:_ZTIPx@@CXXABI_1.3
+OBJECT:16:_ZTIPy@@CXXABI_1.3
+OBJECT:16:_ZTSSt11logic_error@@GLIBCXX_3.4
+OBJECT:16:_ZTSSt11range_error@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt10istrstream@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt10ostrstream@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt14basic_ifstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:16:_ZTTSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:16:_ZTVNSt6locale5facetE@@GLIBCXX_3.4
+OBJECT:16:_ZTVSt11__timepunctIcE@@GLIBCXX_3.4
+OBJECT:16:_ZTVSt11__timepunctIwE@@GLIBCXX_3.4
+OBJECT:16:_ZTVSt16nested_exception@@CXXABI_1.3.5
+OBJECT:16:_ZTVSt8ios_base@@GLIBCXX_3.4
+OBJECT:16:_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:16:_ZTVSt9basic_iosIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12codecvt_base@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12domain_error@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12future_error@@GLIBCXX_3.4.14
+OBJECT:17:_ZTSSt12length_error@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12out_of_range@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12strstreambuf@@GLIBCXX_3.4
+OBJECT:17:_ZTSSt12system_error@@GLIBCXX_3.4.11
+OBJECT:18:_ZTSNSt6locale5facetE@@GLIBCXX_3.4
+OBJECT:18:_ZTSSt13bad_exception@@GLIBCXX_3.4
+OBJECT:18:_ZTSSt13messages_base@@GLIBCXX_3.4
+OBJECT:18:_ZTSSt13runtime_error@@GLIBCXX_3.4
+OBJECT:19:_ZTSSt11__timepunctIcE@@GLIBCXX_3.4
+OBJECT:19:_ZTSSt11__timepunctIwE@@GLIBCXX_3.4
+OBJECT:19:_ZTSSt14error_category@@GLIBCXX_3.4.11
+OBJECT:19:_ZTSSt14overflow_error@@GLIBCXX_3.4
+OBJECT:1:_ZNSs4_Rep11_S_terminalE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt10moneypunctIcLb0EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt10moneypunctIcLb1EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt10moneypunctIwLb0EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt10moneypunctIwLb1EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt12placeholders2_1E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_2E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_3E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_4E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_5E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_6E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_7E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_8E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders2_9E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_10E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_11E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_12E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_13E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_14E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_15E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_16E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_17E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_18E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_19E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_20E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_21E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_22E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_23E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_24E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_25E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_26E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_27E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_28E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt12placeholders3_29E@@GLIBCXX_3.4.15
+OBJECT:1:_ZNSt14numeric_limitsIDiE10is_boundedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE10is_integerE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE12has_infinityE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE13has_quiet_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE14is_specializedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE15has_denorm_lossE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE15tinyness_beforeE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE17has_signaling_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE5trapsE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE8is_exactE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE9is_iec559E@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE9is_moduloE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDiE9is_signedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE10is_boundedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE10is_integerE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE12has_infinityE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE13has_quiet_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE14is_specializedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE15has_denorm_lossE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE15tinyness_beforeE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE17has_signaling_NaNE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE5trapsE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE8is_exactE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE9is_iec559E@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE9is_moduloE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIDsE9is_signedE@@GLIBCXX_3.4.11
+OBJECT:1:_ZNSt14numeric_limitsIaE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIaE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIbE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIcE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIdE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIeE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIfE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIhE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIiE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIjE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIlE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17
+OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIsE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsItE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIwE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIxE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt14numeric_limitsIyE9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt17moneypunct_bynameIcLb0EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt17moneypunct_bynameIcLb1EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt17moneypunct_bynameIwLb0EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt17moneypunct_bynameIwLb1EE4intlE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base10is_boundedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base10is_integerE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base12has_infinityE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base13has_quiet_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base14is_specializedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base15has_denorm_lossE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base15tinyness_beforeE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base17has_signaling_NaNE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base5trapsE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base8is_exactE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base9is_iec559E@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
+OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
+OBJECT:1:_ZSt7nothrow@@GLIBCXX_3.4
+OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCXX_3.4
+OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4
+OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
+OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
+OBJECT:20:_ZTVSt11logic_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt11range_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt11regex_error@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVSt12bad_weak_ptr@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVSt12domain_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt12future_error@@GLIBCXX_3.4.14
+OBJECT:20:_ZTVSt12length_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt12out_of_range@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt12system_error@@GLIBCXX_3.4.11
+OBJECT:20:_ZTVSt13bad_exception@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt13runtime_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt14overflow_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt15underflow_error@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt16invalid_argument@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15
+OBJECT:20:_ZTVSt8bad_cast@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt9bad_alloc@@GLIBCXX_3.4
+OBJECT:20:_ZTVSt9exception@@GLIBCXX_3.4
+OBJECT:21:_ZTSSt16invalid_argument@@GLIBCXX_3.4
+OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCXX_3.4
+OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCXX_3.4
+OBJECT:22:_ZTSSt10moneypunctIcLb1EE@@GLIBCXX_3.4
+OBJECT:22:_ZTSSt10moneypunctIwLb0EE@@GLIBCXX_3.4
+OBJECT:22:_ZTSSt10moneypunctIwLb1EE@@GLIBCXX_3.4
+OBJECT:22:_ZTSSt14collate_bynameIcE@@GLIBCXX_3.4
+OBJECT:22:_ZTSSt14collate_bynameIwE@@GLIBCXX_3.4
+OBJECT:23:_ZTSSt15messages_bynameIcE@@GLIBCXX_3.4
+OBJECT:23:_ZTSSt15messages_bynameIwE@@GLIBCXX_3.4
+OBJECT:23:_ZTSSt15numpunct_bynameIcE@@GLIBCXX_3.4
+OBJECT:23:_ZTSSt15numpunct_bynameIwE@@GLIBCXX_3.4
+OBJECT:24:_ZTISi@@GLIBCXX_3.4
+OBJECT:24:_ZTISo@@GLIBCXX_3.4
+OBJECT:24:_ZTISt13basic_istreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:24:_ZTISt13basic_ostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:24:_ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTVSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:24:_ZTVSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:28:_ZTSSt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:28:_ZTSSt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:28:_ZTTSd@@GLIBCXX_3.4
+OBJECT:28:_ZTTSt14basic_iostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt14collate_bynameIcE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt14collate_bynameIwE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt15messages_bynameIcE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt15messages_bynameIwE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt7collateIcE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt7collateIwE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt8messagesIcE@@GLIBCXX_3.4
+OBJECT:28:_ZTVSt8messagesIwE@@GLIBCXX_3.4
+OBJECT:29:_ZTSSt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4
+OBJECT:29:_ZTSSt17moneypunct_bynameIcLb1EE@@GLIBCXX_3.4
+OBJECT:29:_ZTSSt17moneypunct_bynameIwLb0EE@@GLIBCXX_3.4
+OBJECT:29:_ZTSSt17moneypunct_bynameIwLb1EE@@GLIBCXX_3.4
+OBJECT:29:_ZTSSt21__ctype_abstract_baseIcE@@GLIBCXX_3.4
+OBJECT:29:_ZTSSt21__ctype_abstract_baseIwE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5alnumE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5alphaE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5cntrlE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5digitE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5graphE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5lowerE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5printE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5punctE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5spaceE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base5upperE@@GLIBCXX_3.4
+OBJECT:2:_ZNSt10ctype_base6xdigitE@@GLIBCXX_3.4
+OBJECT:2:_ZTSa@@CXXABI_1.3
+OBJECT:2:_ZTSb@@CXXABI_1.3
+OBJECT:2:_ZTSc@@CXXABI_1.3
+OBJECT:2:_ZTSd@@CXXABI_1.3
+OBJECT:2:_ZTSe@@CXXABI_1.3
+OBJECT:2:_ZTSf@@CXXABI_1.3
+OBJECT:2:_ZTSh@@CXXABI_1.3
+OBJECT:2:_ZTSi@@CXXABI_1.3
+OBJECT:2:_ZTSj@@CXXABI_1.3
+OBJECT:2:_ZTSl@@CXXABI_1.3
+OBJECT:2:_ZTSm@@CXXABI_1.3
+OBJECT:2:_ZTSs@@CXXABI_1.3
+OBJECT:2:_ZTSt@@CXXABI_1.3
+OBJECT:2:_ZTSv@@CXXABI_1.3
+OBJECT:2:_ZTSw@@CXXABI_1.3
+OBJECT:2:_ZTSx@@CXXABI_1.3
+OBJECT:2:_ZTSy@@CXXABI_1.3
+OBJECT:32:_ZTISd@@GLIBCXX_3.4
+OBJECT:32:_ZTISt10moneypunctIcLb0EE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt10moneypunctIcLb1EE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt10moneypunctIwLb0EE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt10moneypunctIwLb1EE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt14basic_iostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt21__ctype_abstract_baseIcE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt21__ctype_abstract_baseIwE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt23__codecvt_abstract_baseIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt5ctypeIcE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt8messagesIcE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt8messagesIwE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:32:_ZTISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:32:_ZTVN10__cxxabiv116__enum_type_infoE@@CXXABI_1.3
+OBJECT:32:_ZTVN10__cxxabiv117__array_type_infoE@@CXXABI_1.3
+OBJECT:32:_ZTVN10__cxxabiv120__function_type_infoE@@CXXABI_1.3
+OBJECT:32:_ZTVN10__cxxabiv123__fundamental_type_infoE@@CXXABI_1.3
+OBJECT:32:_ZTVSt9type_info@@GLIBCXX_3.4
+OBJECT:33:_ZTSN10__cxxabiv116__enum_type_infoE@@CXXABI_1.3
+OBJECT:34:_ZTSN10__cxxabiv117__array_type_infoE@@CXXABI_1.3
+OBJECT:34:_ZTSN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
+OBJECT:34:_ZTSN10__cxxabiv117__pbase_type_infoE@@CXXABI_1.3
+OBJECT:34:_ZTSSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:34:_ZTSSt9basic_iosIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:36:_ZTSN10__cxxabiv119__pointer_type_infoE@@CXXABI_1.3
+OBJECT:36:_ZTSSt14codecvt_bynameIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:36:_ZTSSt14codecvt_bynameIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:36:_ZTVN10__cxxabiv117__pbase_type_infoE@@CXXABI_1.3
+OBJECT:36:_ZTVN10__cxxabiv119__pointer_type_infoE@@CXXABI_1.3
+OBJECT:36:_ZTVN10__cxxabiv129__pointer_to_member_type_infoE@@CXXABI_1.3
+OBJECT:36:_ZTVSt14error_category@@GLIBCXX_3.4.11
+OBJECT:36:_ZTVSt15numpunct_bynameIcE@@GLIBCXX_3.4
+OBJECT:36:_ZTVSt15numpunct_bynameIwE@@GLIBCXX_3.4
+OBJECT:36:_ZTVSt8numpunctIcE@@GLIBCXX_3.4
+OBJECT:36:_ZTVSt8numpunctIwE@@GLIBCXX_3.4
+OBJECT:37:_ZTSN10__cxxabiv120__function_type_infoE@@CXXABI_1.3
+OBJECT:37:_ZTSN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3
+OBJECT:38:_ZTSN10__cxxabiv121__vmi_class_type_infoE@@CXXABI_1.3
+OBJECT:39:_ZTSSt13basic_filebufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:39:_ZTSSt13basic_filebufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:39:_ZTSSt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:39:_ZTSSt13basic_fstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:39:_ZTSSt13basic_istreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:39:_ZTSSt13basic_ostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:3:_ZTSPa@@CXXABI_1.3
+OBJECT:3:_ZTSPb@@CXXABI_1.3
+OBJECT:3:_ZTSPc@@CXXABI_1.3
+OBJECT:3:_ZTSPd@@CXXABI_1.3
+OBJECT:3:_ZTSPe@@CXXABI_1.3
+OBJECT:3:_ZTSPf@@CXXABI_1.3
+OBJECT:3:_ZTSPh@@CXXABI_1.3
+OBJECT:3:_ZTSPi@@CXXABI_1.3
+OBJECT:3:_ZTSPj@@CXXABI_1.3
+OBJECT:3:_ZTSPl@@CXXABI_1.3
+OBJECT:3:_ZTSPm@@CXXABI_1.3
+OBJECT:3:_ZTSPs@@CXXABI_1.3
+OBJECT:3:_ZTSPt@@CXXABI_1.3
+OBJECT:3:_ZTSPv@@CXXABI_1.3
+OBJECT:3:_ZTSPw@@CXXABI_1.3
+OBJECT:3:_ZTSPx@@CXXABI_1.3
+OBJECT:3:_ZTSPy@@CXXABI_1.3
+OBJECT:3:_ZTSSd@@GLIBCXX_3.4
+OBJECT:3:_ZTSSi@@GLIBCXX_3.4
+OBJECT:3:_ZTSSo@@GLIBCXX_3.4
+OBJECT:40:_ZTSN10__cxxabiv123__fundamental_type_infoE@@CXXABI_1.3
+OBJECT:40:_ZTSSt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTSSt14basic_ifstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTSSt14basic_iostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTTSt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTTSt13basic_fstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTTSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTTSt9strstream@@GLIBCXX_3.4
+OBJECT:40:_ZTVSi@@GLIBCXX_3.4
+OBJECT:40:_ZTVSo@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt10istrstream@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt10ostrstream@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt13basic_istreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt13basic_ostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt14basic_ifstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
+OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
+OBJECT:44:_ZTVN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3
+OBJECT:44:_ZTVN10__cxxabiv121__vmi_class_type_infoE@@CXXABI_1.3
+OBJECT:44:_ZTVSt14codecvt_bynameIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:44:_ZTVSt14codecvt_bynameIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:44:_ZTVSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:44:_ZTVSt23__codecvt_abstract_baseIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:44:_ZTVSt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:44:_ZTVSt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:45:_ZTSSt23__codecvt_abstract_baseIwc11__mbstate_tE@@GLIBCXX_3.4
+OBJECT:46:_ZTSN10__cxxabiv129__pointer_to_member_type_infoE@@CXXABI_1.3
+OBJECT:46:_ZTSSt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:46:_ZTSSt15basic_stringbufIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:48:_ZTVSt12ctype_bynameIcE@@GLIBCXX_3.4
+OBJECT:48:_ZTVSt5ctypeIcE@@GLIBCXX_3.4
+OBJECT:48:_ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:48:_ZTVSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:49:_ZTSN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:49:_ZTSN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:49:_ZTSSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:49:_ZTSSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:4:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_max_sizeE@@GLIBCXX_3.4
+OBJECT:4:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_terminalE@@GLIBCXX_3.4
+OBJECT:4:_ZNSbIwSt11char_traitsIwESaIwEE4nposE@@GLIBCXX_3.4
+OBJECT:4:_ZNSs4_Rep11_S_max_sizeE@@GLIBCXX_3.4
+OBJECT:4:_ZNSs4nposE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10__num_base11_S_atoms_inE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10__num_base12_S_atoms_outE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10money_base18_S_default_patternE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10money_base8_S_atomsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10moneypunctIcLb0EE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10moneypunctIcLb1EE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10moneypunctIwLb0EE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt10moneypunctIwLb1EE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt11__timepunctIcE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt11__timepunctIwE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIDiE10has_denormE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE11round_styleE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIDiE12max_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE12min_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE14max_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE14min_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE5radixE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE6digitsE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDiE8digits10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE10has_denormE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE11round_styleE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIDsE12max_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE12min_exponentE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE14max_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE14min_exponent10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE5radixE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE6digitsE@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIDsE8digits10E@@GLIBCXX_3.4.11
+OBJECT:4:_ZNSt14numeric_limitsIaE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIaE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIaE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIbE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIbE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIcE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIcE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIdE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIdE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIeE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIeE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIfE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIfE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIhE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIhE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIiE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIiE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIjE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIjE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIlE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIlE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsImE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17
+OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIsE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIsE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsItE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsItE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIwE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIwE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIxE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIxE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt14numeric_limitsIyE12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt14numeric_limitsIyE8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base10has_denormE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base11round_styleE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base12max_digits10E@@GLIBCXX_3.4.14
+OBJECT:4:_ZNSt21__numeric_limits_base12max_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base12min_exponentE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base14max_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base14min_exponent10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base5radixE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base6digitsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt21__numeric_limits_base8digits10E@@GLIBCXX_3.4
+OBJECT:4:_ZNSt5ctypeIcE10table_sizeE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt5ctypeIcE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt5ctypeIwE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale3allE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale4noneE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale4timeE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale5ctypeE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale7collateE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale7numericE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale8messagesE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt6locale8monetaryE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7codecvtIcc11__mbstate_tE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7codecvtIwc11__mbstate_tE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7collateIcE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7collateIwE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base10floatfieldE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base10scientificE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base11adjustfieldE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base2inE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3appE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3ateE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3begE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3curE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3decE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3endE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3hexE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3octE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base3outE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base4leftE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base5fixedE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base5rightE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base5truncE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base6badbitE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base6binaryE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base6eofbitE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base6skipwsE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base7failbitE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base7goodbitE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base7showposE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base7unitbufE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base8internalE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base8showbaseE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base9basefieldE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base9boolalphaE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base9showpointE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8ios_base9uppercaseE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8messagesIcE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8messagesIwE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8numpunctIcE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8numpunctIwE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:4:_ZSt15future_category@@GLIBCXX_3.4.14
+OBJECT:4:_ZTSPKa@@CXXABI_1.3
+OBJECT:4:_ZTSPKb@@CXXABI_1.3
+OBJECT:4:_ZTSPKc@@CXXABI_1.3
+OBJECT:4:_ZTSPKd@@CXXABI_1.3
+OBJECT:4:_ZTSPKe@@CXXABI_1.3
+OBJECT:4:_ZTSPKf@@CXXABI_1.3
+OBJECT:4:_ZTSPKh@@CXXABI_1.3
+OBJECT:4:_ZTSPKi@@CXXABI_1.3
+OBJECT:4:_ZTSPKj@@CXXABI_1.3
+OBJECT:4:_ZTSPKl@@CXXABI_1.3
+OBJECT:4:_ZTSPKm@@CXXABI_1.3
+OBJECT:4:_ZTSPKs@@CXXABI_1.3
+OBJECT:4:_ZTSPKt@@CXXABI_1.3
+OBJECT:4:_ZTSPKv@@CXXABI_1.3
+OBJECT:4:_ZTSPKw@@CXXABI_1.3
+OBJECT:4:_ZTSPKx@@CXXABI_1.3
+OBJECT:4:_ZTSPKy@@CXXABI_1.3
+OBJECT:50:_ZTSSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:50:_ZTSSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:50:_ZTSSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:50:_ZTSSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt10moneypunctIcLb0EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt10moneypunctIcLb1EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt10moneypunctIwLb0EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt10moneypunctIwLb1EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt17moneypunct_bynameIcLb1EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt17moneypunct_bynameIwLb0EE@@GLIBCXX_3.4
+OBJECT:52:_ZTVSt17moneypunct_bynameIwLb1EE@@GLIBCXX_3.4
+OBJECT:54:_ZTSN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:54:_ZTSN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:56:_ZNSt17__timepunct_cacheIcE12_S_timezonesE@@GLIBCXX_3.4
+OBJECT:56:_ZNSt17__timepunct_cacheIwE12_S_timezonesE@@GLIBCXX_3.4
+OBJECT:58:_ZTSSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:58:_ZTSSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:58:_ZTSSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:58:_ZTSSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:59:_ZTSSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:59:_ZTSSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:59:_ZTSSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:59:_ZTSSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTSSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTSSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTSSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTSSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSd@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt13basic_fstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt14basic_iostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:60:_ZTVSt9strstream@@GLIBCXX_3.4
+OBJECT:64:_ZTVN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt12ctype_bynameIwE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt12strstreambuf@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt13basic_filebufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt13basic_filebufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt15basic_stringbufIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt21__ctype_abstract_baseIcE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt21__ctype_abstract_baseIwE@@GLIBCXX_3.4
+OBJECT:64:_ZTVSt5ctypeIwE@@GLIBCXX_3.4
+OBJECT:67:_ZTSSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:67:_ZTSSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:67:_ZTSSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+OBJECT:67:_ZTSSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt10moneypunctIcLb0EE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt10moneypunctIcLb1EE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt10moneypunctIwLb0EE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt10moneypunctIwLb1EE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt11__timepunctIcE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt11__timepunctIwE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt7collateIcE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt7collateIwE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8messagesIcE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8messagesIwE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8numpunctIcE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8numpunctIwE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4
+OBJECT:8:_ZTIDd@@CXXABI_1.3.4
+OBJECT:8:_ZTIDe@@CXXABI_1.3.4
+OBJECT:8:_ZTIDf@@CXXABI_1.3.4
+OBJECT:8:_ZTIDi@@CXXABI_1.3.3
+OBJECT:8:_ZTIDn@@CXXABI_1.3.5
+OBJECT:8:_ZTIDs@@CXXABI_1.3.3
+OBJECT:8:_ZTIN10__cxxabiv115__forced_unwindE@@CXXABI_1.3.2
+OBJECT:8:_ZTIN10__cxxabiv119__foreign_exceptionE@@CXXABI_1.3.2
+OBJECT:8:_ZTINSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
+OBJECT:8:_ZTINSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
+OBJECT:8:_ZTINSt6locale5facetE@@GLIBCXX_3.4
+OBJECT:8:_ZTISt10ctype_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt10money_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt12codecvt_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt13messages_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt14error_category@@GLIBCXX_3.4.11
+OBJECT:8:_ZTISt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+OBJECT:8:_ZTISt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:8:_ZTISt16nested_exception@@CXXABI_1.3.5
+OBJECT:8:_ZTISt8ios_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt9exception@@GLIBCXX_3.4
+OBJECT:8:_ZTISt9time_base@@GLIBCXX_3.4
+OBJECT:8:_ZTISt9type_info@@GLIBCXX_3.4
+OBJECT:8:_ZTIa@@CXXABI_1.3
+OBJECT:8:_ZTIb@@CXXABI_1.3
+OBJECT:8:_ZTIc@@CXXABI_1.3
+OBJECT:8:_ZTId@@CXXABI_1.3
+OBJECT:8:_ZTIe@@CXXABI_1.3
+OBJECT:8:_ZTIf@@CXXABI_1.3
+OBJECT:8:_ZTIh@@CXXABI_1.3
+OBJECT:8:_ZTIi@@CXXABI_1.3
+OBJECT:8:_ZTIj@@CXXABI_1.3
+OBJECT:8:_ZTIl@@CXXABI_1.3
+OBJECT:8:_ZTIm@@CXXABI_1.3
+OBJECT:8:_ZTIn@@CXXABI_1.3.5
+OBJECT:8:_ZTIo@@CXXABI_1.3.5
+OBJECT:8:_ZTIs@@CXXABI_1.3
+OBJECT:8:_ZTIt@@CXXABI_1.3
+OBJECT:8:_ZTIv@@CXXABI_1.3
+OBJECT:8:_ZTIw@@CXXABI_1.3
+OBJECT:8:_ZTIx@@CXXABI_1.3
+OBJECT:8:_ZTIy@@CXXABI_1.3
+OBJECT:8:_ZTTSi@@GLIBCXX_3.4
+OBJECT:8:_ZTTSo@@GLIBCXX_3.4
+OBJECT:8:_ZTTSt13basic_istreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+OBJECT:8:_ZTTSt13basic_ostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4
+TLS:4:_ZSt11__once_call@@GLIBCXX_3.4.11
+TLS:4:_ZSt15__once_callable@@GLIBCXX_3.4.11
diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
index 32bcf67d81..bc90e0706f 100644
--- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
+++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
@@ -1,6 +1,6 @@
## Linker script for GNU namespace versioning.
##
-## Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009, 2011
+## Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009, 2011, 2012
## Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
@@ -42,9 +42,9 @@ GLIBCXX_7.0 {
__once_proxy;
# operator new(size_t)
- _Znw[jm];
+ _Znw[jmy];
# operator new(size_t, std::nothrow_t const&)
- _Znw[jm]RKSt9nothrow_t;
+ _Znw[jmy]RKSt9nothrow_t;
# operator delete(void*)
_ZdlPv;
@@ -52,9 +52,9 @@ GLIBCXX_7.0 {
_ZdlPvRKSt9nothrow_t;
# operator new[](size_t)
- _Zna[jm];
+ _Zna[jmy];
# operator new[](size_t, std::nothrow_t const&)
- _Zna[jm]RKSt9nothrow_t;
+ _Zna[jmy]RKSt9nothrow_t;
# operator delete[](void*)
_ZdaPv;
@@ -93,16 +93,16 @@ GLIBCXX_7.0 {
# __gnu_cxx::__pool
_ZN9__gnu_cxx3__76__poolILb[01]EE13_M_initializeEv;
- _ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reserve_blockE[jm][jm];
- _ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reclaim_blockEPc[jm];
+ _ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reserve_blockE[jmy][jmy];
+ _ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reclaim_blockEPc[jmy];
_ZN9__gnu_cxx3__76__poolILb[01]EE10_M_destroyEv;
_ZN9__gnu_cxx3__76__poolILb1EE16_M_get_thread_idEv;
- _ZN9__gnu_cxx3__717__pool_alloc_base9_M_refillE[jm];
- _ZN9__gnu_cxx3__717__pool_alloc_base16_M_get_free_listE[jm];
+ _ZN9__gnu_cxx3__717__pool_alloc_base9_M_refillE[jmy];
+ _ZN9__gnu_cxx3__717__pool_alloc_base16_M_get_free_listE[jmy];
_ZN9__gnu_cxx3__717__pool_alloc_base12_M_get_mutexEv;
- _ZN9__gnu_cxx3__79free_list6_M_getE[jm];
+ _ZN9__gnu_cxx3__79free_list6_M_getE[jmy];
_ZN9__gnu_cxx3__79free_list8_M_clearEv;
# __gnu_cxx::stdio_sync_filebuf
@@ -131,6 +131,14 @@ GLIBCXX_7.0 {
_ZNK11__gnu_debug16_Error_formatter8_M_error*;
_ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv;
+ # __gnu_debug::_Safe_unordered_container_base
+ # __gnu_debug::_Safe_local_iterator_base
+ _ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_;
+ _ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv;
+ _ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
+ _ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv;
+
+
# parallel mode
_ZN14__gnu_parallel9_Settings3getEv;
_ZN14__gnu_parallel9_Settings3setERS0_;
@@ -145,16 +153,19 @@ CXXABI_2.0 {
global:
__cxa_allocate_exception;
+ __cxa_allocate_dependent_exception;
__cxa_bad_cast;
__cxa_bad_typeid;
__cxa_begin_catch;
__cxa_begin_cleanup;
__cxa_call_unexpected;
__cxa_current_exception_type;
+ __cxa_deleted_virtual;
__cxa_demangle;
__cxa_end_catch;
__cxa_end_cleanup;
__cxa_free_exception;
+ __cxa_free_dependent_exception;
__cxa_get_exception_ptr;
__cxa_get_globals;
__cxa_get_globals_fast;
@@ -199,6 +210,11 @@ CXXABI_2.0 {
_ZSt17current_exceptionv;
_ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE;
+ # std::nested_exception
+ _ZNSt16nested_exceptionD*;
+ _ZTISt16nested_exception;
+ _ZTVSt16nested_exception;
+
# std::bad_function_call.
_ZNSt17bad_function_callD*;
_ZTISt17bad_function_call;
@@ -287,6 +303,11 @@ CXXABI_2.0 {
_ZTIPDn;
_ZTIPKDn;
+ # typeinfo for __int128 and unsigned __int128
+ _ZTI[no];
+ _ZTIP[no];
+ _ZTIPK[no];
+
# virtual table
_ZTVN10__cxxabiv117__array_type_infoE;
_ZTVN10__cxxabiv117__class_type_infoE;
@@ -299,6 +320,12 @@ CXXABI_2.0 {
_ZTVN10__cxxabiv120__si_class_type_infoE;
_ZTVN10__cxxabiv121__vmi_class_type_infoE;
- local:
- *;
+};
+
+# Symbols in the support library (libsupc++) supporting trans-mem.
+CXXABI_TM_1 {
+
+ global:
+ __cxa_tm_cleanup;
+
};
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 57744a410e..b99a812168 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -1,7 +1,7 @@
## Linker script for GNU versioning (GNU ld 2.13.91+ only.)
##
-## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-## Free Software Foundation, Inc.
+## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+## 2011, 2012 Free Software Foundation, Inc.
##
## This file is part of the GNU ISO C++ Library. This library is free
## software; you can redistribute it and/or modify it under the
@@ -104,7 +104,7 @@ GLIBCXX_3.4 {
std::logic_error*;
std::locale::[A-Za-e]*;
std::locale::facet::[A-Za-z]*;
- std::locale::facet::_S_get_c_locale*;
+ std::locale::facet::_S_get_c_locale*;
std::locale::facet::_S_clone_c_locale*;
std::locale::facet::_S_create_c_locale*;
std::locale::facet::_S_destroy_c_locale*;
@@ -145,7 +145,7 @@ GLIBCXX_3.4 {
std::strstream*;
std::strstreambuf*;
# std::t[a-q]*;
- std::t[a-g]*;
+ std::t[a-g]*;
std::th[a-h]*;
std::th[j-q]*;
std::th[s-z]*;
@@ -188,7 +188,7 @@ GLIBCXX_3.4 {
_ZNSs[0-58-9]a*;
_ZNSs5beginEv;
_ZNSs[0-58-9][c-e]*;
- _ZNSs[0-58-9][g-z]*;
+ _ZNSs[0-59][g-z]*;
# _ZNSs[67][a-z]*E[PRcjmvy]*;
_ZNSs6appendE[PRcjmvy]*;
_ZNSs6assignE[PRcjmvy]*;
@@ -238,7 +238,7 @@ GLIBCXX_3.4 {
_ZNKSs8_M_limit*;
_ZNKSs9_M_ibeginEv;
_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_E*;
- _ZNKSs7compare*;
+ _ZNKSs7compare*;
_ZNKSs5c_strEv;
_ZNKSs8capacityEv;
_ZNKSs4copyEPc[jmy][jmy];
@@ -249,7 +249,7 @@ GLIBCXX_3.4 {
_ZNSbIwSt11char_traitsIwESaIwEE[0-58-9]a*;
_ZNSbIwSt11char_traitsIwESaIwEE5beginEv;
_ZNSbIwSt11char_traitsIwESaIwEE[0-58-9][c-e]*;
- _ZNSbIwSt11char_traitsIwESaIwEE[0-58-9][g-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-59][g-z]*;
# _ZNSbIwSt11char_traitsIwESaIwEE[67][a-b]*E[PRwjmvy]*;
_ZNSbIwSt11char_traitsIwESaIwEE6appendE[PRwjmvy]*;
_ZNSbIwSt11char_traitsIwESaIwEE6assignE[PRwjmvy]*;
@@ -435,10 +435,10 @@ GLIBCXX_3.4 {
# std::locale destructors
_ZNSt6localeD*;
-
+
# std::locale::facet destructors
_ZNSt6locale5facetD*;
-
+
# std::locale::_Impl constructors, destructors
_ZNSt6locale5_ImplC*;
_ZNSt6locale5_ImplD*;
@@ -447,7 +447,7 @@ GLIBCXX_3.4 {
_ZNSt8ios_baseD*;
_ZNSt8ios_base4InitD*;
- # bool std::has_facet
+ # bool std::has_facet
_ZSt9has_facetIS*;
# std::use_facet
@@ -486,7 +486,7 @@ GLIBCXX_3.4 {
# std::time_get_byname
_ZNSt15time_get_byname*;
-
+
# std::time_put
_ZNSt8time_put*;
_ZNKSt8time_put*;
@@ -500,10 +500,14 @@ GLIBCXX_3.4 {
_ZNSt21__numeric_limits_base1[0-7]mi*;
_ZNSt21__numeric_limits_base1[0-7]max_e*;
- _ZNSt14numeric_limitsI[^g]E[5-9]*;
- _ZNSt14numeric_limitsI[^g]E1[0-7][hirt]*;
- _ZNSt14numeric_limitsI[^g]E1[0-7]mi*;
- _ZNSt14numeric_limitsI[^g]E1[0-7]max_e*;
+ _ZNSt14numeric_limitsI[a-m]E[5-9]*;
+ _ZNSt14numeric_limitsI[p-z]E[5-9]*;
+ _ZNSt14numeric_limitsI[a-m]E1[0-7][hirt]*;
+ _ZNSt14numeric_limitsI[p-z]E1[0-7][hirt]*;
+ _ZNSt14numeric_limitsI[a-m]E1[0-7]mi*;
+ _ZNSt14numeric_limitsI[p-z]E1[0-7]mi*;
+ _ZNSt14numeric_limitsI[a-m]E1[0-7]max_e*;
+ _ZNSt14numeric_limitsI[p-z]E1[0-7]max_e*;
# std::_Rb_tree
_ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
@@ -565,7 +569,7 @@ GLIBCXX_3.4 {
_ZNK11__gnu_debug16_Error_formatter13_M_print_word*;
_ZNK11__gnu_debug16_Error_formatter15_M_print_string*;
_ZNK11__gnu_debug16_Error_formatter8_M_error*;
-
+
# exceptions as functions
_ZSt16__throw_bad_castv;
_ZSt17__throw_bad_allocv;
@@ -805,11 +809,11 @@ GLIBCXX_3.4 {
};
GLIBCXX_3.4.1 {
-
+
_ZNSt12__basic_fileIcE4fileEv;
-
+
} GLIBCXX_3.4;
-
+
GLIBCXX_3.4.2 {
_ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE4fileEv;
@@ -821,7 +825,7 @@ GLIBCXX_3.4.2 {
} GLIBCXX_3.4.1;
GLIBCXX_3.4.3 {
-
+
# stub functions from libmath
acosf;
acosl;
@@ -886,8 +890,12 @@ GLIBCXX_3.4.5 {
_ZNSt11char_traitsI[cw]E2eqERK[cw]S2_;
+ # Those template instantiations weren't exported on Solaris in GCC 4.6
+ # and aren't necessary for correct operation, so don't emit them now
+ # (PR libstdc++/52188).
+#if !defined(__sun__) && !defined(__svr4__)
_ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv;
-
+#endif
} GLIBCXX_3.4.4;
GLIBCXX_3.4.6 {
@@ -965,7 +973,7 @@ GLIBCXX_3.4.10 {
_ZNKSt4hashIeEclEe;
_ZSt17__verify_grouping*;
-
+
_ZNSt8__detail12__prime_listE;
_ZNSt3tr18__detail12__prime_listE;
@@ -988,7 +996,7 @@ GLIBCXX_3.4.10 {
} GLIBCXX_3.4.9;
GLIBCXX_3.4.11 {
-
+
# atomic
__atomic_flag_for_address;
__atomic_flag_wait_explicit;
@@ -1185,7 +1193,8 @@ GLIBCXX_3.4.14 {
# std::numeric_limits::max_digits10
_ZNSt21__numeric_limits_base12max_digits10E;
- _ZNSt14numeric_limitsI[^g]E12max_digits10E;
+ _ZNSt14numeric_limitsI[a-m]E12max_digits10E;
+ _ZNSt14numeric_limitsI[p-z]E12max_digits10E;
_ZNSt14numeric_limitsID[is]E12max_digits10E;
} GLIBCXX_3.4.13;
@@ -1279,6 +1288,39 @@ GLIBCXX_3.4.16 {
} GLIBCXX_3.4.15;
+GLIBCXX_3.4.17 {
+
+ # std::thread::hardware_concurrency
+ _ZNSt6thread20hardware_concurrencyEv;
+
+ # __gnu_debug::_Safe_unordered_container_base and _Safe_local_iterator_base
+ _ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_;
+ _ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv;
+ _ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
+ _ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv;
+
+ # std::chrono::steady_clock::now()
+ _ZNSt6chrono12steady_clock3nowEv;
+
+ # std::numeric_limits<__int128> and <unsigned __int128>
+ _ZNSt14numeric_limitsInE*;
+ _ZNSt14numeric_limitsIoE*;
+
+ # std::string::pop_back()
+ _ZNSs8pop_backEv;
+ # std::wstring::pop_back()
+ _ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv;
+
+ # std::_Async_state_common::~_Async_state_common
+ _ZTINSt13__future_base19_Async_state_commonE;
+ _ZTSNSt13__future_base19_Async_state_commonE;
+ _ZTVNSt13__future_base19_Async_state_commonE;
+ _ZNSt13__future_base19_Async_state_commonD0Ev;
+ _ZNSt13__future_base19_Async_state_commonD1Ev;
+ _ZNSt13__future_base19_Async_state_commonD2Ev;
+
+} GLIBCXX_3.4.16;
+
# Symbols in the support library (libsupc++) have their own tag.
CXXABI_1.3 {
@@ -1303,16 +1345,16 @@ CXXABI_1.3 {
__cxa_rethrow;
__cxa_throw;
__cxa_type_match;
+ __cxa_vec_ctor;
__cxa_vec_cctor;
__cxa_vec_cleanup;
- __cxa_vec_ctor;
+ __cxa_vec_delete;
__cxa_vec_delete2;
__cxa_vec_delete3;
- __cxa_vec_delete;
__cxa_vec_dtor;
+ __cxa_vec_new;
__cxa_vec_new2;
__cxa_vec_new3;
- __cxa_vec_new;
__gxx_personality_v0;
__gxx_personality_sj0;
__dynamic_cast;
@@ -1383,8 +1425,6 @@ CXXABI_1.3 {
# __gnu_cxx::_verbose_terminate_handler()
_ZN9__gnu_cxx27__verbose_terminate_handlerEv;
- local:
- *;
};
CXXABI_1.3.1 {
@@ -1466,3 +1506,20 @@ CXXABI_1.3.5 {
_ZTVSt16nested_exception;
} CXXABI_1.3.4;
+
+CXXABI_1.3.6 {
+
+ __cxa_allocate_dependent_exception;
+ __cxa_free_dependent_exception;
+ __cxa_deleted_virtual;
+
+} CXXABI_1.3.5;
+
+
+# Symbols in the support library (libsupc++) supporting transactional memory.
+CXXABI_TM_1 {
+
+ global:
+ __cxa_tm_cleanup;
+
+}; \ No newline at end of file
diff --git a/libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h b/libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h
index 581c41fda0..be3c1ffd9a 100644
--- a/libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h
+++ b/libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h
@@ -1,7 +1,7 @@
// Low-level functions for atomic operations: version for CPUs providing
// atomic builtins -*- C++ -*-
-// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,12 +33,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Atomic_word
__attribute__ ((__unused__))
__exchange_and_add(volatile _Atomic_word* __mem, int __val) throw ()
- { return __sync_fetch_and_add(__mem, __val); }
+ { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
void
__attribute__ ((__unused__))
__atomic_add(volatile _Atomic_word* __mem, int __val) throw ()
- { __sync_fetch_and_add(__mem, __val); }
+ { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc
index 214c4af7d7..d1d9939764 100644
--- a/libstdc++-v3/config/locale/gnu/monetary_members.cc
+++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc
@@ -1,6 +1,6 @@
// std::moneypunct implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -339,6 +339,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
delete [] __group;
delete [] __ps;
delete [] __ns;
+ __throw_exception_again;
}
char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
@@ -489,6 +490,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
delete [] __group;
delete [] __ps;
delete [] __ns;
+ __throw_exception_again;
}
char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
diff --git a/libstdc++-v3/config/locale/newlib/ctype_members.cc b/libstdc++-v3/config/locale/newlib/ctype_members.cc
new file mode 100644
index 0000000000..53afe6423b
--- /dev/null
+++ b/libstdc++-v3/config/locale/newlib/ctype_members.cc
@@ -0,0 +1,280 @@
+// std::ctype implementation details, newlib version -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // NB: The other ctype<char> specializations are in src/locale.cc and
+ // various /config/os/* files.
+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<char>(0, false, __refs)
+ {
+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ {
+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
+ }
+ }
+
+ ctype_byname<char>::~ctype_byname()
+ { }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ ctype<wchar_t>::__wmask_type
+ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const throw()
+ {
+ __wmask_type __ret;
+ switch (__m)
+ {
+ case space:
+ __ret = wctype("space");
+ break;
+ case print:
+ __ret = wctype("print");
+ break;
+ case cntrl:
+ __ret = wctype("cntrl");
+ break;
+ case upper:
+ __ret = wctype("upper");
+ break;
+ case lower:
+ __ret = wctype("lower");
+ break;
+ case alpha:
+ __ret = wctype("alpha");
+ break;
+ case digit:
+ __ret = wctype("digit");
+ break;
+ case punct:
+ __ret = wctype("punct");
+ break;
+ case xdigit:
+ __ret = wctype("xdigit");
+ break;
+ case alnum:
+ __ret = wctype("alnum");
+ break;
+ case graph:
+ __ret = wctype("graph");
+ break;
+ default:
+ // Different from the generic version, xdigit and print in
+ // newlib are defined as bitwise-OR result of bitmasks:
+ // xdigit = _X | _N;
+ // print = _P | _U | _L | _N | _B;
+ // in which _X and _B don't correspond to any ctype mask.
+ // In order to get the wmask correctly converted when __m is
+ // equal to _X or _B, the two cases are specifically handled
+ // here.
+ if (__m & xdigit)
+ __ret = wctype("xdigit");
+ else if (__m & print)
+ __ret = wctype("print");
+ else
+ __ret = __wmask_type();
+ }
+ return __ret;
+ };
+
+ wchar_t
+ ctype<wchar_t>::do_toupper(wchar_t __c) const
+ { return towupper(__c); }
+
+ const wchar_t*
+ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi)
+ {
+ *__lo = towupper(*__lo);
+ ++__lo;
+ }
+ return __hi;
+ }
+
+ wchar_t
+ ctype<wchar_t>::do_tolower(wchar_t __c) const
+ { return towlower(__c); }
+
+ const wchar_t*
+ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi)
+ {
+ *__lo = towlower(*__lo);
+ ++__lo;
+ }
+ return __hi;
+ }
+
+ bool
+ ctype<wchar_t>::
+ do_is(mask __m, wchar_t __c) const
+ {
+ bool __ret = false;
+ // Newlib C library has a compact encoding that uses 8 bits only.
+ const size_t __bitmasksize = 7;
+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
+ if (__m & _M_bit[__bitcur]
+ && iswctype(__c, _M_wmask[__bitcur]))
+ {
+ __ret = true;
+ break;
+ }
+ return __ret;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
+ {
+ for (; __lo < __hi; ++__vec, ++__lo)
+ {
+ // Newlib C library has a compact encoding that uses 8 bits only.
+ const size_t __bitmasksize = 7;
+ mask __m = 0;
+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
+ if (iswctype(*__lo, _M_wmask[__bitcur]))
+ __m |= _M_bit[__bitcur];
+ *__vec = __m;
+ }
+ return __hi;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi && !this->do_is(__m, *__lo))
+ ++__lo;
+ return __lo;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+ {
+ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
+ ++__lo;
+ return __lo;
+ }
+
+ wchar_t
+ ctype<wchar_t>::
+ do_widen(char __c) const
+ { return _M_widen[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<wchar_t>::
+ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
+ {
+ while (__lo < __hi)
+ {
+ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
+ ++__lo;
+ ++__dest;
+ }
+ return __hi;
+ }
+
+ char
+ ctype<wchar_t>::
+ do_narrow(wchar_t __wc, char __dfault) const
+ {
+ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
+ return _M_narrow[__wc];
+ const int __c = wctob(__wc);
+ return (__c == EOF ? __dfault : static_cast<char>(__c));
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
+ char* __dest) const
+ {
+ if (_M_narrow_ok)
+ while (__lo < __hi)
+ {
+ if (*__lo >= 0 && *__lo < 128)
+ *__dest = _M_narrow[*__lo];
+ else
+ {
+ const int __c = wctob(*__lo);
+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
+ }
+ ++__lo;
+ ++__dest;
+ }
+ else
+ while (__lo < __hi)
+ {
+ const int __c = wctob(*__lo);
+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
+ ++__lo;
+ ++__dest;
+ }
+ return __hi;
+ }
+
+ void
+ ctype<wchar_t>::_M_initialize_ctype() throw()
+ {
+ wint_t __i;
+ for (__i = 0; __i < 128; ++__i)
+ {
+ const int __c = wctob(__i);
+ if (__c == EOF)
+ break;
+ else
+ _M_narrow[__i] = static_cast<char>(__c);
+ }
+ if (__i == 128)
+ _M_narrow_ok = true;
+ else
+ _M_narrow_ok = false;
+ for (size_t __i = 0;
+ __i < sizeof(_M_widen) / sizeof(wint_t); ++__i)
+ _M_widen[__i] = btowc(__i);
+
+ for (size_t __i = 0; __i <= 7; ++__i)
+ {
+ _M_bit[__i] = static_cast<mask>(1 << __i);
+ _M_wmask[__i] = _M_convert_to_wmask(_M_bit[__i]);
+ }
+ }
+#endif // _GLIBCXX_USE_WCHAR_T
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/aix/ctype_configure_char.cc b/libstdc++-v3/config/os/aix/ctype_configure_char.cc
new file mode 100644
index 0000000000..d6ca6b5fbc
--- /dev/null
+++ b/libstdc++-v3/config/os/aix/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/aix/ctype_noninline.h b/libstdc++-v3/config/os/aix/ctype_noninline.h
deleted file mode 100644
index 71024bdcb5..0000000000
--- a/libstdc++-v3/config/os/aix/ctype_noninline.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return 0; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/bionic/ctype_configure_char.cc b/libstdc++-v3/config/os/bionic/ctype_configure_char.cc
new file mode 100644
index 0000000000..d5a8fe1631
--- /dev/null
+++ b/libstdc++-v3/config/os/bionic/ctype_configure_char.cc
@@ -0,0 +1,105 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return _ctype_ + 1; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ {
+ int __x = __c;
+ return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x);
+ }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ {
+ int __x = __c;
+ return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x);
+ }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/bionic/ctype_noninline.h b/libstdc++-v3/config/os/bionic/ctype_noninline.h
deleted file mode 100644
index 78bc296080..0000000000
--- a/libstdc++-v3/config/os/bionic/ctype_noninline.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return _ctype_ + 1; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- {
- int __x = __c;
- return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x);
- }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = this->do_toupper(*__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- {
- int __x = __c;
- return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x);
- }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = this->do_tolower(*__low);
- ++__low;
- }
- return __high;
- }
-
diff --git a/libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc b/libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc
new file mode 100644
index 0000000000..30cf4ad6a0
--- /dev/null
+++ b/libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/bsd/darwin/ctype_noninline.h b/libstdc++-v3/config/os/bsd/darwin/ctype_noninline.h
deleted file mode 100644
index e8e22f6283..0000000000
--- a/libstdc++-v3/config/os/bsd/darwin/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return 0; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/bsd/darwin/os_defines.h b/libstdc++-v3/config/os/bsd/darwin/os_defines.h
index ccefeafa73..421478d82d 100644
--- a/libstdc++-v3/config/os/bsd/darwin/os_defines.h
+++ b/libstdc++-v3/config/os/bsd/darwin/os_defines.h
@@ -39,4 +39,7 @@
// -flat_namespace to work around the way that it doesn't.
#define _GLIBCXX_WEAK_DEFINITION __attribute__ ((weak))
+// Static initializer macro is buggy in darwin, see libstdc++/51906
+#define _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC
+
#endif
diff --git a/libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc b/libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc
new file mode 100644
index 0000000000..30cf4ad6a0
--- /dev/null
+++ b/libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h b/libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h
deleted file mode 100644
index e8e22f6283..0000000000
--- a/libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return 0; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h b/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
index d75cb79aaf..cd654d685c 100644
--- a/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
+++ b/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
@@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 2000, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2009, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,8 +31,6 @@
// anoncvs@anoncvs.netbsd.org:/cvsroot/basesrc/include/ctype.h
// See www.netbsd.org for details of access.
-#include <sys/param.h>
-
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -47,7 +45,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// on the mask type. Because of this, we don't use an enum.
typedef unsigned char mask;
-#if __NetBSD_Version__ < 599004100
+#ifndef _CTYPE_U
static const mask upper = _U;
static const mask lower = _L;
static const mask alpha = _U | _L;
diff --git a/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc b/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc
new file mode 100644
index 0000000000..77fe627569
--- /dev/null
+++ b/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc
@@ -0,0 +1,101 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ extern "C" const u_int8_t _C_ctype_[];
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return _C_ctype_ + 1; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h b/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h
deleted file mode 100644
index 724523f5a8..0000000000
--- a/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- extern "C" const u_int8_t _C_ctype_[];
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return _C_ctype_ + 1; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/djgpp/ctype_configure_char.cc b/libstdc++-v3/config/os/djgpp/ctype_configure_char.cc
new file mode 100644
index 0000000000..f755eb70c4
--- /dev/null
+++ b/libstdc++-v3/config/os/djgpp/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from DJGPP <ctype.h>
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return __dj_ctype_flags+1; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(__dj_ctype_toupper), _M_tolower(__dj_ctype_tolower),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(__dj_ctype_toupper), _M_tolower(__dj_ctype_tolower),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _M_toupper[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _M_tolower[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/djgpp/ctype_noninline.h b/libstdc++-v3/config/os/djgpp/ctype_noninline.h
deleted file mode 100644
index 7b14d38b63..0000000000
--- a/libstdc++-v3/config/os/djgpp/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from DJGPP <ctype.h>
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return __dj_ctype_flags+1; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(__dj_ctype_toupper), _M_tolower(__dj_ctype_tolower),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(__dj_ctype_toupper), _M_tolower(__dj_ctype_tolower),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return _M_toupper[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_toupper[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return _M_tolower[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_tolower[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/generic/ctype_configure_char.cc b/libstdc++-v3/config/os/generic/ctype_configure_char.cc
new file mode 100644
index 0000000000..0daedf5435
--- /dev/null
+++ b/libstdc++-v3/config/os/generic/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/generic/ctype_noninline.h b/libstdc++-v3/config/os/generic/ctype_noninline.h
deleted file mode 100644
index 30045899f7..0000000000
--- a/libstdc++-v3/config/os/generic/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return 0; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc b/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
new file mode 100644
index 0000000000..5eadeaaace
--- /dev/null
+++ b/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
@@ -0,0 +1,196 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+#if _GLIBCXX_C_LOCALE_GNU
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return _S_get_c_locale()->__ctype_b; }
+#else
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ {
+ const ctype_base::mask* __ret;
+ char* __old = setlocale(LC_CTYPE, NULL);
+ char* __sav = NULL;
+ if (__builtin_strcmp(__old, "C"))
+ {
+ const size_t __len = __builtin_strlen(__old) + 1;
+ __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ }
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+ __ret = *__ctype_b_loc();
+#else
+ __ret = __ctype_b;
+#endif
+ if (__sav)
+ {
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ }
+ return __ret;
+ }
+#endif
+
+#if _GLIBCXX_C_LOCALE_GNU
+ ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_clone_c_locale(__cloc)),
+ _M_del(__table != 0 && __del),
+ _M_toupper(_M_c_locale_ctype->__ctype_toupper),
+ _M_tolower(_M_c_locale_ctype->__ctype_tolower),
+ _M_table(__table ? __table : _M_c_locale_ctype->__ctype_b),
+ _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
+ }
+#else
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ char* __old = setlocale(LC_CTYPE, NULL);
+ char* __sav = NULL;
+ if (__builtin_strcmp(__old, "C"))
+ {
+ const size_t __len = __builtin_strlen(__old) + 1;
+ __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ }
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+ _M_toupper = *__ctype_toupper_loc();
+ _M_tolower = *__ctype_tolower_loc();
+ _M_table = __table ? __table : *__ctype_b_loc();
+#else
+ _M_toupper = __ctype_toupper;
+ _M_tolower = __ctype_tolower;
+ _M_table = __table ? __table : __ctype_b;
+#endif
+ if (__sav)
+ {
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ }
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
+ }
+#endif
+
+#if _GLIBCXX_C_LOCALE_GNU
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del),
+ _M_toupper(_M_c_locale_ctype->__ctype_toupper),
+ _M_tolower(_M_c_locale_ctype->__ctype_tolower),
+ _M_table(__table ? __table : _M_c_locale_ctype->__ctype_b),
+ _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
+ }
+#else
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ char* __old = setlocale(LC_CTYPE, NULL);
+ char* __sav = NULL;
+ if (__builtin_strcmp(__old, "C"))
+ {
+ const size_t __len = __builtin_strlen(__old) + 1;
+ __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ }
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+ _M_toupper = *__ctype_toupper_loc();
+ _M_tolower = *__ctype_tolower_loc();
+ _M_table = __table ? __table : *__ctype_b_loc();
+#else
+ _M_toupper = __ctype_toupper;
+ _M_tolower = __ctype_tolower;
+ _M_table = __table ? __table : __ctype_b;
+#endif
+ if (__sav)
+ {
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ }
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
+ }
+#endif
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _M_toupper[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _M_tolower[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h b/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
deleted file mode 100644
index 45785d4a5e..0000000000
--- a/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
+++ /dev/null
@@ -1,190 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
-#if _GLIBCXX_C_LOCALE_GNU
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return _S_get_c_locale()->__ctype_b; }
-#else
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- {
- const ctype_base::mask* __ret;
- char* __old = setlocale(LC_CTYPE, NULL);
- char* __sav = NULL;
- if (__builtin_strcmp(__old, "C"))
- {
- const size_t __len = __builtin_strlen(__old) + 1;
- __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- setlocale(LC_CTYPE, "C");
- }
-#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- __ret = *__ctype_b_loc();
-#else
- __ret = __ctype_b;
-#endif
- if (__sav)
- {
- setlocale(LC_CTYPE, __sav);
- delete [] __sav;
- }
- return __ret;
- }
-#endif
-
-#if _GLIBCXX_C_LOCALE_GNU
- ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_c_locale_ctype(_S_clone_c_locale(__cloc)),
- _M_del(__table != 0 && __del),
- _M_toupper(_M_c_locale_ctype->__ctype_toupper),
- _M_tolower(_M_c_locale_ctype->__ctype_tolower),
- _M_table(__table ? __table : _M_c_locale_ctype->__ctype_b),
- _M_widen_ok(0), _M_narrow_ok(0)
- {
- __builtin_memset(_M_widen, 0, sizeof(_M_widen));
- __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
- }
-#else
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
- _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
- {
- char* __old = setlocale(LC_CTYPE, NULL);
- char* __sav = NULL;
- if (__builtin_strcmp(__old, "C"))
- {
- const size_t __len = __builtin_strlen(__old) + 1;
- __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- setlocale(LC_CTYPE, "C");
- }
-#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- _M_toupper = *__ctype_toupper_loc();
- _M_tolower = *__ctype_tolower_loc();
- _M_table = __table ? __table : *__ctype_b_loc();
-#else
- _M_toupper = __ctype_toupper;
- _M_tolower = __ctype_tolower;
- _M_table = __table ? __table : __ctype_b;
-#endif
- if (__sav)
- {
- setlocale(LC_CTYPE, __sav);
- delete [] __sav;
- }
- __builtin_memset(_M_widen, 0, sizeof(_M_widen));
- __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
- }
-#endif
-
-#if _GLIBCXX_C_LOCALE_GNU
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
- _M_del(__table != 0 && __del),
- _M_toupper(_M_c_locale_ctype->__ctype_toupper),
- _M_tolower(_M_c_locale_ctype->__ctype_tolower),
- _M_table(__table ? __table : _M_c_locale_ctype->__ctype_b),
- _M_widen_ok(0), _M_narrow_ok(0)
- {
- __builtin_memset(_M_widen, 0, sizeof(_M_widen));
- __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
- }
-#else
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
- _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
- {
- char* __old = setlocale(LC_CTYPE, NULL);
- char* __sav = NULL;
- if (__builtin_strcmp(__old, "C"))
- {
- const size_t __len = __builtin_strlen(__old) + 1;
- __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- setlocale(LC_CTYPE, "C");
- }
-#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- _M_toupper = *__ctype_toupper_loc();
- _M_tolower = *__ctype_tolower_loc();
- _M_table = __table ? __table : *__ctype_b_loc();
-#else
- _M_toupper = __ctype_toupper;
- _M_tolower = __ctype_tolower;
- _M_table = __table ? __table : __ctype_b;
-#endif
- if (__sav)
- {
- setlocale(LC_CTYPE, __sav);
- delete [] __sav;
- }
- __builtin_memset(_M_widen, 0, sizeof(_M_widen));
- __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
- }
-#endif
-
- char
- ctype<char>::do_toupper(char __c) const
- { return _M_toupper[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_toupper[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return _M_tolower[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_tolower[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/gnu-linux/os_defines.h b/libstdc++-v3/config/os/gnu-linux/os_defines.h
index c788cb0710..c4aa305487 100644
--- a/libstdc++-v3/config/os/gnu-linux/os_defines.h
+++ b/libstdc++-v3/config/os/gnu-linux/os_defines.h
@@ -1,6 +1,6 @@
// Specific definitions for GNU/Linux -*- C++ -*-
-// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010
+// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -39,4 +39,11 @@
#include <features.h>
+// Provide a declaration for the possibly deprecated gets function, as
+// glibc 2.15 and later does not declare gets for ISO C11 when
+// __GNU_SOURCE is defined.
+#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
+# undef _GLIBCXX_HAVE_GETS
+#endif
+
#endif
diff --git a/libstdc++-v3/config/os/hpux/ctype_configure_char.cc b/libstdc++-v3/config/os/hpux/ctype_configure_char.cc
new file mode 100644
index 0000000000..4ac958a279
--- /dev/null
+++ b/libstdc++-v3/config/os/hpux/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return __SB_masks; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : (const mask *) __SB_masks)
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : (const mask *) __SB_masks)
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/hpux/ctype_noninline.h b/libstdc++-v3/config/os/hpux/ctype_noninline.h
deleted file mode 100644
index 9d178443e2..0000000000
--- a/libstdc++-v3/config/os/hpux/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return __SB_masks; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : (const mask *) __SB_masks)
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : (const mask *) __SB_masks)
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/irix/irix6.5/ctype_configure_char.cc b/libstdc++-v3/config/os/irix/irix6.5/ctype_configure_char.cc
new file mode 100644
index 0000000000..aa2481bce0
--- /dev/null
+++ b/libstdc++-v3/config/os/irix/irix6.5/ctype_configure_char.cc
@@ -0,0 +1,101 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(!__table ?
+ (const mask*) (__libc_attr._ctype_tbl->_class + 1) : __table)
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(!__table ?
+ (const mask*) (__libc_attr._ctype_tbl->_class + 1) : __table)
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _toupper(__c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = do_toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _tolower(__c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = do_tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/irix/irix6.5/ctype_noninline.h b/libstdc++-v3/config/os/irix/irix6.5/ctype_noninline.h
deleted file mode 100644
index 3f7af67e86..0000000000
--- a/libstdc++-v3/config/os/irix/irix6.5/ctype_noninline.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return 0; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(!__table ?
- (const mask*) (__libc_attr._ctype_tbl->_class + 1) : __table)
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(!__table ?
- (const mask*) (__libc_attr._ctype_tbl->_class + 1) : __table)
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return _toupper(__c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = do_toupper(*__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return _tolower(__c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = do_tolower(*__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_base.h b/libstdc++-v3/config/os/mingw32-w64/ctype_base.h
new file mode 100644
index 0000000000..5fbdff8e7f
--- /dev/null
+++ b/libstdc++-v3/config/os/mingw32-w64/ctype_base.h
@@ -0,0 +1,64 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997, 1998, 1999, 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// We don't use the C-locale masks defined in mingw/include/ctype.h
+// because those masks do not conform to the requirements of 22.2.1.
+// In particular, a separate 'print' bitmask does not exist (isprint(c)
+// relies on a combination of flags) and the '_ALPHA' mask is also a
+// combination of simple bitmasks. Thus, we define libstdc++-specific
+// masks here, based on the generic masks, and the corresponding
+// classic_table in ctype_noninline.h.
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /// @brief Base class for ctype.
+ struct ctype_base
+ {
+ // Non-standard typedefs.
+ typedef const int* __to_type;
+
+ // NB: Offsets into ctype<char>::_M_table force a particular size
+ // on the mask type. Because of this, we don't use an enum.
+ typedef unsigned short mask;
+ static const mask upper = 1 << 0;
+ static const mask lower = 1 << 1;
+ static const mask alpha = 1 << 2;
+ static const mask digit = 1 << 3;
+ static const mask xdigit = 1 << 4;
+ static const mask space = 1 << 5;
+ static const mask print = 1 << 6;
+ static const mask graph = (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct
+ static const mask cntrl = 1 << 8;
+ static const mask punct = 1 << 9;
+ static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc b/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc
new file mode 100644
index 0000000000..12184075d7
--- /dev/null
+++ b/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc
@@ -0,0 +1,243 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // The classic table used in libstdc++ is *not* the C _ctype table
+ // used by mscvrt, but is based on the ctype masks defined for libstdc++
+ // in ctype_base.h.
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ {
+ static const ctype_base::mask _S_classic_table[256] =
+ {
+ cntrl /* null */,
+ cntrl /* ^A */,
+ cntrl /* ^B */,
+ cntrl /* ^C */,
+ cntrl /* ^D */,
+ cntrl /* ^E */,
+ cntrl /* ^F */,
+ cntrl /* ^G */,
+ cntrl /* ^H */,
+ ctype_base::mask(space | cntrl) /* tab */,
+ ctype_base::mask(space | cntrl) /* LF */,
+ ctype_base::mask(space | cntrl) /* ^K */,
+ ctype_base::mask(space | cntrl) /* FF */,
+ ctype_base::mask(space | cntrl) /* ^M */,
+ cntrl /* ^N */,
+ cntrl /* ^O */,
+ cntrl /* ^P */,
+ cntrl /* ^Q */,
+ cntrl /* ^R */,
+ cntrl /* ^S */,
+ cntrl /* ^T */,
+ cntrl /* ^U */,
+ cntrl /* ^V */,
+ cntrl /* ^W */,
+ cntrl /* ^X */,
+ cntrl /* ^Y */,
+ cntrl /* ^Z */,
+ cntrl /* esc */,
+ cntrl /* ^\ */,
+ cntrl /* ^] */,
+ cntrl /* ^^ */,
+ cntrl /* ^_ */,
+ ctype_base::mask(space | print) /* */,
+ ctype_base::mask(punct | print) /* ! */,
+ ctype_base::mask(punct | print) /* " */,
+ ctype_base::mask(punct | print) /* # */,
+ ctype_base::mask(punct | print) /* $ */,
+ ctype_base::mask(punct | print) /* % */,
+ ctype_base::mask(punct | print) /* & */,
+ ctype_base::mask(punct | print) /* ' */,
+ ctype_base::mask(punct | print) /* ( */,
+ ctype_base::mask(punct | print) /* ) */,
+ ctype_base::mask(punct | print) /* * */,
+ ctype_base::mask(punct | print) /* + */,
+ ctype_base::mask(punct | print) /* , */,
+ ctype_base::mask(punct | print) /* - */,
+ ctype_base::mask(punct | print) /* . */,
+ ctype_base::mask(punct | print) /* / */,
+ ctype_base::mask(digit | xdigit | print) /* 0 */,
+ ctype_base::mask(digit | xdigit | print) /* 1 */,
+ ctype_base::mask(digit | xdigit | print) /* 2 */,
+ ctype_base::mask(digit | xdigit | print) /* 3 */,
+ ctype_base::mask(digit | xdigit | print) /* 4 */,
+ ctype_base::mask(digit | xdigit | print) /* 5 */,
+ ctype_base::mask(digit | xdigit | print) /* 6 */,
+ ctype_base::mask(digit | xdigit | print) /* 7 */,
+ ctype_base::mask(digit | xdigit | print) /* 8 */,
+ ctype_base::mask(digit | xdigit | print) /* 9 */,
+ ctype_base::mask(punct | print) /* : */,
+ ctype_base::mask(punct | print) /* ; */,
+ ctype_base::mask(punct | print) /* < */,
+ ctype_base::mask(punct | print) /* = */,
+ ctype_base::mask(punct | print) /* > */,
+ ctype_base::mask(punct | print) /* ? */,
+ ctype_base::mask(punct | print) /* ! */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* A */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* B */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* C */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* D */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* E */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* F */,
+ ctype_base::mask(alpha | upper | print) /* G */,
+ ctype_base::mask(alpha | upper | print) /* H */,
+ ctype_base::mask(alpha | upper | print) /* I */,
+ ctype_base::mask(alpha | upper | print) /* J */,
+ ctype_base::mask(alpha | upper | print) /* K */,
+ ctype_base::mask(alpha | upper | print) /* L */,
+ ctype_base::mask(alpha | upper | print) /* M */,
+ ctype_base::mask(alpha | upper | print) /* N */,
+ ctype_base::mask(alpha | upper | print) /* O */,
+ ctype_base::mask(alpha | upper | print) /* P */,
+ ctype_base::mask(alpha | upper | print) /* Q */,
+ ctype_base::mask(alpha | upper | print) /* R */,
+ ctype_base::mask(alpha | upper | print) /* S */,
+ ctype_base::mask(alpha | upper | print) /* T */,
+ ctype_base::mask(alpha | upper | print) /* U */,
+ ctype_base::mask(alpha | upper | print) /* V */,
+ ctype_base::mask(alpha | upper | print) /* W */,
+ ctype_base::mask(alpha | upper | print) /* X */,
+ ctype_base::mask(alpha | upper | print) /* Y */,
+ ctype_base::mask(alpha | upper | print) /* Z */,
+ ctype_base::mask(punct | print) /* [ */,
+ ctype_base::mask(punct | print) /* \ */,
+ ctype_base::mask(punct | print) /* ] */,
+ ctype_base::mask(punct | print) /* ^ */,
+ ctype_base::mask(punct | print) /* _ */,
+ ctype_base::mask(punct | print) /* ` */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* a */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* b */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* c */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* d */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* e */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* f */,
+ ctype_base::mask(alpha | lower | print) /* g */,
+ ctype_base::mask(alpha | lower | print) /* h */,
+ ctype_base::mask(alpha | lower | print) /* i */,
+ ctype_base::mask(alpha | lower | print) /* j */,
+ ctype_base::mask(alpha | lower | print) /* k */,
+ ctype_base::mask(alpha | lower | print) /* l */,
+ ctype_base::mask(alpha | lower | print) /* m */,
+ ctype_base::mask(alpha | lower | print) /* n */,
+ ctype_base::mask(alpha | lower | print) /* o */,
+ ctype_base::mask(alpha | lower | print) /* p */,
+ ctype_base::mask(alpha | lower | print) /* q */,
+ ctype_base::mask(alpha | lower | print) /* r */,
+ ctype_base::mask(alpha | lower | print) /* s */,
+ ctype_base::mask(alpha | lower | print) /* t */,
+ ctype_base::mask(alpha | lower | print) /* u */,
+ ctype_base::mask(alpha | lower | print) /* v */,
+ ctype_base::mask(alpha | lower | print) /* w */,
+ ctype_base::mask(alpha | lower | print) /* x */,
+ ctype_base::mask(alpha | lower | print) /* y */,
+ ctype_base::mask(alpha | lower | print) /* x */,
+ ctype_base::mask(punct | print) /* { */,
+ ctype_base::mask(punct | print) /* | */,
+ ctype_base::mask(punct | print) /* } */,
+ ctype_base::mask(punct | print) /* ~ */,
+ cntrl /* del (0x7f)*/,
+ /* The next 128 entries are all 0. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+ return _S_classic_table;
+ }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_inline.h b/libstdc++-v3/config/os/mingw32-w64/ctype_inline.h
new file mode 100644
index 0000000000..f1b9f6c661
--- /dev/null
+++ b/libstdc++-v3/config/os/mingw32-w64/ctype_inline.h
@@ -0,0 +1,75 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2000, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/ctype_inline.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{locale}
+ */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
+// functions go in ctype.cc
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ bool
+ ctype<char>::
+ is(mask __m, char __c) const
+ { return (_M_table[static_cast<unsigned char>(__c) ] & __m); }
+
+
+ const char*
+ ctype<char>::
+ is(const char* __low, const char* __high, mask* __vec) const
+ {
+ while (__low < __high)
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+ return __high;
+ }
+
+ const char*
+ ctype<char>::
+ scan_is(mask __m, const char* __low, const char* __high) const
+ {
+ while (__low < __high && !this->is(__m, *__low))
+ ++__low;
+ return __low;
+ }
+
+ const char*
+ ctype<char>::
+ scan_not(mask __m, const char* __low, const char* __high) const
+ {
+ while (__low < __high && this->is(__m, *__low) != 0)
+ ++__low;
+ return __low;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/mingw32-w64/error_constants.h b/libstdc++-v3/config/os/mingw32-w64/error_constants.h
new file mode 100644
index 0000000000..da2d311762
--- /dev/null
+++ b/libstdc++-v3/config/os/mingw32-w64/error_constants.h
@@ -0,0 +1,142 @@
+// Specific definitions for mingw32 platform -*- C++ -*-
+
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/error_constants.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{system_error}
+ */
+
+#ifndef _GLIBCXX_ERROR_CONSTANTS
+# define _GLIBCXX_ERROR_CONSTANTS
+
+#include <bits/c++config.h>
+#include <cerrno>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Most of the commented-out error codes are socket-related and could be
+// replaced by Winsock WSA-prefixed equivalents.
+ enum class errc
+ {
+// address_family_not_supported = EAFNOSUPPORT,
+// address_in_use = EADDRINUSE,
+// address_not_available = EADDRNOTAVAIL,
+// already_connected = EISCONN,
+ argument_list_too_long = E2BIG,
+ argument_out_of_domain = EDOM,
+ bad_address = EFAULT,
+ bad_file_descriptor = EBADF,
+// bad_message = EBADMSG,
+ broken_pipe = EPIPE,
+// connection_aborted = ECONNABORTED,
+// connection_already_in_progress = EALREADY,
+// connection_refused = ECONNREFUSED,
+// connection_reset = ECONNRESET,
+// cross_device_link = EXDEV,
+// destination_address_required = EDESTADDRREQ,
+ device_or_resource_busy = EBUSY,
+ directory_not_empty = ENOTEMPTY,
+ executable_format_error = ENOEXEC,
+ file_exists = EEXIST,
+ file_too_large = EFBIG,
+ filename_too_long = ENAMETOOLONG,
+ function_not_supported = ENOSYS,
+// host_unreachable = EHOSTUNREACH,
+// identifier_removed = EIDRM,
+ illegal_byte_sequence = EILSEQ,
+ inappropriate_io_control_operation = ENOTTY,
+ interrupted = EINTR,
+ invalid_argument = EINVAL,
+ invalid_seek = ESPIPE,
+ io_error = EIO,
+ is_a_directory = EISDIR,
+// message_size = EMSGSIZE,
+// network_down = ENETDOWN,
+// network_reset = ENETRESET,
+// network_unreachable = ENETUNREACH,
+// no_buffer_space = ENOBUFS,
+#ifdef _GLIBCXX_HAVE_ECHILD
+ no_child_process = ECHILD,
+#endif
+// no_link = ENOLINK,
+ no_lock_available = ENOLCK,
+// no_message_available = ENODATA,
+// no_message = ENOMSG,
+// no_protocol_option = ENOPROTOOPT,
+#ifdef _GLIBCXX_HAVE_ENOSPC
+ no_space_on_device = ENOSPC,
+#endif
+// no_stream_resources = ENOSR,
+ no_such_device_or_address = ENXIO,
+ no_such_device = ENODEV,
+ no_such_file_or_directory = ENOENT,
+ no_such_process = ESRCH,
+ not_a_directory = ENOTDIR,
+// not_a_socket = ENOTSOCK,
+// not_a_stream = ENOSTR,
+// not_connected = ENOTCONN,
+ not_enough_memory = ENOMEM,
+#ifdef _GLIBCXX_HAVE_ENOTSUP
+ not_supported = ENOTSUP,
+#endif
+// operation_canceled = ECANCELED,
+// operation_in_progress = EINPROGRESS,
+#ifdef _GLIBCXX_HAVE_EPERM
+ operation_not_permitted = EPERM,
+#endif
+// operation_not_supported = EOPNOTSUPP,
+#ifdef _GLIBCXX_HAVE_EWOULDBLOCK
+ operation_would_block = EWOULDBLOCK,
+#endif
+// owner_dead = EOWNERDEAD,
+ permission_denied = EACCES,
+// protocol_error = EPROTO,
+// protocol_not_supported = EPROTONOSUPPORT,
+ read_only_file_system = EROFS,
+ resource_deadlock_would_occur = EDEADLK,
+ resource_unavailable_try_again = EAGAIN,
+ result_out_of_range = ERANGE,
+// state_not_recoverable = ENOTRECOVERABLE,
+// stream_timeout = ETIME,
+// text_file_busy = ETXTBSY,
+#ifdef _GLIBCXX_HAVE_ETIMEDOUT
+ timed_out = ETIMEDOUT,
+#endif
+ too_many_files_open_in_system = ENFILE,
+ too_many_files_open = EMFILE,
+ too_many_links = EMLINK
+// too_many_symbolic_link_levels = ELOOP,
+#ifdef _GLIBCXX_HAVE_EOVERFLOW
+ ,
+ value_too_large = EOVERFLOW
+#endif
+// wrong_protocol_type = EPROTOTYPE
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+#endif
diff --git a/libstdc++-v3/config/os/mingw32-w64/os_defines.h b/libstdc++-v3/config/os/mingw32-w64/os_defines.h
new file mode 100644
index 0000000000..c8f827d4d8
--- /dev/null
+++ b/libstdc++-v3/config/os/mingw32-w64/os_defines.h
@@ -0,0 +1,81 @@
+// Specific definitions for generic platforms -*- C++ -*-
+
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/os_defines.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{iosfwd}
+ */
+
+#ifndef _GLIBCXX_OS_DEFINES
+# define _GLIBCXX_OS_DEFINES
+
+// System-specific #define, typedefs, corrections, etc, go here. This
+// file will come before all others.
+
+// Define as 0, if you want, to enable inlining of gthread functions.
+// By default, don't pollute libstdc++ with win32api names.
+#if !defined (__GTHREAD_HIDE_WIN32API)
+# define __GTHREAD_HIDE_WIN32API 1
+#endif
+
+// Don't let win32api windef.h define min and max as macros
+// if included after c++config.h.
+#undef NOMINMAX
+#define NOMINMAX 1
+
+// Make sure that POSIX printf/scanf functions are activated. As
+// libstdc++ depends on POSIX-definitions of those functions, we define
+// it unconditionally.
+#undef __USE_MINGW_ANSI_STDIO
+#define __USE_MINGW_ANSI_STDIO 1
+
+#if defined (_GLIBCXX_DLL)
+#define _GLIBCXX_PSEUDO_VISIBILITY_default __attribute__ ((__dllimport__))
+#else
+#define _GLIBCXX_PSEUDO_VISIBILITY_default
+#endif
+#define _GLIBCXX_PSEUDO_VISIBILITY_hidden
+
+#define _GLIBCXX_PSEUDO_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY_ ## V
+
+// See libstdc++/20806.
+#define _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM 1
+
+// See libstdc++/37522.
+#define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1
+
+// See libstdc++/43738
+// On native windows targets there is no ioctl function. And the existing
+// ioctlsocket function doesn't work for normal file-descriptors.
+#define _GLIBCXX_NO_IOCTL 1
+
+// See libstdc++/51135
+// Class constructors/destructors have __thiscall calling-convention on
+// IA 32-bit
+#if defined (__i386__)
+#define _GLIBCXX_CDTOR_CALLABI __thiscall
+#endif
+
+#endif
diff --git a/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc b/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc
new file mode 100644
index 0000000000..12184075d7
--- /dev/null
+++ b/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc
@@ -0,0 +1,243 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // The classic table used in libstdc++ is *not* the C _ctype table
+ // used by mscvrt, but is based on the ctype masks defined for libstdc++
+ // in ctype_base.h.
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ {
+ static const ctype_base::mask _S_classic_table[256] =
+ {
+ cntrl /* null */,
+ cntrl /* ^A */,
+ cntrl /* ^B */,
+ cntrl /* ^C */,
+ cntrl /* ^D */,
+ cntrl /* ^E */,
+ cntrl /* ^F */,
+ cntrl /* ^G */,
+ cntrl /* ^H */,
+ ctype_base::mask(space | cntrl) /* tab */,
+ ctype_base::mask(space | cntrl) /* LF */,
+ ctype_base::mask(space | cntrl) /* ^K */,
+ ctype_base::mask(space | cntrl) /* FF */,
+ ctype_base::mask(space | cntrl) /* ^M */,
+ cntrl /* ^N */,
+ cntrl /* ^O */,
+ cntrl /* ^P */,
+ cntrl /* ^Q */,
+ cntrl /* ^R */,
+ cntrl /* ^S */,
+ cntrl /* ^T */,
+ cntrl /* ^U */,
+ cntrl /* ^V */,
+ cntrl /* ^W */,
+ cntrl /* ^X */,
+ cntrl /* ^Y */,
+ cntrl /* ^Z */,
+ cntrl /* esc */,
+ cntrl /* ^\ */,
+ cntrl /* ^] */,
+ cntrl /* ^^ */,
+ cntrl /* ^_ */,
+ ctype_base::mask(space | print) /* */,
+ ctype_base::mask(punct | print) /* ! */,
+ ctype_base::mask(punct | print) /* " */,
+ ctype_base::mask(punct | print) /* # */,
+ ctype_base::mask(punct | print) /* $ */,
+ ctype_base::mask(punct | print) /* % */,
+ ctype_base::mask(punct | print) /* & */,
+ ctype_base::mask(punct | print) /* ' */,
+ ctype_base::mask(punct | print) /* ( */,
+ ctype_base::mask(punct | print) /* ) */,
+ ctype_base::mask(punct | print) /* * */,
+ ctype_base::mask(punct | print) /* + */,
+ ctype_base::mask(punct | print) /* , */,
+ ctype_base::mask(punct | print) /* - */,
+ ctype_base::mask(punct | print) /* . */,
+ ctype_base::mask(punct | print) /* / */,
+ ctype_base::mask(digit | xdigit | print) /* 0 */,
+ ctype_base::mask(digit | xdigit | print) /* 1 */,
+ ctype_base::mask(digit | xdigit | print) /* 2 */,
+ ctype_base::mask(digit | xdigit | print) /* 3 */,
+ ctype_base::mask(digit | xdigit | print) /* 4 */,
+ ctype_base::mask(digit | xdigit | print) /* 5 */,
+ ctype_base::mask(digit | xdigit | print) /* 6 */,
+ ctype_base::mask(digit | xdigit | print) /* 7 */,
+ ctype_base::mask(digit | xdigit | print) /* 8 */,
+ ctype_base::mask(digit | xdigit | print) /* 9 */,
+ ctype_base::mask(punct | print) /* : */,
+ ctype_base::mask(punct | print) /* ; */,
+ ctype_base::mask(punct | print) /* < */,
+ ctype_base::mask(punct | print) /* = */,
+ ctype_base::mask(punct | print) /* > */,
+ ctype_base::mask(punct | print) /* ? */,
+ ctype_base::mask(punct | print) /* ! */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* A */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* B */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* C */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* D */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* E */,
+ ctype_base::mask(alpha | upper | xdigit | print) /* F */,
+ ctype_base::mask(alpha | upper | print) /* G */,
+ ctype_base::mask(alpha | upper | print) /* H */,
+ ctype_base::mask(alpha | upper | print) /* I */,
+ ctype_base::mask(alpha | upper | print) /* J */,
+ ctype_base::mask(alpha | upper | print) /* K */,
+ ctype_base::mask(alpha | upper | print) /* L */,
+ ctype_base::mask(alpha | upper | print) /* M */,
+ ctype_base::mask(alpha | upper | print) /* N */,
+ ctype_base::mask(alpha | upper | print) /* O */,
+ ctype_base::mask(alpha | upper | print) /* P */,
+ ctype_base::mask(alpha | upper | print) /* Q */,
+ ctype_base::mask(alpha | upper | print) /* R */,
+ ctype_base::mask(alpha | upper | print) /* S */,
+ ctype_base::mask(alpha | upper | print) /* T */,
+ ctype_base::mask(alpha | upper | print) /* U */,
+ ctype_base::mask(alpha | upper | print) /* V */,
+ ctype_base::mask(alpha | upper | print) /* W */,
+ ctype_base::mask(alpha | upper | print) /* X */,
+ ctype_base::mask(alpha | upper | print) /* Y */,
+ ctype_base::mask(alpha | upper | print) /* Z */,
+ ctype_base::mask(punct | print) /* [ */,
+ ctype_base::mask(punct | print) /* \ */,
+ ctype_base::mask(punct | print) /* ] */,
+ ctype_base::mask(punct | print) /* ^ */,
+ ctype_base::mask(punct | print) /* _ */,
+ ctype_base::mask(punct | print) /* ` */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* a */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* b */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* c */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* d */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* e */,
+ ctype_base::mask(alpha | lower | xdigit | print) /* f */,
+ ctype_base::mask(alpha | lower | print) /* g */,
+ ctype_base::mask(alpha | lower | print) /* h */,
+ ctype_base::mask(alpha | lower | print) /* i */,
+ ctype_base::mask(alpha | lower | print) /* j */,
+ ctype_base::mask(alpha | lower | print) /* k */,
+ ctype_base::mask(alpha | lower | print) /* l */,
+ ctype_base::mask(alpha | lower | print) /* m */,
+ ctype_base::mask(alpha | lower | print) /* n */,
+ ctype_base::mask(alpha | lower | print) /* o */,
+ ctype_base::mask(alpha | lower | print) /* p */,
+ ctype_base::mask(alpha | lower | print) /* q */,
+ ctype_base::mask(alpha | lower | print) /* r */,
+ ctype_base::mask(alpha | lower | print) /* s */,
+ ctype_base::mask(alpha | lower | print) /* t */,
+ ctype_base::mask(alpha | lower | print) /* u */,
+ ctype_base::mask(alpha | lower | print) /* v */,
+ ctype_base::mask(alpha | lower | print) /* w */,
+ ctype_base::mask(alpha | lower | print) /* x */,
+ ctype_base::mask(alpha | lower | print) /* y */,
+ ctype_base::mask(alpha | lower | print) /* x */,
+ ctype_base::mask(punct | print) /* { */,
+ ctype_base::mask(punct | print) /* | */,
+ ctype_base::mask(punct | print) /* } */,
+ ctype_base::mask(punct | print) /* ~ */,
+ cntrl /* del (0x7f)*/,
+ /* The next 128 entries are all 0. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+ return _S_classic_table;
+ }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/mingw32/ctype_noninline.h b/libstdc++-v3/config/os/mingw32/ctype_noninline.h
deleted file mode 100644
index 10b1fbc490..0000000000
--- a/libstdc++-v3/config/os/mingw32/ctype_noninline.h
+++ /dev/null
@@ -1,236 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2007, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// The classic table used in libstdc++ is *not* the C _ctype table
-// used by mscvrt, but is based on the ctype masks defined for libstdc++
-// in ctype_base.h.
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- {
- static const ctype_base::mask _S_classic_table[256] =
- {
- cntrl /* null */,
- cntrl /* ^A */,
- cntrl /* ^B */,
- cntrl /* ^C */,
- cntrl /* ^D */,
- cntrl /* ^E */,
- cntrl /* ^F */,
- cntrl /* ^G */,
- cntrl /* ^H */,
- ctype_base::mask(space | cntrl) /* tab */,
- ctype_base::mask(space | cntrl) /* LF */,
- ctype_base::mask(space | cntrl) /* ^K */,
- ctype_base::mask(space | cntrl) /* FF */,
- ctype_base::mask(space | cntrl) /* ^M */,
- cntrl /* ^N */,
- cntrl /* ^O */,
- cntrl /* ^P */,
- cntrl /* ^Q */,
- cntrl /* ^R */,
- cntrl /* ^S */,
- cntrl /* ^T */,
- cntrl /* ^U */,
- cntrl /* ^V */,
- cntrl /* ^W */,
- cntrl /* ^X */,
- cntrl /* ^Y */,
- cntrl /* ^Z */,
- cntrl /* esc */,
- cntrl /* ^\ */,
- cntrl /* ^] */,
- cntrl /* ^^ */,
- cntrl /* ^_ */,
- ctype_base::mask(space | print) /* */,
- ctype_base::mask(punct | print) /* ! */,
- ctype_base::mask(punct | print) /* " */,
- ctype_base::mask(punct | print) /* # */,
- ctype_base::mask(punct | print) /* $ */,
- ctype_base::mask(punct | print) /* % */,
- ctype_base::mask(punct | print) /* & */,
- ctype_base::mask(punct | print) /* ' */,
- ctype_base::mask(punct | print) /* ( */,
- ctype_base::mask(punct | print) /* ) */,
- ctype_base::mask(punct | print) /* * */,
- ctype_base::mask(punct | print) /* + */,
- ctype_base::mask(punct | print) /* , */,
- ctype_base::mask(punct | print) /* - */,
- ctype_base::mask(punct | print) /* . */,
- ctype_base::mask(punct | print) /* / */,
- ctype_base::mask(digit | xdigit | print) /* 0 */,
- ctype_base::mask(digit | xdigit | print) /* 1 */,
- ctype_base::mask(digit | xdigit | print) /* 2 */,
- ctype_base::mask(digit | xdigit | print) /* 3 */,
- ctype_base::mask(digit | xdigit | print) /* 4 */,
- ctype_base::mask(digit | xdigit | print) /* 5 */,
- ctype_base::mask(digit | xdigit | print) /* 6 */,
- ctype_base::mask(digit | xdigit | print) /* 7 */,
- ctype_base::mask(digit | xdigit | print) /* 8 */,
- ctype_base::mask(digit | xdigit | print) /* 9 */,
- ctype_base::mask(punct | print) /* : */,
- ctype_base::mask(punct | print) /* ; */,
- ctype_base::mask(punct | print) /* < */,
- ctype_base::mask(punct | print) /* = */,
- ctype_base::mask(punct | print) /* > */,
- ctype_base::mask(punct | print) /* ? */,
- ctype_base::mask(punct | print) /* ! */,
- ctype_base::mask(alpha | upper | xdigit | print) /* A */,
- ctype_base::mask(alpha | upper | xdigit | print) /* B */,
- ctype_base::mask(alpha | upper | xdigit | print) /* C */,
- ctype_base::mask(alpha | upper | xdigit | print) /* D */,
- ctype_base::mask(alpha | upper | xdigit | print) /* E */,
- ctype_base::mask(alpha | upper | xdigit | print) /* F */,
- ctype_base::mask(alpha | upper | print) /* G */,
- ctype_base::mask(alpha | upper | print) /* H */,
- ctype_base::mask(alpha | upper | print) /* I */,
- ctype_base::mask(alpha | upper | print) /* J */,
- ctype_base::mask(alpha | upper | print) /* K */,
- ctype_base::mask(alpha | upper | print) /* L */,
- ctype_base::mask(alpha | upper | print) /* M */,
- ctype_base::mask(alpha | upper | print) /* N */,
- ctype_base::mask(alpha | upper | print) /* O */,
- ctype_base::mask(alpha | upper | print) /* P */,
- ctype_base::mask(alpha | upper | print) /* Q */,
- ctype_base::mask(alpha | upper | print) /* R */,
- ctype_base::mask(alpha | upper | print) /* S */,
- ctype_base::mask(alpha | upper | print) /* T */,
- ctype_base::mask(alpha | upper | print) /* U */,
- ctype_base::mask(alpha | upper | print) /* V */,
- ctype_base::mask(alpha | upper | print) /* W */,
- ctype_base::mask(alpha | upper | print) /* X */,
- ctype_base::mask(alpha | upper | print) /* Y */,
- ctype_base::mask(alpha | upper | print) /* Z */,
- ctype_base::mask(punct | print) /* [ */,
- ctype_base::mask(punct | print) /* \ */,
- ctype_base::mask(punct | print) /* ] */,
- ctype_base::mask(punct | print) /* ^ */,
- ctype_base::mask(punct | print) /* _ */,
- ctype_base::mask(punct | print) /* ` */,
- ctype_base::mask(alpha | lower | xdigit | print) /* a */,
- ctype_base::mask(alpha | lower | xdigit | print) /* b */,
- ctype_base::mask(alpha | lower | xdigit | print) /* c */,
- ctype_base::mask(alpha | lower | xdigit | print) /* d */,
- ctype_base::mask(alpha | lower | xdigit | print) /* e */,
- ctype_base::mask(alpha | lower | xdigit | print) /* f */,
- ctype_base::mask(alpha | lower | print) /* g */,
- ctype_base::mask(alpha | lower | print) /* h */,
- ctype_base::mask(alpha | lower | print) /* i */,
- ctype_base::mask(alpha | lower | print) /* j */,
- ctype_base::mask(alpha | lower | print) /* k */,
- ctype_base::mask(alpha | lower | print) /* l */,
- ctype_base::mask(alpha | lower | print) /* m */,
- ctype_base::mask(alpha | lower | print) /* n */,
- ctype_base::mask(alpha | lower | print) /* o */,
- ctype_base::mask(alpha | lower | print) /* p */,
- ctype_base::mask(alpha | lower | print) /* q */,
- ctype_base::mask(alpha | lower | print) /* r */,
- ctype_base::mask(alpha | lower | print) /* s */,
- ctype_base::mask(alpha | lower | print) /* t */,
- ctype_base::mask(alpha | lower | print) /* u */,
- ctype_base::mask(alpha | lower | print) /* v */,
- ctype_base::mask(alpha | lower | print) /* w */,
- ctype_base::mask(alpha | lower | print) /* x */,
- ctype_base::mask(alpha | lower | print) /* y */,
- ctype_base::mask(alpha | lower | print) /* x */,
- ctype_base::mask(punct | print) /* { */,
- ctype_base::mask(punct | print) /* | */,
- ctype_base::mask(punct | print) /* } */,
- ctype_base::mask(punct | print) /* ~ */,
- cntrl /* del (0x7f)*/,
- /* The next 128 entries are all 0. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- return _S_classic_table;
- }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = this->do_toupper(*__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = this->do_tolower(*__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/mingw32/error_constants.h b/libstdc++-v3/config/os/mingw32/error_constants.h
index f2a9116ba9..da2d311762 100644
--- a/libstdc++-v3/config/os/mingw32/error_constants.h
+++ b/libstdc++-v3/config/os/mingw32/error_constants.h
@@ -1,6 +1,6 @@
// Specific definitions for mingw32 platform -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +33,6 @@
#include <bits/c++config.h>
#include <cerrno>
-
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -79,13 +78,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// network_reset = ENETRESET,
// network_unreachable = ENETUNREACH,
// no_buffer_space = ENOBUFS,
-// no_child_process = ECHILD,
+#ifdef _GLIBCXX_HAVE_ECHILD
+ no_child_process = ECHILD,
+#endif
// no_link = ENOLINK,
no_lock_available = ENOLCK,
// no_message_available = ENODATA,
// no_message = ENOMSG,
// no_protocol_option = ENOPROTOOPT,
-// no_space_on_device = ENOSPC,
+#ifdef _GLIBCXX_HAVE_ENOSPC
+ no_space_on_device = ENOSPC,
+#endif
// no_stream_resources = ENOSR,
no_such_device_or_address = ENXIO,
no_such_device = ENODEV,
@@ -96,12 +99,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// not_a_stream = ENOSTR,
// not_connected = ENOTCONN,
not_enough_memory = ENOMEM,
-// not_supported = ENOTSUP,
+#ifdef _GLIBCXX_HAVE_ENOTSUP
+ not_supported = ENOTSUP,
+#endif
// operation_canceled = ECANCELED,
// operation_in_progress = EINPROGRESS,
-// operation_not_permitted = EPERM,
+#ifdef _GLIBCXX_HAVE_EPERM
+ operation_not_permitted = EPERM,
+#endif
// operation_not_supported = EOPNOTSUPP,
-// operation_would_block = EWOULDBLOCK,
+#ifdef _GLIBCXX_HAVE_EWOULDBLOCK
+ operation_would_block = EWOULDBLOCK,
+#endif
// owner_dead = EOWNERDEAD,
permission_denied = EACCES,
// protocol_error = EPROTO,
@@ -113,13 +122,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// state_not_recoverable = ENOTRECOVERABLE,
// stream_timeout = ETIME,
// text_file_busy = ETXTBSY,
-// timed_out = ETIMEDOUT,
+#ifdef _GLIBCXX_HAVE_ETIMEDOUT
+ timed_out = ETIMEDOUT,
+#endif
too_many_files_open_in_system = ENFILE,
too_many_files_open = EMFILE,
too_many_links = EMLINK
- // too_many_symbolic_link_levels = ELOOP,
- // value_too_large = EOVERFLOW,
- // wrong_protocol_type = EPROTOTYPE
+// too_many_symbolic_link_levels = ELOOP,
+#ifdef _GLIBCXX_HAVE_EOVERFLOW
+ ,
+ value_too_large = EOVERFLOW
+#endif
+// wrong_protocol_type = EPROTOTYPE
};
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/config/os/mingw32/os_defines.h b/libstdc++-v3/config/os/mingw32/os_defines.h
index c483a92e6d..f82e25c76a 100644
--- a/libstdc++-v3/config/os/mingw32/os_defines.h
+++ b/libstdc++-v3/config/os/mingw32/os_defines.h
@@ -1,7 +1,7 @@
// Specific definitions for generic platforms -*- C++ -*-
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-// 2009, 2010 Free Software Foundation, Inc.
+// 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -65,4 +65,11 @@
// ioctlsocket function doesn't work for normal file-descriptors.
#define _GLIBCXX_NO_IOCTL 1
+// See libstdc++/51135
+// Class constructors/destructors have __thiscall calling-convention on
+// IA 32-bit
+#if defined (__i386__)
+#define _GLIBCXX_CDTOR_CALLABI __thiscall
+#endif
+
#endif
diff --git a/libstdc++-v3/config/os/newlib/ctype_configure_char.cc b/libstdc++-v3/config/os/newlib/ctype_configure_char.cc
new file mode 100644
index 0000000000..d5a8fe1631
--- /dev/null
+++ b/libstdc++-v3/config/os/newlib/ctype_configure_char.cc
@@ -0,0 +1,105 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return _ctype_ + 1; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ {
+ int __x = __c;
+ return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x);
+ }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ {
+ int __x = __c;
+ return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x);
+ }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = this->do_tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/newlib/ctype_noninline.h b/libstdc++-v3/config/os/newlib/ctype_noninline.h
deleted file mode 100644
index 947bce589e..0000000000
--- a/libstdc++-v3/config/os/newlib/ctype_noninline.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return _ctype_ + 1; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- {
- int __x = __c;
- return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x);
- }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = this->do_toupper(*__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- {
- int __x = __c;
- return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x);
- }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = this->do_tolower(*__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/osf/ctype_base.h b/libstdc++-v3/config/os/osf/ctype_base.h
new file mode 100644
index 0000000000..72aa6f2ccb
--- /dev/null
+++ b/libstdc++-v3/config/os/osf/ctype_base.h
@@ -0,0 +1,59 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997, 1998, 1999, 2003, 2009, 2010
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// Default information, may not be appropriate for specific host.
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /// @brief Base class for ctype.
+ struct ctype_base
+ {
+ // Non-standard typedefs.
+ typedef const int* __to_type;
+
+ // NB: Offsets into ctype<char>::_M_table force a particular size
+ // on the mask type. Because of this, we don't use an enum.
+ typedef unsigned int mask;
+ static const mask upper = 1 << 0;
+ static const mask lower = 1 << 1;
+ static const mask alpha = 1 << 2;
+ static const mask digit = 1 << 3;
+ static const mask xdigit = 1 << 4;
+ static const mask space = 1 << 5;
+ static const mask print = 1 << 6;
+ static const mask graph = (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct
+ static const mask cntrl = 1 << 8;
+ static const mask punct = 1 << 9;
+ static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/osf/ctype_configure_char.cc b/libstdc++-v3/config/os/osf/ctype_configure_char.cc
new file mode 100644
index 0000000000..0daedf5435
--- /dev/null
+++ b/libstdc++-v3/config/os/osf/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/osf/ctype_inline.h b/libstdc++-v3/config/os/osf/ctype_inline.h
new file mode 100644
index 0000000000..ae54f2968b
--- /dev/null
+++ b/libstdc++-v3/config/os/osf/ctype_inline.h
@@ -0,0 +1,168 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2000, 2003, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/ctype_inline.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{locale}
+ */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
+// functions go in ctype.cc
+
+// The following definitions are portable, but insanely slow. If one
+// cares at all about performance, then specialized ctype
+// functionality should be added for the native os in question: see
+// the config/os/bits/ctype_*.h files.
+
+// Constructing a synthetic "C" table should be seriously considered...
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ bool
+ ctype<char>::
+ is(mask __m, char __c) const
+ {
+ if (_M_table)
+ return _M_table[static_cast<unsigned char>(__c)] & __m;
+ else
+ {
+ bool __ret = false;
+ const size_t __bitmasksize = 15;
+ size_t __bitcur = 0; // Lowest bitmask in ctype_base == 0
+ for (; __bitcur <= __bitmasksize; ++__bitcur)
+ {
+ const mask __bit = static_cast<mask>(1 << __bitcur);
+ if (__m & __bit)
+ {
+ bool __testis;
+ switch (__bit)
+ {
+ case space:
+ __testis = isspace(__c);
+ break;
+ case print:
+ __testis = isprint(__c);
+ break;
+ case cntrl:
+ __testis = iscntrl(__c);
+ break;
+ case upper:
+ __testis = isupper(__c);
+ break;
+ case lower:
+ __testis = islower(__c);
+ break;
+ case alpha:
+ __testis = isalpha(__c);
+ break;
+ case digit:
+ __testis = isdigit(__c);
+ break;
+ case punct:
+ __testis = ispunct(__c);
+ break;
+ case xdigit:
+ __testis = isxdigit(__c);
+ break;
+ case alnum:
+ __testis = isalnum(__c);
+ break;
+ case graph:
+ __testis = isgraph(__c);
+ break;
+ default:
+ __testis = false;
+ break;
+ }
+ __ret |= __testis;
+ }
+ }
+ return __ret;
+ }
+ }
+
+ const char*
+ ctype<char>::
+ is(const char* __low, const char* __high, mask* __vec) const
+ {
+ if (_M_table)
+ while (__low < __high)
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+ else
+ {
+ // Highest bitmask in ctype_base == 10.
+ const size_t __bitmasksize = 15;
+ for (;__low < __high; ++__vec, ++__low)
+ {
+ mask __m = 0;
+ // Lowest bitmask in ctype_base == 0
+ size_t __i = 0;
+ for (;__i <= __bitmasksize; ++__i)
+ {
+ const mask __bit = static_cast<mask>(1 << __i);
+ if (this->is(__bit, *__low))
+ __m |= __bit;
+ }
+ *__vec = __m;
+ }
+ }
+ return __high;
+ }
+
+ const char*
+ ctype<char>::
+ scan_is(mask __m, const char* __low, const char* __high) const
+ {
+ if (_M_table)
+ while (__low < __high
+ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+ ++__low;
+ else
+ while (__low < __high && !this->is(__m, *__low))
+ ++__low;
+ return __low;
+ }
+
+ const char*
+ ctype<char>::
+ scan_not(mask __m, const char* __low, const char* __high) const
+ {
+ if (_M_table)
+ while (__low < __high
+ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+ ++__low;
+ else
+ while (__low < __high && this->is(__m, *__low) != 0)
+ ++__low;
+ return __low;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/osf/error_constants.h b/libstdc++-v3/config/os/osf/error_constants.h
new file mode 100644
index 0000000000..88ea56506c
--- /dev/null
+++ b/libstdc++-v3/config/os/osf/error_constants.h
@@ -0,0 +1,178 @@
+// Specific definitions for generic platforms -*- C++ -*-
+
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/error_constants.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{system_error}
+ */
+
+#ifndef _GLIBCXX_ERROR_CONSTANTS
+#define _GLIBCXX_ERROR_CONSTANTS 1
+
+#include <bits/c++config.h>
+#include <cerrno>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ enum class errc
+ {
+ address_family_not_supported = EAFNOSUPPORT,
+ address_in_use = EADDRINUSE,
+ address_not_available = EADDRNOTAVAIL,
+ already_connected = EISCONN,
+ argument_list_too_long = E2BIG,
+ argument_out_of_domain = EDOM,
+ bad_address = EFAULT,
+ bad_file_descriptor = EBADF,
+
+#ifdef _GLIBCXX_HAVE_EBADMSG
+ bad_message = EBADMSG,
+#endif
+
+ broken_pipe = EPIPE,
+ connection_aborted = ECONNABORTED,
+ connection_already_in_progress = EALREADY,
+ connection_refused = ECONNREFUSED,
+ connection_reset = ECONNRESET,
+ cross_device_link = EXDEV,
+ destination_address_required = EDESTADDRREQ,
+ device_or_resource_busy = EBUSY,
+ directory_not_empty = ENOTEMPTY,
+ executable_format_error = ENOEXEC,
+ file_exists = EEXIST,
+ file_too_large = EFBIG,
+ filename_too_long = ENAMETOOLONG,
+ function_not_supported = ENOSYS,
+ host_unreachable = EHOSTUNREACH,
+
+#ifdef _GLIBCXX_HAVE_EIDRM
+ identifier_removed = EIDRM,
+#endif
+
+ illegal_byte_sequence = EILSEQ,
+ inappropriate_io_control_operation = ENOTTY,
+ interrupted = EINTR,
+ invalid_argument = EINVAL,
+ invalid_seek = ESPIPE,
+ io_error = EIO,
+ is_a_directory = EISDIR,
+ message_size = EMSGSIZE,
+ network_down = ENETDOWN,
+ network_reset = ENETRESET,
+ network_unreachable = ENETUNREACH,
+ no_buffer_space = ENOBUFS,
+ no_child_process = ECHILD,
+
+#ifdef _GLIBCXX_HAVE_ENOLINK
+ no_link = ENOLINK,
+#endif
+
+ no_lock_available = ENOLCK,
+
+#ifdef _GLIBCXX_HAVE_ENODATA
+ no_message_available = ENODATA,
+#endif
+
+ no_message = ENOMSG,
+ no_protocol_option = ENOPROTOOPT,
+ no_space_on_device = ENOSPC,
+
+#ifdef _GLIBCXX_HAVE_ENOSR
+ no_stream_resources = ENOSR,
+#endif
+
+ no_such_device_or_address = ENXIO,
+ no_such_device = ENODEV,
+ no_such_file_or_directory = ENOENT,
+ no_such_process = ESRCH,
+ not_a_directory = ENOTDIR,
+ not_a_socket = ENOTSOCK,
+
+#ifdef _GLIBCXX_HAVE_ENOSTR
+ not_a_stream = ENOSTR,
+#endif
+
+ not_connected = ENOTCONN,
+ not_enough_memory = ENOMEM,
+
+#ifdef _GLIBCXX_HAVE_ENOTSUP
+ not_supported = ENOTSUP,
+#endif
+
+#ifdef _GLIBCXX_HAVE_ECANCELED
+ operation_canceled = ECANCELED,
+#endif
+
+ operation_in_progress = EINPROGRESS,
+ operation_not_permitted = EPERM,
+ operation_not_supported = EOPNOTSUPP,
+ operation_would_block = EWOULDBLOCK,
+
+#ifdef _GLIBCXX_HAVE_EOWNERDEAD
+ owner_dead = EOWNERDEAD,
+#endif
+
+ permission_denied = EACCES,
+
+#ifdef _GLIBCXX_HAVE_EPROTO
+ protocol_error = EPROTO,
+#endif
+
+ protocol_not_supported = EPROTONOSUPPORT,
+ read_only_file_system = EROFS,
+ resource_deadlock_would_occur = EDEADLK,
+ resource_unavailable_try_again = EAGAIN,
+ result_out_of_range = ERANGE,
+
+#ifdef _GLIBCXX_HAVE_ENOTRECOVERABLE
+ state_not_recoverable = ENOTRECOVERABLE,
+#endif
+
+#ifdef _GLIBCXX_HAVE_ETIME
+ stream_timeout = ETIME,
+#endif
+
+#ifdef _GLIBCXX_HAVE_ETXTBSY
+ text_file_busy = ETXTBSY,
+#endif
+
+ timed_out = ETIMEDOUT,
+ too_many_files_open_in_system = ENFILE,
+ too_many_files_open = EMFILE,
+ too_many_links = EMLINK,
+ too_many_symbolic_link_levels = ELOOP,
+
+#ifdef _GLIBCXX_HAVE_EOVERFLOW
+ value_too_large = EOVERFLOW,
+#endif
+
+ wrong_protocol_type = EPROTOTYPE
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+#endif
diff --git a/libstdc++-v3/config/os/osf/os_defines.h b/libstdc++-v3/config/os/osf/os_defines.h
new file mode 100644
index 0000000000..68c278d87b
--- /dev/null
+++ b/libstdc++-v3/config/os/osf/os_defines.h
@@ -0,0 +1,41 @@
+// Specific definitions for Tru64 UNIX -*- C++ -*-
+
+// Copyright (C) 2000, 2009, 2010, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/os_defines.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{iosfwd}
+ */
+
+#ifndef _GLIBCXX_OS_DEFINES
+#define _GLIBCXX_OS_DEFINES 1
+
+// System-specific #define, typedefs, corrections, etc, go here. This
+// file will come before all others.
+
+// Tru64 UNIX requires using pthread_mutex_init()/pthread_cond_init() to
+// initialized non-statically allocated mutexes/condvars.
+#define _GTHREAD_USE_MUTEX_INIT_FUNC
+#define _GTHREAD_USE_COND_INIT_FUNC
+
+#endif
diff --git a/libstdc++-v3/config/os/qnx/qnx6.1/ctype_configure_char.cc b/libstdc++-v3/config/os/qnx/qnx6.1/ctype_configure_char.cc
new file mode 100644
index 0000000000..b6dd7f4320
--- /dev/null
+++ b/libstdc++-v3/config/os/qnx/qnx6.1/ctype_configure_char.cc
@@ -0,0 +1,97 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL), _M_table(__table ? __table : _Ctype)
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL), _M_table(__table ? __table : _Ctype)
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::tolower((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/qnx/qnx6.1/ctype_noninline.h b/libstdc++-v3/config/os/qnx/qnx6.1/ctype_noninline.h
deleted file mode 100644
index b74e070594..0000000000
--- a/libstdc++-v3/config/os/qnx/qnx6.1/ctype_noninline.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2002, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return 0; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL), _M_table(__table ? __table : _Ctype)
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL), _M_table(__table ? __table : _Ctype)
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return ::toupper((int) __c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::toupper((int) *__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return ::tolower((int) __c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = ::tolower((int) *__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_noninline.h b/libstdc++-v3/config/os/solaris/solaris2.7/ctype_noninline.h
deleted file mode 100644
index 4713c87265..0000000000
--- a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return __ctype_mask; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(__trans_upper), _M_tolower(__trans_lower),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(__trans_upper), _M_tolower(__trans_lower),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return _M_toupper[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_toupper[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return _M_tolower[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_tolower[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h b/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h
deleted file mode 100644
index 2b7ba1840f..0000000000
--- a/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Specific definitions for Solaris 7,8 -*- C++ -*-
-
-// Copyright (C) 2000, 2002, 2005, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES 1
-
-// System-specific #define, typedefs, corrections, etc, go here. This
-// file will come before all others.
-
-#endif
-
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h
index 1ae3874a6d..1ae3874a6d 100644
--- a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h
+++ b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc
new file mode 100644
index 0000000000..d3519429a0
--- /dev/null
+++ b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return __ctype_mask; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(__trans_upper), _M_tolower(__trans_lower),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(__trans_upper), _M_tolower(__trans_lower),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _M_toupper[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _M_tolower[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h
index d6b8df4846..d6b8df4846 100644
--- a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h
+++ b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h b/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
new file mode 100644
index 0000000000..82c1ec18ef
--- /dev/null
+++ b/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
@@ -0,0 +1,42 @@
+// Specific definitions for Solaris 8+ -*- C++ -*-
+
+// Copyright (C) 2000, 2002, 2005, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef _GLIBCXX_OS_DEFINES
+#define _GLIBCXX_OS_DEFINES 1
+
+// System-specific #define, typedefs, corrections, etc, go here. This
+// file will come before all others.
+
+#if __cplusplus >= 199711L
+// Overloads in <iso/math_iso.h> and <iso/stdlib_iso.h> changed with
+// Solaris 8 patches. Since <bits/c++config.h> includes
+// <bits/os_defines.h> before configure results,
+// __CORRECT_ISO_CPP_MATH_H_PROTO[12] and __CORRECT_ISO_CPP_STDLIB_H_PROTO
+// must be defined via acinclude.m4.
+#define __CORRECT_ISO_CPP_STRING_H_PROTO
+#define __CORRECT_ISO_CPP_WCHAR_H_PROTO
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/config/os/tpf/ctype_configure_char.cc b/libstdc++-v3/config/os/tpf/ctype_configure_char.cc
new file mode 100644
index 0000000000..643abd3f72
--- /dev/null
+++ b/libstdc++-v3/config/os/tpf/ctype_configure_char.cc
@@ -0,0 +1,120 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ {
+ const ctype_base::mask* __ret;
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ __ret = *__ctype_b_loc();
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ return __ret;
+ }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del)
+ {
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ _M_toupper = *__ctype_toupper_loc();
+ _M_tolower = *__ctype_tolower_loc();
+ _M_table = __table ? __table : *__ctype_b_loc();
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ _M_c_locale_ctype = _S_get_c_locale();
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del)
+ {
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ _M_toupper = *__ctype_toupper_loc();
+ _M_tolower = *__ctype_tolower_loc();
+ _M_table = __table ? __table : *__ctype_b_loc();
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ _M_c_locale_ctype = _S_get_c_locale();
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _M_toupper[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _M_tolower[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/tpf/ctype_noninline.h b/libstdc++-v3/config/os/tpf/ctype_noninline.h
deleted file mode 100644
index 251270344c..0000000000
--- a/libstdc++-v3/config/os/tpf/ctype_noninline.h
+++ /dev/null
@@ -1,113 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- {
- const ctype_base::mask* __ret;
- char* __old = setlocale(LC_CTYPE, NULL);
- const size_t __len = __builtin_strlen(__old) + 1;
- char* __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- setlocale(LC_CTYPE, "C");
- __ret = *__ctype_b_loc();
- setlocale(LC_CTYPE, __sav);
- delete [] __sav;
- return __ret;
- }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del)
- {
- char* __old = setlocale(LC_CTYPE, NULL);
- const size_t __len = __builtin_strlen(__old) + 1;
- char* __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- setlocale(LC_CTYPE, "C");
- _M_toupper = *__ctype_toupper_loc();
- _M_tolower = *__ctype_tolower_loc();
- _M_table = __table ? __table : *__ctype_b_loc();
- setlocale(LC_CTYPE, __sav);
- delete [] __sav;
- _M_c_locale_ctype = _S_get_c_locale();
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del)
- {
- char* __old = setlocale(LC_CTYPE, NULL);
- const size_t __len = __builtin_strlen(__old) + 1;
- char* __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- setlocale(LC_CTYPE, "C");
- _M_toupper = *__ctype_toupper_loc();
- _M_tolower = *__ctype_tolower_loc();
- _M_table = __table ? __table : *__ctype_b_loc();
- setlocale(LC_CTYPE, __sav);
- delete [] __sav;
- _M_c_locale_ctype = _S_get_c_locale();
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return _M_toupper[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_toupper[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return _M_tolower[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_tolower[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/uclibc/ctype_configure_char.cc b/libstdc++-v3/config/os/uclibc/ctype_configure_char.cc
new file mode 100644
index 0000000000..245c799172
--- /dev/null
+++ b/libstdc++-v3/config/os/uclibc/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return __C_ctype_b; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ _M_toupper = __C_ctype_toupper;
+ _M_tolower = __C_ctype_tolower;
+ _M_table = __table ? __table : __C_ctype_b;
+ memset(_M_widen, 0, sizeof(_M_widen));
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ _M_toupper = __C_ctype_toupper;
+ _M_tolower = __C_ctype_tolower;
+ _M_table = __table ? __table : __C_ctype_b;
+ memset(_M_widen, 0, sizeof(_M_widen));
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _M_toupper[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _M_tolower[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/uclibc/ctype_noninline.h b/libstdc++-v3/config/os/uclibc/ctype_noninline.h
deleted file mode 100644
index 389e76eb86..0000000000
--- a/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from /usr/include/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return __C_ctype_b; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
- _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
- {
- _M_toupper = __C_ctype_toupper;
- _M_tolower = __C_ctype_tolower;
- _M_table = __table ? __table : __C_ctype_b;
- memset(_M_widen, 0, sizeof(_M_widen));
- memset(_M_narrow, 0, sizeof(_M_narrow));
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
- _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
- {
- _M_toupper = __C_ctype_toupper;
- _M_tolower = __C_ctype_tolower;
- _M_table = __table ? __table : __C_ctype_b;
- memset(_M_widen, 0, sizeof(_M_widen));
- memset(_M_narrow, 0, sizeof(_M_narrow));
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return _M_toupper[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_toupper[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return _M_tolower[static_cast<unsigned char>(__c)]; }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = _M_tolower[static_cast<unsigned char>(*__low)];
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/config/os/vxworks/ctype_configure_char.cc b/libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
new file mode 100644
index 0000000000..7d2904b782
--- /dev/null
+++ b/libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
@@ -0,0 +1,99 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from target/h/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return __ctype; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
+ memset(_M_widen, 0, sizeof(_M_widen));
+ _M_widen_ok = 0;
+ memset(_M_narrow, 0, sizeof(_M_narrow));
+ _M_narrow_ok = 0;
+ }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return __toupper(__c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = __toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return __tolower(__c); }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = __tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/config/os/vxworks/ctype_noninline.h b/libstdc++-v3/config/os/vxworks/ctype_noninline.h
deleted file mode 100644
index 23521b76d0..0000000000
--- a/libstdc++-v3/config/os/vxworks/ctype_noninline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/ctype_noninline.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{locale}
- */
-
-//
-// ISO C++ 14882: 22.1 Locales
-//
-
-// Information as gleaned from target/h/ctype.h
-
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
- { return __ctype; }
-
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(__table ? __table : classic_table())
- {
- memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
- memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
- }
-
- char
- ctype<char>::do_toupper(char __c) const
- { return __toupper(__c); }
-
- const char*
- ctype<char>::do_toupper(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = __toupper(*__low);
- ++__low;
- }
- return __high;
- }
-
- char
- ctype<char>::do_tolower(char __c) const
- { return __tolower(__c); }
-
- const char*
- ctype<char>::do_tolower(char* __low, const char* __high) const
- {
- while (__low < __high)
- {
- *__low = __tolower(*__low);
- ++__low;
- }
- return __high;
- }
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 21fde5cd18..b642495820 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -561,7 +561,7 @@ PACKAGE_STRING='package-unused version-unused'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
-ac_unique_file="src/ios.cc"
+ac_unique_file="src/shared/hashtable-aux.cc"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -602,7 +602,6 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
-LIBSUPCXX_PICFLAGS
WARN_FLAGS
OPTIMIZE_CXXFLAGS
TOPLEVEL_INCLUDES
@@ -618,10 +617,6 @@ CPU_DEFINES_SRCDIR
ATOMIC_FLAGS
ATOMIC_WORD_SRCDIR
ATOMICITY_SRCDIR
-BUILD_EPUB_FALSE
-BUILD_EPUB_TRUE
-DBTOEPUB
-RUBY
BUILD_PDF_FALSE
BUILD_PDF_TRUE
PDFLATEX
@@ -632,6 +627,8 @@ BUILD_HTML_FALSE
BUILD_HTML_TRUE
BUILD_XML_FALSE
BUILD_XML_TRUE
+BUILD_EPUB_FALSE
+BUILD_EPUB_TRUE
XSL_STYLE_DIR
XMLLINT
XSLTPROC
@@ -639,14 +636,13 @@ DOT
DOXYGEN
BUILD_INFO_FALSE
BUILD_INFO_TRUE
+baseline_subdir_switch
baseline_dir
GLIBCXX_LDBL_COMPAT_FALSE
GLIBCXX_LDBL_COMPAT_TRUE
ENABLE_VISIBILITY_FALSE
ENABLE_VISIBILITY_TRUE
libtool_VERSION
-ENABLE_SYMVERS_SOL2_FALSE
-ENABLE_SYMVERS_SOL2_TRUE
ENABLE_SYMVERS_SUN_FALSE
ENABLE_SYMVERS_SUN_TRUE
ENABLE_SYMVERS_DARWIN_FALSE
@@ -665,6 +661,11 @@ LIBICONV
OPT_LDFLAGS
SECTION_LDFLAGS
GLIBCXX_LIBS
+ENABLE_WERROR_FALSE
+ENABLE_WERROR_TRUE
+ENABLE_PYTHONDIR_FALSE
+ENABLE_PYTHONDIR_TRUE
+python_mod_dir
ENABLE_EXTERN_TEMPLATE_FALSE
ENABLE_EXTERN_TEMPLATE_TRUE
EXTRA_CXX_FLAGS
@@ -706,12 +707,14 @@ BASIC_FILE_H
CSTDIO_H
SECTION_FLAGS
WERROR
-glibcxx_thread_h
glibcxx_PCHFLAGS
GLIBCXX_BUILD_PCH_FALSE
GLIBCXX_BUILD_PCH_TRUE
GLIBCXX_HOSTED_FALSE
GLIBCXX_HOSTED_TRUE
+glibcxx_compiler_shared_flag
+glibcxx_compiler_pic_flag
+glibcxx_lt_pic_flag
enable_static
enable_shared
lt_host_flags
@@ -740,6 +743,7 @@ AR
AS
LN_S
toplevel_srcdir
+toplevel_builddir
glibcxx_srcdir
glibcxx_builddir
ac_ct_CXX
@@ -857,6 +861,8 @@ enable_libstdcxx_debug
enable_cxx_flags
enable_fully_dynamic_string
enable_extern_template
+with_python_dir
+enable_werror
enable_libstdcxx_time
enable_tls
enable_rpath
@@ -864,7 +870,8 @@ with_libiconv_prefix
with_system_libunwind
enable_linux_futex
enable_symvers
-enable_visibility
+enable_libstdcxx_visibility
+enable_libstdcxx_threads
with_gxx_include_dir
enable_version_specific_runtime_libs
'
@@ -1535,7 +1542,7 @@ Optional Features:
--enable-concept-checks use Boost-derived template checks [default=no]
--enable-libstdcxx-debug-flags=FLAGS
pass compiler FLAGS when building debug library
- [default="-g3 -O0"]
+ [default="-gdwarf-4 -g3 -O0"]
--enable-libstdcxx-debug
build extra debug library [default=no]
--enable-cxx-flags=FLAGS
@@ -1545,6 +1552,7 @@ Optional Features:
memory [default=no]
--enable-extern-template
enable extern template [default=yes]
+ --enable-werror turns on -Werror [default=yes]
--enable-libstdcxx-time[=KIND]
use KIND for check type [default=no]
--enable-tls Use thread-local storage [default=yes]
@@ -1553,7 +1561,10 @@ Optional Features:
--enable-symvers[=STYLE]
enables symbol versioning of the shared library
[default=yes]
- --enable-visibility enables visibility safe usage [default=yes]
+ --enable-libstdcxx-visibility
+ enables visibility safe usage [default=yes]
+ --enable-libstdcxx-threads
+ enable C++11 threads support [default=auto]
--enable-version-specific-runtime-libs
Specify that runtime libraries should be installed
in a compiler-specific directory
@@ -1568,6 +1579,8 @@ Optional Packages:
--with-pic try to use only PIC/non-PIC objects [default=use
both]
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-python-dir the location to install Python modules. This path is
+ relative starting from the prefix.
--with-gnu-ld assume the C compiler uses GNU ld default=no
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
--without-libiconv-prefix don't search for libiconv in includedir and libdir
@@ -4859,7 +4872,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
# expandable list at autoconf time; the second provides an expandable list
# (i.e., shell variable) at configure time.
- SUBDIRS='include libsupc++ python src doc po testsuite'
+ SUBDIRS='include libsupc++ python src src/c++98 src/c++11 doc po testsuite'
# These need to be absolute paths, yet at the same time need to
# canonicalize only relative paths, because then amd will not unmount
@@ -4869,11 +4882,13 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
\\/$* | ?:\\/*) glibcxx_srcdir=${srcdir} ;;
*) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
esac
+ toplevel_builddir=${glibcxx_builddir}/..
toplevel_srcdir=${glibcxx_srcdir}/..
+
# We use these options to decide which functions to include. They are
# set from the top level.
@@ -5218,8 +5233,8 @@ fi
## (Right now, this only matters for enable_wchar_t, but nothing prevents
## other macros from doing the same. This should be automated.) -pme
- # Check for C library flavor since Linux platforms use different configuration
- # directories depending on the C library in use.
+ # Check for C library flavor since GNU/Linux platforms use different
+ # configuration directories depending on the C library in use.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5267,6 +5282,7 @@ $as_echo "$as_me: OS config directory is $os_include_dir" >&6;}
+# Libtool setup.
if test "x${with_newlib}" != "xyes"; then
enable_dlopen=yes
@@ -9698,7 +9714,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
+ freebsd2.*)
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
hardcode_direct=yes
hardcode_minus_L=yes
@@ -10614,7 +10630,7 @@ freebsd* | dragonfly*)
objformat=`/usr/bin/objformat`
else
case $host_os in
- freebsd[123]*) objformat=aout ;;
+ freebsd[23].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
@@ -10632,7 +10648,7 @@ freebsd* | dragonfly*)
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
- freebsd2*)
+ freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[01]* | freebsdelf3.[01]*)
@@ -11484,7 +11500,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11487 "configure"
+#line 11503 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11590,7 +11606,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11593 "configure"
+#line 11609 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12522,7 +12538,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
;;
- freebsd[12]*)
+ freebsd2.*)
# C++ shared libraries reported to be fairly broken before
# switch to ELF
ld_shlibs_CXX=no
@@ -14297,7 +14313,7 @@ freebsd* | dragonfly*)
objformat=`/usr/bin/objformat`
else
case $host_os in
- freebsd[123]*) objformat=aout ;;
+ freebsd[23].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
@@ -14315,7 +14331,7 @@ freebsd* | dragonfly*)
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
- freebsd2*)
+ freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[01]* | freebsdelf3.[01]*)
@@ -14876,6 +14892,38 @@ esac
+# libtool variables for C++ shared and position-independent compiles.
+#
+# Use glibcxx_lt_pic_flag to designate the automake variable
+# used to encapsulate the default libtool approach to creating objects
+# with position-independent code. Default: -prefer-pic.
+#
+# Use glibcxx_compiler_shared_flag to designate a compile-time flags for
+# creating shared objects. Default: -D_GLIBCXX_SHARED.
+#
+# Use glibcxx_compiler_pic_flag to designate a compile-time flags for
+# creating position-independent objects. This varies with the target
+# hardware and operating system, but is often: -DPIC -fPIC.
+if test "$enable_shared" = yes; then
+ glibcxx_lt_pic_flag="-prefer-pic"
+ glibcxx_compiler_pic_flag="$lt_prog_compiler_pic_CXX"
+ glibcxx_compiler_shared_flag="-D_GLIBCXX_SHARED"
+
+else
+ glibcxx_lt_pic_flag=
+ glibcxx_compiler_pic_flag=
+ glibcxx_compiler_shared_flag=
+fi
+
+
+
+
+# Override the libtool's pic_flag and pic_mode.
+# Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
+# NB: this impacts --with-pic and --without-pic.
+lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
+pic_mode='default'
+
# Eliminate -lstdc++ addition to postdeps for cross compiles.
postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
@@ -14948,7 +14996,7 @@ fi
#
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
-#line 14951 "configure"
+#line 14999 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -15076,23 +15124,6 @@ $as_echo_n "checking for thread model used by GCC... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $target_thread_file" >&5
$as_echo "$target_thread_file" >&6; }
- if test $target_thread_file != single; then
-
-$as_echo "#define HAVE_GTHR_DEFAULT 1" >>confdefs.h
-
- fi
-
- glibcxx_thread_h=gthr-$target_thread_file.h
-
- gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h}
- if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then
- enable_thread=yes
- else
- enable_thread=no
- fi
-
-
-
ac_ext=cpp
@@ -15140,12 +15171,13 @@ main ()
typedef bool atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
;
return 0;
}
@@ -15160,11 +15192,6 @@ rm -f core conftest.err conftest.$ac_objext \
fi
- if test $glibcxx_cv_atomic_bool = yes; then
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_1 1" >>confdefs.h
-
- fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_bool" >&5
$as_echo "$glibcxx_cv_atomic_bool" >&6; }
@@ -15186,12 +15213,13 @@ main ()
typedef short atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
;
return 0;
}
@@ -15206,11 +15234,6 @@ rm -f core conftest.err conftest.$ac_objext \
fi
- if test $glibcxx_cv_atomic_short = yes; then
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_2 1" >>confdefs.h
-
- fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_short" >&5
$as_echo "$glibcxx_cv_atomic_short" >&6; }
@@ -15232,12 +15255,13 @@ main ()
typedef int atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
;
return 0;
}
@@ -15252,11 +15276,6 @@ rm -f core conftest.err conftest.$ac_objext \
fi
- if test $glibcxx_cv_atomic_int = yes; then
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_4 1" >>confdefs.h
-
- fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_int" >&5
$as_echo "$glibcxx_cv_atomic_int" >&6; }
@@ -15278,12 +15297,13 @@ main ()
typedef long long atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
;
return 0;
}
@@ -15298,11 +15318,6 @@ rm -f core conftest.err conftest.$ac_objext \
fi
- if test $glibcxx_cv_atomic_long_long = yes; then
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_8 1" >>confdefs.h
-
- fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_long_long" >&5
$as_echo "$glibcxx_cv_atomic_long_long" >&6; }
@@ -15316,18 +15331,19 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 15319 "configure"
+#line 15334 "configure"
int main()
{
typedef bool atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
@@ -15339,12 +15355,9 @@ $as_echo_n "checking for atomic builtins for bool... " >&6; }
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_bool=no
else
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_1 1" >>confdefs.h
-
glibcxx_cv_atomic_bool=yes
fi
fi
@@ -15353,18 +15366,19 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15356 "configure"
+#line 15369 "configure"
int main()
{
typedef short atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
@@ -15376,12 +15390,9 @@ $as_echo_n "checking for atomic builtins for short... " >&6; }
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_short=no
else
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_2 1" >>confdefs.h
-
glibcxx_cv_atomic_short=yes
fi
fi
@@ -15390,19 +15401,20 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15393 "configure"
+#line 15404 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
typedef int atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
@@ -15414,12 +15426,9 @@ $as_echo_n "checking for atomic builtins for int... " >&6; }
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_int=no
else
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_4 1" >>confdefs.h
-
glibcxx_cv_atomic_int=yes
fi
fi
@@ -15428,18 +15437,19 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15431 "configure"
+#line 15440 "configure"
int main()
{
typedef long long atomic_type;
atomic_type c1;
atomic_type c2;
- const atomic_type c3(0);
- __sync_fetch_and_add(&c1, c2);
- __sync_val_compare_and_swap(&c1, c3, c2);
- __sync_lock_test_and_set(&c1, c3);
- __sync_lock_release(&c1);
- __sync_synchronize();
+ atomic_type c3(0);
+ __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
+ __atomic_load_n(&c1, __ATOMIC_RELAXED);
+
return 0;
}
EOF
@@ -15451,12 +15461,9 @@ $as_echo_n "checking for atomic builtins for long long... " >&6; }
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
glibcxx_cv_atomic_long_long=no
else
-
-$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS_8 1" >>confdefs.h
-
glibcxx_cv_atomic_long_long=yes
fi
fi
@@ -15474,8 +15481,13 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
- # Set atomicity_dir to builtins if either of above tests pass.
- if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
+ # Set atomicity_dir to builtins if all but the long long test above passes.
+ if test $glibcxx_cv_atomic_bool = yes \
+ && test $glibcxx_cv_atomic_short = yes \
+ && test $glibcxx_cv_atomic_int = yes; then
+
+$as_echo "#define _GLIBCXX_ATOMIC_BUILTINS 1" >>confdefs.h
+
atomicity_dir=cpu/generic/atomicity_builtins
fi
@@ -15504,7 +15516,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 15507 "configure"
+#line 15519 "configure"
int main()
{
_Decimal32 d1;
@@ -15533,6 +15545,94 @@ $as_echo "$enable_dfp" >&6; }
rm -f conftest*
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ # Fake what AC_TRY_COMPILE does, without linking as this is
+ # unnecessary for this test.
+
+ cat > conftest.$ac_ext << EOF
+#line 15561 "configure"
+template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+
+template<typename T>
+ struct same<T, T>;
+
+int main()
+{
+ typename same<long, __int128>::type i1;
+ typename same<long long, __int128>::type i2;
+}
+EOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __int128" >&5
+$as_echo_n "checking for __int128... " >&6; }
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+$as_echo "#define _GLIBCXX_USE_INT128 1" >>confdefs.h
+
+ enable_int128=yes
+ else
+ enable_int128=no
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_int128" >&5
+$as_echo "$enable_int128" >&6; }
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+#line 15595 "configure"
+template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+
+template<typename T>
+ struct same<T, T>;
+
+int main()
+{
+ typename same<double, __float128>::type f1;
+ typename same<long double, __float128>::type f2;
+}
+EOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __float128" >&5
+$as_echo_n "checking for __float128... " >&6; }
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+$as_echo "#define _GLIBCXX_USE_FLOAT128 1" >>confdefs.h
+
+ enable_float128=yes
+ else
+ enable_float128=no
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_float128" >&5
+$as_echo "$enable_float128" >&6; }
+ rm -f conftest*
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
# Checks for compiler support that doesn't require linking.
# All these tests are for C++; save the language and the compiler flags.
@@ -15638,7 +15738,7 @@ $as_echo "stdio" >&6; }
if test "${enable_clocale+set}" = set; then :
enableval=$enable_clocale;
case "$enableval" in
- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
+ generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto) ;;
*) as_fn_error "Unknown argument to enable/disable clocale" "$LINENO" 5 ;;
esac
@@ -15660,7 +15760,7 @@ else
fi
- # Either a known packaage, or "auto"
+ # Either a known package, or "auto"
if test $enable_clocale = no || test $enable_clocale = yes; then
enable_clocale=auto
fi
@@ -15677,7 +15777,11 @@ fi
enable_clocale_flag=darwin
;;
*)
- enable_clocale_flag=generic
+ if test x"$with_newlib" = x"yes"; then
+ enable_clocale_flag=newlib
+ else
+ enable_clocale_flag=generic
+ fi
;;
esac
fi
@@ -15903,6 +16007,23 @@ $as_echo "IEEE 1003.1" >&6; }
CTIME_CC=config/locale/generic/time_members.cc
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
;;
+ newlib)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: newlib" >&5
+$as_echo "newlib" >&6; }
+
+ CLOCALE_H=config/locale/generic/c_locale.h
+ CLOCALE_CC=config/locale/generic/c_locale.cc
+ CCODECVT_CC=config/locale/generic/codecvt_members.cc
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/newlib/ctype_members.cc
+ CMESSAGES_H=config/locale/generic/messages_members.h
+ CMESSAGES_CC=config/locale/generic/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_H=config/locale/generic/time_members.h
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
esac
# This is where the testsuite looks for locale catalogs, using the
@@ -17031,7 +17152,7 @@ if test "${enable_libstdcxx_debug_flags+set}" = set; then :
*) as_fn_error "--enable-libstdcxx-debug-flags needs compiler flags as arguments" "$LINENO" 5 ;;
esac
else
- enable_libstdcxx_debug_flags="-g3 -O0"
+ enable_libstdcxx_debug_flags="-gdwarf-4 -g3 -O0"
fi
@@ -17130,10 +17251,15 @@ fi
if test $enable_fully_dynamic_string = yes; then
+ enable_fully_dynamic_string_def=1
+ else
+ enable_fully_dynamic_string_def=0
+ fi
-$as_echo "#define _GLIBCXX_FULLY_DYNAMIC_STRING 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define _GLIBCXX_FULLY_DYNAMIC_STRING ${enable_fully_dynamic_string_def}
+_ACEOF
- fi
@@ -17159,9 +17285,220 @@ $as_echo "$enable_extern_template" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for custom python install directory" >&5
+$as_echo_n "checking for custom python install directory... " >&6; }
+
+# Check whether --with-python-dir was given.
+if test "${with_python_dir+set}" = set; then :
+ withval=$with_python_dir; with_python_dir=$withval
+else
+ with_python_dir="no"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_python_dir}" >&5
+$as_echo "${with_python_dir}" >&6; }
+
+# Needed for installing Python modules during make install.
+python_mod_dir="${with_python_dir}"
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Werror" >&5
+$as_echo_n "checking for -Werror... " >&6; }
+ # Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+ enableval=$enable_werror;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error "Argument to enable/disable werror must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_werror=yes
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_werror" >&5
+$as_echo "$enable_werror" >&6; }
+
+
+
# Checks for operating systems support that doesn't require linking.
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ case "$host" in
+ *-*-solaris2.*)
+ # Solaris 8 FCS only had an overload for double std::abs(double) in
+ # <iso/math_iso.h>. Patches 111721-04 (SPARC) and 112757-01 (x86)
+ # introduced the full set also found from Solaris 9 onwards.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for float std::abs(float) overload" >&5
+$as_echo_n "checking for float std::abs(float) overload... " >&6; }
+ if test "${glibcxx_cv_abs_float+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <math.h>
+ namespace std {
+ inline float abs(float __x)
+ { return __builtin_fabsf(__x); }
+ }
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_abs_float=no
+else
+ glibcxx_cv_abs_float=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ # autoheader cannot handle indented templates.
+
+
+
+ if test $glibcxx_cv_abs_float = yes; then
+ $as_echo "#define __CORRECT_ISO_CPP_MATH_H_PROTO1 1" >>confdefs.h
+
+ else
+ $as_echo "#define __CORRECT_ISO_CPP_MATH_H_PROTO2 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_abs_float" >&5
+$as_echo "$glibcxx_cv_abs_float" >&6; }
+ ;;
+ esac
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ case "$host" in
+ *-*-solaris2.*)
+ # Solaris 8 FCS lacked the overloads for long std::abs(long) and
+ # ldiv_t std::div(long, long) in <iso/stdlib_iso.h>. Patches 109607-02
+ # (SPARC) and 109608-02 (x86) introduced them.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long std::abs(long) overload" >&5
+$as_echo_n "checking for long std::abs(long) overload... " >&6; }
+ if test "${glibcxx_cv_abs_long+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+ namespace std {
+ inline long
+ abs(long __i) { return labs(__i); }
+ }
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_abs_long=no
+else
+ glibcxx_cv_abs_long=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ # autoheader cannot handle indented templates.
+
+ if test $glibcxx_cv_abs_long = yes; then
+ $as_echo "#define __CORRECT_ISO_CPP_STDLIB_H_PROTO 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_abs_long" >&5
+$as_echo "$glibcxx_cv_abs_long" >&6; }
+ ;;
+ esac
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gets declaration" >&5
+$as_echo_n "checking for gets declaration... " >&6; }
+ if test "${glibcxx_cv_gets+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+ namespace test
+ {
+ using ::gets;
+ }
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_gets=yes
+else
+ glibcxx_cv_gets=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ if test $glibcxx_cv_gets = yes; then
+
+$as_echo "#define HAVE_GETS 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_gets" >&5
+$as_echo "$glibcxx_cv_gets" >&6; }
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOWNERDEAD" >&5
$as_echo_n "checking for EOWNERDEAD... " >&6; }
if test "${glibcxx_cv_system_error1+set}" = set; then :
@@ -17624,6 +17961,171 @@ if test x"$glibcxx_cv_system_error14" = x"yes"; then
$as_echo "#define HAVE_ETXTBSY 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ECHILD" >&5
+$as_echo_n "checking for ECHILD... " >&6; }
+if test "${glibcxx_cv_system_error15+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = ECHILD;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error15=yes
+else
+ glibcxx_cv_system_error15=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_system_error15" >&5
+$as_echo "$glibcxx_cv_system_error15" >&6; }
+if test x"$glibcxx_cv_system_error15" = x"yes"; then
+
+$as_echo "#define HAVE_ECHILD 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOSPC" >&5
+$as_echo_n "checking for ENOSPC... " >&6; }
+if test "${glibcxx_cv_system_error16+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = ENOSPC;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error16=yes
+else
+ glibcxx_cv_system_error16=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_system_error16" >&5
+$as_echo "$glibcxx_cv_system_error16" >&6; }
+if test x"$glibcxx_cv_system_error16" = x"yes"; then
+
+$as_echo "#define HAVE_ENOSPC 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EPERM" >&5
+$as_echo_n "checking for EPERM... " >&6; }
+if test "${glibcxx_cv_system_error17+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = EPERM;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error17=yes
+else
+ glibcxx_cv_system_error17=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_system_error17" >&5
+$as_echo "$glibcxx_cv_system_error17" >&6; }
+if test x"$glibcxx_cv_system_error17" = x"yes"; then
+
+$as_echo "#define HAVE_EPERM 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ETIMEDOUT" >&5
+$as_echo_n "checking for ETIMEDOUT... " >&6; }
+if test "${glibcxx_cv_system_error18+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = ETIMEDOUT;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error18=yes
+else
+ glibcxx_cv_system_error18=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_system_error18" >&5
+$as_echo "$glibcxx_cv_system_error18" >&6; }
+if test x"$glibcxx_cv_system_error18" = x"yes"; then
+
+$as_echo "#define HAVE_ETIMEDOUT 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EWOULDBLOCK" >&5
+$as_echo_n "checking for EWOULDBLOCK... " >&6; }
+if test "${glibcxx_cv_system_error19+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = EWOULDBLOCK;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error19=yes
+else
+ glibcxx_cv_system_error19=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_system_error19" >&5
+$as_echo "$glibcxx_cv_system_error19" >&6; }
+if test x"$glibcxx_cv_system_error19" = x"yes"; then
+
+$as_echo "#define HAVE_EWOULDBLOCK 1" >>confdefs.h
+
+fi
@@ -18719,6 +19221,20 @@ fi
done
+ # Check for the existence of the <stdalign.h> header.
+ for ac_header in stdalign.h
+do :
+ ac_fn_cxx_check_header_mongrel "$LINENO" "stdalign.h" "ac_cv_header_stdalign_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdalign_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STDALIGN_H 1
+_ACEOF
+
+fi
+
+done
+
+
CXXFLAGS="$ac_save_CXXFLAGS"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -19409,7 +19925,60 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# For gthread support
+
+ ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
+if test "x$ac_cv_header_locale_h" = x""yes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
+$as_echo_n "checking for LC_MESSAGES... " >&6; }
+if test "${ac_cv_val_LC_MESSAGES+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_val_LC_MESSAGES=yes
+else
+ ac_cv_val_LC_MESSAGES=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_val_LC_MESSAGES" >&5
+$as_echo "$ac_cv_val_LC_MESSAGES" >&6; }
+ if test $ac_cv_val_LC_MESSAGES = yes; then
+
+$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h
+
+ fi
+
+fi
+
+
+
+
+# For hardware_concurrency
+for ac_header in sys/sysinfo.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/sysinfo.h" "ac_cv_header_sys_sysinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysinfo_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SYSINFO_H 1
+_ACEOF
+
+fi
+
+done
+
+
ac_ext=cpp
@@ -19418,55 +19987,312 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for get_nprocs" >&5
+$as_echo_n "checking for get_nprocs... " >&6; }
+ if test "${glibcxx_cv_GET_NPROCS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test x$gcc_no_link = xyes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/sysinfo.h>
+int
+main ()
+{
+int n = get_nprocs();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_GET_NPROCS=yes
+else
+ glibcxx_cv_GET_NPROCS=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/sysinfo.h>
+int
+main ()
+{
+int n = get_nprocs();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ glibcxx_cv_GET_NPROCS=yes
+else
+ glibcxx_cv_GET_NPROCS=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+fi
+
+ if test $glibcxx_cv_GET_NPROCS = yes; then
+
+$as_echo "#define _GLIBCXX_USE_GET_NPROCS 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_GET_NPROCS" >&5
+$as_echo "$glibcxx_cv_GET_NPROCS" >&6; }
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+for ac_header in unistd.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_UNISTD_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
- target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
- case $target_thread_file in
- posix)
- CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
- esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _SC_NPROCESSORS_ONLN" >&5
+$as_echo_n "checking for _SC_NPROCESSORS_ONLN... " >&6; }
+ if test "${glibcxx_cv_SC_NPROCESSORS_ONLN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gthreads library" >&5
-$as_echo_n "checking for gthreads library... " >&6; }
+ if test x$gcc_no_link = xyes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main ()
+{
+int n = sysconf(_SC_NPROCESSORS_ONLN);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_SC_NPROCESSORS_ONLN=yes
+else
+ glibcxx_cv_SC_NPROCESSORS_ONLN=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main ()
+{
+int n = sysconf(_SC_NPROCESSORS_ONLN);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ glibcxx_cv_SC_NPROCESSORS_ONLN=yes
+else
+ glibcxx_cv_SC_NPROCESSORS_ONLN=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+fi
+
+ if test $glibcxx_cv_SC_NPROCESSORS_ONLN = yes; then
+$as_echo "#define _GLIBCXX_USE_SC_NPROCESSORS_ONLN 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_SC_NPROCESSORS_ONLN" >&5
+$as_echo "$glibcxx_cv_SC_NPROCESSORS_ONLN" >&6; }
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _SC_NPROC_ONLN" >&5
+$as_echo_n "checking for _SC_NPROC_ONLN... " >&6; }
+ if test "${glibcxx_cv_SC_NPROC_ONLN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test x$gcc_no_link = xyes; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include "gthr.h"
+#include <unistd.h>
int
main ()
{
+int n = sysconf(_SC_NPROC_ONLN);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_SC_NPROC_ONLN=yes
+else
+ glibcxx_cv_SC_NPROC_ONLN=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main ()
+{
+int n = sysconf(_SC_NPROC_ONLN);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ glibcxx_cv_SC_NPROC_ONLN=yes
+else
+ glibcxx_cv_SC_NPROC_ONLN=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
- #ifndef __GTHREADS_CXX0X
- #error
- #endif
+fi
- // In case of POSIX threads check _POSIX_TIMEOUTS too.
- #if (defined(_PTHREADS) \
- && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
- #error
- #endif
+ if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
+
+$as_echo "#define _GLIBCXX_USE_SC_NPROC_ONLN 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_SC_NPROC_ONLN" >&5
+$as_echo "$glibcxx_cv_SC_NPROC_ONLN" >&6; }
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthreads_num_processors_np" >&5
+$as_echo_n "checking for pthreads_num_processors_np... " >&6; }
+ if test "${glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int n = pthread_num_processors_np();
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_has_gthreads=yes
+ glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes
else
- ac_has_gthreads=no
+ glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int n = pthread_num_processors_np();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes
+else
+ glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_gthreads" >&5
-$as_echo "$ac_has_gthreads" >&6; }
+fi
- if test x"$ac_has_gthreads" = x"yes"; then
+ if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
-$as_echo "#define _GLIBCXX_HAS_GTHREADS 1" >>confdefs.h
+$as_echo "#define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP" >&5
+$as_echo "$glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP" >&6; }
CXXFLAGS="$ac_save_CXXFLAGS"
ac_ext=c
@@ -19478,42 +20304,96 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
- ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
-if test "x$ac_cv_header_locale_h" = x""yes; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
-$as_echo_n "checking for LC_MESSAGES... " >&6; }
-if test "${ac_cv_val_LC_MESSAGES+set}" = set; then :
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hw.ncpu sysctl" >&5
+$as_echo_n "checking for hw.ncpu sysctl... " >&6; }
+ if test "${glibcxx_cv_SYSCTL_HW_NCPU+set}" = set; then :
$as_echo_n "(cached) " >&6
else
+
+ if test x$gcc_no_link = xyes; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <locale.h>
+
+ #include <stddef.h>
+ #include <sys/sysctl.h>
+
int
main ()
{
-return LC_MESSAGES
+
+ int count;
+ size_t size = sizeof(count);
+ int mib[] = { CTL_HW, HW_NCPU };
+ sysctl(mib, 2, &count, &size, NULL, 0);
+
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_val_LC_MESSAGES=yes
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_SYSCTL_HW_NCPU=yes
else
- ac_cv_val_LC_MESSAGES=no
+ glibcxx_cv_SYSCTL_HW_NCPU=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_val_LC_MESSAGES" >&5
-$as_echo "$ac_cv_val_LC_MESSAGES" >&6; }
- if test $ac_cv_val_LC_MESSAGES = yes; then
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h
+ #include <stddef.h>
+ #include <sys/sysctl.h>
- fi
+int
+main ()
+{
+
+ int count;
+ size_t size = sizeof(count);
+ int mib[] = { CTL_HW, HW_NCPU };
+ sysctl(mib, 2, &count, &size, NULL, 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ glibcxx_cv_SYSCTL_HW_NCPU=yes
+else
+ glibcxx_cv_SYSCTL_HW_NCPU=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
fi
+ if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
+
+$as_echo "#define _GLIBCXX_USE_SYSCTL_HW_NCPU 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_SYSCTL_HW_NCPU" >&5
+$as_echo "$glibcxx_cv_SYSCTL_HW_NCPU" >&6; }
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
@@ -56837,155 +57717,6 @@ $as_echo "$ac_ld_relro" >&6; }
fi
;;
- *-netware)
- SECTION_FLAGS='-ffunction-sections -fdata-sections'
-
-
- # If we're not using GNU ld, then there's no point in even trying these
- # tests. Check for that first. We should have already tested for gld
- # by now (in libtool), but require it now just to be safe...
- test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
- test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
-
-
-
- # The name set by libtool depends on the version of libtool. Shame on us
- # for depending on an impl detail, but c'est la vie. Older versions used
- # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
- # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
- # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
- # set (hence we're using an older libtool), then set it.
- if test x${with_gnu_ld+set} != xset; then
- if test x${ac_cv_prog_gnu_ld+set} != xset; then
- # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
- with_gnu_ld=no
- else
- with_gnu_ld=$ac_cv_prog_gnu_ld
- fi
- fi
-
- # Start by getting the version number. I think the libtool test already
- # does some of this, but throws away the result.
- glibcxx_ld_is_gold=no
- if test x"$with_gnu_ld" = x"yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld version" >&5
-$as_echo_n "checking for ld version... " >&6; }
-
- if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
- glibcxx_ld_is_gold=yes
- fi
- ldver=`$LD --version 2>/dev/null |
- sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
-
- glibcxx_gnu_ld_version=`echo $ldver | \
- $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_gnu_ld_version" >&5
-$as_echo "$glibcxx_gnu_ld_version" >&6; }
- fi
-
- # Set --gc-sections.
- glibcxx_have_gc_sections=no
- if test "$glibcxx_ld_is_gold" = "yes"; then
- if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
- glibcxx_have_gc_sections=yes
- fi
- else
- glibcxx_gcsections_min_ld=21602
- if test x"$with_gnu_ld" = x"yes" &&
- test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
- glibcxx_have_gc_sections=yes
- fi
- fi
- if test "$glibcxx_have_gc_sections" = "yes"; then
- # Sufficiently young GNU ld it is! Joy and bunny rabbits!
- # NB: This flag only works reliably after 2.16.1. Configure tests
- # for this are difficult, so hard wire a value that should work.
-
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS='-Wl,--gc-sections'
-
- # Check for -Wl,--gc-sections
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,--gc-sections" >&5
-$as_echo_n "checking for ld that supports -Wl,--gc-sections... " >&6; }
- if test x$gcc_no_link = xyes; then
- as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
-fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- int one(void) { return 1; }
- int two(void) { return 2; }
-
-int
-main ()
-{
- two();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_gcsections=yes
-else
- ac_gcsections=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test "$ac_gcsections" = "yes"; then
- rm -f conftest.c
- touch conftest.c
- if $CC -c conftest.c; then
- if $LD --gc-sections -o conftest conftest.o 2>&1 | \
- grep "Warning: gc-sections option ignored" > /dev/null; then
- ac_gcsections=no
- fi
- fi
- rm -f conftest.c conftest.o conftest
- fi
- if test "$ac_gcsections" = "yes"; then
- SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_gcsections" >&5
-$as_echo "$ac_gcsections" >&6; }
-
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- else
- # this is the suspicious part
- CFLAGS=''
- fi
- fi
-
- # Set -z,relro.
- # Note this is only for shared objects.
- ac_ld_relro=no
- if test x"$with_gnu_ld" = x"yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,-z,relro" >&5
-$as_echo_n "checking for ld that supports -Wl,-z,relro... " >&6; }
- cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
- if test -n "$cxx_z_relo"; then
- OPT_LDFLAGS="-Wl,-z,relro"
- ac_ld_relro=yes
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ld_relro" >&5
-$as_echo "$ac_ld_relro" >&6; }
- fi
-
- # Set linker optimization flags.
- if test x"$with_gnu_ld" = x"yes"; then
- OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
- fi
-
-
-
-
- $as_echo "#define HAVE_HYPOT 1" >>confdefs.h
-
- $as_echo "#define HAVE_ISINF 1" >>confdefs.h
-
- $as_echo "#define HAVE_ISNAN 1" >>confdefs.h
-
- ;;
*-qnx6.1* | *-qnx6.2*)
SECTION_FLAGS='-ffunction-sections -fdata-sections'
@@ -63499,7 +64230,6 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h
fi
-
# Check whether --enable-linux-futex was given.
if test "${enable_linux_futex+set}" = set; then :
enableval=$enable_linux_futex;
@@ -64025,7 +64755,6 @@ ac_config_commands="$ac_config_commands include/gstdint.h"
-# This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU c++filt" >&5
$as_echo_n "checking for GNU c++filt... " >&6; }
@@ -64264,7 +64993,7 @@ $as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
fi
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:16:0
+libtool_VERSION=6:17:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
@@ -64351,19 +65080,16 @@ if test $enable_symvers != no ; then
# The Solaris 2 runtime linker doesn't support the GNU extension of
# binding the same symbol to different versions
solaris2*)
- symvers_renaming=no ;;
+ ;;
# Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
*)
$as_echo "#define HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1" >>confdefs.h
- symvers_renaming=yes ;;
+ ;;
esac
-else
- symvers_renaming=no
fi
-
# Now, set up compatibility support, if any.
# In addition, need this to deal with std::size_t mangling in
# src/compatibility.cc. In a perfect world, could use
@@ -64431,21 +65157,21 @@ $as_echo "$glibcxx_ptrdiff_t_is_i" >&6; }
- # Check whether --enable-visibility was given.
-if test "${enable_visibility+set}" = set; then :
- enableval=$enable_visibility;
+ # Check whether --enable-libstdcxx-visibility was given.
+if test "${enable_libstdcxx_visibility+set}" = set; then :
+ enableval=$enable_libstdcxx_visibility;
case "$enableval" in
yes|no) ;;
- *) as_fn_error "Argument to enable/disable visibility must be yes or no" "$LINENO" 5 ;;
+ *) as_fn_error "Argument to enable/disable libstdcxx-visibility must be yes or no" "$LINENO" 5 ;;
esac
else
- enable_visibility=yes
+ enable_libstdcxx_visibility=yes
fi
-if test x$enable_visibility = xyes ; then
+if test x$enable_libstdcxx_visibility = xyes ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports hidden visibility" >&5
$as_echo_n "checking whether the target supports hidden visibility... " >&6; }
if test "${glibcxx_cv_have_attribute_visibility+set}" = set; then :
@@ -64476,19 +65202,18 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_have_attribute_visibility" >&5
$as_echo "$glibcxx_cv_have_attribute_visibility" >&6; }
if test $glibcxx_cv_have_attribute_visibility = no; then
- enable_visibility=no
+ enable_libstdcxx_visibility=no
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: visibility supported: $enable_visibility" >&5
-$as_echo "$as_me: visibility supported: $enable_visibility" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: visibility supported: $enable_libstdcxx_visibility" >&5
+$as_echo "$as_me: visibility supported: $enable_libstdcxx_visibility" >&6;}
ac_ldbl_compat=no
case "$target" in
powerpc*-*-linux* | \
- powerpc*-*-gnu* | \
sparc*-*-linux* | \
s390*-*-linux* | \
alpha*-*-linux*)
@@ -64832,6 +65557,148 @@ done
# Export file names for ABI checking.
baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
+ baseline_subdir_switch="$abi_baseline_subdir_switch"
+
+
+
+# For gthread support. Depends on GLIBCXX_ENABLE_SYMVERS.
+
+ # Check whether --enable-libstdcxx-threads was given.
+if test "${enable_libstdcxx_threads+set}" = set; then :
+ enableval=$enable_libstdcxx_threads;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error "Argument to enable/disable libstdcxx-threads must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_libstdcxx_threads=auto
+fi
+
+
+
+ if test x$enable_libstdcxx_threads = xauto ||
+ test x$enable_libstdcxx_threads = xyes; then
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions \
+ -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
+
+ target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
+ case $target_thread_file in
+ posix)
+ CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it can be safely assumed that mutex_timedlock is available" >&5
+$as_echo_n "checking whether it can be safely assumed that mutex_timedlock is available... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main ()
+{
+
+ // In case of POSIX threads check _POSIX_TIMEOUTS.
+ #if (defined(_PTHREADS) \
+ && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
+ #error
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_gthread_use_mutex_timedlock=1
+else
+ ac_gthread_use_mutex_timedlock=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+cat >>confdefs.h <<_ACEOF
+#define _GTHREAD_USE_MUTEX_TIMEDLOCK $ac_gthread_use_mutex_timedlock
+_ACEOF
+
+
+ if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
+ else res_mutex_timedlock=no ; fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $res_mutex_timedlock" >&5
+$as_echo "$res_mutex_timedlock" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gthreads library" >&5
+$as_echo_n "checking for gthreads library... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include "gthr.h"
+int
+main ()
+{
+
+ #ifndef __GTHREADS_CXX0X
+ #error
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ case $target_os in
+ # gthreads support breaks symbol versioning on Solaris 8/9 (PR
+ # libstdc++/52189).
+ solaris2.[89]*)
+ if test x$enable_symvers = xno; then
+ ac_has_gthreads=yes
+ elif test x$enable_libstdcxx_threads = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You have requested C++11 threads support, but" >&5
+$as_echo "$as_me: WARNING: You have requested C++11 threads support, but" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: this breaks symbol versioning." >&5
+$as_echo "$as_me: WARNING: this breaks symbol versioning." >&2;}
+ ac_has_gthreads=yes
+ else
+ ac_has_gthreads=no
+ fi
+ ;;
+ *)
+ ac_has_gthreads=yes
+ ;;
+ esac
+else
+ ac_has_gthreads=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ ac_has_gthreads=no
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_gthreads" >&5
+$as_echo "$ac_has_gthreads" >&6; }
+
+ if test x"$ac_has_gthreads" = x"yes"; then
+
+$as_echo "#define _GLIBCXX_HAS_GTHREADS 1" >>confdefs.h
+
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
# Define documentation rules conditionally.
@@ -65068,8 +65935,8 @@ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stylesheets used in generation of documentation" >&5
-$as_echo_n "checking for stylesheets used in generation of documentation... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for docbook stylesheets for documentation creation" >&5
+$as_echo_n "checking for docbook stylesheets for documentation creation... " >&6; }
glibcxx_stylesheets=no
if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude http://docbook.sourceforge.net/release/xsl-ns/current/xhtml-1_1/docbook.xsl - 2>/dev/null; then
glibcxx_stylesheets=yes
@@ -65101,6 +65968,27 @@ else
glibcxx_stylesheets=no
fi
+# Check for epub3 dependencies.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for epub3 stylesheets for documentation creation" >&5
+$as_echo_n "checking for epub3 stylesheets for documentation creation... " >&6; }
+glibcxx_epub_stylesheets=no
+if test x"$glibcxx_local_stylesheets" = x"yes"; then
+ if test -f "$XSL_STYLE_DIR/epub3/chunk.xsl"; then
+ glibcxx_epub_stylesheets=yes
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_epub_stylesheets" >&5
+$as_echo "$glibcxx_epub_stylesheets" >&6; }
+ if test x"$glibcxx_epub_stylesheets" = x"yes"; then
+ BUILD_EPUB_TRUE=
+ BUILD_EPUB_FALSE='#'
+else
+ BUILD_EPUB_TRUE='#'
+ BUILD_EPUB_FALSE=
+fi
+
+
+
# Check for xml/html dependencies.
if test $ac_cv_prog_DOXYGEN = "yes" &&
@@ -65140,7 +66028,7 @@ else
fi
-# Check for pdf/epub dependencies.
+# Check for pdf dependencies.
# Extract the first word of "dblatex", so it can be a program name with args.
set dummy dblatex; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -65227,92 +66115,6 @@ else
fi
-# Extract the first word of "ruby", so it can be a program name with args.
-set dummy ruby; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RUBY+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RUBY"; then
- ac_cv_prog_RUBY="$RUBY" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RUBY="yes"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_RUBY" && ac_cv_prog_RUBY="no"
-fi
-fi
-RUBY=$ac_cv_prog_RUBY
-if test -n "$RUBY"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5
-$as_echo "$RUBY" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-# Extract the first word of "dbtoepub", so it can be a program name with args.
-set dummy dbtoepub; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DBTOEPUB+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DBTOEPUB"; then
- ac_cv_prog_DBTOEPUB="$DBTOEPUB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_DBTOEPUB="yes"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_DBTOEPUB" && ac_cv_prog_DBTOEPUB="no"
-fi
-fi
-DBTOEPUB=$ac_cv_prog_DBTOEPUB
-if test -n "$DBTOEPUB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DBTOEPUB" >&5
-$as_echo "$DBTOEPUB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test $ac_cv_prog_RUBY = "yes" &&
- test $ac_cv_prog_DBTOEPUB = "yes"; then
- BUILD_EPUB_TRUE=
- BUILD_EPUB_FALSE='#'
-else
- BUILD_EPUB_TRUE='#'
- BUILD_EPUB_FALSE=
-fi
-
-
# Propagate the target-specific source directories through the build chain.
ATOMICITY_SRCDIR=config/${atomicity_dir}
@@ -65415,6 +66217,24 @@ else
fi
+ if test $python_mod_dir != no; then
+ ENABLE_PYTHONDIR_TRUE=
+ ENABLE_PYTHONDIR_FALSE='#'
+else
+ ENABLE_PYTHONDIR_TRUE='#'
+ ENABLE_PYTHONDIR_FALSE=
+fi
+
+
+ if test $enable_werror = yes; then
+ ENABLE_WERROR_TRUE=
+ ENABLE_WERROR_FALSE='#'
+else
+ ENABLE_WERROR_TRUE='#'
+ ENABLE_WERROR_FALSE=
+fi
+
+
if test $enable_symvers != no; then
ENABLE_SYMVERS_TRUE=
ENABLE_SYMVERS_FALSE='#'
@@ -65460,16 +66280,7 @@ else
fi
- if test $symvers_renaming = no; then
- ENABLE_SYMVERS_SOL2_TRUE=
- ENABLE_SYMVERS_SOL2_FALSE='#'
-else
- ENABLE_SYMVERS_SOL2_TRUE='#'
- ENABLE_SYMVERS_SOL2_FALSE=
-fi
-
-
- if test $enable_visibility = yes; then
+ if test $enable_libstdcxx_visibility = yes; then
ENABLE_VISIBILITY_TRUE=
ENABLE_VISIBILITY_FALSE='#'
else
@@ -65676,9 +66487,9 @@ $as_echo "$gxx_include_dir" >&6; }
fi
# Stuff in the actual top level. Currently only used by libsupc++ to
- # get unwind* headers from the gcc dir.
- #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
- TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
+ # get unwind* headers from the libgcc dir.
+ #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc -I$(toplevel_srcdir)/include'
+ TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc'
# Now, export this to all the little Makefiles....
@@ -65691,16 +66502,9 @@ $as_echo "$gxx_include_dir" >&6; }
# OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
- WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
-
+ WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi'
-if test "$enable_shared" = yes; then
- LIBSUPCXX_PICFLAGS="-prefer-pic"
-else
- LIBSUPCXX_PICFLAGS=
-fi
-
ac_config_files="$ac_config_files Makefile"
@@ -65708,6 +66512,8 @@ ac_config_files="$ac_config_files scripts/testsuite_flags"
ac_config_files="$ac_config_files scripts/extract_symvers"
+ac_config_files="$ac_config_files doc/xsl/customization.xsl"
+
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
# that multilib installs will end up installed in the correct place.
@@ -65717,7 +66523,7 @@ ac_config_files="$ac_config_files scripts/extract_symvers"
# append it here. Only modify Makefiles that have just been created.
#
# Also, get rid of this simulated-VPATH thing that automake does.
-ac_config_files="$ac_config_files include/Makefile libsupc++/Makefile python/Makefile src/Makefile doc/Makefile po/Makefile testsuite/Makefile"
+ac_config_files="$ac_config_files include/Makefile libsupc++/Makefile python/Makefile src/Makefile src/c++98/Makefile src/c++11/Makefile doc/Makefile po/Makefile testsuite/Makefile"
ac_config_commands="$ac_config_commands generate-headers"
@@ -65868,6 +66674,14 @@ if test -z "${ENABLE_EXTERN_TEMPLATE_TRUE}" && test -z "${ENABLE_EXTERN_TEMPLATE
as_fn_error "conditional \"ENABLE_EXTERN_TEMPLATE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_PYTHONDIR_TRUE}" && test -z "${ENABLE_PYTHONDIR_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_PYTHONDIR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_WERROR_TRUE}" && test -z "${ENABLE_WERROR_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_WERROR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_SYMVERS_TRUE}" && test -z "${ENABLE_SYMVERS_FALSE}"; then
as_fn_error "conditional \"ENABLE_SYMVERS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -65888,10 +66702,6 @@ if test -z "${ENABLE_SYMVERS_SUN_TRUE}" && test -z "${ENABLE_SYMVERS_SUN_FALSE}"
as_fn_error "conditional \"ENABLE_SYMVERS_SUN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${ENABLE_SYMVERS_SOL2_TRUE}" && test -z "${ENABLE_SYMVERS_SOL2_FALSE}"; then
- as_fn_error "conditional \"ENABLE_SYMVERS_SOL2\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${ENABLE_VISIBILITY_TRUE}" && test -z "${ENABLE_VISIBILITY_FALSE}"; then
as_fn_error "conditional \"ENABLE_VISIBILITY\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -65904,6 +66714,10 @@ if test -z "${BUILD_INFO_TRUE}" && test -z "${BUILD_INFO_FALSE}"; then
as_fn_error "conditional \"BUILD_INFO\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${BUILD_EPUB_TRUE}" && test -z "${BUILD_EPUB_FALSE}"; then
+ as_fn_error "conditional \"BUILD_EPUB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${BUILD_XML_TRUE}" && test -z "${BUILD_XML_FALSE}"; then
as_fn_error "conditional \"BUILD_XML\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -65920,10 +66734,6 @@ if test -z "${BUILD_PDF_TRUE}" && test -z "${BUILD_PDF_FALSE}"; then
as_fn_error "conditional \"BUILD_PDF\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_EPUB_TRUE}" && test -z "${BUILD_EPUB_FALSE}"; then
- as_fn_error "conditional \"BUILD_EPUB\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
: ${CONFIG_STATUS=./config.status}
ac_write_fail=0
@@ -66915,10 +67725,13 @@ do
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"scripts/testsuite_flags") CONFIG_FILES="$CONFIG_FILES scripts/testsuite_flags" ;;
"scripts/extract_symvers") CONFIG_FILES="$CONFIG_FILES scripts/extract_symvers" ;;
+ "doc/xsl/customization.xsl") CONFIG_FILES="$CONFIG_FILES doc/xsl/customization.xsl" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
"libsupc++/Makefile") CONFIG_FILES="$CONFIG_FILES libsupc++/Makefile" ;;
"python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "src/c++98/Makefile") CONFIG_FILES="$CONFIG_FILES src/c++98/Makefile" ;;
+ "src/c++11/Makefile") CONFIG_FILES="$CONFIG_FILES src/c++11/Makefile" ;;
"doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;;
"testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
@@ -68743,6 +69556,28 @@ _EOF
. ${multi_basedir}/config-ml.in
{ ml_norecursion=; unset ml_norecursion;}
;;
+ "src/c++98/Makefile":F) cat > vpsed$$ << \_EOF
+s!`test -f '$<' || echo '$(srcdir)/'`!!
+_EOF
+ sed -f vpsed$$ $ac_file > tmp$$
+ mv tmp$$ $ac_file
+ rm vpsed$$
+ echo 'MULTISUBDIR =' >> $ac_file
+ ml_norecursion=yes
+ . ${multi_basedir}/config-ml.in
+ { ml_norecursion=; unset ml_norecursion;}
+ ;;
+ "src/c++11/Makefile":F) cat > vpsed$$ << \_EOF
+s!`test -f '$<' || echo '$(srcdir)/'`!!
+_EOF
+ sed -f vpsed$$ $ac_file > tmp$$
+ mv tmp$$ $ac_file
+ rm vpsed$$
+ echo 'MULTISUBDIR =' >> $ac_file
+ ml_norecursion=yes
+ . ${multi_basedir}/config-ml.in
+ { ml_norecursion=; unset ml_norecursion;}
+ ;;
"doc/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index cc4c9bf2da..ce1f6c4816 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -2,7 +2,7 @@
AC_PREREQ(2.64)
AC_INIT(package-unused, version-unused,, libstdc++)
-AC_CONFIG_SRCDIR(src/ios.cc)
+AC_CONFIG_SRCDIR(src/shared/hashtable-aux.cc)
AC_CONFIG_HEADER(config.h)
# This works around the fact that libtool configuration may change LD
@@ -88,6 +88,7 @@ CXXFLAGS="$save_CXXFLAGS"
# up critical shell variables.
GLIBCXX_CONFIGURE
+# Libtool setup.
if test "x${with_newlib}" != "xyes"; then
AC_LIBTOOL_DLOPEN
fi
@@ -96,6 +97,38 @@ ACX_LT_HOST_FLAGS
AC_SUBST(enable_shared)
AC_SUBST(enable_static)
+# libtool variables for C++ shared and position-independent compiles.
+#
+# Use glibcxx_lt_pic_flag to designate the automake variable
+# used to encapsulate the default libtool approach to creating objects
+# with position-independent code. Default: -prefer-pic.
+#
+# Use glibcxx_compiler_shared_flag to designate a compile-time flags for
+# creating shared objects. Default: -D_GLIBCXX_SHARED.
+#
+# Use glibcxx_compiler_pic_flag to designate a compile-time flags for
+# creating position-independent objects. This varies with the target
+# hardware and operating system, but is often: -DPIC -fPIC.
+if test "$enable_shared" = yes; then
+ glibcxx_lt_pic_flag="-prefer-pic"
+ glibcxx_compiler_pic_flag="$lt_prog_compiler_pic_CXX"
+ glibcxx_compiler_shared_flag="-D_GLIBCXX_SHARED"
+
+else
+ glibcxx_lt_pic_flag=
+ glibcxx_compiler_pic_flag=
+ glibcxx_compiler_shared_flag=
+fi
+AC_SUBST(glibcxx_lt_pic_flag)
+AC_SUBST(glibcxx_compiler_pic_flag)
+AC_SUBST(glibcxx_compiler_shared_flag)
+
+# Override the libtool's pic_flag and pic_mode.
+# Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
+# NB: this impacts --with-pic and --without-pic.
+lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
+pic_mode='default'
+
# Eliminate -lstdc++ addition to postdeps for cross compiles.
postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
@@ -110,6 +143,7 @@ GLIBCXX_ENABLE_PCH($is_hosted)
GLIBCXX_ENABLE_THREADS
GLIBCXX_ENABLE_ATOMIC_BUILTINS
GLIBCXX_ENABLE_DECIMAL_FLOAT
+GLIBCXX_ENABLE_INT128_FLOAT128
# Checks for compiler support that doesn't require linking.
GLIBCXX_CHECK_COMPILER_FEATURES
@@ -123,14 +157,19 @@ GLIBCXX_ENABLE_LONG_LONG([yes])
GLIBCXX_ENABLE_WCHAR_T([yes])
GLIBCXX_ENABLE_C99([yes])
GLIBCXX_ENABLE_CONCEPT_CHECKS([no])
-GLIBCXX_ENABLE_DEBUG_FLAGS(["-g3 -O0"])
+GLIBCXX_ENABLE_DEBUG_FLAGS(["-gdwarf-4 -g3 -O0"])
GLIBCXX_ENABLE_DEBUG([no])
GLIBCXX_ENABLE_PARALLEL([yes])
GLIBCXX_ENABLE_CXX_FLAGS
GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING([no])
GLIBCXX_ENABLE_EXTERN_TEMPLATE([yes])
+GLIBCXX_ENABLE_PYTHON
+GLIBCXX_ENABLE_WERROR([yes])
# Checks for operating systems support that doesn't require linking.
+GLIBCXX_CHECK_MATH_PROTO
+GLIBCXX_CHECK_STDLIB_PROTO
+GLIBCXX_CHECK_STDIO_PROTO
GLIBCXX_CHECK_SYSTEM_ERROR
# For the streamoff typedef.
@@ -161,11 +200,17 @@ GLIBCXX_CHECK_GETTIMEOFDAY
# NB: The default is [no], because otherwise it requires linking.
GLIBCXX_ENABLE_LIBSTDCXX_TIME([no])
-# For gthread support
-GLIBCXX_CHECK_GTHREADS
-
AC_LC_MESSAGES
+# For hardware_concurrency
+AC_CHECK_HEADERS(sys/sysinfo.h)
+GLIBCXX_CHECK_GET_NPROCS
+AC_CHECK_HEADERS(unistd.h)
+GLIBCXX_CHECK_SC_NPROCESSORS_ONLN
+GLIBCXX_CHECK_SC_NPROC_ONLN
+GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP
+GLIBCXX_CHECK_SYSCTL_HW_NCPU
+
# Check for available headers.
AC_CHECK_HEADERS([endian.h execinfo.h float.h fp.h ieeefp.h inttypes.h \
locale.h machine/endian.h machine/param.h nan.h stdint.h stdlib.h string.h \
@@ -292,21 +337,18 @@ fi
# Check for _Unwind_GetIPInfo.
GCC_CHECK_UNWIND_GETIPINFO
-
GCC_LINUX_FUTEX([AC_DEFINE(HAVE_LINUX_FUTEX, 1, [Define if futex syscall is available.])])
GCC_HEADER_STDINT(include/gstdint.h)
-# This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
GLIBCXX_ENABLE_SYMVERS([yes])
AC_SUBST(libtool_VERSION)
-GLIBCXX_ENABLE_VISIBILITY([yes])
+GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY([yes])
ac_ldbl_compat=no
case "$target" in
powerpc*-*-linux* | \
- powerpc*-*-gnu* | \
sparc*-*-linux* | \
s390*-*-linux* | \
alpha*-*-linux*)
@@ -326,6 +368,9 @@ GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes)
# This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
GLIBCXX_CONFIGURE_TESTSUITE
+# For gthread support. Depends on GLIBCXX_ENABLE_SYMVERS.
+GLIBCXX_CHECK_GTHREADS
+
# Define documentation rules conditionally.
# See if makeinfo has been installed and is modern enough
@@ -364,19 +409,13 @@ AM_CONDITIONAL(BUILD_MAN,
test $ac_cv_prog_DOXYGEN = "yes" &&
test $ac_cv_prog_DOT = "yes")
-# Check for pdf/epub dependencies.
+# Check for pdf dependencies.
AC_CHECK_PROG([DBLATEX], dblatex, yes, no)
AC_CHECK_PROG([PDFLATEX], pdflatex, yes, no)
AM_CONDITIONAL(BUILD_PDF,
test $ac_cv_prog_DBLATEX = "yes" &&
test $ac_cv_prog_PDFLATEX = "yes")
-AC_CHECK_PROG([RUBY], ruby, yes, no)
-AC_CHECK_PROG([DBTOEPUB], dbtoepub, yes, no)
-AM_CONDITIONAL(BUILD_EPUB,
- test $ac_cv_prog_RUBY = "yes" &&
- test $ac_cv_prog_DBTOEPUB = "yes")
-
# Propagate the target-specific source directories through the build chain.
ATOMICITY_SRCDIR=config/${atomicity_dir}
@@ -415,19 +454,13 @@ GLIBCXX_EXPORT_INSTALL_INFO
GLIBCXX_EXPORT_INCLUDES
GLIBCXX_EXPORT_FLAGS
-if test "$enable_shared" = yes; then
- LIBSUPCXX_PICFLAGS="-prefer-pic"
-else
- LIBSUPCXX_PICFLAGS=
-fi
-AC_SUBST(LIBSUPCXX_PICFLAGS)
-
dnl In autoconf 2.5x, AC_OUTPUT is replaced by four AC_CONFIG_* macros,
dnl which can all be called multiple times as needed, plus one (different)
dnl AC_OUTPUT macro. This one lists the files to be created:
AC_CONFIG_FILES(Makefile)
AC_CONFIG_FILES([scripts/testsuite_flags],[chmod +x scripts/testsuite_flags])
AC_CONFIG_FILES([scripts/extract_symvers],[chmod +x scripts/extract_symvers])
+AC_CONFIG_FILES([doc/xsl/customization.xsl])
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
# that multilib installs will end up installed in the correct place.
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
index e29404c026..b0e2cd9eaa 100644
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -30,6 +30,11 @@
# abi_baseline_pair directory name for ABI compat testing,
# defaults to host_cpu-host_os (as per config.guess)
#
+# abi_baseline_subdir_switch
+# g++ switch to determine ABI baseline subdir for
+# multilibbed targets,
+# defaults to --print-multi-directory
+#
# abi_tweaks_dir location of cxxabi_tweaks.h,
# defaults to cpu_include_dir
#
@@ -78,6 +83,7 @@ atomic_flags=""
atomicity_dir="cpu/generic"
cpu_defines_dir="cpu/generic"
try_cpu=generic
+abi_baseline_subdir_switch=--print-multi-directory
abi_tweaks_dir="cpu/generic"
error_constants_dir="os/generic"
@@ -252,17 +258,29 @@ case "${host_os}" in
os_include_dir="os/irix/irix6.5"
atomicity_dir=os/irix
atomic_word_dir=os/irix
+ # libstdc++.so relies on emutls on IRIX, which only works with the
+ # real functions implemented in libpthread.so, not with the stubs in
+ # libc, so always pass -lpthread.
+ OPT_LDFLAGS="${OPT_LDFLAGS} -lpthread"
;;
mingw32*)
- os_include_dir="os/mingw32"
- error_constants_dir="os/mingw32"
+ case "$host" in
+ *-w64-*)
+ os_include_dir="os/mingw32-w64"
+ error_constants_dir="os/mingw32-w64"
+ ;;
+ *)
+ os_include_dir="os/mingw32"
+ error_constants_dir="os/mingw32"
+ ;;
+ esac
OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
;;
netbsd*)
os_include_dir="os/bsd/netbsd"
;;
osf*)
- os_include_dir="os/generic"
+ os_include_dir="os/osf"
# libstdc++.so relies on emutls on Tru64 UNIX, which only works with the
# real functions implemented in libpthread.so, not with the dummies in
# libgcc, so always pass -lpthread.
@@ -279,7 +297,7 @@ case "${host_os}" in
exit 1
;;
solaris2.[89] | solaris2.1[0-9])
- os_include_dir="os/solaris/solaris2.7"
+ os_include_dir="os/solaris/solaris2.8"
;;
tpf)
os_include_dir="os/tpf"
@@ -322,7 +340,7 @@ case "${host}" in
fi
esac
case "${host}" in
- arm*-*-linux-*eabi)
+ arm*-*-linux-*eabi*)
port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
;;
esac
@@ -332,8 +350,10 @@ case "${host}" in
;;
*-*-solaris2.[89])
abi_baseline_pair=solaris2.8
+ abi_baseline_subdir_switch=--print-multi-os-directory
;;
*-*-solaris2.1[0-9])
abi_baseline_pair=solaris2.10
+ abi_baseline_subdir_switch=--print-multi-os-directory
;;
esac
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
index 2d0a4a83de..361ed0b864 100644
--- a/libstdc++-v3/crossconfig.m4
+++ b/libstdc++-v3/crossconfig.m4
@@ -173,14 +173,6 @@ case "${host}" in
AC_DEFINE(HAVE_ISNANL)
fi
;;
- *-netware)
- SECTION_FLAGS='-ffunction-sections -fdata-sections'
- AC_SUBST(SECTION_FLAGS)
- GLIBCXX_CHECK_LINKER_FEATURES
- AC_DEFINE(HAVE_HYPOT)
- AC_DEFINE(HAVE_ISINF)
- AC_DEFINE(HAVE_ISNAN)
- ;;
*-qnx6.1* | *-qnx6.2*)
SECTION_FLAGS='-ffunction-sections -fdata-sections'
AC_SUBST(SECTION_FLAGS)
diff --git a/libstdc++-v3/doc/Makefile.am b/libstdc++-v3/doc/Makefile.am
index b564f1cff4..54936cbb3e 100644
--- a/libstdc++-v3/doc/Makefile.am
+++ b/libstdc++-v3/doc/Makefile.am
@@ -136,7 +136,7 @@ doc-install-xml: doc-xml
# HTML
htmldir="$(DESTDIR)@docdir@"
-stamp-html: stamp-html-docbook stamp-html-doxygen
+stamp-html: stamp-html-docbook-data stamp-html-doxygen
$(STAMP) stamp-html
doc-html: stamp-html
@@ -331,17 +331,20 @@ 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/policy_data_structures_biblio.xml \
${xml_dir}/manual/prerequisites.xml \
${xml_dir}/manual/profile_mode.xml \
${xml_dir}/manual/shared_ptr.xml \
${xml_dir}/manual/spine.xml \
${xml_dir}/manual/status_cxx1998.xml \
- ${xml_dir}/manual/status_cxx200x.xml \
+ ${xml_dir}/manual/status_cxx2011.xml \
${xml_dir}/manual/status_cxxtr1.xml \
${xml_dir}/manual/status_cxxtr24733.xml \
${xml_dir}/manual/strings.xml \
${xml_dir}/manual/support.xml \
${xml_dir}/manual/test.xml \
+ ${xml_dir}/manual/test_policy_data_structures.xml \
${xml_dir}/manual/using.xml \
${xml_dir}/manual/using_exceptions.xml \
${xml_dir}/manual/utilities.xml \
@@ -358,51 +361,141 @@ xml_sources = \
${xml_sources_manual} \
${xml_sources_extra}
+xml_image_dir = ${xml_dir}/images
+xml_image_basic = \
+ ${xml_image_dir}/confdeps.png \
+ ${xml_image_dir}/pbds_balls_and_bins.png \
+ ${xml_image_dir}/pbds_container_tag_hierarchy.png \
+ ${xml_image_dir}/pbds_different_underlying_dss_1.png \
+ ${xml_image_dir}/pbds_different_underlying_dss_2.png \
+ ${xml_image_dir}/pbds_embedded_lists_1.png \
+ ${xml_image_dir}/pbds_embedded_lists_2.png \
+ ${xml_image_dir}/pbds_embedded_lists_3.png \
+ ${xml_image_dir}/pbds_exception_hierarchy.png \
+ ${xml_image_dir}/pbds_hash_policy_cd.png \
+ ${xml_image_dir}/pbds_hash_ranged_hash_range_hashing_fns.png \
+ ${xml_image_dir}/pbds_hash_range_hashing_seq_diagram2.png \
+ ${xml_image_dir}/pbds_hash_range_hashing_seq_diagram.png \
+ ${xml_image_dir}/pbds_insert_resize_sequence_diagram1.png \
+ ${xml_image_dir}/pbds_insert_resize_sequence_diagram2.png \
+ ${xml_image_dir}/pbds_insert_resize_sequence_diagram3.png \
+ ${xml_image_dir}/pbds_invalidation_guarantee_erase.png \
+ ${xml_image_dir}/pbds_invalidation_tag_hierarchy.png \
+ ${xml_image_dir}/pbds_list_update.png \
+ ${xml_image_dir}/pbds_node_invariants.png \
+ ${xml_image_dir}/pbds_pat_trie.png \
+ ${xml_image_dir}/pbds_point_iterator_hierarchy.png \
+ ${xml_image_dir}/pbds_point_iterators_range_ops_1.png \
+ ${xml_image_dir}/pbds_point_iterators_range_ops_2.png \
+ ${xml_image_dir}/pbds_priority_queue_different_underlying_dss.png \
+ ${xml_image_dir}/pbds_priority_queue_tag_hierarchy.png \
+ ${xml_image_dir}/pbds_rationale_null_node_updator.png \
+ ${xml_image_dir}/pbds_resize_policy_cd.png \
+ ${xml_image_dir}/pbds_restoring_node_invariants.png \
+ ${xml_image_dir}/pbds_simple_list.png \
+ ${xml_image_dir}/pbds_tree_node_invalidations.png \
+ ${xml_image_dir}/pbds_tree_node_invariants.png \
+ ${xml_image_dir}/pbds_tree_node_updator_policy_cd.png \
+ ${xml_image_dir}/pbds_trie_node_updator_policy_cd.png \
+ ${xml_image_dir}/pbds_update_seq_diagram.png
+
+xml_image_generated = \
+ ${xml_image_dir}/pbds_binary_priority_queue_int_push_pop.png \
+ ${xml_image_dir}/pbds_binary_priority_queue_int_push.png \
+ ${xml_image_dir}/pbds_ccgp_hash_int_subscript_insert.png \
+ ${xml_image_dir}/pbds_cc_hash_int_find.png \
+ ${xml_image_dir}/pbds_cc_hash_int_subscript_find.png \
+ ${xml_image_dir}/pbds_cc_hash_int_subscript_insert.png \
+ ${xml_image_dir}/pbds_gp_hash_int_find.png \
+ ${xml_image_dir}/pbds_gp_hash_int_subscript_find.png \
+ ${xml_image_dir}/pbds_gp_hash_int_subscript_insert.png \
+ ${xml_image_dir}/pbds_hash_int_erase_mem.png \
+ ${xml_image_dir}/pbds_hash_text_find.png \
+ ${xml_image_dir}/pbds_hash_zlob_int_find.png \
+ ${xml_image_dir}/pbds_multimap_text_find_large_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_find_large_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_find_small_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_find_small_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_large_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_large_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_large_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_large_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_small_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_small_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_small_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_small_s2p_tree.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_modify_down_thin.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_modify_up_thin.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_push_pop.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_push.png \
+ ${xml_image_dir}/pbds_priority_queue_int_push_pop.png \
+ ${xml_image_dir}/pbds_priority_queue_int_push.png \
+ ${xml_image_dir}/pbds_priority_queue_text_join.png \
+ ${xml_image_dir}/pbds_priority_queue_text_modify_down.png \
+ ${xml_image_dir}/pbds_priority_queue_text_modify_up.png \
+ ${xml_image_dir}/pbds_priority_queue_text_pop_mem.png \
+ ${xml_image_dir}/pbds_priority_queue_text_push_pop.png \
+ ${xml_image_dir}/pbds_priority_queue_text_push.png \
+ ${xml_image_dir}/pbds_tree_int_find.png \
+ ${xml_image_dir}/pbds_tree_order_statistics.png \
+ ${xml_image_dir}/pbds_tree_split_join.png \
+ ${xml_image_dir}/pbds_tree_text_find.png \
+ ${xml_image_dir}/pbds_tree_text_insert_node.png \
+ ${xml_image_dir}/pbds_tree_text_insert_trie.png \
+ ${xml_image_dir}/pbds_tree_text_insert_vector.png \
+ ${xml_image_dir}/pbds_tree_text_lor_find.png
+
+xml_images = ${xml_image_basic} ${xml_image_generated}
+
+xml_extradir = ${glibcxx_srcdir}/doc/html/ext
+xml_extra = \
+ ${xml_extradir}/lwg-active.html \
+ ${xml_extradir}/lwg-closed.html \
+ ${xml_extradir}/lwg-defects.html
+
xml_noinst = \
${xml_dir}/book.txml \
${xml_dir}/chapter.txml \
${xml_dir}/class.txml \
- ${xml_dir}/images/confdeps.dot \
- ${xml_dir}/images/confdeps.png \
- ${xml_dir}/images/confdeps.pdf
+ ${xml_image_dir}/confdeps.dot \
+ ${xml_image_dir}/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
-XSL_HTML_STYLE = $(XSL_STYLE_DIR)/xhtml-1_1/chunk.xsl
-XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/xhtml-1_1/docbook.xsl
-XSL_EPUB_STYLE = $(XSL_STYLE_DIR)/epub/docbook.xsl
+XSL_HTML_STYLE = $(XSL_STYLE_DIR)/xhtml/chunk.xsl
+XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/html/docbook.xsl
+XSL_EPUB_STYLE = $(XSL_STYLE_DIR)/epub3/chunk.xsl
+XSL_LOCAL_STYLE = ${glibcxx_builddir}/doc/xsl/customization.xsl
${docbook_outdir}/epub:
mkdir -p ${docbook_outdir}/epub
+ mkdir -p ${docbook_outdir}/epub/OEBPS/images
${docbook_outdir}/fo:
mkdir -p ${docbook_outdir}/fo
${docbook_outdir}/html:
mkdir -p ${docbook_outdir}/html
+ mkdir -p ${docbook_outdir}/html/ext
+ mkdir -p ${docbook_outdir}/html/images
+ mkdir -p ${docbook_outdir}/html/manual
${docbook_outdir}/pdf:
mkdir -p ${docbook_outdir}/pdf
+${docbook_outdir}/latex:
+ mkdir -p ${docbook_outdir}/latex
+
${docbook_outdir}/texinfo:
mkdir -p ${docbook_outdir}/texinfo
${docbook_outdir}/xml:
mkdir -p ${docbook_outdir}/xml
-# Validate existing XML structure.
-XMLLINT = xmllint
-LINT_FLAGS = --debug --xinclude --noent --noblanks --noout
-SCHEMA_FLAGS = http://www.docbook.org/xml/5.0/dtd/docbook.dtd
-#SCHEMA_FLAGS = --nonet /usr/share/xml/docbook5/schema/dtd/5.0/docbook.dtd
-XMLLINT_VALID_FLAGS = $(LINT_FLAGS) --dtdvalid $(SCHEMA_FLAGS)
-XMLLINT_FLAGS = --xinclude --nsclean --c14n --noent --noblanks --nocdata
-doc-xml-validate-docbook: $(xml_sources)
- @echo "Generating XML validation log..."
- $(XMLLINT) $(XMLLINT_VALID_FLAGS) ${top_srcdir}/doc/xml/spine.xml
# XML, all one page
# Some info on canonicalization
@@ -415,28 +508,59 @@ stamp-xml-single-docbook: $(xml_sources) ${docbook_outdir}/xml
${top_srcdir}/doc/xml/manual/spine.xml > ${manual_xml};
$(XMLLINT) $(XMLLINT_FLAGS) \
${top_srcdir}/doc/xml/spine.xml > ${set_xml};
- if [ ! -d "${docbook_outdir}/xml/images" ]; then \
- $(LN_S) ${top_srcdir}/doc/xml/images ${docbook_outdir}/xml/; \
- fi
$(STAMP) stamp-xml-single-docbook
doc-xml-single-docbook: stamp-xml-single-docbook
-# HTML, index plus chapters
+# Validate existing XML structure.
+XMLLINT = xmllint
+LINT_FLAGS = --debug --xinclude --noent --noblanks --noout
+SCHEMA_FLAGS = --dtdvalid http://www.docbook.org/xml/5.0/dtd/docbook.dtd
+SCHEMA_RNG_FLAGS = --relaxng http://www.docbook.org/xml/5.0/rng/docbook.rng
+#SCHEMA_FLAGS = --nonet --dtdvalid /usr/share/xxx/dtd/5.0/docbook.dtd
+XMLLINT_VALID_FLAGS = $(LINT_FLAGS) $(SCHEMA_FLAGS)
+XMLLINT_FLAGS = --xinclude --nsclean --c14n --noent --noblanks --nocdata
+doc-xml-validate-docbook: doc-xml-validate-dtd-db
+
+doc-xml-validate-dtd-db: $(xml_sources) $(xml_images)
+ @echo "Generating XML validation log..."
+ $(XMLLINT) $(XMLLINT_VALID_FLAGS) ${top_srcdir}/doc/xml/spine.xml
+
+doc-xml-validate-rng-db: $(xml_sources) $(xml_images) doc-xml-single-docbook
+ @echo "Generating XML RelaxNG validation log..."
+ $(XMLLINT) $(LINT_FLAGS) $(SCHEMA_RNG_FLAGS) ${set_xml}
+
+# HTML support files
+stamp-html-docbook-images: stamp-html-docbook $(xml_images)
+ $(INSTALL_DATA) $(xml_images) ${docbook_outdir}/html/images
+ $(STAMP) stamp-html-docbook-images
+
+stamp-html-docbook-lwg: stamp-html-docbook $(xml_extra)
+ $(INSTALL_DATA) $(xml_extra) ${docbook_outdir}/html/ext
+ $(STAMP) stamp-html-docbook-lwg
+
+stamp-html-docbook-data: stamp-html-docbook-images stamp-html-docbook-lwg
+ $(STAMP) stamp-html-docbook-data
+
+# HTML, "chunked" into index plus chapters as separate pages
stamp-html-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html files..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
- $(XSL_HTML_STYLE) ${top_srcdir}/doc/xml/spine.xml
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${docbook_outdir}/html/ \
+ --stringparam chunker.output.encoding UTF-8 \
+ $(XSL_HTML_STYLE) \
+ ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-docbook
-doc-html-docbook: stamp-html-docbook
+doc-html-docbook: stamp-html-docbook-data
# HTML, all one page
+# NB: Have to generate customization XSL for UTF-8 output.
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} \
- $(XSL_HTML_SINGLE_STYLE) ${top_srcdir}/doc/xml/spine.xml
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${manual_html} \
+ ${XSL_LOCAL_STYLE} \
+ ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-single-docbook
doc-html-single-docbook: stamp-html-single-docbook
@@ -444,7 +568,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
@@ -452,10 +576,16 @@ doc-fo-docbook: stamp-fo-docbook
# PDF, via dblatex
manual_pdf = ${docbook_outdir}/pdf/libstdc++-manual.pdf
-DBLATEX_FLAGS = --dump --verbose --pdf -o ${manual_pdf}
-stamp-pdf-docbook: $(xml_sources) ${docbook_outdir}/pdf
+DBLATEX_FLAGS = --verbose --pdf --dump --debug --tmpdir=${docbook_outdir}/latex
+
+doc-pdf-docbook-dirs: ${docbook_outdir}/pdf ${docbook_outdir}/latex
+
+doc-pdf-docbook-pre: $(xml_sources) doc-pdf-docbook-dirs
+
+stamp-pdf-docbook: doc-pdf-docbook-pre doc-xml-single-docbook
@echo "Generating pdf dblatex files..."
- dblatex $(DBLATEX_FLAGS) ${top_srcdir}/doc/xml/spine.xml
+ dblatex $(DBLATEX_FLAGS) -o ${manual_pdf} \
+ ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-pdf-docbook
doc-pdf-docbook: stamp-pdf-docbook
@@ -485,27 +615,35 @@ doc-texinfo-docbook: stamp-texinfo-docbook
doc-info-docbook: stamp-info-docbook
-# EPUB, via dbtoepub + ruby
+# EPUB version 3
+# http://sourceforge.net/projects/docbook/files/epub3/
+# Can verify document with epubcheck
manual_epub = ${docbook_outdir}/epub/libstdc++-manual.epub
stamp-epub-docbook: stamp-xml-single-docbook ${docbook_outdir}/epub
@echo "Generating epub files..."
- ${XSL_STYLE_DIR}/epub/bin/dbtoepub -v -d -o ${manual_epub} ${set_xml}
+ if [ ! -d "${docbook_outdir}/images" ]; then \
+ $(LN_S) ${top_srcdir}/doc/xml/images ${docbook_outdir}/; \
+ fi
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) \
+ --stringparam base.dir "${docbook_outdir}/epub/OEBPS/" \
+ $(XSL_EPUB_STYLE) ${top_srcdir}/doc/xml/spine.xml
+ $(INSTALL_DATA) $(xml_images) ${docbook_outdir}/epub/OEBPS/images
+ zip -X0 ${manual_epub} ${docbook_outdir}/epub/mimetype
+ zip -r -X9 ${manual_epub} ${docbook_outdir}/epub/META-INF ${docbook_outdir}/epub/OEBPS
$(STAMP) stamp-epub-docbook
doc-epub-docbook: stamp-epub-docbook
-
# Performance doc and graph configuration.
# Assumes pychart, beautiful soup installed.
-# Generates the plots and graphs for performance testing.
-doc_performance_script=${top_srcdir}/scripts/make_graphs.py
-doc-html-performance:
+# Generates the plots/graph imagery for performance testing.
+doc_performance_script=${top_srcdir}/scripts/make_graph.py
+doc-svg-performance: ${docbook_outdir}/xml
-@(chmod + ${doc_performance_script}; \
- ${doc_performance_script} ${top_srcdir} \
+ ${doc_performance_script} \
+ ${top_srcdir}/testsuite/data/make_graph_test_infos.xml \
${glibcxx_builddir}/testsuite \
- ${top_srcdir}/testsuite/data/make_graph_htmls.xml \
- ${top_srcdir}/testsuite/data/make_graph_test_infos.xml local g++)
-
+ ${glibcxx_builddir}/doc/docbook/xml/images)
.PHONY: doc-doxygen-html doc-doxygen-man doc-performance
diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in
index e17773370d..dd5ee46031 100644
--- a/libstdc++-v3/doc/Makefile.in
+++ b/libstdc++-v3/doc/Makefile.in
@@ -107,7 +107,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -135,7 +134,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -163,7 +161,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -192,6 +189,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -211,10 +209,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -250,6 +250,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -262,6 +263,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -272,14 +274,16 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
@@ -383,17 +387,20 @@ 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/policy_data_structures_biblio.xml \
${xml_dir}/manual/prerequisites.xml \
${xml_dir}/manual/profile_mode.xml \
${xml_dir}/manual/shared_ptr.xml \
${xml_dir}/manual/spine.xml \
${xml_dir}/manual/status_cxx1998.xml \
- ${xml_dir}/manual/status_cxx200x.xml \
+ ${xml_dir}/manual/status_cxx2011.xml \
${xml_dir}/manual/status_cxxtr1.xml \
${xml_dir}/manual/status_cxxtr24733.xml \
${xml_dir}/manual/strings.xml \
${xml_dir}/manual/support.xml \
${xml_dir}/manual/test.xml \
+ ${xml_dir}/manual/test_policy_data_structures.xml \
${xml_dir}/manual/using.xml \
${xml_dir}/manual/using_exceptions.xml \
${xml_dir}/manual/utilities.xml \
@@ -410,39 +417,133 @@ xml_sources = \
${xml_sources_manual} \
${xml_sources_extra}
+xml_image_dir = ${xml_dir}/images
+xml_image_basic = \
+ ${xml_image_dir}/confdeps.png \
+ ${xml_image_dir}/pbds_balls_and_bins.png \
+ ${xml_image_dir}/pbds_container_tag_hierarchy.png \
+ ${xml_image_dir}/pbds_different_underlying_dss_1.png \
+ ${xml_image_dir}/pbds_different_underlying_dss_2.png \
+ ${xml_image_dir}/pbds_embedded_lists_1.png \
+ ${xml_image_dir}/pbds_embedded_lists_2.png \
+ ${xml_image_dir}/pbds_embedded_lists_3.png \
+ ${xml_image_dir}/pbds_exception_hierarchy.png \
+ ${xml_image_dir}/pbds_hash_policy_cd.png \
+ ${xml_image_dir}/pbds_hash_ranged_hash_range_hashing_fns.png \
+ ${xml_image_dir}/pbds_hash_range_hashing_seq_diagram2.png \
+ ${xml_image_dir}/pbds_hash_range_hashing_seq_diagram.png \
+ ${xml_image_dir}/pbds_insert_resize_sequence_diagram1.png \
+ ${xml_image_dir}/pbds_insert_resize_sequence_diagram2.png \
+ ${xml_image_dir}/pbds_insert_resize_sequence_diagram3.png \
+ ${xml_image_dir}/pbds_invalidation_guarantee_erase.png \
+ ${xml_image_dir}/pbds_invalidation_tag_hierarchy.png \
+ ${xml_image_dir}/pbds_list_update.png \
+ ${xml_image_dir}/pbds_node_invariants.png \
+ ${xml_image_dir}/pbds_pat_trie.png \
+ ${xml_image_dir}/pbds_point_iterator_hierarchy.png \
+ ${xml_image_dir}/pbds_point_iterators_range_ops_1.png \
+ ${xml_image_dir}/pbds_point_iterators_range_ops_2.png \
+ ${xml_image_dir}/pbds_priority_queue_different_underlying_dss.png \
+ ${xml_image_dir}/pbds_priority_queue_tag_hierarchy.png \
+ ${xml_image_dir}/pbds_rationale_null_node_updator.png \
+ ${xml_image_dir}/pbds_resize_policy_cd.png \
+ ${xml_image_dir}/pbds_restoring_node_invariants.png \
+ ${xml_image_dir}/pbds_simple_list.png \
+ ${xml_image_dir}/pbds_tree_node_invalidations.png \
+ ${xml_image_dir}/pbds_tree_node_invariants.png \
+ ${xml_image_dir}/pbds_tree_node_updator_policy_cd.png \
+ ${xml_image_dir}/pbds_trie_node_updator_policy_cd.png \
+ ${xml_image_dir}/pbds_update_seq_diagram.png
+
+xml_image_generated = \
+ ${xml_image_dir}/pbds_binary_priority_queue_int_push_pop.png \
+ ${xml_image_dir}/pbds_binary_priority_queue_int_push.png \
+ ${xml_image_dir}/pbds_ccgp_hash_int_subscript_insert.png \
+ ${xml_image_dir}/pbds_cc_hash_int_find.png \
+ ${xml_image_dir}/pbds_cc_hash_int_subscript_find.png \
+ ${xml_image_dir}/pbds_cc_hash_int_subscript_insert.png \
+ ${xml_image_dir}/pbds_gp_hash_int_find.png \
+ ${xml_image_dir}/pbds_gp_hash_int_subscript_find.png \
+ ${xml_image_dir}/pbds_gp_hash_int_subscript_insert.png \
+ ${xml_image_dir}/pbds_hash_int_erase_mem.png \
+ ${xml_image_dir}/pbds_hash_text_find.png \
+ ${xml_image_dir}/pbds_hash_zlob_int_find.png \
+ ${xml_image_dir}/pbds_multimap_text_find_large_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_find_large_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_find_small_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_find_small_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_large_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_large_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_large_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_large_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_small_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_mem_small_s2p_tree.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_small_s2p_hash.png \
+ ${xml_image_dir}/pbds_multimap_text_insert_small_s2p_tree.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_modify_down_thin.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_modify_up_thin.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_push_pop.png \
+ ${xml_image_dir}/pbds_pairing_priority_queue_text_push.png \
+ ${xml_image_dir}/pbds_priority_queue_int_push_pop.png \
+ ${xml_image_dir}/pbds_priority_queue_int_push.png \
+ ${xml_image_dir}/pbds_priority_queue_text_join.png \
+ ${xml_image_dir}/pbds_priority_queue_text_modify_down.png \
+ ${xml_image_dir}/pbds_priority_queue_text_modify_up.png \
+ ${xml_image_dir}/pbds_priority_queue_text_pop_mem.png \
+ ${xml_image_dir}/pbds_priority_queue_text_push_pop.png \
+ ${xml_image_dir}/pbds_priority_queue_text_push.png \
+ ${xml_image_dir}/pbds_tree_int_find.png \
+ ${xml_image_dir}/pbds_tree_order_statistics.png \
+ ${xml_image_dir}/pbds_tree_split_join.png \
+ ${xml_image_dir}/pbds_tree_text_find.png \
+ ${xml_image_dir}/pbds_tree_text_insert_node.png \
+ ${xml_image_dir}/pbds_tree_text_insert_trie.png \
+ ${xml_image_dir}/pbds_tree_text_insert_vector.png \
+ ${xml_image_dir}/pbds_tree_text_lor_find.png
+
+xml_images = ${xml_image_basic} ${xml_image_generated}
+xml_extradir = ${glibcxx_srcdir}/doc/html/ext
+xml_extra = \
+ ${xml_extradir}/lwg-active.html \
+ ${xml_extradir}/lwg-closed.html \
+ ${xml_extradir}/lwg-defects.html
+
xml_noinst = \
${xml_dir}/book.txml \
${xml_dir}/chapter.txml \
${xml_dir}/class.txml \
- ${xml_dir}/images/confdeps.dot \
- ${xml_dir}/images/confdeps.png \
- ${xml_dir}/images/confdeps.pdf
+ ${xml_image_dir}/confdeps.dot \
+ ${xml_image_dir}/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
-XSL_HTML_STYLE = $(XSL_STYLE_DIR)/xhtml-1_1/chunk.xsl
-XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/xhtml-1_1/docbook.xsl
-XSL_EPUB_STYLE = $(XSL_STYLE_DIR)/epub/docbook.xsl
-LINT_FLAGS = --debug --xinclude --noent --noblanks --noout
-SCHEMA_FLAGS = http://www.docbook.org/xml/5.0/dtd/docbook.dtd
-#SCHEMA_FLAGS = --nonet /usr/share/xml/docbook5/schema/dtd/5.0/docbook.dtd
-XMLLINT_VALID_FLAGS = $(LINT_FLAGS) --dtdvalid $(SCHEMA_FLAGS)
-XMLLINT_FLAGS = --xinclude --nsclean --c14n --noent --noblanks --nocdata
+XSL_HTML_STYLE = $(XSL_STYLE_DIR)/xhtml/chunk.xsl
+XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/html/docbook.xsl
+XSL_EPUB_STYLE = $(XSL_STYLE_DIR)/epub3/chunk.xsl
+XSL_LOCAL_STYLE = ${glibcxx_builddir}/doc/xsl/customization.xsl
# XML, all one page
# Some info on canonicalization
# http://www.mail-archive.com/help-texinfo@gnu.org/msg00864.html
manual_xml = ${docbook_outdir}/xml/libstdc++-manual-single.xml
set_xml = ${docbook_outdir}/xml/libstdc++-set-single.xml
+LINT_FLAGS = --debug --xinclude --noent --noblanks --noout
+SCHEMA_FLAGS = --dtdvalid http://www.docbook.org/xml/5.0/dtd/docbook.dtd
+SCHEMA_RNG_FLAGS = --relaxng http://www.docbook.org/xml/5.0/rng/docbook.rng
+#SCHEMA_FLAGS = --nonet --dtdvalid /usr/share/xxx/dtd/5.0/docbook.dtd
+XMLLINT_VALID_FLAGS = $(LINT_FLAGS) $(SCHEMA_FLAGS)
+XMLLINT_FLAGS = --xinclude --nsclean --c14n --noent --noblanks --nocdata
# HTML, all one page
+# NB: Have to generate customization XSL for UTF-8 output.
manual_html = ${docbook_outdir}/html/libstdc++-manual-single.html
# PDF, via dblatex
manual_pdf = ${docbook_outdir}/pdf/libstdc++-manual.pdf
-DBLATEX_FLAGS = --dump --verbose --pdf -o ${manual_pdf}
+DBLATEX_FLAGS = --verbose --pdf --dump --debug --tmpdir=${docbook_outdir}/latex
# TEXINFO, via docbook2X
# NB: Both experimental and tempermental
@@ -455,13 +556,15 @@ DB2TEXI_FLAGS = \
--string-param explicit-node-names=true
-# EPUB, via dbtoepub + ruby
+# EPUB version 3
+# http://sourceforge.net/projects/docbook/files/epub3/
+# Can verify document with epubcheck
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.
-doc_performance_script = ${top_srcdir}/scripts/make_graphs.py
+# Generates the plots/graph imagery for performance testing.
+doc_performance_script = ${top_srcdir}/scripts/make_graph.py
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.log stamp*
@@ -649,7 +752,7 @@ doc-install-xml: doc-xml
test -z ${xmldir} || $(mkinstalldirs) ${xmldir}
$(INSTALL_DATA) ${manual_xml} ${xmldir}
$(INSTALL_DATA) ${api_xml} ${xmldir}
-stamp-html: stamp-html-docbook stamp-html-doxygen
+stamp-html: stamp-html-docbook-data stamp-html-doxygen
$(STAMP) stamp-html
doc-html: stamp-html
@@ -776,49 +879,74 @@ doc-man-doxygen: stamp-man-doxygen
${docbook_outdir}/epub:
mkdir -p ${docbook_outdir}/epub
+ mkdir -p ${docbook_outdir}/epub/OEBPS/images
${docbook_outdir}/fo:
mkdir -p ${docbook_outdir}/fo
${docbook_outdir}/html:
mkdir -p ${docbook_outdir}/html
+ mkdir -p ${docbook_outdir}/html/ext
+ mkdir -p ${docbook_outdir}/html/images
+ mkdir -p ${docbook_outdir}/html/manual
${docbook_outdir}/pdf:
mkdir -p ${docbook_outdir}/pdf
+${docbook_outdir}/latex:
+ mkdir -p ${docbook_outdir}/latex
+
${docbook_outdir}/texinfo:
mkdir -p ${docbook_outdir}/texinfo
${docbook_outdir}/xml:
mkdir -p ${docbook_outdir}/xml
-doc-xml-validate-docbook: $(xml_sources)
- @echo "Generating XML validation log..."
- $(XMLLINT) $(XMLLINT_VALID_FLAGS) ${top_srcdir}/doc/xml/spine.xml
stamp-xml-single-docbook: $(xml_sources) ${docbook_outdir}/xml
@echo "Generating XML single..."
$(XMLLINT) $(XMLLINT_FLAGS) \
${top_srcdir}/doc/xml/manual/spine.xml > ${manual_xml};
$(XMLLINT) $(XMLLINT_FLAGS) \
${top_srcdir}/doc/xml/spine.xml > ${set_xml};
- if [ ! -d "${docbook_outdir}/xml/images" ]; then \
- $(LN_S) ${top_srcdir}/doc/xml/images ${docbook_outdir}/xml/; \
- fi
$(STAMP) stamp-xml-single-docbook
doc-xml-single-docbook: stamp-xml-single-docbook
+doc-xml-validate-docbook: doc-xml-validate-dtd-db
+
+doc-xml-validate-dtd-db: $(xml_sources) $(xml_images)
+ @echo "Generating XML validation log..."
+ $(XMLLINT) $(XMLLINT_VALID_FLAGS) ${top_srcdir}/doc/xml/spine.xml
+
+doc-xml-validate-rng-db: $(xml_sources) $(xml_images) doc-xml-single-docbook
+ @echo "Generating XML RelaxNG validation log..."
+ $(XMLLINT) $(LINT_FLAGS) $(SCHEMA_RNG_FLAGS) ${set_xml}
+
+# HTML support files
+stamp-html-docbook-images: stamp-html-docbook $(xml_images)
+ $(INSTALL_DATA) $(xml_images) ${docbook_outdir}/html/images
+ $(STAMP) stamp-html-docbook-images
+
+stamp-html-docbook-lwg: stamp-html-docbook $(xml_extra)
+ $(INSTALL_DATA) $(xml_extra) ${docbook_outdir}/html/ext
+ $(STAMP) stamp-html-docbook-lwg
-# HTML, index plus chapters
+stamp-html-docbook-data: stamp-html-docbook-images stamp-html-docbook-lwg
+ $(STAMP) stamp-html-docbook-data
+
+# HTML, "chunked" into index plus chapters as separate pages
stamp-html-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html files..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
- $(XSL_HTML_STYLE) ${top_srcdir}/doc/xml/spine.xml
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${docbook_outdir}/html/ \
+ --stringparam chunker.output.encoding UTF-8 \
+ $(XSL_HTML_STYLE) \
+ ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-docbook
-doc-html-docbook: stamp-html-docbook
+doc-html-docbook: stamp-html-docbook-data
stamp-html-single-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html single file..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${manual_html} \
- $(XSL_HTML_SINGLE_STYLE) ${top_srcdir}/doc/xml/spine.xml
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${manual_html} \
+ ${XSL_LOCAL_STYLE} \
+ ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-single-docbook
doc-html-single-docbook: stamp-html-single-docbook
@@ -826,14 +954,20 @@ 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
doc-fo-docbook: stamp-fo-docbook
-stamp-pdf-docbook: $(xml_sources) ${docbook_outdir}/pdf
+
+doc-pdf-docbook-dirs: ${docbook_outdir}/pdf ${docbook_outdir}/latex
+
+doc-pdf-docbook-pre: $(xml_sources) doc-pdf-docbook-dirs
+
+stamp-pdf-docbook: doc-pdf-docbook-pre doc-xml-single-docbook
@echo "Generating pdf dblatex files..."
- dblatex $(DBLATEX_FLAGS) ${top_srcdir}/doc/xml/spine.xml
+ dblatex $(DBLATEX_FLAGS) -o ${manual_pdf} \
+ ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-pdf-docbook
doc-pdf-docbook: stamp-pdf-docbook
@@ -854,16 +988,24 @@ doc-texinfo-docbook: stamp-texinfo-docbook
doc-info-docbook: stamp-info-docbook
stamp-epub-docbook: stamp-xml-single-docbook ${docbook_outdir}/epub
@echo "Generating epub files..."
- ${XSL_STYLE_DIR}/epub/bin/dbtoepub -v -d -o ${manual_epub} ${set_xml}
+ if [ ! -d "${docbook_outdir}/images" ]; then \
+ $(LN_S) ${top_srcdir}/doc/xml/images ${docbook_outdir}/; \
+ fi
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) \
+ --stringparam base.dir "${docbook_outdir}/epub/OEBPS/" \
+ $(XSL_EPUB_STYLE) ${top_srcdir}/doc/xml/spine.xml
+ $(INSTALL_DATA) $(xml_images) ${docbook_outdir}/epub/OEBPS/images
+ zip -X0 ${manual_epub} ${docbook_outdir}/epub/mimetype
+ zip -r -X9 ${manual_epub} ${docbook_outdir}/epub/META-INF ${docbook_outdir}/epub/OEBPS
$(STAMP) stamp-epub-docbook
doc-epub-docbook: stamp-epub-docbook
-doc-html-performance:
+doc-svg-performance: ${docbook_outdir}/xml
-@(chmod + ${doc_performance_script}; \
- ${doc_performance_script} ${top_srcdir} \
+ ${doc_performance_script} \
+ ${top_srcdir}/testsuite/data/make_graph_test_infos.xml \
${glibcxx_builddir}/testsuite \
- ${top_srcdir}/testsuite/data/make_graph_htmls.xml \
- ${top_srcdir}/testsuite/data/make_graph_test_infos.xml local g++)
+ ${glibcxx_builddir}/doc/docbook/xml/images)
.PHONY: doc-doxygen-html doc-doxygen-man doc-performance
diff --git a/libstdc++-v3/doc/doxygen/doxygroups.cc b/libstdc++-v3/doc/doxygen/doxygroups.cc
index 0017538830..1212b6ff5f 100644
--- a/libstdc++-v3/doc/doxygen/doxygroups.cc
+++ b/libstdc++-v3/doc/doxygen/doxygroups.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2001, 2002, 2005, 2008, 2009, 2010
+ Copyright (C) 2001, 2002, 2005, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
See license.html for license.
@@ -29,6 +29,12 @@
/** @namespace std::tr1::__detail
* @brief Implementation details not part of the namespace std::tr1 interface.
*/
+/** @namespace std::tr2
+ * @brief ISO C++ TR2 entities toplevel namespace is std::tr2.
+*/
+/** @namespace std::tr2::__detail
+ * @brief Implementation details not part of the namespace std::tr2 interface.
+*/
/** @namespace __gnu_cxx
* @brief GNU extensions for public use.
*/
diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in b/libstdc++-v3/doc/doxygen/user.cfg.in
index 920a4cd4ac..af667b51ba 100644
--- a/libstdc++-v3/doc/doxygen/user.cfg.in
+++ b/libstdc++-v3/doc/doxygen/user.cfg.in
@@ -1,4 +1,4 @@
-# Doxyfile 1.7.2
+# Doxyfile 1.7.6.1
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
@@ -22,8 +22,9 @@
DOXYFILE_ENCODING = UTF-8
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
PROJECT_NAME = libstdc++
@@ -33,6 +34,19 @@ PROJECT_NAME = libstdc++
PROJECT_NUMBER =
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO =
+
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
@@ -57,7 +71,7 @@ CREATE_SUBDIRS = NO
# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
OUTPUT_LANGUAGE = English
@@ -179,10 +193,16 @@ TAB_SIZE = 4
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
-ALIASES = doctodo="@todo\nNeeds documentation! See http://gcc.gnu.org/onlinedocs/libstdc++/manual/documentation_style.html"
+ALIASES = "doctodo=@todo\nNeeds documentation! See http://gcc.gnu.org/onlinedocs/libstdc++/manual/documentation_style.html" \
+ "headername{1}=Instead, include <\1>." \
+ "headername{2}=Instead, include <\1> or <\2>."
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
-ALIASES += headername{1}="Instead, include <\1>."
-ALIASES += headername{2}="Instead, include <\1> or <\2>."
+TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
# sources only. Doxygen will then generate output that is more tailored for C.
@@ -266,6 +286,22 @@ DISTRIBUTE_GROUP_DOC = YES
SUBGROUPING = YES
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
# is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
@@ -282,16 +318,27 @@ TYPEDEF_HIDES_STRUCT = NO
# For small to medium size projects (<1000 input files) the default value is
# probably good enough. For larger projects a too small cache size can cause
# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penality.
+# causing a significant performance penalty.
# If the system has enough physical memory increasing the cache will improve the
# performance by keeping more symbols in memory. Note that the value works on
# a logarithmic scale so increasing the size by one will roughly double the
# memory usage. The cache size is given by this formula:
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols
+# corresponding to a cache size of 2^16 = 65536 symbols.
SYMBOL_CACHE_SIZE = 0
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 0
+
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
@@ -441,6 +488,15 @@ SORT_GROUP_NAMES = YES
SORT_BY_SCOPE_NAME = YES
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
@@ -524,6 +580,16 @@ FILE_VERSION_FILTER =
LAYOUT_FILE =
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES =
+
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
@@ -585,142 +651,171 @@ WARN_LOGFILE =
# with spaces.
INPUT = @srcdir@/doc/doxygen/doxygroups.cc \
- @srcdir@/libsupc++/cxxabi.h \
- @srcdir@/libsupc++/exception \
- @srcdir@/libsupc++/initializer_list \
- @srcdir@/libsupc++/new \
- @srcdir@/libsupc++/typeinfo \
- include/algorithm \
- include/array \
- include/atomic \
- include/bitset \
- include/chrono \
- include/complex \
- include/condition_variable \
- include/deque \
- include/forward_list \
- include/fstream \
- include/functional \
- include/future \
- include/iomanip \
- include/ios \
- include/iosfwd \
- include/iostream \
- include/istream \
- include/iterator \
- include/limits \
- include/list \
- include/locale \
- include/map \
- include/memory \
- include/mutex \
- include/numeric \
- include/ostream \
- include/queue \
- include/random \
- include/ratio \
- include/regex \
- include/set \
- include/sstream \
- include/stack \
- include/stdexcept \
- include/streambuf \
- include/string \
- include/system_error \
- include/thread \
- include/tuple \
- include/typeindex \
- include/type_traits \
- include/unordered_map \
- include/unordered_set \
- include/utility \
- include/valarray \
- include/vector \
- include/cassert \
- include/ccomplex \
- include/cctype \
- include/cerrno \
- include/cfenv \
- include/cfloat \
- include/cinttypes \
- include/ciso646 \
- include/climits \
- include/clocale \
- include/cmath \
- include/csetjmp \
- include/csignal \
- include/cstdarg \
- include/cstdbool \
- include/cstddef \
- include/cstdint \
- include/cstdio \
- include/cstdlib \
- include/cstring \
- include/ctgmath \
- include/ctime \
- include/cwchar \
- include/cwctype \
- include/backward/hash_map \
- include/backward/hash_set \
- include/backward/strstream \
- include/debug/bitset \
- include/debug/deque \
- include/debug/forward_list \
- include/debug/list \
- include/debug/map \
- include/debug/set \
- include/debug/string \
- include/debug/unordered_map \
- include/debug/unordered_set \
- include/debug/vector \
- include/profile/bitset \
- include/profile/deque \
- include/profile/forward_list \
- include/profile/list \
- include/profile/map \
- include/profile/set \
- include/profile/unordered_map \
- include/profile/unordered_set \
- include/profile/vector \
- include/ext/algorithm \
- include/ext/functional \
- include/ext/iterator \
- include/ext/memory \
- include/ext/numeric \
- include/ext/rb_tree \
- include/ext/rope \
- include/ext/slist \
- include/parallel/algorithm \
- include/parallel/numeric \
- include/tr1/ccomplex \
- include/tr1/cctype \
- include/tr1/cfenv \
- include/tr1/cfloat \
- include/tr1/cinttypes \
- include/tr1/climits \
- include/tr1/cmath \
- include/tr1/complex \
- include/tr1/cstdarg \
- include/tr1/cstdbool \
- include/tr1/cstdint \
- include/tr1/cstdio \
- include/tr1/cstdlib \
- include/tr1/ctgmath \
- include/tr1/ctime \
- include/tr1/cwchar \
- include/tr1/cwctype \
- include/decimal/decimal \
- include/ \
- include/@host_alias@/bits \
- include/backward \
- include/bits \
- include/debug \
- include/parallel \
- include/profile \
- include/profile/impl \
- include/ext \
- include/ext/pb_ds \
- include/ext/pb_ds/detail
+ @srcdir@/libsupc++/cxxabi.h \
+ @srcdir@/libsupc++/exception \
+ @srcdir@/libsupc++/initializer_list \
+ @srcdir@/libsupc++/new \
+ @srcdir@/libsupc++/typeinfo \
+ include/algorithm \
+ include/array \
+ include/atomic \
+ include/bitset \
+ include/chrono \
+ include/complex \
+ include/condition_variable \
+ include/deque \
+ include/forward_list \
+ include/fstream \
+ include/functional \
+ include/future \
+ include/iomanip \
+ include/ios \
+ include/iosfwd \
+ include/iostream \
+ include/istream \
+ include/iterator \
+ include/limits \
+ include/list \
+ include/locale \
+ include/map \
+ include/memory \
+ include/mutex \
+ include/numeric \
+ include/ostream \
+ include/queue \
+ include/random \
+ include/ratio \
+ include/regex \
+ include/scoped_allocator \
+ include/set \
+ include/sstream \
+ include/stack \
+ include/stdexcept \
+ include/streambuf \
+ include/string \
+ include/system_error \
+ include/thread \
+ include/tuple \
+ include/typeindex \
+ include/type_traits \
+ include/unordered_map \
+ include/unordered_set \
+ include/utility \
+ include/valarray \
+ include/vector \
+ include/cassert \
+ include/ccomplex \
+ include/cctype \
+ include/cerrno \
+ include/cfenv \
+ include/cfloat \
+ include/cinttypes \
+ include/ciso646 \
+ include/climits \
+ include/clocale \
+ include/cmath \
+ include/csetjmp \
+ include/csignal \
+ include/cstdarg \
+ include/cstdbool \
+ include/cstddef \
+ include/cstdint \
+ include/cstdio \
+ include/cstdlib \
+ include/cstring \
+ include/ctgmath \
+ include/ctime \
+ include/cwchar \
+ include/cwctype \
+ include/ \
+ include/bits \
+ include/@host_alias@/bits \
+ include/backward \
+ include/backward/hash_map \
+ include/backward/hash_set \
+ include/backward/strstream \
+ include/debug \
+ include/debug/bitset \
+ include/debug/deque \
+ include/debug/forward_list \
+ include/debug/list \
+ include/debug/map \
+ include/debug/set \
+ include/debug/string \
+ include/debug/unordered_map \
+ include/debug/unordered_set \
+ include/debug/vector \
+ include/profile \
+ include/profile/impl \
+ include/profile/bitset \
+ include/profile/deque \
+ include/profile/forward_list \
+ include/profile/list \
+ include/profile/map \
+ include/profile/set \
+ include/profile/unordered_map \
+ include/profile/unordered_set \
+ include/profile/vector \
+ include/ext/algorithm \
+ include/ext/functional \
+ include/ext/iterator \
+ include/ext/memory \
+ include/ext/numeric \
+ include/ext/rb_tree \
+ include/ext/rope \
+ include/ext/slist \
+ include/parallel \
+ include/parallel/algorithm \
+ include/parallel/numeric \
+ include/tr1/ccomplex \
+ include/tr1/cctype \
+ include/tr1/cfenv \
+ include/tr1/cfloat \
+ include/tr1/cinttypes \
+ include/tr1/climits \
+ include/tr1/cmath \
+ include/tr1/complex \
+ include/tr1/cstdarg \
+ include/tr1/cstdbool \
+ include/tr1/cstdint \
+ include/tr1/cstdio \
+ include/tr1/cstdlib \
+ include/tr1/ctgmath \
+ include/tr1/ctime \
+ include/tr1/cwchar \
+ include/tr1/cwctype \
+ include/tr2/ \
+ include/tr2/bool_set \
+ include/tr2/dynamic_bitset \
+ include/tr2/ratio \
+ include/tr2/type_traits \
+ include/decimal/decimal \
+ include/ext \
+ include/ext/pb_ds \
+ include/ext/pb_ds/detail \
+ include/ext/pb_ds/detail/binary_heap_ \
+ include/ext/pb_ds/detail/binomial_heap_ \
+ include/ext/pb_ds/detail/binomial_heap_base_ \
+ include/ext/pb_ds/detail/bin_search_tree_ \
+ include/ext/pb_ds/detail/branch_policy \
+ include/ext/pb_ds/detail/cc_hash_table_map_ \
+ include/ext/pb_ds/detail/eq_fn \
+ include/ext/pb_ds/detail/gp_hash_table_map_ \
+ include/ext/pb_ds/detail/hash_fn \
+ include/ext/pb_ds/detail/left_child_next_sibling_heap_ \
+ include/ext/pb_ds/detail/list_update_map_ \
+ include/ext/pb_ds/detail/list_update_policy \
+ include/ext/pb_ds/detail/ov_tree_map_ \
+ include/ext/pb_ds/detail/pairing_heap_ \
+ include/ext/pb_ds/detail/pat_trie_ \
+ include/ext/pb_ds/detail/rb_tree_map_ \
+ include/ext/pb_ds/detail/rc_binomial_heap_ \
+ include/ext/pb_ds/detail/resize_policy \
+ include/ext/pb_ds/detail/splay_tree_ \
+ include/ext/pb_ds/detail/thin_heap_ \
+ include/ext/pb_ds/detail/tree_policy \
+ include/ext/pb_ds/detail/trie_policy \
+ include/ext/pb_ds/detail/unordered_iterator
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -736,11 +831,11 @@ INPUT_ENCODING = UTF-8
# blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-# *.f90 *.f *.vhd *.vhdl
+# *.f90 *.f *.for *.vhd *.vhdl
FILE_PATTERNS = *.h \
- *.hpp \
- *.tcc
+ *.hpp \
+ *.tcc
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
@@ -748,14 +843,16 @@ FILE_PATTERNS = *.h \
RECURSIVE = NO
-# The EXCLUDE tag can be used to specify files and/or directories that should
+# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
EXCLUDE = Makefile
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
EXCLUDE_SYMLINKS = NO
@@ -766,9 +863,10 @@ EXCLUDE_SYMLINKS = NO
# against the file with absolute path, so to exclude all test directories
# for example use the pattern */test/*
-EXCLUDE_PATTERNS = stamp-* doxygroups.cc \
- *.gch \
- */.svn/*
+EXCLUDE_PATTERNS = stamp-* \
+ doxygroups.cc \
+ *.gch \
+ */.svn/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -821,8 +919,8 @@ INPUT_FILTER =
# filter if there is a match.
# The filters are a list of the form:
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
FILTER_PATTERNS =
@@ -832,6 +930,14 @@ FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
@@ -934,7 +1040,14 @@ HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
HTML_HEADER =
@@ -949,12 +1062,21 @@ HTML_FOOTER =
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet. Note that doxygen will try to copy
# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
+# style sheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET =
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-# Doxygen will adjust the colors in the stylesheet and background images
+# Doxygen will adjust the colors in the style sheet and background images
# according to this color. Hue is specified as an angle on a colorwheel,
# see http://en.wikipedia.org/wiki/Hue for more information.
# For instance the value 0 represents red, 60 is yellow, 120 is green,
@@ -1149,18 +1271,14 @@ GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
DISABLE_INDEX = YES
-# This tag can be used to set the number of enum values (range [0,1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-# Note that a value of 0 will completely suppress the enum values from appearing in the overview section.
-
-ENUM_VALUES_PER_LINE = 4
-
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information.
# If the tag value is set to YES, a side panel will be generated
@@ -1168,9 +1286,18 @@ ENUM_VALUES_PER_LINE = 4
# is generated for HTML Help). For this to work a browser that supports
# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
GENERATE_TREEVIEW = YES
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
# and Class Hierarchy pages using a tree view instead of an ordered list.
@@ -1216,12 +1343,18 @@ USE_MATHJAX = NO
# HTML output directory using the MATHJAX_RELPATH option. The destination
# directory should contain the MathJax.js script. For instance, if the mathjax
# directory is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the
+# mathjax.org site, so you can quickly see the result without installing
# MathJax, but it is strongly recommended to install a local copy of MathJax
# before deployment.
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
# When the SEARCHENGINE tag is enabled doxygen will generate a search box
# for the HTML output. The underlying search engine uses javascript
# and DHTML and should work on any modern browser. Note that when using
@@ -1295,6 +1428,13 @@ EXTRA_PACKAGES = amsmath
LATEX_HEADER =
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references
@@ -1328,6 +1468,12 @@ LATEX_HIDE_INDICES = YES
LATEX_SOURCE_CODE = NO
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
@@ -1359,7 +1505,7 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# Load style sheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
@@ -1504,7 +1650,7 @@ MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
SEARCH_INCLUDES = YES
@@ -1512,7 +1658,7 @@ SEARCH_INCLUDES = YES
# contain include files that are not input files but should be processed by
# the preprocessor.
-INCLUDE_PATH =
+INCLUDE_PATH = include
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
@@ -1530,57 +1676,56 @@ INCLUDE_FILE_PATTERNS =
# instead of the = operator.
PREDEFINED = __cplusplus \
- __GTHREADS \
- _GLIBCXX_HAS_GTHREADS \
- __GXX_EXPERIMENTAL_CXX0X__ \
- _GLIBCXX_INCLUDE_AS_CXX0X \
- "_GLIBCXX_PURE= " \
- "_GLIBCXX_CONST= " \
- "_GLIBCXX_NORETURN= " \
- "_GLIBCXX_NOTHROW= " \
- "_GLIBCXX_STD_C= " \
- "_GLIBCXX_STD_A= " \
+ __GTHREADS \
+ _GLIBCXX_HAS_GTHREADS \
+ __GXX_EXPERIMENTAL_CXX0X__ \
+ _GLIBCXX_INCLUDE_AS_CXX0X \
+ "_GLIBCXX_PURE= " \
+ "_GLIBCXX_CONST= " \
+ "_GLIBCXX_NORETURN= " \
+ "_GLIBCXX_NOTHROW= " \
+ "_GLIBCXX_STD_C= " \
+ "_GLIBCXX_STD_A= " \
"_GLIBCXX_VISIBILITY(V)= " \
- "_GLIBCXX_BEGIN_NAMESPACE_VERSION= " \
- "_GLIBCXX_BEGIN_NAMESPACE_ALGO= " \
- "_GLIBCXX_BEGIN_NAMESPACE_CONTAINER= " \
- "_GLIBCXX_BEGIN_NAMESPACE_LDBL= " \
- "_GLIBCXX_END_NAMESPACE_VERSION= " \
- "_GLIBCXX_END_NAMESPACE_ALGO= " \
- "_GLIBCXX_END_NAMESPACE_CONTAINER= " \
- "_GLIBCXX_END_NAMESPACE_LDBL= " \
- "_GLIBCXX_TEMPLATE_ARGS=... " \
- _GLIBCXX_DEPRECATED \
- _GLIBCXX_CONSTEXPR=constexpr \
- _GLIBCXX_USE_CONSTEXPR=constexpr \
- _GLIBCXX_USE_WCHAR_T \
- _GLIBCXX_USE_LONG_LONG \
- _GLIBCXX_USE_C99_STDINT_TR1 \
- _GLIBCXX_ATOMIC_BUILTINS_1 \
- _GLIBCXX_ATOMIC_BUILTINS_2 \
- _GLIBCXX_ATOMIC_BUILTINS_4 \
- _GLIBCXX_ATOMIC_BUILTINS_8 \
- _GLIBCXX_USE_SCHED_YIELD \
- _GLIBCXX_USE_NANOSLEEP \
- __GXX_RTTI \
- __glibcxx_function_requires=// \
- __glibcxx_class_requires=// \
- __glibcxx_class_requires2=// \
- __glibcxx_class_requires3=// \
- __glibcxx_class_requires4=//
+ "_GLIBCXX_BEGIN_NAMESPACE_VERSION= " \
+ "_GLIBCXX_BEGIN_NAMESPACE_ALGO= " \
+ "_GLIBCXX_BEGIN_NAMESPACE_CONTAINER= " \
+ "_GLIBCXX_BEGIN_NAMESPACE_LDBL= " \
+ "_GLIBCXX_END_NAMESPACE_VERSION= " \
+ "_GLIBCXX_END_NAMESPACE_ALGO= " \
+ "_GLIBCXX_END_NAMESPACE_CONTAINER= " \
+ "_GLIBCXX_END_NAMESPACE_LDBL= " \
+ "_GLIBCXX_TEMPLATE_ARGS=... " \
+ _GLIBCXX_DEPRECATED \
+ _GLIBCXX_CONSTEXPR=constexpr \
+ _GLIBCXX_USE_CONSTEXPR=constexpr \
+ _GLIBCXX_USE_WCHAR_T \
+ _GLIBCXX_USE_LONG_LONG \
+ _GLIBCXX_USE_C99_STDINT_TR1 \
+ _GLIBCXX_USE_SCHED_YIELD \
+ _GLIBCXX_USE_NANOSLEEP \
+ __EXCEPTIONS \
+ __GXX_RTTI \
+ ATOMIC_INT_LOCK_FREE \
+ PB_DS_DATA_TRUE_INDICATOR \
+ __glibcxx_function_requires=// \
+ __glibcxx_class_requires=// \
+ __glibcxx_class_requires2=// \
+ __glibcxx_class_requires3=// \
+ __glibcxx_class_requires4=//
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
SKIP_FUNCTION_MACROS = YES
@@ -1671,14 +1816,12 @@ HAVE_DOT = YES
DOT_NUM_THREADS = 0
-# By default doxygen will write a font called FreeSans.ttf to the output
-# directory and reference it in all dot files that doxygen generates. This
-# font does not include all possible unicode characters however, so when you need
-# these (or just want a differently looking font) you can specify the font name
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
-# which can be done by putting it in a standard location or by setting the
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
-# containing the font.
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
DOT_FONTNAME = FreeSans
@@ -1687,17 +1830,16 @@ DOT_FONTNAME = FreeSans
DOT_FONTSIZE = 9
-# By default doxygen will tell dot to use the output directory to look for the
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a
-# different font using DOT_FONTNAME you can set the path where dot
-# can find it using this tag.
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
DOT_FONTPATH =
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# CLASS_DIAGRAMS tag to NO.
CLASS_GRAPH = YES
@@ -1767,11 +1909,22 @@ GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif.
-# If left blank png will be used.
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
DOT_IMAGE_FORMAT = png
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
diff --git a/libstdc++-v3/doc/html/api.html b/libstdc++-v3/doc/html/api.html
index 4305fd780c..8345a5d06e 100644
--- a/libstdc++-v3/doc/html/api.html
+++ b/libstdc++-v3/doc/html/api.html
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="bk02.html" title=""/><link rel="prev" href="bk02.html" title=""/><link rel="next" href="bk03.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"/><td align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr/></div><div class="article" title="The GNU C++ Library API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="api"/>The GNU C++ Library API Reference</h2></div><div><p class="copyright">Copyright ©
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article" title="The GNU C++ Library API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="api"></a>The GNU C++ Library API Reference</h2></div><div><p class="copyright">Copyright ©
2008
,
2010
- <a class="link" href="http://www.fsf.org/">FSF
+ <a class="link" href="http://www.fsf.org/" target="_top">FSF
</a>
- </p></div><div><div class="legalnotice" title="Legal Notice"><a id="id408490"/><p>
- <a class="link" href="manual/license.html" title="License">License
+ </p></div><div><div class="legalnotice" title="Legal Notice"><a id="idp3637504"></a><p>
+ <a class="link" href="manual/license.html" title="License">License
</a>
- </p></div></div></div><hr/></div><p>
+ </p></div></div></div><hr /></div><p>
The GNU C++ library sources have been specially formatted so that
with the proper invocation of another tool (Doxygen), a set of
indexed reference material can generated from the sources files
@@ -20,26 +20,29 @@
particular include file, looking at inheritance diagrams, etc.
</p><p>
The API documentation, rendered into HTML, can be viewed online:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html">for the 3.4 release
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
</a>
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html">for the 4.1 release
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html" target="_top">for the 4.1 release
</a>
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html">for the 4.2 release
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html" target="_top">for the 4.2 release
</a>
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html">for the 4.3 release
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html" target="_top">for the 4.3 release
</a>
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html">for the 4.4 release
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html" target="_top">for the 4.4 release
</a>
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/index.html">for the 4.5 release
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/index.html" target="_top">for the 4.5 release
</a>
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">"the latest collection"
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.6/index.html" target="_top">for the 4.6 release
+ </a>
+ </p></li><li class="listitem"><p>
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">"the latest collection"
</a>
(For the main development tree; see the date on the first page.)
</p></li></ul></div><p>
@@ -47,10 +50,10 @@
gcc.org site in a directory located at
<code class="literal">&lt;URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/&gt;</code>.
You will almost certainly need to use one of the
- <a class="link" href="http://gcc.gnu.org/mirrors.html">mirror sites</a> to download
+ <a class="link" href="http://gcc.gnu.org/mirrors.html" target="_top">mirror sites</a> to download
the tarball. After unpacking, simply load libstdc++-html-*/index.html
into a browser.
</p><p>
In addition, a rendered set of man pages are available in the same
location specified above. Start with C++Intro(3).
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk02.html">Up</a></td><td align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td align="left" valign="top"> </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/bk02.html b/libstdc++-v3/doc/html/bk02.html
index 9c2d768c74..3863d067ae 100644
--- a/libstdc++-v3/doc/html/bk02.html
+++ b/libstdc++-v3/doc/html/bk02.html
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title/><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library"/><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility"/><link rel="next" href="api.html" title="The GNU C++ Library API Reference"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"/></tr><tr><td align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr/></div><div class="book"><div class="titlepage"><hr/></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td align="center"> </td><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td align="left" valign="top">Backwards Compatibility </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> The GNU C++ Library API Reference</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"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/bk03.html b/libstdc++-v3/doc/html/bk03.html
index 6d1d2e9aac..a00ca967b5 100644
--- a/libstdc++-v3/doc/html/bk03.html
+++ b/libstdc++-v3/doc/html/bk03.html
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title/><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library"/><link rel="prev" href="api.html" title="The GNU C++ Library API Reference"/><link rel="next" href="faq.html" title="Frequently Asked Questions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"/></tr><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr/></div><div class="book"><div class="titlepage"><hr/></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><td align="center"> </td><td align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td align="left" valign="top">The GNU C++ Library API Reference </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> Frequently Asked Questions</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"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/PythonPoweredSmall.gif b/libstdc++-v3/doc/html/ext/pb_ds/PythonPoweredSmall.gif
deleted file mode 100644
index 268980706a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/PythonPoweredSmall.gif
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/acks.html b/libstdc++-v3/doc/html/ext/pb_ds/acks.html
deleted file mode 100644
index 6612a4a818..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/acks.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.png b/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.png
deleted file mode 100644
index 16cc6da870..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.svg b/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.svg
deleted file mode 100644
index 02be624164..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_tag_cd.svg
+++ /dev/null
@@ -1,491 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="11in"
- height="8.5in"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.43"
- version="1.0"
- sodipodi:docbase="/mnt/share/src/policy_based_data_structures/pb_ds_images"
- sodipodi:docname="assoc_tag_diagram_2.svg"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/pb_ds_images/assoc_tag_diagram_2.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path3311"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Sstart"
- style="overflow:visible">
- <path
- id="path3319"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(0.3,0,0,0.3,-1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Sstart"
- style="overflow:visible">
- <path
- id="path3337"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Send"
- style="overflow:visible">
- <path
- id="path3316"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.3,0,0,-0.3,1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mend"
- style="overflow:visible">
- <path
- id="path3322"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.6,0,0,-0.6,3,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3346"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(-0.8,-0.8)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lstart"
- style="overflow:visible">
- <path
- id="path3331"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(1.1,0,0,1.1,-5.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3328"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2"
- inkscape:cx="613.85775"
- inkscape:cy="310.05621"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1278"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
- gridtolerance="0.125in"
- guidetolerance="0.125in">
- <sodipodi:guide
- orientation="horizontal"
- position="629"
- id="guide1307" />
- <sodipodi:guide
- orientation="horizontal"
- position="449"
- id="guide1309" />
- <sodipodi:guide
- orientation="horizontal"
- position="269"
- id="guide1311" />
- <sodipodi:guide
- orientation="vertical"
- position="496"
- id="guide1313" />
- <sodipodi:guide
- orientation="vertical"
- position="361"
- id="guide1315" />
- <sodipodi:guide
- orientation="vertical"
- position="226"
- id="guide1317" />
- <sodipodi:guide
- orientation="vertical"
- position="631"
- id="guide1319" />
- <sodipodi:guide
- orientation="vertical"
- position="766"
- id="guide1321" />
- <sodipodi:guide
- orientation="vertical"
- position="91"
- id="guide1345" />
- <sodipodi:guide
- orientation="vertical"
- position="901"
- id="guide1347" />
- <sodipodi:guide
- orientation="horizontal"
- position="539"
- id="guide3390" />
- <sodipodi:guide
- orientation="horizontal"
- position="359"
- id="guide3392" />
- <sodipodi:guide
- orientation="vertical"
- position="280.5"
- id="guide3324" />
- <sodipodi:guide
- orientation="vertical"
- position="172"
- id="guide3326" />
- <sodipodi:guide
- orientation="vertical"
- position="427"
- id="guide3328" />
- <sodipodi:guide
- orientation="vertical"
- position="711.5"
- id="guide3340" />
- <sodipodi:guide
- orientation="horizontal"
- position="179"
- id="guide1395" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Benjamin Kosnik</dc:title>
- </cc:Agent>
- </dc:creator>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <rect
- y="562.32806"
- x="237.8916"
- height="23.200001"
- width="80.769417"
- id="rect1495"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1497"
- width="80.769417"
- height="23.200001"
- x="132.8916"
- y="562.32806" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1493"
- width="80.769417"
- height="23.200001"
- x="21.891602"
- y="562.32806" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1425"
- width="141.64481"
- height="23.200001"
- x="209.57762"
- y="382.56177" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3378"
- width="141.64481"
- height="23.200001"
- x="640.77765"
- y="382.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;stroke-miterlimit:4;stroke-dasharray:none"
- x="710.40002"
- y="397.09772"
- id="use1337"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1391"
- x="710.40003"
- y="397.09772">basic_hash_table_tag</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="280"
- y="397.09772"
- id="text1339"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1385"
- x="280"
- y="397.09772">basic_tree_tag</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3418"
- width="141.64481"
- height="23.200001"
- x="101.57762"
- y="472.5618" />
- <rect
- y="472.5618"
- x="317.57761"
- height="23.200001"
- width="141.64481"
- id="rect3420"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="171.20001"
- y="486.29773"
- id="text3394"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1387"
- x="171.20001"
- y="486.29773">tree_tag</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3400"
- y="486.29773"
- x="388.39999"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1389"
- x="388.39999"
- y="486.29773">trie_tag</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3380"
- width="141.64481"
- height="23.200001"
- x="425.57764"
- y="292.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="495.20001"
- y="307.09772"
- id="text1323"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1384"
- x="495.20001"
- y="307.09772">associative_container_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
- d="M 170.97058,472.5 L 170.97058,451 L 387.51871,450 L 387.51871,472.5"
- id="path2244" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 280.5,450.53297 L 280.5,410.62445"
- id="path3332" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3422"
- width="141.64481"
- height="23.200001"
- x="533.57764"
- y="472.5618" />
- <rect
- y="472.5618"
- x="748.77765"
- height="23.200001"
- width="141.64481"
- id="rect3424"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3406"
- y="486.29773"
- x="601.20001"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1393"
- x="601.20001"
- y="486.29773">cc_hash_table_tag</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="818"
- y="486.29773"
- id="text3412"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1395"
- x="818"
- y="486.29773">gp_hash_table_tag</tspan></text>
- <path
- id="path3353"
- d="M 601.47058,472.5 L 601.47058,451 L 818.01871,450 L 818.01871,472.5"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
- <path
- id="path3355"
- d="M 711,450.53297 L 711,410.62445"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3344"
- d="M 281.18218,383.28102 L 281.18218,361.78102 L 711.79281,360.78102 L 711.79281,383.28102"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
- <rect
- y="383.1962"
- x="425.625"
- height="23.200001"
- width="141.64481"
- id="rect3376"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="use1329"
- y="397.73215"
- x="497.24741"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1382"
- x="497.24741"
- y="397.73215">list_update_tag</tspan></text>
- <path
- id="path3347"
- d="M 497.79886,384.13056 L 497.79886,323.40547"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="61.152512"
- y="577.07874"
- id="text1423"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1418"
- x="61.152512"
- y="577.07874">rb_tree_tag</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text1427"
- y="577.07874"
- x="277.95251"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1414"
- x="277.95252"
- y="577.07874">splay_tree_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
- d="M 61.42308,563.28102 L 61.42308,541.78102 L 277.97121,540.78102 L 277.97121,563.28102"
- id="path1431" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 170.9525,561.5357 L 170.9525,503.81235"
- id="path1433" />
- <rect
- y="562.17499"
- x="347.8916"
- height="23.200001"
- width="80.769417"
- id="rect1469"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text1471"
- y="576.71094"
- x="388.80002"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1412"
- x="388.80002"
- y="576.71094">pat_trie_tag</tspan></text>
- <path
- id="path1475"
- d="M 389.35146,563.10936 L 389.35146,502.38427"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="173.95251"
- y="577.07874"
- id="text1487"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1416"
- x="173.95251"
- y="577.07874">ov_tree_tag</tspan></text>
- </g>
-</svg>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_traits.html b/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_traits.html
deleted file mode 100644
index 7814712c36..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_container_traits.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_design.html b/libstdc++-v3/doc/html/ext/pb_ds/assoc_design.html
deleted file mode 100644
index 6c501e26bb..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_design.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_examples.html b/libstdc++-v3/doc/html/ext/pb_ds/assoc_examples.html
deleted file mode 100644
index b64c747454..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_examples.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_performance_tests.html b/libstdc++-v3/doc/html/ext/pb_ds/assoc_performance_tests.html
deleted file mode 100644
index 642f848095..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_performance_tests.html
+++ /dev/null
@@ -1,345 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Associative-Container Performance Tests</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1><a name="assoc" id="assoc">Associative-Container
- Performance Tests</a></h1>
-<h2><a name="settings" id="settings">Settings</a></h2>
-<p>This section describes performance tests and their results.
- In the following, <a href="#gcc"><u>g++</u></a>, <a href="#msvc"><u>msvc++</u></a>, and <a href="#local"><u>local</u></a> (the build used for generating this
- documentation) stand for three different builds:</p>
-<div id="gcc_settings_div">
-<div class="c1">
-<h3><a name="gcc" id="gcc"><u>g++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.644</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform -
- Linux-2.6.12-9-386-i686-with-debian-testing-unstable</li>
-<li>Compiler - g++ (GCC) 4.0.2 20050808 (prerelease)
- (Ubuntu 4.0.1-4ubuntu9) Copyright (C) 2005 Free Software
- Foundation, Inc. This is free software; see the source
- for copying conditions. There is NO warranty; not even
- for MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="msvc_settings_div">
-<div class="c1">
-<h3><a name="msvc" id="msvc"><u>msvc++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.554</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform - Windows XP Pro</li>
-<li>Compiler - Microsoft (R) 32-bit C/C++ Optimizing
- Compiler Version 13.10.3077 for 80x86 Copyright (C)
- Microsoft Corporation 1984-2002. All rights
- reserved.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="local_settings_div"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h3><a name = "local"><u>local</u></a></h3><ul>
-<li>CPU speed - cpu MHz : 2250.000</li>
-<li>Memory - MemTotal: 2076248 kB</li>
-<li>Platform - Linux-2.6.16-1.2133_FC5-i686-with-redhat-5-Bordeaux</li>
-<li>Compiler - g++ (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-</li>
-</ul>
-</div><div style = "width: 100%; height: 20px"></div></div>
-<h2><a name="assoc_tests" id="assoc_tests">Tests</a></h2>
-<h3><a name="hash_based" id="hash_based">Hash-Based
- Containers</a></h3>
-<ol>
-<li><a href="hash_text_find_find_timing_test.html">Hash-Based
- Text <tt>find</tt> Find Timing Test</a></li>
-<li><a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a></li>
-<li><a href="hash_random_int_subscript_find_timing_test.html">Hash-Based
- Random-Integer Subscript Find Timing Test</a></li>
-<li><a href="hash_random_int_subscript_insert_timing_test.html">Hash-Based
- Random-Integer Subscript Insert Timing Test</a></li>
-<li><a href="hash_zlob_random_int_find_find_timing_test.html">Hash-Based
- Skewed-Distribution Random-Integer <tt>find</tt> Find Timing
- Test</a></li>
-<li><a href="hash_random_int_erase_mem_usage_test.html">Hash-Based Erase
- Memory Use Test</a></li>
-</ol>
-<h3><a name="tree_like_based" id="tree_like_based">Tree-Like-Based Containers</a></h3>
-<ol>
-<li><a href="tree_text_insert_timing_test.html">Tree-Based
- and Trie-Based Text Insert Timing Test</a></li>
-<li><a href="tree_text_find_find_timing_test.html">Tree-Based
- and Trie-Based Text <tt>find</tt> Find Timing Test</a></li>
-<li><a href="tree_text_lor_find_find_timing_test.html">Tree-Based
- Locality-of-Reference Text <tt>find</tt> Find Timing
- Test</a></li>
-<li><a href="tree_random_int_find_find_timing_test.html">Tree-Based
- Random-Integer <tt>find</tt> Find Timing Test</a></li>
-<li><a href="tree_split_join_timing_test.html">Tree Split and
- Join Timing Test</a></li>
-<li><a href="tree_order_statistics_timing_test.html">Tree
- Order-Statistics Timing Test</a></li>
-</ol>
-<h3><a name="multimaps" id="multimaps">Multimaps</a></h3>
-<ol>
-<li><a href="multimap_text_find_timing_test_small.html">"Multimap"
- Text Find Timing Test with <u>Small</u> Average Secondary-Key
- to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_find_timing_test_large.html">"Multimap"
- Text Find Timing Test with <u>Large</u> Average Secondary-Key
- to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_timing_test_small.html">"Multimap"
- Text Insert Timing Test with <u>Small</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_timing_test_large.html">"Multimap"
- Text Insert Timing Test with <u>Large</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_mem_usage_test_small.html">"Multimap"
- Text Insert Memory-Use Test with <u>Small</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_mem_usage_test_large.html">"Multimap"
- Text Insert Memory-Use Test with <u>Large</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-</ol>
-<h2><a name="assoc_observations" id="assoc_observations">Observations</a></h2>
-<h3><a name="dss_family_choice" id="dss_family_choice">Underlying Data-Structure Families</a></h3>
-<p>In general, hash-based containers (see <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>) have better timing
- performance than containers based on different underlying-data
- structures. The main reason to choose a tree-based (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>) or trie-based container
- (see <a href="trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>) is if a byproduct of the
- tree-like structure is required: either order-preservation, or
- the ability to utilize node invariants (see <a href="tree_based_containers.html#invariants">Design::Associative
- Containers::Tree-Based Containers::Node Invariants</a> and
- <a href="trie_based_containers.html#invariants">Design::Associative
- Containers::Trie-Based Containers::Node Invariants</a>). If
- memory-use is the major factor, an ordered-vector tree (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>) gives optimal results
- (albeit with high modificiation costs), and a list-based
- container (see <a href="lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>) gives reasonable
- results.</p>
-<h3><a name="hash_based_types" id="hash_based_types">Hash-Based
- Container Types</a></h3>
-<p>Hash-based containers are typically either collision
- chaining or probing (see <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>). Collision-chaining
- containers are more flexible internally, and so offer better
- timing performance. Probing containers, if used for simple
- value-types, manage memory more efficiently (they perform far
- fewer allocation-related calls). In general, therefore, a
- collision-chaining table should be used. A probing container,
- conversely, might be used efficiently for operations such as
- eliminating duplicates in a sequence, or counting the number of
- occurrences within a sequence. Probing containers might be more
- useful also in multithreaded applications where each thread
- manipulates a hash-based container: in the STL, allocators have
- class-wise semantics (see [<a href="references.html#meyers96more">meyers96more</a>] - Item 10); a
- probing container might incur less contention in this case.</p>
-<h3><a name="hash_based_policies" id="hash_based_policies">Hash-Based Containers' Policies</a></h3>
-<p>In hash-based containers, the range-hashing scheme (see
- <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a>) seems to
- affect performance more than other considerations. In most
- settings, a mask-based scheme works well (or can be made to
- work well). If the key-distribution can be estimated a-priori,
- a simple hash function can produce nearly uniform hash-value
- distribution. In many other cases (<i>e.g.</i>, text hashing,
- floating-point hashing), the hash function is powerful enough
- to generate hash values with good uniformity properties
- [<a href="references.html#knuth98sorting">knuth98sorting</a>];
- a modulo-based scheme, taking into account all bits of the hash
- value, appears to overlap the hash function in its effort.</p>
-<p>The range-hashing scheme determines many of the other
- policies (see <a href="hash_based_containers.html#policy_interaction">Design::Hash-Based
- Containers::Policy Interaction</a>). A mask-based scheme works
- well with an exponential-size policy (see <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>) ; for
- probing-based containers, it goes well with a linear-probe
- function (see <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a>).</p>
-<p>An orthogonal consideration is the trigger policy (see
- <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>). This
- presents difficult tradeoffs. <i>E.g.</i>, different load
- factors in a load-check trigger policy yield a
- space/amortized-cost tradeoff.</p>
-<h3><a name="tree_like_based_types" id="tree_like_based_types">Tree-Like-Based Container
- Types</a></h3>
-<p>In general, there are several families of tree-based
- underlying data structures: balanced node-based trees
- (<i>e.g.</i>, red-black or AVL trees), high-probability
- balanced node-based trees (<i>e.g.</i>, random treaps or
- skip-lists), competitive node-based trees (<i>e.g.</i>, splay
- trees), vector-based "trees", and tries. (Additionally, there
- are disk-residing or network-residing trees, such as B-Trees
- and their numerous variants. An interface for this would have
- to deal with the execution model and ACID guarantees; this is
- out of the scope of this library.) Following are some
- observations on their application to different settings.</p>
-<p>Of the balanced node-based trees, this library includes a
- red-black tree (see <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>), as does STL (in
- practice). This type of tree is the "workhorse" of tree-based
- containers: it offers both reasonable modification and
- reasonable lookup time. Unfortunately, this data structure
- stores a huge amount of metadata. Each node must contain,
- besides a value, three pointers and a boolean. This type might
- be avoided if space is at a premium [<a href="references.html#austern00noset">austern00noset</a>].</p>
-<p>High-probability balanced node-based trees suffer the
- drawbacks of deterministic balanced trees. Although they are
- fascinating data structures, preliminary tests with them showed
- their performance was worse than red-black trees. The library
- does not contain any such trees, therefore.</p>
-<p>Competitive node-based trees have two drawbacks. They are
- usually somewhat unbalanced, and they perform a large number of
- comparisons. Balanced trees perform one comparison per each
- node they encounter on a search path; a splay tree performs two
- comparisons. If the keys are complex objects, <i>e.g.</i>,
- <tt>std::string</tt>, this can increase the running time.
- Conversely, such trees do well when there is much locality of
- reference. It is difficult to determine in which case to prefer
- such trees over balanced trees. This library includes a splay
- tree (see <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>).</p>
-<p>Ordered-vector trees (see <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>) use very little space
- [<a href="references.html#austern00noset">austern00noset</a>].
- They do not have any other advantages (at least in this
- implementation).</p>
-<p>Large-fan-out PATRICIA tries (see <a href="trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>) have excellent lookup
- performance, but they do so through maintaining, for each node,
- a miniature "hash-table". Their space efficiency is low, and
- their modification performance is bad. These tries might be
- used for semi-static settings, where order preservation is
- important. Alternatively, red-black trees cross-referenced with
- hash tables can be used. [<a href="references.html#okasaki98mereable">okasaki98mereable</a>]
- discusses small-fan-out PATRICIA tries for integers, but the
- cited results seem to indicate that the amortized cost of
- maintaining such trees is higher than that of balanced trees.
- Moderate-fan-out trees might be useful for sequences where each
- element has a limited number of choices, <i>e.g.</i>, DNA
- strings (see <a href="assoc_examples.html#trie_based">Examples::Associative
- Containers::Trie-Based Containers</a>).</p>
-<h3><a name="msc" id="msc">Mapping-Semantics
- Considerations</a></h3>
-<p>Different mapping semantics were discussed in <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a> and
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>. We
- will focus here on the case where a keys can be composed into
- primary keys and secondary keys. (In the case where some keys
- are completely identical, it is trivial that one should use an
- associative container mapping values to size types.) In this
- case there are (at least) five possibilities:</p>
-<ol>
-<li>Use an associative container that allows equivalent-key
- values (such as <tt>std::multimap</tt>)</li>
-<li>Use a unique-key value associative container that maps
- each primary key to some complex associative container of
- secondary keys, say a tree-based or hash-based container (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a> and <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>)</li>
-<li>Use a unique-key value associative container that maps
- each primary key to some simple associative container of
- secondary keys, say a list-based container (see <a href="lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>)</li>
-<li>Use a unique-key value associative container that maps
- each primary key to some non-associative container
- (<i>e.g.</i>, <tt>std::vector</tt>)</li>
-<li>Use a unique-key value associative container that takes
- into account both primary and secondary keys.</li>
-</ol>
-<p>We do not think there is a simple answer for this (excluding
- option 1, which we think should be avoided in all cases).</p>
-<p>If the expected ratio of secondary keys to primary keys is
- small, then 3 and 4 seem reasonable. Both types of secondary
- containers are relatively lightweight (in terms of memory use
- and construction time), and so creating an entire container
- object for each primary key is not too expensive. Option 4
- might be preferable to option 3 if changing the secondary key
- of some primary key is frequent - one cannot modify an
- associative container's key, and the only possibility,
- therefore, is erasing the secondary key and inserting another
- one instead; a non-associative container, conversely, can
- support in-place modification. The actual cost of erasing a
- secondary key and inserting another one depends also on the
- allocator used for secondary associative-containers (The tests
- above used the standard allocator, but in practice one might
- choose to use, <i>e.g.</i>, [<a href="references.html#boost_pool">boost_pool</a>]). Option 2 is
- definitely an overkill in this case. Option 1 loses out either
- immediately (when there is one secondary key per primary key)
- or almost immediately after that. Option 5 has the same
- drawbacks as option 2, but it has the additional drawback that
- finding all values whose primary key is equivalent to some key,
- might be linear in the total number of values stored (for
- example, if using a hash-based container).</p>
-<p>If the expected ratio of secondary keys to primary keys is
- large, then the answer is more complicated. It depends on the
- distribution of secondary keys to primary keys, the
- distribution of accesses according to primary keys, and the
- types of operations most frequent.</p>
-<p>To be more precise, assume there are <i>m</i> primary keys,
- primary key <i>i</i> is mapped to <i>n<sub>i</sub></i>
- secondary keys, and each primary key is mapped, on average, to
- <i>n</i> secondary keys (<i>i.e.</i>,
- <i><b>E</b>(n<sub>i</sub>) = n</i>).</p>
-<p>Suppose one wants to find a specific pair of primary and
- secondary keys. Using 1 with a tree based container
- (<tt>std::multimap</tt>), the expected cost is
- <i><b>E</b>(&Theta;(log(m) + n<sub>i</sub>)) = &Theta;(log(m) +
- n)</i>; using 1 with a hash-based container
- (<tt>std::tr1::unordered_multimap</tt>), the expected cost is
- <i>&Theta;(n)</i>. Using 2 with a primary hash-based container
- and secondary hash-based containers, the expected cost is
- <i>O(1)</i>; using 2 with a primary tree-based container and
- secondary tree-based containers, the expected cost is (using
- the Jensen inequality [<a href="references.html#motwani95random">motwani95random</a>])
- <i><b>E</b>(O(log(m) + log(n<sub>i</sub>)) = O(log(m)) +
- <b>E</b>(O(log(n<sub>i</sub>)) = O(log(m)) + O(log(n))</i>,
- assuming that primary keys are accessed equiprobably. 3 and 4
- are similar to 1, but with lower constants. Using 5 with a
- hash-based container, the expected cost is <i>O(1)</i>; using 5
- with a tree based container, the cost is
- <i><b>E</b>(&Theta;(log(mn))) = &Theta;(log(m) +
- log(n))</i>.</p>
-<p>Suppose one needs the values whose primary key matches some
- given key. Using 1 with a hash-based container, the expected
- cost is <i>&Theta;(n)</i>, but the values will not be ordered
- by secondary keys (which may or may not be required); using 1
- with a tree-based container, the expected cost is
- <i>&Theta;(log(m) + n)</i>, but with high constants; again the
- values will not be ordered by secondary keys. 2, 3, and 4 are
- similar to 1, but typically with lower constants (and,
- additionally, if one uses a tree-based container for secondary
- keys, they will be ordered). Using 5 with a hash-based
- container, the cost is <i>&Theta;(mn)</i>.</p>
-<p>Suppose one wants to assign to a primary key all secondary
- keys assigned to a different primary key. Using 1 with a
- hash-based container, the expected cost is <i>&Theta;(n)</i>,
- but with very high constants; using 1 with a tree-based
- container, the cost is <i>&Theta;(nlog(mn))</i>. Using 2, 3,
- and 4, the expected cost is <i>&Theta;(n)</i>, but typically
- with far lower costs than 1. 5 is similar to 1.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_regression_tests.html b/libstdc++-v3/doc/html/ext/pb_ds/assoc_regression_tests.html
deleted file mode 100644
index 9b6b6b8398..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_regression_tests.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/assoc_tests.html b/libstdc++-v3/doc/html/ext/pb_ds/assoc_tests.html
deleted file mode 100644
index 6e4474945d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/assoc_tests.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/associative_container_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/associative_container_tag.html
deleted file mode 100644
index ceb91cdc74..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/associative_container_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/basic_hash_table.html b/libstdc++-v3/doc/html/ext/pb_ds/basic_hash_table.html
deleted file mode 100644
index 668e681d8c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/basic_hash_table.html
+++ /dev/null
@@ -1,436 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/basic_hash_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/basic_hash_tag.html
deleted file mode 100644
index 9dc5e6d86b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/basic_hash_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/basic_invalidation_guarantee.html b/libstdc++-v3/doc/html/ext/pb_ds/basic_invalidation_guarantee.html
deleted file mode 100644
index d4a0df23fc..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/basic_invalidation_guarantee.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/basic_tree.html b/libstdc++-v3/doc/html/ext/pb_ds/basic_tree.html
deleted file mode 100644
index 3811707fa0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/basic_tree.html
+++ /dev/null
@@ -1,660 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>basic_tree Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>basic_tree</tt> Interface</h1>
-
- <p>An abstract basic tree-like-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped-structure tag.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Update841554648" id=
-"Node_Update841554648"><b>class</b> Node_Update</a>
-</pre>
- </td>
-
- <td>
- <p>Node updater.</p>
-
- <p>Restores node-invariants when invalidated.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Policy_Tl42017403" id=
-"Policy_Tl42017403"><b>class</b> Policy_Tl</a>
-</pre>
- </td>
-
- <td>
- <p>Policy typelist.</p>
-
- <p>Contains subclasses' policies.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Node_Update841554648"><tt>Node_Update</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>::const_key_reference
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_update2404554648" id=
-"node_update2404554648">node_update</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Update841554648"><tt>Node_Update</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node updater type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>Const range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>::iterator
-</pre>
- </td>
-
- <td>
- <p>Range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reverse_iterator4151293083" id=
-"const_reverse_iterator4151293083">const_reverse_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const reverse range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const reverse range-type <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reverse_iterator1896910345" id=
-"reverse_iterator1896910345">reverse_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Reverse range-type iterator.<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then this is synonymous to <a href="#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Reverse range-type <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link7" id="link7">Public Methods</a></h2>
-
- <h3><a name="link8" id="link8">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~basic_tree
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_update2404554648"><tt>node_update</tt></a> &amp;
- get_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#node_update2404554648"><tt>node_update</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#node_update2404554648"><tt>node_update</tt></a> &amp;
- get_node_update
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#node_update2404554648"><tt>node_update</tt></a>
- object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- lower_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the entry whose key is the smallest one at least as
- large as <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- lower_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the entry whose key is the smallest one at least as
- large as <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- upper_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the entry whose key is the smallest one larger than
- <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- upper_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the entry whose key is the smallest one
- larger than <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Erase Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- erase
- (<a href="#iterator10418194"><tt>iterator</tt></a> it)
-</pre>
- </td>
-
- <td>
- <p>Erases the value_type corresponding to the <a href=
- "#iterator10418194"><tt>iterator</tt></a> <span class=
- "c1"><tt>it</tt></span>. Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the next value_type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- erase
- (<a href=
-"#reverse_iterator1896910345"><tt>reverse_iterator</tt></a> it)
-</pre>
- </td>
-
- <td>
- <p>Erases the value_type corresponding to the <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- <span class="c1"><tt>it</tt></span>. Returns the <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- corresponding to the previous value_type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- rbegin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- corresponding to the last value_type in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- rbegin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- corresponding to the last value_type in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- rend
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- corresponding to the just-before-first value_type in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- rend
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- corresponding to the just-before-first value_type in the
- container.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Split and join
- Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- join
- (<span class=
-"c2"><tt>basic_tree</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Joins two trees. When this function returns,
- <span class="c1"><tt>other</tt></span> will be
- empty.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s keys must be all larger or
- all smaller than this object's keys, and <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- split
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key,
- <span class=
-"c2"><tt>basic_tree</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Splits into two trees. When this function returns,
- <span class="c1"><tt>other</tt></span> will contain
- only keys larger than <span class=
- "c1"><tt>r_key</tt></span>.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/basic_tree_assoc_container_const_node_iterator.html b/libstdc++-v3/doc/html/ext/pb_ds/basic_tree_assoc_container_const_node_iterator.html
deleted file mode 100644
index 5647f551e9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/basic_tree_assoc_container_const_node_iterator.html
+++ /dev/null
@@ -1,383 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/basic_tree_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/basic_tree_tag.html
deleted file mode 100644
index 8eca2a8185..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/basic_tree_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/binary_heap_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/binary_heap_tag.html
deleted file mode 100644
index 47873b1cfb..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/binary_heap_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_gcc.png
deleted file mode 100644
index 07f0953a66..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.png
deleted file mode 100644
index 76e02f134f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_msvc.png
deleted file mode 100644
index b8a3b23712..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/binomial_heap_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/binomial_heap_tag.html
deleted file mode 100644
index fde6a913ba..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/binomial_heap_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_max_collision_check_resize_trigger.html b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_max_collision_check_resize_trigger.html
deleted file mode 100644
index a6b512b0d1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_max_collision_check_resize_trigger.html
+++ /dev/null
@@ -1,532 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>cc_hash_max_collision_check_resize_trigger
- Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>cc_hash_max_collision_check_resize_trigger</tt>
- Interface</h1>
-
- <p>A resize trigger policy based on collision checks. It keeps
- the simulated load factor lower than some given load
- factor.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="External_Load_Access1313998607" id=
-"External_Load_Access1313998607"><b>bool</b> External_Load_Access </a>
-</pre>
- </td>
-
- <td>
- <p>Specifies whether the load factor can be accessed
- externally. The two options have different trade-offs in
- terms of flexibility, genericity, and encapsulation.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="external_load_access3976598639" id=
-"external_load_access3976598639">external_load_access</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether loads can be accessed externally</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_max_collision_check_resize_trigger
- (float load = 0.5)
-</pre>
- </td>
-
- <td>
- <p>Default constructor, or constructor taking
- <span class="c1"><tt>load</tt></span>, a load factor
- which it will attempt to maintain.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>cc_hash_max_collision_check_resize_trigger</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Load Access Methods</a></h3>
-
- <p>These methods are only available if the external access
- parameter is set.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> float
- get_load
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the current load.</p>
-
- <p>Calling this method will not compile when <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- set_load
- (float load)
-</pre>
- </td>
-
- <td>
- <p>Sets the <span class="c1"><tt>load</tt></span>; does
- not resize the container.</p>
-
- <p>It is the responsibility of the user to pass an
- appropriate <span class="c1"><tt>load</tt></span> to this
- function. Calling this method will not compile when
- <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link7" id="link7">Protected Methods</a></h2>
-
- <h3><a name="link8" id="link8">Insert Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Find Search
- Notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Erase Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Content Change
- Notifications</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Size Change
- Notifications</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized as a result of this
- object's signifying that a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_externally_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized externally.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Queries</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_grow_needed
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size, <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_entries) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a grow is needed.</p>
-
- <p>This method is called only if this object indicated is
- needed.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_gcc.png
deleted file mode 100644
index 85b9eca4ff..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.png
deleted file mode 100644
index 4f578c65b1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_msvc.png
deleted file mode 100644
index d1234aa11d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_gcc.png
deleted file mode 100644
index 1db2cc0c6a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_local.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_local.png
deleted file mode 100644
index ca4db96f45..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_msvc.png
deleted file mode 100644
index 0b51d9432a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_gcc.png
deleted file mode 100644
index 6e49403812..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_local.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_local.png
deleted file mode 100644
index 48fcf76c04..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_msvc.png
deleted file mode 100644
index 39c96ad8da..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_table.html b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_table.html
deleted file mode 100644
index 0557732a55..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_table.html
+++ /dev/null
@@ -1,724 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>cc_hash_table Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>cc_hash_table</tt> Interface</h1>
-
- <p>A concrete collision-chaining hash-based associative
- container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Hash_Fn1515835" id=
-"Hash_Fn1515835"><b>class</b> Hash_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor.</p>
- </td>
-
- <td>
- <pre>
-__gnu_cxx::hash&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>if using gcc;
- <pre>
-stdext::hash_value&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>if using Visual C++ .net
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Eq_Fn60085" id="Eq_Fn60085"><b>class</b> Eq_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor.</p>
- </td>
-
- <td>
- <pre>
-std::equal_to&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Comb_Hash_Fn320611039" id=
-"Comb_Hash_Fn320611039"><b>class</b> Comb_Hash_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Combining hash functor.</p>
-
- <p>If <a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a> is
- not <a href="null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, then this is the
- ranged-hash functor; otherwise, this is the range-hashing
- functor.</p>
-
- <p>(See <a href=
- "hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a>.)</p>
- </td>
-
- <td>
- <pre>
-<a href="direct_mask_range_hashing.html"><span class=
-"c2"><tt>direct_mask_range_hashing</tt></span></a>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Resize_Policy566860465" id=
-"Resize_Policy566860465"><b>class</b> Resize_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy.</p>
- </td>
-
- <td>
- If <tt><a href=
- "#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a></tt>
- is <tt><a href=
- "direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a></tt>,
- then
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a>&lt;
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type&gt;,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type&gt;,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type&gt;
-</pre>otherwise,
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a>&lt;
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type&gt;,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type&gt;,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Store_Hash218262104" id=
-"Store_Hash218262104"><b>bool</b> Store_Hash </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether the hash value will be stored along
- with each key.</p>
-
- <p>If <tt><a href=
- "#hash_fn2015995"><tt>hash_fn</tt></a></tt> is <a href=
- "null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, then the container
- will not compile if this value is
- <tt><b>true</b></tt></p>
- </td>
-
- <td>
- <pre>
-<tt><b>false</b></tt>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator&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="basic_hash_table.html"><span class=
-"c2"><tt>basic_hash_table</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="hash_fn2015995" id="hash_fn2015995">hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="eq_fn80245" id="eq_fn80245">eq_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Eq_Fn60085"><tt>Eq_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="resize_policy4084493169" id=
-"resize_policy4084493169">resize_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="comb_hash_fn1883611199" id=
-"comb_hash_fn1883611199">comb_hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Combining hash functor type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a> object of
- the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &amp;r_comb_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &amp;r_comb_hash_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &amp;r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- cc_hash_table
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &amp;r_comb_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &amp;r_comb_hash_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &amp;r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <span class=
-"c2"><tt>cc_hash_table</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~cc_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>cc_hash_table</tt></span> &amp;
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>cc_hash_table</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>cc_hash_table</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &amp;
- get_comb_hash_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &amp;
- get_comb_hash_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_tag.html
deleted file mode 100644
index 1923e20fb4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_gcc.png
deleted file mode 100644
index fde6b41bf9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.png b/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.png
deleted file mode 100644
index 2449e1de32..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_msvc.png
deleted file mode 100644
index 11dca77fcf..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/checked_by_tidy.gif b/libstdc++-v3/doc/html/ext/pb_ds/checked_by_tidy.gif
deleted file mode 100644
index 47c2c4859c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/checked_by_tidy.gif
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/concepts.html b/libstdc++-v3/doc/html/ext/pb_ds/concepts.html
deleted file mode 100644
index 9f6c224625..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/concepts.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/contact.html b/libstdc++-v3/doc/html/ext/pb_ds/contact.html
deleted file mode 100644
index 3d506c975c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/contact.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/container_base.html b/libstdc++-v3/doc/html/ext/pb_ds/container_base.html
deleted file mode 100644
index 359e02459b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/container_base.html
+++ /dev/null
@@ -1,1063 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>container_base Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>container_base</tt> Interface</h1>
-
- <p>An abstract basic associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag</a>
-</pre>
- </td>
-
- <td>
- <p>Data structure tag.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Policy_Tl42017403" id=
-"Policy_Tl42017403"><b>class</b> Policy_Tl</a>
-</pre>
- </td>
-
- <td>
- <p>Policy typelist.</p>
-
- <p>Contains subclasses' policies.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::difference_type
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Categories</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="container_category1247973216" id=
-"container_category1247973216">container_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Tag278938"><tt>Tag</tt></a>
-</pre>
- </td>
-
- <td>
- <p>The underlying mapped-structure tag of the
- container.</p>
-
- <p>This is one of:</p>
-
- <ol>
- <li><a href="cc_hash_tag.html"><span class=
- "c2"><tt>cc_hash_tag</tt></span></a></li>
-
- <li><a href="gp_hash_tag.html"><span class=
- "c2"><tt>gp_hash_tag</tt></span></a></li>
-
- <li><a href="rb_tree_tag.html"><span class=
- "c2"><tt>rb_tree_tag</tt></span></a></li>
-
- <li><a href="ov_tree_tag.html"><span class=
- "c2"><tt>ov_tree_tag</tt></span></a></li>
-
- <li><a href="splay_tree_tag.html"><span class=
- "c2"><tt>splay_tree_tag</tt></span></a></li>
-
- <li><a href="pat_trie_tag.html"><span class=
- "c2"><tt>pat_trie_tag</tt></span></a></li>
-
- <li><a href="list_update_tag.html"><span class=
- "c2"><tt>list_update_tag</tt></span></a></li>
- </ol>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href="#Key2501"><tt>Key</tt></a>&gt;::other::value_type
-</pre>
- </td>
-
- <td>
- <p><a href="#Key2501"><tt>Key</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_reference2411522399" id=
-"key_reference2411522399">key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>&gt;::other::reference
-</pre>
- </td>
-
- <td>
- <p><a href="#Key2501"><tt>Key</tt></a> reference
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>&gt;::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_pointer1299054769" id=
-"key_pointer1299054769">key_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>&gt;::other::pointer
-</pre>
- </td>
-
- <td>
- <p><a href="#Key2501"><tt>Key</tt></a> pointer type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_pointer3735194427" id=
-"const_key_pointer3735194427">const_key_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>&gt;::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const key pointer type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Mapped-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="mapped_type1308374436" id=
-"mapped_type1308374436">mapped_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Mapped318655"><tt>Mapped</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Mapped318655"><tt>Mapped</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="mapped_reference4153801225" id=
-"mapped_reference4153801225">mapped_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>&gt;::other::reference
-</pre>
- </td>
-
- <td>
- <p><a href="#Mapped318655"><tt>Mapped</tt></a> reference
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_mapped_reference2113216667" id=
-"const_mapped_reference2113216667">const_mapped_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>&gt;::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const mapped reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="mapped_pointer337953771" id=
-"mapped_pointer337953771">mapped_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>&gt;::other::pointer
-</pre>
- </td>
-
- <td>
- <p><a href="#Mapped318655"><tt>Mapped</tt></a> pointer
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_mapped_pointer4207700301" id=
-"const_mapped_pointer4207700301">const_mapped_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>&gt;::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const mapped pointer type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then <a href=
-"#Key2501"><tt>Key</tt></a><br />
-Otherwise, <a href="#Mapped318655"><tt>Mapped</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::reference
-</pre>
- </td>
-
- <td>
- <p>Value reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const value <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="pointer2179769" id="pointer2179769">pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::pointer
-</pre>
- </td>
-
- <td>
- <p>Value pointer type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const Value <a href=
- "#pointer2179769"><tt>pointer</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_point_iterator2364676009" id=
-"const_point_iterator2364676009">const_point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const point-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="point_iterator2789896775" id=
-"point_iterator2789896775">point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<br />
-Point-type iterator.<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then this is synonymous to <a href="#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<br />
-Range-type iterator.<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then this is synonymous to <a href="#const_iterator98626788"><tt>const_iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Range-type iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Public Methods</a></h2>
-
- <h3><a name="link11" id="link11">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~container_base
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Information Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the number of distinct <a href=
- "#value_type279018186"><tt>value_type</tt></a> objects
- the container object is storing.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- max_size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns an upper bound on the number of distinct
- <a href="#value_type279018186"><tt>value_type</tt></a>
- objects this container can store.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- empty
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns whether the container object is not storing
- any <a href=
- "#value_type279018186"><tt>value_type</tt></a>
- objects.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Insert Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair&lt;<a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a>, <b>bool</b>&gt;
- insert
- (<a href=
-"#const_reference495461441"><tt>const_reference</tt></a> r_val)
-</pre>
- </td>
-
- <td>
- <p>Inserts a <a href=
- "#value_type279018186"><tt>value_type</tt></a> object. If
- no <a href="#value_type279018186"><tt>value_type</tt></a>
- with <span class="c1"><tt>r_val</tt></span>'s key was in
- the container object, inserts and returns (<a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- object associated with <span class=
- "c1"><tt>r_val</tt></span>, <tt><b>true</b></tt>);
- otherwise just returns (<a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- object associated with <span class=
- "c1"><tt>r_val</tt></span>'s key,
- <tt><b>false</b></tt>).</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#mapped_reference4153801225"><tt>mapped_reference</tt></a>
- <b>operator</b>[]
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Subscript operator.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#point_iterator2789896775"><tt>point_iterator</tt></a>
- find
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- corresponding to the <a href=
- "#value_type279018186"><tt>value_type</tt></a> with
- <span class="c1"><tt>r_key</tt></span> as its key, or the
- <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- corresponding to the just-after-last entry if no such
- <a href=
- "#value_type279018186"><tt>value_type</tt></a>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
- find
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
- corresponding to the <a href=
- "#value_type279018186"><tt>value_type</tt></a> with
- <span class="c1"><tt>r_key</tt></span> as its key, or the
- <a href=
- "#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
- corresponding to the just-after-last entry if no such
- <a href=
- "#value_type279018186"><tt>value_type</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link15" id="link15">Erase Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>bool</b>
- erase
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Erases the <a href=
- "#value_type279018186"><tt>value_type</tt></a> associated
- with <span class="c1"><tt>r_key</tt></span>. returns
- <tt><b>false</b></tt> iff <span class=
- "c1"><tt>r_key</tt></span> was not contained.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> Pred&gt;
-<a href="#size_type55424436"><tt>size_type</tt></a>
- erase_if
- (Pred prd)
-</pre>
- </td>
-
- <td>
- <p>Erases any <a href=
- "#value_type279018186"><tt>value_type</tt></a> satisfying
- the predicate <span class="c1"><tt>prd</tt></span> (this
- is transactional, either all matching <a href=
- "#value_type279018186"><tt>value_type</tt></a>s are
- erased, or, if an exception is thrown (for types whose
- erase can throw an exception) none); returns the number
- of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s
- erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- clear
- ()
-</pre>
- </td>
-
- <td>
- <p>Clears the container object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link16" id="link16">Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/container_cd.png b/libstdc++-v3/doc/html/ext/pb_ds/container_cd.png
deleted file mode 100644
index 52553278ca..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/container_cd.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/container_cd.svg b/libstdc++-v3/doc/html/ext/pb_ds/container_cd.svg
deleted file mode 100644
index 3b5a981896..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/container_cd.svg
+++ /dev/null
@@ -1,418 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="11in"
- height="8.5in"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.43"
- version="1.0"
- sodipodi:docbase="/mnt/share/src/policy_based_data_structures/current/pb_ds/doc"
- sodipodi:docname="container_cd.svg"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/current/pb_ds/doc/container_cd.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path3311"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Sstart"
- style="overflow:visible">
- <path
- id="path3319"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(0.3,0,0,0.3,-1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Sstart"
- style="overflow:visible">
- <path
- id="path3337"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Send"
- style="overflow:visible">
- <path
- id="path3316"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.3,0,0,-0.3,1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mend"
- style="overflow:visible">
- <path
- id="path3322"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.6,0,0,-0.6,3,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3346"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(-0.8,-0.8)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lstart"
- style="overflow:visible">
- <path
- id="path3331"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(1.1,0,0,1.1,-5.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3328"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2"
- inkscape:cx="396.81316"
- inkscape:cy="280"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1278"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
- gridtolerance="0.125in"
- guidetolerance="0.125in">
- <sodipodi:guide
- orientation="horizontal"
- position="629"
- id="guide1307" />
- <sodipodi:guide
- orientation="horizontal"
- position="449"
- id="guide1309" />
- <sodipodi:guide
- orientation="horizontal"
- position="269"
- id="guide1311" />
- <sodipodi:guide
- orientation="vertical"
- position="496"
- id="guide1313" />
- <sodipodi:guide
- orientation="vertical"
- position="361"
- id="guide1315" />
- <sodipodi:guide
- orientation="vertical"
- position="226"
- id="guide1317" />
- <sodipodi:guide
- orientation="vertical"
- position="631"
- id="guide1319" />
- <sodipodi:guide
- orientation="vertical"
- position="766"
- id="guide1321" />
- <sodipodi:guide
- orientation="vertical"
- position="91"
- id="guide1345" />
- <sodipodi:guide
- orientation="vertical"
- position="901"
- id="guide1347" />
- <sodipodi:guide
- orientation="horizontal"
- position="539"
- id="guide3390" />
- <sodipodi:guide
- orientation="horizontal"
- position="359"
- id="guide3392" />
- <sodipodi:guide
- orientation="vertical"
- position="280.5"
- id="guide3324" />
- <sodipodi:guide
- orientation="vertical"
- position="172"
- id="guide3326" />
- <sodipodi:guide
- orientation="vertical"
- position="388"
- id="guide3328" />
- <sodipodi:guide
- orientation="vertical"
- position="711.5"
- id="guide3340" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Benjamin Kosnik</dc:title>
- </cc:Agent>
- </dc:creator>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1425"
- width="141.64481"
- height="23.200001"
- x="209.57762"
- y="382.56177" />
- <rect
- y="382.56177"
- x="425.57761"
- height="23.200001"
- width="141.64481"
- id="rect3376"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3378"
- width="141.64481"
- height="23.200001"
- x="640.77765"
- y="382.56177" />
- <text
- sodipodi:linespacing="100%"
- id="use1329"
- y="397.09772"
- x="497.20001"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1703"
- x="497.20001"
- y="397.09772">list_update</tspan><tspan
- sodipodi:role="line"
- id="tspan1705"
- x="497.20001"
- y="406.69772" /></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="712.40002"
- y="397.09772"
- id="use1337"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1707"
- x="712.40002"
- y="397.09772">basic_hash_table</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="282"
- y="397.09772"
- id="text1339"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1701"
- x="282"
- y="397.09772">basic_tree</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3418"
- width="141.64481"
- height="23.200001"
- x="101.57762"
- y="472.5618" />
- <rect
- y="472.5618"
- x="317.57761"
- height="23.200001"
- width="141.64481"
- id="rect3420"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3422"
- width="141.64481"
- height="23.200001"
- x="533.57764"
- y="472.5618" />
- <rect
- y="472.5618"
- x="748.77765"
- height="23.200001"
- width="141.64481"
- id="rect3424"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="171.20001"
- y="486.29773"
- id="text3394"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1715"
- x="171.20001"
- y="486.29773">tree</tspan><tspan
- sodipodi:role="line"
- id="tspan1717"
- x="171.20001"
- y="495.89773" /></text>
- <text
- sodipodi:linespacing="100%"
- id="text3400"
- y="486.29773"
- x="386.39999"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1709"
- x="386.39999"
- y="486.29773">trie</tspan><tspan
- sodipodi:role="line"
- id="tspan1711"
- x="386.39999"
- y="495.89773" /></text>
- <text
- sodipodi:linespacing="100%"
- id="text3406"
- y="486.29773"
- x="601.20001"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1713"
- x="601.20001"
- y="486.29773">cc_hash_table</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="818"
- y="486.29773"
- id="text3412"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1719"
- x="818"
- y="486.29773">gp_hash_table</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3380"
- width="141.64481"
- height="23.200001"
- x="425.57764"
- y="292.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="497.20001"
- y="307.09772"
- id="text1323"
- sodipodi:linespacing="100%"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/pb_ds_images/container_diagram.png"><tspan
- sodipodi:role="line"
- id="tspan1369"
- x="497.20001"
- y="307.09772">container_base</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.97031623px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 170.97058,472.5 L 170.97058,451 L 387.51871,450 L 387.51871,472.5"
- id="path2244" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 280.5,450.53297 L 280.5,410.62445"
- id="path3332" />
- <path
- id="path3353"
- d="M 601.47058,472.5 L 601.47058,451 L 818.01871,450 L 818.01871,472.5"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.97031623px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3355"
- d="M 711,450.53297 L 711,410.62445"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3344"
- d="M 281.18218,383.28102 L 281.18218,361.78102 L 711.79281,360.78102 L 711.79281,383.28102"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.3682909px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3347"
- d="M 497.75146,383.49616 L 497.75146,322.77107"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
-</svg>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/container_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/container_tag.html
deleted file mode 100644
index de187a94da..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/container_tag.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/counter_lu_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/counter_lu_policy.html
deleted file mode 100644
index d9d5112c03..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/counter_lu_policy.html
+++ /dev/null
@@ -1,259 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/design.html b/libstdc++-v3/doc/html/ext/pb_ds/design.html
deleted file mode 100644
index e83bd4dd20..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/design.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/direct_mask_range_hashing.html b/libstdc++-v3/doc/html/ext/pb_ds/direct_mask_range_hashing.html
deleted file mode 100644
index 19f8621c22..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/direct_mask_range_hashing.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/direct_mod_range_hashing.html b/libstdc++-v3/doc/html/ext/pb_ds/direct_mod_range_hashing.html
deleted file mode 100644
index f3f9295d43..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/direct_mod_range_hashing.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/disclaimer.html b/libstdc++-v3/doc/html/ext/pb_ds/disclaimer.html
deleted file mode 100644
index 681af4edf7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/disclaimer.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/ds_gen.html b/libstdc++-v3/doc/html/ext/pb_ds/ds_gen.html
deleted file mode 100644
index ec99c4d5f7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/ds_gen.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Data-Structure Genericity</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Data-Structure Genericity</h1>
-
- <h2><a name="problem" id="problem">The Basic Problem</a></h2>
-
- <p>The design attempts to address the following problem. When
- writing a function manipulating a generic container object,
- what is the behavior of the object? <i>E.g.</i>, suppose one
- writes</p>
- <pre>
-<b>template</b>&lt;<b>typename</b> Cntnr&gt;
-<b>void</b>
-some_op_sequence(Cntnr &amp;r_container)
-{
- ...
-}
-</pre>then one needs to address the following questions in the body
-of <tt>some_op_sequence</tt>:
-
- <ol>
- <li>Which types and methods does <tt>Cntnr</tt> support?
- Containers based on hash tables can be queries for the
- hash-functor type and object; this is meaningless for
- tree-based containers. Containers based on trees can be
- split, joined, or can erase iterators and return the
- following iterator; this cannot be done by hash-based
- containers.</li>
-
- <li>What are the guarantees of <tt>Cntnr</tt>? A container
- based on a probing hash-table invalidates all iterators when
- it is modified; this is not the case for containers based on
- node-based trees. Containers based on a node-based tree can
- be split or joined without exceptions; this is not the case
- for containers based on vector-based trees.</li>
-
- <li>How does the container maintain its elements? Tree-based
- and Trie-based containers store elements by key order;
- others, typically, do not. A container based on a splay trees
- or lists with update policies "cache" "frequently accessed"
- elements; containers based on most other underlying
- data structures do not.</li>
- </ol>
-
- <p>The remainder of this section deals with these issues.</p>
-
- <h2><a name="ds_hierarchy" id="ds_hierarchy">Container
- Hierarchy</a></h2>
-
- <p>Figure <a href="#cd">Container class hierarchy</a> shows the
- container hierarchy.</p>
-
- <h6 class="c1"><a name="cd" id="cd"><img src="container_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Container class hierarchy.</h6>
-
- <ol>
- <li><a href=
- "container_base.html"><tt>container_base</tt></a> is an
- abstract base class for associative containers.</li>
-
- <li>Tree-Like-Based Associative-Containers:
-
- <ol>
- <li><a href=
- "basic_tree.html"><tt>basic_tree</tt></a>
- is an abstract base class for tree-like-based
- associative-containers</li>
-
- <li><a href=
- "tree.html"><tt>tree</tt></a>
- is a concrete base class for tree-based
- associative-containers</li>
-
- <li><a href=
- "trie.html"><tt>trie</tt></a>
- is a concrete base class trie-based
- associative-containers</li>
- </ol>
- </li>
-
- <li>Hash-Based Associative-Containers:
-
- <ol>
- <li><a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- is an abstract base class for hash-based
- associative-containers</li>
-
- <li><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>
- is a concrete collision-chaining hash-based
- associative-containers</li>
-
- <li><a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a>
- is a concrete (general) probing hash-based
- associative-containers</li>
- </ol>
- </li>
-
- <li>List-Based Associative-Containers:
-
- <ol>
- <li><a href=
- "list_update.html"><tt>list_update</tt></a> -
- list-based update-policy associative container</li>
- </ol>
- </li>
- </ol>
-
- <p>The hierarchy is composed naturally so that commonality is
- captured by base classes. Thus <tt><b>operator[]</b></tt> is
- defined <a href=
- "container_base.html"><tt>container_base</tt></a>, since
- all containers support it. Conversely <tt>split</tt> is defined
- in <a href=
- "basic_tree.html"><tt>basic_tree</tt></a>,
- since only tree-like containers support it. <a href=
- "#container_traits">Data-Structure Tags and Traits</a> discusses how
- to query which types and methods each container supports.</p>
-
- <h2><a name="container_traits" id="container_traits">Data-Structure Tags and
- Traits</a></h2>
-
- <p>Tags and traits are very useful for manipulating generic
- types. For example, if <tt>It</tt> is an iterator class, then
- <tt><b>typename</b> It::iterator_category</tt> or
- <tt><b>typename</b>
- std::iterator_traits&lt;It&gt;::iterator_category</tt> will
- yield its category, and <tt><b>typename</b>
- std::iterator_traits&lt;It&gt;::value_type</tt> will yield its
- value type.</p>
-
- <p><tt>pb_ds</tt> contains a tag hierarchy corresponding to the
- hierarchy in Figure <a href="#cd">Class hierarchy</a>. The tag
- hierarchy is shown in Figure <a href=
- "#tag_cd">Data-structure tag class hierarchy</a>.</p>
-
- <h6 class="c1"><a name="tag_cd" id="tag_cd"><img src=
- "assoc_container_tag_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Data-structure tag class hierarchy.</h6>
-
- <p><a href=
- "container_base.html"><tt>container_base</tt></a>
- publicly defines <tt>container_category</tt> as one of the classes in
- Figure <a href="#tag_cd">Data-structure tag class
- hierarchy</a>. Given any container <tt>Cntnr</tt>, the tag of
- the underlying data structure can be found via
- <tt><b>typename</b> Cntnr::container_category</tt>.</p>
-
- <p>Additionally, a traits mechanism can be used to query a
- container type for its attributes. Given any container
- <tt>Cntnr</tt>, then <tt><a href=
- "assoc_container_traits.html">__gnu_pbds::container_traits</a>&lt;Cntnr&gt;</tt>
- is a traits class identifying the properties of the
- container.</p>
-
- <p>To find if a container can throw when a key is erased (which
- is true for vector-based trees, for example), one can
- use</p><a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::erase_can_throw</tt>,
- for example.
-
- <p>Some of the definitions in <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> are
- dependent on other definitions. <i>E.g.</i>, if <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::order_preserving</tt>
- is <tt><b>true</b></tt> (which is the case for containers based
- on trees and tries), then the container can be split or joined;
- in this case, <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::split_join_can_throw</tt>
- indicates whether splits or joins can throw exceptions (which
- is true for vector-based trees); otherwise <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::split_join_can_throw</tt>
- will yield a compilation error. (This is somewhat similar to a
- compile-time version of the COM model [<a href=
- "references.html#mscom">mscom</a>]).</p>
-
- <h2><a name="find_range" id="find_range">Point-Type and
- Range-Type Methods and Iterators</a></h2>
-
- <h3><a name="it_unordered" id="it_unordered">Iterators in
- Unordered Container Types</a></h3>
-
- <p><tt>pb_ds</tt> differentiates between two types of methods
- and iterators: point-type methods and iterators, and range-type
- methods and iterators (see <a href=
- "motivation.html#assoc_diff_it">Motivation::Associative
- Containers::Differentiating between Iterator Types</a> and
- <a href="tutorial.html#assoc_find_range">Tutorial::Associative
- Containers::Point-Type and Range-Type Methods and
- Iterators</a>). Each associative container's interface includes
- the methods:</p>
- <pre>
-const_point_iterator
-find(const_key_reference r_key) const;
-
-point_iterator
-find(const_key_reference r_key);
-
-std::pair&lt;point_iterator,<b>bool</b>&gt;
-insert(const_reference r_val);
-</pre>
-
- <p>The relationship between these iterator types varies between
- container types. Figure <a href=
- "#point_iterators_cd">Point-type and range-type iterators</a>-A
- shows the most general invariant between point-type and
- range-type iterators: <tt>iterator</tt>, <i>e.g.</i>, can
- always be converted to <tt>point_iterator</tt>. Figure <a href=
- "#point_iterators_cd">Point-type and range-type iterators</a>-B
- shows invariants for order-preserving containers: point-type
- iterators are synonymous with range-type iterators.
- Orthogonally, Figure <a href="#point_iterators_cd">Point-type
- and range-type iterators</a>-C shows invariants for "set"
- containers: iterators are synonymous with const iterators.</p>
-
- <h6 class="c1"><a name="point_iterators_cd" id=
- "point_iterators_cd"><img src="point_iterators_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Point-type and range-type iterators.</h6>
-
- <p>Note that point-type iterators in self-organizing containers
- (<i>e.g.</i>, hash-based associative containers) lack movement
- operators, such as <tt><b>operator++</b></tt> - in fact, this
- is the reason why <tt>pb_ds</tt> differentiates from the STL's
- design on this point.</p>
-
- <p>Typically, one can determine an iterator's movement
- capabilities in the STL using
- <tt>std::iterator_traits&lt;It&gt;iterator_category</tt>, which
- is a <tt><b>struct</b></tt> indicating the iterator's movement
- capabilities. Unfortunately, none of the STL's predefined
- categories reflect a pointer's <u>not</u> having any movement
- capabilities whatsoever. Consequently, <tt>pb_ds</tt> adds a
- type <a href=
- "trivial_iterator_tag.html"><tt>trivial_iterator_tag</tt></a>
- (whose name is taken from a concept in [<a href=
- "references.html#sgi_stl">sgi_stl</a>]), which is the category
- of iterators with no movement capabilities. All other STL tags,
- such as <tt>forward_iterator_tag</tt> retain their common
- use.</p>
-
- <h3><a name="inv_guar" id="inv_guar">Invalidation
- Guarantees</a></h3>
-
- <p><a href=
- "motivation.html#assoc_inv_guar">Motivation::Associative
- Containers::Differentiating between Iterator
- Types::Invalidation Guarantees</a> posed a problem. Given three
- different types of associative containers, a modifying
- operation (in that example, <tt>erase</tt>) invalidated
- iterators in three different ways: the iterator of one
- container remained completely valid - it could be de-referenced
- and incremented; the iterator of a different container could
- not even be de-referenced; the iterator of the third container
- could be de-referenced, but its "next" iterator changed
- unpredictably.</p>
-
- <p>Distinguishing between find and range types allows
- fine-grained invalidation guarantees, because these questions
- correspond exactly to the question of whether point-type
- iterators and range-type iterators are valid. <a href=
- "#invalidation_guarantee_cd">Invalidation guarantees class
- hierarchy</a> shows tags corresponding to different types of
- invalidation guarantees.</p>
-
- <h6 class="c1"><a name="invalidation_guarantee_cd" id=
- "invalidation_guarantee_cd"><img src=
- "invalidation_guarantee_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Invalidation guarantees class hierarchy.</h6>
-
- <ol>
- <li><a href=
- "basic_invalidation_guarantee.html"><tt>basic_invalidation_guarantee</tt></a>
- corresponds to a basic guarantee that a point-type iterator,
- a found pointer, or a found reference, remains valid as long
- as the container object is not modified.</li>
-
- <li><a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>
- corresponds to a guarantee that a point-type iterator, a
- found pointer, or a found reference, remains valid even if
- the container object is modified.</li>
-
- <li><a href=
- "range_invalidation_guarantee.html"><tt>range_invalidation_guarantee</tt></a>
- corresponds to a guarantee that a range-type iterator remains
- valid even if the container object is modified.</li>
- </ol>
-
- <p>As shown in <a href=
- "tutorial.html#assoc_find_range">Tutorial::Associative
- Containers::Point-Type and Range-Type Methods and
- Iterators</a>, to find the invalidation guarantee of a
- container, one can use</p>
- <pre>
-<b>typename</b> <a href=
-"assoc_container_traits.html">container_traits</a>&lt;Cntnr&gt;::invalidation_guarantee
-</pre>
-
- <p>which is one of the classes in Figure <a href=
- "#invalidation_guarantee_cd">Invalidation guarantees class
- hierarchy</a>.</p>
-
- <p>Note that this hierarchy corresponds to the logic it
- represents: if a container has range-invalidation guarantees,
- then it must also have find invalidation guarantees;
- correspondingly, its invalidation guarantee (in this case
- <a href=
- "range_invalidation_guarantee.html"><tt>range_invalidation_guarantee</tt></a>)
- can be cast to its base class (in this case <a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>).
- This means that this this hierarchy can be used easily using
- standard metaprogramming techniques, by specializing on the
- type of <tt>invalidation_guarantee</tt>.</p>
-
- <p>(These types of problems were addressed, in a more general
- setting, in [<a href=
- "references.html#meyers96more">meyers96more</a>] - Item 2. In
- our opinion, an invalidation-guarantee hierarchy would solve
- these problems in all container types - not just associative
- containers.)</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/examples.html b/libstdc++-v3/doc/html/ext/pb_ds/examples.html
deleted file mode 100644
index 03c7a39100..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/examples.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/exceptions.html b/libstdc++-v3/doc/html/ext/pb_ds/exceptions.html
deleted file mode 100644
index a51e8ebe0b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/exceptions.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_gcc.png
deleted file mode 100644
index d86299b7e3..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.png
deleted file mode 100644
index 1b31b7f27c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_msvc.png
deleted file mode 100644
index b7082f2860..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_gcc.png
deleted file mode 100644
index b9fbe00def..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.png
deleted file mode 100644
index c693ed3869..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_msvc.png
deleted file mode 100644
index 248ff6b887..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_gcc.png
deleted file mode 100644
index ac4f838fe2..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_local.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_local.png
deleted file mode 100644
index 9fa08a0c2c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_msvc.png
deleted file mode 100644
index 5f1d740b81..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_table.html b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_table.html
deleted file mode 100644
index dd9d725d3b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_table.html
+++ /dev/null
@@ -1,891 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>gp_hash_table Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>gp_hash_table</tt> Interface</h1>
-
- <p>A concrete general-probing hash-based associative
- container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Hash_Fn1515835" id=
-"Hash_Fn1515835"><b>class</b> Hash_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor.</p>
- </td>
-
- <td>
- <pre>
-__gnu_cxx::hash&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>if using gcc;
- <pre>
-stdext::hash_value&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>if using Visual C++ .net
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Eq_Fn60085" id="Eq_Fn60085"><b>class</b> Eq_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor.</p>
- </td>
-
- <td>
- <pre>
-std::equal_to&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Comb_Probe_Fn1603930855" id=
-"Comb_Probe_Fn1603930855"><b>class</b> Comb_Probe_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Combining probe functor.</p>
-
- <p>If <a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a> is
- <a href="null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, and <a href=
- "#Probe_Fn8454835"><tt>Probe_Fn</tt></a> is <a href=
- "null_probe_fn.html"><span class=
- "c2"><tt>null_probe_fn</tt></span></a>, then this is the
- ranged-probe functor; otherwise, this is the
- range-hashing functor.</p>
-
- <p>(See <a href=
- "hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a>.)</p>
- </td>
-
- <td><a href="direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Probe_Fn8454835" id=
-"Probe_Fn8454835"><b>class</b> Probe_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Probe functor.</p>
- </td>
-
- <td>
- If <tt><a href=
- "#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a></tt>
- is <a href="direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a>, then
- <pre>
-<a href="linear_probe_fn.html"><span class=
-"c2"><tt>linear_probe_fn</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;
-</pre>otherwise,
- <pre>
-<a href="quadratic_probe_fn.html"><span class=
-"c2"><tt>quadratic_probe_fn</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Resize_Policy566860465" id=
-"Resize_Policy566860465"><b>class</b> Resize_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy.</p>
- </td>
-
- <td>
- If <tt><a href=
- "#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a></tt>
- is <tt><a href=
- "direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a></tt>,
- then
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a>&lt;
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;
-</pre>otherwise,
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a>&lt;
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a>&lt;
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Store_Hash218262104" id=
-"Store_Hash218262104"><b>bool</b> Store_Hash </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether the hash value will be stored along
- with each key.</p>
-
- <p>If <tt><a href=
- "#hash_fn2015995"><tt>hash_fn</tt></a></tt> is <a href=
- "null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, then the container
- will not compile if this value is
- <tt><b>true</b></tt></p>
- </td>
-
- <td>
- <pre>
-<tt><b>false</b></tt>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator&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="basic_hash_table.html"><span class=
-"c2"><tt>basic_hash_table</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="hash_fn2015995" id="hash_fn2015995">hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="eq_fn80245" id="eq_fn80245">eq_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Eq_Fn60085"><tt>Eq_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="comb_probe_fn828996423" id=
-"comb_probe_fn828996423">comb_probe_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Combining probe functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="probe_fn10954995" id="probe_fn10954995">probe_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Probe_Fn8454835"><tt>Probe_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Probe functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="resize_policy4084493169" id=
-"resize_policy4084493169">resize_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;r_comb_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &amp;r_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &amp;r_probe_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &amp;r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- gp_hash_table
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;r_comb_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &amp;r_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &amp;r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &amp;r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &amp;r_probe_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &amp;r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <span class=
-"c2"><tt>gp_hash_table</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~gp_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>gp_hash_table</tt></span> &amp;
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>gp_hash_table</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>gp_hash_table</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;
- get_comb_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &amp;
- get_comb_probe_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#probe_fn10954995"><tt>probe_fn</tt></a> &amp;
- get_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#probe_fn10954995"><tt>probe_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &amp;
- get_probe_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#probe_fn10954995"><tt>probe_fn</tt></a> object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_tag.html
deleted file mode 100644
index 4c5f06b579..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_based_containers.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_based_containers.html
deleted file mode 100644
index 21d092a76e..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_based_containers.html
+++ /dev/null
@@ -1,835 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Hash-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Hash Table Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The collision-chaining hash-based container has the
- following declaration.</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash_Fn = std::hash&lt;Key&gt;,
- <b>typename</b> Eq_Fn = std::equal_to&lt;Key&gt;,
- <b>typename</b> Comb_Hash_Fn = <a href=
-"direct_mask_range_hashing.html">direct_mask_range_hashing</a>&lt;&gt;
- <b>typename</b> Resize_Policy = <i>default explained below.</i>
- <b>bool</b> Store_Hash = <b>false</b>,
- <b>typename</b> Allocator = std::allocator&lt;<b>char</b>&gt; &gt;
-<b>class</b> <a href=
-"cc_hash_table.html">cc_hash_table</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy, and is explained in
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>.</li>
-
- <li><tt>Hash_Fn</tt> is a key hashing functor.</li>
-
- <li><tt>Eq_Fn</tt> is a key equivalence functor.</li>
-
- <li><tt>Comb_Hash_Fn</tt> is a <i>range-hashing_functor</i>;
- it describes how to translate hash values into positions
- within the table. This is described in <a href=
- "#hash_policies">Hash Policies</a>.</li>
-
- <li><tt>Resize_Policy</tt> describes how a container object
- should change its internal size. This is described in
- <a href="#resize_policies">Resize Policies</a>.</li>
-
- <li><tt>Store_Hash</tt> indicates whether the hash value
- should be stored with each entry. This is described in
- <a href="#policy_interaction">Policy Interaction</a>.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The probing hash-based container has the following
- declaration.</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash_Fn = std::hash&lt;Key&gt;,
- <b>typename</b> Eq_Fn = std::equal_to&lt;Key&gt;,
- <b>typename</b> Comb_Probe_Fn = <a href=
-"direct_mask_range_hashing.html">direct_mask_range_hashing</a>&lt;&gt;
- <b>typename</b> Probe_Fn = <i>default explained below.</i>
- <b>typename</b> Resize_Policy = <i>default explained below.</i>
- <b>bool</b> Store_Hash = <b>false</b>,
- <b>typename</b> Allocator = std::allocator&lt;<b>char</b>&gt; &gt;
-<b>class</b> <a href=
-"gp_hash_table.html">gp_hash_table</a>;
-</pre>
-
- <p>The parameters are identical to those of the
- collision-chaining container, except for the following.</p>
-
- <ol>
- <li><tt>Comb_Probe_Fn</tt> describes how to transform a probe
- sequence into a sequence of positions within the table.</li>
-
- <li><tt>Probe_Fn</tt> describes a probe sequence policy.</li>
- </ol>
-
- <p>Some of the default template values depend on the values of
- other parameters, and are explained in <a href=
- "#policy_interaction">Policy Interaction</a>.</p>
-
- <h2><a name="hash_policies" id="hash_policies">Hash
- Policies</a></h2>
-
- <h3><a name="general_terms" id="general_terms">General
- Terms</a></h3>
-
- <p>Following is an explanation of some functions which hashing
- involves. Figure <a href=
- "#hash_ranged_hash_range_hashing_fns">Hash functions,
- ranged-hash functions, and range-hashing functions</a>)
- illustrates the discussion.</p>
-
- <h6 class="c1"><a name="hash_ranged_hash_range_hashing_fns" id=
- "hash_ranged_hash_range_hashing_fns"><img src=
- "hash_ranged_hash_range_hashing_fns.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Hash functions, ranged-hash functions, and
- range-hashing functions.</h6>
-
- <p>Let <i>U</i> be a domain (<i>e.g.</i>, the integers, or the
- strings of 3 characters). A hash-table algorithm needs to map
- elements of <i>U</i> "uniformly" into the range <i>[0,..., m -
- 1]</i> (where <i>m</i> is a non-negative integral value, and
- is, in general, time varying). <i>I.e.</i>, the algorithm needs
- a <i>ranged-hash</i> function</p>
-
- <p><i>f : U &times; Z<sub>+</sub> &rarr; Z<sub>+</sub></i>
- ,</p>
-
- <p>such that for any <i>u</i> in <i>U</i> ,</p>
-
- <p><i>0 &le; f(u, m) &le; m - 1</i> ,</p>
-
- <p>and which has "good uniformity" properties [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>]. One
- common solution is to use the composition of the hash
- function</p>
-
- <p><i>h : U &rarr; Z<sub>+</sub></i> ,</p>
-
- <p>which maps elements of <i>U</i> into the non-negative
- integrals, and</p>
-
- <p class="c2">g : Z<sub>+</sub> &times; Z<sub>+</sub> &rarr;
- Z<sub>+</sub>,</p>
-
- <p>which maps a non-negative hash value, and a non-negative
- range upper-bound into a non-negative integral in the range
- between 0 (inclusive) and the range upper bound (exclusive),
- <i>i.e.</i>, for any <i>r</i> in <i>Z<sub>+</sub></i>,</p>
-
- <p><i>0 &le; g(r, m) &le; m - 1</i> .</p>
-
- <p>The resulting ranged-hash function, is</p>
-
- <p><i><a name="ranged_hash_composed_of_hash_and_range_hashing"
- id="ranged_hash_composed_of_hash_and_range_hashing">f(u , m) =
- g(h(u), m)</a></i> (1) .</p>
-
- <p>From the above, it is obvious that given <i>g</i> and
- <i>h</i>, <i>f</i> can always be composed (however the converse
- is not true). The STL's hash-based containers allow specifying
- a hash function, and use a hard-wired range-hashing function;
- the ranged-hash function is implicitly composed.</p>
-
- <p>The above describes the case where a key is to be mapped
- into a <i>single position</i> within a hash table, <i>e.g.</i>,
- in a collision-chaining table. In other cases, a key is to be
- mapped into a <i>sequence of positions</i> within a table,
- <i>e.g.</i>, in a probing table. Similar terms apply in this
- case: the table requires a <i>ranged probe</i> function,
- mapping a key into a sequence of positions withing the table.
- This is typically achieved by composing a <i>hash function</i>
- mapping the key into a non-negative integral type, a
- <i>probe</i> function transforming the hash value into a
- sequence of hash values, and a <i>range-hashing</i> function
- transforming the sequence of hash values into a sequence of
- positions.</p>
-
- <h3><a name="range_hashing_fns" id=
- "range_hashing_fns">Range-Hashing Functions</a></h3>
-
- <p>Some common choices for range-hashing functions are the
- division, multiplication, and middle-square methods [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>], defined
- as</p>
-
- <p><i><a name="division_method" id="division_method">g(r, m) =
- r mod m</a></i> (2) ,</p>
-
- <p><i>g(r, m) = &lceil; u/v ( a r mod v ) &rceil;</i> ,</p>
-
- <p>and</p>
-
- <p><i>g(r, m) = &lceil; u/v ( r<sup>2</sup> mod v ) &rceil;</i>
- ,</p>
-
- <p>respectively, for some positive integrals <i>u</i> and
- <i>v</i> (typically powers of 2), and some <i>a</i>. Each of
- these range-hashing functions works best for some different
- setting.</p>
-
- <p>The division method <a href="#division_method">(2)</a> is a
- very common choice. However, even this single method can be
- implemented in two very different ways. It is possible to
- implement <a href="#division_method">(2)</a> using the low
- level <i>%</i> (modulo) operation (for any <i>m</i>), or the
- low level <i>&amp;</i> (bit-mask) operation (for the case where
- <i>m</i> is a power of 2), <i>i.e.</i>,</p>
-
- <p><i><a name="division_method_prime_mod" id=
- "division_method_prime_mod">g(r, m) = r % m</a></i> (3) ,</p>
-
- <p>and</p>
-
- <p><i><a name="division_method_bit_mask" id=
- "division_method_bit_mask">g(r, m) = r &amp; m - 1, (m =
- 2<sup>k</sup>)</a></i> for some <i>k)</i> (4),</p>
-
- <p>respectively.</p>
-
- <p>The <i>%</i> (modulo) implementation <a href=
- "#division_method_prime_mod">(3)</a> has the advantage that for
- <i>m</i> a prime far from a power of 2, <i>g(r, m)</i> is
- affected by all the bits of <i>r</i> (minimizing the chance of
- collision). It has the disadvantage of using the costly modulo
- operation. This method is hard-wired into SGI's implementation
- [<a href="references.html#sgi_stl">sgi_stl</a>].</p>
-
- <p>The <i>&amp;</i> (bit-mask) implementation <a href=
- "#division_method_bit_mask">(4)</a> has the advantage of
- relying on the fast bit-wise and operation. It has the
- disadvantage that for <i>g(r, m)</i> is affected only by the
- low order bits of <i>r</i>. This method is hard-wired into
- Dinkumware's implementation [<a href=
- "references.html#dinkumware_stl">dinkumware_stl</a>].</p>
-
- <h3><a name="hash_policies_ranged_hash_policies" id=
- "hash_policies_ranged_hash_policies">Ranged-Hash
- Functions</a></h3>
-
- <p>In cases it is beneficial to allow the
- client to directly specify a ranged-hash hash function. It is
- true, that the writer of the ranged-hash function cannot rely
- on the values of <i>m</i> having specific numerical properties
- suitable for hashing (in the sense used in [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>]), since
- the values of <i>m</i> are determined by a resize policy with
- possibly orthogonal considerations.</p>
-
- <p>There are two cases where a ranged-hash function can be
- superior. The firs is when using perfect hashing [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>]; the
- second is when the values of <i>m</i> can be used to estimate
- the "general" number of distinct values required. This is
- described in the following.</p>
-
- <p>Let</p>
-
- <p class="c2">s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]</p>
-
- <p>be a string of <i>t</i> characters, each of which is from
- domain <i>S</i>. Consider the following ranged-hash
- function:</p>
-
- <p><a name="total_string_dna_hash" id=
- "total_string_dna_hash"><i>f<sub>1</sub>(s, m) = &sum; <sub>i =
- 0</sub><sup>t - 1</sup> s<sub>i</sub> a<sup>i</sup></i> mod
- <i>m</i></a> (5) ,</p>
-
- <p>where <i>a</i> is some non-negative integral value. This is
- the standard string-hashing function used in SGI's
- implementation (with <i>a = 5</i>) [<a href=
- "references.html#sgi_stl">sgi_stl</a>]. Its advantage is that
- it takes into account all of the characters of the string.</p>
-
- <p>Now assume that <i>s</i> is the string representation of a
- of a long DNA sequence (and so <i>S = {'A', 'C', 'G',
- 'T'}</i>). In this case, scanning the entire string might be
- prohibitively expensive. A possible alternative might be to use
- only the first <i>k</i> characters of the string, where</p>
-
- <p>|S|<sup>k</sup> &ge; m ,</p>
-
- <p><i>i.e.</i>, using the hash function</p>
-
- <p><a name="only_k_string_dna_hash" id=
- "only_k_string_dna_hash"><i>f<sub>2</sub>(s, m) = &sum; <sub>i
- = 0</sub><sup>k - 1</sup> s<sub>i</sub> a<sup>i</sup></i> mod
- <i>m</i></a> , (6)</p>
-
- <p>requiring scanning over only</p>
-
- <p><i>k =</i> log<i><sub>4</sub>( m )</i></p>
-
- <p>characters.</p>
-
- <p>Other more elaborate hash-functions might scan <i>k</i>
- characters starting at a random position (determined at each
- resize), or scanning <i>k</i> random positions (determined at
- each resize), <i>i.e.</i>, using</p>
-
- <p><i>f<sub>3</sub>(s, m) = &sum; <sub>i =
- r</sub>0</i><sup>r<sub>0</sub> + k - 1</sup> s<sub>i</sub>
- a<sup>i</sup> mod <i>m</i> ,</p>
-
- <p>or</p>
-
- <p><i>f<sub>4</sub>(s, m) = &sum; <sub>i = 0</sub><sup>k -
- 1</sup> s<sub>r</sub>i</i> a<sup>r<sub>i</sub></sup> mod
- <i>m</i> ,</p>
-
- <p>respectively, for <i>r<sub>0</sub>,..., r<sub>k-1</sub></i>
- each in the (inclusive) range <i>[0,...,t-1]</i>.</p>
-
- <p>It should be noted that the above functions cannot be
- decomposed as <a href=
- "#ranged_hash_composed_of_hash_and_range_hashing">(1)</a> .</p>
-
- <h3><a name="pb_ds_imp" id="pb_ds_imp">Implementation</a></h3>
-
- <p>This sub-subsection describes the implementation of the
- above in <tt>pb_ds</tt>. It first explains range-hashing
- functions in collision-chaining tables, then ranged-hash
- functions in collision-chaining tables, then probing-based
- tables, and, finally, lists the relevant classes in
- <tt>pb_ds</tt>.</p>
-
- <h4>Range-Hashing and Ranged-Hashes in Collision-Chaining
- Tables</h4>
-
- <p><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> is
- parametrized by <tt>Hash_Fn</tt> and <tt>Comb_Hash_Fn</tt>, a
- hash functor and a combining hash functor, respectively.</p>
-
- <p>In general, <tt>Comb_Hash_Fn</tt> is considered a
- range-hashing functor. <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>
- synthesizes a ranged-hash function from <tt>Hash_Fn</tt> and
- <tt>Comb_Hash_Fn</tt> (see <a href=
- "#ranged_hash_composed_of_hash_and_range_hashing">(1)</a>
- above). Figure <a href="#hash_range_hashing_seq_diagram">Insert
- hash sequence diagram</a> shows an <tt>insert</tt> sequence
- diagram for this case. The user inserts an element (point A),
- the container transforms the key into a non-negative integral
- using the hash functor (points B and C), and transforms the
- result into a position using the combining functor (points D
- and E).</p>
-
- <h6 class="c1"><a name="hash_range_hashing_seq_diagram" id=
- "hash_range_hashing_seq_diagram"><img src=
- "hash_range_hashing_seq_diagram.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Insert hash sequence diagram.</h6>
-
- <p>If <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>'s
- hash-functor, <tt>Hash_Fn</tt> is instantiated by <a href=
- "null_hash_fn.html"><tt>null_hash_fn</tt></a> (see <a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a>), then <tt>Comb_Hash_Fn</tt> is taken to be
- a ranged-hash function. Figure <a href=
- "#hash_range_hashing_seq_diagram2">Insert hash sequence diagram
- with a null hash policy</a> shows an <tt>insert</tt> sequence
- diagram. The user inserts an element (point A), the container
- transforms the key into a position using the combining functor
- (points B and C).</p>
-
- <h6 class="c1"><a name="hash_range_hashing_seq_diagram2" id=
- "hash_range_hashing_seq_diagram2"><img src=
- "hash_range_hashing_seq_diagram2.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Insert hash sequence diagram with a null hash
- policy.</h6>
-
- <h4>Probing Tables</h4>
-
- <p><a href=
- "gp_hash_table.html"></a><tt>gp_hash_table</tt> is
- parametrized by <tt>Hash_Fn</tt>, <tt>Probe_Fn</tt>, and
- <tt>Comb_Probe_Fn</tt>. As before, if <tt>Hash_Fn</tt> and
- <tt>Probe_Fn</tt> are, respectively, <a href=
- "null_hash_fn.html"><tt>null_hash_fn</tt></a> and <a href=
- "null_probe_fn.html"><tt>null_probe_fn</tt></a>, then
- <tt>Comb_Probe_Fn</tt> is a ranged-probe functor. Otherwise,
- <tt>Hash_Fn</tt> is a hash functor, <tt>Probe_Fn</tt> is a
- functor for offsets from a hash value, and
- <tt>Comb_Probe_Fn</tt> transforms a probe sequence into a
- sequence of positions within the table.</p>
-
- <h4>Pre-Defined Policies</h4>
-
- <p><tt>pb_ds</tt> contains some pre-defined classes
- implementing range-hashing and probing functions:</p>
-
- <ol>
- <li><a href=
- "direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
- and <a href=
- "direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
- are range-hashing functions based on a bit-mask and a modulo
- operation, respectively.</li>
-
- <li><a href=
- "linear_probe_fn.html"><tt>linear_probe_fn</tt></a>, and
- <a href=
- "quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a> are
- a linear probe and a quadratic probe function,
- respectively.</li>
- </ol>Figure <a href="#hash_policy_cd">Hash policy class
- diagram</a> shows a class diagram.
-
- <h6 class="c1"><a name="hash_policy_cd" id=
- "hash_policy_cd"><img src="hash_policy_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Hash policy class diagram.</h6>
-
- <h2><a name="resize_policies" id="resize_policies">Resize
- Policies</a></h2>
-
- <h3><a name="general" id="general">General Terms</a></h3>
-
- <p>Hash-tables, as opposed to trees, do not naturally grow or
- shrink. It is necessary to specify policies to determine how
- and when a hash table should change its size. Usually, resize
- policies can be decomposed into orthogonal policies:</p>
-
- <ol>
- <li>A <i>size policy</i> indicating <i>how</i> a hash table
- should grow (<i>e.g.,</i> it should multiply by powers of
- 2).</li>
-
- <li>A <i>trigger policy</i> indicating <i>when</i> a hash
- table should grow (<i>e.g.,</i> a load factor is
- exceeded).</li>
- </ol>
-
- <h3><a name="size_policies" id="size_policies">Size
- Policies</a></h3>
-
- <p>Size policies determine how a hash table changes size. These
- policies are simple, and there are relatively few sensible
- options. An exponential-size policy (with the initial size and
- growth factors both powers of 2) works well with a mask-based
- range-hashing function (see <a href=
- "#hash_policies">Range-Hashing Policies</a>), and is the
- hard-wired policy used by Dinkumware [<a href=
- "references.html#dinkumware_stl">dinkumware_stl</a>]. A
- prime-list based policy works well with a modulo-prime range
- hashing function (see <a href="#hash_policies">Range-Hashing
- Policies</a>), and is the hard-wired policy used by SGI's
- implementation [<a href=
- "references.html#sgi_stl">sgi_stl</a>].</p>
-
- <h3><a name="trigger_policies" id="trigger_policies">Trigger
- Policies</a></h3>
-
- <p>Trigger policies determine when a hash table changes size.
- Following is a description of two policies: <i>load-check</i>
- policies, and collision-check policies.</p>
-
- <p>Load-check policies are straightforward. The user specifies
- two factors, <i>&alpha;<sub>min</sub></i> and
- <i>&alpha;<sub>max</sub></i>, and the hash table maintains the
- invariant that</p>
-
- <p><i><a name="load_factor_min_max" id=
- "load_factor_min_max">&alpha;<sub>min</sub> &le; (number of
- stored elements) / (hash-table size) &le;
- &alpha;<sub>max</sub></a></i> (1) .</p>
-
- <p>Collision-check policies work in the opposite direction of
- load-check policies. They focus on keeping the number of
- collisions moderate and hoping that the size of the table will
- not grow very large, instead of keeping a moderate load-factor
- and hoping that the number of collisions will be small. A
- maximal collision-check policy resizes when the longest
- probe-sequence grows too large.</p>
-
- <p>Consider Figure <a href="#balls_and_bins">Balls and
- bins</a>. Let the size of the hash table be denoted by
- <i>m</i>, the length of a probe sequence be denoted by
- <i>k</i>, and some load factor be denoted by &alpha;. We would
- like to calculate the minimal length of <i>k</i>, such that if
- there were <i>&alpha; m</i> elements in the hash table, a probe
- sequence of length <i>k</i> would be found with probability at
- most <i>1/m</i>.</p>
-
- <h6 class="c1"><a name="balls_and_bins" id=
- "balls_and_bins"><img src="balls_and_bins.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Balls and bins.</h6>
-
- <p>Denote the probability that a probe sequence of length
- <i>k</i> appears in bin <i>i</i> by <i>p<sub>i</sub></i>, the
- length of the probe sequence of bin <i>i</i> by
- <i>l<sub>i</sub></i>, and assume uniform distribution. Then</p>
-
- <p><a name="prob_of_p1" id=
- "prob_of_p1"><i>p<sub>1</sub></i></a> = (3)</p>
-
- <p class="c2"><b>P</b>(l<sub>1</sub> &ge; k) =</p>
-
- <p><i><b>P</b>(l<sub>1</sub> &ge; &alpha; ( 1 + k / &alpha; - 1
- ) &le;</i> (a)</p>
-
- <p><i>e ^ ( - ( &alpha; ( k / &alpha; - 1 )<sup>2</sup> ) /2
- )</i> ,</p>
-
- <p>where (a) follows from the Chernoff bound [<a href=
- "references.html#motwani95random">motwani95random</a>]. To
- calculate the probability that <i>some</i> bin contains a probe
- sequence greater than <i>k</i>, we note that the
- <i>l<sub>i</sub></i> are negatively-dependent [<a href=
- "references.html#dubhashi98neg">dubhashi98neg</a>]. Let
- <i><b>I</b>(.)</i> denote the indicator function. Then</p>
-
- <p><a name="at_least_k_i_n_some_bin" id=
- "at_least_k_i_n_some_bin"><i><b>P</b>( exists<sub>i</sub>
- l<sub>i</sub> &ge; k ) =</i> (3)</a></p>
-
- <p class="c2"><b>P</b> ( &sum; <sub>i = 1</sub><sup>m</sup>
- <b>I</b>(l<sub>i</sub> &ge; k) &ge; 1 ) =</p>
-
- <p><i><b>P</b> ( &sum; <sub>i = 1</sub><sup>m</sup> <b>I</b> (
- l<sub>i</sub> &ge; k ) &ge; m p<sub>1</sub> ( 1 + 1 / (m
- p<sub>1</sub>) - 1 ) ) &le;</i> (a)</p>
-
- <p class="c2">e ^ ( ( - m p<sub>1</sub> ( 1 / (m p<sub>1</sub>)
- - 1 ) <sup>2</sup> ) / 2 ) ,</p>
-
- <p>where (a) follows from the fact that the Chernoff bound can
- be applied to negatively-dependent variables [<a href=
- "references.html#dubhashi98neg">dubhashi98neg</a>]. Inserting
- <a href="#prob_of_p1">(2)</a> into <a href=
- "#at_least_k_i_n_some_bin">(3)</a>, and equating with
- <i>1/m</i>, we obtain</p>
-
- <p><i>k ~ &radic; ( 2 &alpha;</i> ln <i>2 m</i> ln<i>(m) )
- )</i> .</p>
-
- <h3><a name="imp_pb_ds" id="imp_pb_ds">Implementation</a></h3>
-
- <p>This sub-subsection describes the implementation of the
- above in <tt>pb_ds</tt>. It first describes resize policies and
- their decomposition into trigger and size policies, then
- describes pre-defined classes, and finally discusses controlled
- access the policies' internals.</p>
-
- <h4>Resize Policies and Their Decomposition</h4>
-
- <p>Each hash-based container is parametrized by a
- <tt>Resize_Policy</tt> parameter; the container derives
- <tt><b>public</b></tt>ly from <tt>Resize_Policy</tt>. For
- example:</p>
- <pre>
-<a href="cc_hash_table.html">cc_hash_table</a>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- ...
- <b>typename</b> Resize_Policy
- ...&gt; :
- <b>public</b> Resize_Policy
-</pre>
-
- <p>As a container object is modified, it continuously notifies
- its <tt>Resize_Policy</tt> base of internal changes
- (<i>e.g.</i>, collisions encountered and elements being
- inserted). It queries its <tt>Resize_Policy</tt> base whether
- it needs to be resized, and if so, to what size.</p>
-
- <p>Figure <a href="#insert_resize_sequence_diagram1">Insert
- resize sequence diagram</a> shows a (possible) sequence diagram
- of an insert operation. The user inserts an element; the hash
- table notifies its resize policy that a search has started
- (point A); in this case, a single collision is encountered -
- the table notifies its resize policy of this (point B); the
- container finally notifies its resize policy that the search
- has ended (point C); it then queries its resize policy whether
- a resize is needed, and if so, what is the new size (points D
- to G); following the resize, it notifies the policy that a
- resize has completed (point H); finally, the element is
- inserted, and the policy notified (point I).</p>
-
- <h6 class="c1"><a name="insert_resize_sequence_diagram1" id=
- "insert_resize_sequence_diagram1"><img src=
- "insert_resize_sequence_diagram1.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Insert resize sequence diagram.</h6>
-
- <p>In practice, a resize policy can be usually orthogonally
- decomposed to a size policy and a trigger policy. Consequently,
- the library contains a single class for instantiating a resize
- policy: <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- is parametrized by <tt>Size_Policy</tt> and
- <tt>Trigger_Policy</tt>, derives <tt><b>public</b></tt>ly from
- both, and acts as a standard delegate [<a href=
- "references.html#gamma95designpatterns">gamma95designpatterns</a>]
- to these policies.</p>
-
- <p>Figures <a href="#insert_resize_sequence_diagram2">Standard
- resize policy trigger sequence diagram</a> and <a href=
- "#insert_resize_sequence_diagram3">Standard resize policy size
- sequence diagram</a> show sequence diagrams illustrating the
- interaction between the standard resize policy and its trigger
- and size policies, respectively.</p>
-
- <h6 class="c1"><a name="insert_resize_sequence_diagram2" id=
- "insert_resize_sequence_diagram2"><img src=
- "insert_resize_sequence_diagram2.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Standard resize policy trigger sequence
- diagram.</h6>
-
- <h6 class="c1"><a name="insert_resize_sequence_diagram3" id=
- "insert_resize_sequence_diagram3"><img src=
- "insert_resize_sequence_diagram3.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Standard resize policy size sequence
- diagram.</h6>
-
- <h4>Pre-Defined Policies</h4>
-
- <p>The library includes the following
- instantiations of size and trigger policies:</p>
-
- <ol>
- <li><a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- implements a load check trigger policy.</li>
-
- <li><a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>
- implements a collision check trigger policy.</li>
-
- <li><a href=
- "hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
- implements an exponential-size policy (which should be used
- with mask range hashing).</li>
-
- <li><a href=
- "hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
- implementing a size policy based on a sequence of primes
- [<a href="references.html#sgi_stl">sgi_stl</a>] (which should
- be used with mod range hashing</li>
- </ol>
-
- <p>Figure <a href="#resize_policy_cd">Resize policy class
- diagram</a> gives an overall picture of the resize-related
- classes. <a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- is parametrized by <tt>Resize_Policy</tt>, which it subclasses
- publicly. This class is currently instantiated only by <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>.
- <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- itself is parametrized by <tt>Trigger_Policy</tt> and
- <tt>Size_Policy</tt>. Currently, <tt>Trigger_Policy</tt> is
- instantiated by <a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>,
- or <a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>;
- <tt>Size_Policy</tt> is instantiated by <a href=
- "hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>,
- or <a href=
- "hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>.</p>
-
- <h6 class="c1"><a name="resize_policy_cd" id=
- "resize_policy_cd"><img src="resize_policy_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Resize policy class diagram.</h6>
-
- <h4>Controlled Access to Policies' Internals</h4>
-
- <p>There are cases where (controlled) access to resize
- policies' internals is beneficial. <i>E.g.</i>, it is sometimes
- useful to query a hash-table for the table's actual size (as
- opposed to its <tt>size()</tt> - the number of values it
- currently holds); it is sometimes useful to set a table's
- initial size, externally resize it, or change load factors.</p>
-
- <p>Clearly, supporting such methods both decreases the
- encapsulation of hash-based containers, and increases the
- diversity between different associative-containers' interfaces.
- Conversely, omitting such methods can decrease containers'
- flexibility.</p>
-
- <p>In order to avoid, to the extent possible, the above
- conflict, the hash-based containers themselves do not address
- any of these questions; this is deferred to the resize policies,
- which are easier to change or replace. Thus, for example,
- neither <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> nor
- <a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a>
- contain methods for querying the actual size of the table; this
- is deferred to <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>.</p>
-
- <p>Furthermore, the policies themselves are parametrized by
- template arguments that determine the methods they support
- ([<a href=
- "references.html#alexandrescu01modern">alexandrescu01modern</a>]
- shows techniques for doing so). <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- is parametrized by <tt>External_Size_Access</tt> that
- determines whether it supports methods for querying the actual
- size of the table or resizing it. <a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- is parametrized by <tt>External_Load_Access</tt> that
- determines whether it supports methods for querying or
- modifying the loads. <a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>
- is parametrized by <tt>External_Load_Access</tt> that
- determines whether it supports methods for querying the
- load.</p>
-
- <p>Some operations, for example, resizing a container at
- run time, or changing the load factors of a load-check trigger
- policy, require the container itself to resize. As mentioned
- above, the hash-based containers themselves do not contain
- these types of methods, only their resize policies.
- Consequently, there must be some mechanism for a resize policy
- to manipulate the hash-based container. As the hash-based
- container is a subclass of the resize policy, this is done
- through virtual methods. Each hash-based container has a
- <tt><b>private</b></tt> <tt><b>virtual</b></tt> method:</p>
- <pre>
-<b>virtual void</b>
- do_resize
- (size_type new_size);
-</pre>
-
- <p>which resizes the container. Implementations of
- <tt>Resize_Policy</tt> can export public methods for resizing
- the container externally; these methods internally call
- <tt>do_resize</tt> to resize the table.</p>
-
- <h2><a name="policy_interaction" id="policy_interaction">Policy
- Interaction</a></h2>
-
- <p>Hash-tables are unfortunately especially susceptible to
- choice of policies. One of the more complicated aspects of this
- is that poor combinations of good policies can form a poor
- container. Following are some considerations.</p>
-
- <h3><a name="policy_interaction_probe_size_trigger" id=
- "policy_interaction_probe_size_trigger">Probe Policies, Size
- Policies, and Trigger Policies</a></h3>
-
- <p>Some combinations do not work well for probing containers.
- For example, combining a quadratic probe policy with an
- exponential size policy can yield a poor container: when an
- element is inserted, a trigger policy might decide that there
- is no need to resize, as the table still contains unused
- entries; the probe sequence, however, might never reach any of
- the unused entries.</p>
-
- <p>Unfortunately, <tt>pb_ds</tt> cannot detect such problems at
- compilation (they are halting reducible). It therefore defines
- an exception class <a href=
- "insert_error.html"><tt>insert_error</tt></a> to throw an
- exception in this case.</p>
-
- <h3><a name="policy_interaction_hash_trigger" id=
- "policy_interaction_hash_trigger">Hash Policies and Trigger
- Policies</a></h3>
-
- <p>Some trigger policies are especially susceptible to poor
- hash functions. Suppose, as an extreme case, that the hash
- function transforms each key to the same hash value. After some
- inserts, a collision detecting policy will always indicate that
- the container needs to grow.</p>
-
- <p>The library, therefore, by design, limits each operation to
- one resize. For each <tt>insert</tt>, for example, it queries
- only once whether a resize is needed.</p>
-
- <h3><a name="policy_interaction_eq_sth_hash" id=
- "policy_interaction_eq_sth_hash">Equivalence Functors, Storing
- Hash Values, and Hash Functions</a></h3>
-
- <p><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> and
- <a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a> are
- parametrized by an equivalence functor and by a
- <tt>Store_Hash</tt> parameter. If the latter parameter is
- <tt><b>true</b></tt>, then the container stores with each entry
- a hash value, and uses this value in case of collisions to
- determine whether to apply a hash value. This can lower the
- cost of collision for some types, but increase the cost of
- collisions for other types.</p>
-
- <p>If a ranged-hash function or ranged probe function is
- directly supplied, however, then it makes no sense to store the
- hash value with each entry. <tt>pb_ds</tt>'s container will
- fail at compilation, by design, if this is attempted.</p>
-
- <h3><a name="policy_interaction_size_load_check" id=
- "policy_interaction_size_load_check">Size Policies and
- Load-Check Trigger Policies</a></h3>
-
- <p>Assume a size policy issues an increasing sequence of sizes
- <i>a, a q, a q<sup>1</sup>, a q<sup>2</sup>, ...</i> For
- example, an exponential size policy might issue the sequence of
- sizes <i>8, 16, 32, 64, ...</i></p>
-
- <p>If a load-check trigger policy is used, with loads
- <i>&alpha;<sub>min</sub></i> and <i>&alpha;<sub>max</sub></i>,
- respectively, then it is a good idea to have:</p>
-
- <ol>
- <li><i>&alpha;<sub>max</sub> ~ 1 / q</i></li>
-
- <li><i>&alpha;<sub>min</sub> &lt; 1 / (2 q)</i></li>
- </ol>
-
- <p>This will ensure that the amortized hash cost of each
- modifying operation is at most approximately 3.</p>
-
- <p><i>&alpha;<sub>min</sub> ~ &alpha;<sub>max</sub></i> is, in
- any case, a bad choice, and <i>&alpha;<sub>min</sub> &gt;
- &alpha;<sub>max</sub></i> is horrendous.</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_exponential_size_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_exponential_size_policy.html
deleted file mode 100644
index 1089b15447..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_exponential_size_policy.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_load_check_resize_trigger.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_load_check_resize_trigger.html
deleted file mode 100644
index b22b7b5cfd..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_load_check_resize_trigger.html
+++ /dev/null
@@ -1,583 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>hash_load_check_resize_trigger Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>hash_load_check_resize_trigger</tt> Interface</h1>
-
- <p>A resize trigger policy based on a load check. It keeps the
- load factor between some load factors load_min and
- load_max.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="External_Load_Access1313998607" id=
-"External_Load_Access1313998607"><b>bool</b> External_Load_Access </a>
-</pre>
- </td>
-
- <td>
- <p>Specifies whether the load factor can be accessed
- externally. The two options have different trade-offs in
- terms of flexibility, genericity, and encapsulation.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="external_load_access3976598639" id=
-"external_load_access3976598639">external_load_access</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether loads can be accessed externally</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_load_check_resize_trigger
- (float load_min = 0.125,
- float load_max = 0.5)
-</pre>
- </td>
-
- <td>
- <p>Default constructor, or constructor taking
- <span class="c1"><tt>load_min</tt></span> and
- <span class="c1"><tt>load_max</tt></span> load factors
- between which this policy will keep the actual load.</p>
-
- <p>It is the responsibility of the user to ensure that
- <span class="c1"><tt>load_min</tt></span> is smaller than
- <span class="c1"><tt>load_max</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- <b>virtual</b>
- ~hash_load_check_resize_trigger
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Load Access Methods</a></h3>
-
- <p>These methods are only available if the external access
- parameter is set.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> std::pair&lt;float, float&gt;
- get_loads
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a pair of the minimal and maximal loads,
- respectively.</p>
-
- <p>Calling this method will not compile when <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- set_loads
- (std::pair&lt;float, float&gt; load_pair)
-</pre>
- </td>
-
- <td>
- <p>Sets the loads through a pair of the minimal and
- maximal loads, respectively.</p>
-
- <p>Calling this method resizes the container, and might
- throw an exception. It is the responsibility of the user
- to pass appropriate loads to this function. Calling this
- method will not compile when <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link7" id="link7">Protected Methods</a></h2>
-
- <h3><a name="link8" id="link8">Insert Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Find Search
- Notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Erase Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Content Change
- Notifications.</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted. the total number of
- entries in the table is <span class=
- "c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Size Change
- Notifications.</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized as a result of this
- object's signifying that a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_externally_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized externally.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Queries</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_grow_needed
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_entries) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a grow is needed.</p>
-
- <p>This method is called only if this object indicated
- resize is needed. The actual <span class=
- "c1"><tt>size</tt></span> of the table is <span class=
- "c1"><tt>size</tt></span>, and the number of entries in
- it is <span class="c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link14" id="link14">Private Methods</a></h2>
-
- <h3><a name="link15" id="link15">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_prime_size_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_prime_size_policy.html
deleted file mode 100644
index 8976767b4f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_prime_size_policy.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test.html
deleted file mode 100644
index 2867595b09..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Locality of Reference Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Erase Memory-Use Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of uniform i.i.d. integer keys
- into a container, then erases all keys except one. It measures
- the final size of the container.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc"><tt>hash_random_int_erase_mem_usage.cc</tt></a>
- 2000 2000 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks how containers adjust internally as their
- logical size decreases (see <a href="motivation.html#assoc_ers_methods">Motivation::Associative
- Containers::Slightly Different Methods::Methods Related to
- Erase</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NHG">NHG</a>, <a href="#NHM">NHM</a> and
- <a href="#NHL">NHL</a> show the results for the native and
- collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a> and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_hash_random_int_erase_mem_usage_test">
-<div id="NHG_assoc">
-<div id="NHG_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="hash_random_int_erase_mem_usage_test_gcc.png" alt="no image" /></a></h6>NHG: Native, collision-chaing, and probing, hash random int erase test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_set_ncah-
-<tt>std::tr1::unordered_set</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_hash_random_int_erase_mem_usage_test">
-<div id="NHM_assoc">
-<div id="NHM_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="hash_random_int_erase_mem_usage_test_msvc.png" alt="no image" /></a></h6>NHM: Native, collision-chaing, and probing, hash random int erase test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_set_ncah-
-<tt>stdext::hash_set</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_hash_random_int_erase_mem_usage_test">
-<div id="NHM_assoc">
-<div id="NHM_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="hash_random_int_erase_mem_usage_test_msvc.png" alt="no image" /></a></h6>NHM: Native, collision-chaing, and probing, hash random int erase test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_set_ncah-
-<tt>stdext::hash_set</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_hash_random_int_erase_mem_usage_test">
-<div id="NHL_assoc">
-<div id="NHL_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="hash_random_int_erase_mem_usage_test_local.png" alt="no image" /></a></h6>NHL: Native, collision-chaing, and probing, hash random int erase test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>STL hash-based containers act very differently than trees in
- this respect. When erasing numerous keys from an STL
- associative-container, the resulting memory user varies greatly
- depending on whether the container is tree-based or hash-based.
- As noted in <a href="motivation.html#assoc_methods">Motivation::Choice of
- Methods</a> , this is a fundamental consequence of the STL's
- associative containers' interface, it is not due to a specific
- implementation.</p>
-<p>(See <a href="priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a> for a similar phenomenon
- regarding priority queues.)</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_gcc.png
deleted file mode 100644
index c552506a75..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.png
deleted file mode 100644
index dbd3ee9d3c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_msvc.png
deleted file mode 100644
index 8c23d46da3..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_find_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_find_find_timing_test.html
deleted file mode 100644
index b6066e7cf4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_find_find_timing_test.html
+++ /dev/null
@@ -1,247 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Random Int Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Random-Integer <tt>find</tt> Find Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with uniform i.i.d.
- integer keys into a container, then performs a series of finds
- using <tt>find</tt>. It measures the average time
- for<tt>find</tt> as a function of the number of values
- inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/random_int_find_timing.cc"><tt>random_int_find_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- hash-tables (see <a href="hash_based_containers.html">Design::Associative
- Containers::Associative Containers::Hash-Based Containers</a>),
- range-hashing functions, and trigger policies (see <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> and
- <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>,
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NGPG">NGPG</a>, <a href="#NGPM">NGPM</a>, and <a href="#NGPL">NGPL</a> show the results
- for the native and probing types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>
- respectively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_cc_hash_random_int_find_timing_test">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="cc_hash_random_int_find_timing_test_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_cc_hash_random_int_find_timing_test">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="cc_hash_random_int_find_timing_test_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_cc_hash_random_int_find_timing_test">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="cc_hash_random_int_find_timing_test_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPG_res_div">
-<div id="NGPG_gcc">
-<div id="NGPG_gp_hash_random_int_find_timing_test">
-<div id="NGPG_assoc">
-<div id="NGPG_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPG" id="NGPG"><img src="gp_hash_random_int_find_timing_test_gcc.png" alt="no image" /></a></h6>NGPG: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPM_res_div">
-<div id="NGPM_msvc">
-<div id="NGPM_gp_hash_random_int_find_timing_test">
-<div id="NGPM_assoc">
-<div id="NGPM_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPM" id="NGPM"><img src="gp_hash_random_int_find_timing_test_msvc.png" alt="no image" /></a></h6>NGPM: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPL_res_div">
-<div id="NGPL_local">
-<div id="NGPL_gp_hash_random_int_find_timing_test">
-<div id="NGPL_assoc">
-<div id="NGPL_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPL" id= "NGPL"><img src="gp_hash_random_int_find_timing_test_local.png" alt="no image" /></a></h6>NGPL: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, the choice of underlying hash-table (see
- <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a> ) affects performance
- most, then the range-hashing scheme (See <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> ), and,
- only finally, other policies.</p>
-<p>When comparing Figures <a href="#NCCG">NCCG</a> and <a href="#NCCM">NCCM</a> to <a href="#NGPG">NGPG</a> and <a href="#NGPM">NGPM</a> , respectively, it is apparent that the
- probing containers are less efficient than the
- collision-chaining containers (both
- <tt>std::tr1::unordered_map</tt> and <tt>stdext::hash_map</tt>
- use collision-chaining) in this case.</p>
-<p>( <a href="hash_random_int_subscript_insert_timing_test.html">Hash-Based
- Random-Integer Subscript Insert Timing Test</a> shows a
- different case, where the situation is reversed; <a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> discusses some further considerations.)</p>
-<p>Within each type of hash-table, the range-hashing scheme
- affects performance more than other policies; <a href="hash_text_find_find_timing_test.html#observations">Hash-Based
- Text <tt>find</tt> Find Timing Test::Observations</a> discusses
- this. In Figures <a href="#NCCG">NCCG</a> , <a href="#NCCM">NCCM</a> , <a href="#NGPG">NGPG</a> , and <a href="#NGPM">NGPM</a> , it should be noted that
- <tt>std::tr1::unordered_map</tt> and <tt>stdext::hash_map</tt>
- are hard-wired currently to mod-based and mask-based schemes,
- respectively.</p>
-<p><a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> summarizes some observations on hash-based
- containers; <a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_find_timing_test.html
deleted file mode 100644
index 0025163704..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_find_timing_test.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Random Int Subscript Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Random-Integer <tt><b>operator</b>[]</tt>
- FindTiming Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with uniform i.i.d.
- integer keys into a container, then performs a series of finds
- using <tt><b>operator</b>[]</tt>. It measures the average time
- for <tt><b>operator</b>[]</tt> as a function of the number of
- values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc"><tt>hash_random_int_subscript_find_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- hash-tables (see <a href="hash_based_containers.html">Design::Hash-Based Containers</a>
- ), range-hashing functions, and trigger policies (see <a href="hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a> and <a href="hash_based_containers.html#resize_policies">Design::Hash-Based
- Containers::Resize Policies</a> ).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>,
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NGPG">NGPG</a>, <a href="#NGPM">NGPM</a>, and <a href="#NGPL">NGPL</a> show the results
- for the native and probing types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_cc_hash_random_int_subscript_timing_test_find">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="cc_hash_random_int_subscript_timing_test_find_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_cc_hash_random_int_subscript_timing_test_find">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="cc_hash_random_int_subscript_timing_test_find_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_cc_hash_random_int_subscript_timing_test_find">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="cc_hash_random_int_subscript_timing_test_find_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash random int find timing test using <tt><b>operator</b></tt>[] - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPG_res_div">
-<div id="NGPG_gcc">
-<div id="NGPG_gp_hash_random_int_subscript_timing_test_find">
-<div id="NGPG_assoc">
-<div id="NGPG_Native_and_probing_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPG" id="NGPG"><img src="gp_hash_random_int_subscript_timing_test_find_gcc.png" alt="no image" /></a></h6>NGPG: Native and probing hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPM_res_div">
-<div id="NGPM_msvc">
-<div id="NGPM_gp_hash_random_int_subscript_timing_test_find">
-<div id="NGPM_assoc">
-<div id="NGPM_Native_and_probing_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPM" id="NGPM"><img src="gp_hash_random_int_subscript_timing_test_find_msvc.png" alt="no image" /></a></h6>NGPM: Native and probing hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPL_res_div">
-<div id="NGPL_local">
-<div id="NGPL_gp_hash_random_int_subscript_timing_test_find">
-<div id="NGPL_assoc">
-<div id="NGPL_Native_and_probing_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPL" id= "NGPL"><img src="gp_hash_random_int_subscript_timing_test_find_local.png" alt="no image" /></a></h6>NGPL: Native and probing hash random int find timing test using <tt><b>operator</b></tt>[] - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>This test shows similar results to <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a> .</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_insert_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_insert_timing_test.html
deleted file mode 100644
index a15d03ba4c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_subscript_insert_timing_test.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Random Int Subscript Insert Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Random-Integer <tt><b>operator</b>[]</tt> Insert
- Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with uniform i.i.d.
- integer keys into a container, using
- <tt><b>operator</b>[]</tt>. It measures the average time for
- <tt><b>operator</b>[]</tt> as a function of the number of
- values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc"><tt>hash_random_int_subscript_insert_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test primarily checks the effect of different underlying
- hash-tables (see <a href="hash_based_containers.html">Design::Associative
- Containers::Associative Containers::Hash-Based
- Containers</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>,
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NGPG">NGPG</a>, <a href="#NGPM">NGPM</a>, and <a href="#NGPL">NGPL</a> show the results
- for the native and probing types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>
- respectively; Figures <a href="#CCGPG">CCGPG</a>, <a href="#CCGPM">CCGPM</a>, and <a href="#CCGPL">CCGPL</a> compare the
- results for the collision-chaining and probing types of
- <tt>pb_ds</tt> only, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>
- respectively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_cc_hash_random_int_subscript_timing_test_insert">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="cc_hash_random_int_subscript_timing_test_insert_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_cc_hash_random_int_subscript_timing_test_insert">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="cc_hash_random_int_subscript_timing_test_insert_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_cc_hash_random_int_subscript_timing_test_insert">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="cc_hash_random_int_subscript_timing_test_insert_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash random int insert timing test using <tt><b>operator</b></tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPG_res_div">
-<div id="NGPG_gcc">
-<div id="NGPG_gp_hash_random_int_subscript_timing_test_insert">
-<div id="NGPG_assoc">
-<div id="NGPG_Native_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPG" id="NGPG"><img src="gp_hash_random_int_subscript_timing_test_insert_gcc.png" alt="no image" /></a></h6>NGPG: Native and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPM_res_div">
-<div id="NGPM_msvc">
-<div id="NGPM_gp_hash_random_int_subscript_timing_test_insert">
-<div id="NGPM_assoc">
-<div id="NGPM_Native_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPM" id="NGPM"><img src="gp_hash_random_int_subscript_timing_test_insert_msvc.png" alt="no image" /></a></h6>NGPM: Native and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPL_res_div">
-<div id="NGPL_local">
-<div id="NGPL_gp_hash_random_int_subscript_timing_test_insert">
-<div id="NGPL_assoc">
-<div id="NGPL_Native_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPL" id= "NGPL"><img src="gp_hash_random_int_subscript_timing_test_insert_local.png" alt="no image" /></a></h6>NGPL: Native and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="CCGPG_res_div">
-<div id="CCGPG_gcc">
-<div id="CCGPG_ccgp_hash_random_int_subscript_timing_test_insert">
-<div id="CCGPG_assoc">
-<div id="CCGPG_Collision-chaining_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="CCGPG" id="CCGPG"><img src="ccgp_hash_random_int_subscript_timing_test_insert_gcc.png" alt="no image" /></a></h6>CCGPG: Collision-chaining and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="CCGPM_res_div">
-<div id="CCGPM_msvc">
-<div id="CCGPM_ccgp_hash_random_int_subscript_timing_test_insert">
-<div id="CCGPM_assoc">
-<div id="CCGPM_Collision-chaining_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="CCGPM" id="CCGPM"><img src="ccgp_hash_random_int_subscript_timing_test_insert_msvc.png" alt="no image" /></a></h6>CCGPM: Collision-chaining and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="CCGPL_res_div">
-<div id="CCGPL_local">
-<div id="CCGPL_ccgp_hash_random_int_subscript_timing_test_insert">
-<div id="CCGPL_assoc">
-<div id="CCGPL_Collision-chaining_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="CCGPL" id= "CCGPL"><img src="ccgp_hash_random_int_subscript_timing_test_insert_local.png" alt="no image" /></a></h6>CCGPL: Collision-chaining and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, as in <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a> and <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a> , the choice
- of underlying hash-table underlying hash-table (see <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a> ) affects performance
- most, then the range-hashing scheme (See <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> ), and,
- only finally, other policies.</p>
-<p>There are some differences, however:</p>
-<ol>
-<li>In this setting, probing tables function sometimes more
- efficiently than collision-chaining tables (see Figures
- <a href="#CCGPG">CCGPG</a> and <a href="#CCGPM">CCGPM</a> ).
- This is explained shortly.</li>
-<li>The performance graphs have a "saw-tooth" shape. The
- average insert time rises and falls. As values are inserted
- into the container, the load factor grows larger. Eventually,
- a resize occurs. The reallocations and rehashing are
- relatively expensive. After this, the load factor is smaller
- than before.</li>
-</ol>
-<p>Collision-chaining containers use indirection for greater
- flexibility; probing containers store values contiguously, in
- an array (see Figure <a href="motivation.html#different_underlying_data_structures">Motivation::Different
- underlying data structures</a> A and B, respectively). It
- follows that for simple data types, probing containers access
- their allocator less frequently than collision-chaining
- containers, (although they still have less efficient probing
- sequences). This explains why some probing containers fare
- better than collision-chaining containers in this case.</p>
-<p>Within each type of hash-table, the range-hashing scheme
- affects performance more than other policies. This is similar
- to the situation in <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a> and <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a>.
- Unsurprisingly, however, containers with <u>lower</u>
-<i>alpha<sub>max</sub></i> perform <u>worse</u> in this case,
- since more re-hashes are performed.</p>
-<p><a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> summarizes some observations on hash-based
- containers; <a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_standard_resize_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_standard_resize_policy.html
deleted file mode 100644
index 8dbc57ce27..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_standard_resize_policy.html
+++ /dev/null
@@ -1,795 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>hash_standard_resize_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>hash_standard_resize_policy</tt> Interface</h1>
-
- <p>A resize policy which delegates operations to size and
- trigger policies.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Policy1072992366" id=
-"Size_Policy1072992366"><b>class</b> Size_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Size policy type.</p>
- </td>
-
- <td><a href=
- "hash_exponential_size_policy.html"><span class="c2"><tt>hash_exponential_size_policy</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Trigger_Policy3611271815" id=
-"Trigger_Policy3611271815"><b>class</b> Trigger_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Trigger policy type.</p>
- </td>
-
- <td><a href=
- "hash_load_check_resize_trigger.html"><span class=
- "c2"><tt>hash_load_check_resize_trigger</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="External_Size_Access1380482982" id=
-"External_Size_Access1380482982"><b>bool</b> External_Size_Access </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether physical sizes can be accessed
- externally.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="trigger_policy4019166151" id=
-"trigger_policy4019166151">trigger_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Trigger policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_policy1385592366" id=
-"size_policy1385592366">size_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="external_size_access4043083014" id=
-"external_size_access4043083014">external_size_access</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#External_Size_Access1380482982"><tt>External_Size_Access</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether sizes can be accessed
- externally.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_standard_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_standard_resize_policy
- (<b>const</b> <a href=
-"#Size_Policy1072992366"><tt>Size_Policy</tt></a> &amp;r_size_policy)
-</pre>
- </td>
-
- <td>
- <p>constructor taking some policies <span class=
- "c1"><tt>r_size_policy</tt></span> will be copied by the
- <a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
- object of this object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_standard_resize_policy
- (<b>const</b> <a href=
-"#Size_Policy1072992366"><tt>Size_Policy</tt></a> &amp;r_size_policy,
- <b>const</b> <a href=
-"#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a> &amp;r_trigger_policy)
-</pre>
- </td>
-
- <td>
- <p>constructor taking some policies. <span class=
- "c1"><tt>r_size_policy</tt></span> will be copied by the
- <a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
- object of this object. <span class=
- "c1"><tt>r_trigger_policy</tt></span> will be copied by
- the <a href=
- "#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
- object of this object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~hash_standard_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (<span class=
-"c2"><tt>hash_standard_resize_policy</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a> &amp;
- get_size_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#Size_Policy1072992366"><tt>Size_Policy</tt></a> object
- used.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#Size_Policy1072992366"><tt>Size_Policy</tt></a> &amp;
- get_size_policy
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#Size_Policy1072992366"><tt>Size_Policy</tt></a> object
- used.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a> &amp;
- get_trigger_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
- object used.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a> &amp;
- get_trigger_policy
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
- object used.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Size Access Methods</a></h3>
-
- <p>These methods are available only if the external size
- parameter indicates that external size access is allowed.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- get_actual_size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the actual size of the container.</p>
-
- <p>This method returns the number of entries (used and
- unused) in the container. It is different from the
- container's size method, which returns the number of used
- entries. Calling this method will not compile when
- <a href=
- "#External_Size_Access1380482982"><tt>External_Size_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- resize
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> suggested_new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes the container to <span class=
- "c1"><tt>suggested_new_size</tt></span>, a suggested size
- (the actual size will be determined by the <a href=
- "#Size_Policy1072992366"><tt>Size_Policy</tt></a>
- object).</p>
-
- <p>Calling this method will not compile when <a href=
- "#External_Size_Access1380482982"><tt>External_Size_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Methods</a></h2>
-
- <h3><a name="link11" id="link11">Insert Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Find Search
- Notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Erase Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Content Change
- Notifications</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link15" id="link15">Size Change
- Notifications</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link16" id="link16">Queries</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_new_size
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_used_e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries what the new <span class=
- "c1"><tt>size</tt></span> should be, when the container
- is resized naturally. The current size of the container
- is <span class="c1"><tt>size</tt></span>, and the number
- of used entries within the container is <span class=
- "c1"><tt>num_used_e</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link17" id="link17">Private Methods</a></h2>
-
- <h3><a name="link18" id="link18">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_text_find_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_text_find_find_timing_test.html
deleted file mode 100644
index 60c30fd343..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_text_find_find_timing_test.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Text Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Text <tt>find</tt> Find Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container, then performs a series of finds using
- <tt>find</tt> . It measures the average time for <tt>find</tt>
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc"><tt>text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different range-hashing
- functions, trigger policies, and cache-hashing policies (see
- <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Associative Containers::Hash-Based Containers::Hash
- Policies</a> and <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a> ).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respetively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_text_find_timing_test_hash">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="text_find_timing_test_hash_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_text_find_timing_test_hash">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="text_find_timing_test_hash_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_text_find_timing_test_hash">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_text_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="text_find_timing_test_hash_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash text find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, the range-hashing scheme (See <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> ) affects
- performance more than other policies. As Figure <a href="#NCCG">NCCG</a> shows, containers using mod-based
- range-hashing (including the native hash-based container, which
- is currently hard-wired to this scheme) have lower performance
- than those using mask-based range-hashing. A modulo-based
- range-hashing scheme's main benefit is that it takes into
- account all hash-value bits. Standard string hash-functions are
- designed to create hash values that are nearly-uniform as is [
- <a href="references.html#knuth98sorting">knuth98sorting</a>
- ].</p>
-<p>Trigger policies (see <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a> ),
- <i>i.e.</i> the load-checks constants, affect performance to a
- lesser extent.</p>
-<p>Perhaps surprisingly, storing the hash value alongside each
- entry affects performance only marginally, at least in
- <tt>pb_ds</tt> 's implementation. (Unfortunately, it was not
- possible to run the tests with <tt>std::tr1::unordered_map</tt>
- 's <tt>cache_hash_code = <b>true</b></tt> , as it appeared to
- malfuntion.)</p>
-<p><a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_find_timing_test.html
deleted file mode 100644
index bfbb3b0866..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_find_timing_test.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Skewed Distribution Memory Use Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Skewed-Distribution Random-Integer <tt>find</tt>
- Find Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with a markedly
- non-uniform i.i.d. integer keys into a container, then performs
- a series of finds using <tt>find</tt> . It measures the average
- time for <tt>find</tt> as a function of the number of values in
- the containers. The keys are generated as follows. First, a
- uniform integer is created; it is then shifted left 8 bits.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc"><tt>hash_zlob_random_int_find_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different range-hashing
- functions and trigger policies (see <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> and
- <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NHG">NHG</a>, <a href="#NHM">NHM</a>, and
- <a href="#NHL">NHL</a> show the results for various hash-based
- associative-containers in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_hash_zlob_random_int_find_timing_test">
-<div id="NHG_assoc">
-<div id="NHG_Skewed-distribution_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="hash_zlob_random_int_find_timing_test_gcc.png" alt="no image" /></a></h6>NHG: Skewed-distribution random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_hash_zlob_random_int_find_timing_test">
-<div id="NHM_assoc">
-<div id="NHM_Skewed-distribution_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="hash_zlob_random_int_find_timing_test_msvc.png" alt="no image" /></a></h6>NHM: Skewed-distribution random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_hash_zlob_random_int_find_timing_test">
-<div id="NHL_assoc">
-<div id="NHL_Skewed-distribution_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="hash_zlob_random_int_find_timing_test_local.png" alt="no image" /></a></h6>NHL: Skewed-distribution random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, the keys' distribution is so skewed that
- the unerlying hash-table type affects performance marginally.
- (This is in contrast with <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a> , <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a> , <a href="hash_random_int_subscript_find_timing_test.html">Hash-Based
- Random-Integer Subscript Find Timing Test</a> and <a href="hash_random_int_subscript_insert_timing_test.html">Hash-Based
- Random-Integer Subscript Insert Timing Test</a> .)</p>
-<p>The range-hashing scheme affects performance dramatically. A
- mask-based range-hashing scheme effectively maps all values
- into the same bucket. Access degenerates into a search within
- an unordered linked-list. In Figures <a href="#NHG">NHG</a> and
- <a href="#NHM">NHM</a> , it should be noted that
- <tt>std::tr1::unordered_map</tt> and <tt>stdext::hash_map</tt>
- are hard-wired currently to mod-based and mask-based schemes,
- respectively.</p>
-<p>When observing the settings of this test, it is apparent
- that the keys' distribution is far from natural. One might ask
- if the test is not contrived to show that, in some cases,
- mod-based range hashing does better than mask-based range
- hashing. This is, in fact just the case. We did not encounter a
- more natural case in which mod-based range hashing is better.
- In our opnion, real-life key distributions are handled better
- with an appropriate hash function and a mask-based
- range-hashing function. (<a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_shift_mask.cc"><tt>shift_mask.cc</tt></a>
- shows an example of handling this a-priori known skewed
- distribution with a mask-based range-hashing function). If hash
- performance is bad, a <i>&Chi;<sup>2</sup></i> test can be used
- to check how to transform it into a more uniform
- distribution.</p>
-<p>For this reason, <tt>pb_ds</tt>'s default range-hashing
- function is mask-based.</p>
-<p><a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> summarizes some observations on hash-based
- containers; <a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_gcc.png
deleted file mode 100644
index 8d170db1a2..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.png
deleted file mode 100644
index 0be2f00fa6..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_msvc.png
deleted file mode 100644
index 874e7a780e..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/index.html b/libstdc++-v3/doc/html/ext/pb_ds/index.html
deleted file mode 100644
index 4c73c2e915..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/index.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/insert_error.html b/libstdc++-v3/doc/html/ext/pb_ds/insert_error.html
deleted file mode 100644
index 37a89aaf9e..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/insert_error.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/interface.html b/libstdc++-v3/doc/html/ext/pb_ds/interface.html
deleted file mode 100644
index a48a8bbadd..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/interface.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1>Interface Specifics</h1>
-
-<p>Following are the library's interface specifics. <a href=
- "tutorial.html">Short Tutorial</a> is a short tutorial, and
- <a href="concepts.html">Concepts</a> describes some
- concepts.</p>
- <hr />
-
- <h2><a name="namespaces" id="namespaces">Namespace</a></h2>
-
- <p>All code is enclosed in namespace <tt>pb_ds</tt>. Nested within
- this is namespace <tt>detail</tt>, which contains the parts of this
- library that are considered implementation details.</p>
- <hr />
-
- <h2><a name="containers" id="containers">Containers</a></h2>
-
- <h3><a name="containers_assoc" id=
- "containers_assoc">Associative Containers</a></h3>
-
- <ol>
- <li><a href=
- "container_base.html"><tt>container_base</tt></a> -
- abstract base class for associative containers.</li>
-
- <li>Hash-based:
-
- <ol>
- <li><a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- - abstract base class for hash-based
- containers</li>
-
- <li><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>
- - concrete collision-chaining hash-based
- containers</li>
-
- <li><a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a>
- - concrete (general) probing hash-based
- containers</li>
- </ol>
- </li>
-
- <li>Tree-based:
-
- <ol>
- <li><a href=
- "basic_tree.html"><tt>basic_tree</tt></a>
- - abstract base class for tree and trie based
- containers</li>
-
- <li><a href=
- "tree.html"><tt>tree</tt></a>
- - concrete base class for tree-based
- containers</li>
-
- <li><a href=
- "trie.html"><tt>trie</tt></a>
- - concrete base class for trie-based
- containers</li>
- </ol>
- </li>
-
- <li>List-based:
-
- <ol>
- <li><a href=
- "list_update.html"><tt>list_update</tt></a> -
- singly-linked list with update-policy container</li>
- </ol>
- </li>
- </ol>
-
- <h3><a name="containers_pq" id="containers_pq">Priority
- Queues</a></h3>
-
- <ol>
- <li><a href="priority_queue.html"><tt>priority_queue</tt></a>
- - priority queue</li>
- </ol>
- <hr />
-
- <h2><a name="tag" id="tag">Container Tags and
- Traits</a></h2>
-
- <h3><a name="ds_ts" id="ds_ts">Container Tags</a></h3>
-
- <h4><a name="ds_ts_common" id="ds_ts_common">Common</a></h4>
-
- <ol>
- <li><a href="container_tag.html"><tt>container_tag</tt></a> -
- base class for data structure tags</li>
- </ol>
-
- <h4><a name="ds_ts_assoc" id=
- "ds_ts_assoc">Associative-Containers</a></h4>
-
- <ol>
- <li><a href=
- "associative_container_tag.html"><tt>associative_container_tag</tt></a> -
- base class for associative-container data structure tags</li>
-
- <li><a href=
- "basic_hash_tag.html"><tt>basic_hash_tag</tt></a> -
- base class for hash-based structure tags</li>
-
- <li><a href="cc_hash_tag.html"><tt>cc_hash_tag</tt></a>
- - collision-chaining hash structure tag</li>
-
- <li><a href="gp_hash_tag.html"><tt>gp_hash_tag</tt></a>
- - (general) probing hash structure tag</li>
-
- <li><a href=
- "basic_tree_tag.html"><tt>basic_tree_tag</tt></a>
- - base class for tree-like structure tags</li>
-
- <li><a href=
- "tree_tag.html"><tt>tree_tag</tt></a> -
- base class for tree structure tags</li>
-
- <li><a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
- - red-black tree structure tag/li&gt;</li>
-
- <li><a href=
- "splay_tree_tag.html"><tt>splay_tree_tag</tt></a> -
- splay tree structure tag</li>
-
- <li><a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
- - ordered-vector tree structure tag</li>
-
- <li><a href=
- "trie_tag.html"><tt>trie_tag</tt></a> -
- trie structure tag</li>
-
- <li><a href=
- "pat_trie_tag.html"><tt>pat_trie_tag</tt></a> -
- PATRICIA trie structure tag</li>
-
- <li><a href="list_update_tag.html"><tt>list_update_tag</tt></a> - list
- (with updates) structure tag</li>
- </ol>
-
- <h4><a name="ds_ts_pq" id="ds_ts_pq">Priority-Queues</a></h4>
-
- <ol>
- <li><a href=
- "priority_queue_tag.html"><tt>priority_queue_tag</tt></a> - base
- class for priority-queue data structure tags</li>
-
- <li><a href=
- "pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a> -
- pairing-heap structure tag.</li>
-
- <li><a href=
- "binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
- - binomial-heap structure tag</li>
-
- <li><a href=
- "rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
- - redundant-counter binomial-heap (<i>i.e.</i>, a heap where
- binomial trees form a sequence that is similar to a
- de-amortized bit-addition algorithm) structure tag</li>
-
- <li><a href=
- "binary_heap_tag.html"><tt>binary_heap_tag</tt></a> -
- binary heap (based on an array or an array of nodes)
- structure tag</li>
-
- <li><a href=
- "thin_heap_tag.html"><tt>thin_heap_tag</tt></a> - thin
- heap (an alternative [<a href=
- "references.html#kt99fat_heaps">kt99fat_heaps</a>] to
- Fibonacci heap) data structure tag.</li>
- </ol>
-
- <h3><a name="ds_inv_tag" id="ds_inv_tag">Invalidation-Guarantee
- Tags</a></h3>
-
- <ol>
- <li><a href=
- "basic_invalidation_guarantee.html"><tt>basic_invalidation_guarantee</tt></a>
- - weakest invalidation guarantee</li>
-
- <li><a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>
- - stronger invalidation guarantee</li>
-
- <li><a href=
- "range_invalidation_guarantee.html"><tt>range_invalidation_guarantee</tt></a>
- - strongest invalidation guarantee</li>
- </ol>
-
- <h3><a name="container_traits" id="container_traits">Container
- Traits</a></h3>
-
- <ol>
- <li><a href="pq_container_traits.html"><tt>container_traits</tt></a> -
- traits for determining underlying data structure
- properties</li>
- </ol>
- <hr />
-
- <h2><a name="ds_policy_classes" id=
- "ds_policy_classes">Container Policy Classes</a></h2>
-
- <h3><a name="hash_related_policies" id=
- "hash_related_policies">Hash Policies</a></h3>
-
- <h4>Hash and Probe Policies</h4>
-
- <ol>
- <li>Hash Functions:
-
- <ol>
- <li><a href="null_hash_fn.html"><tt>null_hash_fn</tt></a>
- - type indicating one-step range-hashing</li>
- </ol>
- </li>
-
- <li>Range-Hashing Functions:
-
- <ol>
- <li><a href="sample_range_hashing.html">Sample
- range-hashing function</a> - interface required of a
- range-hashing functor</li>
-
- <li><a href=
- "direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
- - (bit) mask-based range hashing functor</li>
-
- <li><a href=
- "direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
- - modulo-based range hashing functor</li>
- </ol>
- </li>
-
- <li>Probe Functions:
-
- <ol>
- <li><a href="sample_probe_fn.html">Sample probe
- function</a> - interface required of a probe functor</li>
-
- <li><a href=
- "null_probe_fn.html"><tt>null_probe_fn</tt></a> - type
- indicating one-step ranged-probe</li>
-
- <li><a href=
- "linear_probe_fn.html"><tt>linear_probe_fn</tt></a> -
- linear-probe functor</li>
-
- <li><a href=
- "quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>-
- quadratic-probe functor</li>
- </ol>
- </li>
-
- <li>Ranged-Hash Functions:
-
- <ol>
- <li><a href="sample_ranged_hash_fn.html">Sample
- ranged-hash function</a> - interface required of a
- ranged-hash functor</li>
- </ol>
- </li>
-
- <li>Ranged-Probe Functions:
-
- <ol>
- <li><a href="sample_ranged_probe_fn.html">Sample
- ranged-probe function</a> - interface required of a
- ranged-probe functor</li>
- </ol>
- </li>
- </ol>
-
- <h4>Resize Policies</h4>
- <ol>
- <li>Resize Policies:
-
- <ol>
- <li><a href="sample_resize_policy.html">Sample resize
- policy</a> - interface required of a resize policy</li>
-
- <li><a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- - standard resize policy</li>
- </ol>
- </li>
-
- <li>Size Policies:
-
- <ol>
- <li><a href="sample_size_policy.html">Sample size
- policy</a> - interface required of a size policy</li>
-
- <li><a href=
- "hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
- - exponential size policy (typically used with (bit) mask
- range-hashing)</li>
-
- <li><a href=
- "hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
- - prime size policy (typically used with modulo
- range-hashing)</li>
- </ol>
- </li>
-
- <li>Trigger Policies:
-
- <ol>
- <li><a href="sample_resize_trigger.html">Sample trigger
- policy</a> - interface required of a trigger policy</li>
-
- <li><a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- - trigger policy based on load checks</li>
-
- <li><a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>
- - trigger policy based on collision checks</li>
- </ol>
- </li>
- </ol>
-
- <h3><a name="tree_related_policies" id=
- "tree_related_policies">Tree Policies</a></h3>
-
- <h4>Tree Node-Update Policies</h4>
-
-
-<ol>
-<li><a href="sample_tree_node_update.html">Sample node
-updater policy</a> - interface required of a tree
-node-updating functor</li>
-
-<li><a href=
- "null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-- null policy indicating no updates are required</li>
-
-<li><a href=
- "tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-- updater enabling order statistics queries</li>
-</ol>
-
-<h3><a name="trie_related_policies" id=
- "trie_related_policies">Trie Policies</a></h3>
-
-
-<h4>Trie Element-Access Traits</h4>
-
- <ol>
- <li><a href="sample_trie_e_access_traits.html">Sample
- element-access traits</a> - interface required of
- element-access traits</li>
-
- <li><a href=
- "string_trie_e_access_traits.html"><tt>string_trie_e_access_traits</tt></a>
- - String element-access traits</li>
- </ol>
-
- <h4>Trie Node-Update Policies</h4>
-
-
-<ol>
-<li><a href="sample_trie_node_update.html">Sample node
-updater policy</a> - interface required of a trie node
-updater</li>
-
-<li><a href=
- "null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-- null policy indicating no updates are required</li>
-
-<li><a href=
- "trie_prefix_search_node_update.html"><tt>trie_prefix_search_node_update</tt></a>
-- updater enabling prefix searches</li>
-
-<li><a href=
- "trie_order_statistics_node_update.html"><tt>trie_order_statistics_node_update</tt></a>
-- updater enabling order statistics queries</li>
-</ol>
-
-<h3><a name="list_related_policies" id=
- "list_related_policies">List Policies</a></h3>
-
-<h4>List Update Policies</h4>
-
-
- <ol>
- <li><a href="sample_update_policy.html">Sample list update
- policy</a> - interface required of a list update policy</li>
-
- <li><a href=
- "move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
- - move-to-front update algorithm</li>
-
- <li><a href=
- "counter_lu_policy.html"><tt>counter_lu_policy</tt></a> -
- counter update algorithm</li>
- </ol>
-
- <h3><a name="ds_pol" id="ds_pol">Mapped-Type Policies</a></h3>
-
-
- <ol>
- <li><a href=
- "null_mapped_type.html"><tt>null_mapped_type</tt></a> - data
- policy indicating that a container is a "set"</li>
- </ol>
- <hr />
-
- <h2><a name="exceptions" id="exceptions">Exceptions</a></h2>
-
-
- <ol>
- <li><a href="exceptions.html"><tt>container_error</tt></a>
- - base class for all policy-based data structure errors</li>
-
- <li><a href=
- "insert_error.html"><tt>insert_error</tt></a></li>
-
- <li><a href="join_error.html"><tt>join_error</tt></a></li>
-
- <li><a href=
- "resize_error.html"><tt>resize_error</tt></a></li>
- </ol>
-
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/introduction.html b/libstdc++-v3/doc/html/ext/pb_ds/introduction.html
deleted file mode 100644
index b3ccbd76ae..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/introduction.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_cd.png b/libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_cd.png
deleted file mode 100644
index 1f9d1243c6..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_cd.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/join_error.html b/libstdc++-v3/doc/html/ext/pb_ds/join_error.html
deleted file mode 100644
index f3e3eaf979..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/join_error.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/linear_probe_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/linear_probe_fn.html
deleted file mode 100644
index 6387d3a337..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/linear_probe_fn.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/list_update.html b/libstdc++-v3/doc/html/ext/pb_ds/list_update.html
deleted file mode 100644
index 434e82f42f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/list_update.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/list_update_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/list_update_tag.html
deleted file mode 100644
index f04aaeacbd..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/list_update_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/lu_based_containers.html b/libstdc++-v3/doc/html/ext/pb_ds/lu_based_containers.html
deleted file mode 100644
index c8693437d9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/lu_based_containers.html
+++ /dev/null
@@ -1,229 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/misc.html b/libstdc++-v3/doc/html/ext/pb_ds/misc.html
deleted file mode 100644
index 01029e1345..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/misc.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/motivation.html b/libstdc++-v3/doc/html/ext/pb_ds/motivation.html
deleted file mode 100644
index 627317217f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/motivation.html
+++ /dev/null
@@ -1,993 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Motivation</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Motivation</h1>
-
- <p>Many fine associative-container libraries were already
- written, most notably, the STL's associative containers. Why
- then write another library? This section shows some possible
- advantages of this library, when considering the challenges in
- <a href="introduction.html">Introduction</a>. Many of these
- points stem from the fact that the STL introduced
- associative-containers in a two-step process (first
- standardizing tree-based containers, only then adding
- hash-based containers, which are fundamentally different), did
- not standardize priority queues as containers, and (in our
- opinion) overloads the iterator concept.</p>
-
- <h2><a name="assoc" id="assoc">Associative Containers</a></h2>
-
- <h3><a name="assoc_policies" id="assoc_policies">More
- Configuration Choices</a></h3>
-
- <p>Associative containers require a relatively large number of
- policies to function efficiently in various settings. In some
- cases this is needed for making their common operations more
- efficient, and in other cases this allows them to support a
- larger set of operations</p>
-
- <ol>
- <li>Hash-based containers, for example, support look-up and
- insertion methods (<i>e.g.</i>, <tt>find</tt> and
- <tt>insert</tt>). In order to locate elements quickly, they
- are supplied a hash functor, which instruct how to transform
- a key object into some size type; <i>e.g.</i>, a hash functor
- might transform <tt>"hello"</tt> into <tt>1123002298</tt>. A
- hash table, though, requires transforming each key object
- into some size-type type in some specific domain;
- <i>e.g.</i>, a hash table with a 128-long table might
- transform <tt>"hello"</tt> into position 63. The policy by
- which the hash value is transformed into a position within
- the table can dramatically affect performance (see <a href=
- "hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a>).
- Hash-based containers also do not resize naturally (as
- opposed to tree-based containers, for example). The
- appropriate resize policy is unfortunately intertwined with
- the policy that transforms hash value into a position within
- the table (see <a href=
- "hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>).
-
- <p><a href=
- "assoc_performance_tests.html#hash_based">Associative-Container
- Performance Tests::Hash-Based Containers</a> quantifies
- some of these points.</p>
- </li>
-
- <li>Tree-based containers, for example, also support look-up
- and insertion methods, and are primarily useful when
- maintaining order between elements is important. In some
- cases, though, one can utilize their balancing algorithms for
- completely different purposes.
-
- <p>Figure <a href="#node_invariants">Metadata for
- order-statistics and interval intersections</a>-A, for
- example, shows a tree whose each node contains two entries:
- a floating-point key, and some size-type <i>metadata</i>
- (in bold beneath it) that is the number of nodes in the
- sub-tree. (<i>E.g.</i>, the root has key 0.99, and has 5
- nodes (including itself) in its sub-tree.) A container based
- on this data structure can obviously answer efficiently
- whether 0.3 is in the container object, but it can also
- answer what is the order of 0.3 among all those in the
- container object [<a href=
- "references.html#clrs2001">clrs2001</a>] (see <a href=
- "assoc_examples.html#tree_like_based">Associative Container
- Examples::Tree-Like-Based Containers (Trees and
- Tries)</a>).</p>
-
- <p>As another example, Figure <a href=
- "#node_invariants">Metadata for order-statistics and
- interval intersections</a>-B shows a tree whose each node
- contains two entries: a half-open geometric line interval,
- and a number <i>metadata</i> (in bold beneath it) that is
- the largest endpoint of all intervals in its sub-tree.
- (<i>E.g.</i>, the root describes the interval <i>[20,
- 36)</i>, and the largest endpoint in its sub-tree is 99.) A
- container based on this data structure can obviously answer
- efficiently whether <i>[3, 41)</i> is in the container
- object, but it can also answer efficiently whether the
- container object has intervals that intersect <i>[3,
- 41)</i> (see <a href=
- "assoc_examples.html#tree_like_based">Associative Container
- Examples::Tree-Like-Based Containers (Trees and
- Tries)</a>). These types of queries are very useful in
- geometric algorithms and lease-management algorithms.</p>
-
- <p>It is important to note, however, that as the trees are
- modified, their internal structure changes. To maintain
- these invariants, one must supply some policy that is aware
- of these changes (see <a href=
- "tree_based_containers.html#invariants">Design::Associative
- Containers::Tree-Based Containers::Node Invariants</a>);
- without this, it would be better to use a linked list (in
- itself very efficient for these purposes).</p>
-
- <p><a href=
- "assoc_performance_tests.html#tree_like_based">Associative-Container
- Performance Tests::Tree-Like-Based Containers</a>
- quantifies some of these points.</p>
- </li>
- </ol>
-
- <h6 class="c1"><a name="node_invariants" id=
- "node_invariants"><img src="node_invariants.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Metadata for order-statistics and interval
- intersections.</h6>
-
- <h3><a name="assoc_ds_genericity" id="assoc_ds_genericity">More
- Data Structures and Traits</a></h3>
-
- <p>The STL contains associative containers based on red-black
- trees and collision-chaining hash tables. These are obviously
- very useful, but they are not ideal for all types of
- settings.</p>
-
- <p>Figure <a href=
- "#different_underlying_data_structures">Different underlying
- data structures</a> shows different underlying data structures
- (the ones currently supported in <tt>pb_ds</tt>). A shows a
- collision-chaining hash-table, B shows a probing hash-table, C
- shows a red-black tree, D shows a splay tree, E shows a tree
- based on an ordered vector(implicit in the order of the
- elements), F shows a PATRICIA trie, and G shows a list-based
- container with update policies.</p>
-
- <p>Each of these data structures has some performance benefits,
- in terms of speed, size or both (see <a href=
- "assoc_performance_tests.html">Associative-Container
- Performance Tests</a> and <a href=
- "assoc_performance_tests.html#dss_family_choice">Associative-Container
- Performance Tests::Observations::Underlying Data-Structure
- Families</a>). For now, though, note that <i>e.g.</i>,
- vector-based trees and probing hash tables manipulate memory
- more efficiently than red-black trees and collision-chaining
- hash tables, and that list-based associative containers are
- very useful for constructing "multimaps" (see <a href=
- "#assoc_mapping_semantics">Alternative to Multiple Equivalent
- Keys</a>, <a href=
- "assoc_performance_tests.html#multimaps">Associative Container
- Performance Tests::Multimaps</a>, and <a href=
- "assoc_performance_tests.html#msc">Associative Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>).</p>
-
- <h6 class="c1"><a name="different_underlying_data_structures"
- id="different_underlying_data_structures"><img src=
- "different_underlying_dss.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Different underlying data structures.</h6>
-
- <p>Now consider a function manipulating a generic associative
- container, <i>e.g.</i>,</p>
- <pre>
-<b>template</b>&lt;
- <b>class</b> Cntnr&gt;
-<b>int</b>
- some_op_sequence
- (Cntnr &amp;r_cnt)
-{
- ...
-}
-</pre>
-
- <p>Ideally, the underlying data structure of <tt>Cntnr</tt>
- would not affect what can be done with <tt>r_cnt</tt>.
- Unfortunately, this is not the case.</p>
-
- <p>For example, if <tt>Cntnr</tt> is <tt>std::map</tt>, then
- the function can use <tt>std::for_each(r_cnt.find(foo),
- r_cnt.find(bar), foobar)</tt> in order to apply <tt>foobar</tt>
- to all elements between <tt>foo</tt> and <tt>bar</tt>. If
- <tt>Cntnr</tt> is a hash-based container, then this call's
- results are undefined.</p>
-
- <p>Also, if <tt>Cntnr</tt> is tree-based, the type and object
- of the comparison functor can be accessed. If <tt>Cntnr</tt> is
- hash based, these queries are nonsensical.</p>
-
- <p>There are various other differences based on the container's
- underlying data structure. For one, they can be constructed by,
- and queried for, different policies. Furthermore:</p>
-
- <ol>
- <li>Containers based on C, D, E and F store elements in a
- meaningful order; the others store elements in a meaningless
- (and probably time-varying) order. By implication, only
- containers based on C, D, E and F can support erase
- operations taking an iterator and returning an iterator to
- the following element without performance loss (see <a href=
- "#assoc_ers_methods">Slightly Different Methods::Methods
- Related to Erase</a>).</li>
-
- <li>Containers based on C, D, E, and F can be split and
- joined efficiently, while the others cannot. Containers based
- on C and D, furthermore, can guarantee that this is
- exception-free; containers based on E cannot guarantee
- this.</li>
-
- <li>Containers based on all but E can guarantee that erasing
- an element is exception free; containers based on E cannot
- guarantee this. Containers based on all but B and E can
- guarantee that modifying an object of their type does not
- invalidate iterators or references to their elements, while
- containers based on B and E cannot. Containers based on C, D,
- and E can furthermore make a stronger guarantee, namely that
- modifying an object of their type does not affect the order
- of iterators.</li>
- </ol>
-
- <p>A unified tag and traits system (as used for the STL's
- iterators, for example) can ease generic manipulation of
- associative containers based on different underlying
- data structures (see <a href=
- "tutorial.html#assoc_ds_gen">Tutorial::Associative
- Containers::Determining Containers' Attributes</a> and <a href=
- "ds_gen.html#container_traits">Design::Associative
- Containers::Data-Structure Genericity::Data-Structure Tags and
- Traits</a>).</p>
-
- <h3><a name="assoc_diff_it" id="assoc_diff_it">Differentiating
- between Iterator Types</a></h3>
-
- <p>Iterators are centric to the STL's design, because of the
- container/algorithm/iterator decomposition that allows an
- algorithm to operate on a range through iterators of some
- sequence (<i>e.g.</i>, one originating from a container).
- Iterators, then, are useful because they allow going over a
- <u>sequence</u>. The STL also uses iterators for accessing a
- <u>specific</u> element - <i>e.g.</i>, when an associative
- container returns one through <tt>find</tt>. The STL, however,
- consistently uses the same types of iterators for both
- purposes: going over a range, and accessing a specific found
- element. Before the introduction of hash-based containers to
- the STL, this made sense (with the exception of priority
- queues, which are discussed in <a href="#pq">Priority
- Queues</a>).</p>
-
- <p>Using the STL's associative containers together with
- non-order-preserving associative containers (and also because
- of priority-queues container), there is a possible need for
- different types of iterators for self-organizing containers -
- the iterator concept seems overloaded to mean two different
- things (in some cases). The following subsections explain this;
- <a href="tutorial.html#assoc_find_range">Tutorial::Associative
- Containers::Point-Type and Range-Type Methods</a> explains an
- alternative design which does not complicate the use of
- order-preserving containers, but is better for unordered
- containers; <a href=
- "ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods</a> explains the design further.</p>
-
- <h4><a name="assoc_find_it_range_it" id=
- "assoc_find_it_range_it">Using Point-Type Iterators for
- Range-Type Operations</a></h4>
-
- <p>Suppose <tt>cntnr</tt> is some associative container, and
- say <tt>c</tt> is an object of type <tt>cntnr</tt>. Then what
- will be the outcome of</p>
- <pre>
-std::for_each(c.find(1), c.find(5), foo);
-</pre>
-
- <p>If <tt>cntnr</tt> is a tree-based container object, then an
- in-order walk will apply <tt>foo</tt> to the relevant elements,
- <i>e.g.</i>, as in Figure <a href="#range_it_in_hts">Range
- iteration in different data structures</a> -A. If <tt>c</tt> is
- a hash-based container, then the order of elements between any
- two elements is undefined (and probably time-varying); there is
- no guarantee that the elements traversed will coincide with the
- <i>logical</i> elements between 1 and 5, <i>e.g.</i>, as in
- Figure <a href="#range_it_in_hts">Range iteration in different
- data structures</a>-B.</p>
-
- <h6 class="c1"><a name="range_it_in_hts" id=
- "range_it_in_hts"><img src="point_iterators_range_ops_1.png"
- alt="no image" /></a></h6>
-
- <h6 class="c1">Range iteration in different
- data structures.</h6>
-
- <p>In our opinion, this problem is not caused just because
- red-black trees are order preserving while collision-chaining
- hash tables are (generally) not - it is more fundamental. Most
- of the STL's containers order sequences in a well-defined
- manner that is determined by their <u>interface</u>: calling
- <tt>insert</tt> on a tree-based container modifies its sequence
- in a predictable way, as does calling <tt>push_back</tt> on a
- list or a vector. Conversely, collision-chaining hash tables,
- probing hash tables, priority queues, and list-based containers
- (which are very useful for "multimaps") are self-organizing
- data structures; the effect of each operation modifies their
- sequences in a manner that is (practically) determined by their
- <u>implementation</u>.</p>
-
- <p>Consequently, applying an algorithm to a sequence obtained
- from most containers <u>may or may not</u> make sense, but
- applying it to a sub-sequence of a self-organizing container
- <u>does not</u>.</p>
-
- <h4><a name="assoc_range_it_for_find_it" id=
- "assoc_range_it_for_find_it">The Cost of Enabling Range
- Capabilities to Point-Type Iterators</a></h4>
-
- <p>Suppose <tt>c</tt> is some collision-chaining hash-based
- container object, and one calls <tt>c.find(3)</tt>. Then what
- composes the returned iterator?</p>
-
- <p>Figure <a href="#find_its_in_hash_tables">Point-type
- iterators in hash tables</a>-A shows the simplest (and most
- efficient) implementation of a collision-chaining hash table.
- The little box marked <tt>point_iterator</tt> shows an object
- that contains a pointer to the element's node. Note that this
- "iterator" has no way to move to the next element (<i>i.e.</i>,
- it cannot support <tt><b>operator</b>++</tt>). Conversely, the
- little box marked <tt>iterator</tt> stores both a pointer to
- the element, as well as some other information (<i>e.g.</i>,
- the bucket number of the element). the second iterator, then,
- is "heavier" than the first one- it requires more time and
- space. If we were to use a different container to
- cross-reference into this hash-table using these iterators - it
- would take much more space. As noted in <a href=
- "#assoc_find_it_range_it">Using Point-Type Iterators for
- Range-Type Operations</a>, nothing much can be done by
- incrementing these iterators, so why is this extra information
- needed?</p>
-
- <p>Alternatively, one might create a collision-chaining
- hash-table where the lists might be linked, forming a
- monolithic total-element list, as in Figure <a href=
- "#find_its_in_hash_tables">Point-type iterators in hash
- tables</a>-B (this seems similar to the Dinkumware design
- [<a href="references.html#dinkumware_stl">dinkumware_stl</a>]).
- Here the iterators are as light as can be, but the hash-table's
- operations are more complicated.</p>
-
- <h6 class="c1"><a name="find_its_in_hash_tables" id=
- "find_its_in_hash_tables"><img src=
- "point_iterators_range_ops_2.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Point-type iterators in hash tables.</h6>
-
- <p>It should be noted that containers based on
- collision-chaining hash-tables are not the only ones with this
- type of behavior; many other self-organizing data structures
- display it as well.</p>
-
- <h4><a name="assoc_inv_guar" id="assoc_inv_guar">Invalidation
- Guarantees</a></h4>
-
- <p>Consider the following snippet:</p>
- <pre>
-it = c.find(3);
-
-c.erase(5);
-</pre>
-
- <p>Following the call to <tt>erase</tt>, what is the validity
- of <tt>it</tt>: can it be de-referenced? can it be
- incremented?</p>
-
- <p>The answer depends on the underlying data structure of the
- container. Figure <a href=
- "#invalidation_guarantee_erase">Effect of erase in different
- underlying data structures</a> shows three cases: A1 and A2
- show a red-black tree; B1 and B2 show a probing hash-table; C1
- and C2 show a collision-chaining hash table.</p>
-
- <h6 class="c1"><a name="invalidation_guarantee_erase" id=
- "invalidation_guarantee_erase"><img src=
- "invalidation_guarantee_erase.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Effect of erase in different underlying
- data structures.</h6>
-
- <ol>
- <li>Erasing 5 from A1 yields A2. Clearly, an iterator to 3
- can be de-referenced and incremented. The sequence of
- iterators changed, but in a way that is well-defined by the
- <u>interface</u>.</li>
-
- <li>Erasing 5 from B1 yields B2. Clearly, an iterator to 3 is
- not valid at all - it cannot be de-referenced or incremented;
- the order of iterators changed in a way that is (practically)
- determined by the <u>implementation</u> and not by the
- <u>interface</u>.</li>
-
- <li>Erasing 5 from C1 yields C2. Here the situation is more
- complicated. On the one hand, there is no problem in
- de-referencing <tt>it</tt>. On the other hand, the order of
- iterators changed in a way that is (practically) determined
- by the <u>implementation</u> and not by the
- <u>interface</u>.</li>
- </ol>
-
- <p>So in classic STL, it is not always possible to express
- whether <tt>it</tt> is valid or not. This is true also for
- <tt>insert</tt>, <i>e.g.</i>. Again, the iterator concept seems
- overloaded.</p>
-
- <h3><a name="assoc_methods" id="assoc_methods">Slightly
- Different Methods</a></h3>
-
- <p>[<a href="references.html#meyers02both">meyers02both</a>]
- points out that a class's methods should comprise only
- operations which depend on the class's internal structure;
- other operations are best designed as external functions.
- Possibly, therefore, the STL's associative containers lack some
- useful methods, and provide some other methods which would be
- better left out (<i>e.g.</i>, [<a href=
- "references.html#sgi_stl">sgi_stl</a>] ).</p>
-
- <h4><a name="assoc_ers_methods" id="assoc_ers_methods">Methods
- Related to Erase</a></h4>
-
- <ol>
- <li>Order-preserving STL associative containers provide the
- method
- <pre>
-iterator
- erase
- (iterator it)
-</pre>which takes an iterator, erases the corresponding element,
-and returns an iterator to the following element. Also hash-based
-STL associative containers provide this method. This <u>seemingly
-increases</u> genericity between associative containers, since, <i>
- e.g.</i>, it is possible to use
- <pre>
-<b>typename</b> C::iterator it = c.begin();
-<b>typename</b> C::iterator e_it = c.end();
-
-<b>while</b>(it != e_it)
- it = pred(*it)? c.erase(it) : ++it;
-</pre>in order to erase from a container object <tt>
- c</tt> all element which match a predicate <tt>pred</tt>.
- However, in a different sense this actually
- <u>decreases</u> genericity: an integral implication of
- this method is that tree-based associative containers'
- memory use is linear in the total number of elements they
- store, while hash-based containers' memory use is unbounded
- in the total number of elements they store. Assume a
- hash-based container is allowed to decrease its size when
- an element is erased. Then the elements might be rehashed,
- which means that there is no "next" element - it is simply
- undefined. Consequently, it is possible to infer from the
- fact that STL hash-based containers provide this method
- that they cannot downsize when elements are erased
- (<a href="assoc_performance_tests.html#hash_based">Performance
- Tests::Hash-Based Container Tests</a> quantifies this.) As
- a consequence, different code is needed to manipulate
- different containers, assuming that memory should be
- conserved. <tt>pb_ds</tt>'s non-order preserving
- associative containers omit this method.
- </li>
-
- <li>All of <tt>pb_ds</tt>'s associative containers include a
- conditional-erase method
- <pre>
-<b>template</b>&lt;
- <b>class</b> Pred&gt;
-size_type
- erase_if
- (Pred pred)
-</pre>which erases all elements matching a predicate. This is
-probably the only way to ensure linear-time multiple-item erase
-which can actually downsize a container.
- </li>
-
- <li>STL associative containers provide methods for
- multiple-item erase of the form
- <pre>
-size_type
- erase
- (It b,
- It e)
-</pre>erasing a range of elements given by a pair of iterators. For
-tree-based or trie-based containers, this can implemented more
-efficiently as a (small) sequence of split and join operations. For
-other, unordered, containers, this method isn't much better than an
-external loop. Moreover, if <tt>c</tt> is a hash-based container,
-then, <i>e.g.</i>, <tt>c.erase(c.find(2), c.find(5))</tt> is almost
-certain to do something different than erasing all elements whose
-keys are between 2 and 5, and is likely to produce other undefined
-behavior.
- </li>
- </ol>
-
- <h4><a name="assoc_split_join_methods" id=
- "assoc_split_join_methods">Methods Related to Split and
- Join</a></h4>
-
- <p>It is well-known that tree-based and trie-based container
- objects can be efficiently split or joined [<a href=
- "references.html#clrs2001">clrs2001</a>]. Externally splitting
- or joining trees is super-linear, and, furthermore, can throw
- exceptions. Split and join methods, consequently, seem good
- choices for tree-based container methods, especially, since as
- noted just before, they are efficient replacements for erasing
- sub-sequences. <a href=
- "assoc_performance_tests.html#tree_like_based">Performance
- Tests::Tree-Like-Based Container Tests</a> quantifies this.</p>
-
- <h4><a name="assoc_insert_methods" id=
- "assoc_insert_methods">Methods Related to Insert</a></h4>
-
- <p>STL associative containers provide methods of the form</p>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
-size_type
- insert
- (It b,
- It e);
-</pre>for inserting a range of elements given by a pair of
-iterators. At best, this can be implemented as an external loop,
-or, even more efficiently, as a join operation (for the case of
-tree-based or trie-based containers). Moreover, these methods seem
-similar to constructors taking a range given by a pair of
-iterators; the constructors, however, are transactional, whereas
-the insert methods are not; this is possibly confusing.
-
- <h4><a name="assoc_equiv_comp_methods" id=
- "assoc_equiv_comp_methods">Functions Related to
- Comparison</a></h4>
-
- <p>Associative containers are parametrized by policies
- allowing to test key equivalence; <i>e.g.</i> a hash-based
- container can do this through its equivalence functor, and a
- tree-based container can do this through its comparison
- functor. In addition, some STL associative containers have
- global function operators, <i>e.g.</i>,
- <tt><b>operator</b>==</tt> and <tt><b>operator</b>&lt;=</tt>,
- that allow comparing entire associative containers.</p>
-
- <p>In our opinion, these functions are better left out. To
- begin with, they do not significantly improve over an external
- loop. More importantly, however, they are possibly misleading -
- <tt><b>operator</b>==</tt>, for example, usually checks for
- equivalence, or interchangeability, but the associative
- container cannot check for values' equivalence, only keys'
- equivalence; also, are two containers considered equivalent if
- they store the same values in different order? this is an
- arbitrary decision.</p>
-
- <h3><a name="assoc_mapping_semantics" id=
- "assoc_mapping_semantics">Alternative to Multiple Equivalent
- Keys</a></h3>
-
- <p>Maps (or sets) allow mapping (or storing) unique-key values.
- The STL, however, also supplies associative containers which
- map (or store) multiple values with equivalent keys:
- <tt>std::multimap</tt>, <tt>std::multiset</tt>,
- <tt>std::tr1::unordered_multimap</tt>, and
- <tt>unordered_multiset</tt>. We first discuss how these might
- be used, then why we think it is best to avoid them.</p>
-
- <p>Suppose one builds a simple bank-account application that
- records for each client (identified by an <tt>std::string</tt>)
- and account-id (marked by an <tt><b>unsigned long</b></tt>) -
- the balance in the account (described by a
- <tt><b>float</b></tt>). Suppose further that ordering this
- information is not useful, so a hash-based container is
- preferable to a tree based container. Then one can use</p>
- <pre>
-std::tr1::unordered_map&lt;std::pair&lt;std::string, <b>unsigned long</b>&gt;, <b>float</b>, ...&gt;
-</pre>which <u>hashes every combination of client and
-account-id</u>. This might work well, except for the fact that it
-is now impossible to efficiently list all of the accounts of a
-specific client (this would practically require iterating over all
-entries). Instead, one can use
- <pre>
-std::tr1::unordered_multimap&lt;std::pair&lt;std::string, <tt><b>unsigned long</b></tt>&gt;, <b>float</b>, ...&gt;
-</pre>which <u>hashes every client</u>, and <u>decides equivalence
-based on client</u> only. This will ensure that all accounts
-belonging to a specific user are stored consecutively.
-
- <p>Also, suppose one wants an integers' priority queue
- (<i>i.e.,</i> a container that supports <tt>push</tt>,
- <tt>pop</tt>, and <tt>top</tt> operations, the last of which
- returns the largest <tt><b>int</b></tt>) that also supports
- operations such as <tt>find</tt> and <tt>lower_bound</tt>. A
- reasonable solution is to build an adapter over
- <tt>std::set&lt;<b>int</b>&gt;</tt>. In this adapter,
- <i>e.g.</i>, <tt>push</tt> will just call the tree-based
- associative container's <tt>insert</tt> method; <tt>pop</tt>
- will call its <tt>end</tt> method, and use it to return the
- preceding element (which must be the largest). Then this might
- work well, except that the container object cannot hold
- multiple instances of the same integer (<tt>push(4)</tt>,
- <i>e.g.</i>, will be a no-op if <tt>4</tt> is already in the
- container object). If multiple keys are necessary, then one
- might build the adapter over an
- <tt>std::multiset&lt;<b>int</b>&gt;</tt>.</p>
-
- <p class="c1">STL non-unique-mapping containers, then, are
- useful when (1) a key can be decomposed in to a primary key and
- a secondary key, (2) a key is needed multiple times, or (3) any
- combination of (1) and (2).</p>
-
- <p>Figure <a href="#embedded_lists_1">Non-unique mapping
- containers in the STL's design</a> shows how the STL's design
- works internally; in this figure nodes shaded equally represent
- equivalent-key values. Equivalent keys are stored consecutively
- using the properties of the underlying data structure: binary
- search trees (Figure <a href="#embedded_lists_1">Non-unique
- mapping containers in the STL's design</a>-A) store
- equivalent-key values consecutively (in the sense of an
- in-order walk) naturally; collision-chaining hash tables
- (Figure <a href="#embedded_lists_1">Non-unique mapping
- containers in the STL's design</a>-B) store equivalent-key
- values in the same bucket, the bucket can be arranged so that
- equivalent-key values are consecutive.</p>
-
- <h6 class="c1"><a name="embedded_lists_1" id=
- "embedded_lists_1"><img src="embedded_lists_1.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Non-unique mapping containers in the STL's
- design.</h6>
-
- <p>Put differently, STL non-unique mapping
- associative-containers are associative containers that map
- primary keys to linked lists that are embedded into the
- container. Figure <a href="#embedded_lists_2">Effect of
- embedded lists in STL multimaps</a> shows again the two
- containers from Figure <a href="#embedded_lists_1">Non-unique
- mapping containers in the STL's design</a>, this time with the
- embedded linked lists of the grayed nodes marked
- explicitly.</p>
-
- <h6 class="c1"><a name="embedded_lists_2" id=
- "embedded_lists_2"><img src="embedded_lists_2.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Effect of embedded lists in STL multimaps.</h6>
-
- <p>These embedded linked lists have several disadvantages.</p>
-
- <ol>
- <li>The underlying data structure embeds the linked lists
- according to its own consideration, which means that the
- search path for a value might include several different
- equivalent-key values. For example, the search path for the
- the black node in either of Figures <a href=
- "#embedded_lists_1">Non-unique mapping containers in the
- STL's design</a> A or B, includes more than a single gray
- node.</li>
-
- <li>The links of the linked lists are the underlying
- data structures' nodes, which typically are quite structured.
- <i>E.g.</i>, in the case of tree-based containers (Figure
- <a href="#embedded_lists_2">Effect of embedded lists in STL
- multimaps</a>-B), each "link" is actually a node with three
- pointers (one to a parent and two to children), and a
- relatively-complicated iteration algorithm. The linked lists,
- therefore, can take up quite a lot of memory, and iterating
- over all values equal to a given key (<i>e.g.</i>, through
- the return value of the STL's <tt>equal_range</tt>) can be
- expensive.</li>
-
- <li>The primary key is stored multiply; this uses more
- memory.</li>
-
- <li>Finally, the interface of this design excludes several
- useful underlying data structures. <i>E.g.</i>, of all the
- unordered self-organizing data structures, practically only
- collision-chaining hash tables can (efficiently) guarantee
- that equivalent-key values are stored consecutively.</li>
- </ol>
-
- <p>The above reasons hold even when the ratio of secondary keys
- to primary keys (or average number of identical keys) is small,
- but when it is large, there are more severe problems:</p>
-
- <ol>
- <li>The underlying data structures order the links inside
- each embedded linked-lists according to their internal
- considerations, which effectively means that each of the
- links is unordered. Irrespective of the underlying
- data structure, searching for a specific value can degrade to
- linear complexity.</li>
-
- <li>Similarly to the above point, it is impossible to apply
- to the secondary keys considerations that apply to primary
- keys. For example, it is not possible to maintain secondary
- keys by sorted order.</li>
-
- <li>While the interface "understands" that all equivalent-key
- values constitute a distinct list (<i>e.g.</i>, through
- <tt>equal_range</tt>), the underlying data structure
- typically does not. This means, <i>e.g.</i>, that operations
- such as erasing from a tree-based container all values whose
- keys are equivalent to a a given key can be super-linear in
- the size of the tree; this is also true also for several
- other operations that target a specific list.</li>
- </ol>
-
- <p>In <tt>pb_ds</tt>, therefore, all associative containers map
- (or store) unique-key values. One can (1) map primary keys to
- secondary associative-containers (<i>i.e.</i>, containers of
- secondary keys) or non-associative containers (2) map identical
- keys to a size-type representing the number of times they
- occur, or (3) any combination of (1) and (2). Instead of
- allowing multiple equivalent-key values, <tt>pb_ds</tt>
- supplies associative containers based on underlying
- data structures that are suitable as secondary
- associative-containers (see <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>).</p>
-
- <p>Figures <a href="#embedded_lists_3">Non-unique mapping
- containers in <tt>pb_ds</tt></a> A and B show the equivalent
- structures in <tt>pb_ds</tt>'s design, to those in Figures
- <a href="#embedded_lists_1">Non-unique mapping containers in
- the STL's design</a> A and B, respectively. Each shaded box
- represents some size-type or secondary
- associative-container.</p>
-
- <h6 class="c1"><a name="embedded_lists_3" id=
- "embedded_lists_3"><img src="embedded_lists_3.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Non-unique mapping containers in the
- <tt>pb_ds</tt>.</h6>
-
- <p>In the first example above, then, one would use an
- associative container mapping each user to an associative
- container which maps each application id to a start time (see
- <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_multimap.cc"><tt>basic_multimap.cc</tt></a>);
- in the second example, one would use an associative container
- mapping each <tt><b>int</b></tt> to some size-type indicating
- the number of times it logically occurs (see <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_multiset.cc"><tt>basic_multiset.cc</tt></a>).</p>
-
- <p><a href=
- "assoc_performance_tests.html#multimaps">Associative-Container
- Performance Tests::Multimaps</a> quantifies some of these
- points, and <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a> shows some simple calculations.</p>
-
- <p><a href="assoc_examples.html#mmaps">Associative-Container
- Examples::Multimaps</a> shows some simple examples of using
- "multimaps".</p>
-
- <p><a href="lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a> discusses types of
- containers especially suited as secondary
- associative-containers.</p>
-
- <h2><a name="pq" id="pq">Priority Queues</a></h2>
-
- <h3><a name="pq_more_ops" id="pq_more_ops">Slightly Different
- Methods</a></h3>
-
- <p>Priority queues are containers that allow efficiently
- inserting values and accessing the maximal value (in the sense
- of the container's comparison functor); <i>i.e.</i>, their
- interface supports <tt>push</tt> and <tt>pop</tt>. The STL's
- priority queues indeed support these methods, but they support
- little else. For algorithmic and software-engineering purposes,
- other methods are needed:</p>
-
- <ol>
- <li>Many graph algorithms [<a href=
- "references.html#clrs2001">clrs2001</a>] require increasing a
- value in a priority queue (again, in the sense of the
- container's comparison functor), or joining two
- priority-queue objects.</li>
-
- <li>It is sometimes necessary to erase an arbitrary value in
- a priority queue. For example, consider the <tt>select</tt>
- function for monitoring file descriptors:
- <pre>
-<b>int</b>
- select
- (<b>int</b> nfds,
- fd_set *readfds,
- fd_set *writefds,
- fd_set *errorfds,
- <b>struct</b> timeval *timeout);
-</pre>then, as the <tt>select</tt> manual page [<a href=
-"references.html#select_man">select_man</a>] states:
-
- <p><q>The nfds argument specifies the range of file
- descriptors to be tested. The select() function tests file
- descriptors in the range of 0 to nfds-1.</q></p>
-
- <p>It stands to reason, therefore, that we might wish to
- maintain a minimal value for <tt>nfds</tt>, and priority
- queues immediately come to mind. Note, though, that when a
- socket is closed, the minimal file description might
- change; in the absence of an efficient means to erase an
- arbitrary value from a priority queue, we might as well
- avoid its use altogether.</p>
-
- <p><a href="pq_examples.html#xref">Priority-Queue
- Examples::Cross-Referencing</a> shows examples for these
- types of operations.</p>
- </li>
-
- <li>STL containers typically support iterators. It is
- somewhat unusual for <tt>std::priority_queue</tt> to omit
- them (see, <i>e.g.</i>, [<a href=
- "references.html#meyers01stl">meyers01stl</a>]). One might
- ask why do priority queues need to support iterators, since
- they are self-organizing containers with a different purpose
- than abstracting sequences. There are several reasons:
-
- <ol>
- <li>Iterators (even in self-organizing containers) are
- useful for many purposes, <i>e.g.</i>, cross-referencing
- containers, serialization, and debugging code that uses
- these containers.</li>
-
- <li>The STL's hash-based containers support iterators,
- even though they too are self-organizing containers with
- a different purpose than abstracting sequences.</li>
-
- <li>In STL-like containers, it is natural to specify the
- interface of operations for modifying a value or erasing
- a value (discussed previously) in terms of a iterators.
- This is discussed further in <a href=
- "pq_design.html#pq_it">Design::Priority
- Queues::Iterators</a>. It should be noted that the STL's
- containers also use iterators for accessing and
- manipulating a specific value. <i>E.g.</i>, in hash-based
- containers, one checks the existence of a key by
- comparing the iterator returned by <tt>find</tt> to the
- iterator returned by <tt>end</tt>, and not by comparing a
- pointer returned by <tt>find</tt> to <tt>NULL</tt>.</li>
- </ol>
- </li>
- </ol>
-
- <p><a href="pq_performance_tests.html">Performance
- Tests::Priority Queues</a> quantifies some of these points.</p>
-
- <h3><a name="pq_ds_genericity" id="pq_ds_genericity">More Data
- Structures and Traits</a></h3>
-
- <p>There are three main implementations of priority queues: the
- first employs a binary heap, typically one which uses a
- sequence; the second uses a tree (or forest of trees), which is
- typically less structured than an associative container's tree;
- the third simply uses an associative container. These are
- shown, respectively, in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 and A2, B, and C.</p>
-
- <h6 class="c1"><a name="pq_different_underlying_dss" id=
- "pq_different_underlying_dss"><img src=
- "pq_different_underlying_dss.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Underlying Priority-Queue Data-Structures.</h6>
-
- <p>No single implementation can completely replace any of the
- others. Some have better <tt>push</tt> and <tt>pop</tt>
- amortized performance, some have better bounded (worst case)
- response time than others, some optimize a single method at the
- expense of others, <i>etc.</i>. In general the "best"
- implementation is dictated by the problem (see <a href=
- "pq_performance_tests.html#pq_observations">Performance
- Tests::Priority Queues::Observations</a>).</p>
-
- <p>As with associative containers (see <a href=
- "#assoc_ds_genericity">Associative Containers::Traits for
- Underlying Data-Structures</a>), the more implementations
- co-exist, the more necessary a traits mechanism is for handling
- generic containers safely and efficiently. This is especially
- important for priority queues, since the invalidation
- guarantees of one of the most useful data structures - binary
- heaps - is markedly different than those of most of the
- others.</p>
-
- <p><a href="pq_design.html#pq_traits">Design::Priority
- Queues::Traits</a> discusses this further.</p>
-
- <h3><a name="pq_binary_heap" id="pq_binary_heap">Binary Heap
- Implementation</a></h3>
-
- <p>Binary heaps are one of the most useful underlying
- data structures for priority queues. They are very efficient in
- terms of memory (since they don't require per-value structure
- metadata), and have the best amortized <tt>push</tt> and
- <tt>pop</tt> performance for primitive types (<i>e.g.</i>,
- <tt><b>int</b></tt>s).</p>
-
- <p>The STL's <tt>priority_queue</tt> implements this data
- structure as an adapter over a sequence, typically
- <tt>std::vector</tt> or <tt>std::deque</tt>, which correspond
- to Figures <a href="#pq_different_underlying_dss">Underlying
- Priority-Queue Data-Structures</a> A1 and A2, respectively.</p>
-
- <p>This is indeed an elegant example of the adapter concept and
- the algorithm/container/iterator decomposition (see [<a href=
- "references.html#nelson96stlpq">nelson96stlpql</a>]). There are
- possibly reasons, however, why a binary-heap priority queue
- would be better implemented as a container instead of a
- sequence adapter:</p>
-
- <ol>
- <li><tt>std::priority_queue</tt> cannot erase values from its
- adapted sequence (irrespective of the sequence type). This
- means that the memory use of an <tt>std::priority_queue</tt>
- object is always proportional to the maximal number of values
- it ever contained, and not to the number of values that it
- currently contains (see <a href=
- "priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a>); this implementation
- of binary heaps acts very differently than other underlying
- data structures (<i>e.g.</i>, pairing heaps).</li>
-
- <li>Some combinations of adapted sequences and value types
- are very inefficient or just don't make sense. If one uses
- <tt>std::priority_queue&lt;std::vector&lt;std::string&gt;
- &gt; &gt;</tt>, for example, then not only will each
- operation perform a logarithmic number of
- <tt>std::string</tt> assignments, but, furthermore, any
- operation (including <tt>pop</tt>) can render the container
- useless due to exceptions. Conversely, if one uses
- <tt>std::priority_queue&lt;std::deque&lt;<b>int</b>&gt; &gt;
- &gt;</tt>, then each operation uses incurs a logarithmic
- number of indirect accesses (through pointers) unnecessarily.
- It might be better to let the container make a conservative
- deduction whether to use the structure in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 or A2.</li>
-
- <li>There does not seem to be a systematic way to determine
- what exactly can be done with the priority queue.
-
- <ol>
- <li>If <tt>p</tt> is a priority queue adapting an
- <tt>std::vector</tt>, then it is possible to iterate over
- all values by using <tt>&amp;p.top()</tt> and
- <tt>&amp;p.top() + p.size()</tt>, but this will not work
- if <tt>p</tt> is adapting an <tt>std::deque</tt>; in any
- case, one cannot use <tt>p.begin()</tt> and
- <tt>p.end()</tt>. If a different sequence is adapted, it
- is even more difficult to determine what can be
- done.</li>
-
- <li>If <tt>p</tt> is a priority queue adapting an
- <tt>std::deque</tt>, then the reference return by
- <tt>p.top()</tt> will remain valid until it is popped,
- but if <tt>p</tt> adapts an <tt>std::vector</tt>, the
- next <tt>push</tt> will invalidate it. If a different
- sequence is adapted, it is even more difficult to
- determine what can be done.</li>
- </ol>
- </li>
-
- <li>Sequence-based binary heaps can still implement
- linear-time <tt>erase</tt> and <tt>modify</tt> operations.
- This means that if one needs, <i>e.g.</i>, to erase a small
- (say logarithmic) number of values, then one might still
- choose this underlying data structure. Using
- <tt>std::priority_queue</tt>, however, this will generally
- change the order of growth of the entire sequence of
- operations.</li>
- </ol>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/move_to_front_lu_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/move_to_front_lu_policy.html
deleted file mode 100644
index 4ed4d40bd0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/move_to_front_lu_policy.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large.html b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large.html
deleted file mode 100644
index 74d33a3260..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large.html
+++ /dev/null
@@ -1,215 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Find Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Find Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges to about 20.</p>
-<p>The test measures the average find-time as a function of the
- number of values inserted. For <tt>pb_ds</tt>'s containers, it
- finds the secondary key from a container obtained from finding
- a primary key. For the native multimaps, it searches a range
- obtained using <tt>std::equal_range</tt> on a primary key.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc"><tt>multimap_text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 100 3 4 4)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the find-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_find_timing_test_large_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_find_timing_test_large_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_find_timing_test_large_s2p_tree">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_find_timing_test_large_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_find_timing_test_large_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_find_timing_test_large_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_find_timing_test_large_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_find_timing_test_large_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_find_timing_test_large_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_find_timing_test_large_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_find_timing_test_large_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_find_timing_test_large_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_gcc.png
deleted file mode 100644
index 03a62f52b0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.png
deleted file mode 100644
index 32a61cac9b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_msvc.png
deleted file mode 100644
index 4462d289af..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_gcc.png
deleted file mode 100644
index 89e464481f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.png
deleted file mode 100644
index 10b3980eda..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_msvc.png
deleted file mode 100644
index 20320953e0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small.html b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small.html
deleted file mode 100644
index 1b379d821c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small.html
+++ /dev/null
@@ -1,215 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Find Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Find Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 400 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges from 1 to 5.</p>
-<p>The test measures the average find-time as a function of the
- number of values inserted. For <tt>pb_ds</tt>'s containers, it
- finds the secondary key from a container obtained from finding
- a primary key. For the native multimaps, it searches a range
- obtained using <tt>std::equal_range</tt> on a primary key.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc"><tt>multimap_text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 400 1 1 6)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the find-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_find_timing_test_small_s2p_tree">
-<div id="NTG_assoc">
-<div id="NHG_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_find_timing_test_small_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: NHG Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_find_timing_test_small_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_find_timing_test_small_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_find_timing_test_small_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_find_timing_test_small_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_find_timing_test_small_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_find_timing_test_small_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_find_timing_test_small_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_find_timing_test_small_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_find_timing_test_small_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_find_timing_test_small_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_gcc.png
deleted file mode 100644
index 60e850937a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_local.png
deleted file mode 100644
index a8fa261177..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_msvc.png
deleted file mode 100644
index 11aa9e07b6..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_gcc.png
deleted file mode 100644
index f54369b15b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.png
deleted file mode 100644
index b3d10612f7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_msvc.png
deleted file mode 100644
index 035fd9389b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large.html b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large.html
deleted file mode 100644
index 4affbf4405..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large.html
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash-List "Multimap" Text Memory Use Test with Large
- Average Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Memory Use Test with Large Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys. The test measures the memory use
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc"><tt>multimap_text_insert_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 100 200 2100 100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the memory scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_mem_usage_test_large_s2p_tree">
-<div id="NTG_assoc">
-<div id="NHG_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: NHG Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_mem_usage_test_large_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_mem_usage_test_large_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_mem_usage_test_large_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_mem_usage_test_large_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_mem_usage_test_large_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_mem_usage_test_large_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_mem_usage_test_large_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png
deleted file mode 100644
index 51a3f8d61c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.png
deleted file mode 100644
index 8af7100c6e..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png
deleted file mode 100644
index 3a938c0bb0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png
deleted file mode 100644
index a992d8f7cf..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.png
deleted file mode 100644
index 63c0c8db79..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png
deleted file mode 100644
index 26841bd107..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small.html b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small.html
deleted file mode 100644
index 462fce4ca3..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash-List "Multimap" Text Memory Use Test with Small
- Average Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Memory Use Test with Small Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges to about 20.</p>
-<p>The test measures the memory use as a function of the number
- of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc"><tt>multimap_text_insert_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 100 3 4 4)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the memory scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_mem_usage_test_small_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_mem_usage_test_small_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_mem_usage_test_small_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_mem_usage_test_small_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_mem_usage_test_small_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_mem_usage_test_small_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_mem_usage_test_small_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_mem_usage_test_small_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png
deleted file mode 100644
index d3eba9da47..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.png
deleted file mode 100644
index 589dccdefa..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png
deleted file mode 100644
index 1828896ee5..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png
deleted file mode 100644
index 9334bc35bc..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.png
deleted file mode 100644
index d7322f287a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png
deleted file mode 100644
index 2f20e57e55..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large.html b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large.html
deleted file mode 100644
index b9a2d99529..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Insert Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Insert Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges to about 20.</p>
-<p>The test measures the memory use as a function of the number
- of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc"><tt>multimap_text_insert_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 400 1 6 6)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the insert-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_timing_test_large_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_timing_test_large_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_timing_test_large_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_timing_test_large_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_timing_test_large_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_timing_test_large_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_timing_test_large_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_timing_test_large_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_timing_test_large_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_timing_test_large_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_timing_test_large_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_timing_test_large_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_gcc.png
deleted file mode 100644
index 55b0bf4673..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_local.png
deleted file mode 100644
index 5f89460087..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_msvc.png
deleted file mode 100644
index 02f5d0b20a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_gcc.png
deleted file mode 100644
index 83366eb375..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.png
deleted file mode 100644
index 2b496b48d7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_msvc.png
deleted file mode 100644
index 47196bff7f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small.html b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small.html
deleted file mode 100644
index cda3629b7b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Insert Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Insert Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 400 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges from 1 to 5.</p>
-<p>The test measures the average insert-time as a function of
- the number of values inserted. For <tt>pb_ds</tt>'s containers,
- it inserts a primary key into the primary associative
- container, then a secondary key into the secondary associative
- container. For the native multimaps, it obtains a range using
- <tt>std::equal_range</tt>, and inserts a value only if it was
- not contained already.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc"><tt>multimap_text_insert_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 400 1 1 6)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the insert-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_timing_test_small_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_timing_test_small_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_timing_test_small_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_timing_test_small_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_timing_test_small_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_timing_test_small_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_timing_test_small_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_timing_test_small_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_timing_test_small_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_timing_test_small_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>&alpha;<sub>min</sub></i> = <i>1/8</i> and <i>&alpha;<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_timing_test_small_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_timing_test_small_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_gcc.png
deleted file mode 100644
index 3c2d87ecfa..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.png
deleted file mode 100644
index 4af78faa52..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_msvc.png
deleted file mode 100644
index 81d5839044..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_gcc.png
deleted file mode 100644
index 368f07350c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.png
deleted file mode 100644
index 40b5b2c432..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_msvc.png
deleted file mode 100644
index 99f2d690fa..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/null_hash_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/null_hash_fn.html
deleted file mode 100644
index 34f1ee06aa..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/null_hash_fn.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_hash_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_hash_fn</tt> Interface</h1>
-
- <p>A "null" hash function, indicating that the combining hash
- function is actually a ranged hash function.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy. See
- also <a href=
- "hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a>.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/null_lu_metadata.html b/libstdc++-v3/doc/html/ext/pb_ds/null_lu_metadata.html
deleted file mode 100644
index e8fb6a3c82..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/null_lu_metadata.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_lu_metadata Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_lu_metadata</tt> Interface</h1>
-
- <p>A null type that means that each link in a list-based
- container does not actually need metadata.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/list_update_policy.hpp"><tt>list_update_policy.hpp</tt></a></p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/null_mapped_type.html b/libstdc++-v3/doc/html/ext/pb_ds/null_mapped_type.html
deleted file mode 100644
index d62fac5c93..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/null_mapped_type.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_mapped_type Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_mapped_type</tt> Interface</h1>
-
- <p>A mapped-policy indicating that an associative container is
- a "set"</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/null_probe_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/null_probe_fn.html
deleted file mode 100644
index 1c8811e965..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/null_probe_fn.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_probe_fn</tt> Interface</h1>
-
- <p>A "null" probe function, indicating that the combining probe
- function is actually a ranged probe function.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/null_tree_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/null_tree_node_update.html
deleted file mode 100644
index cc1c900547..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/null_tree_node_update.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_tree_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_tree_node_update</tt> Interface</h1>
-
- <p>A "null" node updater, indicating that no node updates are
- required.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tree_policy.hpp"><tt>tree_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/null_trie_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/null_trie_node_update.html
deleted file mode 100644
index 18ea00739d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/null_trie_node_update.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_trie_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_trie_node_update</tt> Interface</h1>
-
- <p>A "null" node updater, indicating that no node updates are
- required.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/ov_tree_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/ov_tree_tag.html
deleted file mode 100644
index 01d7f9082f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/ov_tree_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>ov_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>ov_tree_tag</tt> Interface</h1>
-
- <p>Ordered-vector tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_heap_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/pairing_heap_tag.html
deleted file mode 100644
index 5901d1a88c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_heap_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>pairing_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>pairing_heap_tag</tt> Interface</h1>
-
- <p>Pairing-heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_gcc.png
deleted file mode 100644
index 4168787eca..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.png
deleted file mode 100644
index 97ca4e9daa..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_msvc.png
deleted file mode 100644
index 42b707965f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_gcc.png
deleted file mode 100644
index 9a7ce6c361..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.png
deleted file mode 100644
index cedcb4cf4b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_msvc.png
deleted file mode 100644
index d5488efcf4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pat_trie_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/pat_trie_tag.html
deleted file mode 100644
index 2e9a32c914..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pat_trie_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>pat_trie_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>pat_trie_tag</tt> Interface</h1>
-
- <p>PATRICIA trie data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/point_invalidation_guarantee.html b/libstdc++-v3/doc/html/ext/pb_ds/point_invalidation_guarantee.html
deleted file mode 100644
index f67722169c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/point_invalidation_guarantee.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>point_invalidation_guarantee Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>point_invalidation_guarantee</tt> Interface</h1>
-
- <p>Signifies an invalidation guarantee that includes all those
- of its base, and additionally, that any point-type iterator,
- pointer, or reference to a container object's mapped value type
- is valid as long as its corresponding entry has not be erased,
- regardless of modifications to the container object.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_invalidation_guarantee.html"><span class=
-"c2"><tt>basic_invalidation_guarantee</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_container_traits.html b/libstdc++-v3/doc/html/ext/pb_ds/pq_container_traits.html
deleted file mode 100644
index dcd995f5f7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_container_traits.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>container_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>container_traits</tt> Interface</h1>
-
- <p>Traits of a priority-queue container based on its underlying
- data structure.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cntnr59189" id="Cntnr59189"><b>class</b> Cntnr</a>
-</pre>
- </td>
-
- <td>
- <p>Container type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Container Attributes</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="container_category1247973216" id=
-"container_category1247973216">container_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Underlying data structure.
-</pre>
- </td>
-
- <td>
- <p>Data structure category.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="invalidation_guarantee3793555937" id=
-"invalidation_guarantee3793555937">invalidation_guarantee</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Invalidation guarantee.
-</pre>
- </td>
-
- <td>
- <p>Invalidation-guarantee type.</p>
-
- <p>This is either <a href=
- "basic_invalidation_guarantee.html"><span class=
- "c2"><tt>basic_invalidation_guarantee</tt></span></a>,
- <a href="point_invalidation_guarantee.html"><span class=
- "c2"><tt>point_invalidation_guarantee</tt></span></a>, or
- <a href="range_invalidation_guarantee.html"><span class=
- "c2"><tt>range_invalidation_guarantee</tt></span></a></p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="split_join_can_throw3200477759" id=
-"split_join_can_throw3200477759">split_join_can_throw</a>
-</pre>
- </td>
-
- <td>
- <pre>
-True only if split or join operations can throw.
-</pre>
- </td>
-
- <td>
- <p>Split-join throw indicator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_design.html b/libstdc++-v3/doc/html/ext/pb_ds/pq_design.html
deleted file mode 100644
index 9595600452..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_design.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Priority-Queues</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The priority-queue container has the following
- declaration:</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Value_Type,
- <b>typename</b> Cmp_Fn = std::less&lt;Value_Type&gt;,
- <b>typename</b> Tag = <a href="pairing_heap_tag.html">pairing_heap_tag</a>,
- <b>typename</b> Allocator = std::allocator&lt;<b>char</b>&gt; &gt;
-<b>class</b> <a href="priority_queue.html">priority_queue</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Value_Type</tt> is the value type.</li>
-
- <li><tt>Cmp_Fn</tt> is a value comparison functor</li>
-
- <li><tt>Tag</tt> specifies which underlying data structure
- to use.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The <tt>Tag</tt> parameter specifies which underlying
- data structure to use. Instantiating it by <a href=
- "pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>,
- <a href=
- "binary_heap_tag.html"><tt>binary_heap_tag</tt></a>,
- <a href=
- "binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>,
- <a href=
- "rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>,
- or <a href=
- "thin_heap_tag.html"><tt>thin_heap_tag</tt></a>,
- specifies, respectively, an underlying pairing heap [<a href=
- "references.html#fredman86pairing">fredman86pairing</a>],
- binary heap [<a href="references.html#clrs2001">clrs2001</a>],
- binomial heap [<a href=
- "references.html#clrs2001">clrs2001</a>], a binomial heap with
- a redundant binary counter [<a href=
- "references.html#maverik_lowerbounds">maverik_lowerbounds</a>],
- or a thin heap [<a href=
- "references.html#kt99fat_heaps">kt99fat_heas</a>]. These are
- explained further in <a href="#pq_imp">Implementations</a>.</p>
-
- <p>As mentioned in <a href=
- "tutorial.html#pq">Tutorial::Priority Queues</a>,
- <a href=
- "priority_queue.html"><tt>__gnu_pbds::priority_queue</tt></a>
- shares most of the same interface with <tt>std::priority_queue</tt>.
- <i>E.g.</i> if <tt>q</tt> is a priority queue of type
- <tt>Q</tt>, then <tt>q.top()</tt> will return the "largest"
- value in the container (according to <tt><b>typename</b>
- Q::cmp_fn</tt>). <a href=
- "priority_queue.html"><tt>__gnu_pbds::priority_queue</tt></a>
- has a larger (and very slightly different) interface than
- <tt>std::priority_queue</tt>, however, since typically
- <tt>push</tt> and <tt>pop</tt> are deemed insufficient for
- manipulating priority-queues. </p>
-
- <p>Different settings require different priority-queue
- implementations which are described in <a href=
- "#pq_imp">Implementations</a>; <a href="#pq_traits">Traits</a>
- discusses ways to differentiate between the different traits of
- different implementations.</p>
-
- <h2><a name="pq_it" id="pq_it">Iterators</a></h2>
-
- <p>There are many different underlying-data structures for
- implementing priority queues. Unfortunately, most such
- structures are oriented towards making <tt>push</tt> and
- <tt>top</tt> efficient, and consequently don't allow efficient
- access of other elements: for instance, they cannot support an efficient
- <tt>find</tt> method. In the use case where it
- is important to both access and "do something with" an
- arbitrary value, one would be out of luck. For example, many graph algorithms require
- modifying a value (typically increasing it in the sense of the
- priority queue's comparison functor).</p>
-
- <p>In order to access and manipulate an arbitrary value in a
- priority queue, one needs to reference the internals of the
- priority queue from some form of an associative container -
- this is unavoidable. Of course, in order to maintain the
- encapsulation of the priority queue, this needs to be done in a
- way that minimizes exposure to implementation internals.</p>
-
- <p>In <tt>pb_ds</tt> the priority queue's <tt>insert</tt>
- method returns an iterator, which if valid can be used for subsequent <tt>modify</tt> and
- <tt>erase</tt> operations. This both preserves the priority
- queue's encapsulation, and allows accessing arbitrary values (since the
- returned iterators from the <tt>push</tt> operation can be
- stored in some form of associative container).</p>
-
- <p>Priority queues' iterators present a problem regarding their
- invalidation guarantees. One assumes that calling
- <tt><b>operator</b>++</tt> on an iterator will associate it
- with the "next" value. Priority-queues are
- self-organizing: each operation changes what the "next" value
- means. Consequently, it does not make sense that <tt>push</tt>
- will return an iterator that can be incremented - this can have
- no possible use. Also, as in the case of hash-based containers,
- it is awkward to define if a subsequent <tt>push</tt> operation
- invalidates a prior returned iterator: it invalidates it in the
- sense that its "next" value is not related to what it
- previously considered to be its "next" value. However, it might not
- invalidate it, in the sense that it can be
- de-referenced and used for <tt>modify</tt> and <tt>erase</tt>
- operations.</p>
-
- <p>Similarly to the case of the other unordered associative
- containers, <tt>pb_ds</tt> uses a distinction between
- point-type and range type iterators. A priority queue's <tt>iterator</tt> can always be
- converted to a <tt>point_iterator</tt>, and a
- <tt>const_iterator</tt> can always be converted to a
- <tt>const_point_iterator</tt>.</p>
-
- <p>The following snippet demonstrates manipulating an arbitrary
- value:</p>
- <pre>
-<i>// A priority queue of integers.</i>
-<a href=
-"priority_queue.html">priority_queue</a>&lt;<b>int</b>&gt; p;
-
-<i>// Insert some values into the priority queue.</i>
-<a href=
-"priority_queue.html">priority_queue</a>&lt;<b>int</b>&gt;::point_iterator it = p.push(0);
-
-p.push(1);
-p.push(2);
-
-<i>// Now modify a value.</i>
-p.modify(it, 3);
-
-assert(p.top() == 3);
-</pre>
-
- <p>(<a href="pq_examples.html#xref">Priority Queue
- Examples::Cross-Referencing</a> shows a more detailed
- example.)</p>
-
- <p>It should be noted that an alternative design could embed an
- associative container in a priority queue. Could, but most probably should not. To begin with, it should be noted that one
- could always encapsulate a priority queue and an associative
- container mapping values to priority queue iterators with no
- performance loss. One cannot, however, "un-encapsulate" a
- priority queue embedding an associative container, which might
- lead to performance loss. Assume, that one needs to
- associate each value with some data unrelated to priority
- queues. Then using <tt>pb_ds</tt>'s design, one could use an
- associative container mapping each value to a pair consisting
- of this data and a priority queue's iterator. Using the
- embedded method would need to use two associative
- containers. Similar problems might arise in cases where a value
- can reside simultaneously in many priority queues.</p>
-
- <h2><a name="pq_imp" id="pq_imp">Implementations</a></h2>
-
- <p>There are three main implementations of priority queues: the
- first employs a binary heap, typically one which uses a
- sequence; the second uses a tree (or forest of trees), which is
- typically less structured than an associative container's tree;
- the third simply uses an associative container. These are
- shown, respectively, in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 and A2, Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B, and Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> C.</p>
-
- <h6 class="c1"><a name="pq_different_underlying_dss" id=
- "pq_different_underlying_dss"><img src=
- "pq_different_underlying_dss.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Underlying Priority-Queue Data-Structures.</h6>
-
- <p>Roughly speaking, any value that is both pushed and popped
- from a priority queue must incur a logarithmic expense (in the
- amortized sense). Any priority queue implementation that would
- avoid this, would violate known bounds on comparison-based
- sorting (see, <i>e.g.</i>, [<a href=
- "references.html#clrs2001">clrs2001</a>] and <a href=
- "references.html#brodal96priority">brodal96priority</a>]).</p>
-
- <p>Most implementations do
- not differ in the asymptotic amortized complexity of
- <tt>push</tt> and <tt>pop</tt> operations, but they differ in
- the constants involved, in the complexity of other operations
- (<i>e.g.</i>, <tt>modify</tt>), and in the worst-case
- complexity of single operations. In general, the more
- "structured" an implementation (<i>i.e.</i>, the more internal
- invariants it possesses) - the higher its amortized complexity
- of <tt>push</tt> and <tt>pop</tt> operations.</p>
-
- <p><tt>pb_ds</tt> implements different algorithms using a
- single class: <a href="priority_queue.html">priority_queue</a>.
- Instantiating the <tt>Tag</tt> template parameter, "selects"
- the implementation:</p>
-
- <ol>
- <li>Instantiating <tt>Tag = <a href=
- "binary_heap_tag.html">binary_heap_tag</a></tt> creates
- a binary heap of the form in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 or A2. The former is internally
- selected by <a href="priority_queue.html">priority_queue</a>
- if <tt>Value_Type</tt> is instantiated by a primitive type
- (<i>e.g.</i>, an <tt><b>int</b></tt>); the latter is
- internally selected for all other types (<i>e.g.</i>,
- <tt>std::string</tt>). This implementations is relatively
- unstructured, and so has good <tt>push</tt> and <tt>pop</tt>
- performance; it is the "best-in-kind" for primitive
- types, <i>e.g.</i>, <tt><b>int</b></tt>s. Conversely, it has
- high worst-case performance, and can support only linear-time
- <tt>modify</tt> and <tt>erase</tt> operations; this is
- explained further in <a href="#pq_traits">Traits</a>.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "pairing_heap_tag.html">pairing_heap_tag</a></tt>
- creates a pairing heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B. This implementations too is relatively
- unstructured, and so has good <tt>push</tt> and <tt>pop</tt>
- performance; it is the "best-in-kind" for non-primitive
- types, <i>e.g.</i>, <tt>std:string</tt>s. It also has very
- good worst-case <tt>push</tt> and <tt>join</tt> performance
- (<i>O(1)</i>), but has high worst-case <tt>pop</tt>
- complexity.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "binomial_heap_tag.html">binomial_heap_tag</a></tt>
- creates a binomial heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B. This implementations is more
- structured than a pairing heap, and so has worse
- <tt>push</tt> and <tt>pop</tt> performance. Conversely, it
- has sub-linear worst-case bounds for <tt>pop</tt>,
- <i>e.g.</i>, and so it might be preferred in cases where
- responsiveness is important.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "rc_binomial_heap_tag.html">rc_binomial_heap_tag</a></tt>
- creates a binomial heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B, accompanied by a redundant counter
- which governs the trees. This implementations is therefore
- more structured than a binomial heap, and so has worse
- <tt>push</tt> and <tt>pop</tt> performance. Conversely, it
- guarantees <i>O(1)</i> <tt>push</tt> complexity, and so it
- might be preferred in cases where the responsiveness of a
- binomial heap is insufficient.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "thin_heap_tag.html">thin_heap_tag</a></tt> creates a
- thin heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B. This implementations too is more
- structured than a pairing heap, and so has worse
- <tt>push</tt> and <tt>pop</tt> performance. Conversely, it
- has better worst-case and identical amortized complexities
- than a Fibonacci heap, and so might be more appropriate for
- some graph algorithms.</li>
- </ol>
-
- <p><a href="pq_performance_tests.html">Priority-Queue
- Performance Tests</a> shows some results for the above, and
- discusses these points further.</p>
-
- <p>Of course, one can use any order-preserving associative
- container as a priority queue, as in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> C, possibly by creating an adapter class
- over the associative container (much as
- <tt>std::priority_queue</tt> can adapt <tt>std::vector</tt>).
- This has the advantage that no cross-referencing is necessary
- at all; the priority queue itself is an associative container.
- Most associative containers are too structured to compete with
- priority queues in terms of <tt>push</tt> and <tt>pop</tt>
- performance.</p>
-
- <h2><a name="pq_traits" id="pq_traits">Traits</a></h2>
-
- <p>It would be nice if all priority queues could
- share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
- two binary heaps might throw an exception (not corrupt
- any of the heaps on which it operates), but joining two pairing
- heaps is exception free.</p>
-
- <p>Tags and traits are very useful for manipulating generic
- types. <a href=
- "priority_queue.html"><tt>__gnu_pbds::priority_queue</tt></a>
- publicly defines <tt>container_category</tt> as one of the tags
- discussed in <a href="#pq_imp">Implementations</a>. Given any
- container <tt>Cntnr</tt>, the tag of the underlying
- data structure can be found via <tt><b>typename</b>
- Cntnr::container_category</tt>; this is one of the types shown in
- Figure <a href="#pq_tag_cd">Data-structure tag class
- hierarchy</a>.</p>
-
- <h6 class="c1"><a name="pq_tag_cd" id=
- "pq_tag_cd"><img src="priority_queue_tag_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Data-structure tag class hierarchy.</h6>
-
- <p>Additionally, a traits mechanism can be used to query a
- container type for its attributes. Given any container
- <tt>Cntnr</tt>, then <tt><a href=
- "assoc_container_traits.html">__gnu_pbds::container_traits</a>&lt;Cntnr&gt;</tt>
- is a traits class identifying the properties of the
- container.</p>
-
- <p>To find if a container might throw if two of its objects are
- joined, one can use <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::split_join_can_throw</tt>,
- for example.</p>
-
- <p>Different priority-queue implementations have different invalidation guarantees. This is
- especially important, since as explained in <a href=
- "#pq_it">Iterators</a>, there is no way to access an arbitrary
- value of priority queues except for iterators. Similarly to
- associative containers, one can use
- <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::invalidation_guarantee</tt>
- to get the invalidation guarantee type of a priority queue.</p>
-
- <p>It is easy to understand from Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a>, what <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt>&lt;Cntnr&gt;::invalidation_guarantee</tt>
- will be for different implementations. All implementations of
- type <a href="#pq_different_underlying_dss">Underlying
- Priority-Queue Data-Structures</a> B have <a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>:
- the container can freely internally reorganize the nodes -
- range-type iterators are invalidated, but point-type iterators
- are always valid. Implementations of type <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 and A2 have <a href=
- "basic_invalidation_guarantee.html"><tt>basic_invalidation_guarantee</tt></a>:
- the container can freely internally reallocate the array - both
- point-type and range-type iterators might be invalidated.</p>
-
- <p>This has major implications, and constitutes a good reason to avoid
- using binary heaps. A binary heap can perform <tt>modify</tt>
- or <tt>erase</tt> efficiently <u>given a valid point-type
- iterator</u>. However, inn order to supply it with a valid point-type
- iterator, one needs to iterate (linearly) over all
- values, then supply the relevant iterator (recall that a
- range-type iterator can always be converted to a point-type
- iterator). This means that if the number of <tt>modify</tt> or
- <tt>erase</tt> operations is non-negligible (say
- super-logarithmic in the total sequence of operations) - binary
- heaps will perform badly.</p>
- <pre>
-
-</pre>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_examples.html b/libstdc++-v3/doc/html/ext/pb_ds/pq_examples.html
deleted file mode 100644
index 15311ebc35..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_examples.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Examples</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Examples</h1>
-
- <h2><a name="basic_usage" id="basic_usage">Basic Use</a></h2>
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc"><tt>basic_priority_queue.cc</tt></a>
- Basic use of priority queues.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_split_join.cc"><tt>priority_queue_split_join.cc</tt></a>
- Splitting and joining priority queues.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_erase_if.cc"><tt>priority_queue_erase_if.cc</tt></a>
- Conditionally erasing values from a container object.</li>
- </ol>
-
- <h2><a name="generics" id="generics">Generics</a></h2>
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_container_traits.cc"><tt>priority_queue_container_traits.cc</tt></a>
- Using <a href="assoc_container_traits.html"><tt>container_traits</tt></a>
- to query about underlying data structure behavior.</li>
- </ol>
-
- <h2><a name="xref" id="xref">Cross Referencing</a></h2>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_xref.cc"><tt>priority_queue_xref.cc</tt></a>
- Cross referencing an associative container and a priority
- queue.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc"><tt>priority_queue_dijkstra.cc</tt></a>
- Cross referencing a vector and a priority queue using a
- <u>very</u> simple version of Dijkstra's shortest path
- algorithm.</li>
- </ol>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_performance_tests.html b/libstdc++-v3/doc/html/ext/pb_ds/pq_performance_tests.html
deleted file mode 100644
index 3a6b269120..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_performance_tests.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority-Queue Performance Tests</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority-Queue Performance Tests</h1>
-<h2><a name="settings" id="settings">Settings</a></h2>
-<p>This section describes performance tests and their results.
- In the following, <a href="#gcc"><u>g++</u></a>, <a href="#msvc"><u>msvc++</u></a>, and <a href="#local"><u>local</u></a> (the build used for generating this
- documentation) stand for three different builds:</p>
-<div id="gcc_settings_div">
-<div class="c1">
-<h3><a name="gcc" id="gcc"><u>g++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.644</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform -
- Linux-2.6.12-9-386-i686-with-debian-testing-unstable</li>
-<li>Compiler - g++ (GCC) 4.0.2 20050808 (prerelease)
- (Ubuntu 4.0.1-4ubuntu9) Copyright (C) 2005 Free Software
- Foundation, Inc. This is free software; see the source
- for copying conditions. There is NO warranty; not even
- for MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="msvc_settings_div">
-<div class="c1">
-<h3><a name="msvc" id="msvc"><u>msvc++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.554</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform - Windows XP Pro</li>
-<li>Compiler - Microsoft (R) 32-bit C/C++ Optimizing
- Compiler Version 13.10.3077 for 80x86 Copyright (C)
- Microsoft Corporation 1984-2002. All rights
- reserved.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="local_settings_div"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h3><a name = "local"><u>local</u></a></h3><ul>
-<li>CPU speed - cpu MHz : 2250.000</li>
-<li>Memory - MemTotal: 2076248 kB</li>
-<li>Platform - Linux-2.6.16-1.2133_FC5-i686-with-redhat-5-Bordeaux</li>
-<li>Compiler - g++ (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-</li>
-</ul>
-</div><div style = "width: 100%; height: 20px"></div></div>
-<h2><a name="pq_tests" id="pq_tests">Tests</a></h2>
-<ol>
-<li><a href="priority_queue_text_push_timing_test.html">Priority Queue
- Text <tt>push</tt> Timing Test</a></li>
-<li><a href="priority_queue_text_push_pop_timing_test.html">Priority
- Queue Text <tt>push</tt> and <tt>pop</tt> Timing
- Test</a></li>
-<li><a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a></li>
-<li><a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a></li>
-<li><a href="priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a></li>
-<li><a href="priority_queue_text_join_timing_test.html">Priority Queue
- Text <tt>join</tt> Timing Test</a></li>
-<li><a href="priority_queue_text_modify_up_timing_test.html">Priority
- Queue Text <tt>modify</tt> Timing Test - I</a></li>
-<li><a href="priority_queue_text_modify_down_timing_test.html">Priority
- Queue Text <tt>modify</tt> Timing Test - II</a></li>
-</ol>
-<h2><a name="pq_observations" id="pq_observations">Observations</a></h2>
-<h3><a name="pq_observations_cplx" id="pq_observations_cplx">Underlying Data Structures
- Complexity</a></h3>
-<p>The following table shows the complexities of the different
- underlying data structures in terms of orders of growth. It is
- interesting to note that this table implies something about the
- constants of the operations as well (see <a href="#pq_observations_amortized_push_pop">Amortized <tt>push</tt>
- and <tt>pop</tt> operations</a>).</p>
-<table class="c1" width="100%" border="1" summary="pq complexities">
-<tr>
-<td align="left"></td>
-<td align="left"><tt>push</tt></td>
-<td align="left"><tt>pop</tt></td>
-<td align="left"><tt>modify</tt></td>
-<td align="left"><tt>erase</tt></td>
-<td align="left"><tt>join</tt></td>
-</tr>
-<tr>
-<td align="left">
-<p><tt>std::priority_queue</tt></p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n)) Worst</p>
-</td>
-<td align="left">
-<p><i>Theta;(n log(n))</i> Worst</p>
-<p><sub><a href="#std_mod1">[std note 1]</a></sub></p>
-</td>
-<td align="left">
-<p class="c3">&Theta;(n log(n))</p>
-<p><sub><a href="#std_mod2">[std note 2]</a></sub></p>
-</td>
-<td align="left">
-<p class="c3">&Theta;(n log(n))</p>
-<p><sub><a href="#std_mod1">[std note 1]</a></sub></p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(n)</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(n)</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(n)</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p><i>&Theta;(log(n))</i> worst</p>
-<p><i>O(1)</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(log(n))</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>&Theta;(log(n))</i> worst</p>
-<p><i>O(1)</i> amortized,</p>or
-
- <p><i>&Theta;(log(n))</i> amortized</p>
-<p><sub><a href="#thin_heap_note">[thin_heap_note]</a></sub></p>
-</td>
-<td align="left">
-<p><i>&Theta;(n)</i> worst</p>
-<p><i>&Theta;(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">&Theta;(n)</p>
-</td>
-</tr>
-</table>
-<p><sub><a name="std_mod1" id="std_mod1">[std note 1]</a> This
- is not a property of the algorithm, but rather due to the fact
- that the STL's priority queue implementation does not support
- iterators (and consequently the ability to access a specific
- value inside it). If the priority queue is adapting an
- <tt>std::vector</tt>, then it is still possible to reduce this
- to <i>&Theta;(n)</i> by adapting over the STL's adapter and
- using the fact that <tt>top</tt> returns a reference to the
- first value; if, however, it is adapting an
- <tt>std::deque</tt>, then this is impossible.</sub></p>
-<p><sub><a name="std_mod2" id="std_mod2">[std note 2]</a> As
- with <a href="#std_mod1">[std note 1]</a>, this is not a
- property of the algorithm, but rather the STL's implementation.
- Again, if the priority queue is adapting an
- <tt>std::vector</tt> then it is possible to reduce this to
- <i>&Theta;(n)</i>, but with a very high constant (one must call
- <tt>std::make_heap</tt> which is an expensive linear
- operation); if the priority queue is adapting an
- <tt>std::dequeu</tt>, then this is impossible.</sub></p>
-<p><sub><a name="thin_heap_note" id="thin_heap_note">[thin_heap_note]</a> A thin heap has
- <i>&amp;Theta(log(n))</i> worst case <tt>modify</tt> time
- always, but the amortized time depends on the nature of the
- operation: I) if the operation increases the key (in the sense
- of the priority queue's comparison functor), then the amortized
- time is <i>O(1)</i>, but if II) it decreases it, then the
- amortized time is the same as the worst case time. Note that
- for most algorithms, I) is important and II) is not.</sub></p>
-<h3><a name="pq_observations_amortized_push_pop" id="pq_observations_amortized_push_pop">Amortized <tt>push</tt>
- and <tt>pop</tt> operations</a></h3>
-<p>In many cases, a priority queue is needed primarily for
- sequences of <tt>push</tt> and <tt>pop</tt> operations. All of
- the underlying data structures have the same amortized
- logarithmic complexity, but they differ in terms of
- constants.</p>
-<p>The table above shows that the different data structures are
- "constrained" in some respects. In general, if a data structure
- has lower worst-case complexity than another, then it will
- perform slower in the amortized sense. Thus, for example a
- redundant-counter binomial heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>)
- has lower worst-case <tt>push</tt> performance than a binomial
- heap (<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>),
- and so its amortized <tt>push</tt> performance is slower in
- terms of constants.</p>
-<p>As the table shows, the "least constrained" underlying
- data structures are binary heaps and pairing heaps.
- Consequently, it is not surprising that they perform best in
- terms of amortized constants.</p>
-<ol>
-<li>Pairing heaps seem to perform best for non-primitive
- types (<i>e.g.</i>, <tt>std::string</tt>s), as shown by
- <a href="priority_queue_text_push_timing_test.html">Priority
- Queue Text <tt>push</tt> Timing Test</a> and <a href="priority_queue_text_push_pop_timing_test.html">Priority
- Queue Text <tt>push</tt> and <tt>pop</tt> Timing
- Test</a></li>
-<li>binary heaps seem to perform best for primitive types
- (<i>e.g.</i>, <tt><b>int</b></tt>s), as shown by <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a> and
- <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a>.</li>
-</ol>
-<h3><a name="pq_observations_graph" id="pq_observations_graph">Graph Algorithms</a></h3>
-<p>In some graph algorithms, a decrease-key operation is
- required [<a href="references.html#clrs2001">clrs2001</a>];
- this operation is identical to <tt>modify</tt> if a value is
- increased (in the sense of the priority queue's comparison
- functor). The table above and <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a> show that a thin heap
- (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>)
- outperforms a pairing heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> =<tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>),
- but the rest of the tests show otherwise.</p>
-<p>This makes it difficult to decide which implementation to
- use in this case. Dijkstra's shortest-path algorithm, for
- example, requires <i>&Theta;(n)</i> <tt>push</tt> and
- <tt>pop</tt> operations (in the number of vertices), but
- <i>O(n<sup>2</sup>)</i> <tt>modify</tt> operations, which can
- be in practice <i>&Theta;(n)</i> as well. It is difficult to
- find an <i>a-priori</i> characterization of graphs in which the
- <u>actual</u> number of <tt>modify</tt> operations will dwarf
- the number of <tt>push</tt> and <tt>pop</tt> operations.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_regression_tests.html b/libstdc++-v3/doc/html/ext/pb_ds/pq_regression_tests.html
deleted file mode 100644
index 9084409d35..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_regression_tests.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Priority-Queue Regression Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Regression Tests</h1>
-
- <h2><a name="assoc_desc" id="assoc_desc">Description</a></h2>
-
- <p>The library contains a single comprehensive regression test.
- For a given container type in <tt>pb_ds</tt>, the test creates
- an object of the container type and an object of the
- corresponding STL type (<i>i.e.</i>,
- <tt>std::priority_queue</tt>). It then performs a random
- sequence of methods with random arguments (<i>e.g.</i>, pushes,
- pops, and so forth) on both objects. At each operation, the
- test checks the return value of the method, and optionally both
- compares <tt>pb_ds</tt>'s object with the STL's object as well
- as performing other consistency checks on <tt>pb_ds</tt>'s
- object (<i>e.g.</i>, that the size returned by the
- <tt>size</tt> method corresponds to the distance between its
- <tt>begin</tt> and end iterators).</p>
-
- <p>Additionally, the test integrally checks exception safety
- and resource leaks. This is done as follows. A special
- allocator type, written for the purpose of the test, both
- randomly throws an exceptions when allocations are performed,
- and tracks allocations and de-allocations. The exceptions thrown
- at allocations simulate memory-allocation failures; the
- tracking mechanism checks for memory-related bugs (<i>e.g.</i>,
- resource leaks and multiple de-allocations). Both
- <tt>pb_ds</tt>'s containers and the containers' value-types are
- configured to use this allocator.</p>
-
- <h2><a name="pq_tests" id="pq_tests">Tests</a></h2>
-
- <p><a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc"><tt>priority_queue_rand.cc</tt></a>
- checks all priority queue types.</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_tests.html b/libstdc++-v3/doc/html/ext/pb_ds/pq_tests.html
deleted file mode 100644
index de8cb447c7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_tests.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Priority-Queue Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Tests</h1>
-
- <p><a href="pq_regression_tests.html">Priority-Queue Regression
- Tests</a> describes the regression tests; <a href=
- "pq_performance_tests.html">Priority-Queue Performance
- Tests</a> describes the performance tests.</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/prerequisites.html b/libstdc++-v3/doc/html/ext/pb_ds/prerequisites.html
deleted file mode 100644
index 7c88884991..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/prerequisites.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Prerequisites</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Usage Prerequisites</h1>
-
- <p><tt>pb_ds</tt> has been successfully tested with the
- following compilers:</p>
-
- <ol>
- <li>g++ 3.3.1, 3.4.4, 4.0, 4.1, and what will be 4.2</li>
-
- <li>Intel icpc 8.1 and 9</li>
-
- <li>Visual C++ .Net 2005</li>
- </ol>
-
- <p>The library contains only header files, and does not require
- any other libraries except the STL. All classes are defined in
- <tt><b>namespace</b> pb_ds</tt>. The library internally uses
- macros beginning with <tt>PB_DS</tt> (<i>e.g.</i>, for header
- guards), but <tt>#<b>undef</b></tt>s anything it
- <tt>#<b>define</b></tt>s (except for header guards). Compiling
- the library in an environment where macros beginning in
- <tt>PB_DS</tt> are defined, may yield unpredictable results in
- compilation, execution, or both.</p>
-
- <p> Further dependencies are necessary to create the visual output
- for the performance tests. To create these graphs, two additional
- packages will be needed: <b>pychart</b> and <b>Beautiful
- Soup</b>. Both are freely available.
- </p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue.html
deleted file mode 100644
index def310f0c0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue.html
+++ /dev/null
@@ -1,995 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>priority_queue Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>priority_queue</tt> Interface</h1>
-
- <p>Basic priority queue.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/priority_queue.hpp"><tt>priority_queue.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Value_Type216514186" id=
-"Value_Type216514186"><b>typename</b> Value_Type</a>
-</pre>
- </td>
-
- <td>
- <p>Value type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>
- <pre>
-std::less&lt;<a href=
-"#Value_Type216514186"><tt>Value_Type</tt></a>&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag </a>
-</pre>
- </td>
-
- <td>
- <p>Data-structure tag.</p>
- </td>
-
- <td><a href="pairing_heap_tag.html"><span class=
- "c2"><tt>pairing_heap_tag</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator&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">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::difference_type
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Categories</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="container_category1247973216" id=
-"container_category1247973216">container_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Tag278938"><tt>Tag</tt></a>
-</pre>
- </td>
-
- <td>
- <p>The underlying mapped-structure tag of the
- container.</p>
-
- <p>This is one of:</p>
-
- <ol>
- <li><a href="binary_heap_tag.html"><span class=
- "c2"><tt>binary_heap_tag</tt></span></a></li>
-
- <li><a href="binomial_heap_tag.html"><span class=
- "c2"><tt>binomial_heap_tag</tt></span></a></li>
-
- <li><a href="rc_binomial_heap_tag.html"><span class=
- "c2"><tt>rc_binomial_heap_tag</tt></span></a></li>
-
- <li><a href="pairing_heap_tag.html"><span class=
- "c2"><tt>pairing_heap_tag</tt></span></a></li>
-
- <li><a href="thin_heap_tag.html"><span class=
- "c2"><tt>thin_heap_tag</tt></span></a></li>
- </ol>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="cmp_fn394495" id="cmp_fn394495">cmp_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Value_Type216514186"><tt>Value_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::reference
-</pre>
- </td>
-
- <td>
- <p>Value reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const value <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="pointer2179769" id="pointer2179769">pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::pointer
-</pre>
- </td>
-
- <td>
- <p>Value pointer type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>&gt;::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const Value <a href=
- "#pointer2179769"><tt>pointer</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_point_iterator2364676009" id=
-"const_point_iterator2364676009">const_point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const point-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="point_iterator2789896775" id=
-"point_iterator2789896775">point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Point-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Range-type iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- priority_queue
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- priority_queue
- (<b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- priority_queue
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s. The
- <a href="#value_type279018186"><tt>value_type</tt></a>s
- between <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- priority_queue
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s and some
- policy objects The <a href=
- "#value_type279018186"><tt>value_type</tt></a>s between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- priority_queue
- (<b>const</b> <span class=
-"c2"><tt>priority_queue</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~priority_queue
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>priority_queue</tt></span> &amp;
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>priority_queue</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class="c2"><tt>priority_queue</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Information Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the number of distinct <a href=
- "#value_type279018186"><tt>value_type</tt></a> objects
- the container object is storing.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- max_size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns an upper bound on the number of distinct
- <a href="#value_type279018186"><tt>value_type</tt></a>
- objects this container can store.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- empty
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns whether the container object is not storing
- any <a href=
- "#value_type279018186"><tt>value_type</tt></a>
- objects.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Insert Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a>
- push
- (<a href=
-"#const_reference495461441"><tt>const_reference</tt></a> r_val)
-</pre>
- </td>
-
- <td>
- <p>Inserts a <a href=
- "#value_type279018186"><tt>value_type</tt></a> object.
- returns a <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- object associated with the new pushed <span class=
- "c1"><tt>r_val</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_reference495461441"><tt>const_reference</tt></a>
- top
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_reference495461441"><tt>const_reference</tt></a>
- of the largest <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container object, i.e., a <a href=
- "#value_type279018186"><tt>value_type</tt></a> v_max for
- which any other <a href=
- "#value_type279018186"><tt>value_type</tt></a> v in the
- container object will satisfy !<a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a>()(v_max, v).</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Modify Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- modify
- (<a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a> it,
- <a href=
-"#const_reference495461441"><tt>const_reference</tt></a> r_new_val)
-</pre>
- </td>
-
- <td>
- <p>Modifies the <a href=
- "#value_type279018186"><tt>value_type</tt></a> associated
- with the <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- <span class="c1"><tt>it</tt></span> into <span class=
- "c1"><tt>r_new_val</tt></span>.</p>
-
- <p>To use this method, <a href=
- "#value_type279018186"><tt>value_type</tt></a> must be
- assignable.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Erase Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- pop
- ()
-</pre>
- </td>
-
- <td>
- <p>Pops the largest <a href=
- "#value_type279018186"><tt>value_type</tt></a>.</p>
-
- <p>If the container object is empty, results are
- undefined.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- erase
- (<a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a> it)
-</pre>
- </td>
-
- <td>
- <p>Erases the <a href=
- "#value_type279018186"><tt>value_type</tt></a> associated
- with the <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- <span class="c1"><tt>it</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> Pred&gt;
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- erase_if
- (Pred prd)
-</pre>
- </td>
-
- <td>
- <p>Erases any <a href=
- "#value_type279018186"><tt>value_type</tt></a> satisfying
- the predicate <span class="c1"><tt>prd</tt></span>;
- returns the number of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s
- erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- clear
- ()
-</pre>
- </td>
-
- <td>
- <p>Clears the container object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link15" id="link15">Split and join
- Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- join
- (<span class="c2"><tt>priority_queue</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Joins two container objects. When this function
- returns, <span class="c1"><tt>other</tt></span> will be
- empty.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> Pred&gt;
-<b>inline</b> <b>void</b>
- split
- (Pred prd,
- <span class="c2"><tt>priority_queue</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Splits into two container objects. When this function
- returns, <span class="c1"><tt>other</tt></span> will be
- contain only values v for which <span class=
- "c1"><tt>prd</tt></span>(v) is <tt><b>true</b></tt>.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link16" id="link16">Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test.html
deleted file mode 100644
index 903331d9d7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Random Int Push Pop Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Random Integer <tt>push</tt> and
- <tt>pop</tt> Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with i.i.d. integer
- keys into a container using <tt>push</tt> , then removes them
- using <tt>pop</tt> . It measures the average time for
- <tt>push</tt> and <tt>pop</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc">
-<tt>priority_queue_random_int_push_pop_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> shows the results for the native
- priority queues and <tt>pb_ds</tt> 's priority queues in
- <a href="pq_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_random_int_push_pop_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt___tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_random_int_push_pop_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>push</tt> <tt>pop</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_random_int_push_pop_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt___tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_random_int_push_pop_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>push</tt> <tt>pop</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_random_int_push_pop_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt___tt_pop_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_random_int_push_pop_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>push</tt> <tt>pop</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Binary heaps are the most suited for sequences of
- <tt>push</tt> and <tt>pop</tt> operations of primitive types
- (<i>e.g.</i> <tt><b>int</b></tt>s). This is explained in
- <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Int <tt>push</tt> Timing Test</a> . (See <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> Timing Test</a> for the case of primitive
- types.)</p>
-<p>At first glance it seems that the STL's vector-based
- priority queue is approximately on par with <tt>pb_ds</tt>'s
- corresponding priority queue. There are two differences
- however:</p>
-<ol>
-<li>The STL's priority queue does not downsize the underlying
- vector (or deque) as the priority queue becomes smaller
- (see <a href="priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a>). It is therefore
- gaining some speed at the expense of space.</li>
-<li>From <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a>, it seems that the STL's priority queue is slower in
- terms of <tt>pus</tt> operations. Since the number of
- <tt>pop</tt> operations is at most that of <tt>push</tt>
- operations, the test here is the "best" for the STL's
- priority queue.</li>
-</ol>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_gcc.png
deleted file mode 100644
index 68f5e2b6bd..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.png
deleted file mode 100644
index 51f8211f1d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_msvc.png
deleted file mode 100644
index 4fc191c8b1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test.html
deleted file mode 100644
index ba91f601a2..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Random Int Push Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Random Integer <tt>push</tt> Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with i.i.d integer keys
- into a container using <tt>push</tt> . It measures the average
- time for <tt>push</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_timing.cc"><tt>
- priority_queue_random_intpush_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NBPG">NBPG</a>, <a href="#NBPM">NBPM</a>, and <a href="#NBPL">NBPL</a> shows the
- results for the binary-heap based native priority queues and
- <tt>pb_ds</tt> 's priority queues in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_random_int_push_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_random_int_push_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_random_int_push_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_random_int_push_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_random_int_push_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_random_int_push_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBPG_res_div">
-<div id="NBPG_gcc">
-<div id="NBPG_binary_priority_queue_random_int_push_timing_test">
-<div id="NBPG_pq">
-<div id="NBPG_Native_and__tt_pb_ds_455tt__binary_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBPG" id="NBPG"><img src="binary_priority_queue_random_int_push_timing_test_gcc.png" alt="no image" /></a></h6>NBPG: Native and <tt>pb ds</tt> binary priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBPM_res_div">
-<div id="NBPM_msvc">
-<div id="NBPM_binary_priority_queue_random_int_push_timing_test">
-<div id="NBPM_pq">
-<div id="NBPM_Native_and__tt_pb_ds_455tt__binary_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBPM" id="NBPM"><img src="binary_priority_queue_random_int_push_timing_test_msvc.png" alt="no image" /></a></h6>NBPM: Native and <tt>pb ds</tt> binary priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBPL_res_div">
-<div id="NBPL_local">
-<div id="NBPL_binary_priority_queue_random_int_push_timing_test">
-<div id="NBPL_pq">
-<div id="NBPL_Native_and__tt_pb_ds_455tt__binary_priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBPL" id= "NBPL"><img src="binary_priority_queue_random_int_push_timing_test_local.png" alt="no image" /></a></h6>NBPL: Native and <tt>pb ds</tt> binary priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Binary heaps are the most suited for sequences of
- <tt>push</tt> and <tt>pop</tt> operations of primitive types
- (<i>e.g.</i> <tt><b>int</b></tt>s). They are less constrained
- than any other type, and since it is very efficient to store
- such types in arrays, they outperform even pairing heaps. (See
- <a href="priority_queue_text_push_timing_test.html">Priority
- Queue Text <tt>push</tt> Timing Test</a> for the case of
- non-primitive types.)</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_gcc.png
deleted file mode 100644
index ee8c9b7d9a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.png
deleted file mode 100644
index dead185fa4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_msvc.png
deleted file mode 100644
index 0a1a8eaefb..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag.html
deleted file mode 100644
index 8b6d81c37e..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>priority_queue_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>priority_queue_tag</tt> Interface</h1>
-
- <p>Basic priority-queue data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_tag.html"><span class=
-"c2"><tt>container_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.png
deleted file mode 100644
index ed8d875f0f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.svg b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.svg
deleted file mode 100644
index be007aecb8..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_tag_cd.svg
+++ /dev/null
@@ -1,368 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="11in"
- height="8.5in"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.43"
- version="1.0"
- sodipodi:docbase="/mnt/share/src/policy_based_data_structures/pb_ds_images"
- sodipodi:docname="pq_tag_diagram_2.svg"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/pb_ds_images/pq_tag_diagram_2.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path3311"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Sstart"
- style="overflow:visible">
- <path
- id="path3319"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(0.3,0,0,0.3,-1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Sstart"
- style="overflow:visible">
- <path
- id="path3337"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Send"
- style="overflow:visible">
- <path
- id="path3316"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.3,0,0,-0.3,1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mend"
- style="overflow:visible">
- <path
- id="path3322"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.6,0,0,-0.6,3,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3346"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(-0.8,-0.8)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lstart"
- style="overflow:visible">
- <path
- id="path3331"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(1.1,0,0,1.1,-5.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3328"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2"
- inkscape:cx="608.69002"
- inkscape:cy="490.05621"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1278"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
- gridtolerance="0.125in"
- guidetolerance="0.125in">
- <sodipodi:guide
- orientation="horizontal"
- position="629"
- id="guide1307" />
- <sodipodi:guide
- orientation="horizontal"
- position="449"
- id="guide1309" />
- <sodipodi:guide
- orientation="horizontal"
- position="269"
- id="guide1311" />
- <sodipodi:guide
- orientation="vertical"
- position="496"
- id="guide1313" />
- <sodipodi:guide
- orientation="vertical"
- position="383"
- id="guide1315" />
- <sodipodi:guide
- orientation="vertical"
- position="241"
- id="guide1317" />
- <sodipodi:guide
- orientation="vertical"
- position="680"
- id="guide1319" />
- <sodipodi:guide
- orientation="vertical"
- position="749"
- id="guide1321" />
- <sodipodi:guide
- orientation="vertical"
- position="124"
- id="guide1345" />
- <sodipodi:guide
- orientation="vertical"
- position="901"
- id="guide1347" />
- <sodipodi:guide
- orientation="horizontal"
- position="539"
- id="guide3390" />
- <sodipodi:guide
- orientation="horizontal"
- position="359"
- id="guide3392" />
- <sodipodi:guide
- orientation="vertical"
- position="280.5"
- id="guide3324" />
- <sodipodi:guide
- orientation="vertical"
- position="195"
- id="guide3326" />
- <sodipodi:guide
- orientation="vertical"
- position="427"
- id="guide3328" />
- <sodipodi:guide
- orientation="vertical"
- position="795"
- id="guide3340" />
- <sodipodi:guide
- orientation="horizontal"
- position="179"
- id="guide1395" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Benjamin Kosnik</dc:title>
- </cc:Agent>
- </dc:creator>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <rect
- y="382.17499"
- x="241.73018"
- height="23.200001"
- width="141.64481"
- id="rect3420"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3418"
- width="141.64481"
- height="23.200001"
- x="52.730194"
- y="382.17499" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="122.35258"
- y="395.91092"
- id="text3394"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1383"
- x="122.35258"
- y="395.91092">pairing_heap_tag</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3400"
- y="395.91092"
- x="310.55255"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1381"
- x="310.55255"
- y="395.91092">bionomial_heap_tag</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3380"
- width="141.64481"
- height="23.200001"
- x="425.57764"
- y="292.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="495.20001"
- y="307.09772"
- id="text1323"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1363"
- x="495.20001"
- y="307.09772">priority_queue_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.16226137;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 124.54034,382.1132 L 124.54034,360.6132 L 311.75594,359.6132 L 311.75594,382.1132"
- id="path2244" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3422"
- width="141.64481"
- height="23.200001"
- x="425.73022"
- y="382.17499" />
- <text
- sodipodi:linespacing="100%"
- id="text3406"
- y="395.91092"
- x="495.3526"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1377"
- x="495.3526"
- y="395.91092">rc_binomial_heap_tag</tspan></text>
- <rect
- y="382.17499"
- x="607.93024"
- height="23.200001"
- width="141.64481"
- id="rect3424"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="679.15259"
- y="395.91092"
- id="text3412"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1379"
- x="679.15259"
- y="395.91092">binary_heap_tag</tspan></text>
- <path
- id="path3347"
- d="M 495.79886,382.13056 L 495.79886,321.40547"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect2281"
- width="141.64481"
- height="23.200001"
- x="795.625"
- y="382.17499" />
- <text
- sodipodi:linespacing="100%"
- id="text2283"
- y="395.91092"
- x="866.84735"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1359"
- x="866.84735"
- y="395.91092">thin_heap_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 311.5,360 L 680,360"
- id="path2309" />
- <use
- x="0"
- y="0"
- xlink:href="#path2244"
- id="use2311"
- transform="matrix(-1,0,0,1,992.3371,0)"
- width="990"
- height="765" />
- </g>
-</svg>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test.html
deleted file mode 100644
index a4bf576ff5..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Join Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>join</tt> Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- two containers, then merges the containers. It uses
- <tt>join</tt> for <tt>pb_ds</tt>'s priority queues; for the
- STL's priority queues, it successively pops values from one
- container and pushes them into the other. The test measures the
- average time as a function of the number of values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc"><tt>priority_queue_text_join_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc</u></a>, and <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_join_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_join_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_join_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_join_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_join_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_join_timing_test_local.png" alt="no image" /></a></h6>NPL: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this test the node-based heaps perform <tt>join</tt> in
- either logarithmic or constant time. The binary heap requires
- linear time, since the well-known heapify algorithm [<a href="references.html#clrs2001">clrs2001</a>] is linear.</p>
-<p>It would be possible to apply the heapify algorithm to the
- STL containers, if they would support iteration (which they
- don't). Barring iterators, it is still somehow possible to
- perform linear-time merge on a <tt>std::vector</tt>-based STL
- priority queue, using <tt>top()</tt> and <tt>size()</tt> (since
- they are enough to expose the underlying array), but this is
- impossible for a <tt>std::deque</tt>-based STL priority queue.
- Without heapify, the cost is super-linear.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_gcc.png
deleted file mode 100644
index a48bb35860..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_local.png
deleted file mode 100644
index 1701b4d8a6..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_msvc.png
deleted file mode 100644
index 0575b99c0c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test.html
deleted file mode 100644
index 7ece80bcf1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test.html
+++ /dev/null
@@ -1,204 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Modify (Down) Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>modify</tt> Timing Test - II</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- into a container then modifies each one "down" (<i>i.e.,</i> it
- makes it smaller). It uses <tt>modify</tt> for <tt>pb_ds</tt>'s
- priority queues; for the STL's priority queues, it pops values
- from a container until it reaches the value that should be
- modified, then pushes values back in. It measures the average
- time for <tt>modify</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.cc"><tt>priority_queue_text_modify_down_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100 f)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The main purpose of this test is to contrast <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a>.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NRTG">NRTG</a>, <a href="#NRTM">NRTM</a>, and <a href="#NRTL">NRTL</a> show the results
- for the pairing heap and thin heaps in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively,</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_modify_down_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_modify_down_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_modify_down_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_modify_down_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_modify_down_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_modify_down_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTG_res_div">
-<div id="NRTG_gcc">
-<div id="NRTG_priority_queue_text_modify_down_timing_test_pairing_thin">
-<div id="NRTG_pq">
-<div id="NRTG_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTG" id="NRTG"><img src="priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png" alt="no image" /></a></h6>NRTG: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTM_res_div">
-<div id="NRTM_msvc">
-<div id="NRTM_priority_queue_text_modify_down_timing_test_pairing_thin">
-<div id="NRTM_pq">
-<div id="NRTM_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTM" id="NRTM"><img src="priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png" alt="no image" /></a></h6>NRTM: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTL_res_div">
-<div id="NRTL_local">
-<div id="NRTL_priority_queue_text_modify_down_timing_test_pairing_thin">
-<div id="NRTL_pq">
-<div id="NRTL_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTL" id= "NRTL"><img src="priority_queue_text_modify_down_timing_test_pairing_thin_local.png" alt="no image" /></a></h6>NRTL: Pairing and thin priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Most points in these results are similar to <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a>.</p>
-<p>It is interesting to note, however, that as opposed to that
- test, a thin heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>) is
- outperformed by a pairing heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>).
- In this case, both heaps essentially perform an <tt>erase</tt>
- operation followed by a <tt>push</tt> operation. As the other
- tests show, a pairing heap is usually far more efficient than a
- thin heap, so this is not surprising.</p>
-<p>Most algorithms that involve priority queues increase values
- (in the sense of the priority queue's comparison functor), and
- so <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a> is more interesting
- than this test.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_gcc.png
deleted file mode 100644
index 74cbc65236..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_local.png
deleted file mode 100644
index 2fa9c79880..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_msvc.png
deleted file mode 100644
index 20b6637366..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png
deleted file mode 100644
index ca901831ef..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.png
deleted file mode 100644
index 977d167186..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png
deleted file mode 100644
index bf68bf9929..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test.html
deleted file mode 100644
index 72a1e0a757..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Modify (Up) Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>modify</tt> Timing Test - I</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- into a container then modifies each one "up" (<i>i.e.,</i> it
- makes it larger). It uses <tt>modify</tt> for <tt>pb_ds</tt>'s
- priority queues; for the STL's priority queues, it pops values
- from a container until it reaches the value that should be
- modified, then pushes values back in. It measures the average
- time for <tt>modify</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.cc"><tt>priority_queue_text_modify_up_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100 t)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>) for graph algorithms settings.
- Note that making an arbitrary value larger (in the sense of the
- priority queue's comparison functor) corresponds to
- decrease-key in standard graph algorithms [<a href="references.html#clrs2001">clrs2001</a>].</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NRTG">NRTG</a>, <a href="#NRTM">NRTM</a>, and <a href="#NRTL">NRTL</a> show the results
- for the pairing heap and thin heaps in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively,</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_modify_up_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_modify_up_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_modify_up_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_modify_up_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_modify_up_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_modify_up_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTG_res_div">
-<div id="NRTG_gcc">
-<div id="NRTG_priority_queue_text_modify_up_timing_test_pairing_thin">
-<div id="NRTG_pq">
-<div id="NRTG_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTG" id="NRTG"><img src="priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png" alt="no image" /></a></h6>NRTG: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTM_res_div">
-<div id="NRTM_msvc">
-<div id="NRTM_priority_queue_text_modify_up_timing_test_pairing_thin">
-<div id="NRTM_pq">
-<div id="NRTM_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTM" id="NRTM"><img src="priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png" alt="no image" /></a></h6>NRTM: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTL_res_div">
-<div id="NRTL_local">
-<div id="NRTL_priority_queue_text_modify_up_timing_test_pairing_thin">
-<div id="NRTL_pq">
-<div id="NRTL_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTL" id= "NRTL"><img src="priority_queue_text_modify_up_timing_test_pairing_thin_local.png" alt="no image" /></a></h6>NRTL: Pairing and thin priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>As noted above, increasing an arbitrary value (in the sense
- of the priority queue's comparison functor) is very common in
- graph-related algorithms. In this case, a thin heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>)
- outperforms a pairing heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>).
- Conversely, <a href="priority_queue_text_push_timing_test.html">Priority Queue Text
- <tt>push</tt> Timing Test</a>, <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> and <tt>pop</tt> Timing Test</a>, <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a>, and
- <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a> show that the situation is reversed for other
- operations. It is not clear when to prefer one of these two
- different types.</p>
-<p>In this test <tt>pb_ds</tt>'s binary heaps effectively
- perform modify in linear time. As explained in <a href="pq_design.html#pq_traits">Priority Queue Design::Traits</a>,
- given a valid point-type iterator, a binary heap can perform
- <tt>modify</tt> logarithmically. The problem is that binary
- heaps invalidate their find iterators with each modifying
- operation, and so the only way to obtain a valid point-type
- iterator is to iterate using a range-type iterator until
- finding the appropriate value, then use the range-type iterator
- for the <tt>modify</tt> operation.</p>
-<p>The explanation for the STL's priority queues' performance
- is similar to that in <a href="priority_queue_text_join_timing_test.html">Priority Queue Text
- <tt>join</tt> Timing Test</a>.</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_gcc.png
deleted file mode 100644
index d9dedc20cf..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_local.png
deleted file mode 100644
index 31575b452d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_msvc.png
deleted file mode 100644
index 4005547c81..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png
deleted file mode 100644
index 1aa5aba94b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.png
deleted file mode 100644
index b878dde665..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png
deleted file mode 100644
index 740594384c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test.html
deleted file mode 100644
index 2545fc07d1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Pop Memory Use Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>pop</tt> Memory Use Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container, then pops them until only one is left in the
- container. It measures the memory use as a function of the
- number of values pushed to the container.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc"><tt>priority_queue_text_pop_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_pop_mem_usage_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_pop_mem_usage_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_pop_mem_usage_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_pop_mem_usage_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_pop_mem_usage_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_pop_mem_usage_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>The priority queue implementations (excluding the STL's) use
- memory proportionally to the number of values they hold:
- node-based implementations (<i>e.g.</i>, a pairing heap) do so
- naturally; <tt>pb_ds</tt>'s binary heap de-allocates memory when
- a certain lower threshold is exceeded.</p>
-<p>Note from <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> and <tt>pop</tt> Timing Test</a> and
- <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a> that this does not impede performance compared to the
- STL's priority queues.</p>
-<p>(See <a href="hash_random_int_erase_mem_usage_test.html">Hash-Based Erase
- Memory Use Test</a> for a similar phenomenon regarding priority
- queues.)</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_gcc.png
deleted file mode 100644
index 2c1918d062..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.png
deleted file mode 100644
index c1413fc93d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_msvc.png
deleted file mode 100644
index 9717f498b7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test.html
deleted file mode 100644
index 3c143fe5a1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Push Pop Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>push</tt> and <tt>pop</tt> Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container using <tt>push</tt> , then removes them using
- <tt>pop</tt> . It measures the average time for <tt>push</tt>
- as a function of the number of values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc"><tt>
- priority_queue_text_push_pop_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NBRG">NBRG</a>, <a href="#NBRM">NBRM</a>, and <a href="#NBRL">NBRL</a> show the results
- for the native priority queues and <tt>pb_ds</tt>'s pairing
- queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_push_pop_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_push_pop_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_push_pop_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_push_pop_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_push_pop_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_push_pop_timing_test_local.png" alt="no image" /></a></h6>NPL: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRG_res_div">
-<div id="NBRG_gcc">
-<div id="NBRG_pairing_priority_queue_text_push_pop_timing_test">
-<div id="NBRG_pq">
-<div id="NBRG_Native_tree_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRG" id="NBRG"><img src="pairing_priority_queue_text_push_pop_timing_test_gcc.png" alt="no image" /></a></h6>NBRG: Native tree and <tt>pb ds</tt> pairing priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRM_res_div">
-<div id="NBRM_msvc">
-<div id="NBRM_pairing_priority_queue_text_push_pop_timing_test">
-<div id="NBRM_pq">
-<div id="NBRM_Native_tree_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRM" id="NBRM"><img src="pairing_priority_queue_text_push_pop_timing_test_msvc.png" alt="no image" /></a></h6>NBRM: Native tree and <tt>pb ds</tt> pairing priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRL_res_div">
-<div id="NBRL_local">
-<div id="NBRL_pairing_priority_queue_text_push_pop_timing_test">
-<div id="NBRL_pq">
-<div id="NBRL_Native_tree_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRL" id= "NBRL"><img src="pairing_priority_queue_text_push_pop_timing_test_local.png" alt="no image" /></a></h6>NBRL: Native tree and <tt>pb ds</tt> pairing priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>These results are very similar to <a href="priority_queue_text_push_timing_test.html">Priority Queue Text
- <tt>push</tt> Timing Test</a>. As stated there, pairing heaps
- (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>)
- are most suited for <tt>push</tt> and <tt>pop</tt> sequences of
- non-primitive types such as strings. Observing these two tests,
- one can note that a pairing heap outperforms the others in
- terms of <tt>push</tt> operations, but equals binary heaps
- (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>) if
- the number of <tt>push</tt> and <tt>pop</tt> operations is
- equal. As the number of <tt>pop</tt> operations is at most
- equal to the number of <tt>push</tt> operations, pairing heaps
- are better in this case. See <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a> for a case which is different.</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_gcc.png
deleted file mode 100644
index d4886ae596..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.png
deleted file mode 100644
index a7c5f8987a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_msvc.png
deleted file mode 100644
index a5720402b3..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test.html
deleted file mode 100644
index 542eb913c4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Push Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>push</tt> Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container using <tt>push</tt> . It measures the average time
- for <tt>push</tt> as a function of the number of values
- pushed.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc"><tt>priority_queue_text_push_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NBRG">NBRG</a>, <a href="#NBRM">NBRM</a>, and <a href="#NBRL">NBRL</a> shows the
- results for the binary-heap based native priority queues and
- <tt>pb_ds</tt>'s pairing-heap priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_push_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_push_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_push_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_push_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_push_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_push_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRG_res_div">
-<div id="NBRG_gcc">
-<div id="NBRG_pairing_priority_queue_text_push_timing_test">
-<div id="NBRG_pq">
-<div id="NBRG_Native_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRG" id="NBRG"><img src="pairing_priority_queue_text_push_timing_test_gcc.png" alt="no image" /></a></h6>NBRG: Native and <tt>pb ds</tt> pairing priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRM_res_div">
-<div id="NBRM_msvc">
-<div id="NBRM_pairing_priority_queue_text_push_timing_test">
-<div id="NBRM_pq">
-<div id="NBRM_Native_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRM" id="NBRM"><img src="pairing_priority_queue_text_push_timing_test_msvc.png" alt="no image" /></a></h6>NBRM: Native and <tt>pb ds</tt> pairing priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRL_res_div">
-<div id="NBRL_local">
-<div id="NBRL_pairing_priority_queue_text_push_timing_test">
-<div id="NBRL_pq">
-<div id="NBRL_Native_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRL" id= "NBRL"><img src="pairing_priority_queue_text_push_timing_test_local.png" alt="no image" /></a></h6>NBRL: Native and <tt>pb ds</tt> pairing priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Pairing heaps (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>)
- are the most suited for sequences of <tt>push</tt> and
- <tt>pop</tt> operations of non-primitive types (<i>e.g.</i>
-<tt>std::string</tt>s). (see also <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> and <tt>pop</tt> Timing Test</a>.) They are
- less constrained than binomial heaps, <i>e.g.</i>, and since
- they are node-based, they outperform binary heaps. (See
- <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a> for the case
- of primitive types.)</p>
-<p>The STL's priority queues do not seem to perform well in
- this case: the <tt>std::vector</tt> implementation needs to
- perform a logarithmic sequence of string operations for each
- operation, and the deque implementation is possibly hampered by
- its need to manipulate a relatively-complex type (deques
- support a <i>O(1)</i> <tt>push_front</tt>, even though it is
- not used by <tt>std::priority_queue</tt>.)</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_gcc.png
deleted file mode 100644
index 8895f507cf..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_local.png
deleted file mode 100644
index da7297bffa..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_msvc.png
deleted file mode 100644
index ff39ca37dd..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/quadratic_probe_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/quadratic_probe_fn.html
deleted file mode 100644
index 00367dac89..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/quadratic_probe_fn.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>quadratic_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>quadratic_probe_fn</tt> Interface</h1>
-
- <p>A probe sequence policy using square increments.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>quadratic_probe_fn</tt></span> &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>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_gcc.png
deleted file mode 100644
index 61962704f7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.png
deleted file mode 100644
index 83105202a4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_msvc.png
deleted file mode 100644
index 2206cef5a9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/range_invalidation_guarantee.html b/libstdc++-v3/doc/html/ext/pb_ds/range_invalidation_guarantee.html
deleted file mode 100644
index 7bfba19e81..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/range_invalidation_guarantee.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>range_invalidation_guarantee Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>range_invalidation_guarantee</tt> Interface</h1>
-
- <p>Signifies an invalidation guarantee that includes all those
- of its base, and additionally, that any range-type iterator
- (including the returns of begin() and end()) is in the correct
- relative positions to other range-type iterators as long as its
- corresponding entry has not be erased, regardless of
- modifications to the container object.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="point_invalidation_guarantee.html"><span class=
-"c2"><tt>point_invalidation_guarantee</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/rb_tree_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/rb_tree_tag.html
deleted file mode 100644
index 2adbd09bfb..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/rb_tree_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>rb_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>rb_tree_tag</tt> Interface</h1>
-
- <p>Red-black tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/rc_binomial_heap_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/rc_binomial_heap_tag.html
deleted file mode 100644
index 1a4ba9f2e0..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/rc_binomial_heap_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>rc_binomial_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>rc_binomial_heap_tag</tt> Interface</h1>
-
- <p>Redundant-counter binomial-heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/references.html b/libstdc++-v3/doc/html/ext/pb_ds/references.html
deleted file mode 100644
index 064e924648..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/references.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>References</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>References</h1>
-
- <ol>
- <li>[<a name="abrahams97exception" id=
- "abrahams97exception">abrahams97exception</a>] Dave Abrahams,
- STL Exception Handling Contract, <a href=
- "http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf">
- http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf</a></li>
-
- <li>[<a name="alexandrescu01modern" id=
- "alexandrescu01modern">alexandrescu01modern</a>] Andrei
- Alexandrescu, <i>Modern C++ Design: Generic Programming and
- Design Patterns Applied</i>, Addison-Wesley Publishing
- Company, 2001</li>
-
- <li>[<a name="andrew04mtf" id="andrew04mtf">andrew04mtf</a>]
- K. Andrew and D. Gleich, "MTF, Bit, and COMB: A Guide to
- Deterministic and Randomized Algorithms for the List Update
- Problem"</li>
-
- <li>[<a name="austern00noset" id=
- "austern00noset">austern00noset</a>] Matthew Austern, "Why
- You shouldn't use <tt>set</tt> - and What You Should Use
- Instead", C++ Report, April, 2000</li>
-
- <li>[<a name="austern01htprop" id=
- "austern01htprop">austern01htprop</a>] Matthew Austern, "A
- Proposal to Add Hashtables to the Standard Library", <a href=
- "http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1326l.html">
- http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1326l.html</a></li>
-
- <li>[<a name="austern98segmented" id=
- "austern98segmented">austern98segmented</a>] Matthew Austern,
- "Segmented iterators and hierarchical algorithms", Generic
- Programming, April 1998, pp. 80-90</li>
-
- <li>[<a name="boost_timer" id="boost_timer">boost_timer</a>],
- "Boost timer library", <a href=
- "http://www.boost.org/">http://www.boost.org</a> by Beman
- Dawes</li>
-
- <li>[<a name="boost_pool" id="boost_pool">boost_pool</a>],
- "Boost pool library", <a href=
- "http://www.boost.org/">http://www.boost.org</a> by Stephen
- Cleary</li>
-
- <li>[<a name="boost_type_traits" id=
- "boost_type_traits">boost_type_traits</a>], "Boost
- <tt>type_traits</tt> library", <a href=
- "http://www.boost.org/">http://www.boost.org</a> by John
- Maddock, Steve Cleary, <i>et. al.</i></li>
-
- <li>[<a name="brodal96priority" id=
- "brodal96priority">brodal96priority</a>] Gerth Stolting
- Brodal, <a href=
- "http://portal.acm.org/citation.cfm?id=313883">Worst-case
- efficient priority queues</a></li>
-
- <li>[<a name="bulka99efficient" id=
- "bulka99efficient">bulka99efficient</a>] D. Bulka, and D.
- Mayhew, "Efficient C++ Programming Techniques.",
- Addison-Wesley Publishing Company, Addison-Wesley, 1997</li>
-
- <li>[<a name="clrs2001" id="clrs2001">clrs2001</a>] T. H.
- Cormen, C. E., Leiserson, R. L. Rivest, C. and Stein,
- "Introduction to Algorithms, 2nd ed.", MIT Press, 2001</li>
-
- <li>[<a name="dinkumware_stl" id=
- "dinkumware_stl">dinkumware_stl</a>], "Dinkumware C++ Library
- Reference", <a href=
- "http://www.dinkumware.com/htm_cpl/index.html">http://www.dinkumware.com/htm_cpl/index.html</a></li>
-
- <li>[<a name="dubhashi98neg" id=
- "dubhashi98neg">dubhashi98neg</a>] D. Dubashi, and D. Ranjan,
- "Balls and bins: A study in negative dependence.", Random
- Structures and Algorithms 13, 2 (1998), 99-124</li>
-
- <li>[<a name="fagin79extendible" id=
- "fagin79extendible">fagin79extendible</a>] R. Fagin, J.
- Nievergelt, N. Pippenger, and H. R. Strong, "Extendible
- hashing - a fast access method for dynamic files", ACM Trans.
- Database Syst. 4, 3 (1979), 315-344</li>
-
- <li>[<a name="filliatre2000ptset" id=
- "filliatre2000ptset">filliatre2000ptset</a>], J. C.
- Filliatre, "Ptset: Sets of integers implemented as Patricia
- trees", <a href=
- "http://www.lri.fr/~filliatr/ftp/ocaml/misc/ptset.ml">http://www.lri.fr/~filliatr/ftp/ocaml/misc/ptset.ml</a></li>
-
- <li>[<a name="fredman86pairing" id=
- "fredman86pairing">fredman86pairing</a>], M. L. Fredman, R
- Sedgewick, D. D. Sleator, R. E. Tarjan, <a href=
- "http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf">The
- pairing heap: a new form of self-adjusting heap</a></li>
-
- <li>[<a name="gamma95designpatterns" id=
- "gamma95designpatterns">gamma95designpatterns</a>] E. Gamma,
- R. Helm, R. Johnson, and J. Vlissides, "Design Patterns -
- Elements of Reusable Object-Oriented Software",
- Addison-Wesley Publishing Company, Addison-Wesley, 1995</li>
-
- <li>[<a name="garg86order" id="garg86order">garg86order</a>]
- A. K. Garg and C. C. Gotlieb, "Order-preserving key
- transformations", Trans. Database Syst. 11, 2 (1986),
- 213-234</li>
-
- <li>[<a name="hyslop02making" id=
- "hyslop02making">hyslop02making</a>] J. Hyslop, and H.
- Sutter, "Making a real hash of things", C++ Report, May
- 2002</li>
-
- <li>[<a name="jossutis01stl" id=
- "jossutis01stl">jossutis01stl</a>] N. M. Jossutis, "The C++
- Standard Library - A Tutorial and Reference", Addison-Wesley
- Publishing Company, Addison-Wesley, 2001</li>
-
- <li>[<a name="kt99fat_heaps" id=
- "kt99fat_heaps">kt99fat_heas</a>] Haim Kaplan and Robert E.
- Tarjan, <a href=
- "http://www.cs.princeton.edu/research/techreps/TR-597-99">New
- Heap Data Structures</a></li>
-
- <li>[<a name="kleft00sets" id="kleft00sets">kleft00sets</a>]
- Klaus Kleft and Angelika Langer, "Are Set Iterators Mutable
- or Immutable?", C/C++ Users Jornal, October 2000</li>
-
- <li>[<a name="knuth98sorting" id=
- "knuth98sorting">knuth98sorting</a>] D. E. Knuth, "The Art of
- Computer Programming - Sorting and Searching", Addison-Wesley
- Publishing Company, Addison-Wesley, 1998</li>
-
- <li>[<a name="liskov98data" id=
- "liskov98data">liskov98data</a>] B. Liskov, "Data abstraction
- and hierarchy", SIGPLAN Notices 23, 5 (May 1998)</li>
-
- <li>[<a name="litwin80lh" id="litwin80lh">litwin80lh</a>] W.
- Litwin, "Linear hashing: A new tool for file and table
- addressing", Proceedings of International Conference on Very
- Large Data Bases (June 1980), pp. 212-223</li>
-
- <li>[<a name="maverik_lowerbounds" id=
- "maverik_lowerbounds">maverik_lowerbounds</a>] Maverik Woo,
- <a href=
- "http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/">
- Deamortization - Part 2: Binomial Heaps</a></li>
-
- <li>[<a name="metrowerks_stl" id=
- "metrowerks_stl">metrowerks_stl</a>], "Metrowerks CodeWarrior
- Pro 7 MSL C++ Reference Manual",</li>
-
- <li>[<a name="meyers96more" id=
- "meyers96more">meyers96more</a>] S. Meyers, "More Effective
- C++: 35 New Ways to Improve Your Programs and Designs - 2nd
- ed.", Addison-Wesley Publishing Company, Addison-Wesley,
- 1996</li>
-
- <li>[<a name="meyers00nonmember" id=
- "meyers00nonmember">meyers00nonmember</a>] S. Meyers, "How
- Non-Member Functions Improve Encapsulation", C/C++ Users
- Journal, 2000</li>
-
- <li>[<a name="meyers01stl" id="meyers01stl">meyers01stl</a>]
- S. Meyers, "Effective STL: 50 Specific Ways to Improve Your
- Use of the Standard Template Library", Addison-Wesley
- Publishing Company, Addison-Wesley, 2001</li>
-
- <li>[<a name="meyers02both" id=
- "meyers02both">meyers02both</a>] S. Meyers, "Class Template,
- Member Template - or Both?", C/C++ Users Journal, 2003</li>
-
- <li>[<a name="motwani95random" id=
- "motwani95random">motwani95random</a>] R. Motwani, and P.
- Raghavan, "Randomized Algorithms", Cambridge University
- Press</li>
-
- <li>[<a name="mscom" id="mscom">mscom</a>] <a href=
- "http://www.microsoft.com/com">COM: Component Model Object
- Technologies</a></li>
-
- <li>[<a name="musser95rationale" id=
- "musser95rationale">musser95rationale</a>], David R. Musser,
- "Rationale for Adding Hash Tables to the C++ Standard
- Template Library"</li>
-
- <li>[<a name="musser96stltutorial" id=
- "musser96stltutorial">musser96stltutorial</a>] D. R. Musser
- and A. Saini, "STL Tutorial and Reference Guide",
- Addison-Wesley Publishing Company, Addison-Wesley, 1996</li>
-
- <li>[<a name="nelson96stlpq" id=
- "nelson96stlpq">nelson96stlpql</a>] Mark Nelson, <a href=
- "http://www.dogma.net/markn/articles/pq_stl/priority.htm">Priority
- Queues and the STL</a>, Dr. Dobbs Journal, January, 1996</li>
-
- <li>[<a name="okasaki98mereable" id=
- "okasaki98mereable">okasaki98mereable</a>] C. Okasaki and A.
- Gill, "Fast mergeable integer maps", In Workshop on ML, pages
- 77--86, September 1998. 95</li>
-
- <li>[<a name="sgi_stl" id="sgi_stl">sgi_stl</a>] SGI,
- "Standard Template Library Programmer's Guide", <a href=
- "http://www.sgi.com/tech/stl/">http://www.sgi.com/tech/stl</a></li>
-
- <li>[<a name="select_man" id="select_man">select_man</a>]
- <a href=
- "http://www.scit.wlv.ac.uk/cgi-bin/mansec?3C+select"><tt>select</tt>
- man page.</a></li>
-
- <li>[<a name="sleator84amortized" id=
- "sleator84amortized">sleator84amortized</a>] D. D. Sleator
- and R. E. Tarjan, "Amortized Efficiency of List Update
- Problems", ACM Symposium on Theory of Computing, 1984</li>
-
- <li>[<a name="sleator85self" id=
- "sleator85self">sleator85self</a>] D. D. Sleator and R. E.
- Tarjan, "Self-Adjusting Binary Search Trees", ACM Symposium
- on Theory of Computing, 1985</li>
-
- <li>[<a name="stepanov94standard" id=
- "stepanov94standard">stepanov94standard</a>] A. A. Stepanov
- and M. Lee", "The Standard Template Library"</li>
-
- <li>[<a name="stroustrup97cpp" id=
- "stroustrup97cpp">stroustrup97cpp</a>] Bjarne Stroustrup,
- <i>The C++ Programming Langugage -3rd ed.</i>, Addison-Wesley
- Publishing Company,Reading, MA, USA, 1997</li>
-
- <li>[<a name="vandevoorde2002cpptemplates" id=
- "vandevoorde2002cpptemplates">vandevoorde2002cpptemplates</a>]
- D. Vandevoorde, and N. M. Josuttis, "C++ Templates: The
- Complete Guide", Addison-Wesley Publishing Company,
- Addison-Wesley, 2002</li>
-
- <li>[<a name="wickland96thirty" id=
- "wickland96thirty">wickland96thirty</a>] C. A. Wickland,
- "Thirty Years Among the Dead", National Psychological
- Institute, Los Angeles, 1996,<a href=
- "http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip">http://myweb.wvnet.edu/gsa00121/books/amongdead30.zip</a></li>
- </ol>
- <hr />
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/resize_error.html b/libstdc++-v3/doc/html/ext/pb_ds/resize_error.html
deleted file mode 100644
index 6aab88c15a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/resize_error.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>resize_error Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1><tt>resize_error</tt> Interface</h1>
-
-<p>A container cannot be resized.</p>
-
-<p>Exception thrown when a size policy cannot supply an
- adequate size for an external resize.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/exception.hpp"><tt>exception.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- <a href="exceptions.html"><span class=
- "c2"><tt>resize_error</tt></span></a>
- </pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
- </body>
- </html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_probe_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_probe_fn.html
deleted file mode 100644
index 51dccce5ca..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_probe_fn.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_probe_fn</tt> Interface</h1>
-
- <p>A sample probe policy.</p>
-
- <p>This class serves to show the interface a probe functor
- needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp"><tt>sample_probe_fn.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_probe_fn
- (<b>const</b> sample_probe_fn &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_probe_fn &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Offset methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (const_key_reference r_key,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <span class="c1"><tt>i</tt></span>-th
- offset from the hash value of some key <span class=
- "c1"><tt>r_key</tt></span>.</p>
-
- <p><tt>size_type</tt> is the size type on which the
- functor operates.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_range_hashing.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_range_hashing.html
deleted file mode 100644
index 85051873c6..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_range_hashing.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_range_hashing Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_range_hashing</tt> Interface</h1>
-
- <p>A sample range-hashing functor.</p>
-
- <p>This class serves to show the interface a range-hashing
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp"><tt>sample_range_hashing.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_range_hashing &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_range_hashing &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Notification methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> hash) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms the hash value <span class=
- "c1"><tt>hash</tt></span> into a ranged-hash value.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_hash_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_hash_fn.html
deleted file mode 100644
index 834f496504..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_hash_fn.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_ranged_hash_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_ranged_hash_fn</tt> Interface</h1>
-
- <p>A sample ranged-hash functor.</p>
-
- <p>This class serves to show the interface a ranged-hash
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp"><tt>sample_ranged_hash_fn.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_hash_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_hash_fn
- (<b>const</b> sample_ranged_hash_fn &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_ranged_hash_fn &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Notification methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (const_key_reference r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms <span class="c1"><tt>r_key</tt></span> into
- a position within the table.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_probe_fn.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_probe_fn.html
deleted file mode 100644
index ee1bc06642..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_ranged_probe_fn.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_ranged_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_ranged_probe_fn</tt> Interface</h1>
-
- <p>A sample ranged-probe functor.</p>
-
- <p>This class serves to show the interface a ranged-probe
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp"><tt>sample_ranged_probe_fn.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_probe_fn
- (<b>const</b> sample_ranged_probe_fn &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_ranged_probe_fn &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Notification methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (const_key_reference r_key,
- size_t hash,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms the <tt><b>const</b></tt> key reference
- <span class="c1"><tt>r_key</tt></span> <span class=
- "c1"><tt>into the </tt></span><span class=
- "c1"><tt>i-th </tt></span>position within the table. This
- method <span class="c1"><tt>i</tt></span>s called for
- each collision within the probe sequence.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_resize_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_resize_policy.html
deleted file mode 100644
index 61ff09ba05..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_resize_policy.html
+++ /dev/null
@@ -1,413 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_resize_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_resize_policy</tt> Interface</h1>
-
- <p>A sample resize policy.</p>
-
- <p>This class serves to show the interface a resize policy
- needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp"><tt>sample_resize_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_resize_policy &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_resize_policy &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Insert search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Find search
- notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Erase search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Content change
- notifications.</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Size change
- notifications.</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Queries.</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_new_size
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_used_e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries what the new <span class=
- "c1"><tt>size</tt></span> should be.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_resize_trigger.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_resize_trigger.html
deleted file mode 100644
index 5c8173c8eb..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_resize_trigger.html
+++ /dev/null
@@ -1,462 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_resize_trigger Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_resize_trigger</tt> Interface</h1>
-
- <p>A sample resize trigger policy.</p>
-
- <p>This class serves to show the interface a trigger policy
- needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp"><tt>
- sample_resize_trigger.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_resize_trigger
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_resize_trigger &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_resize_trigger &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Insert search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Find search
- notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Erase search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Content change
- notifications.</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted. the total number of
- entries in the table is <span class=
- "c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Size change
- notifications.</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized as a result of this
- object's signifying that a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_externally_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized externally.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Queries.</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_grow_needed
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_entries) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a grow is needed.</p>
-
- <p>This method is called only if this object indicated
- resize is needed. The actual <span class=
- "c1"><tt>size</tt></span> of the table is <span class=
- "c1"><tt>size</tt></span>, and the number of entries in
- it is <span class="c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Private Methods</a></h2>
-
- <h3><a name="link13" id="link13">Overrides.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_size_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_size_policy.html
deleted file mode 100644
index ebb14d30b5..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_size_policy.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_size_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_size_policy</tt> Interface</h1>
-
- <p>A sample size policy.</p>
-
- <p>This class serves to show the interface a size policy needs
- to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp"><tt>sample_size_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_size_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_size_policy &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_size_policy &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Size methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_larger_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is larger.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_smaller_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is smaller.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_tree_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_tree_node_update.html
deleted file mode 100644
index aefd670567..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_tree_node_update.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_tree_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_tree_node_update</tt> Interface</h1>
-
- <p>A sample node updater.</p>
-
- <p>This class serves to show the interface a node update
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp"><tt>
- sample_tree_node_update.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Metadata definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
-
- <p>This can be any type; size_t is merely an example.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Protected Methods</a></h2>
-
- <h3><a name="link5" id="link5">Conclassors, declassor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_tree_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (node_iterator node_it,
- const_node_iterator end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <span class=
- "c1"><tt>node_iterator</tt></span> <span class=
- "c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node
- iterator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_e_access_traits.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_e_access_traits.html
deleted file mode 100644
index a46c91b1d1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_e_access_traits.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_trie_e_access_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_trie_e_access_traits</tt> Interface</h1>
-
- <p>A sample trie element-access traits.</p>
-
- <p>This class serves to show the interface an element- access
- traits class needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp">
- <tt>sample_trie_e_access_traits.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-std::string, e.g.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-const string &amp;, e.g.
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link3" id="link3">Element definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-string::const_iterator, e.g.
-</pre>
- </td>
-
- <td>
- <p>Element <tt><b>const</b></tt> iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_type393186" id="e_type393186">e_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-char, e.g.
-</pre>
- </td>
-
- <td>
- <p>Element type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_size10483336" id="max_size10483336">max_size</a>
-</pre>
- </td>
-
- <td>
- <pre>
-4, e.g.
-</pre>
- </td>
-
- <td>
- <p>Number of distinct elements.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Access methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the first element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the after-last element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#size_type55424436"><tt>size_type</tt></a>
- e_pos
- (<a href="#e_type393186"><tt>e_type</tt></a> e)
-</pre>
- </td>
-
- <td>
- <p>Maps an <span class="c1"><tt>element</tt></span> to a
- position.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_node_update.html
deleted file mode 100644
index 61b6b407f6..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_node_update.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_trie_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_trie_node_update</tt> Interface</h1>
-
- <p>A sample node updater.</p>
-
- <p>This class serves to show the interface a node update
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp"><tt>
- sample_trie_node_update.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Metadata definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
-
- <p>This can be any type; size_t is merely an example.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Protected Methods</a></h2>
-
- <h3><a name="link5" id="link5">Conclassors, declassor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_trie_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (node_iterator node_it,
- const_node_iterator end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <span class=
- "c1"><tt>node_iterator</tt></span> <span class=
- "c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node
- iterator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_update_policy.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_update_policy.html
deleted file mode 100644
index 8a286c74c7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/sample_update_policy.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_update_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_update_policy</tt> Interface</h1>
-
- <p>A sample list-update policy.</p>
-
- <p>This class serves to show the interface a list update
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp"><tt>sample_update_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Methods</a></h2>
-
- <h3><a name="link2" id="link2">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_update_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_update_policy
- (<b>const</b> sample_update_policy &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_update_policy &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Protected Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Metadata definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Some metadata type.
-</pre>
- </td>
-
- <td>
- <p>Metadata on which this functor operates.</p>
-
- <p>The <tt><b>class</b></tt> must declare the metadata
- type on which it operates; the list-update based
- containers will append to each node an object of this
- type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Metadata operations.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#metadata_type2849297114"><tt>metadata_type</tt></a>
- <b>operator</b>()
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Creates a metadata object.</p>
-
- <p>A list-update based container object will call this
- method to create a metadata type when a node is
- created.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>bool</b>
- <b>operator</b>()
- (metadata_reference r_data) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Decides whether a metadata object should be moved to
- the front of the list. A list-update based containers
- object will call this method to decide whether to move a
- node to the front of the list. The method should return
- <tt><b>true</b></tt> if the node should be moved to the
- front of the list.</p>
-
- <p><tt>metadata_reference</tt> is a reference to a
- <a href=
- "#metadata_type2849297114"><tt>metadata_type</tt></a>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/splay_tree_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/splay_tree_tag.html
deleted file mode 100644
index 3e6a64b1ca..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/splay_tree_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>splay_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>splay_tree_tag</tt> Interface</h1>
-
- <p>Splay tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/string_trie_e_access_traits.html b/libstdc++-v3/doc/html/ext/pb_ds/string_trie_e_access_traits.html
deleted file mode 100644
index 4ce9e864a9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/string_trie_e_access_traits.html
+++ /dev/null
@@ -1,400 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>string_trie_e_access_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>string_trie_e_access_traits</tt> Interface</h1>
-
- <p>Element access traits for string types.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="String349403" id="String349403"><b>class</b> String </a>
-</pre>
- </td>
-
- <td>
- <p>String type.</p>
- </td>
-
- <td><tt>std::string</tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Min_E_Val40354618" id=
-"Min_E_Val40354618"><b>typename</b> </a><a href=
-"#String349403"><tt>String</tt></a>::value_type Min_E_Val
-</pre>
- </td>
-
- <td>
- <p>Minimal element.</p>
- </td>
-
- <td><tt>SCHAR_MIN</tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Max_E_Val39885868" id=
-"Max_E_Val39885868"><b>typename</b> </a><a href=
-"#String349403"><tt>String</tt></a>::value_type Max_E_Val
-</pre>
- </td>
-
- <td>
- <p>Maximal element.</p>
- </td>
-
- <td><tt>SCHAR_MAX</tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Reverse1686776" id=
-"Reverse1686776"><b>bool</b> Reverse </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether reverse iteration should be
- used.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator&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">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#String349403"><tt>String</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>&gt;::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Element-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reverse2186776" id="reverse2186776">reverse</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Reverse1686776"><tt>Reverse</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Reverse1686776"><tt>Reverse</tt></a>
- iteration indicator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> __gnu_pbds::detail::__conditional_type&lt;
- <a href="#Reverse1686776"><tt>Reverse</tt></a>,
- <b>typename</b> <a href=
-"#String349403"><tt>String</tt></a>::const_reverse_iterator,
- <b>typename</b> <a href=
-"#String349403"><tt>String</tt></a>::const_iterator&gt;::__type
-</pre>
- </td>
-
- <td>
- <p>Element <tt><b>const</b></tt> iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_type393186" id="e_type393186">e_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> std::iterator_traits&lt;<a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>&gt;::value_type
-</pre>
- </td>
-
- <td>
- <p>Element type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="min_e_val52875418" id="min_e_val52875418">min_e_val</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Min_E_Val40354618"><tt>Min_E_Val</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Minimal element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_e_val52406668" id="max_e_val52406668">max_e_val</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Max_E_Val39885868"><tt>Max_E_Val</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Maximal element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_size10483336" id="max_size10483336">max_size</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#max_e_val52406668"><tt>max_e_val</tt></a> - <a href=
-"#min_e_val52875418"><tt>min_e_val</tt></a> + 1
-</pre>
- </td>
-
- <td>
- <p>Number of distinct elements.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the first element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the after-last element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#size_type55424436"><tt>size_type</tt></a>
- e_pos
- (<a href="#e_type393186"><tt>e_type</tt></a> e)
-</pre>
- </td>
-
- <td>
- <p>Maps an <span class="c1"><tt>e</tt></span>element to a
- position.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tests.html b/libstdc++-v3/doc/html/ext/pb_ds/tests.html
deleted file mode 100644
index ab5d54bb4f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tests.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Tests</h1>
-
- <p><a href="assoc_tests.html">Associative-Container Tests</a>
- describes tests for associative containers; <a href=
- "pq_tests.html">Priority-Queue Tests</a> describes tests for
- priority queues.</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_gcc.png
deleted file mode 100644
index 59247ec6ad..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_local.png
deleted file mode 100644
index d85980f30f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_msvc.png
deleted file mode 100644
index 227164568f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_gcc.png
deleted file mode 100644
index 8b6c4f0f05..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_local.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_local.png
deleted file mode 100644
index b7fdc47464..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_msvc.png
deleted file mode 100644
index dc82a4e7e8..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_tree_like_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/thin_heap_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/thin_heap_tag.html
deleted file mode 100644
index c441896646..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/thin_heap_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>thin_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>thin_heap_tag</tt> Interface</h1>
-
- <p>Thin heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree.html b/libstdc++-v3/doc/html/ext/pb_ds/tree.html
deleted file mode 100644
index 3202a6e9f9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree.html
+++ /dev/null
@@ -1,516 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>tree</tt> Interface</h1>
-
- <p>A concrete basic tree-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>
- <pre>
-std::less&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag </a>
-</pre>
- </td>
-
- <td>
- <p>Mapped-structure tag.</p>
- </td>
-
- <td><a href="rb_tree_tag.html"><span class=
- "c2"><tt>rb_tree_tag</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Update841554648" id=
-"Node_Update841554648"><b>template</b>&lt;
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>class</b> Cmp_Fn_,
- <b>typename</b> Allocator_&gt;
-<b>class</b> Node_Update </a>
-</pre>
- </td>
-
- <td>
- <p>Node updater type.</p>
-
- <p><a href=
- "tree_based_containers.html#invariants">Design::Tree-Based
- Containers::Node Invariants</a> explains this
- concept.</p>
- </td>
-
- <td><a href="null_tree_node_update.html"><span class=
- "c2"><tt>null_tree_node_update</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator&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="basic_tree.html"><span class=
-"c2"><tt>basic_tree</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="cmp_fn394495" id="cmp_fn394495">cmp_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"tree_const_node_iterator.html"><span class=
-"c2"><tt>const_node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="tree_node_iterator.html"><span class=
-"c2"><tt>node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- tree
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- tree
- (<b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- tree
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- tree
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- tree
- (<b>const</b> <span class=
-"c2"><tt>tree</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~tree
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>tree</tt></span> &amp;
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>tree</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>tree</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;
- get_cmp_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;
- get_cmp_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a> object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Node-Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to the node at the root of the tree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to the node at the root of the tree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- tree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- tree.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_based_containers.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_based_containers.html
deleted file mode 100644
index 63c7c74823..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_based_containers.html
+++ /dev/null
@@ -1,358 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Tree-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Tree Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The tree-based container has the following declaration:</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Cmp_Fn = std::less&lt;Key&gt;,
- <b>typename</b> Tag = <a href="rb_tree_tag.html">rb_tree_tag</a>,
- <b>template</b>&lt;
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>typename</b> Cmp_Fn_,
- <b>typename</b> Allocator_&gt;
- <b>class</b> Node_Update = <a href=
-"null_tree_node_update.html">null_tree_node_update</a>,
- <b>typename</b> Allocator = std::allocator&lt;<b>char</b>&gt; &gt;
-<b>class</b> <a href=
-"tree.html">tree</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy.</li>
-
- <li><tt>Cmp_Fn</tt> is a key comparison functor</li>
-
- <li><tt>Tag</tt> specifies which underlying data structure
- to use.</li>
-
- <li><tt>Node_Update</tt> is a policy for updating node
- invariants. This is described in <a href="#invariants">Node
- Invariants</a>.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The <tt>Tag</tt> parameter specifies which underlying
- data structure to use. Instantiating it by <a href=
- "rb_tree_tag.html"><tt>rb_tree_tag</tt></a>, <a href=
- "splay_tree_tag.html"><tt>splay_tree_tag</tt></a>, or
- <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>,
- specifies an underlying red-black tree, splay tree, or
- ordered-vector tree, respectively; any other tag is illegal.
- Note that containers based on the former two contain more types
- and methods than the latter (<i>e.g.</i>,
- <tt>reverse_iterator</tt> and <tt>rbegin</tt>), and different
- exception and invalidation guarantees.</p>
-
- <h2><a name="invariants" id="invariants">Node
- Invariants</a></h2>
-
- <p>Consider the two trees in Figures <a href=
- "#node_invariants">Some node invariants</a> A and B. The first
- is a tree of floats; the second is a tree of pairs, each
- signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
- these trees can support the usual queries: the first can easily
- search for <tt>0.4</tt>; the second can easily search for
- <tt>std::make_pair(10, 41)</tt>.</p>
-
- <p>Each of these trees can efficiently support other queries.
- The first can efficiently determine that the 2rd key in the
- tree is <tt>0.3</tt>; the second can efficiently determine
- whether any of its intervals overlaps
- <tt>std::make_pair(29,42)</tt> (useful in geometric
- applications or distributed file systems with leases, for
- example). (See <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc"><tt>tree_order_statistics.cc</tt></a>
- and <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_intervals.cc"><tt>tree_intervals.cc</tt></a>
- for examples.) It should be noted that an <tt>std::set</tt> can
- only solve these types of problems with linear complexity.</p>
-
- <p>In order to do so, each tree stores some <i>metadata</i> in
- each node, and maintains node invariants <a href=
- "references.html#clrs2001">clrs2001</a>]. The first stores in
- each node the size of the sub-tree rooted at the node; the
- second stores at each node the maximal endpoint of the
- intervals at the sub-tree rooted at the node.</p>
-
- <h6 class="c1"><a name="node_invariants" id=
- "node_invariants"><img src="node_invariants.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Some node invariants.</h6>
-
- <p>Supporting such trees is difficult for a number of
- reasons:</p>
-
- <ol>
- <li>There must be a way to specify what a node's metadata
- should be (if any).</li>
-
- <li>Various operations can invalidate node invariants.
- <i>E.g.</i>, Figure <a href=
- "#node_invariant_invalidations">Invalidation of node
- invariants</a> shows how a right rotation, performed on A,
- results in B, with nodes <i>x</i> and <i>y</i> having
- corrupted invariants (the grayed nodes in C); Figure <a href=
- "#node_invariant_invalidations">Invalidation of node
- invariants</a> shows how an insert, performed on D, results
- in E, with nodes <i>x</i> and <i>y</i> having corrupted
- invariants (the grayed nodes in F). It is not feasible to
- know outside the tree the effect of an operation on the nodes
- of the tree.</li>
-
- <li>The search paths of standard associative containers are
- defined by comparisons between keys, and not through
- metadata.</li>
-
- <li>It is not feasible to know in advance which methods trees
- can support. Besides the usual <tt>find</tt> method, the
- first tree can support a <tt>find_by_order</tt> method, while
- the second can support an <tt>overlaps</tt> method.</li>
- </ol>
-
- <h6 class="c1"><a name="node_invariant_invalidations" id=
- "node_invariant_invalidations"><img src=
- "node_invariant_invalidations.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Invalidation of node invariants.</h6>
-
- <p>These problems are solved by a combination of two means:
- node iterators, and template-template node updater
- parameters.</p>
-
- <h3><a name="node_it" id="node_it">Node Iterators</a></h3>
-
- <p>Each tree-based container defines two additional iterator
- types, <a href=
- "tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- and <a href=
- "tree_node_iterator.html"><tt>node_iterator</tt></a>.
- These iterators allow descending from a node to one of its
- children. Node iterator allow search paths different than those
- determined by the comparison functor. <a href=
- "tree.html">tree</a>
- supports the methods:</p>
- <pre>
- <a href="tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- node_begin() <b>const</b>;
-
- <a href="tree_node_iterator.html"><tt>node_iterator</tt></a>
- node_begin();
-
- <a href="tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- node_end() <b>const</b>;
-
- <a href="tree_node_iterator.html"><tt>node_iterator</tt></a>
- node_end();
-</pre>
-
- <p>The first pairs return node iterators corresponding to the
- root node of the tree; the latter pair returns node iterators
- corresponding to a just-after-leaf node.</p>
-
- <h3><a name="node_up" id="node_up">Node Updater
- (Template-Template) Parameters</a></h3>
-
- <p>The tree-based containers are parametrized by a
- <tt>Node_Update</tt> template-template parameter. A tree-based
- container instantiates <tt>Node_Update</tt> to some
- <tt>node_update</tt> class, and publicly
- subclasses <tt>node_update</tt>. Figure
- <a href="#tree_node_update_cd">A tree and its update
- policy</a> shows this scheme, as well as some predefined
- policies (which are explained below).</p>
-
- <h6 class="c1"><a name="tree_node_update_cd" id=
- "tree_node_update_cd"><img src=
- "tree_node_update_policy_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A tree and its update policy.</h6>
-
- <p><tt>node_update</tt> (an instantiation of
- <tt>Node_Update</tt>) must define <tt>metadata_type</tt> as
- the type of metadata it requires. For order statistics,
- <i>e.g.</i>, <tt>metadata_type</tt> might be <tt>size_t</tt>.
- The tree defines within each node a <tt>metadata_type</tt>
- object.</p>
-
- <p><tt>node_update</tt> must also define the following method
- for restoring node invariants:</p>
- <pre>
- void
- operator()(<a href=
-"tree_node_iterator.html"><tt>node_iterator</tt></a> nd_it, <a href=
-"tree_const_node_iterator.html"><tt>const_node_iterator</tt></a> end_nd_it)
-</pre>
-
- <p>In this method, <tt>nd_it</tt> is a <a href=
- "tree_node_iterator.html"><tt>node_iterator</tt></a>
- corresponding to a node whose A) all descendants have valid
- invariants, and B) its own invariants might be violated;
- <tt>end_nd_it</tt> is a <a href=
- "tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- corresponding to a just-after-leaf node. This method should
- correct the node invariants of the node pointed to by
- <tt>nd_it</tt>. For example, say node <i>x</i> in Figure
- <a href="#restoring_node_invariants">Restoring node
- invariants</a>-A has an invalid invariant, but its' children,
- <i>y</i> and <i>z</i> have valid invariants. After the
- invocation, all three nodes should have valid invariants, as in
- Figure <a href="#restoring_node_invariants">Restoring node
- invariants</a>-B.</p>
-
- <h6 class="c1"><a name="restoring_node_invariants" id=
- "restoring_node_invariants"><img src=
- "restoring_node_invariants.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Invalidation of node invariants.</h6>
-
- <p>When a tree operation might invalidate some node invariant,
- it invokes this method in its <tt>node_update</tt> base to
- restore the invariant. For example, Figure <a href=
- "#update_seq_diagram">Insert update sequence diagram</a> shows
- an <tt>insert</tt> operation (point A); the tree performs some
- operations, and calls the update functor three times (points B,
- C, and D). (It is well known that any <tt>insert</tt>,
- <tt>erase</tt>, <tt>split</tt> or <tt>join</tt>, can restore
- all node invariants by a small number of node invariant updates
- [<a href="references.html#clrs2001">clrs2001</a>].)</p>
-
- <h6 class="c1"><a name="update_seq_diagram" id=
- "update_seq_diagram"><img src="update_seq_diagram.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Insert update sequence diagram.</h6>
-
- <p>To complete the description of the scheme, three questions
- need to be answered:</p>
-
- <ol>
- <li>How can a tree which supports order statistics define a
- method such as <tt>find_by_order</tt>?</li>
-
- <li>How can the node updater base access methods of the
- tree?</li>
-
- <li>How can the following cyclic dependency be resolved?
- <tt>node_update</tt> is a base class of the tree, yet it
- uses node iterators defined in the tree (its child).</li>
- </ol>
-
- <p>The first two questions are answered by the fact that
- <tt>node_update</tt> (an instantiation of
- <tt>Node_Update</tt>) is a <tt><b>public</b></tt> base class
- of the tree. Consequently:</p>
-
- <ol>
- <li>Any public methods of <tt>node_update</tt> are
- automatically methods of the tree [<a href=
- "references.html#alexandrescu01modern">alexandrescu01modern</a>].
- Thus an order-statistics node updater, <a href=
- "tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
- defines the <tt>find_by_order</tt> method; any tree
- instantiated by this policy consequently supports this method
- as well.</li>
-
- <li>In C++, if a base class declares a method as
- <tt><b>virtual</b></tt>, it is <tt><b>virtual</b></tt> in its
- subclasses. If <tt>node_update</tt> needs to access one of
- the tree's methods, say the member function <tt>end</tt>, it simply
- declares that method as <tt><b>virtual</b></tt>
- abstract.</li>
- </ol>
-
- <p>The cyclic dependency is solved through template-template
- parameters. <tt>Node_Update</tt> is parametrized by the tree's node iterators, its comparison
- functor, and its allocator type. Thus,
- instantiations of <tt>Node_Update</tt> have all information required.</p>
-
- <p class="c1"><tt>pb_ds</tt> assumes that constructing a metadata object and modifying it
- are exception free. Suppose that during some method, say
- <tt>insert</tt>, a metadata-related operation
- (<i>e.g.</i>, changing the value of a metadata) throws an
- exception. Ack! Rolling back the method is unusually complex.</p>
-
- <p>In <a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> a distinction was made between <i>redundant
- policies</i> and <i>null policies</i>. Node invariants show a
- case where null policies are required.</p>
-
- <p>Assume a regular tree is required, one which need not
- support order statistics or interval overlap queries.
- Seemingly, in this case a redundant policy - a policy which
- doesn't affect nodes' contents would suffice. This, would lead
- to the following drawbacks:</p>
-
- <ol>
- <li>Each node would carry a useless metadata object, wasting
- space.</li>
-
- <li>The tree cannot know if its <tt>Node_Update</tt> policy
- actually modifies a node's metadata (this is halting
- reducible). In Figure <a href=
- "#rationale_null_node_update">Useless update path</a> ,
- assume the shaded node is inserted. The tree would have to
- traverse the useless path shown to the root, applying
- redundant updates all the way.</li>
- </ol>
-
- <h6 class="c1"><a name="rationale_null_node_update" id=
- "rationale_null_node_update"><img src=
- "rationale_null_node_update.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Useless update path.</h6>
-
- <p>A null policy class, <a href=
- "null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
- solves both these problems. The tree detects that node
- invariants are irrelevant, and defines all accordingly.</p>
-
- <h2><a name="add_methods" id="add_methods">Additional
- Methods</a></h2>
-
- <p>Tree-based containers support split and join methods.
- It is possible to split a tree so that it passes
- all nodes with keys larger than a given key to a different
- tree. These methods have the following advantages over the
- alternative of externally inserting to the destination
- tree and erasing from the source tree:</p>
-
- <ol>
- <li>These methods are efficient - red-black trees are split
- and joined in poly-logarithmic complexity; ordered-vector
- trees are split and joined at linear complexity. The
- alternatives have super-linear complexity.</li>
-
- <li>Aside from orders of growth, these operations perform
- few allocations and de-allocations. For red-black trees, allocations are not performed,
- and the methods are exception-free. </li>
- </ol>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_node_iterator.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_node_iterator.html
deleted file mode 100644
index ba09b5b4db..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_node_iterator.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree::node_iterator Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>tree</tt></span>::node_iterator</tt>
- Interface</h1>
-
- <p>Node iterator.</p>
-
- <p>This is an <quote>iterator to an iterator </quote> - it
- iterates over nodes, and de-referencing it returns one of the
- tree's iterators</p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"tree.html#const_node_iterator4205924553"><span class="c2"><tt>tree</tt></span>::const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Methods</a></h2>
-
- <h3><a name="link3" id="link3">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- node_iterator
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"container_base.html#iterator10418194"><span class=
-"c2"><tt>container_base</tt></span>::iterator</a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Movement Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <span class="c2"><tt>node_iterator</tt></span>
- get_l_child
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the node iterator associated with the left
- node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <span class="c2"><tt>node_iterator</tt></span>
- get_r_child
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the node iterator associated with the right
- node.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_node_update.html
deleted file mode 100644
index f4345531f4..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_node_update.html
+++ /dev/null
@@ -1,678 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree_order_statistics_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>tree_order_statistics_node_update</tt> Interface</h1>
-
- <p>Functor updating ranks of entrees.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tree_policy.hpp"><tt>tree_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="cmp_fn394495" id="cmp_fn394495">cmp_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Key-type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's key type.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const key reference type.
-</pre>
- </td>
-
- <td>
- <p>Const key reference.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#Const_Node_Iterator1933878761"><tt>Const_Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Iterator4206909839"><tt>Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Const iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Iterator type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Find-Type Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- find_by_order
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> order) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the entry with the order <span class=
- "c1"><tt>order</tt></span>, or a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- find_by_order
- (<a href="#size_type55424436"><tt>size_type</tt></a> order)
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> to the entry
- with the order <span class="c1"><tt>order</tt></span>, or
- an <a href="#iterator10418194"><tt>iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- order_of_key
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the order of a key within a sequence. For
- example, if <span class="c1"><tt>r_key</tt></span> is the
- smallest key, this method will return 0; if <span class=
- "c1"><tt>r_key</tt></span> is a key between the smallest
- and next key, this method will return 1; if <span class=
- "c1"><tt>r_key</tt></span> is a key larger than the
- largest key, this method will return the size of r_c.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Types and
- Constants</a></h2>
-
- <h3><a name="link11" id="link11">Value-type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const reference type.
-</pre>
- </td>
-
- <td>
- <p>Const reference to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const pointer type.
-</pre>
- </td>
-
- <td>
- <p>Const pointer to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind&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 reference.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_reference583863863" id=
-"metadata_reference583863863">metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>&gt;::other::reference
-</pre>
- </td>
-
- <td>
- <p>Metadata reference.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Protected Methods</a></h2>
-
- <h3><a name="link13" id="link13">Operators</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (<a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a> node_it,
- <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a> end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- <span class="c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Constructors, destructor, and
- related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~tree_order_statistics_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link15" id="link15">Private Methods</a></h2>
-
- <h3><a name="link16" id="link16">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with the tree's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with the tree's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> &amp;
- get_cmp_fn
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a> object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test.html
deleted file mode 100644
index ef811613e9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Order Statistics Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree Order-Statistics Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test creates a container, inserts random integers into
- the the container, and then checks the order-statistics of the
- container's values. (If the container is one of <tt>pb_ds</tt>
- 's trees, it does this with the <tt>order_of_key</tt> method of
- <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
- ; otherwise, it uses the <tt>find</tt> method and
- <tt>std::distance</tt> .) It measures the average time for such
- queries as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc"><tt>tree_order_statistics_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the performance difference of policies based
- on node-invariant as opposed to a external functions. (see
- <a href="tree_based_containers.html#invariants">Design::Associative
- Containers::Tree-Based Containers::Node Invariants</a> .)</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for the native and
- tree-based containers in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_tree_order_statistics_timing_test">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_tree-based_container_order-statistics_queries"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="tree_order_statistics_timing_test_gcc.png" alt="no image" /></a></h6>NTG: Native and tree-based container order-statistics queries - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-<li>
-rb_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_tree_order_statistics_timing_test">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_tree-based_container_order-statistics_queries"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="tree_order_statistics_timing_test_msvc.png" alt="no image" /></a></h6>NTM: Native and tree-based container order-statistics queries - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-<li>
-rb_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_tree_order_statistics_timing_test">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_tree-based_container_order-statistics_queries"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="tree_order_statistics_timing_test_local.png" alt="no image" /></a></h6>NTL: Native and tree-based container order-statistics queries - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this test, the native red-black tree can support
- order-statistics queries only externally, by performing a
- <tt>find</tt> (alternatively, <tt>lower_bound</tt> or
- <tt>upper_bound</tt> ) and then using <tt>std::distance</tt> .
- This is clearly linear, and it is not that surprising that the
- cost is high.</p>
-<p><tt>pb_ds</tt> 's tree-based containers use in this test the
- <tt>order_of_key</tt> method of <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>.
- This method has only linear complexity in the length of the
- root-node path. Unfortunately, the average path of a splay tree
- (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) can
- be higher than logarithmic; the longest path of a red-black
- tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a> ) is
- logarithmic in the number of elements. Consequently, the splay
- tree has worse performance than the red-black tree.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_gcc.png
deleted file mode 100644
index bdb00d07a7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_local.png
deleted file mode 100644
index 2b921743f7..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_msvc.png
deleted file mode 100644
index 76dcbee44f..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_random_int_find_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_random_int_find_find_timing_test.html
deleted file mode 100644
index c34354f3ed..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_random_int_find_find_timing_test.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based and Trie-Based Text <tt>find</tt> Find Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([<a href="references.html#wickland96thirty">wickland96thirty</a>]) into
- a container, then performs a series of finds using
- <tt>find</tt>. It measures the average time for <tt>find</tt>
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc"><tt>text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTTG">NTTG</a>, <a href="#NTTM">NTTM</a>,
- and <a href="#NTTG">NTTL</a> show the results for the native,
- tree-based, and trie-based types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#local"><u>local</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTTG_res_div">
-<div id="NTTG_gcc">
-<div id="NTTG_random_int_find_find_timing_test_tree">
-<div id="NTTG_assoc">
-<div id="NTTG_Native_456_tree-based_456_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTG" id="NTTG"><img src="random_int_find_find_timing_test_tree_gcc.png" alt="no image" /></a></h6>NTTG: Native, tree-based, random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-<div id="NTTM_res_div">
-<div id="NTTM_msvc">
-<div id="NTTM_random_int_find_find_timing_test_tree">
-<div id="NTTM_assoc">
-<div id="NTTM_Native_456_tree-based_456_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTM" id="NTTM"><img src="random_int_find_find_timing_test_tree_msvc.png" alt="no image" /></a></h6>NTTM: Native, tree-based, random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-<div id="NTTL_res_div">
-<div id="NTTL_local">
-<div id="NTTL_random_int_find_find_timing_test_tree">
-<div id="NTTL_assoc">
-<div id="NTTL_Native_456_tree-based_456_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTL" id= "NTTL"><img src="random_int_find_find_timing_test_tree_local.png" alt="no image" /></a></h6>NTTL: Native, tree-based, random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>For this setting, a splay tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>)
- does not do well. This is possibly due to two
- reasons:</p>
-<ol>
-<li>A splay tree is not guaranteed to be balanced
- [<a href="references.html#motwani95random">motwani95random</a>].
- If a splay tree contains <i>n</i> nodes, its
- average root-leaf path can be <i>m &gt;&gt;
- log(n)</i>.</li>
-<li>Assume a specific root-leaf search path has
- length <i>m</i>, and the search-target node has
- distance <i>m'</i> from the root. A red-black
- tree will require <i>m + 1</i> comparisons to
- find the required node; a splay tree will require
- <i>2 m'</i> comparisons. A splay tree,
- consequently, can perform many more comparisons
- than a red-black tree.</li>
-</ol>
-<p>An ordered-vector tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>),
- a red-black tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>rb_tree_tag</tt></a>),
- and the native red-black tree all share
- approximately the same performance.</p>
-<p>An ordered-vector tree is slightly slower than
- red-black trees, since it requires, in order to
- find a key, more math operations than they do.
- Conversely, an ordered-vector tree requires far
- lower space than the others. ([<a href="references.html#austern00noset">austern00noset</a>],
- however, seems to have an implementation that is
- also faster than a red-black tree).</p>
-<p>A PATRICIA trie (<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag =</tt> <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>)
- has good look-up performance, due to its large
- fan-out in this case. In this setting, a PATRICIA
- trie has lookup performance comparable to a hash
- table (see <a href="hash_text_find_find_timing_test.html">Hash-Based
- Text <tt>find</tt> Find Timing Test</a>), but it is
- order preserving. This is not that surprising,
- since a large fan-out PATRICIA trie works like a
- hash table with collisions resolved by a sub-trie.
- A large fan-out PATRICIA trie does not do well on
- modifications (see <a href="tree_text_insert_timing_test.html">Tree-Based and
- Trie-Based Text Insert Timing Test</a>). It is
- possibly beneficial to semi-static settings,
- therefore.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">
- Observations::Tree-Like-Based Container Types</a>
- summarizes some observations on tree-based and
- trie-based containers.</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test.html
deleted file mode 100644
index 9164984d16..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Split Join Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree Split-Join Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test a container, inserts into a number of values,
- splits the container at the median, and joins the two
- containers. (If the containers are one of <tt>pb_ds</tt> 's
- trees, it splits and joins with the <tt>split</tt> and
- <tt>join</tt> method; otherwise, it uses the <tt>erase</tt> and
- <tt>insert</tt> methods.) It measures the time for splitting
- and joining the containers as a function of the number of
- values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc"><tt>tree_split_join_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the performance difference of <tt>join</tt>
- as opposed to a sequence of <tt>insert</tt> operations; by
- implication, this test checks the most efficient way to erase a
- sub-sequence from a tree-like-based container, since this can
- always be performed by a small sequence of splits and joins
- (see <a href="motivation.html#assoc_split_join_methods">Motivation::Associative
- Containers::Slightly Different Methods::Methods Related to
- Split and Join</a> and <a href="tree_based_containers.html#add_methods">Design::Associative
- Containers::Tree-Based Containers::Additional Methods</a>
- .)</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for the native and
- tree-based containers in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_tree_split_join_timing_test">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_tree-based_container_splits_and_joins"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="tree_split_join_timing_test_gcc.png" alt="no image" /></a></h6>NTG: Native and tree-based container splits and joins - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_tree_split_join_timing_test">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_tree-based_container_splits_and_joins"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="tree_split_join_timing_test_msvc.png" alt="no image" /></a></h6>NTM: Native and tree-based container splits and joins - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_tree_split_join_timing_test">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_tree-based_container_splits_and_joins"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="tree_split_join_timing_test_local.png" alt="no image" /></a></h6>NTL: Native and tree-based container splits and joins - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this test, the native red-black trees must be split and
- joined externally, through a sequence of <tt>erase</tt> and
- <tt>insert</tt> operations. This is clearly super-linear, and
- it is not that surprising that the cost is high.</p>
-<p><tt>pb_ds</tt> 's tree-based containers use in this test the
- <tt>split</tt> and <tt>join</tt> methods, which have lower
- complexity: the <tt>join</tt> method of a splay tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) is
- quadratic in the length of the longest root-leaf path, and
- linear in the total number of elements; the <tt>join</tt>
- method of a red-black tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a> ) or an
- ordered-vector tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a> ) is linear
- in the number of elements.</p>
-<p>Asides from orders of growth, <tt>pb_ds</tt> 's trees access
- their allocator very little in these operations, and some of
- them do not access it at all. This leads to lower constants in
- their complexity, and, for some containers, to exception-free
- splits and joins (which can be determined via <a href="assoc_container_traits.html"><tt>container_traits</tt></a>).</p>
-<p>It is important to note that <tt>split</tt> and
- <tt>join</tt> are not esoteric methods - they are the most
- efficient means of erasing a contiguous range of values from a
- tree based container.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_gcc.png
deleted file mode 100644
index 88867eca6b..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_local.png
deleted file mode 100644
index 131d24a1a1..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_msvc.png
deleted file mode 100644
index 37ed1b2e7c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_tag.html
deleted file mode 100644
index d7265ac183..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>tree_tag</tt> Interface</h1>
-
- <p>Basic tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_tree_tag.html"><span class=
-"c2"><tt>basic_tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_find_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_find_find_timing_test.html
deleted file mode 100644
index fbfdfeffa5..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_find_find_timing_test.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based and Trie-Based Text <tt>find</tt> Find Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([<a href="references.html#wickland96thirty">wickland96thirty</a>]) into
- a container, then performs a series of finds using
- <tt>find</tt>. It measures the average time for <tt>find</tt>
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc"><tt>text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTTG">NTTG</a>, <a href="#NTTM">NTTM</a>,
- and <a href="#NTTG">NTTL</a> show the results for the native,
- tree-based, and trie-based types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#local"><u>local</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTTG_res_div">
-<div id="NTTG_gcc">
-<div id="NTTG_text_find_timing_test_tree_like">
-<div id="NTTG_assoc">
-<div id="NTTG_Native_456_tree-based_456_and_trie-based_456_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTG" id="NTTG"><img src="text_find_timing_test_tree_like_gcc.png" alt="no image" /></a></h6>NTTG: Native, tree-based, and trie-based, text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTTM_res_div">
-<div id="NTTM_msvc">
-<div id="NTTM_text_find_timing_test_tree_like">
-<div id="NTTM_assoc">
-<div id="NTTM_Native_456_tree-based_456_and_trie-based_456_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTM" id="NTTM"><img src="text_find_timing_test_tree_like_msvc.png" alt="no image" /></a></h6>NTTM: Native, tree-based, and trie-based, text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTTL_res_div">
-<div id="NTTL_local">
-<div id="NTTL_text_find_timing_test_tree_like">
-<div id="NTTL_assoc">
-<div id="NTTL_Native_456_tree-based_456_and_trie-based_456_text_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTL" id= "NTTL"><img src="text_find_timing_test_tree_like_local.png" alt="no image" /></a></h6>NTTL: Native, tree-based, and trie-based, text find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>For this setting, a splay tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>) does
- not do well. This is possibly due to two reasons:</p>
-<ol>
-<li>A splay tree is not guaranteed to be balanced [<a href="references.html#motwani95random">motwani95random</a>]. If a
- splay tree contains <i>n</i> nodes, its average root-leaf
- path can be <i>m &gt;&gt; log(n)</i>.</li>
-<li>Assume a specific root-leaf search path has length
- <i>m</i>, and the search-target node has distance <i>m'</i>
- from the root. A red-black tree will require <i>m + 1</i>
- comparisons to find the required node; a splay tree will
- require <i>2 m'</i> comparisons. A splay tree, consequently,
- can perform many more comparisons than a red-black tree.</li>
-</ol>
-<p>An ordered-vector tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>), a red-black
- tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>rb_tree_tag</tt></a>), and the
- native red-black tree all share approximately the same
- performance.</p>
-<p>An ordered-vector tree is slightly slower than red-black
- trees, since it requires, in order to find a key, more math
- operations than they do. Conversely, an ordered-vector tree
- requires far lower space than the others. ([<a href="references.html#austern00noset">austern00noset</a>], however,
- seems to have an implementation that is also faster than a
- red-black tree).</p>
-<p>A PATRICIA trie (<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag =</tt> <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>) has good
- look-up performance, due to its large fan-out in this case. In
- this setting, a PATRICIA trie has look-up performance comparable
- to a hash table (see <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a>), but it is order
- preserving. This is not that surprising, since a large-fan-out
- PATRICIA trie works like a hash table with collisions resolved
- by a sub-trie. A large-fan-out PATRICIA trie does not do well on
- modifications (see <a href="tree_text_insert_timing_test.html">Tree-Based and Trie-Based
- Text Insert Timing Test</a>). It is possibly beneficial to
- semi-static settings, therefore.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">Observations::Tree-Like-Based
- Container Types</a> summarizes some observations on tree-based
- and trie-based containers.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test.html
deleted file mode 100644
index a5815fb2e2..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Insert Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based and Trie-Based Text Insert Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container using <tt>insert</tt> . It measures the average
- time for <tt>insert</tt> as a function of the number of values
- inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc"><tt>tree_text_insert_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NNTG">NNTG</a>, <a href="#NVTG">NVTG</a>,
- and <a href="#NPTG">NPTG</a> show the results for the native
- tree and <tt>pb_ds</tt>'s node-based trees, the native tree and
- <tt>pb_ds</tt>'s vector-based trees, and the native tree
- and<tt>pb_ds</tt>'s PATRICIA-trie, respectively, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>; Figures
- <a href="#NNTM">NNTM</a>, <a href="#NVTM">NVTM</a>, and
- <a href="#NPTM">NPTM</a> show the same in <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>; Figures
- <a href="#NNTL">NNTL</a>, <a href="#NVTL">NVTL</a>, and
- <a href="#NPTL">NPTL</a> show the same in <a href="assoc_performance_tests.html#local"><u>local</u></a>.</p>
-<div id="NNTG_res_div">
-<div id="NNTG_gcc">
-<div id="NNTG_tree_text_insert_timing_test_node_tree">
-<div id="NNTG_assoc">
-<div id="NNTG_Native_tree_and_node-based_trees_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NNTG" id="NNTG"><img src="tree_text_insert_timing_test_node_tree_gcc.png" alt="no image" /></a></h6>NNTG: Native tree and node-based trees text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NVTG_res_div">
-<div id="NVTG_gcc">
-<div id="NVTG_tree_text_insert_timing_test_vector_tree">
-<div id="NVTG_assoc">
-<div id="NVTG_Native_tree_and_vector-based_tree_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NVTG" id="NVTG"><img src="tree_text_insert_timing_test_vector_tree_gcc.png" alt="no image" /></a></h6>NVTG: Native tree and vector-based tree text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPTG_res_div">
-<div id="NPTG_gcc">
-<div id="NPTG_tree_text_insert_timing_test_pat_trie">
-<div id="NPTG_assoc">
-<div id="NPTG_Native_tree_and_PATRICIA_trie_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPTG" id="NPTG"><img src="tree_text_insert_timing_test_pat_trie_gcc.png" alt="no image" /></a></h6>NPTG: Native tree and PATRICIA trie text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NNTM_res_div">
-<div id="NNTM_msvc">
-<div id="NNTM_tree_text_insert_timing_test_node_tree">
-<div id="NNTM_assoc">
-<div id="NNTM_Native_tree_and_node-based_trees_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NNTM" id="NNTM"><img src="tree_text_insert_timing_test_node_tree_msvc.png" alt="no image" /></a></h6>NNTM: Native tree and node-based trees text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NVTM_res_div">
-<div id="NVTM_msvc">
-<div id="NVTM_tree_text_insert_timing_test_vector_tree">
-<div id="NVTM_assoc">
-<div id="NVTM_Native_tree_and_vector-based_tree_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NVTM" id="NVTM"><img src="tree_text_insert_timing_test_vector_tree_msvc.png" alt="no image" /></a></h6>NVTM: Native tree and vector-based tree text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPTM_res_div">
-<div id="NPTM_msvc">
-<div id="NPTM_tree_text_insert_timing_test_pat_trie">
-<div id="NPTM_assoc">
-<div id="NPTM_Native_tree_and_PATRICIA_trie_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPTM" id="NPTM"><img src="tree_text_insert_timing_test_pat_trie_msvc.png" alt="no image" /></a></h6>NPTM: Native tree and PATRICIA trie text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NNTL_res_div">
-<div id="NNTL_local">
-<div id="NNTL_tree_text_insert_timing_test_node_tree">
-<div id="NNTL_assoc">
-<div id="NNTL_Native_tree_and_node-based_trees_text_insert_timing_test_using__tt_insert_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NNTL" id= "NNTL"><img src="tree_text_insert_timing_test_node_tree_local.png" alt="no image" /></a></h6>NNTL: Native tree and node-based trees text insert timing test using <tt>insert</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NVTL_res_div">
-<div id="NVTL_local">
-<div id="NVTL_tree_text_insert_timing_test_vector_tree">
-<div id="NVTL_assoc">
-<div id="NVTL_Native_tree_and_vector-based_tree_text_insert_timing_test_using__tt_insert_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NVTL" id= "NVTL"><img src="tree_text_insert_timing_test_vector_tree_local.png" alt="no image" /></a></h6>NVTL: Native tree and vector-based tree text insert timing test using <tt>insert</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPTL_res_div">
-<div id="NPTL_local">
-<div id="NPTL_tree_text_insert_timing_test_pat_trie">
-<div id="NPTL_assoc">
-<div id="NPTL_Native_tree_and_PATRICIA_trie_text_insert_timing_test_using__tt_insert_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPTL" id= "NPTL"><img src="tree_text_insert_timing_test_pat_trie_local.png" alt="no image" /></a></h6>NPTL: Native tree and PATRICIA trie text insert timing test using <tt>insert</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Observing Figure <a href="#NNTG">NNTG</a> , for this
- setting, a splay tree, ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) does
- not do well. This was covered in <a href="tree_text_find_find_timing_test.html">Tree-Based and
- Trie-Based Text <tt>find</tt> Find Timing Test</a> . The two
- red-black trees perform better.</p>
-<p>Observing Figure <a href="#NVTG">NVTG</a>, an ordered-vector
- tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>) performs
- abysmally. Inserting into this type of tree has linear
- complexity [ <a href="references.html#austern00noset">austern00noset</a>].</p>
-<p>Observing Figure <a href="#NPTG">NPTG</a> , A PATRICIA trie
- ( <a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag =</tt> <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a> ) has
- abysmal performance, as well. This is not that surprising,
- since a large-fan-out PATRICIA trie works like a hash table with
- collisions resolved by a sub-trie. Each time a collision is
- encountered, a new "hash-table" is built A large fan-out
- PATRICIA trie, however, doe does well in look-ups (see <a href="tree_text_find_find_timing_test.html">Tree-Based and
- Trie-Based Text <tt>find</tt> Find Timing Test</a> ). It is
- possibly beneficial to semi-static settings, therefore.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">Observations::Tree-Like-Based
- Container Types</a> summarizes some observations on tree-based
- and trie-based containers.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_gcc.png
deleted file mode 100644
index 22d8f6fc21..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.png
deleted file mode 100644
index bb100084b3..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_msvc.png
deleted file mode 100644
index 18b219851c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_gcc.png
deleted file mode 100644
index 5fe063e63c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.png
deleted file mode 100644
index 228de14422..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_msvc.png
deleted file mode 100644
index 9f13db0c09..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_gcc.png
deleted file mode 100644
index dd85dcd7ca..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.png
deleted file mode 100644
index cecb8a1075..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_msvc.png
deleted file mode 100644
index 8c07313910..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_find_timing_test.html b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_find_timing_test.html
deleted file mode 100644
index c577a56dbc..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_find_timing_test.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Locality of Reference Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based Locality-of-Reference Text <tt>find</tt> Find
- Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container, then performs a series of finds using
- <tt>find</tt> . It is different than <a href="tree_text_find_find_timing_test.html">Tree-Based and
- Trie-Based Text <tt>find</tt> Find Timing Test</a> in the
- sequence of finds it performs: this test performs multiple
- <tt>find</tt> s on the same key before moving on to the next
- key. It measures the average time for <tt>find</tt> as a
- function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc"><tt>tree_text_lor_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures in a locality-of-reference setting.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for the native and
- <tt>pb_ds</tt> tree-based types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a> and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_tree_text_lor_find_timing_test">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_tree-based_locality-of-reference_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="tree_text_lor_find_timing_test_gcc.png" alt="no image" /></a></h6>NTG: Native and tree-based locality-of-reference text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_tree_text_lor_find_timing_test">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_tree-based_locality-of-reference_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="tree_text_lor_find_timing_test_msvc.png" alt="no image" /></a></h6>NTM: Native and tree-based locality-of-reference text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_tree_text_lor_find_timing_test">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_tree-based_locality-of-reference_text_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="tree_text_lor_find_timing_test_local.png" alt="no image" /></a></h6>NTL: Native and tree-based locality-of-reference text find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>For this setting, an ordered-vector tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a> ), a
- red-black tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>rb_tree_tag</tt></a> ), and the
- native red-black tree all share approximately the same
- performance.</p>
-<p>A splay tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) does
- much better, since each (successful) find "bubbles" the
- corresponding node to the root of the tree.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">Observations::Tree-Like-Based
- Container Types</a> summarizes some observations on tree-based
- and trie-based containers.</p>
-</div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_gcc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_gcc.png
deleted file mode 100644
index cf5174d99c..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_gcc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png
deleted file mode 100644
index 26f71510ff..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_msvc.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_msvc.png
deleted file mode 100644
index 583a027f3d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_msvc.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie.html b/libstdc++-v3/doc/html/ext/pb_ds/trie.html
deleted file mode 100644
index 32a2ab1b50..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie.html
+++ /dev/null
@@ -1,489 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie</tt> Interface</h1>
-
- <p>A concrete basic trie-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits </a>
-</pre>
- </td>
-
- <td>
- <p>Element-access traits.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag </a>
-</pre>
- </td>
-
- <td>
- <p>Data-structure tag.</p>
- </td>
-
- <td><a href="pat_trie_tag.html"><span class=
- "c2"><tt>pat_trie_tag</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Update841554648" id=
-"Node_Update841554648"><b>template</b>&lt;
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>class</b> E_Access_Traits_,
- <b>typename</b> Allocator_&gt;
-<b>class</b> Node_Update </a>
-</pre>
- </td>
-
- <td>
- <p>Node updater type.</p>
-
- <p><a href=
- "tree_based_containers.html#invariants">Design::Tree-Based
- Containers::Node Invariants</a> explains this
- concept.</p>
- </td>
-
- <td><a href="null_trie_node_update.html"><span class=
- "c2"><tt>null_trie_node_update</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator&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="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"trie_const_node_iterator.html"><span class=
-"c2"><tt>const_node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="trie_node_iterator.html"><span class=
-"c2"><tt>node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- trie
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- trie
- (<b>const</b> <a href=
-"#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a> &amp;r_e_access_traits)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_e_access_traits</tt></span> will be copied by
- the <a href=
- "#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- trie
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b>&lt;
- <b>class</b> It&gt;
- trie
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a> &amp;r_e_access_traits)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- trie
- (<b>const</b> <span class=
-"c2"><tt>trie</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~trie
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>trie</tt></span> &amp;
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>trie</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>trie</tt></span> &amp;other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &amp;
- get_e_access_traits
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the comb_hash_fn object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &amp;
- get_e_access_traits
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the comb_hash_fn object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Node-Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to the node at the root of the trie.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to the node at the root of the trie.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- trie.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- trie.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_based_containers.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_based_containers.html
deleted file mode 100644
index 72bdd06977..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_based_containers.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Trie-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Trie Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The trie-based container has the following declaration:</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Cmp_Fn = std::less&lt;Key&gt;,
- <b>typename</b> Tag = <a href="pat_trie_tag.html">pat_trie_tag</a>,
- <b>template</b>&lt;
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>typename</b> E_Access_Traits_,
- <b>typename</b> Allocator_&gt;
- <b>class</b> Node_Update = <a href=
-"null_trie_node_update.html">null_trie_node_update</a>,
- <b>typename</b> Allocator = std::allocator&lt;<b>char</b>&gt; &gt;
-<b>class</b> <a href=
-"trie.html">trie</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy, and is explained in
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>.</li>
-
- <li><tt>E_Access_Traits</tt> is described in <a href=
- "#e_access_traits">Element-Access Traits</a>.</li>
-
- <li><tt>Tag</tt> specifies which underlying data structure
- to use, and is described shortly.</li>
-
- <li><tt>Node_Update</tt> is a policy for updating node
- invariants. This is described in <a href="#invariants">Node
- Invariants</a>.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The <tt>Tag</tt> parameter specifies which underlying
- data structure to use. Instantiating it by <a href=
- "pat_trie_tag.html">pat_trie_tag</a>, specifies an
- underlying PATRICIA trie (explained shortly); any other tag is
- currently illegal.</p>
- <hr />
-
- <p>Following is a description of a (PATRICIA) trie
- (<tt>pb_ds</tt> follows specifically [<a href=
- "references.html#okasaki98mereable">okasaki98mereable</a>] and
- [<a href=
- "references.html#filliatre2000ptset">filliatre2000ptset</a>]).</p>
-
- <p>A (PATRICIA) trie is similar to a tree, but with the
- following differences:</p>
-
- <ol>
- <li>It explicitly views keys as a sequence of elements.
- <i>E.g.</i>, a trie can view a string as a sequence of
- characters; a trie can view a number as a sequence of
- bits.</li>
-
- <li>It is not (necessarily) binary. Each node has fan-out <i>n
- + 1</i>, where <i>n</i> is the number of distinct
- elements.</li>
-
- <li>It stores values only at leaf nodes.</li>
-
- <li>Internal nodes have the properties that A) each has at
- least two children, and B) each shares the same prefix with
- any of its descendant.</li>
- </ol>
-
- <p><a href="#e_access_traits">Element-Access Traits</a> shows
- an example of such a trie.</p>
-
- <p>A (PATRICIA) trie has some useful properties:</p>
-
- <ol>
- <li>It can be configured to use large node fan-out, giving it
- very efficient find performance (albeit at insertion
- complexity and size).</li>
-
- <li>It works well for common-prefix keys.</li>
-
- <li>It can support efficiently queries such as which keys
- match a certain prefix. This is sometimes useful in
- file systems and routers.</li>
- </ol>
-
- <p>(We would like to thank Matt Austern for the suggestion to
- include tries.)</p>
-
- <h2><a name="e_access_traits" id=
- "e_access_traits">Element-Access Traits</a></h2>
-
- <p>A trie inherently views its keys as sequences of elements.
- For example, a trie can view a string as a sequence of
- characters. A trie needs to map each of <i>n</i> elements to a
- number in <i>{0, n - 1}</i>. For example, a trie can map a
- character <tt>c</tt> to
- <tt>static_cast&lt;size_t&gt;(c)</tt>.</p>
-
- <p>Seemingly, then, a trie can assume that its keys support
- (const) iterators, and that the <tt>value_type</tt> of this
- iterator can be cast to a <tt>size_t</tt>. There are several
- reasons, though, to decouple the mechanism by which the trie
- accesses its keys' elements from the trie:</p>
-
- <ol>
- <li>In some cases, the numerical value of an element is
- inappropriate. Consider a trie storing DNA strings. It is
- logical to use a trie with a fan-out of <i>5 = 1 + |{'A', 'C',
- 'G', 'T'}|</i>. This requires mapping 'T' to 3, though.</li>
-
- <li>In some cases the keys' iterators are different than what
- is needed. For example, a trie can be used to search for
- common <u>suffixes</u>, by using strings'
- <tt>reverse_iterator</tt>. As another example, a trie mapping
- UNICODE strings would have a huge fan-out if each node would
- branch on a UNICODE character; instead, one can define an
- iterator iterating over 8-bit (or less) groups.</li>
- </ol>
-
- <p><a href=
- "trie.html">trie</a> is,
- consequently, parametrized by <tt>E_Access_Traits</tt> -
- traits which instruct how to access sequences' elements.
- <a href=
- "string_trie_e_access_traits.html"><tt>string_trie_e_access_traits</tt></a>
- is a traits class for strings. Each such traits define some
- types, <i>e.g.</i>,</p>
- <pre>
-<b>typename</b> E_Access_Traits::const_iterator
-</pre>
-
- <p>is a const iterator iterating over a key's elements. The
- traits class must also define methods for obtaining an iterator
- to the first and last element of a key.</p>
-
- <p>Figure <a href="#pat_trie">A PATRICIA trie</a> shows a
- (PATRICIA) trie resulting from inserting the words: "I wish
- that I could ever see a poem lovely as a trie" (which,
- unfortunately, does not rhyme).</p>
-
- <p>The leaf nodes contain values; each internal node contains
- two <tt><b>typename</b> E_Access_Traits::const_iterator</tt>
- objects, indicating the maximal common prefix of all keys in
- the sub-tree. For example, the shaded internal node roots a
- sub-tree with leafs "a" and "as". The maximal common prefix is
- "a". The internal node contains, consequently, to const
- iterators, one pointing to <tt>'a'</tt>, and the other to
- <tt>'s'</tt>.</p>
-
- <h6 class="c1"><a name="pat_trie" id="pat_trie"><img src=
- "pat_trie.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A PATRICIA trie.</h6>
-
- <h2><a name="invariants" id="invariants">Node
- Invariants</a></h2>
-
- <p>Trie-based containers support node invariants, as do
- tree-based containers (see <a href=
- "tree_based_containers.html#invariants">Tree-Based
- Containers::Node Invariants</a>). There are two minor
- differences, though, which, unfortunately, thwart sharing them
- sharing the same node-updating policies:</p>
-
- <ol>
- <li>A trie's <tt>Node_Update</tt> template-template
- parameter is parametrized by <tt>E_Access_Traits</tt>, while
- a tree's <tt>Node_Update</tt> template-template parameter is
- parametrized by <tt>Cmp_Fn</tt>.</li>
-
- <li>Tree-based containers store values in all nodes, while
- trie-based containers (at least in this implementation) store
- values in leafs.</li>
- </ol>
-
- <p>Figure <a href="#trie_node_update_cd">A trie and its update
- policy</a> shows the scheme, as well as some predefined
- policies (which are explained below).</p>
-
- <h6 class="c1"><a name="trie_node_update_cd" id=
- "trie_node_update_cd"><img src=
- "trie_node_update_policy_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A trie and its update policy.</h6>
-
- <p><tt>pb_ds</tt> offers the following pre-defined trie node
- updating policies:</p>
-
- <ol>
- <li><a href=
- "trie_order_statistics_node_update.html"><tt>trie_order_statistics_node_update</tt></a>
- supports order statistics.</li>
-
- <li><a href=
- "trie_prefix_search_node_update.html"><tt>trie_prefix_search_node_update</tt></a>
- supports searching for ranges that match a given prefix. See
- <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc"><tt>trie_prefix_search.cc</tt></a>.</li>
-
- <li><a href=
- "null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
- is the null node updater.</li>
- </ol>
-
- <h2><a name="add_methods" id="add_methods">Additional
- Methods</a></h2>
-
- <p>Trie-based containers support split and join methods; the
- rationale is equal to that of tree-based containers supporting
- these methods (see <a href=
- "tree_based_containers.html#add_methods">Tree-Based
- Containers::Additional Methods</a>).</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_const_node_iterator.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_const_node_iterator.html
deleted file mode 100644
index 0869a7c2f5..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_const_node_iterator.html
+++ /dev/null
@@ -1,478 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie::const_node_iterator
- Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>trie</tt></span>::const_node_iterator</tt>
- Interface</h1>
-
- <p>Const node iterator.</p>
-
- <p>This is an "iterator to an iterator" - it iterates over
- nodes, and de-referencing it returns one of the tree's const
- iterators</p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="container_base.html#size_type55424436"><span class=
-"c2"><tt>container_base</tt></span>::size_type</a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link3" id="link3">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator_category2821876439" id=
-"iterator_category2821876439">iterator_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-trivial_iterator_tag
-</pre>
- </td>
-
- <td>
- <p>Category.</p>
-
- <p>This tag identifies that the iterator has none of the
- STL's iterators' movement abilities.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre class="c2">
-void
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"container_base.html#const_iterator98626788"><span class="c2"><tt>container_base</tt></span>::const_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's const <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"trie.html#e_access_traits1948190928"><span class="c2"><tt>trie</tt></span>::e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_e_iterator2450008044" id=
-"const_e_iterator2450008044">const_e_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>A key's element const iterator.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Metadata Definitions</a></h3>
-
- <p>These are only defined if <a href=
- "basic_tree.html#Node_Update841554648"><span class="c2">
- <tt>basic_tree</tt></span>::Node_Update</a>
- is not <a href="null_trie_node_update.html"><span class=
- "c2"><tt>null_trie_node_update</tt></span></a></p>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<tt><b>typename</b></tt> <a href=
-"basic_tree.html#Node_Update841554648"><span class="c2"><tt>basic_tree</tt></span>::Node_Update</a><tt>::metadata_type</tt>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> Allocator::<b>template</b> rebind&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="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- const_node_iterator
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> std::pair&lt;
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a>,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a>&gt;
- valid_prefix
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Subtree valid prefix.</p>
-
- <p>Returns the common prefix range of all nodes in this
- node's subtree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_reference495461441"><tt>const_reference</tt></a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access; returns the const iterator associated
- with the current leaf.</p>
-
- <p>Should be called only for leaf nodes.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Metadata Access Methods</a></h3>
-
- <p>These are only defined if <a href=
- "basic_tree.html#Node_Update841554648"><span class="c2">
- <tt>basic_tree</tt></span>::Node_Update</a>
- is not <a href="null_trie_node_update.html"><span class=
- "c2"><tt>null_trie_node_update</tt></span></a></p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_metadata_reference1108857465"><tt>const_metadata_reference</tt></a>
- get_metadata
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Metadata access.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Movement Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- num_children
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the number of children in the corresponding
- node.</p>
-
- <p>If the number of children is 0, then the corresponding
- node is a leaf; otherwise, it is not a leaf.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>const_node_iterator</tt></span>
- get_child
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a const node iterator to the corresponding
- node's <span class="c1"><tt>i</tt></span>-th child.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Comparison Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>==
- (<b>const</b> <span class=
-"c2"><tt>const_node_iterator</tt></span> &amp;other) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Compares content to a different iterator object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>!=
- (<b>const</b> <span class=
-"c2"><tt>const_node_iterator</tt></span> &amp;other) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Compares content (negatively) to a different iterator
- object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_node_iterator.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_node_iterator.html
deleted file mode 100644
index 55029c4cb9..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_node_iterator.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie::node_iterator Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>trie</tt></span>::node_iterator</tt>
- Interface</h1>
-
- <p>Node iterator.</p>
-
- <p>This is an "iterator to an iterator" - it iterates over
- nodes, and de-referencing it returns one of the tree's
- iterators</p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"trie.html#const_node_iterator4205924553"><span class="c2"><tt>trie</tt></span>::const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"trie.html#const_node_iterator4205924553"><span class="c2"><tt>trie</tt></span>::const_node_iterator</a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="container_base.html#iterator10418194"><span class=
-"c2"><tt>container_base</tt></span>::iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's const <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- pat_trie_node_it_
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#reference54418471"><tt>reference</tt></a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access; returns the iterator associated with the
- current leaf.</p>
-
- <p>Should be called only for leaf nodes.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Movement Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>node_iterator</tt></span>
- get_child
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a node iterator to the corresponding node's
- <span class="c1"><tt>i</tt></span>-th child.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_order_statistics_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_order_statistics_node_update.html
deleted file mode 100644
index 66aab26d79..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_order_statistics_node_update.html
+++ /dev/null
@@ -1,770 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie_order_statistics_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie_order_statistics_node_update</tt> Interface</h1>
-
- <p>Functor updating ranks of entrees.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_e_iterator2450008044" id=
-"const_e_iterator2450008044">const_e_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>Const element iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's key type.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const key reference type.
-</pre>
- </td>
-
- <td>
- <p>Const key reference.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#Const_Node_Iterator1933878761"><tt>Const_Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Iterator4206909839"><tt>Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Const iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Iterator type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Find-Type Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- find_by_order
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> order) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the entry with the order <span class=
- "c1"><tt>order</tt></span>, or a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- find_by_order
- (<a href="#size_type55424436"><tt>size_type</tt></a> order)
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> to the entry
- with the order <span class="c1"><tt>order</tt></span>, or
- an <a href="#iterator10418194"><tt>iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- order_of_key
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the order of a key within a sequence. For
- example, if <span class="c1"><tt>r_key</tt></span> is the
- smallest key, this method will return 0; if <span class=
- "c1"><tt>r_key</tt></span> is a key between the smallest
- and next key, this method will return 1; if <span class=
- "c1"><tt>r_key</tt></span> is a key larger than the
- largest key, this method will return the size of r_c.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- order_of_prefix
- (<a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> b,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the order of a prefix within a sequence. For
- <span class="c1"><tt>e</tt></span>example, if [b,
- <span class="c1"><tt>e</tt></span>] is the smallest
- prefix, this method will return 0; if r_key is a key
- <span class="c1"><tt>b</tt></span>between the smallest and
- next key, this method will return 1; if r_key is a key
- larger than the largest key, this method will return the
- size of r_c.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Types and
- Constants</a></h2>
-
- <h3><a name="link11" id="link11">Value-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const reference type.
-</pre>
- </td>
-
- <td>
- <p>Const reference to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const pointer type.
-</pre>
- </td>
-
- <td>
- <p>Const pointer to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind&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 reference.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_reference583863863" id=
-"metadata_reference583863863">metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind&lt;
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>&gt;::other::reference
-</pre>
- </td>
-
- <td>
- <p>Metadata reference.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Protected Methods</a></h2>
-
- <h3><a name="link13" id="link13">Operators</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (<a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a> node_it,
- <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a> end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- <span class="c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Constructors, destructor, and
- related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~trie_order_statistics_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link15" id="link15">Private Methods</a></h2>
-
- <h3><a name="link16" id="link16">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>bool</b>
- empty
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns <tt><b>true</b></tt> if the container is
- empty.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the trie's first element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the trie's just-after-last element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &amp;
- get_e_access_traits
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Access to the cmp_fn object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_prefix_search_node_update.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_prefix_search_node_update.html
deleted file mode 100644
index e136495c58..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_prefix_search_node_update.html
+++ /dev/null
@@ -1,628 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie_prefix_search_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie_prefix_search_node_update</tt> Interface</h1>
-
- <p>A node updater that allows tries to be searched for the
- range of values that match a certain prefix.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's key type.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const key reference type.
-</pre>
- </td>
-
- <td>
- <p>Const key reference.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_e_iterator2450008044" id=
-"const_e_iterator2450008044">const_e_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>Const element iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-__gnu_pbds::detail::null_node_metadata
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#Const_Node_Iterator1933878761"><tt>Const_Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Iterator4206909839"><tt>Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Const iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Iterator type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair&lt;
- <a href="#const_iterator98626788"><tt>const_iterator</tt></a>,
- <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>&gt;
- prefix_range
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds the <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match
- <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair&lt;
- <a href="#iterator10418194"><tt>iterator</tt></a>,
- <a href="#iterator10418194"><tt>iterator</tt></a>&gt;
- prefix_range
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Finds the <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match
- <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair&lt;
- <a href="#const_iterator98626788"><tt>const_iterator</tt></a>,
- <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>&gt;
- prefix_range
- (<a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> b,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds the <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match [b,
- <span class="c1"><tt>e</tt></span>).</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair&lt;
- <a href="#iterator10418194"><tt>iterator</tt></a>,
- <a href="#iterator10418194"><tt>iterator</tt></a>&gt;
- prefix_range
- (<a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> b,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> e)
-</pre>
- </td>
-
- <td>
- <p>Finds the <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match [b,
- <span class="c1"><tt>e</tt></span>).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Methods</a></h2>
-
- <h3><a name="link11" id="link11">Operators</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (<a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a> node_it,
- <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a> end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Called to update a node's metadata.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Private Methods</a></h2>
-
- <h3><a name="link13" id="link13">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the just-after last element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the just-after last element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>const</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &amp;
- get_e_access_traits
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Access to the cmp_fn object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_tag.html
deleted file mode 100644
index 62bf124544..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_tag.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie_tag</tt> Interface</h1>
-
- <p>Basic trie data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_tree_tag.html"><span class=
-"c2"><tt>basic_tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trivial_iterator_tag.html b/libstdc++-v3/doc/html/ext/pb_ds/trivial_iterator_tag.html
deleted file mode 100644
index 1f59c5102d..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/trivial_iterator_tag.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trivial_iterator_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trivial_iterator_tag</tt> Interface</h1>
-
- <p>A \quot;trivial\quot; iterator tag. Signifies that the
- iterators has none of the STL's movement abilities.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tutorial.html b/libstdc++-v3/doc/html/ext/pb_ds/tutorial.html
deleted file mode 100644
index 152cd57b1a..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/tutorial.html
+++ /dev/null
@@ -1,670 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Tutorial</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Short Tutorial</h1>
-
- <p>Following is a short tutorial illustrating the main points
- of <tt>pb_ds</tt>. <a href="concepts.html">Concepts</a>
- describes and summarizes some concepts.</p>
-
- <h2><a name="assoc_main" id="assoc_main">Associative
- Containers</a></h2>
-
- <h3><a name="assoc_basic" id="assoc_basic">Basic Use</a></h3>
-
- <p>For the most part, <tt>pb_ds</tt>'s containers have the same
- interface as the STL's, except for the names used for the
- container classes themselves. For example, this shows basic
- operations on a collision-chaining hash-based container:</p>
-
- <pre>
-<a href=
-"cc_hash_table.html">cc_hash_table</a>&lt;<b>int</b>, <b>char</b>&gt; c;
-
-c[2] = 'b';
-
-assert(c.find(1) == c.end());
-</pre>
-
- <p>The container is called <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> as
- opposed to <tt>unordered_map</tt>, since "unordered map" does
- not necessarily mean a hash-based map (as the STL implicitly
- implies). For example, list-based associative containers, which
- are very useful for the construction of "multimaps" (see
- <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>), are also unordered. It is also not called
- <tt>hash_map</tt> since there are more ways than one to
- implement hash tables.</p>
-
- <p>This snippet shows a red-black tree based container:</p>
- <pre>
-<a href=
-"tree.html">tree</a>&lt;<b>int</b>, <b>char</b>&gt; c;
-
-c[2] = 'b';
-
-assert(c.find(2) != c.end());
-</pre>
-
- <p>The container is called <a href=
- "tree.html"><tt>tree</tt></a>
- as opposed to <tt>map</tt>, since "map" doesn't say that
- much.</p>
-
- <p>Most of the STL's familiar methods are unchanged.
- <i>E.g.</i>, <tt>being</tt>, <tt>end</tt>, <tt>size</tt>,
- <tt>empty</tt>, and <tt>clear</tt>, do just the same as is
- customary. <a href=
- "assoc_examples.html#basic_usage">Associative-Container
- Examples::Basic use</a>, and especially <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_map.cc"><tt>basic_map.cc</tt></a>,
- show examples of this.</p>
-
-<p>This isn't to say that things are exactly as one would expect,
-given the container requirments and interfaces in the C++
-standard.</p>
-
-
- <p>The names of containers' policies and policy accessors are
- different than those of the STL. For example, if <tt>C</tt> is
- some type of hash-based container, then</p>
- <pre>
-C::hash_fn
-</pre>gives the type of its hash functor, and if <tt>c</tt> is some
-hash-based container object, then
- <pre>
-c.get_hash_fn()
-</pre>
-
- <p>will return a reference to its hash-functor object.</p>
-
- <p>Similarly, if <tt>C</tt> is some type of tree-based
- container, then</p>
- <pre>
-C::cmp_fn
-</pre>gives the type of its comparison functor, and if <tt>c</tt>
-is some tree-based container object, then
- <pre>
-c.get_cmp_fn()
-</pre>
-
- <p>will return a reference to its comparison-functor
- object.</p>
-
- <p>It would be nice to give names consistent with those in the
- existing C++ standard (inclusive of TR1). Unfortunately, these
- standard containers don't consistently name types and
- methods. For example, <tt>std::tr1::unordered_map</tt> uses
- <tt>hasher</tt> for the hash functor, but <tt>std::map</tt> uses
- <tt>key_compare</tt> for the comparison functor. Also, we could
- not find an accessor for <tt>std::tr1::unordered_map</tt>'s hash
- functor, but <tt>std::map</tt> uses <tt>compare</tt> for accessing
- the comparison functor.</p>
-
-<p>Instead, <tt>pb_ds</tt> attempts to be internally consistent, and
-uses standard-derived terminology if possible.
-</p>
-
- <p>Another source of difference is in scope: <tt>pb_ds</tt>
- contains more types of associative containers than the STL, and
- more opportunities to configure these new containers, since
- different types of associative containers are useful in different
- settings (see <a href=
- "assoc_performance_tests.html#dss_family_choice">Associative-Container
- Performance Tests::Observations::Underlying Data-Structure
- Families</a>).</p>
-
- <p><tt>pb_ds</tt> contains different classes for hash-based containers,
- tree-based containers, trie-based containers, and list-based
- containers. <a href=
- "interface.html#containers_assoc">Inteface::Containers::Associative
- Containers</a> lists the containers. <a href=
- "hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>, <a href=
- "tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>, <a href=
- "trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>, and <a href=
- "lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>, explain some more about
- these types of containers, respectively.</p>
-
- <p>Since associative containers share parts of their interface,
- they are organized as a class hierarchy; it is shown in Figure
- <a href="#cd">Class hierarchy</a>.</p>
-
- <h6 class="c1"><a name="cd" id="cd"><img src="container_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Class hierarchy.</h6>
-
- <p>Each type or method is defined in the most-common ancestor
- in which it makes sense:
- <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_map.cc"><tt>basic_map.cc</tt></a>
- shows an example of most of the associative-container
- types.</p>
-
-
- <p>For example, all associative containers support iteration.
- Consequently, <a href=
- "container_base.html"><tt>container_base</tt></a> has the
- interface:</p>
- <pre>
-<b>template</b>&lt;...&gt;
-<b>class</b> <a href="container_base.html">container_base</a>
-{
- ...
-
-<b>public</b>:
- ...
-
- const_iterator
- begin() <b>const</b>;
-
- iterator
- begin();
-
- const_iterator
- end() <b>const</b>;
-
- iterator
- end();
-
- ...
-};
-</pre>
-
- <p>and so all associative containers inherent this method.
- Conversely, both collision-chaining and (general) probing
- hash-based associative containers have a hash functor, so
- <a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- has the interface:</p>
- <pre>
-<b>template</b>&lt;...&gt;
-<b>class</b> <a href="basic_hash_table.html">basic_hash_table</a> : <b>public</b> <a href="container_base.html">container_base</a>
-{
- ...
-
-<b>public</b>:
- ...
-
- const hash_fn&amp;
- get_hash_fn() const;
-
- hash_fn&amp;
- get_hash_fn();
- ...
-};
-</pre>
-
- <p>and so all hash-based associative containers inherit the
- same hash-functor accessor methods.</p>
-
- <p>This is discussed further in <a href=
- "ds_gen.html">Design::Associative Containers::Data-Structure
- Genericity</a>.</p>
-
- <h3><a name="assoc_policies" id="assoc_policies">Configuring
- Associative Containers</a></h3>
-
- <p>In general, each of <tt>pb_ds</tt>'s containers is
- parametrized by more policies than those of the STL's. For
- example, the STL's hash-based container is parametrized as
- follows:</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash,
- <b>typename</b> Pred,
- <b>typename</b> Allocator,
- <b>bool</b> Cache_Hashe_Code&gt;
-<b>class</b> unordered_map;
-</pre>
-
- <p>and so can be configured by key type, mapped type, a functor
- that translates keys to unsigned integral types, an equivalence
- predicate, an allocator, and an indicator whether to store hash
- values with each entry. <tt>pb_ds</tt>'s collision-chaining
- hash-based container is parametrized as</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash_Fn,
- <b>typename</b> Eq_Fn,
- <b>typename</b> Comb_Hash_Fn,
- <b>typename</b> Resize_Policy
- <b>bool</b> Store_Hash
- <b>typename</b> Allocator&gt;
-<b>class</b> <a href=
-"cc_hash_table.html">cc_hash_table</a>;
-</pre>
-
- <p>and so can be configured by the first four types of
- <tt>std::tr1::unordered_map</tt>, then a policy for translating
- the key-hash result into a position within the table, then a
- policy by which the table resizes, an indicator whether to
- store hash values with each entry, and an allocator (which is
- typically the last template parameter in STL containers).</p>
-
- <p>Nearly all policy parameters have default values, so this
- need not be considered for casual use. It is important to note,
- however, that hash-based containers' policies can dramatically
- alter their performance in different settings, and that
- tree-based containers' policies can make them useful for other
- purposes than just look-up.</p>
-
- <p><a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>, <a href=
- "tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>, <a href=
- "trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>, and <a href=
- "lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>, explain some more about
- configuring hash based, tree based, trie based, and list base
- containers, respectively. <a href=
- "interface.html#ds_policy_classes">Interface::Container Policy
- Classes</a> shows the different policy classes for configuring
- associative containers. <a href=
- "assoc_examples.html#hash_based">Examples::Hash-Based
- Containers</a>, <a href=
- "assoc_examples.html#tree_like_based">Examples::Tree-Like-Based
- Containers</a>, and <a href=
- "assoc_examples.html#trie_based">Examples::Trie-Based
- Containers</a> show examples for this.</p>
-
- <h3><a name="assoc_ds_gen" id="assoc_ds_gen">Determining
- Containers' Attributes</a></h3>
-
- <p>Associative-containers' underlying data structures obviously
- affect their performance; Unfortunately, they can also affect
- their interface. When manipulating generically associative
- containers, it is often useful to be able to statically
- determine what they can support and what the cannot. (This was
- discussed in <a href=
- "motivation.html#assoc_ds_genericity">Motivation::Associative
- Containers::Data-Structure Genericity</a>.)</p>
-
- <p>Happily, the STL provides a good solution to a similar
- problem - that of the different behavior of iterators. If
- <tt>It</tt> is an iterator, then</p>
- <pre>
-<b>typename</b> std::iterator_traits&lt;It&gt;::iterator_category
-</pre>
-
- <p>is one of a small number of pre-defined
- <tt><b>struct</b></tt>s, and,</p>
- <pre>
-<b>typename</b> std::iterator_traits&lt;It&gt;::value_type
-</pre>
-
- <p>is the value type to which the iterator "points".</p>
-
- <p>Similarly, in <tt>pb_ds</tt>, if <tt>C</tt> is an
- associative container, then</p>
- <pre>
-<b>typename</b> <a href=
-"assoc_container_traits.html"><tt>container_traits</tt></a>&lt;C&gt;::container_category
-</pre>is one of a small number of pre-defined
-<tt><b>struct</b></tt>s, each one corresponding to a class in
-Figure <a href="#cd">Class hierarchy</a>. These tags are listed in
-<a href="interface.html#ds_ts_assoc">Interface::Associative
-Containers::Data-Structure Tags and Traits::Data-Structure
-Tags::Associative-Containers</a>; <a href="ds_gen.html#container_traits">
- Design::Associative Containers::Data-Structure Tags and
- Traits</a> explains this further; <a href=
- "ds_gen.html#tag_cd">Design::Associative
- Containers::Data-Structure Tags and Traits::Data-structure tag
- class hierarchy</a> shows a class diagram.
-
- <p>In most cases, however, the exact underlying data structure
- is not really important, but only one of its attributes:
- whether it guarantees storing elements by key order, for
- example. For this one can use</p>
- <pre>
-<b>typename</b> <a href=
-"assoc_container_traits.html"><tt>container_traits</tt></a>&lt;C&gt;::order_preserving
-</pre>
-
- <p>This is described further in <a href=
- "ds_gen.html">Design::Data-Structure Genericity</a>; <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/assoc_container_traits.cc"><tt>assoc_container_traits.cc</tt></a>
- shows an example of querying containers' attributes.</p>
-
- <h3><a name="assoc_find_range" id="assoc_find_range">Point-Type
- and Range-Type Methods and Iterators</a></h3>(This subsection
- addresses points from <a href=
- "motivation.html#assoc_diff_it">Motivation::Associative
- Containers::Differentiating between Iterator Types</a>.)
-
- <p><tt>pb_ds</tt> differentiates between two types of methods
- and iterators: point-type, and range-type. For example,
- <tt>find</tt> and <tt>insert</tt> are point-type methods, since
- they each deal with a specific element; their returned
- iterators are point-type iterators. <tt>begin</tt> and
- <tt>end</tt> are range-type methods, since they are not used to
- find a specific element, but rather to go over all elements in
- a container object; their returned iterators are range-type
- iterators.</p>
-
- <p>Most containers store elements in an order that is
- determined by their interface. Correspondingly, it is fine that
- their point-type iterators are synonymous with their range-type
- iterators. For example, in the following snippet</p>
- <pre>
-std::for_each(c.find(1), c.find(5), foo);
-</pre>two point-type iterators (returned by <tt>find</tt>) are used
-for a range-type purpose - going over all elements whose key is
-between 1 and 5.
-
- <p>Conversely, the above snippet makes no sense for
- self-organizing containers - ones that order (and reorder)
- their elements by implementation. It would be nice to have a
- uniform iterator system that would allow the above snippet to
- compile only if it made sense.</p>
-
- <p>This could trivially be done by specializing
- <tt>std::for_each</tt> for the case of iterators returned by
- <tt>std::tr1::unordered_map</tt>, but this would only solve the
- problem for one algorithm and one container. Fundamentally, the
- problem is that one can loop using a self-organizing
- container's point-type iterators.</p>
-
- <p><tt>pb_ds</tt>'s containers define two families of
- iterators: <tt>const_point_iterator</tt> and
- <tt>point_iterator</tt> are the iterator types returned by
- point-type methods; <tt>const_iterator</tt> and
- <tt>iterator</tt> are the iterator types returned by range-type
- methods.</p>
- <pre>
-<b>class</b> <i>&lt;- some container -&gt;</i>
-{
-<b>public</b>:
- ...
-
- <b>typedef</b> <i>&lt;- something -&gt;</i> const_iterator;
-
- <b>typedef</b> <i>&lt;- something -&gt;</i> iterator;
-
- <b>typedef</b> <i>&lt;- something -&gt;</i> const_point_iterator;
-
- <b>typedef</b> <i>&lt;- something -&gt;</i> point_iterator;
-
- ...
-
-<b>public</b>:
- ...
-
- const_iterator begin () <b>const</b>;
-
- iterator begin();
-
- const_point_iterator find(...) <b>const</b>;
-
- point_iterator find(...);
-};
-</pre>
-
- <p><a href="ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods and Iterators</a> discusses the relationship
- between point-type and range-type iterators in general; for
- containers whose interface defines sequence order, however, it
- is very simple: point-type and range-type iterators are exactly
- the same, which means that the above snippet will compile if it
- is used for an order-preserving associative container.</p>
-
- <p>For self-organizing containers, however, (hash-based
- containers as a special example), the preceding snippet will
- not compile, because their point-type iterators do not support
- <tt><b>operator</b>++</tt>.</p>
-
- <p>In any case, both for order-preserving and self-organizing
- containers, the following snippet will compile:</p>
- <pre>
-<b>typename</b> Cntnr::point_iterator it = c.find(2);
-</pre>
-
- <p>because a range-type iterator can always be converted to a
- point-type iterator.</p>
-
- <p><a href="ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods and Iterators</a> discusses this
- further.</p>
-
- <p><a href=
- "motivation.html#assoc_diff_it">Motivation::Associative
- Containers::Differentiating between Iterator Types</a> also
- raised the point that a container's iterators might have
- different invalidation rules concerning their de-referencing
- abilities and movement abilities. This now corresponds exactly
- to the question of whether point-type and range-type iterators
- are valid. As explained in <a href="#assoc_ds_gen">Determining
- Containers' Attributes</a>, <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> allows
- querying a container for its data structure attributes. The
- iterator-invalidation guarantees are certainly a property of
- the underlying data structure, and so</p>
- <pre>
-<a href=
-"assoc_container_traits.html">container_traits</a>&lt;C&gt;::invalidation_guarantee
-</pre>
-
- <p>gives one of three pre-determined types that answer this
- query. This is explained further in <a href=
- "ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods and Iterators</a>.</p>
-
- <h3><a name="assoc_ms" id="assoc_ms">Distinguishing between Maps and Sets</a></h3>
-
- <p>Anyone familiar with the STL knows that there are four kinds
- of associative containers: maps, sets, multimaps, and
- multisets. <a href="#assoc_basic">Basic Use</a> discussed how
- to use maps, <i>i.e.</i> containers that associate each key to
- some data.</p>
-
- <p>Sets are associative containers that simply store keys -
- they do not map them to anything. In the STL, each map class
- has a corresponding set class. <i>E.g.</i>,
- <tt>std::map&lt;<b>int</b>, <b>char</b>&gt;</tt> maps each
- <tt><b>int</b></tt> to a <tt><b>char</b></tt>, but
- <tt>std::set&lt;<b>int</b>, <b>char</b>&gt;</tt> simply stores
- <tt><b>int</b></tt>s. In <tt>pb_ds</tt>, however, there are no
- distinct classes for maps and sets. Instead, an associative
- container's <tt>Mapped</tt> template parameter is a policy: if
- it is instantiated by <a href=
- "null_mapped_type.html"><tt>null_mapped_type</tt></a>, then it
- is a "set"; otherwise, it is a "map". <i>E.g.</i>,</p>
- <pre>
-<a href="cc_hash_table.html">cc_hash_table</a>&lt;<b>int</b>, <b>char</b>&gt;
-</pre>is a "map" mapping each <tt><b>int</b></tt> value to a <tt>
- <b>char</b></tt>, but
- <pre>
-<a href="cc_hash_table.html">cc_hash_table</a>&lt;<b>int</b>, <a href="null_mapped_type.html">null_mapped_type</a>&gt;
-</pre>is a type that uniquely stores <tt><b>int</b></tt> values.
-
- <p>Once the <tt>Mapped</tt> template parameter is instantiated
- by <a href="null_mapped_type.html">null_mapped_type</a>, then
- the "set" acts very similarly to the STL's sets - it does not
- map each key to a distinct <a href=
- "null_mapped_type.html">null_mapped_type</a> object. Also,
- , the container's <tt>value_type</tt> is essentially
- its <tt>key_type</tt> - just as with the STL's sets. For a simple example, see <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_set.cc"><tt>basic_set.cc</tt></a>
- .</p>
-
- <p>The STL's multimaps and multisets allow, respectively,
- non-uniquely mapping keys and non-uniquely storing keys. As
- discussed in <a href=
- "motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>, the
- reasons why this might be necessary are 1) that a key might be
- decomposed into a primary key and a secondary key, 2) that a
- key might appear more than once, or 3) any arbitrary
- combination of 1)s and 2)s. Correspondingly,
- one should use 1) "maps" mapping primary keys to secondary
- keys, 2) "maps" mapping keys to size types, or 3) any arbitrary
- combination of 1)s and 2)s. Thus, for example, an
- <tt>std::multiset&lt;<b>int</b>&gt;</tt> might be used to store
- multiple instances of integers, but using <tt>pb_ds</tt>'s
- containers, one might use</p>
- <pre>
-<a href=
-"tree.html">tree</a>&lt;<b>int</b>, size_t&gt;
-</pre><i>i.e.</i>, a "map" of <tt><b>int</b></tt>s to
-<tt>size_t</tt>s.
-
- <p><a href="assoc_examples.html#mmaps">Associative-Container
- Examples::"Multimaps" and "Multisets"</a> shows some simple
- examples.</p>
-
- <p>These "multimaps" and "multisets" might be confusing to
- anyone familiar with the STL's <tt>std::multimap</tt> and
- <tt>std::multiset</tt>, because there is no clear
- correspondence between the two. For example, in some cases
- where one uses <tt>std::multiset</tt> in the STL, one might use
- in <tt>pb_ds</tt> a "multimap" of "multisets" - <i>i.e.</i>, a
- container that maps primary keys each to an associative
- container that maps each secondary key to the number of times
- it occurs.</p>
-
- <p>When one uses a "multimap," one should choose with care the
- type of container used for secondary keys. This is further
- explained in <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>.</p>
-
-<hr>
- <h2><a name="pq" id="pq">Priority Queues</a></h2>
-
- <h3><a name="pq_basic" id="pq_basic">Basic Use</a></h3>
-
- <p><tt>pb_ds</tt>'s priority_queue container is
- similar to the STL's in interface. For example:</p>
- <pre>
-<a href=
-"priority_queue.html">priority_queue</a>&lt;<b>int</b>&gt; p;
-
-p.push(2);
-p.push(4);
-p.push(1);
-
-assert(p.top() == 4);
-
-p.pop();
-
-assert(p.top() == 2);
-
-assert(p.size() == 2);
-assert(!p.empty());
-</pre>
-
- <h3><a name="pq_policies" id="pq_policies">Configuring Priority
- Queues</a></h3>
-
- <p>As opposed to associative containers, priority queues have
- relatively few configuration options. The priority queue is
- parametrized as follows:</p>
- <pre>
-<b>template</b>&lt;
- <b>typename</b> Value_Type,
- <b>typename</b> Cmp_Fn,
- <b>typename</b> Tag,
- <b>typename</b> Allocator&gt;
-<b>class</b> <a href="priority_queue.html">priority_queue</a>;
-</pre>
-
- <p>The <tt>Value_Type</tt>, <tt>Cmp_Fn</tt>, and
- <tt>Allocator</tt> parameters are the container's value type,
- comparison-functor type, and allocator type, respectively;
- these are very similar to the STL's priority queue. The
- <tt>Tag</tt> parameter is different: there are a number of
- pre-defined tag types corresponding to binary heaps, binomial
- heaps, <i>etc.</i>, and <tt>Tag</tt> should be instantiated
- by one of them. <a href=
- "interface.html#ds_ts_pq">Interface::Data-Structure Tags and
- Traits::Data Structure Tags::Priority-Queues</a> lists the
- possible types, <a href="pq_design.html">Priority-Queue
- Design</a> explains this further, and <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc"><tt>basic_priority_queue.cc</tt></a>
- shows an example.</p>
-
- <p>Note that as opposed to the STL's priority queue, <a href=
- "priority_queue.html"><tt>priority_queue</tt></a> is not a
- sequence-adapter; it is a regular container.</p>
-
- <h3><a name="pq_ds_more_ops" id="pq_ds_more_ops">Supporting
- More Operations</a></h3>
-
- <p><a href="priority_queue.html"><tt>priority_queue</tt></a>'s
- <tt>push</tt> method returns a point-type iterator, which can
- be used for modifying or erasing arbitrary values. For
- example:</p>
- <pre>
-<a href=
-"priority_queue.html">priority_queue</a>&lt;<b>int</b>&gt; p;
-
-<a href=
-"priority_queue.html">priority_queue</a>&lt;<b>int</b>&gt;::point_iterator it = p.push(3);
-
-p.modify(it, 4);
-</pre>
-
- <p>These types of operations are necessary for making priority
- queues useful for different applications, especially graph
- applications. <a href="pq_examples.html#xref">Priority-Queue
- Examples::Cross-Referencing</a> gives some examples.</p>
-
- <h3><a name="pq_ds_gen" id="pq_ds_gen">Determining Container
- Attributes</a></h3>
-
- <p>Similarly to <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> (described
- in <a href="#assoc_ds_gen">Associative Containers::Determining
- Containers' Attributes</a>), <a href=
- "pq_container_traits.html"><tt>container_traits</tt></a> can be used to
- statically determine priority-queues' attributes:</p>
- <pre>
-<a href=
-"pq_container_traits.html">container_traits</a>&lt;C&gt;::container_category
-</pre>is one of a small number of predefined tag structures that
-identifies the underlying data structure, and
- <pre>
-<a href=
-"pq_container_traits.html">container_traits</a>&lt;C&gt;::invalidation_guarantee
-</pre>
-
- <p>is its invalidation guarantee. Invalidation guarantees are
- especially important regarding priority queues, since in
- <tt>pb_ds</tt>'s design, iterators are practically the only way
- to manipulate them.</p>
-
- <p><a href="pq_design.html#pq_traits">Design::Priority
- Queues::Traits</a> discusses this further. <a href=
- "pq_examples.html#generics">Priority-Queue
- Examples::Generics</a> shows an example.</p>
- </div>
-</body>
-</html>
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/update_policy_cd.png b/libstdc++-v3/doc/html/ext/pb_ds/update_policy_cd.png
deleted file mode 100644
index 115a751c35..0000000000
--- a/libstdc++-v3/doc/html/ext/pb_ds/update_policy_cd.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/doc/html/faq.html b/libstdc++-v3/doc/html/faq.html
index 7b333ed752..304f809bec 100644
--- a/libstdc++-v3/doc/html/faq.html
+++ b/libstdc++-v3/doc/html/faq.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="bk03.html" title=""/><link rel="prev" href="bk03.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"/><td align="right"> </td></tr></table><hr/></div><div class="article" title="Frequently Asked Questions"><div class="titlepage"><div><div><h1 class="title"><a id="faq"/>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article" title="Frequently Asked Questions"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
2008, 2010
- <a class="link" href="http://www.fsf.org">FSF</a>
- </p></div></div><hr/></div><div class="qandaset" title="Frequently Asked Questions"><a id="id384449"/><dl><dt/><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+ <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+ </p></div></div><hr /></div><div class="qandaset" title="Frequently Asked Questions"><a id="idp2990960"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
What is libstdc++?
</a></dt><dt>1.2. <a href="faq.html#faq.why">
Why should I use libstdc++?
@@ -18,7 +18,7 @@
What happened to the older libg++? I need that!
</a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
What if I have more questions?
- </a></dt></dl></dd><dt/><dd><dl><dt>2.1. <a href="faq.html#faq.license.what">
+ </a></dt></dl></dd><dt></dt><dd><dl><dt>2.1. <a href="faq.html#faq.license.what">
What are the license terms for libstdc++?
</a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
So any program which uses libstdc++ falls under the GPL?
@@ -26,7 +26,7 @@
How is that different from the GNU {Lesser,Library} GPL?
</a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
I see. So, what restrictions are there on programs that use the library?
- </a></dt></dl></dd><dt/><dd><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
+ </a></dt></dl></dd><dt></dt><dd><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
</a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
</a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
</a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
@@ -34,7 +34,7 @@
What's libsupc++?
</a></dt><dt>3.6. <a href="faq.html#faq.size">
This library is HUGE!
- </a></dt></dl></dd><dt/><dd><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
+ </a></dt></dl></dd><dt></dt><dd><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
Can libstdc++ be used with non-GNU compilers?
</a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
No 'long long' type on Solaris?
@@ -50,13 +50,13 @@
Recent GNU/Linux glibc required?
</a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
Can't use wchar_t/wstring on FreeBSD
- </a></dt></dl></dd><dt/><dd><dl><dt>5.1. <a href="faq.html#faq.what_works">
+ </a></dt></dl></dd><dt></dt><dd><dl><dt>5.1. <a href="faq.html#faq.what_works">
What works already?
</a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
Bugs in the ISO C++ language or library specification
</a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
Bugs in the compiler (gcc/g++) and not libstdc++
- </a></dt></dl></dd><dt/><dd><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
+ </a></dt></dl></dd><dt></dt><dd><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
Reopening a stream fails
</a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
-Weffc++ complains too much
@@ -76,7 +76,7 @@
list::size() is O(n)!
</a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
Aw, that's easy to fix!
- </a></dt></dl></dd><dt/><dd><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
+ </a></dt></dl></dd><dt></dt><dd><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
string::iterator is not char*; vector&lt;T&gt;::iterator is not T*
</a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
What's next after libstdc++?
@@ -91,7 +91,7 @@
What's an ABI and why is it so messy?
</a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
- </a></dt></dl></dd></dl><table border="0" width="100%" summary="Q and A Set"><col align="left" width="1%"/><col/><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
+ </a></dt></dl></dd></dl><table border="0" width="100%" summary="Q and A Set"><col align="left" width="1%" /><col /><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
What is libstdc++?
</a></dt><dt>1.2. <a href="faq.html#faq.why">
Why should I use libstdc++?
@@ -105,19 +105,19 @@
What happened to the older libg++? I need that!
</a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
What if I have more questions?
- </a></dt></dl></td></tr><tr class="question" title="1.1."><td align="left" valign="top"><a id="faq.what"/><a id="faq.what.q"/><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="1.1."><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
What is libstdc++?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"></a></td><td align="left" valign="top"><p>
The GNU Standard C++ Library v3 is an ongoing project to
implement the ISO 14882 Standard C++ library as described in
chapters 17 through 27 and annex D. For those who want to see
exactly how far the project has come, or just want the latest
bleeding-edge code, the up-to-date source is available over
anonymous SVN, and can even be browsed over
- the <a class="link" href="http://gcc.gnu.org/svn.html">web</a>.
- </p></td></tr><tr class="question" title="1.2."><td align="left" valign="top"><a id="faq.why"/><a id="q-why"/><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
+ the <a class="link" href="http://gcc.gnu.org/svn.html" target="_top">web</a>.
+ </p></td></tr><tr class="question" title="1.2."><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
Why should I use libstdc++?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"></a></td><td align="left" valign="top"><p>
The completion of the ISO C++ standardization gave the C++
community a powerful set of reuseable tools in the form of the C++
Standard Library. However, all existing C++ implementations are
@@ -129,9 +129,9 @@
(<span class="command"><strong>gcc</strong></span>, <span class="command"><strong>g++</strong></span>, etc) is widely
considered to be one of the leading compilers in the world. Its
development is overseen by the
- <a class="link" href="http://gcc.gnu.org/">GCC team</a>. All of
+ <a class="link" href="http://gcc.gnu.org/" target="_top">GCC team</a>. All of
the rapid development and near-legendary
- <a class="link" href="http://gcc.gnu.org/buildstat.html">portability</a>
+ <a class="link" href="http://gcc.gnu.org/buildstat.html" target="_top">portability</a>
that are the hallmarks of an open-source project are being
applied to libstdc++.
</p><p>
@@ -141,11 +141,11 @@
<code class="classname">vector&lt;&gt;</code>, iostreams, and algorithms.)
Programmers will no longer need to <span class="quote">“<span class="quote">roll their own</span>â€</span>
nor be worried about platform-specific incompatibilities.
- </p></td></tr><tr class="question" title="1.3."><td align="left" valign="top"><a id="faq.who"/><a id="q-who"/><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="1.3."><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
Who's in charge of it?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"></a></td><td align="left" valign="top"><p>
The libstdc++ project is contributed to by several developers
- all over the world, in the same way as GCC or Linux.
+ all over the world, in the same way as GCC or the Linux kernel.
Benjamin Kosnik, Gabriel Dos Reis, Phil Edwards, Ulrich Drepper,
Loren James Rittle, and Paolo Carlini are the lead maintainers of
the SVN archive.
@@ -153,17 +153,17 @@
Development and discussion is held on the libstdc++ mailing
list. Subscribing to the list, or searching the list
archives, is open to everyone. You can read instructions for
- doing so on the <a class="link" href="http://gcc.gnu.org/libstdc++/">homepage</a>.
+ doing so on the <a class="link" href="http://gcc.gnu.org/libstdc++/" target="_top">homepage</a>.
If you have questions, ideas, code, or are just curious, sign up!
- </p></td></tr><tr class="question" title="1.4."><td align="left" valign="top"><a id="faq.when"/><a id="q-when"/><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="1.4."><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
When is libstdc++ going to be finished?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"></a></td><td align="left" valign="top"><p>
Nathan Myers gave the best of all possible answers, responding to
a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
help.</em></span>
- </p></td></tr><tr class="question" title="1.5."><td align="left" valign="top"><a id="faq.how"/><a id="q-how"/><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="1.5."><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
How do I contribute to the effort?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"></a></td><td align="left" valign="top"><p>
Here is <a class="link" href="manual/appendix_contributing.html" title="Appendix A.  Contributing">a page devoted to
this topic</a>. Subscribing to the mailing list (see above, or
the homepage) is a very good idea if you have something to
@@ -172,17 +172,17 @@
anybody who is willing to help write documentation, for example,
or has found a bug in code that we all thought was working and is
willing to provide details, is more than welcome!
- </p></td></tr><tr class="question" title="1.6."><td align="left" valign="top"><a id="faq.whereis_old"/><a id="q-whereis_old"/><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="1.6."><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
What happened to the older libg++? I need that!
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"></a></td><td align="left" valign="top"><p>
The most recent libg++ README states that libg++ is no longer
being actively maintained. It should not be used for new
projects, and is only being kicked along to support older code.
</p><p>
More information in the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards compatibility documentation</a>
- </p></td></tr><tr class="question" title="1.7."><td align="left" valign="top"><a id="faq.more_questions"/><a id="q-more_questions"/><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="1.7."><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
What if I have more questions?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"></a></td><td align="left" valign="top"><p>
If you have read the README file, and your question remains
unanswered, then just ask the mailing list. At present, you do not
need to be subscribed to the list to send a message to it. More
@@ -201,19 +201,19 @@
How is that different from the GNU {Lesser,Library} GPL?
</a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
I see. So, what restrictions are there on programs that use the library?
- </a></dt></dl></td></tr><tr class="question" title="2.1."><td align="left" valign="top"><a id="faq.license.what"/><a id="q-license.what"/><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="2.1."><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
What are the license terms for libstdc++?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"></a></td><td align="left" valign="top"><p>
See <a class="link" href="manual/license.html" title="License">our license description</a>
for these and related questions.
- </p></td></tr><tr class="question" title="2.2."><td align="left" valign="top"><a id="faq.license.any_program"/><a id="q-license.any_program"/><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="2.2."><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
So any program which uses libstdc++ falls under the GPL?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"></a></td><td align="left" valign="top"><p>
No. The special exception permits use of the library in
proprietary applications.
- </p></td></tr><tr class="question" title="2.3."><td align="left" valign="top"><a id="faq.license.lgpl"/><a id="q-license.lgpl"/><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="2.3."><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
How is that different from the GNU {Lesser,Library} GPL?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"></a></td><td align="left" valign="top"><p>
The LGPL requires that users be able to replace the LGPL code with a
modified version; this is trivial if the library in question is a C
shared library. But there's no way to make that work with C++, where
@@ -221,9 +221,9 @@
are expanded inside the code that uses the library. So to allow people
to replace the library code, someone using the library would have to
distribute their own source, rendering the LGPL equivalent to the GPL.
- </p></td></tr><tr class="question" title="2.4."><td align="left" valign="top"><a id="faq.license.what_restrictions"/><a id="q-license.what_restrictions"/><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="2.4."><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
I see. So, what restrictions are there on programs that use the library?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
None. We encourage such programs to be released as open source,
but we won't punish you or sue you if you choose otherwise.
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
@@ -234,10 +234,10 @@
What's libsupc++?
</a></dt><dt>3.6. <a href="faq.html#faq.size">
This library is HUGE!
- </a></dt></dl></td></tr><tr class="question" title="3.1."><td align="left" valign="top"><a id="faq.how_to_install"/><a id="q-how_to_install"/><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"/></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="3.1."><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"></a></td><td align="left" valign="top"><p>
Often libstdc++ comes pre-installed as an integral part of many
- existing Linux and Unix systems, as well as many embedded
+ existing GNU/Linux and Unix systems, as well as many embedded
development tools. It may be necessary to install extra
development packages to get the headers, or the documentation, or
the source: please consult your vendor for details.
@@ -247,11 +247,11 @@
documentation</a> for detailed
instructions. You may wish to browse those files ahead
of time to get a feel for what's required.
- </p></td></tr><tr class="question" title="3.2."><td align="left" valign="top"><a id="faq.how_to_get_sources"/><a id="q-how_to_get_sources"/><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="3.2."><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"></a></td><td align="left" valign="top"><p>
Libstdc++ sources for all official releases can be obtained as
part of the GCC sources, available from various sites and
- mirrors. A full <a class="link" href="http://gcc.gnu.org/mirrors.html">list of
+ mirrors. A full <a class="link" href="http://gcc.gnu.org/mirrors.html" target="_top">list of
download sites</a> is provided on the main GCC site.
</p><p>
Current libstdc++ sources can always be checked out of the main
@@ -262,7 +262,7 @@
<span class="application">Subversion</span>, or <acronym class="acronym">SVN</acronym>, is
one of several revision control packages. It was selected for GNU
projects because it's free (speech), free (beer), and very high
- quality. The <a class="link" href="http://subversion.tigris.org"> Subversion
+ quality. The <a class="link" href="http://subversion.tigris.org" target="_top"> Subversion
home page</a> has a better description.
</p><p>
The <span class="quote">“<span class="quote">anonymous client checkout</span>â€</span> feature of SVN is
@@ -270,21 +270,21 @@
the latest libstdc++ sources.
</p><p>
For more information
- see <a class="link" href="http://gcc.gnu.org/svn.html"><acronym class="acronym">SVN</acronym>
+ see <a class="link" href="http://gcc.gnu.org/svn.html" target="_top"><acronym class="acronym">SVN</acronym>
details</a>.
- </p></td></tr><tr class="question" title="3.3."><td align="left" valign="top"><a id="faq.how_to_test"/><a id="q-how_to_test"/><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="3.3."><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"></a></td><td align="left" valign="top"><p>
Libstdc++ comes with its own validation testsuite, which includes
conformance testing, regression testing, ABI testing, and
performance testing. Please consult the
- <a class="link" href="http://gcc.gnu.org/install/test.html">testing
+ <a class="link" href="http://gcc.gnu.org/install/test.html" target="_top">testing
documentation</a> for more details.
</p><p>
If you find bugs in the testsuite programs themselves, or if you
think of a new test program that should be added to the suite,
<span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
- </p></td></tr><tr class="question" title="3.4."><td align="left" valign="top"><a id="faq.how_to_set_paths"/><a id="q-how_to_set_paths"/><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="3.4."><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"></a></td><td align="left" valign="top"><p>
Depending on your platform and library version, the error message might
be similar to one of the following:
</p><pre class="screen">
@@ -318,9 +318,9 @@
</p><p>
Using LD_LIBRARY_PATH is not always the best solution, <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
Libraries</a> in the manual gives some alternatives.
- </p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"/><a id="q-what_is_libsupcxx"/><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
What's libsupc++?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
If the only functions from <code class="filename">libstdc++.a</code>
which you need are language support functions (those listed in
<a class="link" href="manual/support.html" title="Chapter 4.  Support">clause 18</a> of the
@@ -335,9 +335,9 @@
using anything from the rest of the library, such as IOStreams
or vectors, then you'll still need pieces from
<code class="filename">libstdc++.a</code>.
- </p></td></tr><tr class="question" title="3.6."><td align="left" valign="top"><a id="faq.size"/><a id="q-size"/><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="3.6."><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
This library is HUGE!
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"></a></td><td align="left" valign="top"><p>
Usually the size of libraries on disk isn't noticeable. When a
link editor (or simply <span class="quote">“<span class="quote">linker</span>â€</span>) pulls things from a
static archive library, only the necessary object files are copied
@@ -382,9 +382,9 @@
Recent GNU/Linux glibc required?
</a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
Can't use wchar_t/wstring on FreeBSD
- </a></dt></dl></td></tr><tr class="question" title="4.1."><td align="left" valign="top"><a id="faq.other_compilers"/><a id="q-other_compilers"/><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="4.1."><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
Can libstdc++ be used with non-GNU compilers?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"></a></td><td align="left" valign="top"><p>
Perhaps.
</p><p>
Since the goal of ISO Standardization is for all C++
@@ -402,9 +402,9 @@
been known to work with versions of the EDG C++ compiler, and
vendor-specific proprietary C++ compilers such as the Intel ICC
C++ compiler.
- </p></td></tr><tr class="question" title="4.2."><td align="left" valign="top"><a id="faq.solaris_long_long"/><a id="q-solaris_long_long"/><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.2."><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
No 'long long' type on Solaris?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"></a></td><td align="left" valign="top"><p>
By default we try to support the C99 <span class="type">long long</span> type.
This requires that certain functions from your C library be present.
</p><p>
@@ -414,9 +414,9 @@
commonly reported platform affected was Solaris.
</p><p>
This has been fixed for libstdc++ releases greater than 3.0.3.
- </p></td></tr><tr class="question" title="4.3."><td align="left" valign="top"><a id="faq.predefined"/><a id="q-predefined"/><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.3."><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
<code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"/></td><td align="left" valign="top"><p>On Solaris, g++ (but not gcc) always defines the preprocessor
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"></a></td><td align="left" valign="top"><p>On Solaris, g++ (but not gcc) always defines the preprocessor
macro <code class="constant">_XOPEN_SOURCE</code>. On GNU/Linux, the same happens
with <code class="constant">_GNU_SOURCE</code>. (This is not an exhaustive list;
other macros and other platforms are also affected.)
@@ -440,18 +440,18 @@
<span class="command"><strong>g++ -E -dM - &lt; /dev/null"</strong></span> to display
a list of predefined macros for any particular installation.
</p><p>This has been discussed on the mailing lists
- <a class="link" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris">quite a bit</a>.
+ <a class="link" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris" target="_top">quite a bit</a>.
</p><p>This method is something of a wart. We'd like to find a cleaner
solution, but nobody yet has contributed the time.
- </p></td></tr><tr class="question" title="4.4."><td align="left" valign="top"><a id="faq.darwin_ctype"/><a id="q-darwin_ctype"/><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.4."><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"/></td><td align="left" valign="top"><p>This is a long-standing bug in the OS X support. Fortunately,
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"></a></td><td align="left" valign="top"><p>This is a long-standing bug in the OS X support. Fortunately,
the patch is quite simple, and well-known.
- <a class="link" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html"> Here's a
+ <a class="link" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html" target="_top"> Here's a
link to the solution</a>.
- </p></td></tr><tr class="question" title="4.5."><td align="left" valign="top"><a id="faq.threads_i386"/><a id="q-threads_i386"/><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.5."><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
Threading is broken on i386?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"></a></td><td align="left" valign="top"><p>
</p><p>Support for atomic integer operations is/was broken on i386
platforms. The assembly code accidentally used opcodes that are
only available on the i486 and later. So if you configured GCC
@@ -459,9 +459,9 @@
on an i686, then you would encounter no problems. Only when
actually running the code on a i386 will the problem appear.
</p><p>This is fixed in 3.2.2.
- </p></td></tr><tr class="question" title="4.6."><td align="left" valign="top"><a id="faq.atomic_mips"/><a id="q-atomic_mips"/><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.6."><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
MIPS atomic operations
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"></a></td><td align="left" valign="top"><p>
The atomic locking routines for MIPS targets requires MIPS II
and later. A patch went in just after the 3.3 release to
make mips* use the generic implementation instead. You can also
@@ -469,9 +469,9 @@
</p><p>
The mips*-*-linux* port continues to use the MIPS II routines, and more
work in this area is expected.
- </p></td></tr><tr class="question" title="4.7."><td align="left" valign="top"><a id="faq.linux_glibc"/><a id="q-linux_glibc"/><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.7."><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
Recent GNU/Linux glibc required?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"/></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
5.0.1) and later uses localization and formatting code from the system
C library (glibc) version 2.2.5 which contains necessary bugfixes.
Most GNU/Linux distros make more recent versions available now.
@@ -480,9 +480,9 @@
</p><p>The guideline is simple: the more recent the C++ library, the
more recent the C library. (This is also documented in the main
GCC installation instructions.)
- </p></td></tr><tr class="question" title="4.8."><td align="left" valign="top"><a id="faq.freebsd_wchar"/><a id="q-freebsd_wchar"/><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="4.8."><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
Can't use wchar_t/wstring on FreeBSD
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"></a></td><td align="left" valign="top"><p>
Older versions of FreeBSD's C library do not have sufficient
support for wide character functions, and as a result the
libstdc++ configury decides that wchar_t support should be
@@ -499,9 +499,9 @@
Bugs in the ISO C++ language or library specification
</a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
Bugs in the compiler (gcc/g++) and not libstdc++
- </a></dt></dl></td></tr><tr class="question" title="5.1."><td align="left" valign="top"><a id="faq.what_works"/><a id="q-what_works"/><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="5.1."><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
What works already?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"></a></td><td align="left" valign="top"><p>
Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
except for some corner cases. Support for localization
in <code class="classname">locale</code> may be incomplete on non-GNU
@@ -512,25 +512,25 @@
Long answer: See the implementation status pages for
<a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
<a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>, and
- <a class="link" href="manual/status.html#status.iso.200x" title="C++ 200x">C++0x</a>.
- </p></td></tr><tr class="question" title="5.2."><td align="left" valign="top"><a id="faq.standard_bugs"/><a id="q-standard_bugs"/><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
+ <a class="link" href="manual/status.html#status.iso.2011" title="C++ 2011">C++11</a>.
+ </p></td></tr><tr class="question" title="5.2."><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
Bugs in the ISO C++ language or library specification
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"></a></td><td align="left" valign="top"><p>
Unfortunately, there are some.
</p><p>
For those people who are not part of the ISO Library Group
(i.e., nearly all of us needing to read this page in the first
place), a public list of the library defects is occasionally
- published <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/">here</a>.
+ published on <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">the WG21
+ website</a>.
Some of these issues have resulted in code changes in libstdc++.
</p><p>
If you think you've discovered a new bug that is not listed,
- please post a message describing your problem
- to <code class="email">&lt;<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>&gt;</code> or the Usenet group
- comp.lang.c++.moderated.
- </p></td></tr><tr class="question" title="5.3."><td align="left" valign="top"><a id="faq.compiler_bugs"/><a id="q-compiler_bugs"/><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
+ please post a message describing your problem to the author of
+ the library issues list or the Usenet group comp.lang.c++.moderated.
+ </p></td></tr><tr class="question" title="5.3."><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
Bugs in the compiler (gcc/g++) and not libstdc++
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"></a></td><td align="left" valign="top"><p>
On occasion, the compiler is wrong. Please be advised that this
happens much less often than one would think, and avoid jumping to
conclusions.
@@ -541,7 +541,7 @@
these lists with terms describing your issue.
</p><p>
Before reporting a bug, please examine the
- <a class="link" href="http://gcc.gnu.org/bugs/">bugs database</a> with the
+ <a class="link" href="http://gcc.gnu.org/bugs/" target="_top">bugs database</a> with the
category set to <span class="quote">“<span class="quote">g++</span>â€</span>.
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
Reopening a stream fails
@@ -563,19 +563,19 @@
list::size() is O(n)!
</a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
Aw, that's easy to fix!
- </a></dt></dl></td></tr><tr class="question" title="6.1."><td align="left" valign="top"><a id="faq.stream_reopening_fails"/><a id="q-stream_reopening_fails"/><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="6.1."><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
Reopening a stream fails
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"></a></td><td align="left" valign="top"><p>
One of the most-reported non-bug reports. Executing a sequence like:
- </p><div class="literallayout"><p><br/>
-    #include &lt;fstream&gt;<br/>
-    ...<br/>
-    std::fstream  fs(<span class="quote">“<span class="quote">a_file</span>â€</span>);<br/>
-    // .<br/>
-    // . do things with fs...<br/>
-    // .<br/>
-    fs.close();<br/>
-    fs.open(<span class="quote">“<span class="quote">a_new_file</span>â€</span>);<br/>
+ </p><div class="literallayout"><p><br />
+    #include &lt;fstream&gt;<br />
+    ...<br />
+    std::fstream  fs(<span class="quote">“<span class="quote">a_file</span>â€</span>);<br />
+    // .<br />
+    // . do things with fs...<br />
+    // .<br />
+    fs.close();<br />
+    fs.open(<span class="quote">“<span class="quote">a_new_file</span>â€</span>);<br />
    </p></div><p>
All operations on the re-opened <code class="varname">fs</code> will fail, or at
least act very strangely. Yes, they often will, especially if
@@ -590,9 +590,9 @@
<span class="emphasis"><em>Update:</em></span> for GCC 4.0 we implemented the resolution
of <a class="link" href="manual/bugs.html" title="Bugs">DR #409</a> and open()
now calls <code class="function">clear()</code> on success!
- </p></td></tr><tr class="question" title="6.2."><td align="left" valign="top"><a id="faq.wefcxx_verbose"/><a id="q-wefcxx_verbose"/><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.2."><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
-Weffc++ complains too much
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"></a></td><td align="left" valign="top"><p>
Many warnings are emitted when <code class="literal">-Weffc++</code> is used. Making
libstdc++ <code class="literal">-Weffc++</code>-clean is not a goal of the project,
for a few reasons. Mainly, that option tries to enforce
@@ -602,21 +602,21 @@
We do, however, try to have libstdc++ sources as clean as possible. If
you see some simple changes that pacify <code class="literal">-Weffc++</code>
without other drawbacks, send us a patch.
- </p></td></tr><tr class="question" title="6.3."><td align="left" valign="top"><a id="faq.ambiguous_overloads"/><a id="q-ambiguous_overloads"/><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.3."><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
Ambiguous overloads after including an old-style header
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"></a></td><td align="left" valign="top"><p>
Another problem is the <code class="literal">rel_ops</code> namespace and the template
comparison operator functions contained therein. If they become
visible in the same namespace as other comparison functions
(e.g., <span class="quote">“<span class="quote">using</span>â€</span> them and the &lt;iterator&gt; header),
then you will suddenly be faced with huge numbers of ambiguity
errors. This was discussed on the -v3 list; Nathan Myers
- <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
+ <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html" target="_top">sums
things up here</a>. The collisions with vector/string iterator
types have been fixed for 3.1.
- </p></td></tr><tr class="question" title="6.4."><td align="left" valign="top"><a id="faq.v2_headers"/><a id="q-v2_headers"/><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.4."><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"></a></td><td align="left" valign="top"><p>
If you are using headers in
<code class="filename">${prefix}/include/g++-3</code>, or if the installed
library's name looks like <code class="filename">libstdc++-2.10.a</code> or
@@ -630,10 +630,10 @@
'v'?). Starting with version 3.2 the headers are installed in
<code class="filename">${prefix}/include/c++/${version}</code> as this prevents
headers from previous versions being found by mistake.
- </p></td></tr><tr class="question" title="6.5."><td align="left" valign="top"><a id="faq.boost_concept_checks"/><a id="q-boost_concept_checks"/><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.5."><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
Errors about <span class="emphasis"><em>*Concept</em></span> and
<span class="emphasis"><em>constraints</em></span> in the STL
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"></a></td><td align="left" valign="top"><p>
If you see compilation errors containing messages about
<span class="errortext">foo Concept </span>and something to do with a
<span class="errortext">constraints</span> member function, then most
@@ -647,31 +647,31 @@
checks, is available in the
<a class="link" href="manual/bk01pt02ch05s02.html" title="Concept Checking">Diagnostics</a>.
chapter of the manual.
- </p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"/><a id="q-dlopen_crash"/><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
Program crashes when using library code in a
dynamically-loaded library
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"></a></td><td align="left" valign="top"><p>
If you are using the C++ library across dynamically-loaded
objects, make certain that you are passing the correct options
when compiling and linking:
- </p><div class="literallayout"><p><br/>
-    // compile your library components<br/>
-    g++ -fPIC -c a.cc<br/>
-    g++ -fPIC -c b.cc<br/>
-    ...<br/>
-    g++ -fPIC -c z.cc<br/>
-<br/>
-    // create your library<br/>
-    g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o<br/>
-<br/>
-    // link the executable<br/>
-    g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl<br/>
-    </p></div></td></tr><tr class="question" title="6.7."><td align="left" valign="top"><a id="faq.memory_leaks"/><a id="q-memory_leaks"/><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
+ </p><div class="literallayout"><p><br />
+    // compile your library components<br />
+    g++ -fPIC -c a.cc<br />
+    g++ -fPIC -c b.cc<br />
+    ...<br />
+    g++ -fPIC -c z.cc<br />
+<br />
+    // create your library<br />
+    g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o<br />
+<br />
+    // link the executable<br />
+    g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl<br />
+    </p></div></td></tr><tr class="question" title="6.7."><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
<span class="quote">“<span class="quote">Memory leaks</span>â€</span> in containers
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"></a></td><td align="left" valign="top"><p>
A few people have reported that the standard containers appear
to leak memory when tested with memory checkers such as
- <a class="link" href="http://valgrind.org/">valgrind</a>.
+ <a class="link" href="http://valgrind.org/" target="_top">valgrind</a>.
The library's default allocators keep free memory in a pool
for later reuse, rather than returning it to the OS. Although
this memory is always reachable by the library and is never
@@ -679,18 +679,18 @@
want to test the library for memory leaks please read
<a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
first.
- </p></td></tr><tr class="question" title="6.8."><td align="left" valign="top"><a id="faq.list_size_on"/><a id="q-list_size_on"/><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.8."><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
list::size() is O(n)!
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
See
the <a class="link" href="manual/containers.html" title="Chapter 9.  Containers">Containers</a>
chapter.
- </p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"/><a id="q-easy_to_fix"/><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
Aw, that's easy to fix!
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"></a></td><td align="left" valign="top"><p>
If you have found a bug in the library and you think you have
a working fix, then send it in! The main GCC site has a page
- on <a class="link" href="http://gcc.gnu.org/contribute.html">submitting
+ on <a class="link" href="http://gcc.gnu.org/contribute.html" target="_top">submitting
patches</a> that covers the procedure, but for libstdc++ you
should also send the patch to our mailing list in addition to
the GCC patches mailing list. The libstdc++
@@ -718,9 +718,9 @@
What's an ABI and why is it so messy?
</a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
- </a></dt></dl></td></tr><tr class="question" title="7.1."><td align="left" valign="top"><a id="faq.iterator_as_pod"/><a id="faq.iterator_as_pod_q"/><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
+ </a></dt></dl></td></tr><tr class="question" title="7.1."><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
string::iterator is not char*; vector&lt;T&gt;::iterator is not T*
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"></a></td><td align="left" valign="top"><p>
If you have code that depends on container&lt;T&gt; iterators
being implemented as pointer-to-T, your code is broken. It's
considered a feature, not a bug, that libstdc++ points this out.
@@ -737,9 +737,9 @@
certain expressions to <code class="varname">&amp;*i</code>. Future revisions
of the Standard are expected to bless this usage for
vector&lt;&gt; (but not for basic_string&lt;&gt;).
- </p></td></tr><tr class="question" title="7.2."><td align="left" valign="top"><a id="faq.what_is_next"/><a id="q-what_is_next"/><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.2."><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
What's next after libstdc++?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"></a></td><td align="left" valign="top"><p>
Hopefully, not much. The goal of libstdc++ is to produce a
fully-compliant, fully-portable Standard Library. After that,
we're mostly done: there won't <span class="emphasis"><em>be</em></span> any
@@ -748,12 +748,12 @@
There is an effort underway to add significant extensions to
the standard library specification. The latest version of
this effort is described in
- <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
The C++ Library Technical Report 1</a>.
- </p></td></tr><tr class="question" title="7.3."><td align="left" valign="top"><a id="faq.sgi_stl"/><a id="q-sgi_stl"/><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.3."><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
What about the STL from SGI?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"/></td><td align="left" valign="top"><p>
- The <a class="link" href="http://www.sgi.com/tech/stl/">STL from SGI</a>,
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"></a></td><td align="left" valign="top"><p>
+ The <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">STL from SGI</a>,
version 3.3, was the final merge of the STL codebase. The
code in libstdc++ contains many fixes and changes, and
the SGI code is no longer under active
@@ -773,24 +773,24 @@
</p><p>
The FAQ for SGI's STL (one jump off of their main page) is
still recommended reading.
- </p></td></tr><tr class="question" title="7.4."><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"/><a id="q-extensions_and_backwards_compat"/><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.4."><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
Extensions and Backward Compatibility
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"></a></td><td align="left" valign="top"><p>
See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
- </p></td></tr><tr class="question" title="7.5."><td align="left" valign="top"><a id="faq.tr1_support"/><a id="q-tr1_support"/><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.5."><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
Does libstdc++ support TR1?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"></a></td><td align="left" valign="top"><p>
Yes.
</p><p>
The C++ Standard Library Technical Report adds many new features to
the library. The latest version of this effort is described in
- <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
Technical Report 1</a>.
</p><p>
The implementation status of TR1 in libstdc++ can be tracked <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status
page</a>.
- </p></td></tr><tr class="question" title="7.6."><td align="left" valign="top"><a id="faq.get_iso_cxx"/><a id="q-get_iso_cxx"/><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.6."><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"></a></td><td align="left" valign="top"><p>
Copies of the full ISO 14882 standard are available on line via
the ISO mirror site for committee members. Non-members, or those
who have not paid for the privilege of sitting on the committee
@@ -798,19 +798,19 @@
get a copy of the standard from their respective national
standards organization. In the USA, this national standards
organization is ANSI and their website is
- right <a class="link" href="http://www.ansi.org">here</a>. (And if
+ right <a class="link" href="http://www.ansi.org" target="_top">here</a>. (And if
you've already registered with them, clicking this link will take
you to directly to the place where you can
- <a class="link" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</a>.
+ <a class="link" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003" target="_top">buy the standard on-line</a>.
</p><p>
Who is your country's member body? Visit the
- <a class="link" href="http://www.iso.ch/">ISO homepage</a> and find out!
+ <a class="link" href="http://www.iso.ch/" target="_top">ISO homepage</a> and find out!
</p><p>
The 2003 version of the standard (the 1998 version plus TC1) is
available in print, ISBN 0-470-84674-7.
- </p></td></tr><tr class="question" title="7.7."><td align="left" valign="top"><a id="faq.what_is_abi"/><a id="q-what_is_abi"/><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.7."><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
What's an ABI and why is it so messy?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"></a></td><td align="left" valign="top"><p>
<acronym class="acronym">ABI</acronym> stands for <span class="quote">“<span class="quote">Application Binary
Interface</span>â€</span>. Conventionally, it refers to a great
mass of details about how arguments are arranged on the call
@@ -856,17 +856,17 @@
so they may later be changed. Deciding which, and implementing
the decisions, must happen before you can reasonably document a
candidate C++ ABI that encompasses the standard library.
- </p></td></tr><tr class="question" title="7.8."><td align="left" valign="top"><a id="faq.size_equals_capacity"/><a id="q-size_equals_capacity"/><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="question" title="7.8."><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"/></td><td align="left" valign="top"><p>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"></a></td><td align="left" valign="top"><p>
The standard idiom for deallocating a <code class="classname">vector&lt;T&gt;</code>'s
unused memory is to create a temporary copy of the vector and swap their
contents, e.g. for <code class="classname">vector&lt;T&gt; v</code>
- </p><div class="literallayout"><p><br/>
-     std::vector&lt;T&gt;(v).swap(v);<br/>
+ </p><div class="literallayout"><p><br />
+     std::vector&lt;T&gt;(v).swap(v);<br />
    </p></div><p>
The copy will take O(n) time and the swap is constant time.
</p><p>
See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
strings</a> for a similar solution for strings.
- </p></td></tr></tbody></table></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk03.html">Up</a></td><td align="right"> </td></tr><tr><td align="left" valign="top"> </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
+ </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/images/confdeps.png b/libstdc++-v3/doc/html/images/confdeps.png
new file mode 100644
index 0000000000..55c07ba015
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/confdeps.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/balls_and_bins.png b/libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
index 529c3ae41b..529c3ae41b 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/balls_and_bins.png
+++ b/libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png b/libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
new file mode 100644
index 0000000000..601d60fda8
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push_pop.png b/libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push_pop.png
new file mode 100644
index 0000000000..93637b06c8
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_cc_hash_int_find.png b/libstdc++-v3/doc/html/images/pbds_cc_hash_int_find.png
new file mode 100644
index 0000000000..ee3518799d
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_cc_hash_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_find.png b/libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_find.png
new file mode 100644
index 0000000000..6c66291f51
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_insert.png b/libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_insert.png
new file mode 100644
index 0000000000..ba8478084b
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_cc_hash_int_subscript_insert.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_ccgp_hash_int_subscript_insert.png b/libstdc++-v3/doc/html/images/pbds_ccgp_hash_int_subscript_insert.png
new file mode 100644
index 0000000000..d36c47eb41
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_ccgp_hash_int_subscript_insert.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_container_tag_hierarchy.png b/libstdc++-v3/doc/html/images/pbds_container_tag_hierarchy.png
new file mode 100644
index 0000000000..f827f6e0b0
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_container_tag_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/different_underlying_dss.png b/libstdc++-v3/doc/html/images/pbds_different_underlying_dss_1.png
index adee126360..adee126360 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/different_underlying_dss.png
+++ b/libstdc++-v3/doc/html/images/pbds_different_underlying_dss_1.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pq_different_underlying_dss.png b/libstdc++-v3/doc/html/images/pbds_different_underlying_dss_2.png
index 9d84791fc0..9d84791fc0 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/pq_different_underlying_dss.png
+++ b/libstdc++-v3/doc/html/images/pbds_different_underlying_dss_2.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_1.png b/libstdc++-v3/doc/html/images/pbds_embedded_lists_1.png
index 9470a65b56..9470a65b56 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_1.png
+++ b/libstdc++-v3/doc/html/images/pbds_embedded_lists_1.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_2.png b/libstdc++-v3/doc/html/images/pbds_embedded_lists_2.png
index d2ac91c1ab..d2ac91c1ab 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_2.png
+++ b/libstdc++-v3/doc/html/images/pbds_embedded_lists_2.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_3.png b/libstdc++-v3/doc/html/images/pbds_embedded_lists_3.png
index 08ecb0ffe1..08ecb0ffe1 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/embedded_lists_3.png
+++ b/libstdc++-v3/doc/html/images/pbds_embedded_lists_3.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_exception_hierarchy.png b/libstdc++-v3/doc/html/images/pbds_exception_hierarchy.png
new file mode 100644
index 0000000000..a7c3383825
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_exception_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_gp_hash_int_find.png b/libstdc++-v3/doc/html/images/pbds_gp_hash_int_find.png
new file mode 100644
index 0000000000..66aa0481cd
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_gp_hash_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_find.png b/libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_find.png
new file mode 100644
index 0000000000..d84733fe08
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_insert.png b/libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_insert.png
new file mode 100644
index 0000000000..27940fcd8b
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_gp_hash_int_subscript_insert.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_hash_int_erase_mem.png b/libstdc++-v3/doc/html/images/pbds_hash_int_erase_mem.png
new file mode 100644
index 0000000000..d26ed8fd54
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_hash_int_erase_mem.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_policy_cd.png b/libstdc++-v3/doc/html/images/pbds_hash_policy_cd.png
index f3122a112f..f3122a112f 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_policy_cd.png
+++ b/libstdc++-v3/doc/html/images/pbds_hash_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_range_hashing_seq_diagram.png b/libstdc++-v3/doc/html/images/pbds_hash_range_hashing_seq_diagram.png
index 5c37407dda..5c37407dda 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_range_hashing_seq_diagram.png
+++ b/libstdc++-v3/doc/html/images/pbds_hash_range_hashing_seq_diagram.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_range_hashing_seq_diagram2.png b/libstdc++-v3/doc/html/images/pbds_hash_range_hashing_seq_diagram2.png
index 87763caacc..87763caacc 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_range_hashing_seq_diagram2.png
+++ b/libstdc++-v3/doc/html/images/pbds_hash_range_hashing_seq_diagram2.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_ranged_hash_range_hashing_fns.png b/libstdc++-v3/doc/html/images/pbds_hash_ranged_hash_range_hashing_fns.png
index 5e0d7f4037..5e0d7f4037 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/hash_ranged_hash_range_hashing_fns.png
+++ b/libstdc++-v3/doc/html/images/pbds_hash_ranged_hash_range_hashing_fns.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_hash_text_find.png b/libstdc++-v3/doc/html/images/pbds_hash_text_find.png
new file mode 100644
index 0000000000..04c7eebb6e
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_hash_text_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_hash_zlob_int_find.png b/libstdc++-v3/doc/html/images/pbds_hash_zlob_int_find.png
new file mode 100644
index 0000000000..d4dac479c1
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_hash_zlob_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram1.png b/libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram1.png
index f64764ec93..f64764ec93 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram1.png
+++ b/libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram1.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram2.png b/libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram2.png
index e4645973ee..e4645973ee 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram2.png
+++ b/libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram2.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram3.png b/libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram3.png
index 5535c5fe60..5535c5fe60 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/insert_resize_sequence_diagram3.png
+++ b/libstdc++-v3/doc/html/images/pbds_insert_resize_sequence_diagram3.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_erase.png b/libstdc++-v3/doc/html/images/pbds_invalidation_guarantee_erase.png
index 940a27f714..940a27f714 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/invalidation_guarantee_erase.png
+++ b/libstdc++-v3/doc/html/images/pbds_invalidation_guarantee_erase.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_invalidation_tag_hierarchy.png b/libstdc++-v3/doc/html/images/pbds_invalidation_tag_hierarchy.png
new file mode 100644
index 0000000000..570a70da96
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_invalidation_tag_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/lu.png b/libstdc++-v3/doc/html/images/pbds_list_update.png
index 7c96dcaf66..7c96dcaf66 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/lu.png
+++ b/libstdc++-v3/doc/html/images/pbds_list_update.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_hash.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_hash.png
new file mode 100644
index 0000000000..cb9000fa41
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_tree.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_tree.png
new file mode 100644
index 0000000000..12d062dbc0
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_large_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_hash.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_hash.png
new file mode 100644
index 0000000000..7c387198e2
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_tree.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_tree.png
new file mode 100644
index 0000000000..2066376ee5
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_find_small_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_hash.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_hash.png
new file mode 100644
index 0000000000..09afca29a6
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_tree.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_tree.png
new file mode 100644
index 0000000000..a063d4b093
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_large_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_hash.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_hash.png
new file mode 100644
index 0000000000..01b0884c16
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_tree.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_tree.png
new file mode 100644
index 0000000000..f88c9b9aa4
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_large_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_hash.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_hash.png
new file mode 100644
index 0000000000..a5c8cf6029
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_tree.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_tree.png
new file mode 100644
index 0000000000..88b59ae4c0
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_mem_small_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_hash.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_hash.png
new file mode 100644
index 0000000000..9cf2a8e8d1
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_tree.png b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_tree.png
new file mode 100644
index 0000000000..b851d21499
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_multimap_text_insert_small_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/node_invariants.png b/libstdc++-v3/doc/html/images/pbds_node_invariants.png
index b375f5168d..b375f5168d 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/node_invariants.png
+++ b/libstdc++-v3/doc/html/images/pbds_node_invariants.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_down_thin.png b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_down_thin.png
new file mode 100644
index 0000000000..3f56eebb08
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_down_thin.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_up_thin.png b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_up_thin.png
new file mode 100644
index 0000000000..c647e4f551
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_modify_up_thin.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push.png b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push.png
new file mode 100644
index 0000000000..9f7498a5f3
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push_pop.png b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push_pop.png
new file mode 100644
index 0000000000..b56a35e17b
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_pairing_priority_queue_text_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pat_trie.png b/libstdc++-v3/doc/html/images/pbds_pat_trie.png
index e7129a1a67..e7129a1a67 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/pat_trie.png
+++ b/libstdc++-v3/doc/html/images/pbds_pat_trie.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/point_iterators_cd.png b/libstdc++-v3/doc/html/images/pbds_point_iterator_hierarchy.png
index 25a69fc6e8..25a69fc6e8 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/point_iterators_cd.png
+++ b/libstdc++-v3/doc/html/images/pbds_point_iterator_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/point_iterators_range_ops_1.png b/libstdc++-v3/doc/html/images/pbds_point_iterators_range_ops_1.png
index c5bc8e5d6c..c5bc8e5d6c 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/point_iterators_range_ops_1.png
+++ b/libstdc++-v3/doc/html/images/pbds_point_iterators_range_ops_1.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/point_iterators_range_ops_2.png b/libstdc++-v3/doc/html/images/pbds_point_iterators_range_ops_2.png
index c3f94ee93b..c3f94ee93b 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/point_iterators_range_ops_2.png
+++ b/libstdc++-v3/doc/html/images/pbds_point_iterators_range_ops_2.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_different_underlying_dss.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_different_underlying_dss.png
new file mode 100644
index 0000000000..9d84791fc0
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_different_underlying_dss.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_int_push.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_int_push.png
new file mode 100644
index 0000000000..fdc53c7625
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_int_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_int_push_pop.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_int_push_pop.png
new file mode 100644
index 0000000000..56c841d5ec
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_int_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_tag_hierarchy.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_tag_hierarchy.png
new file mode 100644
index 0000000000..3a849d2d74
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_tag_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_text_join.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_join.png
new file mode 100644
index 0000000000..5c3073d8f4
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_join.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_down.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_down.png
new file mode 100644
index 0000000000..931812d13b
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_down.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_up.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_up.png
new file mode 100644
index 0000000000..e8e76549e0
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_modify_up.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_text_pop_mem.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_pop_mem.png
new file mode 100644
index 0000000000..741aa8b94e
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_pop_mem.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_text_push.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_push.png
new file mode 100644
index 0000000000..0107d473ea
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_priority_queue_text_push_pop.png b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_push_pop.png
new file mode 100644
index 0000000000..5da52c3def
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_priority_queue_text_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/rationale_null_node_updator.png b/libstdc++-v3/doc/html/images/pbds_rationale_null_node_updator.png
index 4387489151..4387489151 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/rationale_null_node_updator.png
+++ b/libstdc++-v3/doc/html/images/pbds_rationale_null_node_updator.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/resize_policy_cd.png b/libstdc++-v3/doc/html/images/pbds_resize_policy_cd.png
index 338e33c15c..338e33c15c 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/resize_policy_cd.png
+++ b/libstdc++-v3/doc/html/images/pbds_resize_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/restoring_node_invariants.png b/libstdc++-v3/doc/html/images/pbds_restoring_node_invariants.png
index 33ba84bfe3..33ba84bfe3 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/restoring_node_invariants.png
+++ b/libstdc++-v3/doc/html/images/pbds_restoring_node_invariants.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/simple_list.png b/libstdc++-v3/doc/html/images/pbds_simple_list.png
index 9a05d3f5e4..9a05d3f5e4 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/simple_list.png
+++ b/libstdc++-v3/doc/html/images/pbds_simple_list.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_int_find.png b/libstdc++-v3/doc/html/images/pbds_tree_int_find.png
new file mode 100644
index 0000000000..31bd80c5d8
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/node_invariant_invalidations.png b/libstdc++-v3/doc/html/images/pbds_tree_node_invalidations.png
index bbd91842ba..bbd91842ba 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/node_invariant_invalidations.png
+++ b/libstdc++-v3/doc/html/images/pbds_tree_node_invalidations.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_node_invariants.png b/libstdc++-v3/doc/html/images/pbds_tree_node_invariants.png
new file mode 100644
index 0000000000..b375f5168d
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_node_invariants.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_node_updator_policy_cd.png b/libstdc++-v3/doc/html/images/pbds_tree_node_updator_policy_cd.png
index 5cae5781a1..5cae5781a1 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/tree_node_updator_policy_cd.png
+++ b/libstdc++-v3/doc/html/images/pbds_tree_node_updator_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_order_statistics.png b/libstdc++-v3/doc/html/images/pbds_tree_order_statistics.png
new file mode 100644
index 0000000000..76177087f3
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_order_statistics.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_split_join.png b/libstdc++-v3/doc/html/images/pbds_tree_split_join.png
new file mode 100644
index 0000000000..dcbc2dbe0c
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_split_join.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_text_find.png b/libstdc++-v3/doc/html/images/pbds_tree_text_find.png
new file mode 100644
index 0000000000..ce4e606f75
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_text_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_text_insert_node.png b/libstdc++-v3/doc/html/images/pbds_tree_text_insert_node.png
new file mode 100644
index 0000000000..4ec35d4b70
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_text_insert_node.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_text_insert_trie.png b/libstdc++-v3/doc/html/images/pbds_tree_text_insert_trie.png
new file mode 100644
index 0000000000..3420298ce4
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_text_insert_trie.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_text_insert_vector.png b/libstdc++-v3/doc/html/images/pbds_tree_text_insert_vector.png
new file mode 100644
index 0000000000..cdb367ef60
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_text_insert_vector.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png b/libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png
new file mode 100644
index 0000000000..acc4a6f274
--- /dev/null
+++ b/libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/trie_node_updator_policy_cd.png b/libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
index 4376929ec2..4376929ec2 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/trie_node_updator_policy_cd.png
+++ b/libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/ext/pb_ds/update_seq_diagram.png b/libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
index 880a50edf8..880a50edf8 100644
--- a/libstdc++-v3/doc/html/ext/pb_ds/update_seq_diagram.png
+++ b/libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
Binary files differ
diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html
index b3b2ee69d6..da2248e416 100644
--- a/libstdc++-v3/doc/html/index.html
+++ b/libstdc++-v3/doc/html/index.html
@@ -1,43 +1,166 @@
-<html>
-
-<head>
-<title>The GNU C++ Library Documentation</title>
-</head>
-
-<body>
-
-<!-- ==================================================================== -->
-
-
-<div>
-<h1>The GNU C++ Library Documentation</h1>
-
-<p>Copyright 2008, 2009 FSF</p>
-
-<p>
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation
- License, Version 1.2 or any later version published by the
- Free Software Foundation; with no Invariant Sections, with no
- Front-Cover Texts, and with no Back-Cover Texts.
-</p>
-<p>
- This is the top level of the libstdc++ documentation tree.
- The documentation is contained in three logically separate
- documents, as listed in the following Table of Contents.
-</p>
-</div>
-
-<div>
-<p><b>Table of Contents</b></p>
-<dl>
-<dt><a href="manual/spine.html">Manual</a></dt>
-<dt><a href="faq.html">Frequently Asked Questions</a></dt>
-<dt><a href="api.html">API and Source Documentation</a></dt>
-</dl>
-</div>
-
-</body>
-</html>
-
-
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="description" content="Short Contents Copyright 2008, 2009, 2011 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" title="The GNU C++ Library" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract" title="Short Contents"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
+ Copyright 2008, 2009, 2011
+ <a class="link" href="http://www.fsf.org/" target="_top">FSF
+ </a>
+ </p><p>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License, Version 1.2 or any later version published by the
+ Free Software Foundation; with no Invariant Sections, with no
+ Front-Cover Texts, and with no Back-Cover Texts.
+ </p><p>
+ This is the top level of the libstdc++ documentation set. The
+ documentation is divided into the following three sections.
+ </p><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <a class="link" href="manual/index.html" title="The GNU C++ Library Manual">Manual</a>
+ </p></li><li class="listitem"><p>
+ <a class="link" href="faq.html" title="Frequently Asked Questions">Frequently Asked Questions</a>
+ </p></li><li class="listitem"><p>
+ <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
+ </p></li></ul></div><p>
+ </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
+ Introduction
+
+</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/bk01pt02.html">II.
+ Standard Contents
+ </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/support.html">4.
+ Support
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="manual/support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="manual/support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="manual/support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="manual/termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="manual/termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="manual/termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/diagnostics.html">5.
+ Diagnostics
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
+ Utilities
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13911488">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15528992">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15548928">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
+ Strings
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8.
+ Localization
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idp15752864">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
+ Containers
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10.
+ Iterators
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="manual/iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="manual/iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/algorithms.html">11.
+ Algorithms
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="manual/algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="manual/algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/numerics.html">12.
+ Numerics
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="manual/numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="manual/numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="manual/numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/io.html">13.
+ Input and Output
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="manual/streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="manual/streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="manual/stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="manual/stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="manual/fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="manual/fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="manual/fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="manual/io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="manual/io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/atomics.html">14.
+ Atomics
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/concurrency.html">15.
+ Concurrency
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/extensions.html">III.
+ Extensions
+
+</a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt03pr01.html"></a></span></dt><dt><span class="chapter"><a href="manual/ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="manual/debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ debug-mode components</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="manual/parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="manual/profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.configuring">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.traits">
+ Querying Container Attributes
+ </a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.point_range_iteration">
+ Point and Range Iteration
+ </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples.basic">Intermediate Use</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples.query">Querying with <code class="classname">container_traits</code> </a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples.container">By Container Method</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples.container.hash">Hash-Based</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples.container.branch">Branch-Based</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.examples.container.priority_queue">Priority Queues</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.concepts">Concepts</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.concepts.null_type">Null Policy Classes</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.concepts.associative_semantics">Map and Set Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#concepts.associative_semantics.set_vs_map">
+ Distinguishing Between Maps and Sets
+ </a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#concepts.associative_semantics.multi">Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.concepts.iterator_semantics">Iterator Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#concepts.iterator_semantics.point_and_range">Point and Range Iterators</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#concepts.iterator_semantics.both">Distinguishing Point and Range Iterators</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.concepts.invalidation">Invalidation Guarantees</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.concepts.genericity">Genericity</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#concepts.genericity.tag">Tag</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#concepts.genericity.traits">Traits</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.container">By Container</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.container.hash">hash</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.hash.interface">Interface</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.hash.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.container.tree">tree</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.tree.interface">Interface</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.tree.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.container.trie">Trie</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.trie.interface">Interface</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.trie.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.container.list">List</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.list.interface">Interface</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.list.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_design.html#pbds.design.container.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.priority_queue.interface">Interface</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_design.html#container.priority_queue.details">Details</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#pbds.test.regression">Regression</a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#pbds.test.performance">Performance</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash">Hash-Based</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash.int_find">
+ Integer <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash.int_subscript_find">
+ Integer Subscript <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash.int_subscript_insert">
+ Integer Subscript <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash.zlob_int_find">
+ Integer <code class="function">find</code> with Skewed-Distribution
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.hash.erase_mem">
+ Erase Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.branch">Branch-Based</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.branch.text_insert">
+ Text <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.branch.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.branch.text_lor_find">
+ Text <code class="function">find</code> with Locality-of-Reference
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.branch.split_join">
+ <code class="function">split</code> and <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.branch.order_statistics">
+ Order-Statistics
+ </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap">Multimap</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap.text_find_small">
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap.text_find_large">
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap.text_insert_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap.text_insert_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap.text_insert_mem_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.multimap.text_insert_mem_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_push">
+ Text <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_push_pop">
+ Text <code class="function">push</code> and <code class="function">pop</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.int_push">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.int_push_pop">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_pop">
+ Text <code class="function">pop</code> Memory Use
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_join">
+ Text <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_modify_up">
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+ </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="manual/policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="manual/ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="manual/ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="manual/ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="manual/ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="manual/ext_concurrency.html">30. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch30s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/bk01pt04.html">IV.
+ Appendices
+</a></span></dt><dd><dl><dt><span class="appendix"><a href="manual/appendix_contributing.html">A.
+ Contributing
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="manual/source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="manual/source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="manual/source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="manual/source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="manual/source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="manual/appendix_porting.html">B.
+ Porting and Maintenance
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="manual/test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="manual/test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.exception.safety">
+ Qualifying Exception Safety Guarantees
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="manual/test.html#test.exception.safety.status">
+ Existing tests
+</a></span></dt><dt><span class="section"><a href="manual/test.html#test.exception.safety.containers">
+C++11 Requirements Test Sequence Descriptions
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+ </a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.ostreamform_istreamscan">
+ Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
+ extensions
+</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.stringstreams">No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.wchar">Little or no wide character support</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.iostream_templates">No templatized iostreams</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.thread_safety">Thread safety issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html#backwards.third">Third</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.third.headers">Pre-ISO headers moved to backwards or removed</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.hash">Extension headers hash_map, hash_set moved to ext or backwards</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.nocreate_noreplace">No <code class="code">ios::nocreate/ios::noreplace</code>.
+</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.streamattach">
+No <code class="code">stream::attach(int fd)</code>
+</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.support_cxx98">
+Support for C++98 dialect.
+</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.support_tr1">
+Support for C++TR1 dialect.
+</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.support_cxx11">
+Support for C++11 dialect.
+</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third.iterator_type">
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="appendix"><a href="manual/appendix_free.html">C.
+ Free Software Needs Free Documentation
+
+</a></span></dt><dt><span class="appendix"><a href="manual/appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library Manual</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/abi.html b/libstdc++-v3/doc/html/manual/abi.html
index dc4bf5a75e..611d425ac2 100644
--- a/libstdc++-v3/doc/html/manual/abi.html
+++ b/libstdc++-v3/doc/html/manual/abi.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; ABI&#10; , &#10; version&#10; , &#10; dynamic&#10; , &#10; shared&#10; , &#10; compatibility&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="prev" href="test.html" title="Test"/><link rel="next" href="api.html" title="API Evolution and Deprecation History"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; ABI&#10; , &#10; version&#10; , &#10; dynamic&#10; , &#10; shared&#10; , &#10; compatibility&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
-</th><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr/></div><div class="section" title="ABI Policy and Guidelines"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.abi"/>ABI Policy and Guidelines</h2></div></div></div><p>
-</p><div class="section" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"/>The C++ Interface</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section" title="ABI Policy and Guidelines"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
+</p><div class="section" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
C++ applications often depend on specific language support
routines, say for throwing exceptions, or catching exceptions, and
perhaps also depend on features in the C++ Standard Library.
@@ -21,7 +21,7 @@
virtual functions, etc. These details are defined as the compiler
Application Binary Interface, or ABI. The GNU C++ compiler uses an
industry-standard C++ ABI starting with version 3. Details can be
- found in the <a class="link" href="http://www.codesourcery.com/public/cxx-abi/abi.html">ABI
+ found in the <a class="link" href="http://mentorembedded.github.com/cxx-abi/abi.html" target="_top">ABI
specification</a>.
</p><p>
The GNU C++ compiler, g++, has a compiler command line option to
@@ -30,7 +30,7 @@
g++ command line options may change the ABI as a side-effect of
use. Such flags include <code class="code">-fpack-struct</code> and
<code class="code">-fno-exceptions</code>, but include others: see the complete
- list in the GCC manual under the heading <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
+ list in the GCC manual under the heading <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options" target="_top">Options
for Code Generation Conventions</a>.
</p><p>
The configure options used when building a specific libstdc++
@@ -58,10 +58,10 @@ given compiler ABI. In a nutshell:
To use a specific version of the C++ ABI, one must use a
corresponding GNU C++ toolchain (i.e., g++ and libstdc++) that
implements the C++ ABI in question.
-</p></div><div class="section" title="Versioning"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"/>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
+</p></div><div class="section" title="Versioning"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"></a>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
C++ toolchain. With each release, various details have been changed so
as to give distinct versions to the C++ interface.
-</p><div class="section" title="Goals"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"/>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
+</p><div class="section" title="Goals"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"></a>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
releases of library binaries the ability to add new symbols and add
functionality, all the while retaining compatibility with the previous
releases in the series. Thus, program binaries linked with the initial
@@ -75,7 +75,7 @@ binary in a release series (with additional symbols added), substitute
in the initial release of the library binary, and remain link
compatible.
</p><p>Allows multiple, incompatible ABIs to coexist at the same time.
-</p></div><div class="section" title="History"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"/>History</h4></div></div></div><p>
+</p></div><div class="section" title="History"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"></a>History</h4></div></div></div><p>
How can this complexity be managed? What does C++ versioning mean?
Because library and compiler changes often make binaries compiled
with one version of the GNU tools incompatible with binaries
@@ -84,20 +84,20 @@ compatible.
easier.
</p><p>
The following techniques are used:
-</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
+</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
<code class="constant">DT_SONAME</code> mechanism (at least on ELF
systems). It is versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.4: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.x: libgcc_s.so.1</p></li><li class="listitem"><p>GCC 4.x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.4, GCC 4.x: libgcc_s.so.1
when configuring <code class="code">--with-sjlj-exceptions</code>, or
- libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-1].x: either libgcc_s.so.1
+ libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1
when configuring <code class="code">--with-sjlj-exceptions</code>, or
- libgcc_s.so.2 </p></li><li class="listitem"><p>gcc-4.[2-5].x: either libgcc_s.so.3 when configuring
+ libgcc_s.so.2 </p></li><li class="listitem"><p>GCC 4.[2-7]: either libgcc_s.so.3 when configuring
<code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.4
</p></li></ul></div></li><li class="listitem"><p>Symbol versioning on the libgcc_s.so binary.</p><p>It is versioned with the following labels and version
definitions, where the version definition is the maximum for a
particular release. Labels are cumulative. If a particular release
is not listed, it has the same version labels as the preceding
- release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: GCC_3.0</p></li><li class="listitem"><p>gcc-3.3.0: GCC_3.3</p></li><li class="listitem"><p>gcc-3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>gcc-3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>gcc-3.4.0: GCC_3.4</p></li><li class="listitem"><p>gcc-3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>gcc-3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>gcc-4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>gcc-4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>gcc-4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>gcc-4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>gcc-4.4.0: GCC_4.4.0</p></li></ul></div></li><li class="listitem"><p>
+ release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: GCC_3.0</p></li><li class="listitem"><p>GCC 3.3.0: GCC_3.3</p></li><li class="listitem"><p>GCC 3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>GCC 3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>GCC 3.4.0: GCC_3.4</p></li><li class="listitem"><p>GCC 3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>GCC 3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>GCC 4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>GCC 4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>GCC 4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>GCC 4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>GCC 4.4.0: GCC_4.4.0</p></li><li class="listitem"><p>GCC 4.5.0: GCC_4.5.0</p></li><li class="listitem"><p>GCC 4.6.0: GCC_4.6.0</p></li><li class="listitem"><p>GCC 4.7.0: GCC_4.7.0</p></li></ul></div></li><li class="listitem"><p>
Release versioning on the libstdc++.so binary, implemented in
the same way as the libgcc_s.so binary above. Listed is the
filename: <code class="constant">DT_SONAME</code> can be deduced from
@@ -108,14 +108,17 @@ compatible.
<code class="constant">DT_SONAME</code>s are forward-compatibile: in
the table below, releases incompatible with the previous
one are explicitly noted.
+ If a particular release is not listed, its libstdc++.so binary
+ has the same filename and <code class="constant">DT_SONAME</code> as the
+ preceding release.
</p><p>It is versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>gcc-3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>gcc-3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>gcc-3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>gcc-3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>gcc-3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>gcc-3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>gcc-3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>gcc-3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>gcc-3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>gcc-3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.3.2: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.3.3: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>gcc-3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>gcc-3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.4: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.5: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.6: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>gcc-4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>gcc-4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>gcc-4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>gcc-4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>gcc-4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>gcc-4.1.2: libstdc++.so.6.0.8</p></li><li class="listitem"><p>gcc-4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>gcc-4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.3: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.4: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.1: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.2: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.3: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.4: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>gcc-4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>gcc-4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>gcc-4.5.0: libstdc++.so.6.0.14</p></li></ul></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>GCC 3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>GCC 3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>GCC 3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>GCC 3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>GCC 3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>GCC 3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>GCC 3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>GCC 4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>GCC 4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>GCC 4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>GCC 4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>GCC 4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>GCC 4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>GCC 4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>GCC 4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>GCC 4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>GCC 4.5.0: libstdc++.so.6.0.14</p></li><li class="listitem"><p>GCC 4.6.0: libstdc++.so.6.0.15</p></li><li class="listitem"><p>GCC 4.6.1: libstdc++.so.6.0.16</p></li></ul></div><p>
Note 1: Error should be libstdc++.so.3.0.3.
</p><p>
Note 2: Not strictly required.
</p><p>
Note 3: This release (but not previous or subsequent) has one
- known incompatibility, see <a class="link" href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678">33678</a>
+ known incompatibility, see <a class="link" href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678" target="_top">33678</a>
in the GCC bug database.
</p></li><li class="listitem"><p>Symbol versioning on the libstdc++.so binary.</p><p>mapfile: libstdc++-v3/config/abi/pre/gnu.ver</p><p>It is versioned with the following labels and version
definitions, where the version definition is the maximum for a
@@ -123,13 +126,13 @@ compatible.
will use the maximum version definition. Thus, for release series
with the same label, but incremented version definitions, the later
release has both versions. (An example of this would be the
- gcc-3.2.1 release, which has GLIBCPP_3.2.1 for new symbols and
- GLIBCPP_3.2 for symbols that were introduced in the gcc-3.2.0
+ GCC 3.2.1 release, which has GLIBCPP_3.2.1 for new symbols and
+ GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0
release.) If a particular release is not listed, it has the same
version labels as the preceding release.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>gcc-3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>gcc-3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>gcc-3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>gcc-3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>gcc-4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>gcc-4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>gcc-4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>gcc-4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>gcc-4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>gcc-4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>gcc-4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
__GXX_ABI_VERSION. This macro is defined as the version of the
- compiler v3 ABI, with g++ 3.0.x being version 100. This macro will
+ compiler v3 ABI, with g++ 3.0 being version 100. This macro will
be automatically defined whenever g++ is used (the curious can
test this by invoking g++ with the '-v' flag.)
</p><p>
@@ -139,11 +142,11 @@ compatible.
'-fabi-version' command line option.
</p><p>
It is versioned as follows, where 'n' is given by '-fabi-version=n':
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.x: 100</p></li><li class="listitem"><p>gcc-3.1.x: 100 (Error, should be 101)</p></li><li class="listitem"><p>gcc-3.2.x: 102</p></li><li class="listitem"><p>gcc-3.3.x: 102</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 102 (when n=1)</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 1000 + n (when n&gt;1) </p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 999999 (when n=0)</p></li></ul></div><p/></li><li class="listitem"><p>Changes to the default compiler option for
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0: 100</p></li><li class="listitem"><p>GCC 3.1: 100 (Error, should be 101)</p></li><li class="listitem"><p>GCC 3.2: 102</p></li><li class="listitem"><p>GCC 3.3: 102</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 102 (when n=1)</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 1000 + n (when n&gt;1) </p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 999999 (when n=0)</p></li></ul></div><p></p></li><li class="listitem"><p>Changes to the default compiler option for
<code class="code">-fabi-version</code>.
</p><p>
It is versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.x: (Error, not versioned) </p></li><li class="listitem"><p>gcc-3.1.x: (Error, not versioned) </p></li><li class="listitem"><p>gcc-3.2.x: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>gcc-3.3.x: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p/></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.1: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.2: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.3: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p></p></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
before 3.4.0, the macro is __GLIBCPP__. For later releases, it's
__GLIBCXX__. (The libstdc++ project generously changed from CPP to
CXX throughout its source to allow the "C" pre-processor the CPP
@@ -151,16 +154,16 @@ compatible.
was released, in compressed ISO date format, as an unsigned long.
</p><p>
This macro is defined in the file "c++config" in the
- "libstdc++-v3/include/bits" directory. (Up to gcc-4.1.0, it was
- changed every night by an automated script. Since gcc-4.1.0, it is
+ "libstdc++-v3/include/bits" directory. (Up to GCC 4.1.0, it was
+ changed every night by an automated script. Since GCC 4.1.0, it is
the same value as gcc/DATESTAMP.)
</p><p>
It is versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: 20010615</p></li><li class="listitem"><p>gcc-3.0.1: 20010819</p></li><li class="listitem"><p>gcc-3.0.2: 20011023</p></li><li class="listitem"><p>gcc-3.0.3: 20011220</p></li><li class="listitem"><p>gcc-3.0.4: 20020220</p></li><li class="listitem"><p>gcc-3.1.0: 20020514</p></li><li class="listitem"><p>gcc-3.1.1: 20020725</p></li><li class="listitem"><p>gcc-3.2.0: 20020814</p></li><li class="listitem"><p>gcc-3.2.1: 20021119</p></li><li class="listitem"><p>gcc-3.2.2: 20030205</p></li><li class="listitem"><p>gcc-3.2.3: 20030422</p></li><li class="listitem"><p>gcc-3.3.0: 20030513</p></li><li class="listitem"><p>gcc-3.3.1: 20030804</p></li><li class="listitem"><p>gcc-3.3.2: 20031016</p></li><li class="listitem"><p>gcc-3.3.3: 20040214</p></li><li class="listitem"><p>gcc-3.4.0: 20040419</p></li><li class="listitem"><p>gcc-3.4.1: 20040701</p></li><li class="listitem"><p>gcc-3.4.2: 20040906</p></li><li class="listitem"><p>gcc-3.4.3: 20041105</p></li><li class="listitem"><p>gcc-3.4.4: 20050519</p></li><li class="listitem"><p>gcc-3.4.5: 20051201</p></li><li class="listitem"><p>gcc-3.4.6: 20060306</p></li><li class="listitem"><p>gcc-4.0.0: 20050421</p></li><li class="listitem"><p>gcc-4.0.1: 20050707</p></li><li class="listitem"><p>gcc-4.0.2: 20050921</p></li><li class="listitem"><p>gcc-4.0.3: 20060309</p></li><li class="listitem"><p>gcc-4.1.0: 20060228</p></li><li class="listitem"><p>gcc-4.1.1: 20060524</p></li><li class="listitem"><p>gcc-4.1.2: 20070214</p></li><li class="listitem"><p>gcc-4.2.0: 20070514</p></li><li class="listitem"><p>gcc-4.2.1: 20070719</p></li><li class="listitem"><p>gcc-4.2.2: 20071007</p></li><li class="listitem"><p>gcc-4.2.3: 20080201</p></li><li class="listitem"><p>gcc-4.2.4: 20080519</p></li><li class="listitem"><p>gcc-4.3.0: 20080306</p></li><li class="listitem"><p>gcc-4.3.1: 20080606</p></li><li class="listitem"><p>gcc-4.3.2: 20080827</p></li><li class="listitem"><p>gcc-4.3.3: 20090124</p></li><li class="listitem"><p>gcc-4.4.0: 20090421</p></li><li class="listitem"><p>gcc-4.4.1: 20090722</p></li><li class="listitem"><p>gcc-4.4.2: 20091015</p></li></ul></div><p/></li><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: 20010615</p></li><li class="listitem"><p>GCC 3.0.1: 20010819</p></li><li class="listitem"><p>GCC 3.0.2: 20011023</p></li><li class="listitem"><p>GCC 3.0.3: 20011220</p></li><li class="listitem"><p>GCC 3.0.4: 20020220</p></li><li class="listitem"><p>GCC 3.1.0: 20020514</p></li><li class="listitem"><p>GCC 3.1.1: 20020725</p></li><li class="listitem"><p>GCC 3.2.0: 20020814</p></li><li class="listitem"><p>GCC 3.2.1: 20021119</p></li><li class="listitem"><p>GCC 3.2.2: 20030205</p></li><li class="listitem"><p>GCC 3.2.3: 20030422</p></li><li class="listitem"><p>GCC 3.3.0: 20030513</p></li><li class="listitem"><p>GCC 3.3.1: 20030804</p></li><li class="listitem"><p>GCC 3.3.2: 20031016</p></li><li class="listitem"><p>GCC 3.3.3: 20040214</p></li><li class="listitem"><p>GCC 3.4.0: 20040419</p></li><li class="listitem"><p>GCC 3.4.1: 20040701</p></li><li class="listitem"><p>GCC 3.4.2: 20040906</p></li><li class="listitem"><p>GCC 3.4.3: 20041105</p></li><li class="listitem"><p>GCC 3.4.4: 20050519</p></li><li class="listitem"><p>GCC 3.4.5: 20051201</p></li><li class="listitem"><p>GCC 3.4.6: 20060306</p></li><li class="listitem"><p>GCC 4.0.0: 20050421</p></li><li class="listitem"><p>GCC 4.0.1: 20050707</p></li><li class="listitem"><p>GCC 4.0.2: 20050921</p></li><li class="listitem"><p>GCC 4.0.3: 20060309</p></li><li class="listitem"><p>GCC 4.1.0: 20060228</p></li><li class="listitem"><p>GCC 4.1.1: 20060524</p></li><li class="listitem"><p>GCC 4.1.2: 20070214</p></li><li class="listitem"><p>GCC 4.2.0: 20070514</p></li><li class="listitem"><p>GCC 4.2.1: 20070719</p></li><li class="listitem"><p>GCC 4.2.2: 20071007</p></li><li class="listitem"><p>GCC 4.2.3: 20080201</p></li><li class="listitem"><p>GCC 4.2.4: 20080519</p></li><li class="listitem"><p>GCC 4.3.0: 20080306</p></li><li class="listitem"><p>GCC 4.3.1: 20080606</p></li><li class="listitem"><p>GCC 4.3.2: 20080827</p></li><li class="listitem"><p>GCC 4.3.3: 20090124</p></li><li class="listitem"><p>GCC 4.3.4: 20090804</p></li><li class="listitem"><p>GCC 4.3.5: 20100522</p></li><li class="listitem"><p>GCC 4.3.6: 20110627</p></li><li class="listitem"><p>GCC 4.4.0: 20090421</p></li><li class="listitem"><p>GCC 4.4.1: 20090722</p></li><li class="listitem"><p>GCC 4.4.2: 20091015</p></li><li class="listitem"><p>GCC 4.4.3: 20100121</p></li><li class="listitem"><p>GCC 4.4.4: 20100429</p></li><li class="listitem"><p>GCC 4.4.5: 20101001</p></li><li class="listitem"><p>GCC 4.4.6: 20110416</p></li><li class="listitem"><p>GCC 4.5.0: 20100414</p></li><li class="listitem"><p>GCC 4.5.1: 20100731</p></li><li class="listitem"><p>GCC 4.5.2: 20101216</p></li><li class="listitem"><p>GCC 4.5.3: 20110428</p></li><li class="listitem"><p>GCC 4.6.0: 20110325</p></li><li class="listitem"><p>GCC 4.6.1: 20110627</p></li><li class="listitem"><p>GCC 4.6.2: 20111026</p></li></ul></div><p></p></li><li class="listitem"><p>
Incremental bumping of a library pre-defined macro,
_GLIBCPP_VERSION. This macro is defined as the released version of
the library, as a string literal. This is only implemented in
- gcc-3.1.0 releases and higher, and is deprecated in 3.4 (where it
+ GCC 3.1.0 releases and higher, and is deprecated in 3.4 (where it
is called _GLIBCXX_VERSION).
</p><p>
This macro is defined in the file "c++config" in the
@@ -169,25 +172,26 @@ compatible.
of config.h.
</p><p>
It is versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: "3.0.0"</p></li><li class="listitem"><p>gcc-3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>gcc-3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>gcc-3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>gcc-3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>gcc-3.1.0: "3.1.0"</p></li><li class="listitem"><p>gcc-3.1.1: "3.1.1"</p></li><li class="listitem"><p>gcc-3.2.0: "3.2"</p></li><li class="listitem"><p>gcc-3.2.1: "3.2.1"</p></li><li class="listitem"><p>gcc-3.2.2: "3.2.2"</p></li><li class="listitem"><p>gcc-3.2.3: "3.2.3"</p></li><li class="listitem"><p>gcc-3.3.0: "3.3"</p></li><li class="listitem"><p>gcc-3.3.1: "3.3.1"</p></li><li class="listitem"><p>gcc-3.3.2: "3.3.2"</p></li><li class="listitem"><p>gcc-3.3.3: "3.3.3"</p></li><li class="listitem"><p>gcc-3.4.x: "version-unused"</p></li><li class="listitem"><p>gcc-4.[0-5].x: "version-unused"</p></li></ul></div><p/></li><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: "3.0.0"</p></li><li class="listitem"><p>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>GCC 3.1.0: "3.1.0"</p></li><li class="listitem"><p>GCC 3.1.1: "3.1.1"</p></li><li class="listitem"><p>GCC 3.2.0: "3.2"</p></li><li class="listitem"><p>GCC 3.2.1: "3.2.1"</p></li><li class="listitem"><p>GCC 3.2.2: "3.2.2"</p></li><li class="listitem"><p>GCC 3.2.3: "3.2.3"</p></li><li class="listitem"><p>GCC 3.3.0: "3.3"</p></li><li class="listitem"><p>GCC 3.3.1: "3.3.1"</p></li><li class="listitem"><p>GCC 3.3.2: "3.3.2"</p></li><li class="listitem"><p>GCC 3.3.3: "3.3.3"</p></li><li class="listitem"><p>GCC 3.4: "version-unused"</p></li><li class="listitem"><p>GCC 4.x: "version-unused"</p></li></ul></div><p></p></li><li class="listitem"><p>
Matching each specific C++ compiler release to a specific set of
- C++ include files. This is only implemented in gcc-3.1.1 releases
+ C++ include files. This is only implemented in GCC 3.1.1 releases
and higher.
</p><p>
- All C++ includes are installed in include/c++, then nest in a
+ All C++ includes are installed in
+ <code class="filename">include/c++</code>, then nest in a
directory hierarchy corresponding to the C++ compiler's released
version. This version corresponds to the variable "gcc_version" in
"libstdc++-v3/acinclude.m4," and more details can be found in that
- file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
+ file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before GCC 3.4.0).
</p><p>
C++ includes are versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.1: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.2: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.3: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.4: include/g++-v3</p></li><li class="listitem"><p>gcc-3.1.0: include/g++-v3</p></li><li class="listitem"><p>gcc-3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>gcc-3.2.0: include/c++/3.2</p></li><li class="listitem"><p>gcc-3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>gcc-3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>gcc-3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>gcc-3.3.0: include/c++/3.3</p></li><li class="listitem"><p>gcc-3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>gcc-3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>gcc-3.4.0: include/c++/3.4.0</p></li><li class="listitem"><p>gcc-3.4.1: include/c++/3.4.1</p></li><li class="listitem"><p>gcc-3.4.2: include/c++/3.4.2</p></li><li class="listitem"><p>gcc-3.4.3: include/c++/3.4.3</p></li><li class="listitem"><p>gcc-3.4.4: include/c++/3.4.4</p></li><li class="listitem"><p>gcc-3.4.5: include/c++/3.4.5</p></li><li class="listitem"><p>gcc-3.4.6: include/c++/3.4.6</p></li><li class="listitem"><p>gcc-4.0.0: include/c++/4.0.0</p></li><li class="listitem"><p>gcc-4.0.1: include/c++/4.0.1</p></li><li class="listitem"><p>gcc-4.0.2: include/c++/4.0.2</p></li><li class="listitem"><p>gcc-4.0.3: include/c++/4.0.3</p></li><li class="listitem"><p>gcc-4.1.0: include/c++/4.1.0</p></li><li class="listitem"><p>gcc-4.1.1: include/c++/4.1.1</p></li><li class="listitem"><p>gcc-4.1.2: include/c++/4.1.2</p></li><li class="listitem"><p>gcc-4.2.0: include/c++/4.2.0</p></li><li class="listitem"><p>gcc-4.2.1: include/c++/4.2.1</p></li><li class="listitem"><p>gcc-4.2.2: include/c++/4.2.2</p></li><li class="listitem"><p>gcc-4.2.3: include/c++/4.2.3</p></li><li class="listitem"><p>gcc-4.2.4: include/c++/4.2.4</p></li><li class="listitem"><p>gcc-4.3.0: include/c++/4.3.0</p></li><li class="listitem"><p>gcc-4.3.1: include/c++/4.3.1</p></li><li class="listitem"><p>gcc-4.3.3: include/c++/4.3.3</p></li><li class="listitem"><p>gcc-4.3.4: include/c++/4.3.4</p></li><li class="listitem"><p>gcc-4.4.0: include/c++/4.4.0</p></li><li class="listitem"><p>gcc-4.4.1: include/c++/4.4.1</p></li><li class="listitem"><p>gcc-4.4.2: include/c++/4.4.2</p></li><li class="listitem"><p>gcc-4.5.0: include/c++/4.5.0</p></li></ul></div><p/></li></ol></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.1: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.2: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.3: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.4: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>GCC 3.2.0: include/c++/3.2</p></li><li class="listitem"><p>GCC 3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>GCC 3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>GCC 3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>GCC 3.3.0: include/c++/3.3</p></li><li class="listitem"><p>GCC 3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>GCC 3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>GCC 3.4.x: include/c++/3.4.x</p></li><li class="listitem"><p>GCC 4.x.y: include/c++/4.x.y</p></li></ul></div><p></p></li></ol></div><p>
Taken together, these techniques can accurately specify interface
and implementation changes in the GNU C++ tools themselves. Used
properly, they allow both the GNU C++ tools implementation, and
programs using them, an evolving yet controlled development that
maintains backward compatibility.
-</p></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"/>Prerequisites</h4></div></div></div><p>
+</p></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
Minimum environment that supports a versioned ABI: A supported
dynamic linker, a GNU linker of sufficient vintage to understand
demangled C++ name globbing (ld) or the Sun linker, a shared
@@ -199,10 +203,10 @@ compatible.
attempt to version symbols (or age gracefully, really) until
version 3.1.0.
</p><p>
- Most modern Linux and BSD versions, particularly ones using
- gcc-3.1.x tools and more recent vintages, will meet the
+ Most modern GNU/Linux and BSD versions, particularly ones using
+ GCC 3.1 and later, will meet the
requirements above, as does Solaris 2.5 and up.
- </p></div><div class="section" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"/>Configuring</h4></div></div></div><p>
+ </p></div><div class="section" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
It turns out that most of the configure options that change
default behavior will impact the mangled names of exported
symbols, and thus impact versioning and compatibility.
@@ -220,7 +224,7 @@ compatible.
attempts to make sure that all the requirement for symbol
versioning are in place. For more information, please consult
acinclude.m4.
- </p></div><div class="section" title="Checking Active"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"/>Checking Active</h4></div></div></div><p>
+ </p></div><div class="section" title="Checking Active"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"></a>Checking Active</h4></div></div></div><p>
When the GNU C++ library is being built with symbol versioning
on, you should see the following at configure time for
libstdc++:
@@ -268,16 +272,16 @@ On Solaris 2, you can use <code class="code">pvs -r</code> instead:
libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
</pre><p>
<code class="code">ldd -v</code> works too, but is very verbose.
-</p></div></div><div class="section" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"/>Allowed Changes</h3></div></div></div><p>
+</p></div></div><div class="section" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
The following will cause the library minor version number to
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
-</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Adding an exported global or static data member</p></li><li class="listitem"><p>Adding an exported function, static or non-virtual member function</p></li><li class="listitem"><p>Adding an exported symbol or symbols by additional instantiations</p></li></ol></div><p>
+</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Adding an exported global or static data member</p></li><li class="listitem"><p>Adding an exported function, static or non-virtual member function</p></li><li class="listitem"><p>Adding an exported symbol or symbols by additional instantiations</p></li></ol></div><p>
Other allowed changes are possible.
-</p></div><div class="section" title="Prohibited Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"/>Prohibited Changes</h3></div></div></div><p>
+</p></div><div class="section" title="Prohibited Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"></a>Prohibited Changes</h3></div></div></div><p>
The following non-exhaustive list will cause the library major version
number to increase, say from "libstdc++.so.3.0.4" to
"libstdc++.so.4.0.0".
-</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Changes in the gcc/g++ compiler ABI</p></li><li class="listitem"><p>Changing size of an exported symbol</p></li><li class="listitem"><p>Changing alignment of an exported symbol</p></li><li class="listitem"><p>Changing the layout of an exported symbol</p></li><li class="listitem"><p>Changing mangling on an exported symbol</p></li><li class="listitem"><p>Deleting an exported symbol</p></li><li class="listitem"><p>Changing the inheritance properties of a type by adding or removing
+</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Changes in the gcc/g++ compiler ABI</p></li><li class="listitem"><p>Changing size of an exported symbol</p></li><li class="listitem"><p>Changing alignment of an exported symbol</p></li><li class="listitem"><p>Changing the layout of an exported symbol</p></li><li class="listitem"><p>Changing mangling on an exported symbol</p></li><li class="listitem"><p>Deleting an exported symbol</p></li><li class="listitem"><p>Changing the inheritance properties of a type by adding or removing
base classes</p></li><li class="listitem"><p>
Changing the size, alignment, or layout of types
specified in the C++ standard. These may not necessarily be
@@ -289,10 +293,10 @@ class that would otherwise have implicit versions. This will change
the way the compiler deals with this class in by-value return
statements or parameters: instead of passing instances of this
class in registers, the compiler will be forced to use memory. See the
-section on <a class="link" href="http://www.codesourcery.com/public/cxx-abi/abi.html#calls">Function
+section on <a class="link" href="http://mentorembedded.github.com/cxx-abi/abi.html#calls" target="_top">Function
Calling Conventions and APIs</a>
of the C++ ABI documentation for further details.
-</p></li></ol></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"/>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+</p></li></ol></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Separation of interface and implementation
</p><p>
This is accomplished by two techniques that separate the API from
@@ -340,7 +344,7 @@ exceptional symbols are allowed to be visible.</p></dd><dt><span class="term"><c
<code class="code">CXXABI</code>, select items are allowed to be visible.</p></dd></dl></div><p>
</p></li><li class="listitem"><p>Freezing the API</p><p>Disallowed changes, as above, are not made on a stable release
branch. Enforcement tends to be less strict with GNU extensions that
-standard includes.</p></li></ol></div></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"/>Testing</h3></div></div></div><div class="section" title="Single ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"/>Single ABI Testing</h4></div></div></div><p>
+standard includes.</p></li></ol></div></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"></a>Testing</h3></div></div></div><div class="section" title="Single ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"></a>Single ABI Testing</h4></div></div></div><p>
Testing for GNU C++ ABI changes is composed of two distinct
areas: testing the C++ compiler (g++) for compiler changes, and
testing the C++ library (libstdc++) for library changes.
@@ -406,11 +410,11 @@ and other detailed data is not displayed with this flag.
</p><p>
Perhaps there are other C++ ABI checkers. If so, please notify
us. We'd like to know about them!
-</p></div><div class="section" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"/>Multiple ABI Testing</h4></div></div></div><p>
+</p></div><div class="section" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
A "C" application, dynamically linked to two shared libraries, liba,
libb. The dependent library liba is a C++ shared library compiled with
-gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
-libb is a C++ shared library compiled with gcc-3.4.x, and also uses io,
+GCC 3.3, and uses io, exceptions, locale, etc. The dependent library
+libb is a C++ shared library compiled with GCC 3.4, and also uses io,
exceptions, locale, etc.
</p><p> As above, libone is constructed as follows: </p><pre class="programlisting">
%$bld/H-x86-gcc-3.4.0/bin/g++ -fPIC -DPIC -c a.cc
@@ -469,7 +473,7 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
This resulting binary, when executed, will be able to safely use
code from both liba, and the dependent libstdc++.so.6, and libb,
with the dependent libstdc++.so.5.
-</p></div></div><div class="section" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"/>Outstanding Issues</h3></div></div></div><p>
+</p></div></div><div class="section" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
Some features in the C++ language make versioning especially
difficult. In particular, compiler generated constructs such as
implicit instantiations for templates, typeinfo information, and
@@ -479,44 +483,54 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
</p><p>
For more background on this issue, see these bugzilla entries:
</p><p>
-<a class="link" href="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</a>
+<a class="link" href="http://gcc.gnu.org/PR24660" target="_top">24660: versioning weak symbols in libstdc++</a>
</p><p>
-<a class="link" href="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
-</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"/>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id501388"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
- ABIcheck, a vague idea of checking ABI compatibility
- </em>. </span></p></div><div class="biblioentry"><a id="id501406"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
- C++ ABI Reference
- </em>. </span></p></div><div class="biblioentry"><a id="id501423"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+<a class="link" href="http://gcc.gnu.org/PR19664" target="_top">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
+</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="ABIcheck"><a id="biblio.abicheck"></a><p>[biblio.abicheck] <span class="title"><em>
+ <a class="link" href="http://abicheck.sourceforge.net" target="_top">
+ ABIcheck
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="C++ ABI Summary"><a id="biblio.cxxabi"></a><p>[biblio.cxxabi] <span class="title"><em>
+ <a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
+ C++ ABI Summary
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="Intel Compilers for Linux Compatibility with the GNU Compilers"><a id="idp22905536"></a><p><span class="title"><em>
+ <a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
Intel Compilers for Linux Compatibility with the GNU Compilers
- </em>. </span></p></div><div class="biblioentry"><a id="id501441"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="Linker and Libraries Guide (document 819-0690)"><a id="idp22907392"></a><p><span class="title"><em>
+ <a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
Linker and Libraries Guide (document 819-0690)
- </em>. </span></p></div><div class="biblioentry"><a id="id501458"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="Sun Studio 11: C++ Migration Guide (document 819-3689)"><a id="idp22909232"></a><p><span class="title"><em>
+ <a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
Sun Studio 11: C++ Migration Guide (document 819-3689)
- </em>. </span></p></div><div class="biblioentry"><a id="id501476"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="How to Write Shared Libraries"><a id="idp22911088"></a><p><span class="title"><em>
+ <a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
How to Write Shared Libraries
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="id501507"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry" title="C++ ABI for the ARM Architecture"><a id="idp22914528"></a><p><span class="title"><em>
+ <a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
C++ ABI for the ARM Architecture
- </em>. </span></p></div><div class="biblioentry"><a id="id501524"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="Dynamic Shared Objects: Survey and Issues"><a id="idp22916336"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
Dynamic Shared Objects: Survey and Issues
- </em>. </span><span class="subtitle">
+ </a>
+ </em>. </span><span class="subtitle">
ISO C++ J16/06-0046
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id501554"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry" title="Versioning With Namespaces"><a id="idp22919632"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
Versioning With Namespaces
+ </a>
</em>. </span><span class="subtitle">
ISO C++ J16/06-0083
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id501584"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry" title="Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems"><a id="idp22922912"></a><p><span class="title"><em>
+ <a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
Binary Compatibility of Shared Libraries Implemented in C++
on GNU/Linux Systems
- </em>. </span><span class="subtitle">
+ </a>
+ </em>. </span><span class="subtitle">
SYRCoSE 2009
- . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="test.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td align="left" valign="top">Test </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
+ . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/algorithms.html b/libstdc++-v3/doc/html/manual/algorithms.html
index ba91e4e057..2168b62e9f 100644
--- a/libstdc++-v3/doc/html/manual/algorithms.html
+++ b/libstdc++-v3/doc/html/manual/algorithms.html
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators"/><link rel="next" href="numerics.html" title="Chapter 12.  Numerics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators" /><link rel="next" href="numerics.html" title="Chapter 12.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
Algorithms
-</th></tr><tr><td align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 11.  Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"/>Chapter 11. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 11.  Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
Algorithms
- <a id="id479931" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></div><p>
- The neatest accomplishment of the algorithms sect1 is that all the
+ <a id="idp16155696" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
+ The neatest accomplishment of the algorithms section is that all the
work is done via iterators, not containers directly. This means two
important things:
-</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Anything that behaves like an iterator can be used in one of
these algorithms. Raw pointers make great candidates, thus
built-in arrays are fine containers, as well as your own
@@ -31,18 +31,18 @@
<span class="emphasis"><em>N</em></span> as a size in the examples is to keep things
easy to read but probably won't be valid code. You can use wrappers
such as those described in
- the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers sect1</a> to keep
+ the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers section</a> to keep
real code readable.
</p><p>
The single thing that trips people up the most is the definition
of <span class="emphasis"><em>range</em></span> used with iterators; the famous
"past-the-end" rule that everybody loves to hate. The
- <a class="link" href="iterators.html" title="Chapter 10.  Iterators">iterators sect1</a> of this
+ <a class="link" href="iterators.html" title="Chapter 10.  Iterators">iterators section</a> of this
document has a complete explanation of this simple rule that seems
to cause so much confusion. Once you
get <span class="emphasis"><em>range</em></span> into your head (it's not that hard,
honest!), then the algorithms are a cakewalk.
-</p><div class="section" title="Mutating"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms.mutating"/>Mutating</h2></div></div></div><div class="section" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"/><code class="function">swap</code></h3></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"/>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
+</p><div class="section" title="Mutating"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="section" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
containers, then the call will automatically be replaced by a call to
<code class="code"> x.swap(y); </code> instead.
</p><p>This allows member functions of each container class to take over, and
@@ -52,10 +52,10 @@
fact use constant-time swaps.) This should not be surprising, since
for two containers of the same type to swap contents, only some
internal pointers to storage need to be exchanged.
- </p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 10. 
+ </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 10. 
Iterators
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 12. 
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. 
Numerics
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html
index 2cb3500fda..a807e64301 100644
--- a/libstdc++-v3/doc/html/manual/api.html
+++ b/libstdc++-v3/doc/html/manual/api.html
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="ISO C++, api, evolution, deprecation, history"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="prev" href="abi.html" title="ABI Policy and Guidelines"/><link rel="next" href="backwards.html" title="Backwards Compatibility"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
-</th><td align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr/></div><div class="section" title="API Evolution and Deprecation History"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.api"/>API Evolution and Deprecation History</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section" title="API Evolution and Deprecation History"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.api"></a>API Evolution and Deprecation History</h2></div></div></div><p>
A list of user-visible changes, in chronological order
-</p><div class="section" title="3.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"/><code class="constant">3.0</code></h3></div></div></div><p>
+</p><div class="section" title="3.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"></a><code class="constant">3.0</code></h3></div></div></div><p>
Extensions moved to <code class="filename">include/ext</code>.
</p><p>
Include files from the SGI/HP sources that pre-date the ISO standard
@@ -14,7 +14,7 @@ the <code class="filename">include/backward</code> directory and a deprecated wa
is added that notifies on inclusion (<code class="literal">-Wno-deprecated</code>
deactivates the warning.)
</p><p>Deprecated include <code class="filename">backward/strstream</code> added.</p><p>Removal of include <code class="filename">builtinbuf.h</code>, <code class="filename">indstream.h</code>, <code class="filename">parsestream.h</code>, <code class="filename">PlotFile.h</code>, <code class="filename">SFile.h</code>, <code class="filename">stdiostream.h</code>, and <code class="filename">stream.h</code>.
-</p></div><div class="section" title="3.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"/><code class="constant">3.1</code></h3></div></div></div><p>
+</p></div><div class="section" title="3.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"></a><code class="constant">3.1</code></h3></div></div></div><p>
</p><p>
Extensions from SGI/HP moved from <code class="code">namespace std</code>
to <code class="code">namespace __gnu_cxx</code>. As part of this, the following
@@ -26,15 +26,15 @@ Extensions to <code class="code">basic_filebuf</code> introduced: <code class="c
Extensions to tree data structures added in <code class="filename">ext/rb_tree</code>.
</p><p>
Removal of <code class="filename">ext/tree</code>, moved to <code class="filename">backward/tree.h</code>.
-</p></div><div class="section" title="3.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"/><code class="constant">3.2</code></h3></div></div></div><p>
+</p></div><div class="section" title="3.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"></a><code class="constant">3.2</code></h3></div></div></div><p>
</p><p>Symbol versioning introduced for shared library.</p><p>Removal of include <code class="filename">backward/strstream.h</code>.</p><p>Allocator changes. Change <code class="code">__malloc_alloc</code> to <code class="code">malloc_allocator</code> and <code class="code">__new_alloc</code> to <code class="code">new_allocator</code>. </p><p> For GCC releases from 2.95 through the 3.1 series, defining
<code class="literal">__USE_MALLOC</code> on the gcc command line would change the
default allocation strategy to instead use <code class="code"> malloc</code> and
<code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
<a class="link" href="using_macros.html" title="Macros">this page</a>
for details.
- </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"/><code class="constant">3.3</code></h3></div></div></div><p>
- </p></div><div class="section" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"/><code class="constant">3.4</code></h3></div></div></div><p>
+ </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
+ </p></div><div class="section" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
</p><p>
Large file support.
</p><p> Extensions for generic characters and <code class="code">char_traits</code> added in <code class="filename">ext/pod_char_traits.h</code>.
@@ -75,11 +75,11 @@ _Alloc_traits</code> have been removed.
<span class="type">__alloc</span> to select an underlying allocator that
satisfied memory allocation requests. The selection of this
underlying allocator was not user-configurable.
- </p><div class="table"><a id="id502145"/><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Allocator (3.4)</th><th style="text-align: left">Header (3.4)</th><th style="text-align: left">Allocator (3.[0-3])</th><th style="text-align: left">Header (3.[0-3])</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/new_allocator.h</code></td><td style="text-align: left"><code class="classname">std::__new_alloc</code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/malloc_allocator.h</code></td><td style="text-align: left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/debug_allocator.h</code></td><td style="text-align: left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/pool_allocator.h</code></td><td style="text-align: left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/mt_allocator.h</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/bitmap_allocator.h</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr></tbody></table></div></div><br class="table-break"/><p> Releases after gcc-3.4 have continued to add to the collection
+ </p><div class="table"><a id="idp22990128"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
of available allocators. All of these new allocators are
standard-style. The following table includes details, along with
the first released version of GCC that included the extension allocator.
- </p><div class="table"><a id="id502375"/><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/></colgroup><thead><tr><th style="text-align: left">Allocator</th><th style="text-align: left">Include</th><th style="text-align: left">Version</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/array_allocator.h</code></td><td style="text-align: left">4.0.0</td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td style="text-align: left"><code class="filename">ext/throw_allocator.h</code></td><td style="text-align: left">4.2.0</td></tr></tbody></table></div></div><br class="table-break"/><p>
+ </p><div class="table"><a id="idp23017760"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
Debug mode first appears.
</p><p>
Precompiled header support <acronym class="acronym">PCH</acronym> support.
@@ -89,7 +89,7 @@ Macro guard for changed, from <code class="literal">_GLIBCPP_</code> to <code cl
Extension <code class="filename">ext/stdio_sync_filebuf.h</code> added.
</p><p>
Extension <code class="filename">ext/demangle.h</code> added.
-</p></div><div class="section" title="4.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"/><code class="constant">4.0</code></h3></div></div></div><p>
+</p></div><div class="section" title="4.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"></a><code class="constant">4.0</code></h3></div></div></div><p>
</p><p>
TR1 features first appear.
</p><p>
@@ -98,14 +98,14 @@ Extension allocator <code class="filename">ext/array_allocator.h</code> added.
Extension <code class="code">codecvt</code> specializations moved to <code class="filename">ext/codecvt_specializations.h</code>.
</p><p>
Removal of <code class="filename">ext/demangle.h</code>.
-</p></div><div class="section" title="4.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"/><code class="constant">4.1</code></h3></div></div></div><p>
+</p></div><div class="section" title="4.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"></a><code class="constant">4.1</code></h3></div></div></div><p>
</p><p>
Removal of <code class="filename">cassert</code> from all standard headers: now has to be explicitly included for <code class="code">std::assert</code> calls.
</p><p> Extensions for policy-based data structures first added. New includes,
types, namespace <code class="code">pb_assoc</code>.
</p><p> Extensions for typelists added in <code class="filename">ext/typelist.h</code>.
</p><p> Extension for policy-based <code class="code">basic_string</code> first added: <code class="code">__gnu_cxx::__versa_string</code> in <code class="filename">ext/vstring.h</code>.
-</p></div><div class="section" title="4.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"/><code class="constant">4.2</code></h3></div></div></div><p>
+</p></div><div class="section" title="4.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"></a><code class="constant">4.2</code></h3></div></div></div><p>
</p><p> Default visibility attributes applied to <code class="code">namespace std</code>. Support for <code class="code">-fvisibility</code>.
</p><p>TR1 <code class="filename">random</code>, <code class="filename">complex</code>, and C compatibility headers added.</p><p> Extensions for concurrent programming consolidated
into <code class="filename">ext/concurrence.h</code> and <code class="filename">ext/atomicity.h</code>,
@@ -120,13 +120,13 @@ types, namespace moved to <code class="code">__pb_ds</code>.
std::__debug</code> and extensions in <code class="code">namespace
__gnu_cxx::__debug</code>.</p><p> Extensions added: <code class="filename">ext/typelist.h</code>
and <code class="filename">ext/throw_allocator.h</code>.
-</p></div><div class="section" title="4.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"/><code class="constant">4.3</code></h3></div></div></div><p>
+</p></div><div class="section" title="4.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"></a><code class="constant">4.3</code></h3></div></div></div><p>
</p><p>
C++0X features first appear.
</p><p>TR1 <code class="filename">regex</code> and <code class="filename">cmath</code>'s mathematical special function added.
</p><p>
Backward include edit.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>Removed</p><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Removed</p><p>
<code class="filename">algobase.h</code> <code class="filename">algo.h</code> <code class="filename">alloc.h</code> <code class="filename">bvector.h</code> <code class="filename">complex.h</code>
<code class="filename">defalloc.h</code> <code class="filename">deque.h</code> <code class="filename">fstream.h</code> <code class="filename">function.h</code> <code class="filename">hash_map.h</code> <code class="filename">hash_set.h</code>
<code class="filename">hashtable.h</code> <code class="filename">heap.h</code> <code class="filename">iomanip.h</code> <code class="filename">iostream.h</code> <code class="filename">istream.h</code> <code class="filename">iterator.h</code>
@@ -134,11 +134,11 @@ Backward include edit.
<code class="filename">tree.h</code> <code class="filename">vector.h</code>
</p></li><li class="listitem"><p>Added</p><p>
<code class="filename">hash_map</code> and <code class="filename">hash_set</code>
- </p></li><li class="listitem"><p>Added in C++0x</p><p>
+ </p></li><li class="listitem"><p>Added in C++11</p><p>
<code class="filename">auto_ptr.h</code> and <code class="filename">binders.h</code>
</p></li></ul></div><p>
Header dependency streamlining.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
Debug mode for <code class="filename">unordered_map</code> and <code class="filename">unordered_set</code>.
</p><p>
Parallel mode first appears.
@@ -152,10 +152,10 @@ Parallel mode first appears.
PCH binary files no longer installed. Instead, the source files are installed.
</p><p>
Namespace pb_ds moved to __gnu_pb_ds.
-</p></div><div class="section" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"/><code class="constant">4.4</code></h3></div></div></div><p>
+</p></div><div class="section" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
</p><p>
C++0X features.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Added.
</p><p>
<code class="filename">atomic</code>,
@@ -207,10 +207,10 @@ and <code class="filename">ext/extptr_allocator.h</code>. Support
for non-standard pointer types has been added
to <code class="classname">vector</code>
and <code class="classname">forward_list</code>.
-</p></div><div class="section" title="4.5"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"/><code class="constant">4.5</code></h3></div></div></div><p>
+</p></div><div class="section" title="4.5"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"></a><code class="constant">4.5</code></h3></div></div></div><p>
</p><p>
C++0X features.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Added.
</p><p>
<code class="filename">functional</code>,
@@ -237,4 +237,4 @@ The default behavior for comparing typeinfo names changed, so
in <code class="filename">typeinfo</code>, <code class="literal">__GXX_MERGED_TYPEINFO_NAMES</code>
now defaults to zero.
</p><p> Extensions modified: <code class="filename">ext/throw_allocator.h</code>.
-</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td align="left" valign="top">ABI Policy and Guidelines </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_contributing.html b/libstdc++-v3/doc/html/manual/appendix_contributing.html
index bbaadbdc74..3789d3a0d1 100644
--- a/libstdc++-v3/doc/html/manual/appendix_contributing.html
+++ b/libstdc++-v3/doc/html/manual/appendix_contributing.html
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices"/><link rel="prev" href="bk01pt04.html" title="Part IV.  Appendices"/><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
Contributing
-</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
-</th><td align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix A.  Contributing"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"/>
+</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix A.  Contributing"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
Contributing
- <a id="id492936" class="indexterm"/>
+ <a id="idp21837344" class="indexterm"></a>
</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
The GNU C++ Library follows an open development model. Active
contributors are assigned maintainer-ship responsibility, and given
write access to the source repository. First time contributors
should follow this procedure:
-</p><div class="section" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title"><a id="contrib.list"/>Contributor Checklist</h2></div></div></div><div class="section" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"/>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="section" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="section" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Get and read the relevant sections of the C++ language
specification. Copies of the full ISO 14882 standard are
available on line via the ISO mirror site for committee
@@ -22,34 +22,33 @@
two meeting commitment for voting rights, may get a copy of
the standard from their respective national standards
organization. In the USA, this national standards
- organization is ANSI and their web-site is right
- <a class="link" href="http://www.ansi.org">here.</a>
- (And if you've already registered with them, clicking this link will take you to directly to the place where you can
- <a class="link" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</a>.)
+ organization is
+ <a class="link" href="http://www.ansi.org" target="_top">ANSI</a>.
+ (And if you've already registered with them you can
+ <a class="link" href="http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2003" target="_top">buy the standard on-line</a>.)
</p></li><li class="listitem"><p>
The library working group bugs, and known defects, can
be obtained here:
- <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21 </a>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">http://www.open-std.org/jtc1/sc22/wg21</a>
</p></li><li class="listitem"><p>
The newsgroup dedicated to standardization issues is
- comp.std.c++: this FAQ for this group is quite useful and
- can be
- found <a class="link" href="http://www.comeaucomputing.com/csc/faq.html">
- here </a>.
+ comp.std.c++: the
+ <a class="link" href="http://www.comeaucomputing.com/csc/faq.html" target="_top">FAQ</a>
+ for this group is quite useful.
</p></li><li class="listitem"><p>
Peruse
- the <a class="link" href="http://www.gnu.org/prep/standards">GNU
+ the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
Coding Standards</a>, and chuckle when you hit the part
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>â€</span>.
</p></li><li class="listitem"><p>
Be familiar with the extensions that preceded these
general GNU rules. These style issues for libstdc++ can be
- found <a class="link" href="source_code_style.html" title="Coding Style">here</a>.
+ found in <a class="link" href="source_code_style.html" title="Coding Style">Coding Style</a>.
</p></li><li class="listitem"><p>
And last but certainly not least, read the
- library-specific information
- found <a class="link" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"> here</a>.
- </p></li></ul></div></div><div class="section" title="Assignment"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"/>Assignment</h3></div></div></div><p>
+ library-specific information found in
+ <a class="link" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance">Porting and Maintenance</a>.
+ </p></li></ul></div></div><div class="section" title="Assignment"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"></a>Assignment</h3></div></div></div><p>
Small changes can be accepted without a copyright assignment form on
file. New code and additions to the library need completed copyright
assignment form on file at the FSF. Note: your employer may be required
@@ -67,7 +66,7 @@
this question would be appreciated.
</p><p>
For more information about getting a copyright assignment, please see
- <a class="link" href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html">Legal
+ <a class="link" href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html" target="_top">Legal
Matters</a>.
</p><p>
Please contact Benjamin Kosnik at
@@ -76,14 +75,14 @@
requesting an assignment form from
<code class="email">&lt;<a class="email" href="mailto:mailto:assign@gnu.org">mailto:assign@gnu.org</a>&gt;</code>, please cc the libstdc++
maintainer above so that progress can be monitored.
- </p></div><div class="section" title="Getting Sources"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"/>Getting Sources</h3></div></div></div><p>
- <a class="link" href="http://gcc.gnu.org/svnwrite.html">Getting write access
+ </p></div><div class="section" title="Getting Sources"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
+ <a class="link" href="http://gcc.gnu.org/svnwrite.html" target="_top">Getting write access
(look for "Write after approval")</a>
- </p></div><div class="section" title="Submitting Patches"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"/>Submitting Patches</h3></div></div></div><p>
+ </p></div><div class="section" title="Submitting Patches"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"></a>Submitting Patches</h3></div></div></div><p>
Every patch must have several pieces of information before it can be
properly evaluated. Ideally (and to ensure the fastest possible
response from the maintainers) it would have all of these pieces:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
A description of the bug and how your patch fixes this
bug. For new features a description of the feature and your
implementation.
@@ -104,7 +103,7 @@
else, use <span class="command"><strong>diff -cp OLD NEW</strong></span> ... If your
version of diff does not support these options, then get the
latest version of GNU
- diff. The <a class="link" href="http://gcc.gnu.org/wiki/SvnTricks">SVN
+ diff. The <a class="link" href="http://gcc.gnu.org/wiki/SvnTricks" target="_top">SVN
Tricks</a> wiki page has information on customising the
output of <code class="code">svn diff</code>.
</p></li><li class="listitem"><p>
@@ -112,6 +111,6 @@
mail message and send it to libstdc++@gcc.gnu.org. All
patches and related discussion should be sent to the
libstdc++ mailing list.
- </p></li></ul></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td align="left" valign="top">Part IV. 
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. 
Appendices
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_free.html b/libstdc++-v3/doc/html/manual/appendix_free.html
index 84f44035d3..c42b8d12af 100644
--- a/libstdc++-v3/doc/html/manual/appendix_free.html
+++ b/libstdc++-v3/doc/html/manual/appendix_free.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices"/><link rel="prev" href="backwards.html" title="Backwards Compatibility"/><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
Free Software Needs Free Documentation
-</th></tr><tr><td align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
-</th><td align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix C.  Free Software Needs Free Documentation"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"/>
+</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix C.  Free Software Needs Free Documentation"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
Free Software Needs Free Documentation
- <a id="id505314" class="indexterm"/>
+ <a id="idp23386832" class="indexterm"></a>
</h1></div></div></div><p>
The biggest deficiency in free operating systems is not in the
software--it is the lack of good free manuals that we can include in
@@ -41,7 +41,7 @@ can ill afford to lose manuals this way.
Free documentation, like free software, is a matter of freedom,
not price. The problem with these manuals was not that O'Reilly
Associates charged a price for printed copies--that in itself is fine.
-(The Free Software Foundation <a class="link" href="http://www.gnu.org/doc/doc.html">sells printed copies</a> of
+(The Free Software Foundation <a class="link" href="http://www.gnu.org/doc/doc.html" target="_top">sells printed copies</a> of
free GNU manuals, too.) But GNU manuals are available in source code
form, while these manuals are available only on paper. GNU manuals
come with permission to copy and modify; the Perl manuals do not.
@@ -117,10 +117,10 @@ manuals instead of proprietary ones. One way you can help this is to
check the distribution terms of a manual before you buy it, and
prefer copylefted manuals to non-copylefted ones.
</p><p>
-[Note: We now maintain a <a class="link" href="http://www.fsf.org/licensing/doc/other-free-books.html">web page
+[Note: We now maintain a <a class="link" href="http://www.fsf.org/licensing/doc/other-free-books.html" target="_top">web page
that lists free books available from other publishers</a>].
</p><p>Copyright © 2004, 2005, 2006, 2007 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</p><p>Verbatim copying and distribution of this entire article are
permitted worldwide, without royalty, in any medium, provided this
-notice is preserved.</p><p>Report any problems or suggestions to <code class="email">&lt;<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>&gt;</code>.</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr><tr><td align="left" valign="top">Backwards Compatibility </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix D. 
+notice is preserved.</p><p>Report any problems or suggestions to <code class="email">&lt;<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>&gt;</code>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_gfdl.html b/libstdc++-v3/doc/html/manual/appendix_gfdl.html
index 9a46f18d11..89632971f4 100644
--- a/libstdc++-v3/doc/html/manual/appendix_gfdl.html
+++ b/libstdc++-v3/doc/html/manual/appendix_gfdl.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices"/><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3"/><link rel="next" href="../bk02.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
-</th><td align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"/>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"></a>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
Copyright © 2000, 2001, 2002, 2007, 2008
- <a class="link" href="http://www.fsf.org/">Free Software Foundation, Inc.</a>
+ <a class="link" href="http://www.fsf.org/" target="_top">Free Software Foundation, Inc.</a>
</p><p>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
- </p><h3><a id="fdl-1-section0"/>
+ </p><h3><a id="fdl-1-section0"></a>
0. PREAMBLE
</h3><p>
The purpose of this License is to make a manual, textbook, or other
@@ -31,7 +31,7 @@
for any textual work, regardless of subject matter or whether it is
published as a printed book. We recommend this License principally for
works whose purpose is instruction or reference.
- </p><h3><a id="fdl-1-section1"/>
+ </p><h3><a id="fdl-1-section1"></a>
1. APPLICABILITY AND DEFINITIONS
</h3><p>
This License applies to any manual or other work, in any medium, that
@@ -120,7 +120,7 @@
but only as regards disclaiming warranties: any other implication that
these Warranty Disclaimers may have is void and has no effect on the
meaning of this License.
- </p><h3><a id="fdl-1-section2"/>
+ </p><h3><a id="fdl-1-section2"></a>
2. VERBATIM COPYING
</h3><p>
You may copy and distribute the Document in any medium, either
@@ -135,7 +135,7 @@
</p><p>
You may also lend copies, under the same conditions stated above, and you
may publicly display copies.
- </p><h3><a id="fdl-1-section3"/>
+ </p><h3><a id="fdl-1-section3"></a>
3. COPYING IN QUANTITY
</h3><p>
If you publish printed copies (or copies in media that commonly have
@@ -169,7 +169,7 @@
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
- </p><h3><a id="fdl-1-section4"/>
+ </p><h3><a id="fdl-1-section4"></a>
4. MODIFICATIONS
</h3><p>
You may copy and distribute a Modified Version of the Document under the
@@ -178,7 +178,7 @@
filling the role of the Document, thus licensing distribution and
modification of the Modified Version to whoever possesses a copy of it. In
addition, you must do these things in the Modified Version:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem">
+ </p><div class="orderedlist"><ol class="orderedlist" type="A"><li class="listitem">
Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions (which
should, if there were any, be listed in the History section of the
@@ -269,7 +269,7 @@
The author(s) and publisher(s) of the Document do not by this License give
permission to use their names for publicity for or to assert or imply
endorsement of any Modified Version.
- </p><h3><a id="fdl-1-section5"/>
+ </p><h3><a id="fdl-1-section5"></a>
5. COMBINING DOCUMENTS
</h3><p>
You may combine the Document with other documents released under this
@@ -294,7 +294,7 @@
Entitled “Acknowledgementsâ€, and any sections Entitled
“Dedicationsâ€. You must delete all sections Entitled
“Endorsementsâ€.
- </p><h3><a id="fdl-1-section6"/>
+ </p><h3><a id="fdl-1-section6"></a>
6. COLLECTIONS OF DOCUMENTS
</h3><p>
You may make a collection consisting of the Document and other documents
@@ -307,7 +307,7 @@
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all other
respects regarding verbatim copying of that document.
- </p><h3><a id="fdl-1-section7"/>
+ </p><h3><a id="fdl-1-section7"></a>
7. AGGREGATION WITH INDEPENDENT WORKS
</h3><p>
A compilation of the Document or its derivatives with other separate and
@@ -325,7 +325,7 @@
bracket the Document within the aggregate, or the electronic equivalent of
covers if the Document is in electronic form. Otherwise they must appear
on printed covers that bracket the whole aggregate.
- </p><h3><a id="fdl-1-section8"/>
+ </p><h3><a id="fdl-1-section8"></a>
8. TRANSLATION
</h3><p>
Translation is considered a kind of modification, so you may distribute
@@ -344,7 +344,7 @@
“Dedicationsâ€, or “Historyâ€, the requirement
(section 4) to Preserve its Title (section 1) will typically require
changing the actual title.
- </p><h3><a id="fdl-1-section9"/>
+ </p><h3><a id="fdl-1-section9"></a>
9. TERMINATION
</h3><p>
You may not copy, modify, sublicense, or distribute the Document except as
@@ -370,14 +370,14 @@
License. If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does not
give you any rights to use it.
- </p><h3><a id="fdl-1-section10"/>
+ </p><h3><a id="fdl-1-section10"></a>
10. FUTURE REVISIONS OF THIS LICENSE
</h3><p>
The Free Software Foundation may publish new, revised versions of the GNU
Free Documentation License from time to time. Such new versions will be
similar in spirit to the present version, but may differ in detail to
address new problems or concerns. See
- <a class="link" href="http://www.gnu.org/copyleft/">Copyleft</a>.
+ <a class="link" href="http://www.gnu.org/copyleft/" target="_top">Copyleft</a>.
</p><p>
Each version of the License is given a distinguishing version number. If
the Document specifies that a particular numbered version of this License
@@ -390,7 +390,7 @@
can decide which future versions of this License can be used, that
proxy’s public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- </p><h3><a id="fdl-1-section11"/>
+ </p><h3><a id="fdl-1-section11"></a>
11. RELICENSING
</h3><p>
“Massive Multiauthor Collaboration Site†(or “MMC
@@ -419,7 +419,7 @@
The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the MMC is eligible for relicensing.
- </p><h3><a id="fdl-1-addendum"/>
+ </p><h3><a id="fdl-1-addendum"></a>
ADDENDUM: How to use this License for your documents
</h3><p>
To use this License in a document you have written, include a copy of the
@@ -444,6 +444,6 @@ being LIST, and with the Back-Cover Texts being LIST.</pre><p>
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit their
use in free software.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix D. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
-  </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_gpl.html b/libstdc++-v3/doc/html/manual/appendix_gpl.html
index 58d1308dcf..a49b39cbee 100644
--- a/libstdc++-v3/doc/html/manual/appendix_gpl.html
+++ b/libstdc++-v3/doc/html/manual/appendix_gpl.html
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices"/><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation"/><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
- </th></tr><tr><td align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
-</th><td align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix D.  GNU General Public License version 3"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"/>
+</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix D.  GNU General Public License version 3"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"></a>
<acronym class="acronym">GNU</acronym> General Public License version 3
</h1></div></div></div><p>
Version 3, 29 June 2007
</p><p>
Copyright © 2007 Free Software Foundation, Inc.
- <a class="link" href="http://www.fsf.org/">http://www.fsf.org/</a>
+ <a class="link" href="http://www.fsf.org/" target="_top">http://www.fsf.org/</a>
</p><p>
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
- </p><h2><a id="gpl-3-preamble"/>
+ </p><h2><a id="gpl-3-preamble"></a>
Preamble
</h2><p>
The <acronym class="acronym">GNU</acronym> General Public License is a free, copyleft
@@ -78,9 +78,9 @@
</p><p>
The precise terms and conditions for copying, distribution and modification
follow.
- </p><h2><a id="id505653"/>
+ </p><h2><a id="idp23427568"></a>
TERMS AND CONDITIONS
- </h2><h2><a id="gpl-3-definitions"/>
+ </h2><h2><a id="gpl-3-definitions"></a>
0. Definitions.
</h2><p>
“This License†refers to version 3 of the <acronym class="acronym">GNU</acronym>
@@ -122,7 +122,7 @@
License, and how to view a copy of this License. If the interface presents
a list of user commands or options, such as a menu, a prominent item in the
list meets this criterion.
- </p><h2><a id="SourceCode"/>
+ </p><h2><a id="SourceCode"></a>
1. Source Code.
</h2><p>
The “source code†for a work means the preferred form of the
@@ -162,7 +162,7 @@
automatically from other parts of the Corresponding Source.
</p><p>
The Corresponding Source for a work in source code form is that same work.
- </p><h2><a id="BasicPermissions"/>
+ </p><h2><a id="BasicPermissions"></a>
2. Basic Permissions.
</h2><p>
All rights granted under this License are granted for the term of copyright
@@ -187,7 +187,7 @@
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes it
unnecessary.
- </p><h2><a id="Protecting"/>
+ </p><h2><a id="Protecting"></a>
3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
</h2><p>
No covered work shall be deemed part of an effective technological measure
@@ -202,7 +202,7 @@
the work as a means of enforcing, against the work’s users, your or
third parties’ legal rights to forbid circumvention of technological
measures.
- </p><h2><a id="ConveyingVerbatim"/>
+ </p><h2><a id="ConveyingVerbatim"></a>
4. Conveying Verbatim Copies.
</h2><p>
You may convey verbatim copies of the Program’s source code as you
@@ -215,13 +215,13 @@
</p><p>
You may charge any price or no price for each copy that you convey, and you
may offer support or warranty protection for a fee.
- </p><h2><a id="ConveyingModified"/>
+ </p><h2><a id="ConveyingModified"></a>
5. Conveying Modified Source Versions.
</h2><p>
You may convey a work based on the Program, or the modifications to produce
it from the Program, in the form of source code under the terms of section
4, provided that you also meet all of these conditions:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
The work must carry prominent notices stating that you modified it, and
giving a relevant date.
</p></li><li class="listitem"><p>
@@ -251,13 +251,13 @@
or legal rights of the compilation’s users beyond what the individual works
permit. Inclusion of a covered work in an aggregate does not cause
this License to apply to the other parts of the aggregate.
- </p><h2><a id="ConveyingNonSource"/>
+ </p><h2><a id="ConveyingNonSource"></a>
6. Conveying Non-Source Forms.
</h2><p>
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these ways:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
Convey the object code in, or embodied in, a physical product (including
a physical distribution medium), accompanied by the Corresponding Source
fixed on a durable physical medium customarily used for software
@@ -346,7 +346,7 @@
(and with an implementation available to the public in source code form),
and must require no special password or key for unpacking, reading or
copying.
- </p><h2><a id="AdditionalTerms"/>
+ </p><h2><a id="AdditionalTerms"></a>
7. Additional Terms.
</h2><p>
“Additional permissions†are terms that supplement the terms of
@@ -368,7 +368,7 @@
Notwithstanding any other provision of this License, for material you add
to a covered work, you may (if authorized by the copyright holders of that
material) supplement the terms of this License with terms:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
Disclaiming warranty or limiting liability differently from the terms
of sections 15 and 16 of this License; or
</p></li><li class="listitem"><p>
@@ -410,7 +410,7 @@
Additional terms, permissive or non-permissive, may be stated in the form
of a separately written license, or stated as exceptions; the above
requirements apply either way.
- </p><h2><a id="gpl-3-termination"/>
+ </p><h2><a id="gpl-3-termination"></a>
8. Termination.
</h2><p>
You may not propagate or modify a covered work except as expressly provided
@@ -436,7 +436,7 @@
License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
- </p><h2><a id="AcceptanceNotRequired"/>
+ </p><h2><a id="AcceptanceNotRequired"></a>
9. Acceptance Not Required for Having Copies.
</h2><p>
You are not required to accept this License in order to receive or run a
@@ -447,7 +447,7 @@
These actions infringe copyright if you do not accept this License.
Therefore, by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- </p><h2><a id="AutomaticDownstream"/>
+ </p><h2><a id="AutomaticDownstream"></a>
10. Automatic Licensing of Downstream Recipients.
</h2><p>
Each time you convey a covered work, the recipient automatically receives a
@@ -472,7 +472,7 @@
or counterclaim in a lawsuit) alleging that any patent claim is infringed
by making, using, selling, offering for sale, or importing the Program or
any portion of it.
- </p><h2><a id="Patents"/>
+ </p><h2><a id="Patents"></a>
11. Patents.
</h2><p>
A “contributor†is a copyright holder who authorizes use under
@@ -539,7 +539,7 @@
Nothing in this License shall be construed as excluding or limiting any
implied license or other defenses to infringement that may otherwise be
available to you under applicable patent law.
- </p><h2><a id="NoSurrender"/>
+ </p><h2><a id="NoSurrender"></a>
12. No Surrender of Others’ Freedom.
</h2><p>
If conditions are imposed on you (whether by court order, agreement or
@@ -551,7 +551,7 @@
to collect a royalty for further conveying from those to whom you convey the
Program, the only way you could satisfy both those terms and this License
would be to refrain entirely from conveying the Program.
- </p><h2><a id="UsedWithAGPL"/>
+ </p><h2><a id="UsedWithAGPL"></a>
13. Use with the <acronym class="acronym">GNU</acronym> Affero General Public License.
</h2><p>
Notwithstanding any other provision of this License, you have permission to
@@ -562,7 +562,7 @@
requirements of the <acronym class="acronym">GNU</acronym> Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
- </p><h2><a id="RevisedVersions"/>
+ </p><h2><a id="RevisedVersions"></a>
14. Revised Versions of this License.
</h2><p>
The Free Software Foundation may publish revised and/or new versions of the
@@ -587,7 +587,7 @@
Later license versions may give you additional or different permissions.
However, no additional obligations are imposed on any author or copyright
holder as a result of your choosing to follow a later version.
- </p><h2><a id="WarrantyDisclaimer"/>
+ </p><h2><a id="WarrantyDisclaimer"></a>
15. Disclaimer of Warranty.
</h2><p>
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
@@ -598,7 +598,7 @@
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- </p><h2><a id="LiabilityLimitation"/>
+ </p><h2><a id="LiabilityLimitation"></a>
16. Limitation of Liability.
</h2><p>
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
@@ -610,7 +610,7 @@
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
- </p><h2><a id="InterpretationSecs1516"/>
+ </p><h2><a id="InterpretationSecs1516"></a>
17. Interpretation of Sections 15 and 16.
</h2><p>
If the disclaimer of warranty and limitation of liability provided above
@@ -619,9 +619,9 @@
waiver of all civil liability in connection with the Program, unless a
warranty or assumption of liability accompanies a copy of the Program in
return for a fee.
- </p><h2><a id="id506476"/>
+ </p><h2><a id="idp23526496"></a>
END OF TERMS AND CONDITIONS
- </h2><h2><a id="HowToApply"/>
+ </h2><h2><a id="HowToApply"></a>
How to Apply These Terms to Your New Programs
</h2><p>
If you develop a new program, and you want it to be of the greatest possible
@@ -648,7 +648,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
<acronym class="acronym">GNU</acronym> General Public License for more details.
You should have received a copy of the <acronym class="acronym">GNU</acronym> General Public License
-along with this program. If not, see <a class="link" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
+along with this program. If not, see <a class="link" href="http://www.gnu.org/licenses/" target="_top">http://www.gnu.org/licenses/</a>.
</pre><p>
Also add information on how to contact you by electronic and paper mail.
</p><p>
@@ -669,15 +669,15 @@ under certain conditions; type ‘<code class="literal">show c</code>’ for det
if any, to sign a “copyright disclaimer†for the program, if
necessary. For more information on this, and how to apply and follow the
<acronym class="acronym">GNU</acronym> <acronym class="acronym">GPL</acronym>, see
- <a class="link" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
+ <a class="link" href="http://www.gnu.org/licenses/" target="_top">http://www.gnu.org/licenses/</a>.
</p><p>
The <acronym class="acronym">GNU</acronym> General Public License does not permit
incorporating your program into proprietary programs. If your program is a
subroutine library, you may consider it more useful to permit linking
proprietary applications with the library. If this is what you want to do,
use the <acronym class="acronym">GNU</acronym> Lesser General Public License instead of this
- License. But first, please read <a class="link" href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix C. 
+ License. But first, please read <a class="link" href="http://www.gnu.org/philosophy/why-not-lgpl.html" target="_top">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C. 
Free Software Needs Free Documentation
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_porting.html b/libstdc++-v3/doc/html/manual/appendix_porting.html
index 8cb4398ffa..c7268ac31e 100644
--- a/libstdc++-v3/doc/html/manual/appendix_porting.html
+++ b/libstdc++-v3/doc/html/manual/appendix_porting.html
@@ -1,15 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices"/><link rel="prev" href="source_design_notes.html" title="Design Notes"/><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
Porting and Maintenance
-</th></tr><tr><td align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">Part IV. 
Appendices
-</th><td align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix B.  Porting and Maintenance"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"/>
+</th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix B.  Porting and Maintenance"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
Porting and Maintenance
- <a id="id494054" class="indexterm"/>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></div><div class="section" title="Configure and Build Hacking"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.build_hacking"/>Configure and Build Hacking</h2></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"/>Prerequisites</h3></div></div></div><p>
- As noted <a class="link" href="http://gcc.gnu.org/install/prerequisites.html">previously</a>,
+ <a id="idp21971520" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
+ Qualifying Exception Safety Guarantees
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
+ Existing tests
+</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers">
+C++11 Requirements Test Sequence Descriptions
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+ </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan">
+ Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
+ extensions
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringstreams">No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.wchar">Little or no wide character support</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iostream_templates">No templatized iostreams</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.thread_safety">Thread safety issues</a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.third">Third</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.third.headers">Pre-ISO headers moved to backwards or removed</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.hash">Extension headers hash_map, hash_set moved to ext or backwards</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.nocreate_noreplace">No <code class="code">ios::nocreate/ios::noreplace</code>.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.streamattach">
+No <code class="code">stream::attach(int fd)</code>
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_cxx98">
+Support for C++98 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_tr1">
+Support for C++TR1 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_cxx11">
+Support for C++11 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.iterator_type">
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+</a></span></dt></dl></dd></dl></dd></dl></div><div class="section" title="Configure and Build Hacking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
+ As noted <a class="link" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">previously</a>,
certain other tools are necessary for hacking on files that
control configure (<code class="code">configure.ac</code>,
<code class="code">acinclude.m4</code>) and make
@@ -19,17 +41,32 @@
in GCC try to stay in sync with each other in terms of versions of
the auto-tools used, so please try to play nicely with the
neighbors.
- </p></div><div class="section" title="Overview: What Comes from Where"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.map"/>Overview: What Comes from Where</h3></div></div></div><div class="figure"><a id="id494186"/><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" style="text-align: center"><img src="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/confdeps.png" style="text-align: middle" alt="Dependency Graph for Configure and Build Files"/></div></div></div><br class="figure-break"/><p>
- Regenerate all generated files by using the command sequence
- <code class="code">"autoreconf"</code> at the top level of the libstdc++ source
- directory. The following will also work, but is much more complex:
- <code class="code">"aclocal-1.11 &amp;&amp; autoconf-2.64 &amp;&amp;
- autoheader-2.64 &amp;&amp; automake-1.11"</code> The version
- numbers may be absent entirely or otherwise vary depending on
- <a class="link" href="http://gcc.gnu.org/install/prerequisites.html">the
- current requirements</a> and your vendor's choice of
- installation names.
- </p></div><div class="section" title="Storing Information in non-AC files (like configure.host)"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.scripts"/>Storing Information in non-AC files (like configure.host)</h3></div></div></div><p>
+ </p></div><div class="section" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.overview"></a>Overview</h3></div></div></div><div class="section" title="General Process"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.basic"></a>General Process</h4></div></div></div><p>
+ The configure process begins the act of building libstdc++, and is
+ started via:
+</p><pre class="screen">
+<code class="computeroutput">
+configure
+</code>
+</pre><p>
+The <code class="filename">configure</code> file is a script generated (via
+<span class="command"><strong>autoconf</strong></span>) from the file
+<code class="filename">configure.ac</code>.
+</p><p>
+ After the configure process is complete,
+</p><pre class="screen">
+<code class="computeroutput">
+make all
+</code>
+</pre><p>
+in the build directory starts the build process. The <code class="literal">all</code> target comes from the <code class="filename">Makefile</code> file, which is generated via <span class="command"><strong>configure</strong></span> from the <code class="filename">Makefile.in</code> file, which is in turn generated (via
+<span class="command"><strong>automake</strong></span>) from the file
+<code class="filename">Makefile.am</code>.
+</p></div><div class="section" title="What Comes from Where"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idp21998848"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
+ Regenerate all generated files by using the command
+ <code class="code">autoreconf</code> at the top level of the libstdc++ source
+ directory.
+ </p></div></div><div class="section" title="Configure"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.configure"></a>Configure</h3></div></div></div><div class="section" title="Storing Information in non-AC files (like configure.host)"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.scripts"></a>Storing Information in non-AC files (like configure.host)</h4></div></div></div><p>
Until that glorious day when we can use AC_TRY_LINK with a
cross-compiler, we have to hardcode the results of what the tests
would have shown if they could be run. So we have an inflexible
@@ -51,7 +88,7 @@
for instance, but then we would need arguments to aclocal/autoconf
to properly find them all when generating configure. I would
discourage that.
-</p></div><div class="section" title="Coding and Commenting Conventions"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.conventions"/>Coding and Commenting Conventions</h3></div></div></div><p>
+</p></div><div class="section" title="Coding and Commenting Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.conventions"></a>Coding and Commenting Conventions</h4></div></div></div><p>
Most comments should use {octothorpes, shibboleths, hash marks,
pound signs, whatever} rather than "dnl". Nearly all comments in
configure.ac should. Comments inside macros written in ancilliary
@@ -68,7 +105,7 @@
Do not use any <code class="code">$target*</code> variables, such as
<code class="code">$target_alias</code>. The single exception is in
configure.ac, for automake+dejagnu's sake.
- </p></div><div class="section" title="The acinclude.m4 layout"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.acinclude"/>The acinclude.m4 layout</h3></div></div></div><p>
+ </p></div><div class="section" title="The acinclude.m4 layout"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.acinclude"></a>The acinclude.m4 layout</h4></div></div></div><p>
The nice thing about acinclude.m4/aclocal.m4 is that macros aren't
actually performed/called/expanded/whatever here, just loaded. So
we can arrange the contents however we like. As of this writing,
@@ -139,17 +176,17 @@
</pre><p>
Things which we don't seem to use directly, but just has to be
present otherwise stuff magically goes wonky.
-</p></div><div class="section" title="GLIBCXX_ENABLE, the --enable maker"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.enable"/><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</h3></div></div></div><p>
- All the GLIBCXX_ENABLE_FOO macros use a common helper,
- GLIBCXX_ENABLE. (You don't have to use it, but it's easy.) The
- helper does two things for us:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
- Builds the call to the AC_ARG_ENABLE macro, with --help text
+</p></div><div class="section" title="GLIBCXX_ENABLE, the --enable maker"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.enable"></a><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</h4></div></div></div><p>
+ All the <code class="literal">GLIBCXX_ENABLE_FOO</code> macros use a common
+ helper, <code class="literal">GLIBCXX_ENABLE</code>. (You don't have to use
+ it, but it's easy.) The helper does two things for us:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Builds the call to the <code class="literal">AC_ARG_ENABLE</code> macro, with --help text
properly quoted and aligned. (Death to changequote!)
</p></li><li class="listitem"><p>
Checks the result against a list of allowed possibilities, and
signals a fatal error if there's no match. This means that the
- rest of the GLIBCXX_ENABLE_FOO macro doesn't need to test for
+ rest of the <code class="literal">GLIBCXX_ENABLE_FOO</code> macro doesn't need to test for
strange arguments, nor do we need to protect against
empty/whitespace strings with the <code class="code">"x$foo" = "xbar"</code>
idiom.
@@ -168,7 +205,7 @@
GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
-</pre><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
FEATURE is the string that follows --enable. The results of the
test (such as it is) will be in the variable $enable_FEATURE,
where FEATURE has been squashed. Example:
@@ -179,12 +216,12 @@
not pass --enable/--disable. It should be one of the permitted
values passed later. Examples: <code class="code">[yes]</code>, or
<code class="code">[bar]</code>, or <code class="code">[$1]</code> (which passes the
- argument given to the GLIBCXX_ENABLE_FOO macro as the
- default).
+ argument given to the <code class="literal">GLIBCXX_ENABLE_FOO</code> macro
+ as the default).
</p><p>
For cases where we need to probe for particular models of things,
it is useful to have an undocumented "auto" value here (see
- GLIBCXX_ENABLE_CLOCALE for an example).
+ <code class="literal">GLIBCXX_ENABLE_CLOCALE</code> for an example).
</p></li><li class="listitem"><p>
HELP-ARG is any text to append to the option string itself in the
--help output. Examples: <code class="code">[]</code> (i.e., an empty string,
@@ -196,7 +233,7 @@
</p><p>
If you're wondering what that line noise in the last example was,
that's how you embed autoconf special characters in output text.
- They're called <a class="link" href="http://www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs"><span class="emphasis"><em>quadrigraphs</em></span></a>
+ They're called <a class="link" href="http://www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs" target="_top"><span class="emphasis"><em>quadrigraphs</em></span></a>
and you should use them whenever necessary.
</p></li><li class="listitem"><p>HELP-STRING is what you think it is. Do not include the
"default" text like we used to do; it will be done for you by
@@ -227,4 +264,47 @@
argument checking at all is done in this signature. See
GLIBCXX_ENABLE_CXX_FLAGS for an example of handling, and an error
message.
-</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td align="left" valign="top">Design Notes </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
+</p></div></div><div class="section" title="Make"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.make"></a>Make</h3></div></div></div><p>
+ The build process has to make all of object files needed for
+ static or shared libraries, but first it has to generate some
+ include files. The general order is as follows:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ make include files, make pre-compiled headers
+ </p></li><li class="listitem"><p>
+ make libsupc++
+ </p><p>
+ Generates a libtool convenience library,
+ <code class="filename">libsupc++convenience</code> with language-support
+ routines. Also generates a freestanding static library,
+ <code class="filename">libsupc++.a</code>.
+ </p></li><li class="listitem"><p>
+ make src
+ </p><p>
+ Generates two convenience libraries, one for C++98 and one for
+ C++11, various compability files for shared and static
+ libraries, and then collects all the generated bits and creates
+ the final libstdc++ libraries.
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
+ make src/c++98
+ </p><p>
+ Generates a libtool convenience library,
+ <code class="filename">libc++98convenience</code> with language-support
+ routines. Uses the <code class="literal">-std=gnu++98</code> dialect.
+ </p></li><li class="listitem"><p>
+ make src/c++11
+ </p><p>
+ Generates a libtool convenience library,
+ <code class="filename">libc++11convenience</code> with language-support
+ routines. Uses the <code class="literal">-std=gnu++11</code> dialect.
+ </p></li><li class="listitem"><p>
+ make src
+ </p><p>
+ Generates needed compatibility objects for shared and static
+ libraries. Shared-only code is seggregated at compile-time via
+ the macro <code class="literal">_GLIBCXX_SHARED</code>.
+ </p><p>
+ Then, collects all the generated convenience libraries, adds in
+ any required compatibility objects, and creates the final shared
+ and static libraries: <code class="filename">libstdc++.so</code> and
+ <code class="filename">libstdc++.a</code>.
+ </p></li></ol></div></li></ol></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/associative.html b/libstdc++-v3/doc/html/manual/associative.html
index 351ec9402e..2425b9960c 100644
--- a/libstdc++-v3/doc/html/manual/associative.html
+++ b/libstdc++-v3/doc/html/manual/associative.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="containers.html" title="Chapter 9.  Containers"/><link rel="prev" href="containers.html" title="Chapter 9.  Containers"/><link rel="next" href="containers_and_c.html" title="Interacting with C"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="containers.html" title="Chapter 9.  Containers" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
-</th><td align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr/></div><div class="section" title="Associative"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers.associative"/>Associative</h2></div></div></div><div class="section" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"/>Insertion Hints</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="Associative"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="section" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
Section [23.1.2], Table 69, of the C++ standard lists this
function for all of the associative containers (map, set, etc):
</p><pre class="programlisting">
@@ -13,7 +13,7 @@
item to insert. The standard says that <span class="quote">“<span class="quote"><code class="code">t</code> is
inserted as close as possible to the position just prior to
<code class="code">p</code>.</span>â€</span> (Library DR #233 addresses this topic,
- referring to <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html">N1780</a>.
+ referring to <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html" target="_top">N1780</a>.
Since version 4.2 GCC implements the resolution to DR 233, so
that insertions happen as close as possible to the hint. For
earlier releases the hint was only used as described below.
@@ -39,7 +39,7 @@
paragraph. *grin*
</p><p>
If the <code class="code">hint</code> parameter ('p' above) is equivalent to:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="code">begin()</code>, then the item being inserted should
have a key less than all the other keys in the container.
The item will be inserted at the beginning of the container,
@@ -84,7 +84,7 @@
the new item would in fact belong there. If the hint does not
point to the correct place, then no further local searching is
done; the search begins from scratch in logarithmic time.
- </p></div><div class="section" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"/>bitset</h3></div></div></div><div class="section" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"/>Size Variable</h4></div></div></div><p>
+ </p></div><div class="section" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="section" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
No, you cannot write code of the form
</p><pre class="programlisting">
#include &lt;bitset&gt;
@@ -102,7 +102,7 @@
There are a couple of ways to handle this kind of thing. Please
consider all of them before passing judgement. They include, in
no chaptericular order:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
<span class="emphasis"><em>A very large N in
<code class="code">bitset&lt;N&gt;</code>.  </em></span> It has been
pointed out a few times in newsgroups that N bits only takes up
@@ -168,8 +168,8 @@
author would love to hear from you...
</p><p>
Also note that the implementation of bitset used in libstdc++ has
- <a class="link" href="bk01pt03ch21s02.html" title="HP/SGI">some extensions</a>.
- </p></div><div class="section" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"/>Type String</h4></div></div></div><p>
+ <a class="link" href="ext_containers.html#manual.ext.containers.sgi" title="Backwards Compatibility">some extensions</a>.
+ </p></div><div class="section" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
</p><p>
Bitmasks do not take char* nor const char* arguments in their
constructors. This is something of an accident, but you can read
@@ -186,7 +186,7 @@
instead of
</p><pre class="programlisting">
std::bitset&lt;5&gt; b ( <span class="quote">“<span class="quote">10110</span>â€</span> ); // invalid
- </pre></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td align="center"><a accesskey="u" href="containers.html">Up</a></td><td align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 9. 
+ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. 
Containers
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/atomics.html b/libstdc++-v3/doc/html/manual/atomics.html
index 68052a7413..4955bfdaea 100644
--- a/libstdc++-v3/doc/html/manual/atomics.html
+++ b/libstdc++-v3/doc/html/manual/atomics.html
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="io_and_c.html" title="Interacting with C"/><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
Atomics
-</th></tr><tr><td align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 14.  Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"/>Chapter 14. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 14.  Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
Atomics
- <a id="id481583" class="indexterm"/>
+ <a id="idp16354144" class="indexterm"></a>
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
Facilities for atomic operations.
-</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics.api"/>API Reference</h2></div></div></div><p>
+</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
All items are declared in the standard header
file <code class="filename">atomic</code>.
</p><p>
@@ -25,7 +25,7 @@
<code class="classname">atomic&lt;int&gt;</code>.
</p><p>
Full API details.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 15. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. 
Concurrency
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/backwards.html b/libstdc++-v3/doc/html/manual/backwards.html
index 2ac6d789e4..788dfc1253 100644
--- a/libstdc++-v3/doc/html/manual/backwards.html
+++ b/libstdc++-v3/doc/html/manual/backwards.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; backwards&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="prev" href="api.html" title="API Evolution and Deprecation History"/><link rel="next" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; backwards&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
-</th><td align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr/></div><div class="section" title="Backwards Compatibility"><div class="titlepage"><div><div><h2 class="title"><a id="manual.appendix.porting.backwards"/>Backwards Compatibility</h2></div></div></div><div class="section" title="First"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"/>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++. It was a
+</th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section" title="Backwards Compatibility"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.appendix.porting.backwards"></a>Backwards Compatibility</h2></div></div></div><div class="section" title="First"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"></a>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++. It was a
separate GNU project, although reliably paired with GCC. Rumors imply
that it had a working relationship with at least two kinds of
dinosaur.
@@ -17,22 +17,22 @@ ISO Standard (e.g., statistical analysis). While there are a lot of
really useful things that are used by a lot of people, the Standards
Committee couldn't include everything, and so a lot of those
<span class="quote">“<span class="quote">obvious</span>â€</span> classes didn't get included.
-</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="id503868"/>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
-</p></div><div class="section" title="No cout in ostream.h, no cin in istream.h"><div class="titlepage"><div><div><h4 class="title"><a id="id503900"/>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p>
+</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.ios_base"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
+</p></div><div class="section" title="No cout in &lt;ostream.h&gt;, no cin in &lt;istream.h&gt;"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.cout_cin"></a>No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></h4></div></div></div><p>
In earlier versions of the standard,
- <code class="filename">fstream.h</code>,
- <code class="filename">ostream.h</code>
- and <code class="filename">istream.h</code>
+ <code class="filename">&lt;fstream.h&gt;</code>,
+ <code class="filename">&lt;ostream.h&gt;</code>
+ and <code class="filename">&lt;istream.h&gt;</code>
used to define
<code class="code">cout</code>, <code class="code">cin</code> and so on. ISO C++ specifies that one needs to include
- <code class="filename">iostream</code>
+ <code class="filename">&lt;iostream&gt;</code>
explicitly to get the required definitions.
</p><p> Some include adjustment may be required.</p><p>This project is no longer maintained or supported, and the sources
archived. For the desperate,
-the <a class="link" href="http://gcc.gnu.org/extensions.html">GCC extensions
+the <a class="link" href="http://gcc.gnu.org/extensions.html" target="_top">GCC extensions
page</a> describes where to find the last libg++ source. The code is
considered replaced and rewritten.
-</p></div></div><div class="section" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"/>Second</h3></div></div></div><p>
+</p></div></div><div class="section" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
The second generation GNU C++ library was called libstdc++, or
libstdc++-v2. It spans the time between libg++ and pre-ISO C++
standardization and is usually associated with the following GCC
@@ -44,7 +44,7 @@ considered replaced and rewritten.
archived. The code is considered replaced and rewritten.
</p><p>
Portability notes and known implementation limitations are as follows.
-</p><div class="section" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="id504003"/>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
+</p><div class="section" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.std"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
Some care is required to support C++ compiler and or library
implementation that do not have the standard library in
<code class="code">namespace std</code>.
@@ -55,7 +55,7 @@ considered replaced and rewritten.
First, see if the compiler has a flag for this. Namespace
back-portability-issues are generally not a problem for g++
compilers that do not have libstdc++ in <code class="code">std::</code>, as the
- compilers use <code class="code">-fno-honor-std</code> (ignore
+ compilers use <code class="option">-fno-honor-std</code> (ignore
<code class="code">std::</code>, <code class="code">:: = std::</code>) by default. That is,
the responsibility for enabling or disabling <code class="code">std::</code> is
on the user; the maintainer does not have to care about it. This
@@ -108,10 +108,10 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
fi
])
-</pre></div><div class="section" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="id504130"/>Illegal iterator usage</h4></div></div></div><p>
+</pre></div><div class="section" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iterators"></a>Illegal iterator usage</h4></div></div></div><p>
The following illustrate implementation-allowed illegal iterator
use, and then correct use.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
you cannot do <code class="code">ostream::operator&lt;&lt;(iterator)</code>
to print the address of the iterator =&gt; use
<code class="code">operator&lt;&lt; &amp;*iterator</code> instead
@@ -121,9 +121,9 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
</p></li><li class="listitem"><p>
<code class="code">if (iterator)</code> won't work any more =&gt; use
<code class="code">if (iterator != iterator_type())</code>
- </p></li></ul></div></div><div class="section" title="isspace from cctype is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="id504191"/><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro
+ </p></li></ul></div></div><div class="section" title="isspace from &lt;cctype&gt; is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.isspace"></a><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
</h4></div></div></div><p>
- Glibc 2.0.x and 2.1.x define <code class="filename">ctype.h</code> functionality as macros
+ Glibc 2.0.x and 2.1.x define <code class="filename">&lt;ctype.h&gt;</code> functionality as macros
(isspace, isalpha etc.).
</p><p>
This implementations of libstdc++, however, keep these functions
@@ -138,7 +138,7 @@ int main() { std::isspace('X'); }
std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
</pre><p>
A solution is to modify a header-file so that the compiler tells
- <code class="filename">ctype.h</code> to define functions
+ <code class="filename">&lt;ctype.h&gt;</code> to define functions
instead of macros:
</p><pre class="programlisting">
// This keeps isalnum, et al from being propagated as macros.
@@ -146,15 +146,16 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
# define __NO_CTYPE 1
#endif
</pre><p>
- Then, include <code class="filename">ctype.h</code>
+ Then, include <code class="filename">&lt;ctype.h&gt;</code>
</p><p>
Another problem arises if you put a <code class="code">using namespace
- std;</code> declaration at the top, and include <code class="filename">ctype.h</code>. This will result in
- ambiguities between the definitions in the global namespace
- (<code class="filename">ctype.h</code>) and the
+ std;</code> declaration at the top, and include
+ <code class="filename">&lt;ctype.h&gt;</code>. This will
+ result in ambiguities between the definitions in the global namespace
+ (<code class="filename">&lt;ctype.h&gt;</code>) and the
definitions in namespace <code class="code">std::</code>
(<code class="code">&lt;cctype&gt;</code>).
-</p></div><div class="section" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="id504286"/>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
+</p></div><div class="section" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.at"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
One solution is to add an autoconf-test for this:
</p><pre class="programlisting">
AC_MSG_CHECKING(for container::at)
@@ -180,7 +181,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
</pre><p>
If you are using other (non-GNU) compilers it might be a good idea
to check for <code class="code">string::at</code> separately.
-</p></div><div class="section" title="No std::char_traits&lt;char&gt;::eof"><div class="titlepage"><div><div><h4 class="title"><a id="id504326"/>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
+</p></div><div class="section" title="No std::char_traits&lt;char&gt;::eof"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.eof"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
Use some kind of autoconf test, plus this:
</p><pre class="programlisting">
#ifdef HAVE_CHAR_TRAITS
@@ -188,7 +189,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
#else
#define CPP_EOF EOF
#endif
-</pre></div><div class="section" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="id504344"/>No <code class="code">string::clear</code></h4></div></div></div><p>
+</pre></div><div class="section" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringclear"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
There are two functions for deleting the contents of a string:
<code class="code">clear</code> and <code class="code">erase</code> (the latter returns the
string).
@@ -206,18 +207,18 @@ erase(size_type __pos = 0, size_type __n = npos)
Unfortunately, <code class="code">clear</code> is not implemented in this
version, so you should use <code class="code">erase</code> (which is probably
faster than <code class="code">operator=(charT*)</code>).
-</p></div><div class="section" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="id504390"/>
+</p></div><div class="section" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.ostreamform_istreamscan"></a>
Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
extensions
</h4></div></div></div><p>
These are no longer supported. Please use stringstreams instead.
-</p></div><div class="section" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="id504408"/>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
+</p></div><div class="section" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringstreams"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
Although the ISO standard <code class="code">i/ostringstream</code>-classes are
- provided, (<code class="filename">sstream</code>), for
+ provided, (<code class="filename">&lt;sstream&gt;</code>), for
compatibility with older implementations the pre-ISO
- <code class="code">i/ostrstream</code> (<code class="filename">strstream</code>) interface is also provided,
+ <code class="code">i/ostrstream</code> (<code class="filename">&lt;strstream&gt;</code>) interface is also provided,
with these caveats:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="code">strstream</code> is considered to be deprecated
</p></li><li class="listitem"><p>
<code class="code">strstream</code> is limited to <code class="code">char</code>
@@ -299,14 +300,14 @@ any = temp;
Another example of using stringstreams is in <a class="link" href="strings.html#strings.string.shrink" title="Shrink to Fit">this howto</a>.
</p><p> There is additional information in the libstdc++-v2 info files, in
particular <span class="quote">“<span class="quote">info iostream</span>â€</span>.
-</p></div><div class="section" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="id504564"/>Little or no wide character support</h4></div></div></div><p>
+</p></div><div class="section" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.wchar"></a>Little or no wide character support</h4></div></div></div><p>
Classes <code class="classname">wstring</code> and
<code class="classname">char_traits&lt;wchar_t&gt;</code> are
not supported.
- </p></div><div class="section" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="id504583"/>No templatized iostreams</h4></div></div></div><p>
+ </p></div><div class="section" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iostream_templates"></a>No templatized iostreams</h4></div></div></div><p>
Classes <code class="classname">wfilebuf</code> and
<code class="classname">wstringstream</code> are not supported.
- </p></div><div class="section" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="id504602"/>Thread safety issues</h4></div></div></div><p>
+ </p></div><div class="section" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.thread_safety"></a>Thread safety issues</h4></div></div></div><p>
Earlier GCC releases had a somewhat different approach to
threading configuration and proper compilation. Before GCC 3.0,
configuration of the threading model was dictated by compiler
@@ -331,7 +332,7 @@ particular <span class="quote">“<span class="quote">info iostream</span>â€</s
against the gthr.h abstraction layer which is provided by gcc. A
minor problem that pops up every so often is different
interpretations of what "thread-safe" means for a
- library (not a general program). We currently use the <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html">same
+ library (not a general program). We currently use the <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html" target="_top">same
definition that SGI</a> uses for their STL subset. However,
the exception for read-only containers only applies to the STL
components. This definition is widely-used and something similar
@@ -342,12 +343,12 @@ particular <span class="quote">“<span class="quote">info iostream</span>â€</s
first relevant message in the thread; from there you can use
"Thread Next" to move down the thread. This farm is in
latest-to-oldest order.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
- Our threading expert Loren gives a breakdown of <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Our threading expert Loren gives a breakdown of <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html" target="_top">the
six situations involving threads</a> for the 3.0
release series.
</p></li><li class="listitem"><p>
- <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
+ <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html" target="_top">
This message</a> inspired a recent updating of issues with
threading and the SGI STL library. It also contains some
example POSIX-multithreaded STL code.
@@ -357,15 +358,16 @@ particular <span class="quote">“<span class="quote">info iostream</span>â€</s
few people with access to the backup tapes have been too swamped
with work to restore them. Many of the points have been
superseded anyhow.)
- </p></div></div><div class="section" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"/>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
+ </p></div></div><div class="section" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
libstdc++-v3.
</p><p>The subset commonly known as the Standard Template Library
(chapters 23 through 25, mostly) is adapted from the final release
of the SGI STL (version 3.3), with extensive changes.
</p><p>A more formal description of the V3 goals can be found in the
official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
- </p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="id504726"/>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
- (<code class="code">iostream.h</code>, <code class="code">defalloc.h</code> etc.) are
+ </p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.headers"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
+ (<code class="filename">&lt;iostream.h&gt;</code>,
+ <code class="filename">&lt;defalloc.h&gt;</code> etc.) are
available, unlike previous libstdc++ versions, but inclusion
generates a warning that you are using deprecated headers.
</p><p>This compatibility layer is constructed by including the
@@ -373,7 +375,7 @@ libstdc++-v3.
<code class="code">std::</code> into the global namespace.
</p><p>For those of you new to ISO C++ (welcome, time travelers!), no,
that isn't a typo. Yes, the headers really have new names.
- Marshall Cline's C++ FAQ Lite has a good explanation in <a class="link" href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item
+ Marshall Cline's C++ FAQ Lite has a good explanation in <a class="link" href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4" target="_top">item
[27.4]</a>.
</p><p> Some include adjustment may be required. What follows is an
autoconf test that defines <code class="code">PRE_STDCXX_HEADERS</code> when they
@@ -432,21 +434,23 @@ AC_DEFUN([AC_HEADER_PRE_STDCXX], [
fi
])
</pre><p>Porting between pre-ISO headers and ISO headers is simple: headers
-like <code class="filename">vector.h</code> can be replaced with <code class="filename">vector</code> and a using
+like <code class="filename">&lt;vector.h&gt;</code> can be replaced with <code class="filename">&lt;vector&gt;</code> and a using
directive <code class="code">using namespace std;</code> can be put at the global
scope. This should be enough to get this code compiling, assuming the
other usage is correct.
-</p></div><div class="section" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="id504811"/>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
+</p></div><div class="section" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.hash"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
replaced by standardized libraries.
- In particular, the unordered_map and unordered_set containers of TR1
- are suitable replacement for the non-standard hash_map and hash_set
+ In particular, the <code class="classname">unordered_map</code> and
+ <code class="classname">unordered_set</code> containers of TR1 and C++ 2011
+ are suitable replacements for the non-standard
+ <code class="classname">hash_map</code> and <code class="classname">hash_set</code>
containers in the SGI STL.
- </p><p> Header files <code class="filename">hash_map</code> and <code class="filename">hash_set</code> moved
-to <code class="filename">ext/hash_map</code> and <code class="filename">ext/hash_set</code>,
+ </p><p> Header files <code class="filename">&lt;hash_map&gt;</code> and <code class="filename">&lt;hash_set&gt;</code> moved
+to <code class="filename">&lt;ext/hash_map&gt;</code> and <code class="filename">&lt;ext/hash_set&gt;</code>,
respectively. At the same time, all types in these files are enclosed
-in <code class="code">namespace __gnu_cxx</code>. Later versions move deprecate
-these files, and suggest using TR1's <code class="filename">unordered_map</code>
-and <code class="filename">unordered_set</code> instead.
+in <code class="code">namespace __gnu_cxx</code>. Later versions deprecate
+these files, and suggest using TR1's <code class="filename">&lt;unordered_map&gt;</code>
+and <code class="filename">&lt;unordered_set&gt;</code> instead.
</p><p>The extensions are no longer in the global or <code class="code">std</code>
namespaces, instead they are declared in the <code class="code">__gnu_cxx</code>
namespace. For maximum portability, consider defining a namespace
@@ -508,7 +512,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
fi
])
-</pre></div><div class="section" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="id504914"/>No <code class="code">ios::nocreate/ios::noreplace</code>.
+</pre></div><div class="section" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.nocreate_noreplace"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
</h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for
input-streams has been confirmed, most probably because the author
thought it would be more correct to specify nocreate explicitly. So
@@ -519,7 +523,7 @@ open the file for reading, check if it has been opened, and then
decide whether you want to create/replace or not. To my knowledge,
even older implementations support <code class="code">app</code>, <code class="code">ate</code>
and <code class="code">trunc</code> (except for <code class="code">app</code> ?).
-</p></div><div class="section" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="id504962"/>
+</p></div><div class="section" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.streamattach"></a>
No <code class="code">stream::attach(int fd)</code>
</h4></div></div></div><p>
Phil Edwards writes: It was considered and rejected for the ISO
@@ -534,15 +538,15 @@ No <code class="code">stream::attach(int fd)</code>
stream-constructor.
</p><p>
An extension is available that implements this.
- <code class="filename">ext/stdio_filebuf.h</code> contains a derived class called
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
+ <code class="filename">&lt;ext/stdio_filebuf.h&gt;</code> contains a derived class called
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
This class can be constructed from a C <code class="code">FILE*</code> or a file
descriptor, and provides the <code class="code">fd()</code> function.
</p><p>
For another example of this, refer to
- <a class="link" href="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</a>
+ <a class="link" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
by Nicolai Josuttis.
-</p></div><div class="section" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id505030"/>
+</p></div><div class="section" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx98"></a>
Support for C++98 dialect.
</h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard.
</p><pre class="programlisting">
@@ -610,7 +614,7 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [
AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
fi
])
-</pre></div><div class="section" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id505057"/>
+</pre></div><div class="section" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_tr1"></a>
Support for C++TR1 dialect.
</h4></div></div></div><p>Check for library coverage of the TR1 standard.
</p><pre class="programlisting">
@@ -687,21 +691,21 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
fi
])
-</pre></div><div class="section" title="Support for C++0x dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id505101"/>
-Support for C++0x dialect.
-</h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++0xstandard.
+</pre></div><div class="section" title="Support for C++11 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx11"></a>
+Support for C++11 dialect.
+</h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++11 standard.
</p><pre class="programlisting">
-# AC_COMPILE_STDCXX_OX
-AC_DEFUN([AC_COMPILE_STDCXX_0X], [
- AC_CACHE_CHECK(if g++ supports C++0x features without additional flags,
- ac_cv_cxx_compile_cxx0x_native,
+# AC_COMPILE_STDCXX_11
+AC_DEFUN([AC_COMPILE_STDCXX_11], [
+ AC_CACHE_CHECK(if g++ supports C++11 features without additional flags,
+ ac_cv_cxx_compile_cxx11_native,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check final
{
- static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
+ static constexpr T value{ __cplusplus };
};
typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
@@ -710,23 +714,25 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
decltype(a) b;
typedef check&lt;int&gt; check_type;
- check_type c;
- check_type&amp;&amp; cr = c;],,
- ac_cv_cxx_compile_cxx0x_native=yes, ac_cv_cxx_compile_cxx0x_native=no)
+ check_type c{};
+ check_type&amp;&amp; cr = static_cast&lt;check_type&amp;&amp;&gt;(c);
+
+ static_assert(check_type::value == 201103L, "C++11 compiler");],,
+ ac_cv_cxx_compile_cxx11_native=yes, ac_cv_cxx_compile_cxx11_native=no)
AC_LANG_RESTORE
])
- AC_CACHE_CHECK(if g++ supports C++0x features with -std=c++0x,
- ac_cv_cxx_compile_cxx0x_cxx,
+ AC_CACHE_CHECK(if g++ supports C++11 features with -std=c++11,
+ ac_cv_cxx_compile_cxx11_cxx,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=c++0x"
+ CXXFLAGS="$CXXFLAGS -std=c++11"
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check final
{
- static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
+ static constexpr T value{ __cplusplus };
};
typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
@@ -735,24 +741,26 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
decltype(a) b;
typedef check&lt;int&gt; check_type;
- check_type c;
- check_type&amp;&amp; cr = c;],,
- ac_cv_cxx_compile_cxx0x_cxx=yes, ac_cv_cxx_compile_cxx0x_cxx=no)
+ check_type c{};
+ check_type&amp;&amp; cr = static_cast&lt;check_type&amp;&amp;&gt;(c);
+
+ static_assert(check_type::value == 201103L, "C++11 compiler");],,
+ ac_cv_cxx_compile_cxx11_cxx=yes, ac_cv_cxx_compile_cxx11_cxx=no)
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
])
- AC_CACHE_CHECK(if g++ supports C++0x features with -std=gnu++0x,
- ac_cv_cxx_compile_cxx0x_gxx,
+ AC_CACHE_CHECK(if g++ supports C++11 features with -std=gnu++11,
+ ac_cv_cxx_compile_cxx11_gxx,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check final
{
- static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
+ static constexpr T value{ __cplusplus };
};
typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
@@ -761,30 +769,34 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
decltype(a) b;
typedef check&lt;int&gt; check_type;
- check_type c;
- check_type&amp;&amp; cr = c;],,
- ac_cv_cxx_compile_cxx0x_gxx=yes, ac_cv_cxx_compile_cxx0x_gxx=no)
+ check_type c{};
+ check_type&amp;&amp; cr = static_cast&lt;check_type&amp;&amp;&gt;(c);
+
+ static_assert(check_type::value == 201103L, "C++11 compiler");],,
+ ac_cv_cxx_compile_cxx11_gxx=yes, ac_cv_cxx_compile_cxx11_gxx=no)
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
])
- if test "$ac_cv_cxx_compile_cxx0x_native" = yes ||
- test "$ac_cv_cxx_compile_cxx0x_cxx" = yes ||
- test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then
- AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ])
+ if test "$ac_cv_cxx_compile_cxx11_native" = yes ||
+ test "$ac_cv_cxx_compile_cxx11_cxx" = yes ||
+ test "$ac_cv_cxx_compile_cxx11_gxx" = yes; then
+ AC_DEFINE(HAVE_STDCXX_11,,[Define if g++ supports C++11 features. ])
fi
])
-</pre><p>Check for library coverage of the C++0xstandard.
+</pre><p>Check for library coverage of the C++2011 standard.
+ (Some library headers are commented out in this check, they are
+ not currently provided by libstdc++).
</p><pre class="programlisting">
-# AC_HEADER_STDCXX_0X
-AC_DEFUN([AC_HEADER_STDCXX_0X], [
- AC_CACHE_CHECK(for ISO C++ 0x include files,
- ac_cv_cxx_stdcxx_0x,
- [AC_REQUIRE([AC_COMPILE_STDCXX_0X])
+# AC_HEADER_STDCXX_11
+AC_DEFUN([AC_HEADER_STDCXX_11], [
+ AC_CACHE_CHECK(for ISO C++11 include files,
+ ac_cv_cxx_stdcxx_11,
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([
#include &lt;cassert&gt;
@@ -800,6 +812,7 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;cmath&gt;
#include &lt;csetjmp&gt;
#include &lt;csignal&gt;
+ #include &lt;cstdalign&gt;
#include &lt;cstdarg&gt;
#include &lt;cstdbool&gt;
#include &lt;cstddef&gt;
@@ -809,17 +822,25 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;cstring&gt;
#include &lt;ctgmath&gt;
#include &lt;ctime&gt;
+ // #include &lt;cuchar&gt;
#include &lt;cwchar&gt;
#include &lt;cwctype&gt;
#include &lt;algorithm&gt;
#include &lt;array&gt;
+ #include &lt;atomic&gt;
#include &lt;bitset&gt;
+ #include &lt;chrono&gt;
+ // #include &lt;codecvt&gt;
#include &lt;complex&gt;
+ #include &lt;condition_variable&gt;
#include &lt;deque&gt;
#include &lt;exception&gt;
+ #include &lt;forward_list&gt;
#include &lt;fstream&gt;
#include &lt;functional&gt;
+ #include &lt;future&gt;
+ #include &lt;initializer_list&gt;
#include &lt;iomanip&gt;
#include &lt;ios&gt;
#include &lt;iosfwd&gt;
@@ -831,19 +852,25 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;locale&gt;
#include &lt;map&gt;
#include &lt;memory&gt;
+ #include &lt;mutex&gt;
#include &lt;new&gt;
#include &lt;numeric&gt;
#include &lt;ostream&gt;
#include &lt;queue&gt;
#include &lt;random&gt;
+ #include &lt;ratio&gt;
#include &lt;regex&gt;
+ #include &lt;scoped_allocator&gt;
#include &lt;set&gt;
#include &lt;sstream&gt;
#include &lt;stack&gt;
#include &lt;stdexcept&gt;
#include &lt;streambuf&gt;
#include &lt;string&gt;
+ #include &lt;system_error&gt;
+ #include &lt;thread&gt;
#include &lt;tuple&gt;
+ #include &lt;typeindex&gt;
#include &lt;typeinfo&gt;
#include &lt;type_traits&gt;
#include &lt;unordered_map&gt;
@@ -852,25 +879,26 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;valarray&gt;
#include &lt;vector&gt;
],,
- ac_cv_cxx_stdcxx_0x=yes, ac_cv_cxx_stdcxx_0x=no)
+ ac_cv_cxx_stdcxx_11=yes, ac_cv_cxx_stdcxx_11=no)
AC_LANG_RESTORE
CXXFLAGS="$ac_save_CXXFLAGS"
])
- if test "$ac_cv_cxx_stdcxx_0x" = yes; then
- AC_DEFINE(STDCXX_0X_HEADERS,,[Define if ISO C++ 0x header files are present. ])
+ if test "$ac_cv_cxx_stdcxx_11" = yes; then
+ AC_DEFINE(STDCXX_11_HEADERS,,[Define if ISO C++11 header files are present. ])
fi
])
-</pre><p>As is the case for TR1 support, these autoconf macros can be made for a finer-grained, per-header-file check. For &lt;unordered_map&gt;
+</pre><p>As is the case for TR1 support, these autoconf macros can be made for a finer-grained, per-header-file check. For
+<code class="filename">&lt;unordered_map&gt;</code>
</p><pre class="programlisting">
# AC_HEADER_UNORDERED_MAP
AC_DEFUN([AC_HEADER_UNORDERED_MAP], [
AC_CACHE_CHECK(for unordered_map,
ac_cv_cxx_unordered_map,
- [AC_REQUIRE([AC_COMPILE_STDCXX_0X])
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([#include &lt;unordered_map&gt;], [using std::unordered_map;],
ac_cv_cxx_unordered_map=yes, ac_cv_cxx_unordered_map=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -885,11 +913,11 @@ AC_DEFUN([AC_HEADER_UNORDERED_MAP], [
AC_DEFUN([AC_HEADER_UNORDERED_SET], [
AC_CACHE_CHECK(for unordered_set,
ac_cv_cxx_unordered_set,
- [AC_REQUIRE([AC_COMPILE_STDCXX_0X])
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([#include &lt;unordered_set&gt;], [using std::unordered_set;],
ac_cv_cxx_unordered_set=yes, ac_cv_cxx_unordered_set=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -899,22 +927,33 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
AC_DEFINE(HAVE_UNORDERED_SET,,[Define if unordered_set is present. ])
fi
])
-</pre></div><div class="section" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="id505180"/>
- Container::iterator_type is not necessarily Container::value_type*
+</pre><p>
+ Some C++11 features first appeared in GCC 4.3 and could be enabled by
+ <code class="option">-std=c++0x</code> and <code class="option">-std=gnu++0x</code> for GCC
+ releases which pre-date the 2011 standard. Those C++11 features and GCC's
+ support for them were still changing until the 2011 standard was finished,
+ but the autoconf checks above could be extended to test for incomplete
+ C++11 support with <code class="option">-std=c++0x</code> and
+ <code class="option">-std=gnu++0x</code>.
+</p></div><div class="section" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.iterator_type"></a>
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
</h4></div></div></div><p>
- This is a change in behavior from the previous version. Now, most
+ This is a change in behavior from older versions. Now, most
<span class="type">iterator_type</span> typedefs in container classes are POD
objects, not <span class="type">value_type</span> pointers.
-</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"/>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id505210"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="Migrating to GCC 4.1"><a id="idp23375200"></a><p><span class="title"><em>
+ <a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
Migrating to GCC 4.1
- </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="id505235"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry" title="Building the Whole Debian Archive with GCC 4.1: A Summary"><a id="idp23377984"></a><p><span class="title"><em>
+ <a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
Building the Whole Debian Archive with GCC 4.1: A Summary
- </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="id505261"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry" title="Migration guide for GCC-3.2"><a id="idp23380832"></a><p><span class="title"><em>
+ <a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
Migration guide for GCC-3.2
- </em>. </span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td align="left" valign="top">API Evolution and Deprecation History </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix C. 
+ </a>
+ </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Evolution and Deprecation History </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix C. 
Free Software Needs Free Documentation
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator.html b/libstdc++-v3/doc/html/manual/bitmap_allocator.html
index be584e4030..cb92883329 100644
--- a/libstdc++-v3/doc/html/manual/bitmap_allocator.html
+++ b/libstdc++-v3/doc/html/manual/bitmap_allocator.html
@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_allocators.html" title="Chapter 20. Allocators"/><link rel="prev" href="ext_allocators.html" title="Chapter 20. Allocators"/><link rel="next" href="ext_containers.html" title="Chapter 21. Containers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">bitmap_allocator</th></tr><tr><td align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><th width="60%" align="center">Chapter 20. Allocators</th><td align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr/></div><div class="section" title="bitmap_allocator"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"/>bitmap_allocator</h2></div></div></div><p>
-</p><div class="section" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.design"/>Design</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch20s05.html" title="Multiple Thread Example" /><link rel="next" href="bk01pt03ch21s02.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch20s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 21. The bitmap_allocator"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
+</p><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
As this name suggests, this allocator uses a bit-map to keep track
- of the used and unused memory locations for it's book-keeping
+ of the used and unused memory locations for its book-keeping
purposes.
</p><p>
This allocator will make use of 1 single bit to keep track of
@@ -27,314 +30,4 @@
Mutex Protection around every allocation/deallocation. The state
of the macro is picked up automatically from the gthr abstraction
layer.
- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.impl"/>Implementation</h3></div></div></div><div class="section" title="Free List Store"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.free_list_store"/>Free List Store</h4></div></div></div><p>
- The Free List Store (referred to as FLS for the remaining part of this
- document) is the Global memory pool that is shared by all instances of
- the bitmapped allocator instantiated for any type. This maintains a
- sorted order of all free memory blocks given back to it by the
- bitmapped allocator, and is also responsible for giving memory to the
- bitmapped allocator when it asks for more.
- </p><p>
- Internally, there is a Free List threshold which indicates the
- Maximum number of free lists that the FLS can hold internally
- (cache). Currently, this value is set at 64. So, if there are
- more than 64 free lists coming in, then some of them will be given
- back to the OS using operator delete so that at any given time the
- Free List's size does not exceed 64 entries. This is done because
- a Binary Search is used to locate an entry in a free list when a
- request for memory comes along. Thus, the run-time complexity of
- the search would go up given an increasing size, for 64 entries
- however, lg(64) == 6 comparisons are enough to locate the correct
- free list if it exists.
- </p><p>
- Suppose the free list size has reached it's threshold, then the
- largest block from among those in the list and the new block will
- be selected and given back to the OS. This is done because it
- reduces external fragmentation, and allows the OS to use the
- larger blocks later in an orderly fashion, possibly merging them
- later. Also, on some systems, large blocks are obtained via calls
- to mmap, so giving them back to free system resources becomes most
- important.
- </p><p>
- The function _S_should_i_give decides the policy that determines
- whether the current block of memory should be given to the
- allocator for the request that it has made. That's because we may
- not always have exact fits for the memory size that the allocator
- requests. We do this mainly to prevent external fragmentation at
- the cost of a little internal fragmentation. Now, the value of
- this internal fragmentation has to be decided by this function. I
- can see 3 possibilities right now. Please add more as and when you
- find better strategies.
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Equal size check. Return true only when the 2 blocks are of equal
-size.</p></li><li class="listitem"><p>Difference Threshold: Return true only when the _block_size is
-greater than or equal to the _required_size, and if the _BS is &gt; _RS
-by a difference of less than some THRESHOLD value, then return true,
-else return false. </p></li><li class="listitem"><p>Percentage Threshold. Return true only when the _block_size is
-greater than or equal to the _required_size, and if the _BS is &gt; _RS
-by a percentage of less than some THRESHOLD value, then return true,
-else return false.</p></li></ol></div><p>
- Currently, (3) is being used with a value of 36% Maximum wastage per
- Super Block.
- </p></div><div class="section" title="Super Block"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.super_block"/>Super Block</h4></div></div></div><p>
- A super block is the block of memory acquired from the FLS from
- which the bitmap allocator carves out memory for single objects
- and satisfies the user's requests. These super blocks come in
- sizes that are powers of 2 and multiples of 32
- (_Bits_Per_Block). Yes both at the same time! That's because the
- next super block acquired will be 2 times the previous one, and
- also all super blocks have to be multiples of the _Bits_Per_Block
- value.
- </p><p>
- How does it interact with the free list store?
- </p><p>
- The super block is contained in the FLS, and the FLS is responsible for
- getting / returning Super Bocks to and from the OS using operator new
- as defined by the C++ standard.
- </p></div><div class="section" title="Super Block Data Layout"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.super_block_data"/>Super Block Data Layout</h4></div></div></div><p>
- Each Super Block will be of some size that is a multiple of the
- number of Bits Per Block. Typically, this value is chosen as
- Bits_Per_Byte x sizeof(size_t). On an x86 system, this gives the
- figure 8 x 4 = 32. Thus, each Super Block will be of size 32
- x Some_Value. This Some_Value is sizeof(value_type). For now, let
- it be called 'K'. Thus, finally, Super Block size is 32 x K bytes.
- </p><p>
- This value of 32 has been chosen because each size_t has 32-bits
- and Maximum use of these can be made with such a figure.
- </p><p>
- Consider a block of size 64 ints. In memory, it would look like this:
- (assume a 32-bit system where, size_t is a 32-bit entity).
- </p><div class="table"><a id="id490827"/><p class="title"><strong>Table 20.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left">268</td><td style="text-align: left">0</td><td style="text-align: left">4294967295</td><td style="text-align: left">4294967295</td><td style="text-align: left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break"/><p>
- The first Column(268) represents the size of the Block in bytes as
- seen by the Bitmap Allocator. Internally, a global free list is
- used to keep track of the free blocks used and given back by the
- bitmap allocator. It is this Free List Store that is responsible
- for writing and managing this information. Actually the number of
- bytes allocated in this case would be: 4 + 4 + (4x2) + (64x4) =
- 272 bytes, but the first 4 bytes are an addition by the Free List
- Store, so the Bitmap Allocator sees only 268 bytes. These first 4
- bytes about which the bitmapped allocator is not aware hold the
- value 268.
- </p><p>
- What do the remaining values represent?</p><p>
- The 2nd 4 in the expression is the sizeof(size_t) because the
- Bitmapped Allocator maintains a used count for each Super Block,
- which is initially set to 0 (as indicated in the diagram). This is
- incremented every time a block is removed from this super block
- (allocated), and decremented whenever it is given back. So, when
- the used count falls to 0, the whole super block will be given
- back to the Free List Store.
- </p><p>
- The value 4294967295 represents the integer corresponding to the bit
- representation of all bits set: 11111111111111111111111111111111.
- </p><p>
- The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits
- x 2,
- which is 8-bytes, or 2 x sizeof(size_t).
- </p></div><div class="section" title="Maximum Wasted Percentage"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.max_wasted"/>Maximum Wasted Percentage</h4></div></div></div><p>
- This has nothing to do with the algorithm per-se,
- only with some vales that must be chosen correctly to ensure that the
- allocator performs well in a real word scenario, and maintains a good
- balance between the memory consumption and the allocation/deallocation
- speed.
- </p><p>
- The formula for calculating the maximum wastage as a percentage:
- </p><p>
-(32 x k + 1) / (2 x (32 x k + 1 + 32 x c)) x 100.
- </p><p>
- where k is the constant overhead per node (e.g., for list, it is
- 8 bytes, and for map it is 12 bytes) and c is the size of the
- base type on which the map/list is instantiated. Thus, suppose the
- type1 is int and type2 is double, they are related by the relation
- sizeof(double) == 2*sizeof(int). Thus, all types must have this
- double size relation for this formula to work properly.
- </p><p>
- Plugging-in: For List: k = 8 and c = 4 (int and double), we get:
- 33.376%
- </p><p>
-For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
- </p><p>
- Thus, knowing these values, and based on the sizeof(value_type), we may
- create a function that returns the Max_Wastage_Percentage for us to use.
- </p></div><div class="section" title="allocate"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.allocate"/><code class="function">allocate</code></h4></div></div></div><p>
- The allocate function is specialized for single object allocation
- ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's
- specialized algorithm be used. Otherwise, the request is satisfied
- directly by calling operator new.
- </p><p>
- Suppose n == 1, then the allocator does the following:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
- Checks to see whether a free block exists somewhere in a region
- of memory close to the last satisfied request. If so, then that
- block is marked as allocated in the bit map and given to the
- user. If not, then (2) is executed.
- </p></li><li class="listitem"><p>
- Is there a free block anywhere after the current block right
- up to the end of the memory that we have? If so, that block is
- found, and the same procedure is applied as above, and
- returned to the user. If not, then (3) is executed.
- </p></li><li class="listitem"><p>
- Is there any block in whatever region of memory that we own
- free? This is done by checking
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
- The use count for each super block, and if that fails then
- </p></li><li class="listitem"><p>
- The individual bit-maps for each super block.
- </p></li></ul></div><p>
- Note: Here we are never touching any of the memory that the
- user will be given, and we are confining all memory accesses
- to a small region of memory! This helps reduce cache
- misses. If this succeeds then we apply the same procedure on
- that bit-map as (1), and return that block of memory to the
- user. However, if this process fails, then we resort to (4).
- </p></li><li class="listitem"><p>
- This process involves Refilling the internal exponentially
- growing memory pool. The said effect is achieved by calling
- _S_refill_pool which does the following:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
- Gets more memory from the Global Free List of the Required
- size.
- </p></li><li class="listitem"><p>
- Adjusts the size for the next call to itself.
- </p></li><li class="listitem"><p>
- Writes the appropriate headers in the bit-maps.
- </p></li><li class="listitem"><p>
- Sets the use count for that super-block just allocated to 0
- (zero).
- </p></li><li class="listitem"><p>
- All of the above accounts to maintaining the basic invariant
- for the allocator. If the invariant is maintained, we are
- sure that all is well. Now, the same process is applied on
- the newly acquired free blocks, which are dispatched
- accordingly.
- </p></li></ul></div></li></ol></div><p>
-Thus, you can clearly see that the allocate function is nothing but a
-combination of the next-fit and first-fit algorithm optimized ONLY for
-single object allocations.
-</p></div><div class="section" title="deallocate"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.deallocate"/><code class="function">deallocate</code></h4></div></div></div><p>
- The deallocate function again is specialized for single objects ONLY.
- For all n belonging to &gt; 1, the operator delete is called without
- further ado, and the deallocate function returns.
- </p><p>
- However for n == 1, a series of steps are performed:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
- We first need to locate that super-block which holds the memory
- location given to us by the user. For that purpose, we maintain
- a static variable _S_last_dealloc_index, which holds the index
- into the vector of block pairs which indicates the index of the
- last super-block from which memory was freed. We use this
- strategy in the hope that the user will deallocate memory in a
- region close to what he/she deallocated the last time around. If
- the check for belongs_to succeeds, then we determine the bit-map
- for the given pointer, and locate the index into that bit-map,
- and mark that bit as free by setting it.
- </p></li><li class="listitem"><p>
- If the _S_last_dealloc_index does not point to the memory block
- that we're looking for, then we do a linear search on the block
- stored in the vector of Block Pairs. This vector in code is
- called _S_mem_blocks. When the corresponding super-block is
- found, we apply the same procedure as we did for (1) to mark the
- block as free in the bit-map.
- </p></li></ol></div><p>
- Now, whenever a block is freed, the use count of that particular
- super block goes down by 1. When this use count hits 0, we remove
- that super block from the list of all valid super blocks stored in
- the vector. While doing this, we also make sure that the basic
- invariant is maintained by making sure that _S_last_request and
- _S_last_dealloc_index point to valid locations within the vector.
- </p></div><div class="section" title="Questions"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.questions"/>Questions</h4></div></div></div><div class="section" title="1"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.1"/>1</h5></div></div></div><p>
-Q1) The "Data Layout" section is
-cryptic. I have no idea of what you are trying to say. Layout of what?
-The free-list? Each bitmap? The Super Block?
- </p><p>
- The layout of a Super Block of a given
-size. In the example, a super block of size 32 x 1 is taken. The
-general formula for calculating the size of a super block is
-32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit
-systems.
- </p></div><div class="section" title="2"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.2"/>2</h5></div></div></div><p>
- And since I just mentioned the
-term `each bitmap', what in the world is meant by it? What does each
-bitmap manage? How does it relate to the super block? Is the Super
-Block a bitmap as well?
- </p><p>
- Each bitmap is part of a Super Block which is made up of 3 parts
- as I have mentioned earlier. Re-iterating, 1. The use count,
- 2. The bit-map for that Super Block. 3. The actual memory that
- will be eventually given to the user. Each bitmap is a multiple
- of 32 in size. If there are 32 x (2^3) blocks of single objects
- to be given, there will be '32 x (2^3)' bits present. Each 32
- bits managing the allocated / free status for 32 blocks. Since
- each size_t contains 32-bits, one size_t can manage up to 32
- blocks' status. Each bit-map is made up of a number of size_t,
- whose exact number for a super-block of a given size I have just
- mentioned.
- </p></div><div class="section" title="3"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.3"/>3</h5></div></div></div><p>
- How do the allocate and deallocate functions work in regard to
- bitmaps?
- </p><p>
- The allocate and deallocate functions manipulate the bitmaps and
- have nothing to do with the memory that is given to the user. As
- I have earlier mentioned, a 1 in the bitmap's bit field
- indicates free, while a 0 indicates allocated. This lets us
- check 32 bits at a time to check whether there is at lease one
- free block in those 32 blocks by testing for equality with
- (0). Now, the allocate function will given a memory block find
- the corresponding bit in the bitmap, and will reset it (i.e.,
- make it re-set (0)). And when the deallocate function is called,
- it will again set that bit after locating it to indicate that
- that particular block corresponding to this bit in the bit-map
- is not being used by anyone, and may be used to satisfy future
- requests.
- </p><p>
- e.g.: Consider a bit-map of 64-bits as represented below:
- 1111111111111111111111111111111111111111111111111111111111111111
- </p><p>
- Now, when the first request for allocation of a single object
- comes along, the first block in address order is returned. And
- since the bit-maps in the reverse order to that of the address
- order, the last bit (LSB if the bit-map is considered as a
- binary word of 64-bits) is re-set to 0.
- </p><p>
- The bit-map now looks like this:
- 1111111111111111111111111111111111111111111111111111111111111110
- </p></div></div><div class="section" title="Locality"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.locality"/>Locality</h4></div></div></div><p>
- Another issue would be whether to keep the all bitmaps in a
- separate area in memory, or to keep them near the actual blocks
- that will be given out or allocated for the client. After some
- testing, I've decided to keep these bitmaps close to the actual
- blocks. This will help in 2 ways.
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Constant time access for the bitmap themselves, since no kind of
-look up will be needed to find the correct bitmap list or it's
-equivalent.</p></li><li class="listitem"><p>And also this would preserve the cache as far as possible.</p></li></ol></div><p>
- So in effect, this kind of an allocator might prove beneficial from a
- purely cache point of view. But this allocator has been made to try and
- roll out the defects of the node_allocator, wherein the nodes get
- skewed about in memory, if they are not returned in the exact reverse
- order or in the same order in which they were allocated. Also, the
- new_allocator's book keeping overhead is too much for small objects and
- single object allocations, though it preserves the locality of blocks
- very well when they are returned back to the allocator.
- </p></div><div class="section" title="Overhead and Grow Policy"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.grow_policy"/>Overhead and Grow Policy</h4></div></div></div><p>
- Expected overhead per block would be 1 bit in memory. Also, once
- the address of the free list has been found, the cost for
- allocation/deallocation would be negligible, and is supposed to be
- constant time. For these very reasons, it is very important to
- minimize the linear time costs, which include finding a free list
- with a free block while allocating, and finding the corresponding
- free list for a block while deallocating. Therefore, I have
- decided that the growth of the internal pool for this allocator
- will be exponential as compared to linear for
- node_allocator. There, linear time works well, because we are
- mainly concerned with speed of allocation/deallocation and memory
- consumption, whereas here, the allocation/deallocation part does
- have some linear/logarithmic complexity components in it. Thus, to
- try and minimize them would be a good thing to do at the cost of a
- little bit of memory.
- </p><p>
- Another thing to be noted is the pool size will double every time
- the internal pool gets exhausted, and all the free blocks have
- been given away. The initial size of the pool would be
- sizeof(size_t) x 8 which is the number of bits in an integer,
- which can fit exactly in a CPU register. Hence, the term given is
- exponential growth of the internal pool.
- </p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_allocators.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 20. Allocators </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 21. Containers</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Multiple Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt02.html b/libstdc++-v3/doc/html/manual/bk01pt02.html
index 3a0751ab9e..303c2eb030 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt02.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library Manual"/><link rel="prev" href="debug.html" title="Debugging Support"/><link rel="next" href="support.html" title="Chapter 4.  Support"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
Standard Contents
- </th></tr><tr><td align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr/></div><div class="part" title="Part II.  Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"/>Part II. 
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part II.  Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II. 
Standard Contents
</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
Support
@@ -13,22 +13,22 @@
</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
Utilities
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
Strings
</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
Localization
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15752864">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
Containers
-</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
+</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
Iterators
</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
Algorithms
-</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
+</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
Numerics
</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
@@ -40,7 +40,7 @@
</a></span></dt><dd><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
Concurrency
-</a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td align="center"><a accesskey="u" href="spine.html">Up</a></td><td align="right"> <a accesskey="n" href="support.html">Next</a></td></tr><tr><td align="left" valign="top">Debugging Support </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 4. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. 
Support
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html b/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
index 6a67bef7c5..f4aa1c8bbb 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics"/><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics"/><link rel="next" href="utilities.html" title="Chapter 6.  Utilities"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
Diagnostics
-</th><td align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr/></div><div class="section" title="Concept Checking"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics.concept_checking"/>Concept Checking</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section" title="Concept Checking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
In 1999, SGI added <span class="quote">“<span class="quote">concept checkers</span>â€</span> to their
implementation of the STL: code which checked the template
parameters of instantiated pieces of the STL, in order to insure
@@ -21,7 +21,7 @@
The primary author of the checking code, Jeremy Siek, had already
started work on a replacement implementation. The new code was
formally reviewed and accepted into
- <a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm">the
+ <a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm" target="_top">the
Boost libraries</a>, and we are pleased to incorporate it into the
GNU C++ library.
</p><p>
@@ -36,15 +36,15 @@
<code class="literal">-D_GLIBCXX_CONCEPT_CHECKS</code>.
</p><p>
Please note that the checks are based on the requirements in the original
- C++ standard, some of which have changed in the upcoming C++0x revision.
+ C++ standard, some of which have changed in the new C++11 revision.
Additionally, some correct code might be rejected by the concept checks,
for example template argument types may need to be complete when used in
a template definition, rather than at the point of instantiation.
There are no plans to address these shortcomings.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><td align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 5. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5. 
Diagnostics
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 6. 
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. 
Utilities
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
index 8fa7981def..7abfa972b1 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="next" href="bk01pt03ch17s03.html" title="Using"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Semantics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.semantics"/>Semantics</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="bk01pt03ch17s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
</p><p>A program that uses the C++ standard library correctly
will maintain the same semantics under debug mode as it had with
the normal (release) library. All functional and exception-handling
@@ -36,7 +36,7 @@
(N.B. In GCC 3.4.x and 4.0.0, due to a bug,
<code class="code">-D_GLIBXX_DEBUG_PEDANTIC</code> was also needed. The problem has
been fixed in GCC 4.0.1 and later versions.) </p><p>The following library components provide extra debugging
- capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
+ capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
e.g. <code class="code">operator[]</code>,
they will not always be run when using the <code class="code">char</code> and
<code class="code">wchar_t</code> specialisations (<code class="code">std::string</code> and
@@ -52,4 +52,4 @@ with the debug-mode checks included, but this is unsupported and not
guaranteed to work. For full debug-mode support you can use the
<code class="code">__gnu_debug::basic_string</code> debugging container directly,
which always works correctly.
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><td align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 17. Debug Mode </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Using</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
index 7e017b62b4..425a564d74 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="prev" href="bk01pt03ch17s02.html" title="Semantics"/><link rel="next" href="bk01pt03ch17s04.html" title="Design"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.using"/>Using</h2></div></div></div><p>
- </p><div class="section" title="Using the Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"/>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
+ </p><div class="section" title="Using the Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
changes the sizes and behavior of standard class templates such
as <code class="code">std::vector</code>, and therefore you can only link code
@@ -10,7 +10,7 @@
units.</p><p>By default, error messages are formatted to fit on lines of about
78 characters. The environment variable
<code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
- different length.</p></div><div class="section" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"/>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+ different length.</p></div><div class="section" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
only specific containers need checking, debugging containers are
available as GNU extensions. These debugging containers are
functionally equivalent to the standard drop-in containers used in
@@ -19,6 +19,6 @@
mode or with debug mode. The
following table provides the names and headers of the debugging
containers:
-</p><div class="table"><a id="id482419"/><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Container</th><th style="text-align: left">Header</th><th style="text-align: left">Debug container</th><th style="text-align: left">Debug header</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">std::bitset</code></td><td style="text-align: left"><code class="filename">bitset</code></td><td style="text-align: left"><code class="classname">__gnu_debug::bitset</code></td><td style="text-align: left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::deque</code></td><td style="text-align: left"><code class="filename">deque</code></td><td style="text-align: left"><code class="classname">__gnu_debug::deque</code></td><td style="text-align: left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::list</code></td><td style="text-align: left"><code class="filename">list</code></td><td style="text-align: left"><code class="classname">__gnu_debug::list</code></td><td style="text-align: left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::map</code></td><td style="text-align: left"><code class="filename">map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::map</code></td><td style="text-align: left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::multimap</code></td><td style="text-align: left"><code class="filename">map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::multimap</code></td><td style="text-align: left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::multiset</code></td><td style="text-align: left"><code class="filename">set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::multiset</code></td><td style="text-align: left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::set</code></td><td style="text-align: left"><code class="filename">set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::set</code></td><td style="text-align: left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::string</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="classname">__gnu_debug::string</code></td><td style="text-align: left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::wstring</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="classname">__gnu_debug::wstring</code></td><td style="text-align: left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::basic_string</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="classname">__gnu_debug::basic_string</code></td><td style="text-align: left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::vector</code></td><td style="text-align: left"><code class="filename">vector</code></td><td style="text-align: left"><code class="classname">__gnu_debug::vector</code></td><td style="text-align: left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break"/><p>In addition, when compiling in C++0x mode, these additional
+</p><div class="table"><a id="idp16454656"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
containers have additional debug capability.
-</p><div class="table"><a id="id482793"/><p class="title"><strong>Table 17.2. Debugging Containers C++0x</strong></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Container</th><th style="text-align: left">Header</th><th style="text-align: left">Debug container</th><th style="text-align: left">Debug header</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">std::unordered_map</code></td><td style="text-align: left"><code class="filename">unordered_map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_map</code></td><td style="text-align: left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::unordered_multimap</code></td><td style="text-align: left"><code class="filename">unordered_map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td style="text-align: left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::unordered_set</code></td><td style="text-align: left"><code class="filename">unordered_set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_set</code></td><td style="text-align: left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td style="text-align: left"><code class="classname">std::unordered_multiset</code></td><td style="text-align: left"><code class="filename">unordered_set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td style="text-align: left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr><tr><td align="left" valign="top">Semantics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Design</td></tr></table></div></body></html>
+</p><div class="table"><a id="idp16499552"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
index 3e35af0fac..5222bdb786 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="prev" href="bk01pt03ch17s03.html" title="Using"/><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.design"/>Design</h2></div></div></div><p>
- </p><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"/>Goals</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="bk01pt03ch17s03.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
+ </p><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
containers and iterators with semantically equivalent safe standard
containers and iterators to aid in debugging user programs. The
- following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
+ following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
the semantics of the standard library for all cases specified in
the ANSI/ISO C++ standard. The essence of this constraint is that
any valid C++ program should behave in the same manner regardless
@@ -39,7 +39,7 @@
higher-numbered conformance levels are more usable (i.e., require
less recompilation) but are more complicated to implement than
the lower-numbered conformance levels.
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p><span class="emphasis"><em>Full recompilation</em></span>: The user must recompile his or
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><span class="emphasis"><em>Full recompilation</em></span>: The user must recompile his or
her entire application and all C++ libraries it depends on,
including the C++ standard library that ships with the
compiler. This must be done even if only a small part of the
@@ -89,10 +89,10 @@
(performance regression) or allocating extra memory associated
with each iterator with <code class="code">new</code> (changes the program
semantics).</p></li></ol></div><p>
- </p></li></ul></div></div><div class="section" title="Methods"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"/>Methods</h3></div></div></div><p>
+ </p></li></ul></div></div><div class="section" title="Methods"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"></a>Methods</h3></div></div></div><p>
</p><p>This section provides an overall view of the design of the
libstdc++ debug mode and details the relationship between design
- decisions and the stated design goals.</p><div class="section" title="The Wrapper Model"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"/>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
+ decisions and the stated design goals.</p><div class="section" title="The Wrapper Model"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"></a>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
debugging versions of library components (e.g., iterators and
containers) form a layer on top of the release versions of the
library components. The debugging components first verify that the
@@ -109,19 +109,19 @@
their associated containers, which are necessary to detect certain
types of standard library usage errors such as dereferencing
past-the-end iterators or inserting into a container using an
- iterator from a different container.</p><div class="section" title="Safe Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"/>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
+ iterator from a different container.</p><div class="section" title="Safe Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"></a>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
is attached to a particular container, and will manage the
information detailing the iterator's state (singular,
dereferenceable, etc.) and tracking the container to which the
iterator is attached. Because iterators have a well-defined, common
interface the iterator wrapper is implemented with the iterator
adaptor class template <code class="code">__gnu_debug::_Safe_iterator</code>,
- which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
+ which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
be either the <code class="code">iterator</code> or <code class="code">const_iterator</code>
typedef from the sequence type this iterator can reference.</p></li><li class="listitem"><p><code class="code">Sequence</code>: The type of sequence that this iterator
references. This sequence must be a safe sequence (discussed below)
whose <code class="code">iterator</code> or <code class="code">const_iterator</code> typedef
- is the type of the safe iterator.</p></li></ul></div></div><div class="section" title="Safe Sequences (Containers)"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"/>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
+ is the type of the safe iterator.</p></li></ul></div></div><div class="section" title="Safe Sequences (Containers)"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"></a>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
container type. Because containers vary greatly in the member
functions they support and the semantics of those member functions
(especially in the area of iterator invalidation), container
@@ -157,7 +157,7 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
// duplicate std::list interface with debugging semantics
};
-</pre></div></div><div class="section" title="Precondition Checking"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"/>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
+</pre></div></div><div class="section" title="Precondition Checking"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"></a>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
all standard library operations that it supports. Preconditions that
are always checked (regardless of whether or not we are in debug
mode) are checked via the <code class="code">__check_xxx</code> macros defined
@@ -184,7 +184,7 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
cousin <code class="code">_GLIBCXX_DEBUG_PEDASSERT</code>, or the assertion
check macro that supports more advance formulation of error
messages, <code class="code">_GLIBCXX_DEBUG_VERIFY</code>. These macros are
- documented more thoroughly in the debug mode source code.</p></div><div class="section" title="Release- and debug-mode coexistence"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"/>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
+ documented more thoroughly in the debug mode source code.</p></div><div class="section" title="Release- and debug-mode coexistence"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"></a>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
is able to provide the "Per-use recompilation" (4) guarantee, that
allows release-compiled and debug-compiled code to be linked and
executed together without causing unpredictable behavior. This
@@ -193,14 +193,14 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
and making the debug mode easier to incorporate into development
environments by minimizing dependencies.</p><p>Achieving link- and run-time coexistence is not a trivial
implementation task. To achieve this goal we required a small
- extension to the GNU C++ compiler (since incorporated into the C++0x language specification, described in the GCC Manual for the C++ language as
- <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association">namespace
+ extension to the GNU C++ compiler (since incorporated into the C++11 language specification, described in the GCC Manual for the C++ language as
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association" target="_top">namespace
association</a>), and a complex organization of debug- and
release-modes. The end result is that we have achieved per-use
recompilation but have had to give up some checking of the
<code class="code">std::basic_string</code> class template (namely, safe
iterators).
-</p><div class="section" title="Compile-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"/>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
+</p><div class="section" title="Compile-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"></a>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
components need to exist within a single translation unit so that
the debug versions can wrap the release versions. However, only one
of these components should be user-visible at any particular
@@ -224,7 +224,7 @@ namespace std
defined in the namespace <code class="code">__cxx1998</code>) and also the
debug-mode container. The debug-mode container is defined within the
namespace <code class="code">__debug</code>, which is associated with namespace
-<code class="code">std</code> via the C++0x namespace association language feature. This
+<code class="code">std</code> via the C++11 namespace association language feature. This
method allows the debug and release versions of the same component to
coexist at compile-time and link-time without causing an unreasonable
maintenance burden, while minimizing confusion. Again, this boils down
@@ -254,7 +254,7 @@ namespace std
// namespace __debug __attribute__ ((strong));
inline namespace __debug { }
}
-</pre></div><div class="section" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"/>Link- and run-time coexistence of release- and
+</pre></div><div class="section" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
debug-mode components</h5></div></div></div><p>Because each component has a distinct and separate release and
debug implementation, there is no issue with link-time
coexistence: the separate namespaces result in different mangled
@@ -301,7 +301,7 @@ test02()
release-mode <code class="code">basic_string</code>? While the answer could be
"both", and the difference hidden via renaming a la the
debug/release containers, we must note two things about locale
- facets:</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>They exist as shared state: one can create a facet in one
+ facets:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>They exist as shared state: one can create a facet in one
translation unit and access the facet via the same type name in a
different translation unit. This means that we cannot have two
different versions of locale facets, because the types would not be
@@ -316,10 +316,10 @@ test02()
changes. The effect on users is expected to be minimal, as there are
simple alternatives (e.g., <code class="code">__gnu_debug::basic_string</code>),
and the usability benefit we gain from the ability to mix debug- and
- release-compiled translation units is enormous.</p></div><div class="section" title="Alternatives for Coexistence"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"/>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
+ release-compiled translation units is enormous.</p></div><div class="section" title="Alternatives for Coexistence"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"></a>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
including language-only solutions and solutions that also required
extensions to the C++ front end. The following is a partial list of
- solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
+ solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
far the simplest implementation option, where we do not allow any
coexistence of debug- and release-compiled translation units in a
program. This solution has an extreme negative affect on usability,
@@ -353,7 +353,7 @@ test02()
declarations disallow specialization. This method fails
the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em> Use implementation-specific properties of anonymous
namespaces. </em></span>
- See <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html"> this post
+ See <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html" target="_top"> this post
</a>
This method fails the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em>Extension: allow reopening on namespaces</em></span>: This would
allow the debug mode to effectively alias the
@@ -376,7 +376,7 @@ test02()
functions taking no arguments in mixed-mode settings resulting in
equivalent link names, <code class="code"> vector::push_back() </code> being
one example.
- See <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html">link
+ See <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html" target="_top">link
name</a> </p></li></ul></div><p>Other options may exist for implementing the debug mode, many of
which have probably been considered and others that may still be
lurking. This list may be expanded over time to include other
@@ -388,17 +388,17 @@ test02()
that breaks user specialization), and additional testcases will be
added as we are able to identify other typical problem cases. These
test cases will serve as a benchmark by which we can compare debug
- mode implementations.</p></div></div></div><div class="section" title="Other Implementations"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"/>Other Implementations</h3></div></div></div><p>
+ mode implementations.</p></div></div></div><div class="section" title="Other Implementations"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"></a>Other Implementations</h3></div></div></div><p>
</p><p> There are several existing implementations of debug modes for C++
standard library implementations, although none of them directly
supports debugging for programs using libstdc++. The existing
- implementations include:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html">SafeSTL</a>:
+ implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
SafeSTL was the original debugging version of the Standard Template
Library (STL), implemented by Cay S. Horstmann on top of the
Hewlett-Packard STL. Though it inspired much work in this area, it
has not been kept up-to-date for use with modern compilers or C++
- standard library implementations.</p></li><li class="listitem"><p><a class="link" href="http://www.stlport.org/">STLport</a>: STLport is a free
- implementation of the C++ standard library derived from the <a class="link" href="http://www.sgi.com/tech/stl/">SGI implementation</a>, and
+ standard library implementations.</p></li><li class="listitem"><p><a class="link" href="http://www.stlport.org/" target="_top">STLport</a>: STLport is a free
+ implementation of the C++ standard library derived from the <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">SGI implementation</a>, and
ported to many other platforms. It includes a debug mode that uses a
wrapper model (that in some ways inspired the libstdc++ debug mode
design), although at the time of this writing the debug mode is
@@ -409,4 +409,4 @@ test02()
a full debug-mode implementation (including debugging for
CodeWarrior extensions) and is easy to use, although it meets only
the "Full recompilation" (1) recompilation
- guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td align="left" valign="top">Using </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
+ guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
index 7a7419ac51..82a9183168 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="next" href="bk01pt03ch18s03.html" title="Using"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Semantics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.semantics"/>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="bk01pt03ch18s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
i.e. user-defined functors must not throw exceptions.
Also, the order of execution is not guaranteed for some functions, of course.
Therefore, user-defined functors should not have any concurrent side effects.
@@ -8,4 +8,4 @@ Therefore, user-defined functors should not have any concurrent side effects.
OpenMP parallel regions in concurrent threads,
it is not possible to call parallel STL algorithm in
concurrent threads, either.
-It might work with other compilers, though.</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 18. Parallel Mode </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Using</td></tr></table></div></body></html>
+It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
index b3a3db937c..bcc863b126 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="bk01pt03ch18s02.html" title="Semantics"/><link rel="next" href="bk01pt03ch18s04.html" title="Design"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.using"/>Using</h2></div></div></div><div class="section" title="Prerequisite Compiler Flags"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"/>Prerequisite Compiler Flags</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch18s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section" title="Prerequisite Compiler Flags"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
Any use of parallel functionality requires additional compiler
and runtime support, in particular support for OpenMP. Adding this support is
not difficult: just compile your application with the compiler
flag <code class="literal">-fopenmp</code>. This will link
- in <code class="code">libgomp</code>, the GNU
- OpenMP <a class="link" href="http://gcc.gnu.org/onlinedocs/libgomp">implementation</a>,
+ in <code class="code">libgomp</code>, the
+ OpenMP <a class="link" href="http://gcc.gnu.org/onlinedocs/libgomp/" target="_top">GNU implementation</a>,
whose presence is mandatory.
</p><p>
In addition, hardware that supports atomic operations and a compiler
@@ -17,7 +17,7 @@ In addition, hardware that supports atomic operations and a compiler
as <code class="literal">-march=i686</code>,
<code class="literal">-march=native</code> or <code class="literal">-mcpu=v9</code>. See
the GCC manual for more information.
-</p></div><div class="section" title="Using Parallel Mode"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.parallel_mode"/>Using Parallel Mode</h3></div></div></div><p>
+</p></div><div class="section" title="Using Parallel Mode"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.parallel_mode"></a>Using Parallel Mode</h3></div></div></div><p>
To use the libstdc++ parallel mode, compile your application with
the prerequisite flags as detailed above, and in addition
add <code class="constant">-D_GLIBCXX_PARALLEL</code>. This will convert all
@@ -34,7 +34,7 @@ In addition, hardware that supports atomic operations and a compiler
if no instantiation of a container is passed between the two
translation units. Parallel mode functionality has distinct linkage,
and cannot be confused with normal mode symbols.
-</p></div><div class="section" title="Using Specific Parallel Components"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.specific"/>Using Specific Parallel Components</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+</p></div><div class="section" title="Using Specific Parallel Components"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.specific"></a>Using Specific Parallel Components</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
only specific algorithms need to be parallel-aware, individual
parallel algorithms can be made available explicitly. These
parallel algorithms are functionally equivalent to the standard
@@ -63,4 +63,4 @@ Then compile this code with the prerequisite compiler flags
flags for atomic operations.)
</p><p> The following table provides the names and headers of all the
parallel algorithms that can be used in a similar manner:
-</p><div class="table"><a id="id484380"/><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Algorithm</th><th style="text-align: left">Header</th><th style="text-align: left">Parallel algorithm</th><th style="text-align: left">Parallel header</th></tr></thead><tbody><tr><td style="text-align: left"><code class="function">std::accumulate</code></td><td style="text-align: left"><code class="filename">numeric</code></td><td style="text-align: left"><code class="function">__gnu_parallel::accumulate</code></td><td style="text-align: left"><code class="filename">parallel/numeric</code></td></tr><tr><td style="text-align: left"><code class="function">std::adjacent_difference</code></td><td style="text-align: left"><code class="filename">numeric</code></td><td style="text-align: left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td style="text-align: left"><code class="filename">parallel/numeric</code></td></tr><tr><td style="text-align: left"><code class="function">std::inner_product</code></td><td style="text-align: left"><code class="filename">numeric</code></td><td style="text-align: left"><code class="function">__gnu_parallel::inner_product</code></td><td style="text-align: left"><code class="filename">parallel/numeric</code></td></tr><tr><td style="text-align: left"><code class="function">std::partial_sum</code></td><td style="text-align: left"><code class="filename">numeric</code></td><td style="text-align: left"><code class="function">__gnu_parallel::partial_sum</code></td><td style="text-align: left"><code class="filename">parallel/numeric</code></td></tr><tr><td style="text-align: left"><code class="function">std::adjacent_find</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::adjacent_find</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::count</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::count</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::count_if</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::count_if</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::equal</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::equal</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::find</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::find</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::find_if</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::find_if</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::find_first_of</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::find_first_of</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::for_each</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::for_each</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::generate</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::generate</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::generate_n</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::generate_n</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::lexicographical_compare</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::mismatch</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::mismatch</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::search</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::search</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::search_n</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::search_n</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::transform</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::transform</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::replace</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::replace</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::replace_if</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::replace_if</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::max_element</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::max_element</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::merge</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::merge</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::min_element</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::min_element</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::nth_element</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::nth_element</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::partial_sort</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::partial_sort</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::partition</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::partition</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::random_shuffle</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::random_shuffle</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::set_union</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::set_union</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::set_intersection</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::set_intersection</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::set_symmetric_difference</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::set_difference</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::set_difference</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::sort</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::sort</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::stable_sort</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::stable_sort</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr><tr><td style="text-align: left"><code class="function">std::unique_copy</code></td><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="function">__gnu_parallel::unique_copy</code></td><td style="text-align: left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr><tr><td align="left" valign="top">Semantics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Design</td></tr></table></div></body></html>
+</p><div class="table"><a id="idp16689952"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
index 91c951d385..baf2230d5a 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="bk01pt03ch18s03.html" title="Using"/><link rel="next" href="bk01pt03ch18s05.html" title="Testing"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.design"/>Design</h2></div></div></div><p>
- </p><div class="section" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"/>Interface Basics</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
+ </p><div class="section" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
All parallel algorithms are intended to have signatures that are
equivalent to the ISO C++ algorithms replaced. For instance, the
<code class="function">std::adjacent_find</code> function is declared as:
@@ -36,13 +36,13 @@ function, if no parallel functions are deemed worthy), based on either
compile-time or run-time conditions.
</p><p> The available signature options are specific for the different
algorithms/algorithm classes.</p><p> The general view of overloads for the parallel algorithms look like this:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
(several signatures)</p></li></ul></div><p> Please note that the implementation may use additional functions
(designated with the <code class="code">_switch</code> suffix) to dispatch from the
ISO C++ signature to the correct parallel version. Also, some of the
algorithms do not have support for run-time conditions, so the last
overload is therefore missing.
-</p></div><div class="section" title="Configuration and Tuning"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"/>Configuration and Tuning</h3></div></div></div><div class="section" title="Setting up the OpenMP Environment"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"/>Setting up the OpenMP Environment</h4></div></div></div><p>
+</p></div><div class="section" title="Configuration and Tuning"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"></a>Configuration and Tuning</h3></div></div></div><div class="section" title="Setting up the OpenMP Environment"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"></a>Setting up the OpenMP Environment</h4></div></div></div><p>
Several aspects of the overall runtime environment can be manipulated
by standard OpenMP function calls.
</p><p>
@@ -72,7 +72,7 @@ Other parts of the runtime environment able to be manipulated include
nested parallelism (<code class="function">omp_set_nested</code>), schedule kind
(<code class="function">omp_set_schedule</code>), and others. See the OpenMP
documentation for more information.
-</p></div><div class="section" title="Compile Time Switches"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"/>Compile Time Switches</h4></div></div></div><p>
+</p></div><div class="section" title="Compile Time Switches"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"></a>Compile Time Switches</h4></div></div></div><p>
To force an algorithm to execute sequentially, even though parallelism
is switched on in general via the macro <code class="constant">_GLIBCXX_PARALLEL</code>,
add <code class="classname">__gnu_parallel::sequential_tag()</code> to the end
@@ -126,7 +126,7 @@ several additional choices, namely
<code class="code">__gnu_parallel::balanced_quicksort_tag</code>.
Multiway mergesort comes with the two splitting strategies for multi-way
merging. The quicksort options cannot be used for <code class="code">stable_sort</code>.
-</p></div><div class="section" title="Run Time Settings and Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"/>Run Time Settings and Defaults</h4></div></div></div><p>
+</p></div><div class="section" title="Run Time Settings and Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"></a>Run Time Settings and Defaults</h4></div></div></div><p>
The default parallelization strategy, the choice of specific algorithm
strategy, the minimum threshold limits for individual parallel
algorithms, and aspects of the underlying hardware can be specified as
@@ -175,7 +175,7 @@ i. e. it is a singleton. It can be read and written by calling
<code class="code">__gnu_parallel::_Settings::set</code>, respectively.
Please note that the first call return a const object, so direct manipulation
is forbidden.
-See <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html">
+See <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html" target="_top">
<code class="filename">settings.h</code></a>
for complete details.
</p><p>
@@ -194,7 +194,7 @@ int main()
return 0;
}
-</pre></div></div><div class="section" title="Implementation Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"/>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
+</pre></div></div><div class="section" title="Implementation Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"></a>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
explicitly sequential:
<code class="code">__gnu_serial</code>.
</p><p> Two namespaces contain the parallel mode:
@@ -210,4 +210,4 @@ __gnu_parallel</code>.
</p><p> More information, and an organized index of types and functions
related to the parallel mode on a per-namespace basis, can be found in
the generated source documentation.
-</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr><tr><td align="left" valign="top">Using </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Testing</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
index f00a4a2815..d0c5c24f59 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="bk01pt03ch18s04.html" title="Design"/><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr/></div><div class="section" title="Testing"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.test"/>Testing</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s04.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
Both the normal conformance and regression tests and the
supplemental performance tests work.
</p><p>
@@ -23,4 +23,4 @@
additional software dependencies than the usual bare-boned text
file, and can be generated by using the <code class="code">make
doc-performance</code> rule in the testsuite's Makefile.
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td align="left" valign="top">Design </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
index ce915ddb56..bb2fb69233 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="next" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.design"/>Design</h2></div></div></div><p>
-</p><div class="table"><a id="id486504"/><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">Code Location</th><th style="text-align: left">Use</th></tr></thead><tbody><tr><td style="text-align: left"><code class="code">libstdc++-v3/include/std/*</code></td><td style="text-align: left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td style="text-align: left"><code class="code">libstdc++-v3/include/profile/*</code></td><td style="text-align: left">Profile extension public headers (map, vector, ...).</td></tr><tr><td style="text-align: left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td style="text-align: left">Profile extension internals. Implementation files are
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
+</p><div class="table"><a id="idp16944832"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
only included from <code class="code">impl/profiler.h</code>, which is the only
- file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break"/><p>
-</p><div class="section" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"/>Wrapper Model</h3></div></div></div><p>
+ file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="section" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
In order to get our instrumented library version included instead of the
release one,
we use the same wrapper model as the debug mode.
@@ -25,7 +25,7 @@
Currently, mixing the profile mode with debug and parallel extensions is
not allowed. Mixing them at compile time will result in preprocessor errors.
Mixing them at link time is undefined.
- </p></div><div class="section" title="Instrumentation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"/>Instrumentation</h3></div></div></div><p>
+ </p></div><div class="section" title="Instrumentation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"></a>Instrumentation</h3></div></div></div><p>
Instead of instrumenting every public entry and exit point,
we chose to add instrumentation on demand, as needed
by individual diagnostics.
@@ -44,7 +44,7 @@
</p><p>
All the instrumentation on/off compile time switches live in
<code class="code">include/profile/profiler.h</code>.
- </p></div><div class="section" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"/>Run Time Behavior</h3></div></div></div><p>
+ </p></div><div class="section" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
For practical reasons, the instrumentation library processes the trace
partially
rather than dumping it to disk in raw form. Each event is processed when
@@ -61,20 +61,20 @@
call stack of its constructor location.
</p><p>
For details, see
- <a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
+ <a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
CGO 2009</a>.
- </p></div><div class="section" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"/>Analysis and Diagnostics</h3></div></div></div><p>
+ </p></div><div class="section" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
Final analysis takes place offline, and it is based entirely on the
generated trace and debugging info in the application binary.
See section Diagnostics for a list of analysis types that we plan to support.
</p><p>
The input to the analysis is a table indexed by profile type and call stack.
The data type for each entry depends on the profile type.
- </p></div><div class="section" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"/>Cost Model</h3></div></div></div><p>
+ </p></div><div class="section" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
While it is likely that cost models become complex as we get into
more sophisticated analysis, we will try to follow a simple set of rules
at the beginning.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
The idea is to estimate or measure the cost of all operations
in the original scenario versus the scenario we advise to switch to.
For instance, when advising to change a vector to a list, an occurrence
@@ -98,7 +98,7 @@
For instance, when considering switching from <code class="code">set</code> to
<code class="code">unordered_set</code>, if we detect use of operator <code class="code">++</code>,
we will simply not issue the advice, since this could signal that the use
- care require a sorted container.</p></li></ul></div></div><div class="section" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"/>Reports</h3></div></div></div><p>
+ care require a sorted container.</p></li></ul></div></div><div class="section" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
There are two types of reports. First, if we recognize a pattern for which
we have a substitute that is likely to give better performance, we print
the advice and estimated performance gain. The advice is usually associated
@@ -110,7 +110,7 @@ the top 10 <code class="code">multimap</code> locations
which have the worst data locality in actual traversals.
Although this does not offer a solution,
it helps the user focus on the key problems and ignore the uninteresting ones.
- </p></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"/>Testing</h3></div></div></div><p>
+ </p></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"></a>Testing</h3></div></div></div><p>
First, we want to make sure we preserve the behavior of the release mode.
You can just type <code class="code">"make check-profile"</code>, which
builds and runs the whole test suite in profile mode.
@@ -119,4 +119,4 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
We created a <code class="code">profile</code> directory in the test suite.
Each diagnostic must come with at least two tests, one for false positives
and one for false negatives.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 19. Profile Mode </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
index 37d1ed8e4b..39318952a1 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s02.html" title="Design"/><link rel="next" href="bk01pt03ch19s04.html" title="Empirical Cost Model"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Extensions for Custom Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.api"/>Extensions for Custom Containers</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Extensions for Custom Containers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
Many large projects use their own data structures instead of the ones in the
standard library. If these data structures are similar in functionality
to the standard library, they can be instrumented with the same hooks
that are used to instrument the standard library.
The instrumentation API is exposed in file
<code class="code">profiler.h</code> (look for "Instrumentation hooks").
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td align="left" valign="top">Design </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
index 8fc162b7c7..36c252008a 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers"/><link rel="next" href="bk01pt03ch19s05.html" title="Implementation Issues"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr/></div><div class="section" title="Empirical Cost Model"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.cost_model"/>Empirical Cost Model</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Empirical Cost Model"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
Currently, the cost model uses formulas with predefined relative weights
for alternative containers or container implementations. For instance,
iterating through a vector is X times faster than iterating through a list.
@@ -15,4 +15,4 @@
filled in either by hand or by an automated training mechanism.
The analysis module will then use this database instead of the built in.
generic parameters.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td align="left" valign="top">Extensions for Custom Containers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
index 2d072f0b41..5b323918a5 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s04.html" title="Empirical Cost Model"/><link rel="next" href="bk01pt03ch19s06.html" title="Developer Information"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr/></div><div class="section" title="Implementation Issues"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.implementation"/>Implementation Issues</h2></div></div></div><div class="section" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"/>Stack Traces</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation Issues"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
Accurate stack traces are needed during profiling since we group events by
call context and dynamic instance. Without accurate traces, diagnostics
may be hard to interpret. For instance, when giving advice to the user
@@ -11,24 +11,24 @@
<code class="code">_GLIBCXX_PROFILE_STACK_DEPTH</code> can be set
to 0 if you are willing to give up call context information, or to a small
positive value to reduce run time overhead.
- </p></div><div class="section" title="Symbolization of Instruction Addresses"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"/>Symbolization of Instruction Addresses</h3></div></div></div><p>
+ </p></div><div class="section" title="Symbolization of Instruction Addresses"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"></a>Symbolization of Instruction Addresses</h3></div></div></div><p>
The profiling and analysis phases use only instruction addresses.
An external utility such as addr2line is needed to postprocess the result.
We do not plan to add symbolization support in the profile extension.
This would require access to symbol tables, debug information tables,
external programs or libraries and other system dependent information.
- </p></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"/>Concurrency</h3></div></div></div><p>
+ </p></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"></a>Concurrency</h3></div></div></div><p>
Our current model is simplistic, but precise.
We cannot afford to approximate because some of our diagnostics require
precise matching of operations to container instance and call context.
During profiling, we keep a single information table per diagnostic.
There is a single lock per information table.
- </p></div><div class="section" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"/>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
+ </p></div><div class="section" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
As much as we would like to avoid uses of libstdc++ within our
instrumentation library, containers such as unordered_map are very
appealing. We plan to use them as long as they are named properly
to avoid ambiguity.
- </p></div><div class="section" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"/>Malloc Hooks</h3></div></div></div><p>
+ </p></div><div class="section" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
User applications/libraries can provide malloc hooks.
When the implementation of the malloc hooks uses stdlibc++, there can
be an infinite cycle between the profile mode instrumentation and the
@@ -42,10 +42,10 @@
uses non-recursive locks.
XXX: A definitive solution to this problem would be for the profile extension
to use a custom allocator internally, and perhaps not to use libstdc++.
- </p></div><div class="section" title="Construction and Destruction of Global Objects"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"/>Construction and Destruction of Global Objects</h3></div></div></div><p>
+ </p></div><div class="section" title="Construction and Destruction of Global Objects"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"></a>Construction and Destruction of Global Objects</h3></div></div></div><p>
The profiling library state is initialized at the first call to a profiling
method. This allows us to record the construction of all global objects.
However, we cannot do the same at destruction time. The trace is written
by a function registered by <code class="code">atexit</code>, thus invoked by
<code class="code">exit</code>.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td align="left" valign="top">Empirical Cost Model </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
index ddcc7f5708..2d7d63cbf3 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s05.html" title="Implementation Issues"/><link rel="next" href="bk01pt03ch19s07.html" title="Diagnostics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr/></div><div class="section" title="Developer Information"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.developer"/>Developer Information</h2></div></div></div><div class="section" title="Big Picture"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"/>Big Picture</h3></div></div></div><p>The profile mode headers are included with
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr /></div><div class="section" title="Developer Information"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section" title="Big Picture"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
<code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
<code class="code">include/std/*</code>.
</p><p>Instrumented implementations are provided in
@@ -14,7 +14,7 @@
must ensure (1) that the call is guarded against reentrance and
(2) that the call can be turned off at compile time using a
<code class="code">-D_GLIBCXX_PROFILE_...</code> compiler option.
- </p></div><div class="section" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"/>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
+ </p></div><div class="section" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
</p><p>If you need to instrument a header not already under
<code class="code">include/profile/*</code>, first edit the corresponding header
under <code class="code">include/std/</code> and add a preprocessor directive such
@@ -42,7 +42,7 @@
All names of methods in namespace <code class="code">__gnu_profile</code> called from
<code class="code">profiler.h</code> must start with <code class="code">__trace_magic_</code>.
</p><p>Add the implementation of the diagnostic.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Create new file <code class="code">include/profile/impl/profiler_magic.h</code>.
</p></li><li class="listitem"><p>
Define class <code class="code">__magic_info: public __object_info_base</code>.
@@ -65,4 +65,4 @@
<code class="code">include/profile/impl/profiler_trace.h</code>. Use
<code class="code">__trace_vector_to_list</code> as an example.
</p><p>Add documentation in file <code class="code">doc/xml/manual/profile_mode.xml</code>.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td align="left" valign="top">Implementation Issues </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
index 8c134e75f1..3d448f4c76 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s06.html" title="Developer Information"/><link rel="next" href="ext_allocators.html" title="Chapter 20. Allocators"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr></table><hr/></div><div class="section" title="Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.diagnostics"/>Diagnostics</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s06.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section" title="Diagnostics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
The table below presents all the diagnostics we intend to implement.
Each diagnostic has a corresponding compile time switch
<code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
@@ -18,24 +18,24 @@
A high accuracy means that the diagnostic is unlikely to be wrong.
These grades are not perfect. They are just meant to guide users with
specific needs or time budgets.
- </p><div class="table"><a id="id487386"/><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/><col style="text-align: left" class="c6"/><col style="text-align: left" class="c7"/></colgroup><thead><tr><th style="text-align: left">Group</th><th style="text-align: left">Flag</th><th style="text-align: left">Benefit</th><th style="text-align: left">Cost</th><th style="text-align: left">Freq.</th><th style="text-align: left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
- CONTAINERS</a></td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
- HASHTABLE_TOO_SMALL</a></td><td style="text-align: left">10</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
- HASHTABLE_TOO_LARGE</a></td><td style="text-align: left">5</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
- INEFFICIENT_HASH</a></td><td style="text-align: left">7</td><td style="text-align: left">3</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small" title="Vector Too Small">
- VECTOR_TOO_SMALL</a></td><td style="text-align: left">8</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large" title="Vector Too Large">
- VECTOR_TOO_LARGE</a></td><td style="text-align: left">5</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable" title="Vector to Hashtable">
- VECTOR_TO_HASHTABLE</a></td><td style="text-align: left">7</td><td style="text-align: left">7</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector" title="Hashtable to Vector">
- HASHTABLE_TO_VECTOR</a></td><td style="text-align: left">7</td><td style="text-align: left">7</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list" title="Vector to List">
- VECTOR_TO_LIST</a></td><td style="text-align: left">8</td><td style="text-align: left">5</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector" title="List to Vector">
- LIST_TO_VECTOR</a></td><td style="text-align: left">10</td><td style="text-align: left">5</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord" title="Ordered to Unordered Associative Container">
- ORDERED_TO_UNORDERED</a></td><td style="text-align: left">10</td><td style="text-align: left">5</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">only map/unordered_map</td></tr><tr><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms" title="Algorithms">
- ALGORITHMS</a></td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort" title="Sort Algorithm Performance">
- SORT</a></td><td style="text-align: left">7</td><td style="text-align: left">8</td><td style="text-align: left"> </td><td style="text-align: left">7</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality" title="Data Locality">
- LOCALITY</a></td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch" title="Need Software Prefetch">
- SOFTWARE_PREFETCH</a></td><td style="text-align: left">8</td><td style="text-align: left">8</td><td style="text-align: left"> </td><td style="text-align: left">5</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked" title="Linked Structure Locality">
- RBTREE_LOCALITY</a></td><td style="text-align: left">4</td><td style="text-align: left">8</td><td style="text-align: left"> </td><td style="text-align: left">5</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share" title="False Sharing">
- FALSE_SHARING</a></td><td style="text-align: left">8</td><td style="text-align: left">10</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr></tbody></table></div></div><br class="table-break"/><div class="section" title="Diagnostic Template"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"/>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ </p><div class="table"><a id="idp17050544"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
+ CONTAINERS</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
+ HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
+ HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
+ INEFFICIENT_HASH</a></td><td align="left">7</td><td align="left">3</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small" title="Vector Too Small">
+ VECTOR_TOO_SMALL</a></td><td align="left">8</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large" title="Vector Too Large">
+ VECTOR_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable" title="Vector to Hashtable">
+ VECTOR_TO_HASHTABLE</a></td><td align="left">7</td><td align="left">7</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector" title="Hashtable to Vector">
+ HASHTABLE_TO_VECTOR</a></td><td align="left">7</td><td align="left">7</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list" title="Vector to List">
+ VECTOR_TO_LIST</a></td><td align="left">8</td><td align="left">5</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector" title="List to Vector">
+ LIST_TO_VECTOR</a></td><td align="left">10</td><td align="left">5</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord" title="Ordered to Unordered Associative Container">
+ ORDERED_TO_UNORDERED</a></td><td align="left">10</td><td align="left">5</td><td align="left"> </td><td align="left">10</td><td align="left">only map/unordered_map</td></tr><tr><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms" title="Algorithms">
+ ALGORITHMS</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort" title="Sort Algorithm Performance">
+ SORT</a></td><td align="left">7</td><td align="left">8</td><td align="left"> </td><td align="left">7</td><td align="left">no</td></tr><tr><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality" title="Data Locality">
+ LOCALITY</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch" title="Need Software Prefetch">
+ SOFTWARE_PREFETCH</a></td><td align="left">8</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked" title="Linked Structure Locality">
+ RBTREE_LOCALITY</a></td><td align="left">4</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share" title="False Sharing">
+ FALSE_SHARING</a></td><td align="left">8</td><td align="left">10</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Diagnostic Template"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"></a>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> What problem will it diagnose?
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>.
@@ -52,10 +52,10 @@ program code
...
advice sample
</pre><p>
-</p></li></ul></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"/>Containers</h3></div></div></div><p>
+</p></li></ul></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"></a>Containers</h3></div></div></div><p>
<span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_CONTAINERS</code>.
-</p><div class="section" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"/>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p><div class="section" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
rehash operations, small construction size and large destruction size.
@@ -81,7 +81,7 @@ advice sample
foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Hashtable Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"/>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Hashtable Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"></a>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables which are
never filled up because fewer elements than reserved are ever
@@ -110,7 +110,7 @@ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1
foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N
bytes of memory and M iteration steps.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Inefficient Hash"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"/>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Inefficient Hash"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"></a>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with polarized
distribution.
@@ -141,7 +141,7 @@ class dumb_hash {
hs.find(i);
}
</pre><p>
-</p></li></ul></div></div><div class="section" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"/>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
resize operations, small construction size and large destruction size..
@@ -166,7 +166,7 @@ class dumb_hash {
foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
copying 4000000 bytes and 20 memory allocations and deallocations.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"/>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors which are
never filled up because fewer elements than reserved are ever
@@ -192,7 +192,7 @@ copying 4000000 bytes and 20 memory allocations and deallocations.
foo.cc:1: advice: Changing initial vector size from 100 to 10 saves N
bytes of memory and may reduce the number of cache and TLB misses.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"/>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
<code class="code">vector</code> that can be substituted with <code class="code">unordered_set</code>
@@ -223,7 +223,7 @@ bytes of memory and may reduce the number of cache and TLB misses.
foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000
comparisons.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"/>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
<code class="code">unordered_set</code> that can be substituted with <code class="code">vector</code>
@@ -252,7 +252,7 @@ comparisons.
foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N
indirections and may achieve better data locality.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"/>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
<code class="code">vector</code> could be substituted with <code class="code">list</code> for
@@ -282,7 +282,7 @@ indirections and may achieve better data locality.
foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
operations.
</pre><p>
-</p></li></ul></div></div><div class="section" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"/>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
<code class="code">list</code> could be substituted with <code class="code">vector</code> for
@@ -309,7 +309,7 @@ operations.
foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect
memory references.
</pre><p>
-</p></li></ul></div></div><div class="section" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"/>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
<code class="code">list</code> could be substituted with <code class="code">forward_list</code> for
@@ -339,7 +339,7 @@ memory references.
foo.cc:1: advice: Change "list" to "forward_list".
</pre><p>
-</p></li></ul></div></div><div class="section" title="Ordered to Unordered Associative Container"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"/>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Ordered to Unordered Associative Container"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"></a>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where ordered
associative containers can be replaced with unordered ones.
@@ -366,18 +366,18 @@ foo.cc:1: advice: Change "list" to "forward_list".
7 sum += *s.find(i);
8 }
</pre><p>
-</p></li></ul></div></div></div><div class="section" title="Algorithms"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"/>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div></div><div class="section" title="Algorithms"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"></a>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_ALGORITHMS</code>.
- </p><div class="section" title="Sort Algorithm Performance"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"/>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ </p><div class="section" title="Sort Algorithm Performance"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"></a>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_SORT</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of sort algorithm
performance based on actual input. For instance, advise Radix Sort over
Quick Sort for a particular call context.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
See papers:
- <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981">
+ <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
A framework for adaptive algorithm selection in STAPL</a> and
- <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227">
+ <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
Optimizing Sorting with Machine Learning Algorithms</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>60%.
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span> Change sort algorithm
@@ -389,9 +389,9 @@ foo.cc:1: advice: Change "list" to "forward_list".
Runtime(algo) for algo in [radix, quick, merge, ...]</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
</pre><p>
-</p></li></ul></div></div></div><div class="section" title="Data Locality"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"/>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div></div><div class="section" title="Data Locality"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"></a>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_LOCALITY</code>.
- </p><div class="section" title="Need Software Prefetch"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"/>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ </p><div class="section" title="Need Software Prefetch"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"></a>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Discover sequences of indirect
memory accesses that are not regular, thus cannot be predicted by
@@ -434,7 +434,7 @@ foo.cc:1: advice: Change "list" to "forward_list".
foo.cc:7: advice: Insert prefetch instruction.
</pre><p>
-</p></li></ul></div></div><div class="section" title="Linked Structure Locality"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"/>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="Linked Structure Locality"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"></a>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of locality of
objects stored in linked structures (lists, red-black trees and hashtables)
@@ -442,7 +442,7 @@ foo.cc:7: advice: Insert prefetch instruction.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>Allocation can be tuned
to a specific traversal pattern, to result in better data locality.
See paper:
- <a class="link" href="http://www.springerlink.com/content/8085744l00x72662/">
+ <a class="link" href="http://www.springerlink.com/content/8085744l00x72662/" target="_top">
Custom Memory Allocation for Free</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>30%.
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
@@ -479,13 +479,13 @@ foo.cc:7: advice: Insert prefetch instruction.
foo.cc:5: advice: High scatter score NNN for set built here. Consider changing
the allocation sequence or switching to a structure conscious allocator.
</pre><p>
-</p></li></ul></div></div></div><div class="section" title="Multithreaded Data Access"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"/>Multithreaded Data Access</h3></div></div></div><p>
+</p></li></ul></div></div></div><div class="section" title="Multithreaded Data Access"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"></a>Multithreaded Data Access</h3></div></div></div><p>
The diagnostics in this group are not meant to be implemented short term.
They require compiler support to know when container elements are written
to. Instrumentation can only tell us when elements are referenced.
</p><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_MULTITHREADED</code>.
- </p><div class="section" title="Data Dependence Violations at Container Level"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"/>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ </p><div class="section" title="Data Dependence Violations at Container Level"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"></a>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_DDTEST</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect container elements
that are referenced from multiple threads in the parallel region or
@@ -501,7 +501,7 @@ the allocation sequence or switching to a structure conscious allocator.
Keep a shadow for each container. Record iterator dereferences and
container member accesses. Issue advice for elements referenced by
multiple threads.
- See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148">
+ See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
The LRPD test: speculative run-time parallelization of loops with
privatization and reduction parallelization</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
@@ -509,7 +509,7 @@ the allocation sequence or switching to a structure conscious allocator.
</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
</pre><p>
-</p></li></ul></div></div><div class="section" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"/>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+</p></li></ul></div></div><div class="section" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_FALSE_SHARING</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect elements in the
same container which share a cache line, are written by at least one
@@ -542,7 +542,7 @@ OMP_NUM_THREADS=2 ./a.out
foo.cc:1: advice: Change container structure or padding to avoid false
sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
</pre><p>
-</p></li></ul></div></div></div><div class="section" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"/>Statistics</h3></div></div></div><p>
+</p></li></ul></div></div></div><div class="section" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
<span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_STATISTICS</code>.
</p><p>
@@ -555,4 +555,4 @@ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
This diagnostic will not issue any advice, but it will print statistics for
each container construction site. The statistics will contain the cost
of each operation actually performed on the container.
-</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr><tr><td align="left" valign="top">Developer Information </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 20. Allocators</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. The mt_allocator</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html
new file mode 100644
index 0000000000..db0141c928
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="bk01pt03ch20s03.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
+describing the characteristics of the memory pool, a policy class
+containing this pool that links instantiation types to common or
+individual pools, and a class inheriting from the policy class that is
+the actual allocator.
+</p><p>The datum describing pools characteristics is
+</p><pre class="programlisting">
+ template&lt;bool _Thread&gt;
+ class __pool
+</pre><p> This class is parametrized on thread support, and is explicitly
+specialized for both multiple threads (with <code class="code">bool==true</code>)
+and single threads (via <code class="code">bool==false</code>.) It is possible to
+use a custom pool datum instead of the default class that is provided.
+</p><p> There are two distinct policy classes, each of which can be used
+with either type of underlying pool datum.
+</p><pre class="programlisting">
+ template&lt;bool _Thread&gt;
+ struct __common_pool_policy
+
+ template&lt;typename _Tp, bool _Thread&gt;
+ struct __per_type_pool_policy
+</pre><p> The first policy, <code class="code">__common_pool_policy</code>, implements a
+common pool. This means that allocators that are instantiated with
+different types, say <code class="code">char</code> and <code class="code">long</code> will both
+use the same pool. This is the default policy.
+</p><p> The second policy, <code class="code">__per_type_pool_policy</code>, implements
+a separate pool for each instantiating type. Thus, <code class="code">char</code>
+and <code class="code">long</code> will use separate pools. This allows per-type
+tuning, for instance.
+</p><p> Putting this all together, the actual allocator class is
+</p><pre class="programlisting">
+ template&lt;typename _Tp, typename _Poolp = __default_policy&gt;
+ class __mt_alloc : public __mt_alloc_base&lt;_Tp&gt;, _Poolp
+</pre><p> This class has the interface required for standard library allocator
+classes, namely member functions <code class="code">allocate</code> and
+<code class="code">deallocate</code>, plus others.
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html
new file mode 100644
index 0000000000..89066482cc
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="bk01pt03ch20s02.html" title="Design Issues" /><link rel="next" href="bk01pt03ch20s04.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch20s02.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section" title="Tunable Parameters"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
+exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
+these parameters, which include settings for
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
+happen before any allocations take place, when the allocator itself is
+initialized. For instance:
+</p><pre class="programlisting">
+#include &lt;ext/mt_allocator.h&gt;
+
+struct pod
+{
+ int i;
+ int j;
+};
+
+int main()
+{
+ typedef pod value_type;
+ typedef __gnu_cxx::__mt_alloc&lt;value_type&gt; allocator_type;
+ typedef __gnu_cxx::__pool_base::_Tune tune_type;
+
+ tune_type t_default;
+ tune_type t_opt(16, 5120, 32, 5120, 20, 10, false);
+ tune_type t_single(16, 5120, 32, 5120, 1, 10, false);
+
+ tune_type t;
+ t = allocator_type::_M_get_options();
+ allocator_type::_M_set_options(t_opt);
+ t = allocator_type::_M_get_options();
+
+ allocator_type a;
+ allocator_type::pointer p1 = a.allocate(128);
+ allocator_type::pointer p2 = a.allocate(5128);
+
+ a.deallocate(p1, 128);
+ a.deallocate(p2, 5128);
+
+ return 0;
+}
+</pre></div><div class="section" title="Initialization"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.init"></a>Initialization</h3></div></div></div><p>
+The static variables (pointers to freelists, tuning parameters etc)
+are initialized as above, or are set to the global defaults.
+</p><p>
+The very first allocate() call will always call the
+_S_initialize_once() function. In order to make sure that this
+function is called exactly once we make use of a __gthread_once call
+in MT applications and check a static bool (_S_init) in ST
+applications.
+</p><p>
+The _S_initialize() function:
+- If the GLIBCXX_FORCE_NEW environment variable is set, it sets the bool
+ _S_force_new to true and then returns. This will cause subsequent calls to
+ allocate() to return memory directly from a new() call, and deallocate will
+ only do a delete() call.
+</p><p>
+- If the GLIBCXX_FORCE_NEW environment variable is not set, both ST and MT
+ applications will:
+ - Calculate the number of bins needed. A bin is a specific power of two size
+ of bytes. I.e., by default the allocator will deal with requests of up to
+ 128 bytes (or whatever the value of _S_max_bytes is when _S_init() is
+ called). This means that there will be bins of the following sizes
+ (in bytes): 1, 2, 4, 8, 16, 32, 64, 128.
+
+ - Create the _S_binmap array. All requests are rounded up to the next
+ "large enough" bin. I.e., a request for 29 bytes will cause a block from
+ the "32 byte bin" to be returned to the application. The purpose of
+ _S_binmap is to speed up the process of finding out which bin to use.
+ I.e., the value of _S_binmap[ 29 ] is initialized to 5 (bin 5 = 32 bytes).
+</p><p>
+ - Create the _S_bin array. This array consists of bin_records. There will be
+ as many bin_records in this array as the number of bins that we calculated
+ earlier. I.e., if _S_max_bytes = 128 there will be 8 entries.
+ Each bin_record is then initialized:
+ - bin_record-&gt;first = An array of pointers to block_records. There will be
+ as many block_records pointers as there are maximum number of threads
+ (in a ST application there is only 1 thread, in a MT application there
+ are _S_max_threads).
+ This holds the pointer to the first free block for each thread in this
+ bin. I.e., if we would like to know where the first free block of size 32
+ for thread number 3 is we would look this up by: _S_bin[ 5 ].first[ 3 ]
+
+ The above created block_record pointers members are now initialized to
+ their initial values. I.e. _S_bin[ n ].first[ n ] = NULL;
+</p><p>
+- Additionally a MT application will:
+ - Create a list of free thread id's. The pointer to the first entry
+ is stored in _S_thread_freelist_first. The reason for this approach is
+ that the __gthread_self() call will not return a value that corresponds to
+ the maximum number of threads allowed but rather a process id number or
+ something else. So what we do is that we create a list of thread_records.
+ This list is _S_max_threads long and each entry holds a size_t thread_id
+ which is initialized to 1, 2, 3, 4, 5 and so on up to _S_max_threads.
+ Each time a thread calls allocate() or deallocate() we call
+ _S_get_thread_id() which looks at the value of _S_thread_key which is a
+ thread local storage pointer. If this is NULL we know that this is a newly
+ created thread and we pop the first entry from this list and saves the
+ pointer to this record in the _S_thread_key variable. The next time
+ we will get the pointer to the thread_record back and we use the
+ thread_record-&gt;thread_id as identification. I.e., the first thread that
+ calls allocate will get the first record in this list and thus be thread
+ number 1 and will then find the pointer to its first free 32 byte block
+ in _S_bin[ 5 ].first[ 1 ]
+ When we create the _S_thread_key we also define a destructor
+ (_S_thread_key_destr) which means that when the thread dies, this
+ thread_record is returned to the front of this list and the thread id
+ can then be reused if a new thread is created.
+ This list is protected by a mutex (_S_thread_freelist_mutex) which is only
+ locked when records are removed or added to the list.
+</p><p>
+ - Initialize the free and used counters of each bin_record:
+ - bin_record-&gt;free = An array of size_t. This keeps track of the number
+ of blocks on a specific thread's freelist in each bin. I.e., if a thread
+ has 12 32-byte blocks on it's freelists and allocates one of these, this
+ counter would be decreased to 11.
+
+ - bin_record-&gt;used = An array of size_t. This keeps track of the number
+ of blocks currently in use of this size by this thread. I.e., if a thread
+ has made 678 requests (and no deallocations...) of 32-byte blocks this
+ counter will read 678.
+
+ The above created arrays are now initialized with their initial values.
+ I.e. _S_bin[ n ].free[ n ] = 0;
+</p><p>
+ - Initialize the mutex of each bin_record: The bin_record-&gt;mutex
+ is used to protect the global freelist. This concept of a global
+ freelist is explained in more detail in the section "A multi
+ threaded example", but basically this mutex is locked whenever a
+ block of memory is retrieved or returned to the global freelist
+ for this specific bin. This only occurs when a number of blocks
+ are grabbed from the global list to a thread specific list or when
+ a thread decides to return some blocks to the global freelist.
+</p></div><div class="section" title="Deallocation Notes"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.deallocation"></a>Deallocation Notes</h3></div></div></div><p> Notes about deallocation. This allocator does not explicitly
+release memory. Because of this, memory debugging programs like
+valgrind or purify may notice leaks: sorry about this
+inconvenience. Operating systems will reclaim allocated memory at
+program termination anyway. If sidestepping this kind of noise is
+desired, there are three options: use an allocator, like
+<code class="code">new_allocator</code> that releases memory while debugging, use
+GLIBCXX_FORCE_NEW to bypass the allocator's internal pools, or use a
+custom pool datum that releases resources on destruction.
+</p><p>
+ On systems with the function <code class="code">__cxa_atexit</code>, the
+allocator can be forced to free all memory allocated before program
+termination with the member function
+<code class="code">__pool_type::_M_destroy</code>. However, because this member
+function relies on the precise and exactly-conforming ordering of
+static destructors, including those of a static local
+<code class="code">__pool</code> object, it should not be used, ever, on systems
+that don't have the necessary underlying support. In addition, in
+practice, forcing deallocation can be tricky, as it requires the
+<code class="code">__pool</code> object to be fully-constructed before the object
+that uses it is fully constructed. For most (but not all) STL
+containers, this works, as an instance of the allocator is constructed
+as part of a container's constructor. However, this assumption is
+implementation-specific, and subject to change. For an example of a
+pool that frees memory, see the following
+ <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup" target="_top">
+ example.</a>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html
new file mode 100644
index 0000000000..a094e22185
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="bk01pt03ch20s03.html" title="Implementation" /><link rel="next" href="bk01pt03ch20s05.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch20s03.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Single Thread Example"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
+Let's start by describing how the data on a freelist is laid out in memory.
+This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
+</p><pre class="programlisting">
++----------------+
+| next* ---------|--+ (_S_bin[ 3 ].first[ 3 ] points here)
+| | |
+| | |
+| | |
++----------------+ |
+| thread_id = 3 | |
+| | |
+| | |
+| | |
++----------------+ |
+| DATA | | (A pointer to here is what is returned to the
+| | | the application when needed)
+| | |
+| | |
+| | |
+| | |
+| | |
+| | |
++----------------+ |
++----------------+ |
+| next* |&lt;-+ (If next == NULL it's the last one on the list)
+| |
+| |
+| |
++----------------+
+| thread_id = 3 |
+| |
+| |
+| |
++----------------+
+| DATA |
+| |
+| |
+| |
+| |
+| |
+| |
+| |
++----------------+
+</pre><p>
+With this in mind we simplify things a bit for a while and say that there is
+only one thread (a ST application). In this case all operations are made to
+what is referred to as the global pool - thread id 0 (No thread may be
+assigned this id since they span from 1 to _S_max_threads in a MT application).
+</p><p>
+When the application requests memory (calling allocate()) we first look at the
+requested size and if this is &gt; _S_max_bytes we call new() directly and return.
+</p><p>
+If the requested size is within limits we start by finding out from which
+bin we should serve this request by looking in _S_binmap.
+</p><p>
+A quick look at _S_bin[ bin ].first[ 0 ] tells us if there are any blocks of
+this size on the freelist (0). If this is not NULL - fine, just remove the
+block that _S_bin[ bin ].first[ 0 ] points to from the list,
+update _S_bin[ bin ].first[ 0 ] and return a pointer to that blocks data.
+</p><p>
+If the freelist is empty (the pointer is NULL) we must get memory from the
+system and build us a freelist within this memory. All requests for new memory
+is made in chunks of _S_chunk_size. Knowing the size of a block_record and
+the bytes that this bin stores we then calculate how many blocks we can create
+within this chunk, build the list, remove the first block, update the pointer
+(_S_bin[ bin ].first[ 0 ]) and return a pointer to that blocks data.
+</p><p>
+Deallocation is equally simple; the pointer is casted back to a block_record
+pointer, lookup which bin to use based on the size, add the block to the front
+of the global freelist and update the pointer as needed
+(_S_bin[ bin ].first[ 0 ]).
+</p><p>
+The decision to add deallocated blocks to the front of the freelist was made
+after a set of performance measurements that showed that this is roughly 10%
+faster than maintaining a set of "last pointers" as well.
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Multiple Thread Example</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html b/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html
new file mode 100644
index 0000000000..778b86c9a0
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="bk01pt03ch20s04.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch20s04.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section" title="Multiple Thread Example"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
+In the ST example we never used the thread_id variable present in each block.
+Let's start by explaining the purpose of this in a MT application.
+</p><p>
+The concept of "ownership" was introduced since many MT applications
+allocate and deallocate memory to shared containers from different
+threads (such as a cache shared amongst all threads). This introduces
+a problem if the allocator only returns memory to the current threads
+freelist (I.e., there might be one thread doing all the allocation and
+thus obtaining ever more memory from the system and another thread
+that is getting a longer and longer freelist - this will in the end
+consume all available memory).
+</p><p>
+Each time a block is moved from the global list (where ownership is
+irrelevant), to a threads freelist (or when a new freelist is built
+from a chunk directly onto a threads freelist or when a deallocation
+occurs on a block which was not allocated by the same thread id as the
+one doing the deallocation) the thread id is set to the current one.
+</p><p>
+What's the use? Well, when a deallocation occurs we can now look at
+the thread id and find out if it was allocated by another thread id
+and decrease the used counter of that thread instead, thus keeping the
+free and used counters correct. And keeping the free and used counters
+corrects is very important since the relationship between these two
+variables decides if memory should be returned to the global pool or
+not when a deallocation occurs.
+</p><p>
+When the application requests memory (calling allocate()) we first
+look at the requested size and if this is &gt;_S_max_bytes we call new()
+directly and return.
+</p><p>
+If the requested size is within limits we start by finding out from which
+bin we should serve this request by looking in _S_binmap.
+</p><p>
+A call to _S_get_thread_id() returns the thread id for the calling thread
+(and if no value has been set in _S_thread_key, a new id is assigned and
+returned).
+</p><p>
+A quick look at _S_bin[ bin ].first[ thread_id ] tells us if there are
+any blocks of this size on the current threads freelist. If this is
+not NULL - fine, just remove the block that _S_bin[ bin ].first[
+thread_id ] points to from the list, update _S_bin[ bin ].first[
+thread_id ], update the free and used counters and return a pointer to
+that blocks data.
+</p><p>
+If the freelist is empty (the pointer is NULL) we start by looking at
+the global freelist (0). If there are blocks available on the global
+freelist we lock this bins mutex and move up to block_count (the
+number of blocks of this bins size that will fit into a _S_chunk_size)
+or until end of list - whatever comes first - to the current threads
+freelist and at the same time change the thread_id ownership and
+update the counters and pointers. When the bins mutex has been
+unlocked, we remove the block that _S_bin[ bin ].first[ thread_id ]
+points to from the list, update _S_bin[ bin ].first[ thread_id ],
+update the free and used counters, and return a pointer to that blocks
+data.
+</p><p>
+The reason that the number of blocks moved to the current threads
+freelist is limited to block_count is to minimize the chance that a
+subsequent deallocate() call will return the excess blocks to the
+global freelist (based on the _S_freelist_headroom calculation, see
+below).
+</p><p>
+However if there isn't any memory on the global pool we need to get
+memory from the system - this is done in exactly the same way as in a
+single threaded application with one major difference; the list built
+in the newly allocated memory (of _S_chunk_size size) is added to the
+current threads freelist instead of to the global.
+</p><p>
+The basic process of a deallocation call is simple: always add the
+block to the front of the current threads freelist and update the
+counters and pointers (as described earlier with the specific check of
+ownership that causes the used counter of the thread that originally
+allocated the block to be decreased instead of the current threads
+counter).
+</p><p>
+And here comes the free and used counters to service. Each time a
+deallocation() call is made, the length of the current threads
+freelist is compared to the amount memory in use by this thread.
+</p><p>
+Let's go back to the example of an application that has one thread
+that does all the allocations and one that deallocates. Both these
+threads use say 516 32-byte blocks that was allocated during thread
+creation for example. Their used counters will both say 516 at this
+point. The allocation thread now grabs 1000 32-byte blocks and puts
+them in a shared container. The used counter for this thread is now
+1516.
+</p><p>
+The deallocation thread now deallocates 500 of these blocks. For each
+deallocation made the used counter of the allocating thread is
+decreased and the freelist of the deallocation thread gets longer and
+longer. But the calculation made in deallocate() will limit the length
+of the freelist in the deallocation thread to _S_freelist_headroom %
+of it's used counter. In this case, when the freelist (given that the
+_S_freelist_headroom is at it's default value of 10%) exceeds 52
+(516/10) blocks will be returned to the global pool where the
+allocating thread may pick them up and reuse them.
+</p><p>
+In order to reduce lock contention (since this requires this bins
+mutex to be locked) this operation is also made in chunks of blocks
+(just like when chunks of blocks are moved from the global freelist to
+a threads freelist mentioned above). The "formula" used can probably
+be improved to further reduce the risk of blocks being "bounced back
+and forth" between freelists.
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. The bitmap_allocator</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
index eba8cfb31d..aba4fbed50 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
@@ -1,43 +1,313 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>HP/SGI</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_containers.html" title="Chapter 21. Containers"/><link rel="prev" href="ext_containers.html" title="Chapter 21. Containers"/><link rel="next" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">HP/SGI</th></tr><tr><td align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="HP/SGI"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.sgi"/>HP/SGI</h2></div></div></div><p>
- </p><p>A few extensions and nods to backwards-compatibility have been made with
- containers. Those dealing with older SGI-style allocators are dealt with
- elsewhere. The remaining ones all deal with bits:
-</p><p>The old pre-standard <code class="code">bit_vector</code> class is present for
- backwards compatibility. It is simply a typedef for the
- <code class="code">vector&lt;bool&gt;</code> specialization.
-</p><p>The <code class="code">bitset</code> class has a number of extensions, described in the
- rest of this item. First, we'll mention that this implementation of
- <code class="code">bitset&lt;N&gt;</code> is specialized for cases where N number of
- bits will fit into a single word of storage. If your choice of N is
- within that range (&lt;=32 on i686-pc-linux-gnu, for example), then all
- of the operations will be faster.
-</p><p>There are
- versions of single-bit test, set, reset, and flip member functions which
- do no range-checking. If we call them member functions of an instantiation
- of "bitset&lt;N&gt;," then their names and signatures are:
-</p><pre class="programlisting">
- bitset&lt;N&gt;&amp; _Unchecked_set (size_t pos);
- bitset&lt;N&gt;&amp; _Unchecked_set (size_t pos, int val);
- bitset&lt;N&gt;&amp; _Unchecked_reset (size_t pos);
- bitset&lt;N&gt;&amp; _Unchecked_flip (size_t pos);
- bool _Unchecked_test (size_t pos);
- </pre><p>Note that these may in fact be removed in the future, although we have
- no present plans to do so (and there doesn't seem to be any immediate
- reason to).
-</p><p>The semantics of member function <code class="code">operator[]</code> are not specified
- in the C++ standard. A long-standing defect report calls for sensible
- obvious semantics, which are already implemented here: <code class="code">op[]</code>
- on a const bitset returns a bool, and for a non-const bitset returns a
- <code class="code">reference</code> (a nested type). However, this implementation does
- no range-checking on the index argument, which is in keeping with other
- containers' <code class="code">op[]</code> requirements. The defect report's proposed
- resolution calls for range-checking to be done. We'll just wait and see...
-</p><p>Finally, two additional searching functions have been added. They return
- the index of the first "on" bit, and the index of the first
- "on" bit that is after <code class="code">prev</code>, respectively:
-</p><pre class="programlisting">
- size_t _Find_first() const;
- size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 21. Containers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Deprecated HP/SGI</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"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section" title="Free List Store"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
+ The Free List Store (referred to as FLS for the remaining part of this
+ document) is the Global memory pool that is shared by all instances of
+ the bitmapped allocator instantiated for any type. This maintains a
+ sorted order of all free memory blocks given back to it by the
+ bitmapped allocator, and is also responsible for giving memory to the
+ bitmapped allocator when it asks for more.
+ </p><p>
+ Internally, there is a Free List threshold which indicates the
+ Maximum number of free lists that the FLS can hold internally
+ (cache). Currently, this value is set at 64. So, if there are
+ more than 64 free lists coming in, then some of them will be given
+ back to the OS using operator delete so that at any given time the
+ Free List's size does not exceed 64 entries. This is done because
+ a Binary Search is used to locate an entry in a free list when a
+ request for memory comes along. Thus, the run-time complexity of
+ the search would go up given an increasing size, for 64 entries
+ however, lg(64) == 6 comparisons are enough to locate the correct
+ free list if it exists.
+ </p><p>
+ Suppose the free list size has reached its threshold, then the
+ largest block from among those in the list and the new block will
+ be selected and given back to the OS. This is done because it
+ reduces external fragmentation, and allows the OS to use the
+ larger blocks later in an orderly fashion, possibly merging them
+ later. Also, on some systems, large blocks are obtained via calls
+ to mmap, so giving them back to free system resources becomes most
+ important.
+ </p><p>
+ The function _S_should_i_give decides the policy that determines
+ whether the current block of memory should be given to the
+ allocator for the request that it has made. That's because we may
+ not always have exact fits for the memory size that the allocator
+ requests. We do this mainly to prevent external fragmentation at
+ the cost of a little internal fragmentation. Now, the value of
+ this internal fragmentation has to be decided by this function. I
+ can see 3 possibilities right now. Please add more as and when you
+ find better strategies.
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Equal size check. Return true only when the 2 blocks are of equal
+size.</p></li><li class="listitem"><p>Difference Threshold: Return true only when the _block_size is
+greater than or equal to the _required_size, and if the _BS is &gt; _RS
+by a difference of less than some THRESHOLD value, then return true,
+else return false. </p></li><li class="listitem"><p>Percentage Threshold. Return true only when the _block_size is
+greater than or equal to the _required_size, and if the _BS is &gt; _RS
+by a percentage of less than some THRESHOLD value, then return true,
+else return false.</p></li></ol></div><p>
+ Currently, (3) is being used with a value of 36% Maximum wastage per
+ Super Block.
+ </p></div><div class="section" title="Super Block"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block"></a>Super Block</h3></div></div></div><p>
+ A super block is the block of memory acquired from the FLS from
+ which the bitmap allocator carves out memory for single objects
+ and satisfies the user's requests. These super blocks come in
+ sizes that are powers of 2 and multiples of 32
+ (_Bits_Per_Block). Yes both at the same time! That's because the
+ next super block acquired will be 2 times the previous one, and
+ also all super blocks have to be multiples of the _Bits_Per_Block
+ value.
+ </p><p>
+ How does it interact with the free list store?
+ </p><p>
+ The super block is contained in the FLS, and the FLS is responsible for
+ getting / returning Super Bocks to and from the OS using operator new
+ as defined by the C++ standard.
+ </p></div><div class="section" title="Super Block Data Layout"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block_data"></a>Super Block Data Layout</h3></div></div></div><p>
+ Each Super Block will be of some size that is a multiple of the
+ number of Bits Per Block. Typically, this value is chosen as
+ Bits_Per_Byte x sizeof(size_t). On an x86 system, this gives the
+ figure 8 x 4 = 32. Thus, each Super Block will be of size 32
+ x Some_Value. This Some_Value is sizeof(value_type). For now, let
+ it be called 'K'. Thus, finally, Super Block size is 32 x K bytes.
+ </p><p>
+ This value of 32 has been chosen because each size_t has 32-bits
+ and Maximum use of these can be made with such a figure.
+ </p><p>
+ Consider a block of size 64 ints. In memory, it would look like this:
+ (assume a 32-bit system where, size_t is a 32-bit entity).
+ </p><div class="table"><a id="idp17461952"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ The first Column(268) represents the size of the Block in bytes as
+ seen by the Bitmap Allocator. Internally, a global free list is
+ used to keep track of the free blocks used and given back by the
+ bitmap allocator. It is this Free List Store that is responsible
+ for writing and managing this information. Actually the number of
+ bytes allocated in this case would be: 4 + 4 + (4x2) + (64x4) =
+ 272 bytes, but the first 4 bytes are an addition by the Free List
+ Store, so the Bitmap Allocator sees only 268 bytes. These first 4
+ bytes about which the bitmapped allocator is not aware hold the
+ value 268.
+ </p><p>
+ What do the remaining values represent?</p><p>
+ The 2nd 4 in the expression is the sizeof(size_t) because the
+ Bitmapped Allocator maintains a used count for each Super Block,
+ which is initially set to 0 (as indicated in the diagram). This is
+ incremented every time a block is removed from this super block
+ (allocated), and decremented whenever it is given back. So, when
+ the used count falls to 0, the whole super block will be given
+ back to the Free List Store.
+ </p><p>
+ The value 4294967295 represents the integer corresponding to the bit
+ representation of all bits set: 11111111111111111111111111111111.
+ </p><p>
+ The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits
+ x 2,
+ which is 8-bytes, or 2 x sizeof(size_t).
+ </p></div><div class="section" title="Maximum Wasted Percentage"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.max_wasted"></a>Maximum Wasted Percentage</h3></div></div></div><p>
+ This has nothing to do with the algorithm per-se,
+ only with some vales that must be chosen correctly to ensure that the
+ allocator performs well in a real word scenario, and maintains a good
+ balance between the memory consumption and the allocation/deallocation
+ speed.
+ </p><p>
+ The formula for calculating the maximum wastage as a percentage:
+ </p><p>
+(32 x k + 1) / (2 x (32 x k + 1 + 32 x c)) x 100.
+ </p><p>
+ where k is the constant overhead per node (e.g., for list, it is
+ 8 bytes, and for map it is 12 bytes) and c is the size of the
+ base type on which the map/list is instantiated. Thus, suppose the
+ type1 is int and type2 is double, they are related by the relation
+ sizeof(double) == 2*sizeof(int). Thus, all types must have this
+ double size relation for this formula to work properly.
+ </p><p>
+ Plugging-in: For List: k = 8 and c = 4 (int and double), we get:
+ 33.376%
+ </p><p>
+For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
+ </p><p>
+ Thus, knowing these values, and based on the sizeof(value_type), we may
+ create a function that returns the Max_Wastage_Percentage for us to use.
+ </p></div><div class="section" title="allocate"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.allocate"></a><code class="function">allocate</code></h3></div></div></div><p>
+ The allocate function is specialized for single object allocation
+ ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's
+ specialized algorithm be used. Otherwise, the request is satisfied
+ directly by calling operator new.
+ </p><p>
+ Suppose n == 1, then the allocator does the following:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Checks to see whether a free block exists somewhere in a region
+ of memory close to the last satisfied request. If so, then that
+ block is marked as allocated in the bit map and given to the
+ user. If not, then (2) is executed.
+ </p></li><li class="listitem"><p>
+ Is there a free block anywhere after the current block right
+ up to the end of the memory that we have? If so, that block is
+ found, and the same procedure is applied as above, and
+ returned to the user. If not, then (3) is executed.
+ </p></li><li class="listitem"><p>
+ Is there any block in whatever region of memory that we own
+ free? This is done by checking
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ The use count for each super block, and if that fails then
+ </p></li><li class="listitem"><p>
+ The individual bit-maps for each super block.
+ </p></li></ul></div><p>
+ Note: Here we are never touching any of the memory that the
+ user will be given, and we are confining all memory accesses
+ to a small region of memory! This helps reduce cache
+ misses. If this succeeds then we apply the same procedure on
+ that bit-map as (1), and return that block of memory to the
+ user. However, if this process fails, then we resort to (4).
+ </p></li><li class="listitem"><p>
+ This process involves Refilling the internal exponentially
+ growing memory pool. The said effect is achieved by calling
+ _S_refill_pool which does the following:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Gets more memory from the Global Free List of the Required
+ size.
+ </p></li><li class="listitem"><p>
+ Adjusts the size for the next call to itself.
+ </p></li><li class="listitem"><p>
+ Writes the appropriate headers in the bit-maps.
+ </p></li><li class="listitem"><p>
+ Sets the use count for that super-block just allocated to 0
+ (zero).
+ </p></li><li class="listitem"><p>
+ All of the above accounts to maintaining the basic invariant
+ for the allocator. If the invariant is maintained, we are
+ sure that all is well. Now, the same process is applied on
+ the newly acquired free blocks, which are dispatched
+ accordingly.
+ </p></li></ul></div></li></ol></div><p>
+Thus, you can clearly see that the allocate function is nothing but a
+combination of the next-fit and first-fit algorithm optimized ONLY for
+single object allocations.
+</p></div><div class="section" title="deallocate"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.deallocate"></a><code class="function">deallocate</code></h3></div></div></div><p>
+ The deallocate function again is specialized for single objects ONLY.
+ For all n belonging to &gt; 1, the operator delete is called without
+ further ado, and the deallocate function returns.
+ </p><p>
+ However for n == 1, a series of steps are performed:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ We first need to locate that super-block which holds the memory
+ location given to us by the user. For that purpose, we maintain
+ a static variable _S_last_dealloc_index, which holds the index
+ into the vector of block pairs which indicates the index of the
+ last super-block from which memory was freed. We use this
+ strategy in the hope that the user will deallocate memory in a
+ region close to what he/she deallocated the last time around. If
+ the check for belongs_to succeeds, then we determine the bit-map
+ for the given pointer, and locate the index into that bit-map,
+ and mark that bit as free by setting it.
+ </p></li><li class="listitem"><p>
+ If the _S_last_dealloc_index does not point to the memory block
+ that we're looking for, then we do a linear search on the block
+ stored in the vector of Block Pairs. This vector in code is
+ called _S_mem_blocks. When the corresponding super-block is
+ found, we apply the same procedure as we did for (1) to mark the
+ block as free in the bit-map.
+ </p></li></ol></div><p>
+ Now, whenever a block is freed, the use count of that particular
+ super block goes down by 1. When this use count hits 0, we remove
+ that super block from the list of all valid super blocks stored in
+ the vector. While doing this, we also make sure that the basic
+ invariant is maintained by making sure that _S_last_request and
+ _S_last_dealloc_index point to valid locations within the vector.
+ </p></div><div class="section" title="Questions"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.questions"></a>Questions</h3></div></div></div><div class="section" title="1"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.1"></a>1</h4></div></div></div><p>
+Q1) The "Data Layout" section is
+cryptic. I have no idea of what you are trying to say. Layout of what?
+The free-list? Each bitmap? The Super Block?
+ </p><p>
+ The layout of a Super Block of a given
+size. In the example, a super block of size 32 x 1 is taken. The
+general formula for calculating the size of a super block is
+32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit
+systems.
+ </p></div><div class="section" title="2"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.2"></a>2</h4></div></div></div><p>
+ And since I just mentioned the
+term `each bitmap', what in the world is meant by it? What does each
+bitmap manage? How does it relate to the super block? Is the Super
+Block a bitmap as well?
+ </p><p>
+ Each bitmap is part of a Super Block which is made up of 3 parts
+ as I have mentioned earlier. Re-iterating, 1. The use count,
+ 2. The bit-map for that Super Block. 3. The actual memory that
+ will be eventually given to the user. Each bitmap is a multiple
+ of 32 in size. If there are 32 x (2^3) blocks of single objects
+ to be given, there will be '32 x (2^3)' bits present. Each 32
+ bits managing the allocated / free status for 32 blocks. Since
+ each size_t contains 32-bits, one size_t can manage up to 32
+ blocks' status. Each bit-map is made up of a number of size_t,
+ whose exact number for a super-block of a given size I have just
+ mentioned.
+ </p></div><div class="section" title="3"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.3"></a>3</h4></div></div></div><p>
+ How do the allocate and deallocate functions work in regard to
+ bitmaps?
+ </p><p>
+ The allocate and deallocate functions manipulate the bitmaps and
+ have nothing to do with the memory that is given to the user. As
+ I have earlier mentioned, a 1 in the bitmap's bit field
+ indicates free, while a 0 indicates allocated. This lets us
+ check 32 bits at a time to check whether there is at lease one
+ free block in those 32 blocks by testing for equality with
+ (0). Now, the allocate function will given a memory block find
+ the corresponding bit in the bitmap, and will reset it (i.e.,
+ make it re-set (0)). And when the deallocate function is called,
+ it will again set that bit after locating it to indicate that
+ that particular block corresponding to this bit in the bit-map
+ is not being used by anyone, and may be used to satisfy future
+ requests.
+ </p><p>
+ e.g.: Consider a bit-map of 64-bits as represented below:
+ 1111111111111111111111111111111111111111111111111111111111111111
+ </p><p>
+ Now, when the first request for allocation of a single object
+ comes along, the first block in address order is returned. And
+ since the bit-maps in the reverse order to that of the address
+ order, the last bit (LSB if the bit-map is considered as a
+ binary word of 64-bits) is re-set to 0.
+ </p><p>
+ The bit-map now looks like this:
+ 1111111111111111111111111111111111111111111111111111111111111110
+ </p></div></div><div class="section" title="Locality"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.locality"></a>Locality</h3></div></div></div><p>
+ Another issue would be whether to keep the all bitmaps in a
+ separate area in memory, or to keep them near the actual blocks
+ that will be given out or allocated for the client. After some
+ testing, I've decided to keep these bitmaps close to the actual
+ blocks. This will help in 2 ways.
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Constant time access for the bitmap themselves, since no kind of
+look up will be needed to find the correct bitmap list or its
+equivalent.</p></li><li class="listitem"><p>And also this would preserve the cache as far as possible.</p></li></ol></div><p>
+ So in effect, this kind of an allocator might prove beneficial from a
+ purely cache point of view. But this allocator has been made to try and
+ roll out the defects of the node_allocator, wherein the nodes get
+ skewed about in memory, if they are not returned in the exact reverse
+ order or in the same order in which they were allocated. Also, the
+ new_allocator's book keeping overhead is too much for small objects and
+ single object allocations, though it preserves the locality of blocks
+ very well when they are returned back to the allocator.
+ </p></div><div class="section" title="Overhead and Grow Policy"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.grow_policy"></a>Overhead and Grow Policy</h3></div></div></div><p>
+ Expected overhead per block would be 1 bit in memory. Also, once
+ the address of the free list has been found, the cost for
+ allocation/deallocation would be negligible, and is supposed to be
+ constant time. For these very reasons, it is very important to
+ minimize the linear time costs, which include finding a free list
+ with a free block while allocating, and finding the corresponding
+ free list for a block while deallocating. Therefore, I have
+ decided that the growth of the internal pool for this allocator
+ will be exponential as compared to linear for
+ node_allocator. There, linear time works well, because we are
+ mainly concerned with speed of allocation/deallocation and memory
+ consumption, whereas here, the allocation/deallocation part does
+ have some linear/logarithmic complexity components in it. Thus, to
+ try and minimize them would be a good thing to do at the cost of a
+ little bit of memory.
+ </p><p>
+ Another thing to be noted is the pool size will double every time
+ the internal pool gets exhausted, and all the free blocks have
+ been given away. The initial size of the pool would be
+ sizeof(size_t) x 8 which is the number of bits in an integer,
+ which can fit exactly in a CPU register. Hence, the term given is
+ exponential growth of the internal pool.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Policy-Based Data Structures</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html
deleted file mode 100644
index 2f75d608b5..0000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Deprecated HP/SGI</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_containers.html" title="Chapter 21. Containers"/><link rel="prev" href="bk01pt03ch21s02.html" title="HP/SGI"/><link rel="next" href="ext_utilities.html" title="Chapter 22. Utilities"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated HP/SGI</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr/></div><div class="section" title="Deprecated HP/SGI"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.deprecated_sgi"/>Deprecated HP/SGI</h2></div></div></div><p>
- The SGI hashing classes <code class="classname">hash_set</code> and
- <code class="classname">hash_set</code> have been deprecated by the
- unordered_set, unordered_multiset, unordered_map,
- unordered_multimap containers in TR1 and the upcoming C++0x, and
- may be removed in future releases.
- </p><p>The SGI headers</p><pre class="programlisting">
- &lt;hash_map&gt;
- &lt;hash_set&gt;
- &lt;rope&gt;
- &lt;slist&gt;
- &lt;rb_tree&gt;
- </pre><p>are all here;
- <code class="code">&lt;hash_map&gt;</code> and <code class="code">&lt;hash_set&gt;</code>
- are deprecated but available as backwards-compatible extensions,
- as discussed further below. <code class="code">&lt;rope&gt;</code> is the
- SGI specialization for large strings ("rope,"
- "large strings," get it? Love that geeky humor.)
- <code class="code">&lt;slist&gt;</code> is a singly-linked list, for when the
- doubly-linked <code class="code">list&lt;&gt;</code> is too much space
- overhead, and <code class="code">&lt;rb_tree&gt;</code> exposes the red-black
- tree classes used in the implementation of the standard maps and
- sets.
- </p><p>Each of the associative containers map, multimap, set, and multiset
- have a counterpart which uses a
- <a class="link" href="http://www.sgi.com/tech/stl/HashFunction.html">hashing
- function</a> to do the arranging, instead of a strict weak ordering
- function. The classes take as one of their template parameters a
- function object that will return the hash value; by default, an
- instantiation of
- <a class="link" href="http://www.sgi.com/tech/stl/hash.html">hash</a>.
- You should specialize this functor for your class, or define your own,
- before trying to use one of the hashing classes.
- </p><p>The hashing classes support all the usual associative container
- functions, as well as some extra constructors specifying the number
- of buckets, etc.
- </p><p>Why would you want to use a hashing class instead of the
- <span class="quote">“<span class="quote">normal</span>â€</span>implementations? Matt Austern writes:
- </p><div class="blockquote"><blockquote class="blockquote"><p>
- <span class="emphasis"><em>[W]ith a well chosen hash function, hash tables
- generally provide much better average-case performance than
- binary search trees, and much worse worst-case performance. So
- if your implementation has hash_map, if you don't mind using
- nonstandard components, and if you aren't scared about the
- possibility of pathological cases, you'll probably get better
- performance from hash_map.
- </em></span>
- </p></blockquote></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td align="left" valign="top">HP/SGI </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 22. Utilities</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html
new file mode 100644
index 0000000000..d37a538f5e
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section" title="Deprecated"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
+ The SGI hashing classes <code class="classname">hash_set</code> and
+ <code class="classname">hash_set</code> have been deprecated by the
+ unordered_set, unordered_multiset, unordered_map,
+ unordered_multimap containers in TR1 and C++11, and
+ may be removed in future releases.
+ </p><p>The SGI headers</p><pre class="programlisting">
+ &lt;hash_map&gt;
+ &lt;hash_set&gt;
+ &lt;rope&gt;
+ &lt;slist&gt;
+ &lt;rb_tree&gt;
+ </pre><p>are all here;
+ <code class="filename">&lt;backwards/hash_map&gt;</code> and
+ <code class="filename">&lt;backwards/hash_set&gt;</code>
+ are deprecated but available as backwards-compatible extensions,
+ as discussed further below.
+ <code class="filename">&lt;ext/rope&gt;</code> is the SGI
+ specialization for large strings ("rope," "large strings," get it? Love
+ that geeky humor.)
+ <code class="filename">&lt;ext/slist&gt;</code> (superseded in
+ C++11 by <code class="filename">&lt;forward_list&gt;</code>)
+ is a singly-linked list, for when the doubly-linked <code class="code">list&lt;&gt;</code>
+ is too much space overhead, and
+ <code class="filename">&lt;ext/rb_tree&gt;</code> exposes the
+ red-black tree classes used in the implementation of the standard maps
+ and sets.
+ </p><p>Each of the associative containers map, multimap, set, and multiset
+ have a counterpart which uses a
+ <a class="link" href="http://www.sgi.com/tech/stl/HashFunction.html" target="_top">hashing
+ function</a> to do the arranging, instead of a strict weak ordering
+ function. The classes take as one of their template parameters a
+ function object that will return the hash value; by default, an
+ instantiation of
+ <a class="link" href="http://www.sgi.com/tech/stl/hash.html" target="_top">hash</a>.
+ You should specialize this functor for your class, or define your own,
+ before trying to use one of the hashing classes.
+ </p><p>The hashing classes support all the usual associative container
+ functions, as well as some extra constructors specifying the number
+ of buckets, etc.
+ </p><p>Why would you want to use a hashing class instead of the
+ <span class="quote">“<span class="quote">normal</span>â€</span>implementations? Matt Austern writes:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="emphasis"><em>[W]ith a well chosen hash function, hash tables
+ generally provide much better average-case performance than
+ binary search trees, and much worse worst-case performance. So
+ if your implementation has hash_map, if you don't mind using
+ nonstandard components, and if you aren't scared about the
+ possibility of pathological cases, you'll probably get better
+ performance from hash_map.
+ </em></span>
+ </p></blockquote></div><p>
+ The deprecated hash tables are superseded by the standard unordered
+ associative containers defined in the ISO C++ 2011 standard in the
+ headers <code class="filename">&lt;unordered_map&gt;</code>
+ and <code class="filename">&lt;unordered_set&gt;</code>.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Utilities</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html
deleted file mode 100644
index 4350e20b19..0000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency"/><link rel="prev" href="ext_concurrency.html" title="Chapter 28. Concurrency"/><link rel="next" href="bk01pt03ch28s03.html" title="Use"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency.impl"/>Implementation</h2></div></div></div><div class="section" title="Using Builtin Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"/>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
-implemented via compiler intrinsics (if the underlying host is
-capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
-the compiler builtins for atomics are not universally implemented,
-using them directly is problematic, and can result in undefined
-function calls. (An example of an undefined symbol from the use
-of <code class="code">__sync_fetch_and_add</code> on an unsupported host is a
-missing reference to <code class="code">__sync_fetch_and_add_4</code>.)
-</p><p>In addition, on some hosts the compiler intrinsics are enabled
-conditionally, via the <code class="code">-march</code> command line flag. This makes
-usage vary depending on the target hardware and the flags used during
-compile.
-</p><p>
-If builtins are possible for bool-sized integral types,
-<code class="code">_GLIBCXX_ATOMIC_BUILTINS_1</code> will be defined.
-If builtins are possible for int-sized integral types,
-<code class="code">_GLIBCXX_ATOMIC_BUILTINS_4</code> will be defined.
-</p><p>For the following hosts, intrinsics are enabled by default.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
-non-ancient x86 hardware, <code class="code">-march=native</code> usually does the
-trick.</p><p> For hosts without compiler intrinsics, but with capable
-hardware, hand-crafted assembly is selected. This is the case for the following hosts:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
-</p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html"> documentation</a>.
-</p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
-</p></div><div class="section" title="Thread Abstraction"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"/>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
-the thread interface for GCC. This layer is called "gthread," and is
-comprised of one header file that wraps the host's default thread layer with
-a POSIX-like interface.
-</p><p> The file &lt;gthr-default.h&gt; points to the deduced wrapper for
-the current host. In libstdc++ implementation files,
-&lt;bits/gthr.h&gt; is used to select the proper gthreads file.
-</p><p>Within libstdc++ sources, all calls to underlying thread functionality
-use this layer. More detail as to the specific interface can be found in the source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html">documentation</a>.
-</p><p>By design, the gthread layer is interoperable with the types,
-functions, and usage found in the usual &lt;pthread.h&gt; file,
-including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
-etc.
-</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 28. Concurrency </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Use</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html
deleted file mode 100644
index b70d5a621a..0000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency"/><link rel="prev" href="bk01pt03ch28s02.html" title="Implementation"/><link rel="next" href="bk01pt04.html" title="Part IV.  Appendices"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Use"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency.use"/>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
-</p><pre class="programlisting">
-#include &lt;ext/concurrence.h&gt;
-
-namespace
-{
- __gnu_cxx::__mutex safe_base_mutex;
-} // anonymous namespace
-
-namespace other
-{
- void
- foo()
- {
- __gnu_cxx::__scoped_lock sentry(safe_base_mutex);
- for (int i = 0; i &lt; max; ++i)
- {
- _Safe_iterator_base* __old = __iter;
- __iter = __iter-&lt;_M_next;
- __old-&lt;_M_detach_single();
- }
-}
-</pre><p>In this sample code, an anonymous namespace is used to keep
-the <code class="code">__mutex</code> private to the compilation unit,
-and <code class="code">__scoped_lock</code> is used to guard access to the critical
-section within the for loop, locking the mutex on creation and freeing
-the mutex as control moves out of this block.
-</p><p>Several exception classes are used to keep track of
-concurrence-related errors. These classes
-are: <code class="code">__concurrence_lock_error</code>, <code class="code">__concurrence_unlock_error</code>, <code class="code">__concurrence_wait_error</code>,
-and <code class="code">__concurrence_broadcast_error</code>.
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td align="left" valign="top">Implementation </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part IV. 
- Appendices
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html
new file mode 100644
index 0000000000..f7abf820fa
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="bk01pt03ch30s03.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch30s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section" title="Using Builtin Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
+implemented via compiler intrinsics (if the underlying host is
+capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
+the compiler builtins for atomics are not universally implemented,
+using them directly is problematic, and can result in undefined
+function calls. (An example of an undefined symbol from the use
+of <code class="code">__sync_fetch_and_add</code> on an unsupported host is a
+missing reference to <code class="code">__sync_fetch_and_add_4</code>.)
+</p><p>In addition, on some hosts the compiler intrinsics are enabled
+conditionally, via the <code class="code">-march</code> command line flag. This makes
+usage vary depending on the target hardware and the flags used during
+compile.
+</p><p>
+<em><span class="remark">
+Incomplete/inconsistent. This is only C++11.
+</span></em>
+</p><p>
+If builtins are possible for bool-sized integral types,
+<code class="code">ATOMIC_BOOL_LOCK_FREE</code> will be defined.
+If builtins are possible for int-sized integral types,
+<code class="code">ATOMIC_INT_LOCK_FREE</code> will be defined.
+</p><p>For the following hosts, intrinsics are enabled by default.
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
+non-ancient x86 hardware, <code class="code">-march=native</code> usually does the
+trick.</p><p> For hosts without compiler intrinsics, but with capable
+hardware, hand-crafted assembly is selected. This is the case for the following hosts:
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
+</p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top"> documentation</a>.
+</p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
+</p></div><div class="section" title="Thread Abstraction"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
+the thread interface for GCC. This layer is called "gthread," and is
+comprised of one header file that wraps the host's default thread layer with
+a POSIX-like interface.
+</p><p> The file &lt;gthr-default.h&gt; points to the deduced wrapper for
+the current host. In libstdc++ implementation files,
+&lt;bits/gthr.h&gt; is used to select the proper gthreads file.
+</p><p>Within libstdc++ sources, all calls to underlying thread functionality
+use this layer. More detail as to the specific interface can be found in the source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html" target="_top">documentation</a>.
+</p><p>By design, the gthread layer is interoperable with the types,
+functions, and usage found in the usual &lt;pthread.h&gt; file,
+including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
+etc.
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html
new file mode 100644
index 0000000000..913d564823
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="bk01pt03ch30s02.html" title="Implementation" /><link rel="next" href="bk01pt04.html" title="Part IV.  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch30s02.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Use"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
+</p><pre class="programlisting">
+#include &lt;ext/concurrence.h&gt;
+
+namespace
+{
+ __gnu_cxx::__mutex safe_base_mutex;
+} // anonymous namespace
+
+namespace other
+{
+ void
+ foo()
+ {
+ __gnu_cxx::__scoped_lock sentry(safe_base_mutex);
+ for (int i = 0; i &lt; max; ++i)
+ {
+ _Safe_iterator_base* __old = __iter;
+ __iter = __iter-&lt;_M_next;
+ __old-&lt;_M_detach_single();
+ }
+}
+</pre><p>In this sample code, an anonymous namespace is used to keep
+the <code class="code">__mutex</code> private to the compilation unit,
+and <code class="code">__scoped_lock</code> is used to guard access to the critical
+section within the for loop, locking the mutex on creation and freeing
+the mutex as control moves out of this block.
+</p><p>Several exception classes are used to keep track of
+concurrence-related errors. These classes
+are: <code class="code">__concurrence_lock_error</code>, <code class="code">__concurrence_unlock_error</code>, <code class="code">__concurrence_wait_error</code>,
+and <code class="code">__concurrence_broadcast_error</code>.
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch30s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. 
+ Appendices
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03pr01.html b/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
index 65348b721f..fb4ab3031a 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
@@ -1,15 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title/><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="extensions.html" title="Part III.  Extensions"/><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"/></tr><tr><td align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr/></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="id481886"/></h1></div></div></div><p>
- Here we will make an attempt at describing the non-Standard extensions to
- the library. Some of these are from SGI's STL, some of these are GNU's,
- and some just seemed to appear on the doorstep.
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idp16390720"></a></h1></div></div></div><p>
+ Here we will make an attempt at describing the non-Standard
+ extensions to the library. Some of these are from older versions of
+ standard library components, namely SGI's STL, and some of these are
+ GNU's.
</p><p><span class="emphasis"><em>Before</em></span> you leap in and use any of these
extensions, be aware of two things:
-</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Non-Standard means exactly that.
</p><p>
The behavior, and the very
@@ -20,7 +21,7 @@ extensions, be aware of two things:
treat them differently, or...
</p></li><li class="listitem"><p>
You should know how to access these headers properly.
- </p></li></ol></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td align="left" valign="top">Part III. 
+ </p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. 
Extensions
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt04.html b/libstdc++-v3/doc/html/manual/bk01pt04.html
index acdf72acaf..a99e188d0d 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt04.html
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library Manual"/><link rel="prev" href="bk01pt03ch28s03.html" title="Use"/><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="bk01pt03ch30s03.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
Appendices
-</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch28s03.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr/></div><div class="part" title="Part IV.  Appendices"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"/>Part IV. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch30s03.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part IV.  Appendices"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV. 
Appendices
</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
Contributing
@@ -10,12 +10,34 @@
</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
Porting and Maintenance
-</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C.
+</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
+ Qualifying Exception Safety Guarantees
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
+ Existing tests
+</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers">
+C++11 Requirements Test Sequence Descriptions
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+ </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan">
+ Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
+ extensions
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringstreams">No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.wchar">Little or no wide character support</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iostream_templates">No templatized iostreams</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.thread_safety">Thread safety issues</a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.third">Third</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.third.headers">Pre-ISO headers moved to backwards or removed</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.hash">Extension headers hash_map, hash_set moved to ext or backwards</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.nocreate_noreplace">No <code class="code">ios::nocreate/ios::noreplace</code>.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.streamattach">
+No <code class="code">stream::attach(int fd)</code>
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_cxx98">
+Support for C++98 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_tr1">
+Support for C++TR1 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_cxx11">
+Support for C++11 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.iterator_type">
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C.
Free Software Needs Free Documentation
</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
<acronym class="acronym">GNU</acronym> General Public License version 3
- </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch28s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="spine.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr><tr><td align="left" valign="top">Use </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix A. 
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch30s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Use </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
Contributing
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bugs.html b/libstdc++-v3/doc/html/manual/bugs.html
index eb6efdcaf5..0464e8567d 100644
--- a/libstdc++-v3/doc/html/manual/bugs.html
+++ b/libstdc++-v3/doc/html/manual/bugs.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="status.html" title="Chapter 1. Status"/><link rel="prev" href="license.html" title="License"/><link rel="next" href="setup.html" title="Chapter 2. Setup"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr/></div><div class="section" title="Bugs"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status.bugs"/>Bugs</h2></div></div></div><div class="section" title="Implementation Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"/>Implementation Bugs</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section" title="Bugs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section" title="Implementation Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
Information on known bugs, details on efforts to fix them, and
- fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/">GCC bug tracking system</a>,
+ fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/" target="_top">GCC bug tracking system</a>,
with the category set to <code class="literal">libstdc++</code>.
- </p></div><div class="section" title="Standard Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"/>Standard Bugs</h3></div></div></div><p>
+ </p></div><div class="section" title="Standard Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"></a>Standard Bugs</h3></div></div></div><p>
Everybody's got issues. Even the C++ Standard Library.
</p><p>
The Library Working Group, or LWG, is the ISO subcommittee responsible
@@ -15,9 +15,9 @@
Here are the issues which have resulted in code changes to the library.
The links are to the specific defect reports from a <span class="emphasis"><em>partial
copy</em></span> of the Issues List. You can read the full version online
- at the <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/">ISO C++
+ at the <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">ISO C++
Committee homepage</a>, linked to on the
- <a class="link" href="http://gcc.gnu.org/readings.html">GCC "Readings"
+ <a class="link" href="http://gcc.gnu.org/readings.html" target="_top">GCC "Readings"
page</a>. If
you spend a lot of time reading the issues, we recommend downloading
the ZIP file and reading them locally.
@@ -34,319 +34,319 @@
and src directories for appearances of
<code class="constant">_GLIBCXX_RESOLVE_LIB_DEFECTS</code> for examples
of style. Note that we usually do not make changes to the
- code until an issue has reached <a class="link" href="../ext/lwg-active.html#DR">DR</a> status.
- </p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5">5</a>:
+ code until an issue has reached <a class="link" href="../ext/lwg-active.html#DR" target="_top">DR</a> status.
+ </p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5" target="_top">5</a>:
<span class="emphasis"><em>string::compare specification questionable</em></span>
</span></dt><dd><p>This should be two overloaded functions rather than a single function.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#17">17</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#17" target="_top">17</a>:
<span class="emphasis"><em>Bad bool parsing</em></span>
</span></dt><dd><p>Apparently extracting Boolean values was messed up...
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#19">19</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#19" target="_top">19</a>:
<span class="emphasis"><em>"Noconv" definition too vague</em></span>
</span></dt><dd><p>If <code class="code">codecvt::do_in</code> returns <code class="code">noconv</code> there are
no changes to the values in <code class="code">[to, to_limit)</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#22">22</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#22" target="_top">22</a>:
<span class="emphasis"><em>Member open vs flags</em></span>
</span></dt><dd><p>Re-opening a file stream does <span class="emphasis"><em>not</em></span> clear the state flags.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#23">23</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#23" target="_top">23</a>:
<span class="emphasis"><em>Num_get overflow result</em></span>
</span></dt><dd><p>Implement the proposed resolution.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#25">25</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#25" target="_top">25</a>:
<span class="emphasis"><em>String operator&lt;&lt; uses width() value wrong</em></span>
</span></dt><dd><p>Padding issues.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#48">48</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#48" target="_top">48</a>:
<span class="emphasis"><em>Use of non-existent exception constructor</em></span>
</span></dt><dd><p>An instance of <code class="code">ios_base::failure</code> is constructed instead.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#49">49</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#49" target="_top">49</a>:
<span class="emphasis"><em>Underspecification of ios_base::sync_with_stdio</em></span>
</span></dt><dd><p>The return type is the <span class="emphasis"><em>previous</em></span> state of synchronization.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#50">50</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#50" target="_top">50</a>:
<span class="emphasis"><em>Copy constructor and assignment operator of ios_base</em></span>
</span></dt><dd><p>These members functions are declared <code class="code">private</code> and are
thus inaccessible. Specifying the correct semantics of
"copying stream state" was deemed too complicated.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#60">60</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#60" target="_top">60</a>:
<span class="emphasis"><em>What is a formatted input function?</em></span>
</span></dt><dd><p>This DR made many widespread changes to <code class="code">basic_istream</code>
and <code class="code">basic_ostream</code> all of which have been implemented.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#63">63</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#63" target="_top">63</a>:
<span class="emphasis"><em>Exception-handling policy for unformatted output</em></span>
</span></dt><dd><p>Make the policy consistent with that of formatted input, unformatted
input, and formatted output.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#68">68</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#68" target="_top">68</a>:
<span class="emphasis"><em>Extractors for char* should store null at end</em></span>
</span></dt><dd><p>And they do now. An editing glitch in the last item in the list of
[27.6.1.2.3]/7.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#74">74</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#74" target="_top">74</a>:
<span class="emphasis"><em>Garbled text for codecvt::do_max_length</em></span>
</span></dt><dd><p>The text of the standard was gibberish. Typos gone rampant.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#75">75</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#75" target="_top">75</a>:
<span class="emphasis"><em>Contradiction in codecvt::length's argument types</em></span>
</span></dt><dd><p>Change the first parameter to <code class="code">stateT&amp;</code> and implement
the new effects paragraph.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#83">83</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#83" target="_top">83</a>:
<span class="emphasis"><em>string::npos vs. string::max_size()</em></span>
</span></dt><dd><p>Safety checks on the size of the string should test against
<code class="code">max_size()</code> rather than <code class="code">npos</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#90">90</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#90" target="_top">90</a>:
<span class="emphasis"><em>Incorrect description of operator&gt;&gt; for strings</em></span>
</span></dt><dd><p>The effect contain <code class="code">isspace(c,getloc())</code> which must be
replaced by <code class="code">isspace(c,is.getloc())</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#91">91</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#91" target="_top">91</a>:
<span class="emphasis"><em>Description of operator&gt;&gt; and getline() for string&lt;&gt;
might cause endless loop</em></span>
</span></dt><dd><p>They behave as a formatted input function and as an unformatted
input function, respectively (except that <code class="code">getline</code> is
not required to set <code class="code">gcount</code>).
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#103">103</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#103" target="_top">103</a>:
<span class="emphasis"><em>set::iterator is required to be modifiable, but this allows
modification of keys.</em></span>
</span></dt><dd><p>For associative containers where the value type is the same as
the key type, both <code class="code">iterator</code> and <code class="code">const_iterator
</code> are constant iterators.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#109">109</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#109" target="_top">109</a>:
<span class="emphasis"><em>Missing binders for non-const sequence elements</em></span>
</span></dt><dd><p>The <code class="code">binder1st</code> and <code class="code">binder2nd</code> didn't have an
<code class="code">operator()</code> taking a non-const parameter.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#110">110</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#110" target="_top">110</a>:
<span class="emphasis"><em>istreambuf_iterator::equal not const</em></span>
</span></dt><dd><p>This was not a const member function. Note that the DR says to
replace the function with a const one; we have instead provided an
overloaded version with identical contents.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#117">117</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#117" target="_top">117</a>:
<span class="emphasis"><em>basic_ostream uses nonexistent num_put member functions</em></span>
</span></dt><dd><p><code class="code">num_put::put()</code> was overloaded on the wrong types.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#118">118</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#118" target="_top">118</a>:
<span class="emphasis"><em>basic_istream uses nonexistent num_get member functions</em></span>
</span></dt><dd><p>Same as 117, but for <code class="code">num_get::get()</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#129">129</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#129" target="_top">129</a>:
<span class="emphasis"><em>Need error indication from seekp() and seekg()</em></span>
</span></dt><dd><p>These functions set <code class="code">failbit</code> on error now.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#130">130</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#130" target="_top">130</a>:
<span class="emphasis"><em>Return type of container::erase(iterator) differs for associative containers</em></span>
</span></dt><dd><p>Make member <code class="code">erase</code> return iterator for <code class="code">set</code>, <code class="code">multiset</code>, <code class="code">map</code>, <code class="code">multimap</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#136">136</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#136" target="_top">136</a>:
<span class="emphasis"><em>seekp, seekg setting wrong streams?</em></span>
</span></dt><dd><p><code class="code">seekp</code> should only set the output stream, and
<code class="code">seekg</code> should only set the input stream.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#167">167</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#167" target="_top">167</a>:
<span class="emphasis"><em>Improper use of traits_type::length()</em></span>
</span></dt><dd><p><code class="code">op&lt;&lt;</code> with a <code class="code">const char*</code> was
calculating an incorrect number of characters to write.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#169">169</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#169" target="_top">169</a>:
<span class="emphasis"><em>Bad efficiency of overflow() mandated</em></span>
</span></dt><dd><p>Grow efficiently the internal array object.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#171">171</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#171" target="_top">171</a>:
<span class="emphasis"><em>Strange seekpos() semantics due to joint position</em></span>
</span></dt><dd><p>Quite complex to summarize...
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#181">181</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#181" target="_top">181</a>:
<span class="emphasis"><em>make_pair() unintended behavior</em></span>
</span></dt><dd><p>This function used to take its arguments as reference-to-const, now
it copies them (pass by value).
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#195">195</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#195" target="_top">195</a>:
<span class="emphasis"><em>Should basic_istream::sentry's constructor ever set eofbit?</em></span>
</span></dt><dd><p>Yes, it can, specifically if EOF is reached while skipping whitespace.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#211">211</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#211" target="_top">211</a>:
<span class="emphasis"><em>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</em></span>
</span></dt><dd><p>If nothing is extracted into the string, <code class="code">op&gt;&gt;</code> now
sets <code class="code">failbit</code> (which can cause an exception, etc., etc.).
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#214">214</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#214" target="_top">214</a>:
<span class="emphasis"><em>set::find() missing const overload</em></span>
</span></dt><dd><p>Both <code class="code">set</code> and <code class="code">multiset</code> were missing
overloaded find, lower_bound, upper_bound, and equal_range functions
for const instances.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#231">231</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#231" target="_top">231</a>:
<span class="emphasis"><em>Precision in iostream?</em></span>
</span></dt><dd><p>For conversion from a floating-point type, <code class="code">str.precision()</code>
is specified in the conversion specification.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#233">233</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#233" target="_top">233</a>:
<span class="emphasis"><em>Insertion hints in associative containers</em></span>
</span></dt><dd><p>Implement N1780, first check before then check after, insert as close
to hint as possible.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#235">235</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#235" target="_top">235</a>:
<span class="emphasis"><em>No specification of default ctor for reverse_iterator</em></span>
</span></dt><dd><p>The declaration of <code class="code">reverse_iterator</code> lists a default constructor.
However, no specification is given what this constructor should do.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#241">241</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#241" target="_top">241</a>:
<span class="emphasis"><em>Does unique_copy() require CopyConstructible and Assignable?</em></span>
</span></dt><dd><p>Add a helper for forward_iterator/output_iterator, fix the existing
one for input_iterator/output_iterator to not rely on Assignability.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#243">243</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#243" target="_top">243</a>:
<span class="emphasis"><em>get and getline when sentry reports failure</em></span>
</span></dt><dd><p>Store a null character only if the character array has a non-zero size.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#251">251</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#251" target="_top">251</a>:
<span class="emphasis"><em>basic_stringbuf missing allocator_type</em></span>
</span></dt><dd><p>This nested typedef was originally not specified.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#253">253</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#253" target="_top">253</a>:
<span class="emphasis"><em>valarray helper functions are almost entirely useless</em></span>
</span></dt><dd><p>Make the copy constructor and copy-assignment operator declarations
public in gslice_array, indirect_array, mask_array, slice_array; provide
definitions.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#265">265</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#265" target="_top">265</a>:
<span class="emphasis"><em>std::pair::pair() effects overly restrictive</em></span>
</span></dt><dd><p>The default ctor would build its members from copies of temporaries;
now it simply uses their respective default ctors.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#266">266</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#266" target="_top">266</a>:
<span class="emphasis"><em>bad_exception::~bad_exception() missing Effects clause</em></span>
</span></dt><dd><p>The <code class="code">bad_</code>* classes no longer have destructors (they
are trivial), since no description of them was ever given.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#271">271</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#271" target="_top">271</a>:
<span class="emphasis"><em>basic_iostream missing typedefs</em></span>
</span></dt><dd><p>The typedefs it inherits from its base classes can't be used, since
(for example) <code class="code">basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#275">275</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#275" target="_top">275</a>:
<span class="emphasis"><em>Wrong type in num_get::get() overloads</em></span>
</span></dt><dd><p>Similar to 118.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#280">280</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#280" target="_top">280</a>:
<span class="emphasis"><em>Comparison of reverse_iterator to const reverse_iterator</em></span>
</span></dt><dd><p>Add global functions with two template parameters.
(NB: not added for now a templated assignment operator)
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#292">292</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#292" target="_top">292</a>:
<span class="emphasis"><em>Effects of a.copyfmt (a)</em></span>
</span></dt><dd><p>If <code class="code">(this == &amp;rhs)</code> do nothing.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#300">300</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#300" target="_top">300</a>:
<span class="emphasis"><em>List::merge() specification incomplete</em></span>
</span></dt><dd><p>If <code class="code">(this == &amp;x)</code> do nothing.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#303">303</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#303" target="_top">303</a>:
<span class="emphasis"><em>Bitset input operator underspecified</em></span>
</span></dt><dd><p>Basically, compare the input character to
<code class="code">is.widen(0)</code> and <code class="code">is.widen(1)</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#305">305</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#305" target="_top">305</a>:
<span class="emphasis"><em>Default behavior of codecvt&lt;wchar_t, char,
mbstate_t&gt;::length()</em></span>
</span></dt><dd><p>Do not specify what <code class="code">codecvt&lt;wchar_t, char,
mbstate_t&gt;::do_length</code> must return.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#328">328</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#328" target="_top">328</a>:
<span class="emphasis"><em>Bad sprintf format modifier in
money_put&lt;&gt;::do_put()</em></span>
</span></dt><dd><p>Change the format string to "%.0Lf".
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#365">365</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#365" target="_top">365</a>:
<span class="emphasis"><em>Lack of const-qualification in clause 27</em></span>
</span></dt><dd><p>Add const overloads of <code class="code">is_open</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#387">387</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#387" target="_top">387</a>:
<span class="emphasis"><em>std::complex over-encapsulated</em></span>
</span></dt><dd><p>Add the <code class="code">real(T)</code> and <code class="code">imag(T)</code>
- members; in C++0x mode, also adjust the existing
+ members; in C++11 mode, also adjust the existing
<code class="code">real()</code> and <code class="code">imag()</code> members and
free functions.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#389">389</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#389" target="_top">389</a>:
<span class="emphasis"><em>Const overload of valarray::operator[] returns
by value</em></span>
</span></dt><dd><p>Change it to return a <code class="code">const T&amp;</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#396">396</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#396" target="_top">396</a>:
<span class="emphasis"><em>what are characters zero and one</em></span>
</span></dt><dd><p>Implement the proposed resolution.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#402">402</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#402" target="_top">402</a>:
<span class="emphasis"><em>Wrong new expression in [some_]allocator::construct</em></span>
</span></dt><dd><p>Replace "new" with "::new".
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#408">408</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#408" target="_top">408</a>:
<span class="emphasis"><em>
Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
</em></span>
</span></dt><dd><p>Tweak the debug-mode checks in _Safe_iterator.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#409">409</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#409" target="_top">409</a>:
<span class="emphasis"><em>Closing an fstream should clear the error state</em></span>
</span></dt><dd><p>Have <code class="code">open</code> clear the error flags.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#431">431</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#431" target="_top">431</a>:
<span class="emphasis"><em>Swapping containers with unequal allocators</em></span>
</span></dt><dd><p>Implement Option 3, as per N1599.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#432">432</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#432" target="_top">432</a>:
<span class="emphasis"><em>stringbuf::overflow() makes only one write position
available</em></span>
</span></dt><dd><p>Implement the resolution, beyond DR 169.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#434">434</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#434" target="_top">434</a>:
<span class="emphasis"><em>bitset::to_string() hard to use</em></span>
</span></dt><dd><p>Add three overloads, taking fewer template arguments.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#438">438</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#438" target="_top">438</a>:
<span class="emphasis"><em>Ambiguity in the "do the right thing" clause</em></span>
</span></dt><dd><p>Implement the resolution, basically cast less.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#453">453</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#453" target="_top">453</a>:
<span class="emphasis"><em>basic_stringbuf::seekoff need not always fail for an empty stream</em></span>
</span></dt><dd><p>Don't fail if the next pointer is null and newoff is zero.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#455">455</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#455" target="_top">455</a>:
<span class="emphasis"><em>cerr::tie() and wcerr::tie() are overspecified</em></span>
</span></dt><dd><p>Initialize cerr tied to cout and wcerr tied to wcout.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#464">464</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#464" target="_top">464</a>:
<span class="emphasis"><em>Suggestion for new member functions in standard containers</em></span>
</span></dt><dd><p>Add <code class="code">data()</code> to <code class="code">std::vector</code> and
<code class="code">at(const key_type&amp;)</code> to <code class="code">std::map</code>.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#508">508</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#508" target="_top">508</a>:
<span class="emphasis"><em>Bad parameters for ranlux64_base_01</em></span>
</span></dt><dd><p>Fix the parameters.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#512">512</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#512" target="_top">512</a>:
<span class="emphasis"><em>Seeding subtract_with_carry_01 from a single unsigned long</em></span>
</span></dt><dd><p>Construct a <code class="code">linear_congruential</code> engine and seed with it.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#526">526</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#526" target="_top">526</a>:
<span class="emphasis"><em>Is it undefined if a function in the standard changes in
parameters?</em></span>
</span></dt><dd><p>Use &amp;value.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#538">538</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#538" target="_top">538</a>:
<span class="emphasis"><em>241 again: Does unique_copy() require CopyConstructible
and Assignable?</em></span>
</span></dt><dd><p>In case of input_iterator/output_iterator rely on Assignability of
input_iterator' value_type.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#539">539</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#539" target="_top">539</a>:
<span class="emphasis"><em>partial_sum and adjacent_difference should mention
requirements</em></span>
</span></dt><dd><p>We were almost doing the right thing, just use std::move
in adjacent_difference.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#541">541</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#541" target="_top">541</a>:
<span class="emphasis"><em>shared_ptr template assignment and void</em></span>
</span></dt><dd><p>Add an auto_ptr&lt;void&gt; specialization.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#543">543</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#543" target="_top">543</a>:
<span class="emphasis"><em>valarray slice default constructor</em></span>
</span></dt><dd><p>Follow the straightforward proposed resolution.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#550">550</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#550" target="_top">550</a>:
<span class="emphasis"><em>What should the return type of pow(float,int) be?</em></span>
- </span></dt><dd><p>In C++0x mode, remove the pow(float,int), etc., signatures.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#586">586</a>:
+ </span></dt><dd><p>In C++11 mode, remove the pow(float,int), etc., signatures.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#586" target="_top">586</a>:
<span class="emphasis"><em>string inserter not a formatted function</em></span>
</span></dt><dd><p>Change it to be a formatted output function (i.e. catch exceptions).
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#596">596</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#596" target="_top">596</a>:
<span class="emphasis"><em>27.8.1.3 Table 112 omits "a+" and "a+b" modes</em></span>
</span></dt><dd><p>Add the missing modes to fopen_mode.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#630">630</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#630" target="_top">630</a>:
<span class="emphasis"><em>arrays of valarray</em></span>
</span></dt><dd><p>Implement the simple resolution.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#660">660</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#660" target="_top">660</a>:
<span class="emphasis"><em>Missing bitwise operations</em></span>
</span></dt><dd><p>Add the missing operations.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#691">691</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#691" target="_top">691</a>:
<span class="emphasis"><em>const_local_iterator cbegin, cend missing from TR1</em></span>
- </span></dt><dd><p>In C++0x mode add cbegin(size_type) and cend(size_type)
+ </span></dt><dd><p>In C++11 mode add cbegin(size_type) and cend(size_type)
to the unordered containers.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#693">693</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#693" target="_top">693</a>:
<span class="emphasis"><em>std::bitset::all() missing</em></span>
</span></dt><dd><p>Add it, consistently with the discussion.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#695">695</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#695" target="_top">695</a>:
<span class="emphasis"><em>ctype&lt;char&gt;::classic_table() not accessible</em></span>
</span></dt><dd><p>Make the member functions table and classic_table public.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#696">696</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#696" target="_top">696</a>:
<span class="emphasis"><em>istream::operator&gt;&gt;(int&amp;) broken</em></span>
</span></dt><dd><p>Implement the straightforward resolution.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#761">761</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#761" target="_top">761</a>:
<span class="emphasis"><em>unordered_map needs an at() member function</em></span>
- </span></dt><dd><p>In C++0x mode, add at() and at() const.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#775">775</a>:
+ </span></dt><dd><p>In C++11 mode, add at() and at() const.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#775" target="_top">775</a>:
<span class="emphasis"><em>Tuple indexing should be unsigned?</em></span>
</span></dt><dd><p>Implement the int -&gt; size_t replacements.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#776">776</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#776" target="_top">776</a>:
<span class="emphasis"><em>Undescribed assign function of std::array</em></span>
- </span></dt><dd><p>In C++0x mode, remove assign, add fill.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#781">781</a>:
+ </span></dt><dd><p>In C++11 mode, remove assign, add fill.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#781" target="_top">781</a>:
<span class="emphasis"><em>std::complex should add missing C99 functions</em></span>
- </span></dt><dd><p>In C++0x mode, add std::proj.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#809">809</a>:
+ </span></dt><dd><p>In C++11 mode, add std::proj.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#809" target="_top">809</a>:
<span class="emphasis"><em>std::swap should be overloaded for array types</em></span>
</span></dt><dd><p>Add the overload.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#844">844</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#844" target="_top">844</a>:
<span class="emphasis"><em>complex pow return type is ambiguous</em></span>
- </span></dt><dd><p>In C++0x mode, remove the pow(complex&lt;T&gt;, int) signature.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#853">853</a>:
+ </span></dt><dd><p>In C++11 mode, remove the pow(complex&lt;T&gt;, int) signature.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#853" target="_top">853</a>:
<span class="emphasis"><em>to_string needs updating with zero and one</em></span>
</span></dt><dd><p>Update / add the signatures.
- </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#865">865</a>:
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#865" target="_top">865</a>:
<span class="emphasis"><em>More algorithms that throw away information</em></span>
</span></dt><dd><p>The traditional HP / SGI return type and value is blessed
by the resolution of the DR.
- </p></dd></dl></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="license.html">Prev</a> </td><td align="center"><a accesskey="u" href="status.html">Up</a></td><td align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td align="left" valign="top">License </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
+ </p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/concurrency.html b/libstdc++-v3/doc/html/manual/concurrency.html
index bc1b787922..5738034693 100644
--- a/libstdc++-v3/doc/html/manual/concurrency.html
+++ b/libstdc++-v3/doc/html/manual/concurrency.html
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics"/><link rel="next" href="extensions.html" title="Part III.  Extensions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics" /><link rel="next" href="extensions.html" title="Part III.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
Concurrency
-</th></tr><tr><td align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 15.  Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"/>Chapter 15. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 15.  Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
Concurrency
- <a id="id481702" class="indexterm"/>
+ <a id="idp16368576" class="indexterm"></a>
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
Facilities for concurrent operation, and control thereof.
-</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency.api"/>API Reference</h2></div></div></div><p>
+</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
All items are declared in one of four standard header files.
</p><p>
In header <code class="filename">mutex</code>, class
@@ -33,10 +33,10 @@
and <code class="classname">packaged_task</code>.
</p><p>
Full API details.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 14. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 14. 
Atomics
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part III. 
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part III. 
Extensions
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/configure.html b/libstdc++-v3/doc/html/manual/configure.html
index 70409d0c42..b7f0270f47 100644
--- a/libstdc++-v3/doc/html/manual/configure.html
+++ b/libstdc++-v3/doc/html/manual/configure.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; configure&#10; , &#10; options&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="setup.html" title="Chapter 2. Setup"/><link rel="prev" href="setup.html" title="Chapter 2. Setup"/><link rel="next" href="make.html" title="Make"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr/></div><div class="section" title="Configure"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.configure"/>Configure</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; configure&#10; , &#10; options&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section" title="Configure"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
When configuring libstdc++, you'll have to configure the entire
<span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
toplevel gcc configuration option
@@ -10,7 +10,7 @@
Here are all of the configure options specific to libstdc++. Keep
in mind that
- <a class="link" href="http://sourceware.org/autobook/autobook/autobook_14.html">they
+ <a class="link" href="http://sourceware.org/autobook/autobook/autobook_14.html" target="_top">they
all have opposite forms as well</a> (enable/disable and
with/without). The defaults are for the <span class="emphasis"><em>current
development sources</em></span>, which may be different than those
@@ -53,7 +53,7 @@
choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
(IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
'gnu' to specify a model based on functionality from the GNU C
- library (langinfo/iconv/gettext) (from <a class="link" href="http://sources.redhat.com/glibc/">glibc</a>, the GNU C
+ library (langinfo/iconv/gettext) (from <a class="link" href="http://sources.redhat.com/glibc/" target="_top">glibc</a>, the GNU C
library), or 'generic' to use a generic "C"
abstraction which consists of "C" locale info.
</p><p>If not explicitly specified, the configure proccess tries
@@ -80,15 +80,19 @@
(described next).
</p></dd><dt><span class="term"><code class="code">--enable-threads=OPTION</code></span></dt><dd><p>Select a threading library. A full description is
given in the
- general <a class="link" href="http://gcc.gnu.org/install/configure.html">compiler
+ general <a class="link" href="http://gcc.gnu.org/install/configure.html" target="_top">compiler
configuration instructions</a>. This option can change the
library ABI.
+ </p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-threads</code></span></dt><dd><p>Enable C++11 threads support. If not explicitly specified,
+ the configure process enables it if possible. It defaults to 'off'
+ on Solaris 8 and 9, where it would break symbol versioning. This
+ option can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-time</code></span></dt><dd><p>This is an abbreviated form of
<code class="code">'--enable-libstdcxx-time=yes'</code>(described next).
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-time=OPTION</code></span></dt><dd><p>Enables link-type checks for the availability of the
clock_gettime clocks, used in the implementation of [time.clock],
and of the nanosleep and sched_yield functions, used in the
- implementation of [thread.thread.this] of the current C++0x draft.
+ implementation of [thread.thread.this] of the 2011 ISO C++ standard.
The choice OPTION=yes checks for the availability of the facilities
in libc and libposix4. In case of need the latter is also linked
to libstdc++ as part of the build process. OPTION=rt also searches
@@ -181,11 +185,14 @@
additional requirements are necessary and present for
activation, and if so, will turn symbol versioning on. This
option can change the library ABI.
- </p></dd><dt><span class="term"><code class="code">--enable-visibility</code></span></dt><dd><p> In 4.2 and later, enables or disables visibility attributes.
- If enabled (as by default), and the compiler seems capable of
- passing the simple sanity checks thrown at it, adjusts items
- in namespace std, namespace std::tr1, and namespace __gnu_cxx
- so that -fvisibility options work.
+ </p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-visibility</code></span></dt><dd><p> In 4.2 and later, enables or disables visibility
+ attributes. If enabled (as by default), and the compiler seems
+ capable of passing the simple sanity checks thrown at it, adjusts
+ items in namespace std, namespace std::tr1, namespace std::tr2,
+ and namespace __gnu_cxx to have <code class="code">visibility ("default")</code>
+ so that -fvisibility options can be used without affecting the
+ normal external-visibility of namespace std entities.
+ Prior to 4.7 this option was spelled <code class="code">--enable-visibility</code>.
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-pch</code></span></dt><dd><p>In 3.4 and later, tries to turn on the generation of
stdc++.h.gch, a pre-compiled file including all the standard
C++ includes. If enabled (as by default), and the compiler
@@ -208,4 +215,4 @@
<span class="emphasis"><em>freestanding</em></span> environment, in which only a
minimal set of headers are provided. This option builds such an
environment.
- </p></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td align="center"><a accesskey="u" href="setup.html">Up</a></td><td align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 2. Setup </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Make</td></tr></table></div></body></html>
+ </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/containers.html b/libstdc++-v3/doc/html/manual/containers.html
index 1185af6a10..a1398921fc 100644
--- a/libstdc++-v3/doc/html/manual/containers.html
+++ b/libstdc++-v3/doc/html/manual/containers.html
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="facets.html" title="Facets"/><link rel="next" href="associative.html" title="Associative"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
Containers
-</th></tr><tr><td align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 9.  Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"/>Chapter 9. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 9.  Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
Containers
- <a id="id478750" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section" title="Sequences"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers.sequences"/>Sequences</h2></div></div></div><div class="section" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"/>list</h3></div></div></div><div class="section" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"/>list::size() is O(n)</h4></div></div></div><p>
+ <a id="idp16014032" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section" title="Sequences"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
Yes it is, and that's okay. This is a decision that we preserved
when we imported SGI's STL implementation. The following is
- quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html">their FAQ</a>:
+ quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
</p><div class="blockquote"><blockquote class="blockquote"><p>
The size() member function, for list and slist, takes time
proportional to the number of elements in the list. This was a
@@ -42,14 +42,14 @@
</p><pre class="programlisting">
if (L.empty())
...
- </pre></blockquote></div></div></div><div class="section" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"/>vector</h3></div></div></div><p>
- </p><div class="section" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"/>Space Overhead Management</h4></div></div></div><p>
- In <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html">this
+ </pre></blockquote></div></div></div><div class="section" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
+ </p><div class="section" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
+ In <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html" target="_top">this
message to the list</a>, Daniel Kostecky announced work on an
alternate form of <code class="code">std::vector</code> that would support
hints on the number of elements to be over-allocated. The design
was also described, along with possible implementation choices.
</p><p>
- The first two alpha releases were announced <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html">here</a>
- and <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html">here</a>.
- </p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td align="left" valign="top">Facets </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Associative</td></tr></table></div></body></html>
+ The first two alpha releases were announced <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html" target="_top">here</a>
+ and <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html" target="_top">here</a>.
+ </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/containers_and_c.html b/libstdc++-v3/doc/html/manual/containers_and_c.html
index 3e612aa5a5..13b1c9c654 100644
--- a/libstdc++-v3/doc/html/manual/containers_and_c.html
+++ b/libstdc++-v3/doc/html/manual/containers_and_c.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="containers.html" title="Chapter 9.  Containers"/><link rel="prev" href="associative.html" title="Associative"/><link rel="next" href="iterators.html" title="Chapter 10.  Iterators"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="iterators.html" title="Chapter 10.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
-</th><td align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr/></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers.c"/>Interacting with C</h2></div></div></div><div class="section" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"/>Containers vs. Arrays</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="section" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
You're writing some code and can't decide whether to use builtin
arrays or some kind of container. There are compelling reasons
to use one of the container classes, but you're afraid that
@@ -84,7 +84,7 @@ template&lt;typename T, unsigned int sz&gt;
inline unsigned int lengthof (T (&amp;)[sz]) { return sz; }
</pre><p>
looks just weird! Hint: unused parameters can be left nameless.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td align="center"><a accesskey="u" href="containers.html">Up</a></td><td align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td align="left" valign="top">Associative </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 10. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Associative </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. 
Iterators
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/debug.html b/libstdc++-v3/doc/html/manual/debug.html
index 55b5abf767..d3aed397d2 100644
--- a/libstdc++-v3/doc/html/manual/debug.html
+++ b/libstdc++-v3/doc/html/manual/debug.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; debug&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_exceptions.html" title="Exceptions"/><link rel="next" href="bk01pt02.html" title="Part II.  Standard Contents"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr></table><hr/></div><div class="section" title="Debugging Support"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.debug"/>Debugging Support</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="bk01pt02.html" title="Part II.  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr></table><hr /></div><div class="section" title="Debugging Support"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
There are numerous things that can be done to improve the ease with
which C++ binaries are debugged when using the GNU tool chain. Here
are some of them.
-</p><div class="section" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"/>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
+</p><div class="section" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
Compiler flags determine how debug information is transmitted
between compilation and debug or analysis tools.
</p><p>
@@ -28,10 +28,10 @@
platform can be identified via the value set by the
PREFERRED_DEBUGGING_TYPE macro in the gcc sources.
</p><p>
- Many other options are available: please see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options">"Options
+ Many other options are available: please see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options" target="_top">"Options
for Debugging Your Program"</a> in Using the GNU Compiler
Collection (GCC) for a complete list.
-</p></div><div class="section" title="Debug Versions of Library Binary Files"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"/>Debug Versions of Library Binary Files</h3></div></div></div><p>
+</p></div><div class="section" title="Debug Versions of Library Binary Files"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p>
If you would like debug symbols in libstdc++, there are two ways to
build libstdc++ with debug flags. The first is to run make from the
toplevel in a freshly-configured tree with
@@ -52,7 +52,7 @@
</pre><p>
This quick and dirty approach is often sufficient for quick
debugging tasks, when you cannot or don't want to recompile your
- application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"/>Memory Leak Hunting</h3></div></div></div><p>
+ application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
There are various third party memory tracing and debug utilities
that can be used to provide detailed memory allocation information
about C++ code. An exhaustive list of tools is not going to be
@@ -67,7 +67,7 @@
thing of great importance to keep in mind when debugging C++ code
that uses <code class="code">new</code> and <code class="code">delete</code>: there are
different kinds of allocation schemes that can be used by <code class="code">
- std::allocator </code>. For implementation details, see the <a class="link" href="ext_allocators.html#manual.ext.allocator.mt" title="mt_allocator">mt allocator</a> documentation and
+ std::allocator </code>. For implementation details, see the <a class="link" href="mt_allocator.html" title="Chapter 20. The mt_allocator">mt allocator</a> documentation and
look specifically for <code class="code">GLIBCXX_FORCE_NEW</code>.
</p><p>
In a nutshell, the default allocator used by <code class="code">
@@ -121,7 +121,7 @@
up the runtime environment, library, and test file, might be:
</p><pre class="programlisting">
valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
-</pre></div><div class="section" title="Data Race Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"/>Data Race Hunting</h3></div></div></div><p>
+</pre></div><div class="section" title="Data Race Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"></a>Data Race Hunting</h3></div></div></div><p>
All synchronization primitives used in the library internals need to be
understood by race detectors so that they do not produce false reports.
</p><p>
@@ -136,22 +136,32 @@
redefining them will only affect inline functions and template
instantiations which are compiled in user code. This allows annotation
of templates such as <code class="code">shared_ptr</code>, but not code which is
- only instantiated in the library.
- In order to annotate <code class="code">basic_string</code> reference counting it
- is necessary to disable extern templates (by defining
- <code class="code">_GLIBCXX_EXTERN_TEMPLATE=-1</code>) or to rebuild the
- <code class="code">.so</code> file.
+ only instantiated in the library. Code which is only instantiated in
+ the library needs to be recompiled with the annotation macros defined.
+ That can be done by rebuilding the entire
+ <code class="filename">libstdc++.so</code> file but a simpler
+ alternative exists for ELF platforms such as GNU/Linux, because ELF
+ symbol interposition allows symbols defined in the shared library to be
+ overridden by symbols with the same name that appear earlier in the
+ runtime search path. This means you only need to recompile the functions
+ that are affected by the annotation macros, which can be done by
+ recompiling individual files.
+ Annotating <code class="code">std::string</code> and <code class="code">std::wstring</code>
+ reference counting can be done by disabling extern templates (by defining
+ <code class="code">_GLIBCXX_EXTERN_TEMPLATE=-1</code>) or by rebuilding the
+ <code class="filename">src/string-inst.cc</code> file.
Annotating the remaining atomic operations (at the time of writing these
- are in <code class="code">ios_base::Init::~Init</code>, <code class="code">locale::_Impl</code> and
- <code class="code">locale::facet</code>) requires rebuilding the <code class="code">.so</code> file.
+ are in <code class="code">ios_base::Init::~Init</code>, <code class="code">locale::_Impl</code>,
+ <code class="code">locale::facet</code> and <code class="code">thread::_M_start_thread</code>)
+ requires rebuilding the relevant source files.
</p><p>
The approach described above is known to work with the following race
detection tools:
- <a class="link" href="http://valgrind.org/docs/manual/drd-manual.html">
+ <a class="link" href="http://valgrind.org/docs/manual/drd-manual.html" target="_top">
DRD</a>,
- <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html">
+ <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
Helgrind</a>, and
- <a class="link" href="http://code.google.com/p/data-race-test">
+ <a class="link" href="http://code.google.com/p/data-race-test" target="_top">
ThreadSanitizer</a>.
</p><p>
With DRD, Helgrind and ThreadSanitizer you will need to define
@@ -161,9 +171,9 @@
#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
</pre><p>
Refer to the documentation of each particular tool for details.
-</p></div><div class="section" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"/>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
+</p></div><div class="section" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
</p><p>
- Many options are available for GDB itself: please see <a class="link" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb/">
+ Many options are available for GDB itself: please see <a class="link" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb/" target="_top">
"GDB features for C++" </a> in the GDB documentation. Also
recommended: the other parts of this manual.
</p><p>
@@ -207,25 +217,25 @@
pretty-printers were not loaded.
</p><p>
For additional information on STL support and GDB please visit:
- <a class="link" href="http://sourceware.org/gdb/wiki/STLSupport"> "GDB Support
+ <a class="link" href="http://sourceware.org/gdb/wiki/STLSupport" target="_top"> "GDB Support
for STL" </a> in the GDB wiki. Additionally, in-depth
documentation and discussion of the pretty printing feature can be
found in "Pretty Printing" node in the GDB manual. You can find
on-line versions of the GDB user manual in GDB's homepage, at
- <a class="link" href="http://sourceware.org/gdb/"> "GDB: The GNU Project
+ <a class="link" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project
Debugger" </a>.
-</p></div><div class="section" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"/>Tracking uncaught exceptions</h3></div></div></div><p>
+</p></div><div class="section" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose
termination handler</a> gives information about uncaught
exceptions which are killing the program. It is described in the
linked-to page.
-</p></div><div class="section" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"/>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
+</p></div><div class="section" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
has compile and run-time checks for many containers.
- </p></div><div class="section" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"/>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
+ </p></div><div class="section" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
Checks</a> Extension has compile-time checks for many algorithms.
- </p></div><div class="section" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"/>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
+ </p></div><div class="section" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
Performance Analysis</a> Extension has performance checks for many
algorithms.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td align="left" valign="top">Exceptions </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part II. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. 
Standard Contents
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/debug_mode.html b/libstdc++-v3/doc/html/manual/debug_mode.html
index f35960b53b..4dc445189e 100644
--- a/libstdc++-v3/doc/html/manual/debug_mode.html
+++ b/libstdc++-v3/doc/html/manual/debug_mode.html
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks"/><link rel="next" href="bk01pt03ch17s02.html" title="Semantics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="bk01pt03ch17s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 17. Debug Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"/>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.intro"/>Intro</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 17. Debug Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
By default, libstdc++ is built with efficiency in mind, and
therefore performs little or no error checking that is not
required by the C++ standard. This means that programs that
@@ -20,7 +21,7 @@
The libstdc++ debug mode performs checking for many areas of the
C++ standard, but the focus is on checking interactions among
standard iterators, containers, and algorithms, including:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
container whose elements they reference, so errors such as
incrementing a past-the-end iterator or dereferencing an iterator
that points to a container that has been destructed are diagnosed
@@ -34,4 +35,4 @@
the same predicate that was passed
to <code class="code">set_intersection</code>; the libstdc++ debug mode will
detect an error if the sequence is not sorted or was sorted by a
- different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 16. Compile Time Checks </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+ different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/diagnostics.html b/libstdc++-v3/doc/html/manual/diagnostics.html
index 9c9abdfc2c..fa5fed46f2 100644
--- a/libstdc++-v3/doc/html/manual/diagnostics.html
+++ b/libstdc++-v3/doc/html/manual/diagnostics.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="termination.html" title="Termination"/><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
Diagnostics
-</th></tr><tr><td align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 5.  Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"/>Chapter 5. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 5.  Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
Diagnostics
- <a id="id472366" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="section" title="Exceptions"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics.exceptions"/>Exceptions</h2></div></div></div><div class="section" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"/>API Reference</h3></div></div></div><p>
+ <a id="idp13808352" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="section" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
All exception objects are defined in one of the standard header
files: <code class="filename">exception</code>,
<code class="filename">stdexcept</code>, <code class="filename">new</code>, and
@@ -23,7 +23,7 @@
found in the source documentation.
</p><p>
Full API details.
- </p></div><div class="section" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"/>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
+ </p></div><div class="section" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
The standard exception classes carry with them a single string as
data (usually describing what went wrong or where the 'throw' took
place). It's good to remember that you can add your own data to
@@ -40,4 +40,4 @@
int e;
DBID id; // some user-defined type
};
- </pre></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td align="left" valign="top">Termination </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
+ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/documentation_hacking.html b/libstdc++-v3/doc/html/manual/documentation_hacking.html
index fbb85b150f..65e20c5e4c 100644
--- a/libstdc++-v3/doc/html/manual/documentation_hacking.html
+++ b/libstdc++-v3/doc/html/manual/documentation_hacking.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="prev" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
-</th><td align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr/></div><div class="section" title="Writing and Generating Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.doc"/>Writing and Generating Documentation</h2></div></div></div><div class="section" title="Introduction"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"/>Introduction</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section" title="Writing and Generating Documentation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.doc"></a>Writing and Generating Documentation</h2></div></div></div><div class="section" title="Introduction"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
Documentation for the GNU C++ Library is created from three
independent sources: a manual, a FAQ, and an API reference.
</p><p>
@@ -25,9 +25,9 @@
reference. Although divergent, this conforms to the GNU Project
recommendations as long as the output is of sufficient quality,
as per
- <a class="link" href="http://www.gnu.org/prep/standards/standards.html#Documentation">
+ <a class="link" href="http://www.gnu.org/prep/standards/standards.html#Documentation" target="_top">
GNU Manuals</a>.
- </p></div><div class="section" title="Generating Documentation"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"/>Generating Documentation</h3></div></div></div><p>
+ </p></div><div class="section" title="Generating Documentation"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"></a>Generating Documentation</h3></div></div></div><p>
Certain Makefile rules are required by the GNU Coding
Standards. These standard rules generate HTML, PDF, XML, or man
files. For each of the generative rules, there is an additional
@@ -61,13 +61,9 @@
Generates multi-page HTML documentation, and installs it
in the following directories:
</p><p>
- <code class="filename">
- doc/libstdc++/libstdc++-api.html
- </code>
+ <code class="filename">doc/libstdc++/libstdc++-api.html</code>
</p><p>
- <code class="filename">
- doc/libstdc++/libstdc++-manual.html
- </code>
+ <code class="filename">doc/libstdc++/libstdc++-manual.html</code>
</p></dd><dt><span class="term">
<span class="emphasis"><em>make pdf</em></span>
, </span><span class="term">
@@ -117,21 +113,29 @@
supported, and are always aliased to dummy rules. These
unsupported formats are: <span class="emphasis"><em>info</em></span>,
<span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
- </p></div><div class="section" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"/>Doxygen</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"/>Prerequisites</h4></div></div></div><div class="table"><a id="id495087"/><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col style="text-align: center" class="c1"/><col style="text-align: center" class="c2"/><col style="text-align: center" class="c3"/></colgroup><thead><tr><th style="text-align: center">Tool</th><th style="text-align: center">Version</th><th style="text-align: center">Required By</th></tr></thead><tbody><tr><td style="text-align: center">coreutils</td><td style="text-align: center">8.5</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">bash</td><td style="text-align: center">4.1</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">doxygen</td><td style="text-align: center">1.7.0</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">graphviz</td><td style="text-align: center">2.26</td><td style="text-align: center">graphical hierarchies</td></tr><tr><td style="text-align: center">pdflatex</td><td style="text-align: center">2007-59</td><td style="text-align: center">pdf output</td></tr></tbody></table></div></div><br class="table-break"/><p>
+ </p></div><div class="section" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22126320"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
Prerequisite tools are Bash 2.0 or later,
- <a class="link" href="http://www.doxygen.org/">Doxygen</a>, and
- the <a class="link" href="http://www.gnu.org/software/coreutils/">GNU
+ <a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
+ the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
coreutils</a>. (GNU versions of find, xargs, and possibly
sed and grep are used, just because the GNU versions make
things very easy.)
</p><p>
To generate the pretty pictures and hierarchy
graphs, the
- <a class="link" href="http://www.graphviz.org">Graphviz</a> package
+ <a class="link" href="http://www.graphviz.org" target="_top">Graphviz</a> package
will need to be installed. For PDF
- output, <a class="link" href="http://www.tug.org/applications/pdftex/">
+ output, <a class="link" href="http://www.tug.org/applications/pdftex/" target="_top">
pdflatex</a> is required.
- </p></div><div class="section" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"/>Generating the Doxygen Files</h4></div></div></div><p>
+ </p><p>
+ Be warned the PDF file generated via doxygen is extremely
+ large. At last count, the PDF file is over three thousand
+ pages. Generating this document taxes the underlying TeX
+ formatting system, and will require the expansion of TeX's memory
+ capacity. Specifically, the <code class="literal">pool_size</code>
+ variable in the configuration file <code class="filename">texmf.cnf</code> may
+ need to be increased by a minimum factor of two.
+ </p></div><div class="section" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
The following Makefile rules run Doxygen to generate HTML
docs, XML docs, XML docs as a single file, PDF docs, and the
man pages. These rules are not conditional! If the required
@@ -163,7 +167,51 @@
If you wish to tweak the Doxygen settings, do so by editing
<code class="filename">doc/doxygen/user.cfg.in</code>. Notes to fellow
library hackers are written in triple-# comments.
- </p></div><div class="section" title="Markup"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"/>Markup</h4></div></div></div><p>
+ </p></div><div class="section" title="Debugging Generation"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.debug"></a>Debugging Generation</h4></div></div></div><p>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+ to fix some common issues that may appear quite cryptic.
+ </p><p>
+ First, if using a rule like <code class="code">make pdf</code>, try to
+ narrow down the scope of the error to either docbook
+ (<code class="code">make doc-pdf-docbook</code>) or doxygen (<code class="code">make
+ doc-pdf-doxygen</code>).
+ </p><p>
+ Working on the doxygen path only, closely examine the
+ contents of the following build directory:
+ <code class="filename">build/target/libstdc++-v3/doc/doxygen/latex</code>.
+ Pay attention to three files enclosed within, annotated as follows.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <span class="emphasis"><em>refman.tex</em></span>
+ </p><p>
+ The actual latex file, or partial latex file. This is generated
+ via <span class="command"><strong>doxygen</strong></span>, and is the LaTeX version of the
+ Doxygen XML file <code class="filename">libstdc++-api.xml</code>. Go to a specific
+ line, and look at the genrated LaTeX, and try to deduce what
+ markup in <code class="filename">libstdc++-api.xml</code> is causing it.
+ </p></li><li class="listitem"><p>
+ <span class="emphasis"><em>refman.out</em></span>
+ </p><p>
+ A log of the compilation of the converted LaTeX form to pdf. This
+ is a linear list, from the beginning of the
+ <code class="filename">refman.tex</code> file: the last entry of this file
+ should be the end of the LaTeX file. If it is truncated, then you
+ know that the last entry is the last part of the generated LaTeX
+ source file that is valid. Often this file contains an error with
+ a specific line number of <code class="filename">refman.tex</code> that is
+ incorrect, or will have clues at the end of the file with the dump
+ of the memory usage of LaTeX.
+ </p></li></ul></div><p>
+ If the error at hand is not obvious after examination, a
+ fall-back strategy is to start commenting out the doxygen
+ input sources, which can be found in
+ <code class="filename">doc/doxygen/user.cfg.in</code>, look for the
+ <code class="literal">INPUT</code> tag. Start by commenting out whole
+ directories of header files, until the offending header is
+ identified. Then, read the latex log files to try and find
+ surround text, and look for that in the offending header.
+ </p></div><div class="section" title="Markup"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"></a>Markup</h4></div></div></div><p>
In general, libstdc++ files should be formatted according to
the rules found in the
<a class="link" href="source_code_style.html" title="Coding Style">Coding Standard</a>. Before
@@ -173,7 +221,7 @@
Adding Doxygen markup to a file (informally called
<span class="quote">“<span class="quote">doxygenating</span>â€</span>) is very simple. The Doxygen manual can be
found
- <a class="link" href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman">here</a>.
+ <a class="link" href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman" target="_top">here</a>.
We try to use a very-recent version of Doxygen.
</p><p>
For classes, use
@@ -185,10 +233,10 @@
member functions.
</p><p>
Some commentary to accompany
- the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html">Special
+ the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
Documentation Blocks</a> section of
the Doxygen manual:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
...not the Qt style. The intermediate *'s are preferred.
</p></li><li class="listitem"><p>
Use the triple-slash style only for one-line comments (the
@@ -218,14 +266,14 @@
Complicated math functions should use the multi-line
format. An example from <code class="filename">random.h</code>:
</p><p>
-</p><div class="literallayout"><p><br/>
-/**<br/>
- * @brief A model of a linear congruential random number generator.<br/>
- *<br/>
- * @f[<br/>
- *     x_{i+1}\leftarrow(ax_{i} + c) \bmod m<br/>
- * @f]<br/>
- */<br/>
+</p><div class="literallayout"><p><br />
+/**<br />
+ * @brief A model of a linear congruential random number generator.<br />
+ *<br />
+ * @f[<br />
+ *     x_{i+1}\leftarrow(ax_{i} + c) \bmod m<br />
+ * @f]<br />
+ */<br />
</p></div><p>
</p><p>
One area of note is the markup required for
@@ -234,10 +282,10 @@
multiple directories, include part of the installed path to
disambiguate. For example:
</p><p>
-</p><div class="literallayout"><p><br/>
-/** @file debug/vector<br/>
- *  This file is a GNU debug extension to the Standard C++ Library.<br/>
- */<br/>
+</p><div class="literallayout"><p><br />
+/** @file debug/vector<br />
+ *  This file is a GNU debug extension to the Standard C++ Library.<br />
+ */<br />
</p></div><p>
</p><p>
The other relevant detail for header files is the use of a
@@ -252,18 +300,18 @@
<code class="literal">headername</code> in the <code class="literal">file</code>
block. An example:
</p><p>
-</p><div class="literallayout"><p><br/>
-/** @file bits/basic_string.h<br/>
- *  This is an internal header file, included by other library headers.<br/>
- *  Do not attempt to use it directly. @headername{string}<br/>
- */<br/>
+</p><div class="literallayout"><p><br />
+/** @file bits/basic_string.h<br />
+ *  This is an internal header file, included by other library headers.<br />
+ *  Do not attempt to use it directly. @headername{string}<br />
+ */<br />
</p></div><p>
</p><p>
Be careful about using certain, special characters when
writing Doxygen comments. Single and double quotes, and
separators in filenames are two common trouble spots. When in
doubt, consult the following table.
- </p><div class="table"><a id="id495589"/><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">HTML</th><th style="text-align: left">Doxygen</th></tr></thead><tbody><tr><td style="text-align: left">\</td><td style="text-align: left">\\</td></tr><tr><td style="text-align: left">"</td><td style="text-align: left">\"</td></tr><tr><td style="text-align: left">'</td><td style="text-align: left">\'</td></tr><tr><td style="text-align: left">&lt;i&gt;</td><td style="text-align: left">@a word</td></tr><tr><td style="text-align: left">&lt;b&gt;</td><td style="text-align: left">@b word</td></tr><tr><td style="text-align: left">&lt;code&gt;</td><td style="text-align: left">@c word</td></tr><tr><td style="text-align: left">&lt;em&gt;</td><td style="text-align: left">@a word</td></tr><tr><td style="text-align: left">&lt;em&gt;</td><td style="text-align: left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="section" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"/>Docbook</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"/>Prerequisites</h4></div></div></div><div class="table"><a id="id495751"/><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col style="text-align: center" class="c1"/><col style="text-align: center" class="c2"/><col style="text-align: center" class="c3"/></colgroup><thead><tr><th style="text-align: center">Tool</th><th style="text-align: center">Version</th><th style="text-align: center">Required By</th></tr></thead><tbody><tr><td style="text-align: center">docbook5-style-xsl</td><td style="text-align: center">1.76.1</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">xsltproc</td><td style="text-align: center">1.1.26</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">xmllint</td><td style="text-align: center">2.7.7</td><td style="text-align: center">validation</td></tr><tr><td style="text-align: center">dblatex</td><td style="text-align: center">0.3</td><td style="text-align: center">pdf output</td></tr><tr><td style="text-align: center">pdflatex</td><td style="text-align: center">2007-59</td><td style="text-align: center">pdf output</td></tr><tr><td style="text-align: center">docbook2X</td><td style="text-align: center">0.8.8</td><td style="text-align: center">info output</td></tr></tbody></table></div></div><br class="table-break"/><p>
+ </p><div class="table"><a id="idp22201984"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22221360"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
Editing the DocBook sources requires an XML editor. Many
exist: some notable options
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
@@ -288,7 +336,7 @@
in <code class="filename">doc/Makefile.am</code> and defaults
to <code class="filename">/usr/share/sgml/docbook/xsl-ns-stylesheets</code>.
</p><p>
- For processing XML, an XML processor and some style
+ For processing XML, an XSLT processor and some style
sheets are necessary. Defaults are <span class="command"><strong>xsltproc</strong></span>
provided by <code class="filename">libxslt</code>.
</p><p>
@@ -298,17 +346,19 @@
by a vendor package like <code class="filename">libxml2</code> and <code class="filename">docbook5-schemas-5.0-4</code>
</p><p>
For PDF output, something that transforms valid Docbook XML to PDF is
- required. Possible solutions include <a class="link" href="http://dblatex.sourceforge.net">dblatex</a>,
+ required. Possible solutions include <a class="link" href="http://dblatex.sourceforge.net" target="_top">dblatex</a>,
<span class="command"><strong>xmlto</strong></span>, or <span class="command"><strong>prince</strong></span>. Of
these, <span class="command"><strong>dblatex</strong></span> is the default. Other
- options are listed on the DocBook web <a class="link" href="http://wiki.docbook.org/topic/DocBookPublishingTools">pages</a>. Please
+ options are listed on the DocBook web <a class="link" href="http://wiki.docbook.org/topic/DocBookPublishingTools" target="_top">pages</a>. Please
consult the <code class="email">&lt;<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>&gt;</code> list when
preparing printed manuals for current best practice and
suggestions.
</p><p>
For Texinfo output, something that transforms valid Docbook
- XML to Texinfo is required. The default choice is <a class="link" href="http://docbook2x.sourceforge.net/">docbook2X</a>.
- </p></div><div class="section" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"/>Generating the DocBook Files</h4></div></div></div><p>
+ XML to Texinfo is required. The default choice is <a class="link" href="http://docbook2x.sourceforge.net/" target="_top">docbook2X</a>.
+ </p><p>
+ For epub output, the <a class="link" href="http://sourceforge.net/projects/docbook/files/epub3/" target="_top">stylesheets</a> for EPUB3 are required. These stylesheets are still in development. To validate the created file, <a class="link" href="https://code.google.com/p/epubcheck/" target="_top">epubcheck</a> is necessary.
+ </p></div><div class="section" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
The following Makefile rules generate (in order): an HTML
version of all the DocBook documentation, a PDF version of the
same, and a single XML document. These rules are not
@@ -328,12 +378,64 @@
</p><p>
If the Docbook stylesheets are installed in a custom location,
one can use the variable <code class="literal">XSL_STYLE_DIR</code> to
- over-ride the Makefile defaults. As so:
+ override the Makefile defaults. For example:
</p><pre class="screen">
<strong class="userinput"><code>
make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</code> doc-html-docbook
</code></strong>
- </pre></div><div class="section" title="Editing and Validation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"/>Editing and Validation</h4></div></div></div><p>
+ </pre></div><div class="section" title="Debugging Generation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.debug"></a>Debugging Generation</h4></div></div></div><p>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+ to fix some common issues that may appear quite cryptic.
+ </p><p>
+ First, if using a rule like <code class="code">make pdf</code>, try to
+ narrow down the scope of the error to either docbook
+ (<code class="code">make doc-pdf-docbook</code>) or doxygen (<code class="code">make
+ doc-pdf-doxygen</code>).
+ </p><p>
+ Working on the docbook path only, closely examine the
+ contents of the following build directory:
+ <code class="filename">build/target/libstdc++-v3/doc/docbook/latex</code>.
+ Pay attention to three files enclosed within, annotated as follows.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <span class="emphasis"><em>spine.tex</em></span>
+ </p><p>
+ The actual latex file, or partial latex file. This is generated
+ via <span class="command"><strong>dblatex</strong></span>, and is the LaTeX version of the
+ DocBook XML file <code class="filename">spine.xml</code>. Go to a specific
+ line, and look at the genrated LaTeX, and try to deduce what
+ markup in <code class="filename">spine.xml</code> is causing it.
+ </p></li><li class="listitem"><p>
+ <span class="emphasis"><em>spine.out</em></span>
+ </p><p>
+ A log of the conversion from the XML form to the LaTeX form. This
+ is a linear list, from the beginning of the
+ <code class="filename">spine.xml</code> file: the last entry of this file
+ should be the end of the DocBook file. If it is truncated, then
+ you know that the last entry is the last part of the XML source
+ file that is valid. The error is after this point.
+ </p></li><li class="listitem"><p>
+ <span class="emphasis"><em>spine.log</em></span>
+ </p><p>
+ A log of the compilation of the converted LaTeX form to pdf. This
+ is a linear list, from the beginning of the
+ <code class="filename">spine.tex</code> file: the last entry of this file
+ should be the end of the LaTeX file. If it is truncated, then you
+ know that the last entry is the last part of the generated LaTeX
+ source file that is valid. Often this file contains an error with
+ a specific line number of <code class="filename">spine.tex</code> that is
+ incorrect.
+ </p></li></ul></div><p>
+ If the error at hand is not obvious after examination, or if one
+ encounters the inscruitable <span class="quote">“<span class="quote">Incomplete
+ \ifmmode</span>â€</span> error, a fall-back strategy is to start
+ commenting out parts of the XML document (regardless of what
+ this does to over-all document validity). Start by
+ commenting out each of the largest parts of the
+ <code class="filename">spine.xml</code> file, section by section,
+ until the offending section is identified.
+ </p></div><div class="section" title="Editing and Validation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"></a>Editing and Validation</h4></div></div></div><p>
After editing the xml sources, please make sure that the XML
documentation and markup is still valid. This can be
done easily, with the following validation rule:
@@ -353,90 +455,90 @@ make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal
validation on the entire manual fails.
</p><p>
All Docbook xml sources should always validate. No excuses!
- </p></div><div class="section" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"/>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br/>
-      <span class="emphasis"><em>Which files are important</em></span><br/>
-<br/>
-      All Docbook files are in the directory<br/>
-      libstdc++-v3/doc/xml<br/>
-<br/>
-      Inside this directory, the files of importance:<br/>
-      spine.xml   - index to documentation set<br/>
-      manual/spine.xml  - index to manual<br/>
-      manual/*.xml   - individual chapters and sections of the manual<br/>
-      faq.xml   - index to FAQ<br/>
-      api.xml   - index to source level / API<br/>
-<br/>
-      All *.txml files are template xml files, i.e., otherwise empty files with<br/>
-      the correct structure, suitable for filling in with new information.<br/>
-<br/>
-      <span class="emphasis"><em>Canonical Writing Style</em></span><br/>
-<br/>
-      class template<br/>
-      function template<br/>
-      member function template<br/>
-      (via C++ Templates, Vandevoorde)<br/>
-<br/>
-      class in namespace std: allocator, not std::allocator<br/>
-<br/>
-      header file: iostream, not &lt;iostream&gt;<br/>
-<br/>
-<br/>
-      <span class="emphasis"><em>General structure</em></span><br/>
-<br/>
-      &lt;set&gt;<br/>
-      &lt;book&gt;<br/>
-      &lt;/book&gt;<br/>
-<br/>
-      &lt;book&gt;<br/>
-      &lt;chapter&gt;<br/>
-      &lt;/chapter&gt;<br/>
-      &lt;/book&gt;<br/>
-<br/>
-      &lt;book&gt;<br/>
-      &lt;part&gt;<br/>
-      &lt;chapter&gt;<br/>
-      &lt;section&gt;<br/>
-      &lt;/section&gt;<br/>
-<br/>
-      &lt;sect1&gt;<br/>
-      &lt;/sect1&gt;<br/>
-<br/>
-      &lt;sect1&gt;<br/>
-      &lt;sect2&gt;<br/>
-      &lt;/sect2&gt;<br/>
-      &lt;/sect1&gt;<br/>
-      &lt;/chapter&gt;<br/>
-<br/>
-      &lt;chapter&gt;<br/>
-      &lt;/chapter&gt;<br/>
-      &lt;/part&gt;<br/>
-      &lt;/book&gt;<br/>
-<br/>
-      &lt;/set&gt;<br/>
-    </p></div></div><div class="section" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"/>Markup By Example</h4></div></div></div><p>
+ </p></div><div class="section" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
+      <span class="emphasis"><em>Which files are important</em></span><br />
+<br />
+      All Docbook files are in the directory<br />
+      libstdc++-v3/doc/xml<br />
+<br />
+      Inside this directory, the files of importance:<br />
+      spine.xml   - index to documentation set<br />
+      manual/spine.xml  - index to manual<br />
+      manual/*.xml   - individual chapters and sections of the manual<br />
+      faq.xml   - index to FAQ<br />
+      api.xml   - index to source level / API<br />
+<br />
+      All *.txml files are template xml files, i.e., otherwise empty files with<br />
+      the correct structure, suitable for filling in with new information.<br />
+<br />
+      <span class="emphasis"><em>Canonical Writing Style</em></span><br />
+<br />
+      class template<br />
+      function template<br />
+      member function template<br />
+      (via C++ Templates, Vandevoorde)<br />
+<br />
+      class in namespace std: allocator, not std::allocator<br />
+<br />
+      header file: iostream, not &lt;iostream&gt;<br />
+<br />
+<br />
+      <span class="emphasis"><em>General structure</em></span><br />
+<br />
+      &lt;set&gt;<br />
+      &lt;book&gt;<br />
+      &lt;/book&gt;<br />
+<br />
+      &lt;book&gt;<br />
+      &lt;chapter&gt;<br />
+      &lt;/chapter&gt;<br />
+      &lt;/book&gt;<br />
+<br />
+      &lt;book&gt;<br />
+      &lt;part&gt;<br />
+      &lt;chapter&gt;<br />
+      &lt;section&gt;<br />
+      &lt;/section&gt;<br />
+<br />
+      &lt;sect1&gt;<br />
+      &lt;/sect1&gt;<br />
+<br />
+      &lt;sect1&gt;<br />
+      &lt;sect2&gt;<br />
+      &lt;/sect2&gt;<br />
+      &lt;/sect1&gt;<br />
+      &lt;/chapter&gt;<br />
+<br />
+      &lt;chapter&gt;<br />
+      &lt;/chapter&gt;<br />
+      &lt;/part&gt;<br />
+      &lt;/book&gt;<br />
+<br />
+      &lt;/set&gt;<br />
+    </p></div></div><div class="section" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
Complete details on Docbook markup can be found in the DocBook
Element Reference,
- <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html">online</a>.
+ <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
An incomplete reference for HTML to Docbook conversion is
detailed in the table below.
- </p><div class="table"><a id="id496228"/><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">HTML</th><th style="text-align: left">Docbook</th></tr></thead><tbody><tr><td style="text-align: left">&lt;p&gt;</td><td style="text-align: left">&lt;para&gt;</td></tr><tr><td style="text-align: left">&lt;pre&gt;</td><td style="text-align: left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
- &lt;literallayout&gt;</td></tr><tr><td style="text-align: left">&lt;ul&gt;</td><td style="text-align: left">&lt;itemizedlist&gt;</td></tr><tr><td style="text-align: left">&lt;ol&gt;</td><td style="text-align: left">&lt;orderedlist&gt;</td></tr><tr><td style="text-align: left">&lt;il&gt;</td><td style="text-align: left">&lt;listitem&gt;</td></tr><tr><td style="text-align: left">&lt;dl&gt;</td><td style="text-align: left">&lt;variablelist&gt;</td></tr><tr><td style="text-align: left">&lt;dt&gt;</td><td style="text-align: left">&lt;term&gt;</td></tr><tr><td style="text-align: left">&lt;dd&gt;</td><td style="text-align: left">&lt;listitem&gt;</td></tr><tr><td style="text-align: left">&lt;a href=""&gt;</td><td style="text-align: left">&lt;ulink url=""&gt;</td></tr><tr><td style="text-align: left">&lt;code&gt;</td><td style="text-align: left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td style="text-align: left">&lt;strong&gt;</td><td style="text-align: left">&lt;emphasis&gt;</td></tr><tr><td style="text-align: left">&lt;em&gt;</td><td style="text-align: left">&lt;emphasis&gt;</td></tr><tr><td style="text-align: left">"</td><td style="text-align: left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break"/><p>
+ </p><div class="table"><a id="idp22298992"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ &lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
And examples of detailed markup for which there are no real HTML
equivalents are listed in the table below.
-</p><div class="table"><a id="id496429"/><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">Element</th><th style="text-align: left">Use</th></tr></thead><tbody><tr><td style="text-align: left">&lt;structname&gt;</td><td style="text-align: left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td style="text-align: left">&lt;classname&gt;</td><td style="text-align: left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td style="text-align: left">&lt;function&gt;</td><td style="text-align: left">
+</p><div class="table"><a id="idp22323136"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
<p>&lt;function&gt;clear()&lt;/function&gt;</p>
<p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
- </td></tr><tr><td style="text-align: left">&lt;type&gt;</td><td style="text-align: left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td style="text-align: left">&lt;varname&gt;</td><td style="text-align: left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td style="text-align: left">&lt;literal&gt;</td><td style="text-align: left">
+ </td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
<p>&lt;literal&gt;-Weffc++&lt;/literal&gt;</p>
<p>&lt;literal&gt;rel_ops&lt;/literal&gt;</p>
- </td></tr><tr><td style="text-align: left">&lt;constant&gt;</td><td style="text-align: left">
+ </td></tr><tr><td align="left">&lt;constant&gt;</td><td align="left">
<p>&lt;constant&gt;_GNU_SOURCE&lt;/constant&gt;</p>
<p>&lt;constant&gt;3.0&lt;/constant&gt;</p>
- </td></tr><tr><td style="text-align: left">&lt;command&gt;</td><td style="text-align: left">&lt;command&gt;g++&lt;/command&gt;</td></tr><tr><td style="text-align: left">&lt;errortext&gt;</td><td style="text-align: left">&lt;errortext&gt;In instantiation of&lt;/errortext&gt;</td></tr><tr><td style="text-align: left">&lt;filename&gt;</td><td style="text-align: left">
+ </td></tr><tr><td align="left">&lt;command&gt;</td><td align="left">&lt;command&gt;g++&lt;/command&gt;</td></tr><tr><td align="left">&lt;errortext&gt;</td><td align="left">&lt;errortext&gt;In instantiation of&lt;/errortext&gt;</td></tr><tr><td align="left">&lt;filename&gt;</td><td align="left">
<p>&lt;filename class="headerfile"&gt;ctype.h&lt;/filename&gt;</p>
<p>&lt;filename class="directory"&gt;/home/gcc/build&lt;/filename&gt;</p>
<p>&lt;filename class="libraryfile"&gt;libstdc++.so&lt;/filename&gt;</p>
- </td></tr></tbody></table></div></div><br class="table-break"/></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix B. 
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B. 
Porting and Maintenance
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/dynamic_memory.html b/libstdc++-v3/doc/html/manual/dynamic_memory.html
index 481347bef0..93c460fed6 100644
--- a/libstdc++-v3/doc/html/manual/dynamic_memory.html
+++ b/libstdc++-v3/doc/html/manual/dynamic_memory.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="support.html" title="Chapter 4.  Support"/><link rel="prev" href="support.html" title="Chapter 4.  Support"/><link rel="next" href="termination.html" title="Termination"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="support.html" title="Chapter 4.  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
Support
-</th><td align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr/></div><div class="section" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title"><a id="std.support.memory"/>Dynamic Memory</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
There are six flavors each of <code class="function">new</code> and
<code class="function">delete</code>, so make certain that you're using the right
ones. Here are quickie descriptions of <code class="function">new</code>:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
single object form, throwing a
<code class="classname">bad_alloc</code> on errors; this is what most
people are used to using
@@ -66,7 +66,7 @@
</pre><p>
<code class="classname">bad_alloc</code> is derived from the base <code class="classname">exception</code>
class defined in Sect1 19.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="support.html">Prev</a> </td><td align="center"><a accesskey="u" href="support.html">Up</a></td><td align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 4. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. 
Support
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Termination</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_algorithms.html b/libstdc++-v3/doc/html/manual/ext_algorithms.html
index 354dd9bbc7..e6a9d8c50a 100644
--- a/libstdc++-v3/doc/html/manual/ext_algorithms.html
+++ b/libstdc++-v3/doc/html/manual/ext_algorithms.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 23. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_utilities.html" title="Chapter 22. Utilities"/><link rel="next" href="ext_numerics.html" title="Chapter 24. Numerics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Algorithms</th></tr><tr><td align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 23. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"/>Chapter 23. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 25. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 25. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
and count_if. The standard versions return their results. The
additional signatures return void, but take a final parameter by
reference to which they assign their results, e.g.,
@@ -15,9 +15,9 @@
copy_n (_InputIter first, _Size count, _OutputIter result);</pre><p>which copies the first 'count' elements at 'first' into 'result'.
</p><p>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
predicates. Look in the doxygen-generated pages for notes on these.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
</p><pre class="programlisting">
lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
_InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 22. Utilities </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 24. Numerics</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Numerics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_allocators.html b/libstdc++-v3/doc/html/manual/ext_allocators.html
deleted file mode 100644
index bd283b75c4..0000000000
--- a/libstdc++-v3/doc/html/manual/ext_allocators.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 20. Allocators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="bk01pt03ch19s07.html" title="Diagnostics"/><link rel="next" href="bitmap_allocator.html" title="bitmap_allocator"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Allocators</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
- Extensions
-
-</th><td align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 20. Allocators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator"/>Chapter 20. Allocators</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></div><div class="section" title="mt_allocator"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"/>mt_allocator</h2></div></div></div><p>
-</p><div class="section" title="Intro"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.intro"/>Intro</h3></div></div></div><p>
- The mt allocator [hereinafter referred to simply as "the allocator"]
- is a fixed size (power of two) allocator that was initially
- developed specifically to suit the needs of multi threaded
- applications [hereinafter referred to as an MT application]. Over
- time the allocator has evolved and been improved in many ways, in
- particular it now also does a good job in single threaded
- applications [hereinafter referred to as a ST application]. (Note:
- In this document, when referring to single threaded applications
- this also includes applications that are compiled with gcc without
- thread support enabled. This is accomplished using ifdef's on
- __GTHREADS). This allocator is tunable, very flexible, and capable
- of high-performance.
-</p><p>
- The aim of this document is to describe - from an application point of
- view - the "inner workings" of the allocator.
-</p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.design_issues"/>Design Issues</h3></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.overview"/>Overview</h4></div></div></div><p> There are three general components to the allocator: a datum
-describing the characteristics of the memory pool, a policy class
-containing this pool that links instantiation types to common or
-individual pools, and a class inheriting from the policy class that is
-the actual allocator.
-</p><p>The datum describing pools characteristics is
-</p><pre class="programlisting">
- template&lt;bool _Thread&gt;
- class __pool
-</pre><p> This class is parametrized on thread support, and is explicitly
-specialized for both multiple threads (with <code class="code">bool==true</code>)
-and single threads (via <code class="code">bool==false</code>.) It is possible to
-use a custom pool datum instead of the default class that is provided.
-</p><p> There are two distinct policy classes, each of which can be used
-with either type of underlying pool datum.
-</p><pre class="programlisting">
- template&lt;bool _Thread&gt;
- struct __common_pool_policy
-
- template&lt;typename _Tp, bool _Thread&gt;
- struct __per_type_pool_policy
-</pre><p> The first policy, <code class="code">__common_pool_policy</code>, implements a
-common pool. This means that allocators that are instantiated with
-different types, say <code class="code">char</code> and <code class="code">long</code> will both
-use the same pool. This is the default policy.
-</p><p> The second policy, <code class="code">__per_type_pool_policy</code>, implements
-a separate pool for each instantiating type. Thus, <code class="code">char</code>
-and <code class="code">long</code> will use separate pools. This allows per-type
-tuning, for instance.
-</p><p> Putting this all together, the actual allocator class is
-</p><pre class="programlisting">
- template&lt;typename _Tp, typename _Poolp = __default_policy&gt;
- class __mt_alloc : public __mt_alloc_base&lt;_Tp&gt;, _Poolp
-</pre><p> This class has the interface required for standard library allocator
-classes, namely member functions <code class="code">allocate</code> and
-<code class="code">deallocate</code>, plus others.
-</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.impl"/>Implementation</h3></div></div></div><div class="section" title="Tunable Parameters"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.tune"/>Tunable Parameters</h4></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
-exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
-these parameters, which include settings for
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
-happen before any allocations take place, when the allocator itself is
-initialized. For instance:
-</p><pre class="programlisting">
-#include &lt;ext/mt_allocator.h&gt;
-
-struct pod
-{
- int i;
- int j;
-};
-
-int main()
-{
- typedef pod value_type;
- typedef __gnu_cxx::__mt_alloc&lt;value_type&gt; allocator_type;
- typedef __gnu_cxx::__pool_base::_Tune tune_type;
-
- tune_type t_default;
- tune_type t_opt(16, 5120, 32, 5120, 20, 10, false);
- tune_type t_single(16, 5120, 32, 5120, 1, 10, false);
-
- tune_type t;
- t = allocator_type::_M_get_options();
- allocator_type::_M_set_options(t_opt);
- t = allocator_type::_M_get_options();
-
- allocator_type a;
- allocator_type::pointer p1 = a.allocate(128);
- allocator_type::pointer p2 = a.allocate(5128);
-
- a.deallocate(p1, 128);
- a.deallocate(p2, 5128);
-
- return 0;
-}
-</pre></div><div class="section" title="Initialization"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.init"/>Initialization</h4></div></div></div><p>
-The static variables (pointers to freelists, tuning parameters etc)
-are initialized as above, or are set to the global defaults.
-</p><p>
-The very first allocate() call will always call the
-_S_initialize_once() function. In order to make sure that this
-function is called exactly once we make use of a __gthread_once call
-in MT applications and check a static bool (_S_init) in ST
-applications.
-</p><p>
-The _S_initialize() function:
-- If the GLIBCXX_FORCE_NEW environment variable is set, it sets the bool
- _S_force_new to true and then returns. This will cause subsequent calls to
- allocate() to return memory directly from a new() call, and deallocate will
- only do a delete() call.
-</p><p>
-- If the GLIBCXX_FORCE_NEW environment variable is not set, both ST and MT
- applications will:
- - Calculate the number of bins needed. A bin is a specific power of two size
- of bytes. I.e., by default the allocator will deal with requests of up to
- 128 bytes (or whatever the value of _S_max_bytes is when _S_init() is
- called). This means that there will be bins of the following sizes
- (in bytes): 1, 2, 4, 8, 16, 32, 64, 128.
-
- - Create the _S_binmap array. All requests are rounded up to the next
- "large enough" bin. I.e., a request for 29 bytes will cause a block from
- the "32 byte bin" to be returned to the application. The purpose of
- _S_binmap is to speed up the process of finding out which bin to use.
- I.e., the value of _S_binmap[ 29 ] is initialized to 5 (bin 5 = 32 bytes).
-</p><p>
- - Create the _S_bin array. This array consists of bin_records. There will be
- as many bin_records in this array as the number of bins that we calculated
- earlier. I.e., if _S_max_bytes = 128 there will be 8 entries.
- Each bin_record is then initialized:
- - bin_record-&gt;first = An array of pointers to block_records. There will be
- as many block_records pointers as there are maximum number of threads
- (in a ST application there is only 1 thread, in a MT application there
- are _S_max_threads).
- This holds the pointer to the first free block for each thread in this
- bin. I.e., if we would like to know where the first free block of size 32
- for thread number 3 is we would look this up by: _S_bin[ 5 ].first[ 3 ]
-
- The above created block_record pointers members are now initialized to
- their initial values. I.e. _S_bin[ n ].first[ n ] = NULL;
-</p><p>
-- Additionally a MT application will:
- - Create a list of free thread id's. The pointer to the first entry
- is stored in _S_thread_freelist_first. The reason for this approach is
- that the __gthread_self() call will not return a value that corresponds to
- the maximum number of threads allowed but rather a process id number or
- something else. So what we do is that we create a list of thread_records.
- This list is _S_max_threads long and each entry holds a size_t thread_id
- which is initialized to 1, 2, 3, 4, 5 and so on up to _S_max_threads.
- Each time a thread calls allocate() or deallocate() we call
- _S_get_thread_id() which looks at the value of _S_thread_key which is a
- thread local storage pointer. If this is NULL we know that this is a newly
- created thread and we pop the first entry from this list and saves the
- pointer to this record in the _S_thread_key variable. The next time
- we will get the pointer to the thread_record back and we use the
- thread_record-&gt;thread_id as identification. I.e., the first thread that
- calls allocate will get the first record in this list and thus be thread
- number 1 and will then find the pointer to its first free 32 byte block
- in _S_bin[ 5 ].first[ 1 ]
- When we create the _S_thread_key we also define a destructor
- (_S_thread_key_destr) which means that when the thread dies, this
- thread_record is returned to the front of this list and the thread id
- can then be reused if a new thread is created.
- This list is protected by a mutex (_S_thread_freelist_mutex) which is only
- locked when records are removed or added to the list.
-</p><p>
- - Initialize the free and used counters of each bin_record:
- - bin_record-&gt;free = An array of size_t. This keeps track of the number
- of blocks on a specific thread's freelist in each bin. I.e., if a thread
- has 12 32-byte blocks on it's freelists and allocates one of these, this
- counter would be decreased to 11.
-
- - bin_record-&gt;used = An array of size_t. This keeps track of the number
- of blocks currently in use of this size by this thread. I.e., if a thread
- has made 678 requests (and no deallocations...) of 32-byte blocks this
- counter will read 678.
-
- The above created arrays are now initialized with their initial values.
- I.e. _S_bin[ n ].free[ n ] = 0;
-</p><p>
- - Initialize the mutex of each bin_record: The bin_record-&gt;mutex
- is used to protect the global freelist. This concept of a global
- freelist is explained in more detail in the section "A multi
- threaded example", but basically this mutex is locked whenever a
- block of memory is retrieved or returned to the global freelist
- for this specific bin. This only occurs when a number of blocks
- are grabbed from the global list to a thread specific list or when
- a thread decides to return some blocks to the global freelist.
-</p></div><div class="section" title="Deallocation Notes"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.deallocation"/>Deallocation Notes</h4></div></div></div><p> Notes about deallocation. This allocator does not explicitly
-release memory. Because of this, memory debugging programs like
-valgrind or purify may notice leaks: sorry about this
-inconvenience. Operating systems will reclaim allocated memory at
-program termination anyway. If sidestepping this kind of noise is
-desired, there are three options: use an allocator, like
-<code class="code">new_allocator</code> that releases memory while debugging, use
-GLIBCXX_FORCE_NEW to bypass the allocator's internal pools, or use a
-custom pool datum that releases resources on destruction.
-</p><p>
- On systems with the function <code class="code">__cxa_atexit</code>, the
-allocator can be forced to free all memory allocated before program
-termination with the member function
-<code class="code">__pool_type::_M_destroy</code>. However, because this member
-function relies on the precise and exactly-conforming ordering of
-static destructors, including those of a static local
-<code class="code">__pool</code> object, it should not be used, ever, on systems
-that don't have the necessary underlying support. In addition, in
-practice, forcing deallocation can be tricky, as it requires the
-<code class="code">__pool</code> object to be fully-constructed before the object
-that uses it is fully constructed. For most (but not all) STL
-containers, this works, as an instance of the allocator is constructed
-as part of a container's constructor. However, this assumption is
-implementation-specific, and subject to change. For an example of a
-pool that frees memory, see the following
- <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup">
- example.</a>
-</p></div></div><div class="section" title="Single Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_single"/>Single Thread Example</h3></div></div></div><p>
-Let's start by describing how the data on a freelist is laid out in memory.
-This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
-</p><pre class="programlisting">
-+----------------+
-| next* ---------|--+ (_S_bin[ 3 ].first[ 3 ] points here)
-| | |
-| | |
-| | |
-+----------------+ |
-| thread_id = 3 | |
-| | |
-| | |
-| | |
-+----------------+ |
-| DATA | | (A pointer to here is what is returned to the
-| | | the application when needed)
-| | |
-| | |
-| | |
-| | |
-| | |
-| | |
-+----------------+ |
-+----------------+ |
-| next* |&lt;-+ (If next == NULL it's the last one on the list)
-| |
-| |
-| |
-+----------------+
-| thread_id = 3 |
-| |
-| |
-| |
-+----------------+
-| DATA |
-| |
-| |
-| |
-| |
-| |
-| |
-| |
-+----------------+
-</pre><p>
-With this in mind we simplify things a bit for a while and say that there is
-only one thread (a ST application). In this case all operations are made to
-what is referred to as the global pool - thread id 0 (No thread may be
-assigned this id since they span from 1 to _S_max_threads in a MT application).
-</p><p>
-When the application requests memory (calling allocate()) we first look at the
-requested size and if this is &gt; _S_max_bytes we call new() directly and return.
-</p><p>
-If the requested size is within limits we start by finding out from which
-bin we should serve this request by looking in _S_binmap.
-</p><p>
-A quick look at _S_bin[ bin ].first[ 0 ] tells us if there are any blocks of
-this size on the freelist (0). If this is not NULL - fine, just remove the
-block that _S_bin[ bin ].first[ 0 ] points to from the list,
-update _S_bin[ bin ].first[ 0 ] and return a pointer to that blocks data.
-</p><p>
-If the freelist is empty (the pointer is NULL) we must get memory from the
-system and build us a freelist within this memory. All requests for new memory
-is made in chunks of _S_chunk_size. Knowing the size of a block_record and
-the bytes that this bin stores we then calculate how many blocks we can create
-within this chunk, build the list, remove the first block, update the pointer
-(_S_bin[ bin ].first[ 0 ]) and return a pointer to that blocks data.
-</p><p>
-Deallocation is equally simple; the pointer is casted back to a block_record
-pointer, lookup which bin to use based on the size, add the block to the front
-of the global freelist and update the pointer as needed
-(_S_bin[ bin ].first[ 0 ]).
-</p><p>
-The decision to add deallocated blocks to the front of the freelist was made
-after a set of performance measurements that showed that this is roughly 10%
-faster than maintaining a set of "last pointers" as well.
-</p></div><div class="section" title="Multiple Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_multi"/>Multiple Thread Example</h3></div></div></div><p>
-In the ST example we never used the thread_id variable present in each block.
-Let's start by explaining the purpose of this in a MT application.
-</p><p>
-The concept of "ownership" was introduced since many MT applications
-allocate and deallocate memory to shared containers from different
-threads (such as a cache shared amongst all threads). This introduces
-a problem if the allocator only returns memory to the current threads
-freelist (I.e., there might be one thread doing all the allocation and
-thus obtaining ever more memory from the system and another thread
-that is getting a longer and longer freelist - this will in the end
-consume all available memory).
-</p><p>
-Each time a block is moved from the global list (where ownership is
-irrelevant), to a threads freelist (or when a new freelist is built
-from a chunk directly onto a threads freelist or when a deallocation
-occurs on a block which was not allocated by the same thread id as the
-one doing the deallocation) the thread id is set to the current one.
-</p><p>
-What's the use? Well, when a deallocation occurs we can now look at
-the thread id and find out if it was allocated by another thread id
-and decrease the used counter of that thread instead, thus keeping the
-free and used counters correct. And keeping the free and used counters
-corrects is very important since the relationship between these two
-variables decides if memory should be returned to the global pool or
-not when a deallocation occurs.
-</p><p>
-When the application requests memory (calling allocate()) we first
-look at the requested size and if this is &gt;_S_max_bytes we call new()
-directly and return.
-</p><p>
-If the requested size is within limits we start by finding out from which
-bin we should serve this request by looking in _S_binmap.
-</p><p>
-A call to _S_get_thread_id() returns the thread id for the calling thread
-(and if no value has been set in _S_thread_key, a new id is assigned and
-returned).
-</p><p>
-A quick look at _S_bin[ bin ].first[ thread_id ] tells us if there are
-any blocks of this size on the current threads freelist. If this is
-not NULL - fine, just remove the block that _S_bin[ bin ].first[
-thread_id ] points to from the list, update _S_bin[ bin ].first[
-thread_id ], update the free and used counters and return a pointer to
-that blocks data.
-</p><p>
-If the freelist is empty (the pointer is NULL) we start by looking at
-the global freelist (0). If there are blocks available on the global
-freelist we lock this bins mutex and move up to block_count (the
-number of blocks of this bins size that will fit into a _S_chunk_size)
-or until end of list - whatever comes first - to the current threads
-freelist and at the same time change the thread_id ownership and
-update the counters and pointers. When the bins mutex has been
-unlocked, we remove the block that _S_bin[ bin ].first[ thread_id ]
-points to from the list, update _S_bin[ bin ].first[ thread_id ],
-update the free and used counters, and return a pointer to that blocks
-data.
-</p><p>
-The reason that the number of blocks moved to the current threads
-freelist is limited to block_count is to minimize the chance that a
-subsequent deallocate() call will return the excess blocks to the
-global freelist (based on the _S_freelist_headroom calculation, see
-below).
-</p><p>
-However if there isn't any memory on the global pool we need to get
-memory from the system - this is done in exactly the same way as in a
-single threaded application with one major difference; the list built
-in the newly allocated memory (of _S_chunk_size size) is added to the
-current threads freelist instead of to the global.
-</p><p>
-The basic process of a deallocation call is simple: always add the
-block to the front of the current threads freelist and update the
-counters and pointers (as described earlier with the specific check of
-ownership that causes the used counter of the thread that originally
-allocated the block to be decreased instead of the current threads
-counter).
-</p><p>
-And here comes the free and used counters to service. Each time a
-deallocation() call is made, the length of the current threads
-freelist is compared to the amount memory in use by this thread.
-</p><p>
-Let's go back to the example of an application that has one thread
-that does all the allocations and one that deallocates. Both these
-threads use say 516 32-byte blocks that was allocated during thread
-creation for example. Their used counters will both say 516 at this
-point. The allocation thread now grabs 1000 32-byte blocks and puts
-them in a shared container. The used counter for this thread is now
-1516.
-</p><p>
-The deallocation thread now deallocates 500 of these blocks. For each
-deallocation made the used counter of the allocating thread is
-decreased and the freelist of the deallocation thread gets longer and
-longer. But the calculation made in deallocate() will limit the length
-of the freelist in the deallocation thread to _S_freelist_headroom %
-of it's used counter. In this case, when the freelist (given that the
-_S_freelist_headroom is at it's default value of 10%) exceeds 52
-(516/10) blocks will be returned to the global pool where the
-allocating thread may pick them up and reuse them.
-</p><p>
-In order to reduce lock contention (since this requires this bins
-mutex to be locked) this operation is also made in chunks of blocks
-(just like when chunks of blocks are moved from the global freelist to
-a threads freelist mentioned above). The "formula" used can probably
-be improved to further reduce the risk of blocks being "bounced back
-and forth" between freelists.
-</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td align="left" valign="top">Diagnostics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> bitmap_allocator</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_compile_checks.html b/libstdc++-v3/doc/html/manual/ext_compile_checks.html
index c648797c18..306ca1a4b6 100644
--- a/libstdc++-v3/doc/html/manual/ext_compile_checks.html
+++ b/libstdc++-v3/doc/html/manual/ext_compile_checks.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="bk01pt03pr01.html" title=""/><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03pr01.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 16. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"/>Chapter 16. Compile Time Checks</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 16. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
Also known as concept checking.
</p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
of the STL: code which checked the template parameters of
@@ -19,7 +19,7 @@
</p><p>The primary author of the checking code, Jeremy Siek, had already
started work on a replacement implementation. The new code has been
formally reviewed and accepted into
- <a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm">the
+ <a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm" target="_top">the
Boost libraries</a>, and we are pleased to incorporate it into the
GNU C++ library.
</p><p>The new version imposes a much smaller space overhead on the generated
@@ -37,4 +37,4 @@
support for template parameter constraints based on concepts in the core
language. This will obviate the need for the library-simulated concept
checking described above.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td align="left" valign="top"> </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_concurrency.html b/libstdc++-v3/doc/html/manual/ext_concurrency.html
index 99718e04f5..8a096fff36 100644
--- a/libstdc++-v3/doc/html/manual/ext_concurrency.html
+++ b/libstdc++-v3/doc/html/manual/ext_concurrency.html
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 28. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_demangling.html" title="Chapter 27. Demangling"/><link rel="next" href="bk01pt03ch28s02.html" title="Implementation"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Concurrency</th></tr><tr><td align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="bk01pt03ch30s02.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 28. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"/>Chapter 28. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency.design"/>Design</h2></div></div></div><div class="section" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"/>Interface to Locks and Mutexes</h3></div></div></div><p>The file &lt;ext/concurrence.h&gt; contains all the higher-level
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 30. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
+contains all the higher-level
constructs for playing with threads. In contrast to the atomics layer,
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
</p><p>
@@ -16,7 +17,7 @@ that support multiple threads.)
available locking
policies: <code class="code">_S_single</code>, <code class="code">_S_mutex</code>,
and <code class="code">_S_atomic</code>.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
</p></li><li class="listitem"><p><code class="code">_S_mutex</code></p><p>Indicates multi-threaded code using thread-layer abstractions.
</p></li><li class="listitem"><p><code class="code">_S_atomic</code></p><p>Indicates multi-threaded code using atomic operations.
</p></li></ul></div><p>The compile-time constant <code class="code">__default_lock_policy</code> is set
@@ -24,13 +25,15 @@ to one of the three values above, depending on characteristics of the
host environment and the current compilation flags.
</p><p>Two more datatypes make up the rest of the
interface: <code class="code">__mutex</code>, and <code class="code">__scoped_lock</code>.
-</p><p>
</p><p>The scoped lock idiom is well-discussed within the C++
community. This version takes a <code class="code">__mutex</code> reference, and
-locks it during construction of <code class="code">__scoped_locke</code> and
+locks it during construction of <code class="code">__scoped_lock</code> and
unlocks it during destruction. This is an efficient way of locking
critical sections, while retaining exception-safety.
-</p></div><div class="section" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"/>Interface to Atomic Functions</h3></div></div></div><p>
+These types have been superseded in the ISO C++ 2011 standard by the
+mutex and lock types defined in the header
+<code class="filename">&lt;mutex&gt;</code>.
+</p></div><div class="section" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
Two functions and one type form the base of atomic support.
</p><p>The type <code class="code">_Atomic_word</code> is a signed integral type
supporting atomic operations.
@@ -44,7 +47,7 @@ void
__atomic_add_dispatch(volatile _Atomic_word*, int);
</pre><p>Both of these functions are declared in the header file
&lt;ext/atomicity.h&gt;, and are in <code class="code">namespace __gnu_cxx</code>.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="code">
__exchange_and_add_dispatch
</code>
@@ -63,7 +66,7 @@ __exchange_and_add_dispatch
</code>
</p><p>
Calls through to either of:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">__exchange_and_add</code>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">__exchange_and_add</code>
</p><p>Multi-thread version. Inlined if compiler-generated builtin atomics
can be used, otherwise resolved at link time to a non-builtin code
sequence.
@@ -88,4 +91,4 @@ _GLIBCXX_WRITE_MEM_BARRIER
</p><p>
Which expand to the appropriate write and read barrier required by the
host hardware and operating system.
-</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 27. Demangling </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_containers.html b/libstdc++-v3/doc/html/manual/ext_containers.html
index d07860bbd6..a856e8c7c3 100644
--- a/libstdc++-v3/doc/html/manual/ext_containers.html
+++ b/libstdc++-v3/doc/html/manual/ext_containers.html
@@ -1,9 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 21. Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="bitmap_allocator.html" title="bitmap_allocator"/><link rel="next" href="bk01pt03ch21s02.html" title="HP/SGI"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Containers</th></tr><tr><td align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="bk01pt03ch23s02.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 21. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"/>Chapter 21. Containers</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></div><p>
- </p><div class="section" title="Policy Based Data Structures"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"/>Policy Based Data Structures</h2></div></div></div><p>
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html">More details here</a>.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td align="left" valign="top">bitmap_allocator </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> HP/SGI</td></tr></table></div></body></html>
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 23. HP/SGI Extensions"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></div><div class="section" title="Backwards Compatibility"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
+ been made with containers. Those dealing with older SGI-style
+ allocators are dealt with elsewhere. The remaining ones all deal
+ with bits:
+ </p><p>The old pre-standard <code class="code">bit_vector</code> class is
+ present for backwards compatibility. It is simply a typedef for
+ the <code class="code">vector&lt;bool&gt;</code> specialization.
+ </p><p>The <code class="code">bitset</code> class has a number of extensions, described in the
+ rest of this item. First, we'll mention that this implementation of
+ <code class="code">bitset&lt;N&gt;</code> is specialized for cases where N number of
+ bits will fit into a single word of storage. If your choice of N is
+ within that range (&lt;=32 on i686-pc-linux-gnu, for example), then all
+ of the operations will be faster.
+</p><p>There are
+ versions of single-bit test, set, reset, and flip member functions which
+ do no range-checking. If we call them member functions of an instantiation
+ of <code class="code">bitset&lt;N&gt;</code>, then their names and signatures are:
+</p><pre class="programlisting">
+ bitset&lt;N&gt;&amp; _Unchecked_set (size_t pos);
+ bitset&lt;N&gt;&amp; _Unchecked_set (size_t pos, int val);
+ bitset&lt;N&gt;&amp; _Unchecked_reset (size_t pos);
+ bitset&lt;N&gt;&amp; _Unchecked_flip (size_t pos);
+ bool _Unchecked_test (size_t pos);
+ </pre><p>Note that these may in fact be removed in the future, although we have
+ no present plans to do so (and there doesn't seem to be any immediate
+ reason to).
+</p><p>The member function <code class="code">operator[]</code> on a const bitset returns
+ a bool, and for a non-const bitset returns a <code class="code">reference</code> (a
+ nested type). No range-checking is done on the index argument, in keeping
+ with other containers' <code class="code">operator[]</code> requirements.
+</p><p>Finally, two additional searching functions have been added. They return
+ the index of the first "on" bit, and the index of the first
+ "on" bit that is after <code class="code">prev</code>, respectively:
+</p><pre class="programlisting">
+ size_t _Find_first() const;
+ size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Acknowledgments </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_demangling.html b/libstdc++-v3/doc/html/manual/ext_demangling.html
index 0120bc2b05..79d9452c13 100644
--- a/libstdc++-v3/doc/html/manual/ext_demangling.html
+++ b/libstdc++-v3/doc/html/manual/ext_demangling.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 27. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_io.html" title="Chapter 26. Input and Output"/><link rel="next" href="ext_concurrency.html" title="Chapter 28. Concurrency"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Demangling</th></tr><tr><td align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 27. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"/>Chapter 27. Demangling</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 29. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p>
Transforming C++ ABI identifiers (like RTTI symbols) into the
original C++ source identifiers is called
<span class="quote">“<span class="quote">demangling.</span>â€</span>
</p><p>
- If you have read the <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html">source
+ If you have read the <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html" target="_top">source
documentation for <code class="code">namespace abi</code></a> then you are
aware of the cross-vendor C++ ABI in use by GCC. One of the
exposed functions is used for demangling,
@@ -71,4 +71,4 @@ int main()
be writing C++ in order to demangle C++. (That also means we have to
use crummy memory management facilities, so don't forget to free()
the returned char array.)
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 26. Input and Output </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 28. Concurrency</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Concurrency</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_io.html b/libstdc++-v3/doc/html/manual/ext_io.html
index aba0fe1d63..664103f4b8 100644
--- a/libstdc++-v3/doc/html/manual/ext_io.html
+++ b/libstdc++-v3/doc/html/manual/ext_io.html
@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 26. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_iterators.html" title="Chapter 25. Iterators"/><link rel="next" href="ext_demangling.html" title="Chapter 27. Demangling"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Input and Output</th></tr><tr><td align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 26. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"/>Chapter 26. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 28. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
Extensions allowing <code class="code">filebuf</code>s to be constructed from
"C" types like FILE*s and file descriptors.
- </p><div class="section" title="Derived filebufs"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io.filebuf_derived"/>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
+ </p><div class="section" title="Derived filebufs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
<code class="code">std::filebuf</code>s from C stdio types such as
<code class="code">FILE*</code>s and POSIX file descriptors.
Today the recommended way to use stdio types with libstdc++
IOStreams is via the <code class="code">stdio_filebuf</code> class (see below),
but earlier releases provided slightly different mechanisms.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
<code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
</code>
This comes in very handy in a number of places, such as
attaching Unix sockets, pipes, and anything else which uses file
descriptors, into the IOStream buffering classes. The three
arguments are as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">__c_file_type* F </code>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><code class="code">__c_file_type* F </code>
// the __c_file_type typedef usually boils down to stdio's FILE
</p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
// same as all the other uses of openmode
@@ -39,12 +39,7 @@
the <code class="code">fd()</code> function were removed from the standard
filebuf. Instead, <code class="code">&lt;ext/stdio_filebuf.h&gt;</code> contains
a derived class called
- <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
This class can be constructed from a C <code class="code">FILE*</code> or a file
descriptor, and provides the <code class="code">fd()</code> function.
- </p></li></ul></div><p>If you want to access a <code class="code">filebuf</code>'s file descriptor to
- implement file locking (e.g. using the <code class="code">fcntl()</code> system
- call) then you might be interested in Henry Suter's RWLock class.
-
- </p><p>
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 25. Iterators </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 27. Demangling</td></tr></table></div></body></html>
+ </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Demangling</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_iterators.html b/libstdc++-v3/doc/html/manual/ext_iterators.html
index 8c00985c4d..1689371697 100644
--- a/libstdc++-v3/doc/html/manual/ext_iterators.html
+++ b/libstdc++-v3/doc/html/manual/ext_iterators.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 25. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_numerics.html" title="Chapter 24. Numerics"/><link rel="next" href="ext_io.html" title="Chapter 26. Input and Output"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Iterators</th></tr><tr><td align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 25. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"/>Chapter 25. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 27. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 27. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
original HP STL implementation (the language wasn't rich enough at the
time). For backwards compatibility, base classes are provided which
declare the same nested typedefs:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
two iterators and returns a result. It is extended by another signature
which takes two iterators and a reference to a result. The result is
modified, and the function returns nothing.
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 24. Numerics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 26. Input and Output</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Input and Output</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_numerics.html b/libstdc++-v3/doc/html/manual/ext_numerics.html
index 71d417c3af..f38ca1497c 100644
--- a/libstdc++-v3/doc/html/manual/ext_numerics.html
+++ b/libstdc++-v3/doc/html/manual/ext_numerics.html
@@ -1,20 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 24. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="ext_algorithms.html" title="Chapter 23. Algorithms"/><link rel="next" href="ext_iterators.html" title="Chapter 25. Iterators"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Numerics</th></tr><tr><td align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 24. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"/>Chapter 24. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as accumulate, are extended
- with the following functions:
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 26. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 26. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>,
+ are extended with the following functions:
</p><pre class="programlisting">
power (x, n);
- power (x, n, moniod_operation);</pre><p>Returns, in FORTRAN syntax, "x ** n" where n&gt;=0. In the
- case of n == 0, returns the identity element for the
+ power (x, n, monoid_operation);</pre><p>Returns, in FORTRAN syntax, "<code class="code">x ** n</code>" where
+ <code class="code">n &gt;= 0</code>. In the
+ case of <code class="code">n == 0</code>, returns the identity element for the
monoid operation. The two-argument signature uses multiplication (for
a true "power" implementation), but addition is supported as well.
The operation functor must be associative.
</p><p>The <code class="code">iota</code> function wins the award for Extension With the
- Coolest Name. It "assigns sequentially increasing values to a range.
- That is, it assigns value to *first, value + 1 to *(first + 1) and so
- on." Quoted from SGI documentation.
+ Coolest Name (the name comes from Ken Iverson's APL language.) As
+ described in the <a class="link" href="http://www.sgi.com/tech/stl/iota.html" target="_top">SGI
+ documentation</a>, it "assigns sequentially increasing values to a range.
+ That is, it assigns <code class="code">value</code> to <code class="code">*first</code>,
+ <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
</p><pre class="programlisting">
- void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 23. Algorithms </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 25. Iterators</td></tr></table></div></body></html>
+ void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre><p>The <code class="code">iota</code> function is included in the ISO C++ 2011 standard.
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Iterators</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_utilities.html b/libstdc++-v3/doc/html/manual/ext_utilities.html
index d15057c277..071ce4bcc2 100644
--- a/libstdc++-v3/doc/html/manual/ext_utilities.html
+++ b/libstdc++-v3/doc/html/manual/ext_utilities.html
@@ -1,23 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 22. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI"/><link rel="next" href="ext_algorithms.html" title="Chapter 23. Algorithms"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Utilities</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch23s02.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch23s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 22. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"/>Chapter 22. Utilities</h2></div></div></div><p>
- The &lt;functional&gt; header contains many additional functors
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 24. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p>
+ The <code class="filename">&lt;functional&gt;</code> header
+ contains many additional functors
and helper functions, extending section 20.3. They are
implemented in the file stl_function.h:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication. *
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication.
</p></li><li class="listitem"><p>The functor <code class="code">identity</code>, whose <code class="code">operator()</code>
- returns the argument unchanged. *
+ returns the argument unchanged.
</p></li><li class="listitem"><p>Composition functors <code class="code">unary_function</code> and
<code class="code">binary_function</code>, and their helpers <code class="code">compose1</code>
- and <code class="code">compose2</code>. *
- </p></li><li class="listitem"><p><code class="code">select1st</code> and <code class="code">select2nd</code>, to strip pairs. *
- </p></li><li class="listitem"><p><code class="code">project1st</code> and <code class="code">project2nd</code>. * </p></li><li class="listitem"><p>A set of functors/functions which always return the same result. They
+ and <code class="code">compose2</code>.
+ </p></li><li class="listitem"><p><code class="code">select1st</code> and <code class="code">select2nd</code>, to strip pairs.
+ </p></li><li class="listitem"><p><code class="code">project1st</code> and <code class="code">project2nd</code>. </p></li><li class="listitem"><p>A set of functors/functions which always return the same result. They
are <code class="code">constant_void_fun</code>, <code class="code">constant_binary_fun</code>,
<code class="code">constant_unary_fun</code>, <code class="code">constant0</code>,
- <code class="code">constant1</code>, and <code class="code">constant2</code>. * </p></li><li class="listitem"><p>The class <code class="code">subtractive_rng</code>. * </p></li><li class="listitem"><p>mem_fun adaptor helpers <code class="code">mem_fun1</code> and
+ <code class="code">constant1</code>, and <code class="code">constant2</code>. </p></li><li class="listitem"><p>The class <code class="code">subtractive_rng</code>. </p></li><li class="listitem"><p>mem_fun adaptor helpers <code class="code">mem_fun1</code> and
<code class="code">mem_fun1_ref</code> are provided for backwards compatibility. </p></li></ul></div><p>
20.4.1 can use several different allocators; they are described on the
main extensions page.
@@ -34,8 +35,8 @@ you can also use
</p><pre class="programlisting">
get_temporary_buffer(5, (int*)0);
</pre><p>
- A class <code class="code">temporary_buffer</code> is given in stl_tempbuf.h. *
+ A class <code class="code">temporary_buffer</code> is given in stl_tempbuf.h.
</p><p>
The specialized algorithms of section 20.4.4 are extended with
- <code class="code">uninitialized_copy_n</code>. *
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td align="left" valign="top">Deprecated HP/SGI </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 23. Algorithms</td></tr></table></div></body></html>
+ <code class="code">uninitialized_copy_n</code>.
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Algorithms</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/extensions.html b/libstdc++-v3/doc/html/manual/extensions.html
index 7fae9078ae..6ba9484cdb 100644
--- a/libstdc++-v3/doc/html/manual/extensions.html
+++ b/libstdc++-v3/doc/html/manual/extensions.html
@@ -1,9 +1,72 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library Manual"/><link rel="prev" href="io_and_c.html" title="Interacting with C"/><link rel="next" href="bk01pt03pr01.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="bk01pt03pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
Extensions
-</th></tr><tr><td align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td align="right"> <a accesskey="n" href="bk01pt03pr01.html">Next</a></td></tr></table><hr/></div><div class="part" title="Part III.  Extensions"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"/>Part III. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03pr01.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part III.  Extensions"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
Extensions
- <a id="id481867" class="indexterm"/>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="bk01pt03pr01.html"/></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">20. Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">21. Containers</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">22. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">23. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">24. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">25. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">26. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">27. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">28. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="spine.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03pr01.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
+ <a id="idp16388480" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="bk01pt03pr01.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+ Querying Container Attributes
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.point_range_iteration">
+ Point and Range Iteration
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.basic">Intermediate Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.query">Querying with <code class="classname">container_traits</code> </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container">By Container Method</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.hash">Hash-Based</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.branch">Branch-Based</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.priority_queue">Priority Queues</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts">Concepts</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.null_type">Null Policy Classes</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.associative_semantics">Map and Set Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.associative_semantics.set_vs_map">
+ Distinguishing Between Maps and Sets
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.associative_semantics.multi">Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.iterator_semantics">Iterator Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.iterator_semantics.point_and_range">Point and Range Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.iterator_semantics.both">Distinguishing Point and Range Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.invalidation">Invalidation Guarantees</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.genericity">Genericity</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.genericity.tag">Tag</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.genericity.traits">Traits</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container">By Container</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.hash">hash</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.hash.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.hash.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.tree">tree</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.tree.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.tree.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.trie">Trie</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.trie.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.trie.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.list">List</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.list.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.list.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.priority_queue.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.priority_queue.details">Details</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.regression">Regression</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance">Performance</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash">Hash-Based</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_find">
+ Integer <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_subscript_find">
+ Integer Subscript <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_subscript_insert">
+ Integer Subscript <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.zlob_int_find">
+ Integer <code class="function">find</code> with Skewed-Distribution
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.erase_mem">
+ Erase Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch">Branch-Based</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_insert">
+ Text <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_lor_find">
+ Text <code class="function">find</code> with Locality-of-Reference
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.split_join">
+ <code class="function">split</code> and <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.order_statistics">
+ Order-Statistics
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap">Multimap</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_find_small">
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_find_large">
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_mem_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_mem_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_push">
+ Text <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_push_pop">
+ Text <code class="function">push</code> and <code class="function">pop</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.int_push">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.int_push_pop">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_pop">
+ Text <code class="function">pop</code> Memory Use
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_join">
+ Text <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_up">
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/facets.html b/libstdc++-v3/doc/html/manual/facets.html
index cfe89bc0dd..bbcfaea3f2 100644
--- a/libstdc++-v3/doc/html/manual/facets.html
+++ b/libstdc++-v3/doc/html/manual/facets.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="localization.html" title="Chapter 8.  Localization"/><link rel="prev" href="localization.html" title="Chapter 8.  Localization"/><link rel="next" href="containers.html" title="Chapter 9.  Containers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
Localization
-</th><td align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr/></div><div class="section" title="Facets"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization.facet"/>Facets</h2></div></div></div><div class="section" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"/>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"/>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="id476560"/>Specializations</h5></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section" title="Facets"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="idp15752864"></a>Specializations</h5></div></div></div><p>
For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
conversions are made between the internal character set (always UCS4
on GNU/Linux) and whatever the currently selected locale for the
@@ -28,7 +28,7 @@ to wchar_t and wcsrtombs for conversions between wchar_t and char.
</p><p>
Neither of these two required specializations deals with Unicode
characters.
-</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
How to deal with the global locale issue?
</p></li><li class="listitem"><p>
How to deal with different types than char, wchar_t? </p></li><li class="listitem"><p>
@@ -50,29 +50,30 @@ characters.
</p></li><li class="listitem"><p>
Rename abstract base class. See if just smash-overriding is a
better approach. Clarify, add sanity to naming.
- </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id476684"/><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15767920"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
- </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id476724"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idp15772672"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id476750"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15775760"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id476769"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15778048"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id476788"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)"><a id="idp15780320"></a><p><span class="title"><em>
+ <a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
+ </a>
</em>. </span><span class="copyright">Copyright © 1999
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="id476817"/><p><span class="citetitle"><em class="citetitle">
+ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15783568"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="id476856"/><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idp15788192"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"/>codecvt</h3></div></div></div><p>
+ . </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
The standard class codecvt attempts to address conversions between
different character encoding schemes. In particular, the standard
attempts to detail conversions between the implementation-defined wide
@@ -86,7 +87,7 @@ including Unicode and UTF8. Design issues and requirements are
addressed, and examples of correct usage for both the required
specializations for wide and narrow characters and the
implementation-provided extended functionality are given.
-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"/>Requirements</h4></div></div></div><p>
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
Around page 425 of the C++ Standard, this charming heading comes into view:
</p><div class="blockquote"><blockquote class="blockquote"><p>
22.2.1.5 - Template class codecvt
@@ -132,7 +133,7 @@ third template parameter, stateT.</p><p>
Two: The required conversions, by specifying mbstate_t as the third
template parameter, imply an implementation strategy that is mostly
(or wholly) based on the underlying C library, and the functions
-mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"/>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"/><span class="type">wchar_t</span> Size</h5></div></div></div><p>
+mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
The simple implementation detail of wchar_t's size seems to
repeatedly confound people. Many systems use a two byte,
unsigned integral type to represent wide characters, and use an
@@ -144,7 +145,7 @@ mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Desi
size for the type wchar_t.
</p><p>
Thus, portable C++ code cannot assume a byte size (or endianness) either.
- </p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"/>Support for Unicode</h5></div></div></div><p>
+ </p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
Probably the most frequently asked question about code conversion
is: "So dudes, what's the deal with Unicode strings?"
The dude part is optional, but apparently the usefulness of
@@ -161,7 +162,7 @@ mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Desi
needed is some kind of generalized type that accounts for the
issues that abstract encodings will need. The minimum information
that is required includes:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Identifiers for each of the codesets involved in the
conversion. For example, using the iconv family of functions
from the Single Unix Specification (what used to be called
@@ -212,7 +213,7 @@ mechanism may be required.
Some way to enforce strict type checking on the internal and
external types. As part of this, the size of the internal and
external types will need to be known.
-</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"/>Other Issues</h5></div></div></div><p>
+</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
In addition, multi-threaded and multi-locale environments also impact
the design and requirements for code conversions. In particular, they
affect the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt;
@@ -244,7 +245,7 @@ For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
conversions are made between the internal character set (always UCS4
on GNU/Linux) and whatever the currently selected locale for the
LC_CTYPE category implements.
-</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"/>Implementation</h4></div></div></div><p>
+</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
The two required specializations are implemented as follows:
</p><p>
<code class="code">
@@ -346,7 +347,7 @@ Definitions for all the required codecvt member functions are provided
for this specialization, and usage of codecvt&lt;internal character type,
external character type, encoding_state&gt; is consistent with other
codecvt usage.
-</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"/>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
+</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
typedef codecvt_base::result result;
typedef unsigned short unicode_t;
typedef unicode_t int_type;
@@ -383,14 +384,14 @@ codecvt usage.
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
VERIFY( efrom_next == e_lit + size );
VERIFY( ito_next == i_arr + size );
-</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
a. things that are sketchy, or remain unimplemented:
do_encoding, max_length and length member functions
are only weakly implemented. I have no idea how to do
this correctly, and in a generic manner. Nathan?
</p></li><li class="listitem"><p>
b. conversions involving std::string
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
how should operators != and == work for string of
different/same encoding?
</p></li><li class="listitem"><p>
@@ -400,7 +401,7 @@ codecvt usage.
conversions between narrow, wide, and unicode strings
</p></li></ul></div></li><li class="listitem"><p>
c. conversions involving std::filebuf and std::ostream
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
how to initialize the state object in a
standards-conformant manner?
</p></li><li class="listitem"><p>
@@ -409,46 +410,50 @@ codecvt usage.
</p></li><li class="listitem"><p>
wchar_t/char internal buffers and conversions between
internal/external buffers?
- </p></li></ul></div></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id477506"/><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15866336"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
Chapters 6 Character Set Handling and 7 Locales and Internationalization
- . </span></p></div><div class="biblioentry"><a id="id477546"/><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idp15871088"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id477571"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15874176"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id477590"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15876464"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id477609"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15878736"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </em>. </span><span class="copyright">Copyright © 2008
+ </a>
+ </em>. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="id477639"/><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idp15881968"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="id477677"/><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idp15886592"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div><div class="biblioentry"><a id="id477724"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="A brief description of Normative Addendum 1"><a id="idp15892256"></a><p><span class="title"><em>
+ <a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
A brief description of Normative Addendum 1
- </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="id477754"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry" title="The Unicode HOWTO"><a id="idp15895504"></a><p><span class="title"><em>
+ <a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
The Unicode HOWTO
- </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="id477779"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry" title="UTF-8 and Unicode FAQ for Unix/Linux"><a id="idp15898288"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
UTF-8 and Unicode FAQ for Unix/Linux
- </em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"/>messages</h3></div></div></div><p>
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
The std::messages facet implements message retrieval functionality
equivalent to Java's java.text.MessageFormat .using either GNU gettext
or IEEE 1003.1-200 functions.
-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"/>Requirements</h4></div></div></div><p>
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
The std::messages facet is probably the most vaguely defined facet in
the standard library. It's assumed that this facility was built into
the standard library in order to convert string literals from one
@@ -497,13 +502,14 @@ be found, returns dfault.
-6- Effects: Releases unspecified resources associated with cat.
-7- Notes: The limit on such resources, if any, is implementation-defined.
</em></span>
-</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"/>Design</h4></div></div></div><p>
+</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
A couple of notes on the standard.
</p><p>
First, why is <code class="code">messages_base::catalog</code> specified as a typedef
to int? This makes sense for implementations that use
-<code class="code">catopen</code>, but not for others. Fortunately, it's not heavily
-used and so only a minor irritant.
+<code class="code">catopen</code> and define <code class="code">nl_catd</code> as int, but not for
+others. Fortunately, it's not heavily used and so only a minor irritant.
+This has been reported as a possible defect in the standard (LWG 2028).
</p><p>
Second, by making the member functions <code class="code">const</code>, it is
impossible to save state in them. Thus, storing away information used
@@ -529,7 +535,7 @@ It is implicitly assumed that the locale for the default message
string in 'get' is in the "C" locale. Thus, all source code is assumed
to be written in English, so translations are always from "en_US" to
other, explicitly named locales.
-</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"/>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"/>Models</h5></div></div></div><p>
+</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
This is a relatively simple class, on the face of it. The standard
specifies very little in concrete terms, so generic
implementations that are conforming yet do very little are the
@@ -540,7 +546,7 @@ other, explicitly named locales.
</p><p>
Three different mechanisms have been provided, selectable via
configure flags:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
generic
</p><p>
This model does very little, and is what is used by default.
@@ -570,7 +576,7 @@ A new, standards-conformant non-virtual member function signature was
added for 'open' so that a directory could be specified with a given
message catalog. This simplifies calling conventions for the gnu
model.
-</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"/>The GNU Model</h5></div></div></div><p>
+</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
The messages facet, because it is retrieving and converting
between characters sets, depends on the ctype and perhaps the
codecvt facet in a given locale. In addition, underlying "C"
@@ -582,7 +588,7 @@ model.
Making the message catalogs can be initially tricky, but become
quite simple with practice. For complete info, see the gettext
documentation. Here's an idea of what is required:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Make a source file with the required string literals that need
to be translated. See <code class="code">intl/string_literals.cc</code> for
an example.
@@ -613,7 +619,7 @@ model.
<code class="code">
use_facet&lt;messages&lt;char&gt; &gt;(loc_de).open("libstdc++", locale(), dir);
</code>
- </p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"/>Use</h4></div></div></div><p>
+ </p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
A simple example using the GNU model of message conversion.
</p><pre class="programlisting">
#include &lt;iostream&gt;
@@ -635,9 +641,9 @@ void test01()
cout &lt;&lt; "thank you in german:" &lt;&lt; s02 &lt;&lt; '\n';
mssg_de.close(cat_de);
}
-</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Things that are sketchy, or remain unimplemented:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
_M_convert_from_char, _M_convert_to_char are in flux,
depending on how the library ends up doing character set
conversions. It might not be possible to do a real character
@@ -685,44 +691,47 @@ void test01()
model. As of this writing, it is unknown how to query to see
if a specified message catalog exists using the gettext
package.
- </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id478453"/><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15979248"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
- . </span></p></div><div class="biblioentry"><a id="id478493"/><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idp15984000"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id478519"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15987088"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id478538"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15989376"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id478557"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15991648"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </em>. </span><span class="copyright">Copyright © 2008
+ </a>
+ </em>. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="id478586"/><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idp15994880"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="id478624"/><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idp15999504"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div><div class="biblioentry"><a id="id478672"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="API Specifications, Java Platform"><a id="idp16005168"></a><p><span class="title"><em>
+ <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
API Specifications, Java Platform
+ </a>
</em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
java.util.Locale, java.util.ResourceBundle
- . </span></p></div><div class="biblioentry"><a id="id478694"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry" title="GNU gettext tools, version 0.10.38, Native Language Support Library and Tools."><a id="idp16007504"></a><p><span class="title"><em>
+ <a class="link" href="http://www.gnu.org/software/gettext" target="_top">
GNU gettext tools, version 0.10.38, Native Language Support
Library and Tools.
- </em>. </span></p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="localization.html">Prev</a> </td><td align="center"><a accesskey="u" href="localization.html">Up</a></td><td align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 8. 
+ </a>
+ </em>. </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="localization.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. 
Localization
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 9. 
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. 
Containers
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/fstreams.html b/libstdc++-v3/doc/html/manual/fstreams.html
index 6c03a2bb62..b68e366356 100644
--- a/libstdc++-v3/doc/html/manual/fstreams.html
+++ b/libstdc++-v3/doc/html/manual/fstreams.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13.  Input and Output"/><link rel="prev" href="stringstreams.html" title="Memory Based Streams"/><link rel="next" href="io_and_c.html" title="Interacting with C"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr/></div><div class="section" title="File Based Streams"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.filestreams"/>File Based Streams</h2></div></div></div><div class="section" title="Copying a File"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"/>Copying a File</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="File Based Streams"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="section" title="Copying a File"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
</p><p>So you want to copy a file quickly and easily, and most important,
completely portably. And since this is C++, you have an open
ifstream (call it IN) and an open ofstream (call it OUT):
@@ -49,7 +49,7 @@
The operators shown above are all defined in the parent
basic_ostream class and are therefore available with all possible
descendants.
- </p></div><div class="section" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"/>Binary Input and Output</h3></div></div></div><p>
+ </p></div><div class="section" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
</p><p>The first and most important thing to remember about binary I/O is
that opening a file with <code class="code">ios::binary</code> is not, repeat
<span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
@@ -87,7 +87,7 @@
of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
seemingly infinite number of solutions, and a few are listed here:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
&lt;&lt;/&gt;&gt; operators to do binary I/O on whatever data
types you're using.</span>â€</span>
</p><p>
@@ -138,7 +138,7 @@
</p><p>
An instructive thread from comp.lang.c++.moderated delved off into
this topic starting more or less at
- <a class="link" href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d">this</a>
+ <a class="link" href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d" target="_top">this</a>
post and continuing to the end of the thread. (The subject heading is "binary iostreams" on both comp.std.c++
and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar Kühl.
</p><p>Briefly, the problems of byte ordering and type sizes mean that
@@ -147,4 +147,4 @@
between arbitrary programs, or across a network, or from one
invocation of a program to another invocation of the same program
on a different platform, etc.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td align="left" valign="top">Memory Based Streams </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html b/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
index 043cbeb36d..2bb9a0b678 100644
--- a/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+++ b/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="numerics.html" title="Chapter 12.  Numerics"/><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics"/><link rel="next" href="numerics_and_c.html" title="Interacting with C"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
Numerics
-</th><td align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr/></div><div class="section" title="Generalized Operations"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics.generalized_ops"/>Generalized Operations</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="Generalized Operations"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
</p><p>There are four generalized functions in the &lt;numeric&gt; header
that follow the same conventions as those in &lt;algorithm&gt;. Each
of them is overloaded: one signature for common default operations,
and a second for fully general operations. Their names are
self-explanatory to anyone who works with numerics on a regular basis:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
</p><pre class="programlisting">
int ar[50];
int someval = somefunction();
@@ -26,7 +26,7 @@
and multiplies all the members of the array; here we must obviously
use 1 as a starting value instead of 0.
</p><p>The other three functions have similar dual-signature forms.
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td align="center"><a accesskey="u" href="numerics.html">Up</a></td><td align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 12. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 12. 
Numerics
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html
new file mode 100644
index 0000000000..315710ab84
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/index.html
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I.  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book" title="The GNU C++ Library Manual"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+ <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+ </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="part"><a href="intro.html">I.
+ Introduction
+
+</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="bk01pt02.html">II.
+ Standard Contents
+ </a></span></dt><dd><dl><dt><span class="chapter"><a href="support.html">4.
+ Support
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
+ Diagnostics
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
+ Utilities
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
+ Strings
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
+ Localization
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15752864">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
+ Containers
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
+ Iterators
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
+ Algorithms
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
+ Numerics
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
+ Input and Output
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="atomics.html">14.
+ Atomics
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
+ Concurrency
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="extensions.html">III.
+ Extensions
+
+</a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt03pr01.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+ Querying Container Attributes
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.point_range_iteration">
+ Point and Range Iteration
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.basic">Intermediate Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.query">Querying with <code class="classname">container_traits</code> </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container">By Container Method</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.hash">Hash-Based</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.branch">Branch-Based</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.priority_queue">Priority Queues</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts">Concepts</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.null_type">Null Policy Classes</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.associative_semantics">Map and Set Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.associative_semantics.set_vs_map">
+ Distinguishing Between Maps and Sets
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.associative_semantics.multi">Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.iterator_semantics">Iterator Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.iterator_semantics.point_and_range">Point and Range Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.iterator_semantics.both">Distinguishing Point and Range Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.invalidation">Invalidation Guarantees</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.genericity">Genericity</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.genericity.tag">Tag</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.genericity.traits">Traits</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container">By Container</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.hash">hash</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.hash.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.hash.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.tree">tree</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.tree.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.tree.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.trie">Trie</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.trie.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.trie.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.list">List</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.list.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.list.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.priority_queue.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.priority_queue.details">Details</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.regression">Regression</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance">Performance</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash">Hash-Based</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_find">
+ Integer <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_subscript_find">
+ Integer Subscript <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_subscript_insert">
+ Integer Subscript <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.zlob_int_find">
+ Integer <code class="function">find</code> with Skewed-Distribution
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.erase_mem">
+ Erase Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch">Branch-Based</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_insert">
+ Text <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_lor_find">
+ Text <code class="function">find</code> with Locality-of-Reference
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.split_join">
+ <code class="function">split</code> and <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.order_statistics">
+ Order-Statistics
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap">Multimap</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_find_small">
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_find_large">
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_mem_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_mem_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_push">
+ Text <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_push_pop">
+ Text <code class="function">push</code> and <code class="function">pop</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.int_push">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.int_push_pop">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_pop">
+ Text <code class="function">pop</code> Memory Use
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_join">
+ Text <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_up">
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="bk01pt04.html">IV.
+ Appendices
+</a></span></dt><dd><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
+ Contributing
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
+ Porting and Maintenance
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
+ Qualifying Exception Safety Guarantees
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
+ Existing tests
+</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers">
+C++11 Requirements Test Sequence Descriptions
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+ </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan">
+ Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
+ extensions
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringstreams">No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.wchar">Little or no wide character support</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iostream_templates">No templatized iostreams</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.thread_safety">Thread safety issues</a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.third">Third</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.third.headers">Pre-ISO headers moved to backwards or removed</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.hash">Extension headers hash_map, hash_set moved to ext or backwards</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.nocreate_noreplace">No <code class="code">ios::nocreate/ios::noreplace</code>.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.streamattach">
+No <code class="code">stream::attach(int fd)</code>
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_cxx98">
+Support for C++98 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_tr1">
+Support for C++TR1 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.support_cxx11">
+Support for C++11 dialect.
+</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.iterator_type">
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C.
+ Free Software Needs Free Documentation
+
+</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idp17575248">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17581968">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17613664">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17628576">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17637776">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17705360">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17768064">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp17962720">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
+ Effect of embedded lists in
+ <code class="classname">std::multimap</code>
+ </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp17986224">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18006032">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18019376">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18049600">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18089744">Hash functions, ranged-hash functions, and
+ range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18154176">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18161232">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18178048">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18197088">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18227776">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18235600">Standard resize policy trigger sequence
+ diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18239760">Standard resize policy size sequence
+ diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18317728">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18327168">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18340336">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18352000">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18360176">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18382432">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18427056">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18437488">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18468000">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18473584">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18537424">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18572464">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp21998848">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idp4061552">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp7562848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp2271168">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12526624">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13018432">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13045856">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13082336">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13107072">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13158512">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13188400">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13205328">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13226400">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13231920">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13238320">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13274048">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13288816">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13302192">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#idp16454656">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#idp16499552">Debugging Containers C++11</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#idp16689952">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#idp16944832">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#idp17050544">Profile Diagnostics</a></dt><dt>21.1. <a href="bk01pt03ch21s02.html#idp17461952">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22126320">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22201984">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22221360">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22298992">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22323136">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp22990128">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23017760">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idp18103552">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18109440">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18113952">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18115776">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18125408">
+ A Standard String Hash Function
+ </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18131552">
+ Only k String DNA Hash
+ </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18202592">
+ Probability of Probe Sequence of Length k
+ </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18209360">
+ Probability Probe Sequence in Some Bin
+ </a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. 
+ Introduction
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/internals.html b/libstdc++-v3/doc/html/manual/internals.html
index c6531fb557..8d3c02add2 100644
--- a/libstdc++-v3/doc/html/manual/internals.html
+++ b/libstdc++-v3/doc/html/manual/internals.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; internals&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation"/><link rel="next" href="test.html" title="Test"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; internals&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
-</th><td align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr/></div><div class="section" title="Porting to New Hardware or Operating Systems"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.internals"/>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section" title="Porting to New Hardware or Operating Systems"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
</p><p>This document explains how to port libstdc++ (the GNU C++ library) to
a new target.
</p><p>In order to make the GNU C++ library (libstdc++) work with a new
@@ -20,7 +20,7 @@ works. It is difficult to test the C++ compiler without a working
library, but you should at least try some minimal test cases.
</p><p>(Note that what we think of as a "target," the library refers to as
a "host." The comment at the top of <code class="code">configure.ac</code> explains why.)
- </p><div class="section" title="Operating System"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"/>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
+ </p><div class="section" title="Operating System"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"></a>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
using an existing operating system), you will need to create a new
directory in the <code class="code">config/os</code> hierarchy. For example, the IRIX
configuration files are all in <code class="code">config/os/irix</code>. There is no set
@@ -99,7 +99,7 @@ this:
#endif
</pre><p>We recommend copying an existing <code class="code">os_defines.h</code> to use as a
starting point.
- </p></div><div class="section" title="CPU"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"/>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
+ </p></div><div class="section" title="CPU"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"></a>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
running on an existing chip), you will need to create a new directory in the
<code class="code">config/cpu</code> hierarchy. Much like the <a class="link" href="internals.html#internals.os" title="Operating System">Operating system</a> setup,
there are no strict rules on how to organize the CPU configuration
@@ -117,7 +117,7 @@ example, <code class="code">alpha</code>, <code class="code">alphaev5</code>, an
</p><p>The <code class="code">cpu_include_dir</code> sets default locations for the files controlling
<a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">Thread safety</a> and <a class="link" href="internals.html#internals.numeric_limits" title="Numeric Limits">Numeric limits</a>, if the defaults are not
appropriate for your chip.
- </p></div><div class="section" title="Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"/>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
+ </p></div><div class="section" title="Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"></a>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
character classification, analogous to that provided by the C libraries
<code class="code">&lt;ctype.h&gt;</code> header. You can model these on the files provided in
<code class="code">config/os/generic</code>. However, these files will almost
@@ -169,11 +169,8 @@ example, using the values from your native <code class="code">&lt;ctype.h&gt;</c
be given symbolically (as above), or numerically, if you prefer. You do
not have to include <code class="code">&lt;ctype.h&gt;</code> in this header; it will always be
included before <code class="code">ctype_base.h</code> is included.
- </p><p>The next file to write is <code class="code">ctype_noninline.h</code>, which also does
-not require include guards. This file defines a few member functions
-that will be included in <code class="code">include/bits/locale_facets.h</code>. The first
-function that must be written is the <code class="code">ctype&lt;char&gt;::ctype</code>
-constructor. Here is the IRIX example:
+ </p><p>The next file to write is <code class="code">ctype_configure_char.cc</code>.
+The first function that must be written is the <code class="code">ctype&lt;char&gt;::ctype</code> constructor. Here is the IRIX example:
</p><pre class="programlisting">
ctype&lt;char&gt;::ctype(const mask* __table = 0, bool __del = false,
size_t __refs = 0)
@@ -279,7 +276,7 @@ from <code class="code">__low</code> up until <code class="code">__high</code> i
++__low;
return __low;
}
-</pre></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"/>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
+</pre></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
operations to provide thread-safety. If you don't take any special
action, the library will use stub versions of these functions that are
not thread-safe. They will work fine, unless your applications are
@@ -334,7 +331,7 @@ must be equivalent to those provided here, but using atomic operations:
{
*__mem += __val;
}
-</pre></div><div class="section" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"/>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
+</pre></div><div class="section" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
such as the minimum and maximum representable values of each type.
You can define each of these values individually, but it is usually
easiest just to indicate how many bits are used in each of the data
@@ -346,7 +343,7 @@ same values, you can provide a CPU-specific file instead so that you
do not have to provide the same definitions for each operating system.
To take that approach, create a new file called <code class="code">cpu_limits.h</code> in
your CPU configuration directory (see <a class="link" href="internals.html#internals.cpu" title="CPU">CPU</a>).
- </p></div><div class="section" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"/>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
+ </p></div><div class="section" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
Explaining the full workings of libtool is beyond the scope of this
document, but there are a few, particular bits that are necessary for
porting.
@@ -368,4 +365,4 @@ do this is to build the library using <code class="code">gcc -shared</code>.
<code class="code">ltcf-c.sh</code> in the top-level directory. Find the switch statement
that sets <code class="code">archive_cmds</code>. Here, adjust the setting for your
operating system.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td align="left" valign="top">Writing and Generating Documentation </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Test</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing and Generating Documentation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html
index d283df00ab..966b5268e6 100644
--- a/libstdc++-v3/doc/html/manual/intro.html
+++ b/libstdc++-v3/doc/html/manual/intro.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Part I.  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library Manual"/><link rel="prev" href="spine.html" title="The GNU C++ Library Manual"/><link rel="next" href="status.html" title="Chapter 1. Status"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I.  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. 
Introduction
-</th></tr><tr><td align="left"><a accesskey="p" href="spine.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr/></div><div class="part" title="Part I.  Introduction"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"/>Part I. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part I.  Introduction"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
Introduction
- <a id="id400676" class="indexterm"/>
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="section"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="spine.html">Prev</a> </td><td align="center"><a accesskey="u" href="spine.html">Up</a></td><td align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td align="left" valign="top">The GNU C++ Library Manual </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
+ <a id="idp9094432" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/io.html b/libstdc++-v3/doc/html/manual/io.html
index 01ef0ff23d..e038fee4d2 100644
--- a/libstdc++-v3/doc/html/manual/io.html
+++ b/libstdc++-v3/doc/html/manual/io.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="numerics_and_c.html" title="Interacting with C"/><link rel="next" href="streambufs.html" title="Stream Buffers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
Input and Output
-</th></tr><tr><td align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 13.  Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"/>Chapter 13. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 13.  Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
Input and Output
- <a id="id480471" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section" title="Iostream Objects"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.objects"/>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
+ <a id="idp16220688" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section" title="Iostream Objects"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
only include the headers you really need. Many people simply include
&lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
your runtime as well.</em></span> Here are some tips on which header to use
@@ -118,4 +118,4 @@
the standard objects in that source file; you'll pay less startup
time. Only include the header files you need to in general; your
compile times will go down when there's less parsing work to do.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/io_and_c.html b/libstdc++-v3/doc/html/manual/io_and_c.html
index 6b4066154f..155a2f6a0c 100644
--- a/libstdc++-v3/doc/html/manual/io_and_c.html
+++ b/libstdc++-v3/doc/html/manual/io_and_c.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13.  Input and Output"/><link rel="prev" href="fstreams.html" title="File Based Streams"/><link rel="next" href="atomics.html" title="Chapter 14.  Atomics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14.  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr/></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.c"/>Interacting with C</h2></div></div></div><div class="section" title="Using FILE* and file descriptors"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"/>Using FILE* and file descriptors</h3></div></div></div><p>
- See the <a class="link" href="ext_io.html" title="Chapter 26. Input and Output">extensions</a> for using
+</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="section" title="Using FILE* and file descriptors"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
+ See the <a class="link" href="ext_io.html" title="Chapter 28. Input and Output">extensions</a> for using
<span class="type">FILE</span> and <span class="type">file descriptors</span> with
<code class="classname">ofstream</code> and
<code class="classname">ifstream</code>.
- </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"/>Performance</h3></div></div></div><p>
+ </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
Pathetic Performance? Ditch C.
</p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
I'm just saying it to get your attention.
@@ -51,7 +51,7 @@
<code class="code">clog</code>, and their wide-character counterchapters). File stream
objects that you declare yourself have no such requirement and are fully
buffered.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td align="left" valign="top">File Based Streams </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 14. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">File Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. 
Atomics
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/iterators.html b/libstdc++-v3/doc/html/manual/iterators.html
index 8a44178b7f..06b010c956 100644
--- a/libstdc++-v3/doc/html/manual/iterators.html
+++ b/libstdc++-v3/doc/html/manual/iterators.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="containers_and_c.html" title="Interacting with C"/><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
Iterators
-</th></tr><tr><td align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 10.  Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"/>Chapter 10. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10.  Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
Iterators
- <a id="id479637" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section" title="Predefined"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators.predefined"/>Predefined</h2></div></div></div><div class="section" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"/>Iterators vs. Pointers</h3></div></div></div><p>
+ <a id="idp16120304" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section" title="Predefined"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
The following
FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
iterators are not implemented as pointers. They are a generalization
@@ -23,7 +23,7 @@ classes.
that <span class="emphasis"><em>pointers</em></span> are
<span class="emphasis"><em>iterators</em></span>, and that pointers can be used
whenever an iterator would be. All those functions in the
- Algorithms sect1 of the Standard will work just as well on plain
+ Algorithms section of the Standard will work just as well on plain
arrays and their pointers.
</p><p>
That doesn't mean that when you pass in a pointer, it gets
@@ -44,7 +44,7 @@ classes.
down through inheritance, so while the compiler has to do work
looking up all the names, your runtime code does not. (This has
been a prime concern from the beginning.)
- </p></div><div class="section" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"/>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
+ </p></div><div class="section" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
especially towards the end. Trust me.
</p><p>Beginners usually have a little trouble understand the whole
'past-the-end' thing, until they remember their early algebra classes
@@ -53,7 +53,7 @@ classes.
</p><p>First, some history, and a reminder of some of the funkier rules in
C and C++ for builtin arrays. The following rules have always been
true for both languages:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>You can point anywhere in the array, <span class="emphasis"><em>or to the first element
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>You can point anywhere in the array, <span class="emphasis"><em>or to the first element
past the end of the array</em></span>. A pointer that points to one
past the end of the array is guaranteed to be as unique as a
pointer to somewhere inside the array, so that you can compare
@@ -124,7 +124,7 @@ classes.
sequences very simple to recognize: if the two endpoints compare
equal, then the {array, sequence, container, whatever} is empty.
</p><p>Just don't dereference <code class="code">end()</code>.
- </p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 11. 
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11. 
Algorithms
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/license.html b/libstdc++-v3/doc/html/manual/license.html
index da021a9fe7..a87ae4da41 100644
--- a/libstdc++-v3/doc/html/manual/license.html
+++ b/libstdc++-v3/doc/html/manual/license.html
@@ -1,93 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="status.html" title="Chapter 1. Status"/><link rel="prev" href="status.html" title="Chapter 1. Status"/><link rel="next" href="bugs.html" title="Bugs"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr/></div><div class="section" title="License"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status.license"/>License</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section" title="License"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
There are two licenses affecting GNU libstdc++: one for the code,
and one for the documentation.
</p><p>
There is a license section in the FAQ regarding common <a class="link" href="../faq.html#faq.license">questions</a>. If you have more
- questions, ask the FSF or the <a class="link" href="http://gcc.gnu.org/lists.html">gcc mailing list</a>.
- </p><div class="section" title="The Code: GPL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"/>The Code: GPL</h3></div></div></div><p>
+ questions, ask the FSF or the <a class="link" href="http://gcc.gnu.org/lists.html" target="_top">gcc mailing list</a>.
+ </p><div class="section" title="The Code: GPL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"></a>The Code: GPL</h3></div></div></div><p>
The source code is distributed under the <a class="link" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3">GNU General Public License version 3</a>,
with the addition under section 7 of an exception described in
the <span class="quote">“<span class="quote">GCC Runtime Library Exception, version 3.1</span>â€</span>
as follows (or see the file COPYING.RUNTIME):
- </p><div class="literallayout"><p><br/>
-GCC RUNTIME LIBRARY EXCEPTION<br/>
-<br/>
-Version 3.1, 31 March 2009<br/>
-<br/>
-Copyright (C) 2009 <a class="link" href="http://www.fsf.org">Free Software Foundation, Inc.</a><br/>
-<br/>
-Everyone is permitted to copy and distribute verbatim copies of this<br/>
-license document, but changing it is not allowed.<br/>
-<br/>
-This GCC Runtime Library Exception ("Exception") is an additional<br/>
-permission under section 7 of the GNU General Public License, version<br/>
-3 ("GPLv3"). It applies to a given file (the "Runtime Library") that<br/>
-bears a notice placed by the copyright holder of the file stating that<br/>
-the file is governed by GPLv3 along with this Exception.<br/>
-<br/>
-When you use GCC to compile a program, GCC may combine portions of<br/>
-certain GCC header files and runtime libraries with the compiled<br/>
-program. The purpose of this Exception is to allow compilation of<br/>
-non-GPL (including proprietary) programs to use, in this way, the<br/>
-header files and runtime libraries covered by this Exception.<br/>
-<br/>
-0. Definitions.<br/>
-<br/>
-A file is an "Independent Module" if it either requires the Runtime<br/>
-Library for execution after a Compilation Process, or makes use of an<br/>
-interface provided by the Runtime Library, but is not otherwise based<br/>
-on the Runtime Library.<br/>
-<br/>
-"GCC" means a version of the GNU Compiler Collection, with or without<br/>
-modifications, governed by version 3 (or a specified later version) of<br/>
-the GNU General Public License (GPL) with the option of using any<br/>
-subsequent versions published by the FSF.<br/>
-<br/>
-"GPL-compatible Software" is software whose conditions of propagation,<br/>
-modification and use would permit combination with GCC in accord with<br/>
-the license of GCC.<br/>
-<br/>
-"Target Code" refers to output from any compiler for a real or virtual<br/>
-target processor architecture, in executable form or suitable for<br/>
-input to an assembler, loader, linker and/or execution<br/>
-phase. Notwithstanding that, Target Code does not include data in any<br/>
-format that is used as a compiler intermediate representation, or used<br/>
-for producing a compiler intermediate representation.<br/>
-<br/>
-The "Compilation Process" transforms code entirely represented in<br/>
-non-intermediate languages designed for human-written code, and/or in<br/>
-Java Virtual Machine byte code, into Target Code. Thus, for example,<br/>
-use of source code generators and preprocessors need not be considered<br/>
-part of the Compilation Process, since the Compilation Process can be<br/>
-understood as starting with the output of the generators or<br/>
-preprocessors.<br/>
-<br/>
-A Compilation Process is "Eligible" if it is done using GCC, alone or<br/>
-with other GPL-compatible software, or if it is done without using any<br/>
-work based on GCC. For example, using non-GPL-compatible Software to<br/>
-optimize any GCC intermediate representations would not qualify as an<br/>
-Eligible Compilation Process.<br/>
-<br/>
-1. Grant of Additional Permission.<br/>
-<br/>
-You have permission to propagate a work of Target Code formed by<br/>
-combining the Runtime Library with Independent Modules, even if such<br/>
-propagation would otherwise violate the terms of GPLv3, provided that<br/>
-all Target Code was generated by Eligible Compilation Processes. You<br/>
-may then convey such a combination under terms of your choice,<br/>
-consistent with the licensing of the Independent Modules.<br/>
-<br/>
-2. No Weakening of GCC Copyleft.<br/>
-<br/>
-The availability of this Exception does not imply any general<br/>
-presumption that third-party software is unaffected by the copyleft<br/>
-requirements of the license of GCC.<br/>
+ </p><div class="literallayout"><p><br />
+GCC RUNTIME LIBRARY EXCEPTION<br />
+<br />
+Version 3.1, 31 March 2009<br />
+<br />
+Copyright (C) 2009 <a class="link" href="http://www.fsf.org" target="_top">Free Software Foundation, Inc.</a><br />
+<br />
+Everyone is permitted to copy and distribute verbatim copies of this<br />
+license document, but changing it is not allowed.<br />
+<br />
+This GCC Runtime Library Exception ("Exception") is an additional<br />
+permission under section 7 of the GNU General Public License, version<br />
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that<br />
+bears a notice placed by the copyright holder of the file stating that<br />
+the file is governed by GPLv3 along with this Exception.<br />
+<br />
+When you use GCC to compile a program, GCC may combine portions of<br />
+certain GCC header files and runtime libraries with the compiled<br />
+program. The purpose of this Exception is to allow compilation of<br />
+non-GPL (including proprietary) programs to use, in this way, the<br />
+header files and runtime libraries covered by this Exception.<br />
+<br />
+0. Definitions.<br />
+<br />
+A file is an "Independent Module" if it either requires the Runtime<br />
+Library for execution after a Compilation Process, or makes use of an<br />
+interface provided by the Runtime Library, but is not otherwise based<br />
+on the Runtime Library.<br />
+<br />
+"GCC" means a version of the GNU Compiler Collection, with or without<br />
+modifications, governed by version 3 (or a specified later version) of<br />
+the GNU General Public License (GPL) with the option of using any<br />
+subsequent versions published by the FSF.<br />
+<br />
+"GPL-compatible Software" is software whose conditions of propagation,<br />
+modification and use would permit combination with GCC in accord with<br />
+the license of GCC.<br />
+<br />
+"Target Code" refers to output from any compiler for a real or virtual<br />
+target processor architecture, in executable form or suitable for<br />
+input to an assembler, loader, linker and/or execution<br />
+phase. Notwithstanding that, Target Code does not include data in any<br />
+format that is used as a compiler intermediate representation, or used<br />
+for producing a compiler intermediate representation.<br />
+<br />
+The "Compilation Process" transforms code entirely represented in<br />
+non-intermediate languages designed for human-written code, and/or in<br />
+Java Virtual Machine byte code, into Target Code. Thus, for example,<br />
+use of source code generators and preprocessors need not be considered<br />
+part of the Compilation Process, since the Compilation Process can be<br />
+understood as starting with the output of the generators or<br />
+preprocessors.<br />
+<br />
+A Compilation Process is "Eligible" if it is done using GCC, alone or<br />
+with other GPL-compatible software, or if it is done without using any<br />
+work based on GCC. For example, using non-GPL-compatible Software to<br />
+optimize any GCC intermediate representations would not qualify as an<br />
+Eligible Compilation Process.<br />
+<br />
+1. Grant of Additional Permission.<br />
+<br />
+You have permission to propagate a work of Target Code formed by<br />
+combining the Runtime Library with Independent Modules, even if such<br />
+propagation would otherwise violate the terms of GPLv3, provided that<br />
+all Target Code was generated by Eligible Compilation Processes. You<br />
+may then convey such a combination under terms of your choice,<br />
+consistent with the licensing of the Independent Modules.<br />
+<br />
+2. No Weakening of GCC Copyleft.<br />
+<br />
+The availability of this Exception does not imply any general<br />
+presumption that third-party software is unaffected by the copyleft<br />
+requirements of the license of GCC.<br />
    </p></div><p>
Hopefully that text is self-explanatory. If it isn't, you need to speak
to your lawyer, or the Free Software Foundation.
- </p></div><div class="section" title="The Documentation: GPL, FDL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"/>The Documentation: GPL, FDL</h3></div></div></div><p>
+ </p></div><div class="section" title="The Documentation: GPL, FDL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"></a>The Documentation: GPL, FDL</h3></div></div></div><p>
The documentation shipped with the library and made available over
the web, excluding the pages generated from source comments, are
copyrighted by the Free Software Foundation, and placed under the
@@ -102,4 +102,4 @@ requirements of the license of GCC.<br/>
</p><p>
If you plan on making copies of the documentation, please let us know.
We can probably offer suggestions.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="status.html">Prev</a> </td><td align="center"><a accesskey="u" href="status.html">Up</a></td><td align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 1. Status </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Bugs</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Status </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Bugs</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/localization.html b/libstdc++-v3/doc/html/manual/localization.html
index 6947a018ee..eb08727d50 100644
--- a/libstdc++-v3/doc/html/manual/localization.html
+++ b/libstdc++-v3/doc/html/manual/localization.html
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="strings.html" title="Chapter 7.  Strings"/><link rel="next" href="facets.html" title="Facets"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7.  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
Localization
-</th></tr><tr><td align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 8.  Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"/>Chapter 8. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 8.  Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
Localization
- <a id="id475905" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></div><div class="section" title="Locales"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization.locales"/>Locales</h2></div></div></div><div class="section" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"/>locale</h3></div></div></div><p>
+ <a id="idp15674528" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15752864">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section" title="Locales"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
Describes the basic locale object, including nested
classes id, facet, and the reference-counted implementation object,
class _Impl.
-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"/>Requirements</h4></div></div></div><p>
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
Class locale is non-templatized and has two distinct types nested
inside of it:
</p><div class="blockquote"><blockquote class="blockquote"><p>
@@ -26,7 +26,7 @@ called numpunct is the data object that can be used to query for the
thousands separator in the locale.
</p><p>
Literally, a facet is strictly defined:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Containing the following public data member:
</p><p>
<code class="code">static locale::id id;</code>
@@ -48,14 +48,14 @@ class id
</em></span>
</p></blockquote></div><p>
Provides an index for looking up specific facets.
-</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"/>Design</h4></div></div></div><p>
+</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
The major design challenge is fitting an object-orientated and
non-global locale design on top of POSIX and other relevant standards,
which include the Single Unix (nee X/Open.)
</p><p>
Because C and earlier versions of POSIX fall down so completely,
portability is an issue.
-</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"/>Implementation</h4></div></div></div><div class="section" title="Interacting with &quot;C&quot; locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"/>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interacting with &quot;C&quot; locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="code">`locale -a`</code> displays available locales.
</p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
af_ZA
@@ -385,7 +385,7 @@ global locale" (emphasis Paolo), that is:
particular on the working of locale(""), which constructs the locale
object from the environment of the running program, that is, in
practice, the set of LC_ALL, LANG, etc. variable of the shell.
-</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Locale initialization: at what point does _S_classic, _S_global
get initialized? Can named locales assume this initialization
has already taken place?
@@ -403,34 +403,35 @@ global locale" (emphasis Paolo), that is:
What should non-required facet instantiations do? If the
generic implementation is provided, then how to end-users
provide specializations?
- </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id476268"/><p><span class="citetitle"><em class="citetitle">
+ </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15718112"></a><p><span class="citetitle"><em class="citetitle">
The GNU C Library
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
Chapters 6 Character Set Handling and 7 Locales and
Internationalization
- . </span></p></div><div class="biblioentry"><a id="id476307"/><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idp15722880"></a><p><span class="citetitle"><em class="citetitle">
Correspondence
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id476333"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15725968"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id476352"/><p><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15728256"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 9899:1999 Programming languages - C
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id476371"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15730528"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin/" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </em>. </span><span class="copyright">Copyright © 2008
+ </a>
+ </em>. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="id476400"/><p><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry"><a id="idp15733760"></a><p><span class="citetitle"><em class="citetitle">
The C++ Programming Language, Special Edition
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="id476439"/><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idp15738384"></a><p><span class="citetitle"><em class="citetitle">
Standard C++ IOStreams and Locales
</em>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 7. 
+ . </span></span></p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. 
Strings
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Facets</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/make.html b/libstdc++-v3/doc/html/manual/make.html
index 62b1499240..1fbbf8f9f1 100644
--- a/libstdc++-v3/doc/html/manual/make.html
+++ b/libstdc++-v3/doc/html/manual/make.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="setup.html" title="Chapter 2. Setup"/><link rel="prev" href="configure.html" title="Configure"/><link rel="next" href="using.html" title="Chapter 3. Using"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr/></div><div class="section" title="Make"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.make"/>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
- <a class="link" href="http://gcc.gnu.org/install/">GCC Installation
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section" title="Make"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
+ <a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
<span class="emphasis"><em>Twice.</em></span>
</p><p>Then type: <span class="command"><strong>make</strong></span>, and congratulations, you've
started to build.
-</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td align="center"><a accesskey="u" href="setup.html">Up</a></td><td align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td align="left" valign="top">Configure </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/memory.html b/libstdc++-v3/doc/html/manual/memory.html
index 5953539dc5..49eebd7932 100644
--- a/libstdc++-v3/doc/html/manual/memory.html
+++ b/libstdc++-v3/doc/html/manual/memory.html
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="utilities.html" title="Chapter 6.  Utilities"/><link rel="prev" href="pairs.html" title="Pairs"/><link rel="next" href="traits.html" title="Traits"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
-</th><td align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr/></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.memory"/>Memory</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
Memory contains three general areas. First, function and operator
calls via <code class="function">new</code> and <code class="function">delete</code>
operator or member function calls. Second, allocation via
<code class="classname">allocator</code>. And finally, smart pointer and
intelligent pointer abstractions.
- </p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"/>Allocators</h3></div></div></div><p>
+ </p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
Memory management for Standard Library entities is encapsulated in a
class template called <code class="classname">allocator</code>. The
<code class="classname">allocator</code> abstraction is used throughout the
@@ -17,9 +17,9 @@
algorithms, and parts of iostreams. This class, and base classes of
it, are the superset of available free store (<span class="quote">“<span class="quote">heap</span>â€</span>)
management classes.
-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"/>Requirements</h4></div></div></div><p>
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
The C++ standard only gives a few directives in this area:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
When you add elements to a container, and the container must
allocate more memory to hold them, the container makes the
request via its <span class="type">Allocator</span> template
@@ -54,11 +54,11 @@
</p></li></ul></div><p>
Complete details can be found in the C++ standard, look in
<code class="constant">[20.4 Memory]</code>.
- </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"/>Design Issues</h4></div></div></div><p>
+ </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
The easiest way of fulfilling the requirements is to call
<code class="function">operator new</code> each time a container needs
memory, and to call <code class="function">operator delete</code> each time
- the container releases memory. This method may be <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html">slower</a>
+ the container releases memory. This method may be <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html" target="_top">slower</a>
than caching the allocations and re-using previously-allocated
memory, but has the advantage of working correctly across a wide
variety of hardware and operating systems, including large
@@ -93,7 +93,7 @@
or loading and unloading shared objects in memory. As such, using
caching allocators on systems that do not support
<code class="function">abi::__cxa_atexit</code> is not recommended.
- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"/>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="id473085"/>Interface Design</h5></div></div></div><p>
+ </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="idp13894640"></a>Interface Design</h5></div></div></div><p>
The only allocator interface that
is supported is the standard C++ interface. As such, all STL
containers have been adjusted, and all external allocators have
@@ -106,7 +106,7 @@
</p><p>
The base class that <code class="classname">allocator</code> is derived from
may not be user-configurable.
-</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id473115"/>Selecting Default Allocation Policy</h5></div></div></div><p>
+</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="idp13898192"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
It's difficult to pick an allocation strategy that will provide
maximum utility, without excessively penalizing some behavior. In
fact, it's difficult just deciding which typical actions to measure
@@ -114,14 +114,14 @@
</p><p>
Three synthetic benchmarks have been created that provide data
that is used to compare different C++ allocators. These tests are:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Insertion.
</p><p>
Over multiple iterations, various STL container
objects have elements inserted to some maximum amount. A variety
of allocators are tested.
- Test source for <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</a>
- and <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</a>
+ Test source for <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup" target="_top">sequence</a>
+ and <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup" target="_top">associative</a>
containers.
</p></li><li class="listitem"><p>
Insertion and erasure in a multi-threaded environment.
@@ -130,20 +130,20 @@
on a per-thread basis, as well as measuring thread contention
for memory resources.
Test source
- <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</a>.
+ <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup" target="_top">here</a>.
</p></li><li class="listitem"><p>
A threaded producer/consumer model.
</p><p>
Test source for
- <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</a>
+ <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup" target="_top">sequence</a>
and
- <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</a>
+ <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup" target="_top">associative</a>
containers.
</p></li></ol></div><p>
The current default choice for
<code class="classname">allocator</code> is
<code class="classname">__gnu_cxx::new_allocator</code>.
- </p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="id473225"/>Disabling Memory Caching</h5></div></div></div><p>
+ </p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="idp13911488"></a>Disabling Memory Caching</h5></div></div></div><p>
In use, <code class="classname">allocator</code> may allocate and
deallocate using implementation-specified strategies and
heuristics. Because of this, every call to an allocator object's
@@ -179,7 +179,7 @@
environment, it likely means that you linked against objects
built against the older library (objects which might still using the
cached allocations...).
- </p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"/>Using a Specific Allocator</h4></div></div></div><p>
+ </p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
You can specify different memory management schemes on a
per-container basis, by overriding the default
<span class="type">Allocator</span> template parameter. For example, an easy
@@ -190,7 +190,7 @@
Likewise, a debugging form of whichever allocator is currently in use:
</p><pre class="programlisting">
std::deque &lt;int, __gnu_cxx::debug_allocator&lt;std::allocator&lt;int&gt; &gt; &gt; debug_deque;
- </pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"/>Custom Allocators</h4></div></div></div><p>
+ </pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
Writing a portable C++ allocator would dictate that the interface
would look much like the one specified for
<code class="classname">allocator</code>. Additional member functions, but
@@ -199,7 +199,7 @@
Probably the best place to start would be to copy one of the
extension allocators: say a simple one like
<code class="classname">new_allocator</code>.
- </p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"/>Extension Allocators</h4></div></div></div><p>
+ </p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
Several other allocators are provided as part of this
implementation. The location of the extension allocators and their
names have changed, but in all cases, functionality is
@@ -209,7 +209,7 @@
chart to track the changes.
</p><p>
More details on each of these extension allocators follows.
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
<code class="classname">new_allocator</code>
</p><p>
Simply wraps <code class="function">::operator new</code>
@@ -301,36 +301,40 @@
</p><p>
A high-performance fixed-size allocator with
exponentially-increasing allocations. It has its own
- documentation, found <a class="link" href="ext_allocators.html#manual.ext.allocator.mt" title="mt_allocator">here</a>.
+ documentation, found <a class="link" href="mt_allocator.html" title="Chapter 20. The mt_allocator">here</a>.
</p></li><li class="listitem"><p>
<code class="classname">bitmap_allocator</code>
</p><p>
A high-performance allocator that uses a bit-map to keep track
of the used and unused memory locations. It has its own
- documentation, found <a class="link" href="bitmap_allocator.html" title="bitmap_allocator">here</a>.
- </p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id473676"/><p><span class="citetitle"><em class="citetitle">
+ documentation, found <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">here</a>.
+ </p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13965488"></a><p><span class="citetitle"><em class="citetitle">
ISO/IEC 14882:1998 Programming languages - C++
</em>. </span>
isoc++_1998
- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="id473691"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry" title="The Standard Librarian: What Are Allocators Good For?"><a id="idp13967328"></a><p><span class="title"><em>
+ <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
The Standard Librarian: What Are Allocators Good For?
- </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
C/C++ Users Journal
- . </span></span></p></div><div class="biblioentry"><a id="id473725"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="The Hoard Memory Allocator"><a id="idp13971056"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cs.umass.edu/~emery/hoard" target="_top">
The Hoard Memory Allocator
- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="id473750"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry" title="Reconsidering Custom Memory Allocation"><a id="idp13973840"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
Reconsidering Custom Memory Allocation
- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="id473804"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry" title="Allocator Types"><a id="idp13980000"></a><p><span class="title"><em>
+ <a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
Allocator Types
- </em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
C/C++ Users Journal
- . </span></span></p></div><div class="biblioentry"><a id="id473845"/><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
+ . </span></span></p></div><div class="biblioentry"><a id="idp13984736"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry"><a id="id473882"/><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section" title="auto_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"/>auto_ptr</h3></div></div></div><div class="section" title="Limitations"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"/>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
+ . </span></span></p></div><div class="biblioentry"><a id="idp13989168"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section" title="auto_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section" title="Limitations"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
happen with misuse of the <code class="classname">auto_ptr</code> class
template (called <acronym class="acronym">AP</acronym> here) would take some
time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
@@ -381,7 +385,7 @@
to die. AP is trivial to write, however, so you could write your
own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
been done many times; check the mailing lists, Usenet, Boost, etc).
- </p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"/>Use in Containers</h4></div></div></div><p>
+ </p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
</p><p>All of the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers</a>
described in the standard library require their contained types
to have, among other things, a copy constructor like this:
@@ -417,22 +421,16 @@
}
</pre><p>
Should you try this with the checks enabled, you will see an error.
- </p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"/>shared_ptr</h3></div></div></div><p>
+ </p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
The shared_ptr class template stores a pointer, usually obtained via new,
and implements shared ownership semantics.
-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"/>Requirements</h4></div></div></div><p>
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
</p><p>
The standard deliberately doesn't require a reference-counted
implementation, allowing other techniques such as a
circular-linked-list.
</p><p>
- At the time of writing the C++0x working paper doesn't mention how
- threads affect shared_ptr, but it is likely to follow the existing
- practice set by <code class="classname">boost::shared_ptr</code>. The
- shared_ptr in libstdc++ is derived from Boost's, so the same rules
- apply.
- </p><p>
- </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"/>Design Issues</h4></div></div></div><p>
+ </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
project and the original authors of the code. The basic design and
algorithms are from Boost, the notes below describe details specific to
@@ -446,7 +444,7 @@ drops to zero.
Derived classes override those functions to destroy resources in a context
where the correct dynamic type is known. This is an application of the
technique known as type erasure.
- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"/>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="id474243"/>Class Hierarchy</h5></div></div></div><p>
+ </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="idp15484560"></a>Class Hierarchy</h5></div></div></div><p>
A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
type <span class="type">T*</span> and an object of type
<code class="classname">__shared_count</code>. The shared_count contains a
@@ -461,13 +459,13 @@ the counts drop to zero. The managed object is destroyed when the last
strong reference is dropped, but the _Sp_counted_base itself must exist
until the last weak reference is dropped.
</p></dd><dt><span class="term"><code class="classname">_Sp_counted_base_impl&lt;Ptr, Deleter, Lp&gt;</code></span></dt><dd><p>
-Inherits from _Sp_counted_base and stores a pointer of type <span class="type">Ptr</span>
-and a deleter of type <code class="code">Deleter</code>. <code class="code">_Sp_deleter</code> is
+Inherits from _Sp_counted_base and stores a pointer of type <code class="code">Ptr</code>
+and a deleter of type <code class="code">Deleter</code>. <code class="classname">_Sp_deleter</code> is
used when the user doesn't supply a custom deleter. Unlike Boost's, this
default deleter is not "checked" because GCC already issues a warning if
<code class="function">delete</code> is used with an incomplete type.
-This is the only derived type used by <code class="classname">shared_ptr&lt;Ptr&gt;</code>
-and it is never used by <code class="classname">shared_ptr</code>, which uses one of
+This is the only derived type used by <code class="classname">tr1::shared_ptr&lt;Ptr&gt;</code>
+and it is never used by <code class="classname">std::shared_ptr</code>, which uses one of
the following types, depending on how the shared_ptr is constructed.
</p></dd><dt><span class="term"><code class="classname">_Sp_counted_ptr&lt;Ptr, Lp&gt;</code></span></dt><dd><p>
Inherits from _Sp_counted_base and stores a pointer of type <span class="type">Ptr</span>,
@@ -488,14 +486,14 @@ be forwarded to <span class="type">Tp</span>'s constructor.
Unlike the other <code class="classname">_Sp_counted_*</code> classes, this one is parameterized on the
type of object, not the type of pointer; this is purely a convenience
that simplifies the implementation slightly.
- </p></dd></dl></div></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="id474421"/>Thread Safety</h5></div></div></div><p>
-C++0x-only features are: rvalue-ref/move support, allocator support,
+ </p></dd></dl></div><p>
+C++11-only features are: rvalue-ref/move support, allocator support,
aliasing constructor, make_shared &amp; allocate_shared. Additionally,
the constructors taking <code class="classname">auto_ptr</code> parameters are
-deprecated in C++0x mode.
- </p><p>
+deprecated in C++11 mode.
+ </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="idp15507072"></a>Thread Safety</h5></div></div></div><p>
The
-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety">Thread
+<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
objects offer the same level of thread safety as built-in types."
The implementation must ensure that concurrent updates to separate shared_ptr
@@ -538,7 +536,7 @@ compiler, standard library, platform etc. For the version of
shared_ptr in libstdc++ the compiler and library are fixed, which
makes things much simpler: we have an atomic CAS or we don't, see Lock
Policy below for details.
-</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id474491"/>Selecting Lock Policy</h5></div></div></div><p>
+</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="idp15514368"></a>Selecting Lock Policy</h5></div></div></div><p>
</p><p>
There is a single <code class="classname">_Sp_counted_base</code> class,
which is a template parameterized on the enum
@@ -554,22 +552,22 @@ specialization will be used. This design is necessary because it would
not be conforming for <code class="classname">shared_ptr</code> to have an
extra template parameter, even if it had a default value. The
available policies are:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
- <span class="type">_S_Atomic</span>
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <code class="constant">_S_Atomic</code>
</p><p>
Selected when GCC supports a builtin atomic compare-and-swap operation
-on the target processor (see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html">Atomic
+on the target processor (see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top">Atomic
Builtins</a>.) The reference counts are maintained using a lock-free
algorithm and GCC's atomic builtins, which provide the required memory
synchronisation.
</p></li><li class="listitem"><p>
- <span class="type">_S_Mutex</span>
+ <code class="constant">_S_Mutex</code>
</p><p>
The _Sp_counted_base specialization for this policy contains a mutex,
which is locked in add_ref_lock(). This policy is used when GCC's atomic
builtins aren't available so explicit memory barriers are needed in places.
</p></li><li class="listitem"><p>
- <span class="type">_S_Single</span>
+ <code class="constant">_S_Single</code>
</p><p>
This policy uses a non-reentrant add_ref_lock() with no locking. It is
used when libstdc++ is built without <code class="literal">--enable-threads</code>.
@@ -579,30 +577,13 @@ used when libstdc++ is built without <code class="literal">--enable-threads</cod
<code class="filename">ext/atomicity.h</code>, which detect if the program
is multi-threaded. If only one thread of execution exists in
the program then less expensive non-atomic operations are used.
- </p></div><div class="section" title="Dual C++0x and TR1 Implementation"><div class="titlepage"><div><div><h5 class="title"><a id="id474613"/>Dual C++0x and TR1 Implementation</h5></div></div></div><p>
-The interface of <code class="classname">tr1::shared_ptr</code> was extended for C++0x
-with support for rvalue-references and the other features from N2351.
-The <code class="classname">_Sp_counted_base</code> base class is implemented in
-<code class="filename">tr1/boost_sp_shared_count.h</code> and is common to the TR1
-and C++0x versions of <code class="classname">shared_ptr</code>.
-</p><p>
-The classes derived from <code class="classname">_Sp_counted_base</code> (see Class Hierarchy
-above) and <code class="classname">__shared_count</code> are implemented separately for C++0x
-and TR1, in <code class="filename">bits/shared_ptr.h</code> and
-<code class="filename">tr1/shared_ptr.h</code> respectively.
-</p><p>
-The TR1 implementation is considered relatively stable, so is unlikely to
-change unless bug fixes require it. If the code that is common to both
-C++0x and TR1 modes needs to diverge further then it might be necessary to
-duplicate <code class="classname">_Sp_counted_base</code> and only make changes to
-the C++0x version.
-</p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="id474669"/>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
+ </p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="idp15528992"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
<code class="code">const_pointer_cast</code></span></dt><dd><p>
As noted in N2351, these functions can be implemented non-intrusively using
the alias constructor. However the aliasing constructor is only available
-in C++0x mode, so in TR1 mode these casts rely on three non-standard
+in C++11 mode, so in TR1 mode these casts rely on three non-standard
constructors in shared_ptr and __shared_ptr.
-In C++0x mode these constructors and the related tag types are not needed.
+In C++11 mode these constructors and the related tag types are not needed.
</p></dd><dt><span class="term"><code class="code">enable_shared_from_this</code></span></dt><dd><p>
The clever overload to detect a base class of type
<code class="code">enable_shared_from_this</code> comes straight from Boost.
@@ -629,15 +610,15 @@ is called. Users should not try to use this.
As well as the extra constructors, this implementation also needs some
members of _Sp_counted_deleter to be protected where they could otherwise
be private.
- </p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"/>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="id474818"/>Examples</h5></div></div></div><p>
+ </p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="idp15545344"></a>Examples</h5></div></div></div><p>
Examples of use can be found in the testsuite, under
<code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
<code class="filename">testsuite/20_util/shared_ptr</code>
and
<code class="filename">testsuite/20_util/weak_ptr</code>.
- </p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="id474848"/>Unresolved Issues</h5></div></div></div><p>
+ </p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="idp15548928"></a>Unresolved Issues</h5></div></div></div><p>
The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
- clause in the C++0x working draft is not implemented in GCC.
+ clause in the C++11 standard is not implemented in GCC.
</p><p>
The <span class="type">_S_single</span> policy uses atomics when used in MT
code, because it uses the same dispatcher functions that check
@@ -647,7 +628,7 @@ be private.
</p><p>
Unlike Boost, this implementation does not use separate classes
for the pointer+deleter and pointer+deleter+allocator cases in
- C++0x mode, combining both into _Sp_counted_deleter and using
+ C++11 mode, combining both into _Sp_counted_deleter and using
<code class="classname">allocator</code> when the user doesn't specify
an allocator. If it was found to be beneficial an additional
class could easily be added. With the current implementation,
@@ -671,29 +652,33 @@ be private.
</p><p>
tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
would alter the ABI.
- </p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"/>Acknowledgments</h4></div></div></div><p>
+ </p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
The original authors of the Boost shared_ptr, which is really nice
code to work with, Peter Dimov in particular for his help and
invaluable advice on thread safety. Phillip Jordan and Paolo
Carlini for the lock policy implementation.
- </p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id474942"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ </p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="Improving shared_ptr for C++0x, Revision 2"><a id="idp15560160"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
Improving shared_ptr for C++0x, Revision 2
- </em>. </span><span class="subtitle">
+ </a>
+ </em>. </span><span class="subtitle">
N2351
- . </span></p></div><div class="biblioentry"><a id="id474963"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry" title="C++ Standard Library Active Issues List"><a id="idp15562448"></a><p><span class="title"><em>
+ <a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
C++ Standard Library Active Issues List
- </em>. </span><span class="subtitle">
+ </a>
+ </em>. </span><span class="subtitle">
N2456
- . </span></p></div><div class="biblioentry"><a id="id474984"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry" title="Working Draft, Standard for Programming Language C++"><a id="idp15564736"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
Working Draft, Standard for Programming Language C++
- </em>. </span><span class="subtitle">
+ </a>
+ </em>. </span><span class="subtitle">
N2461
- . </span></p></div><div class="biblioentry"><a id="id475006"/><p><span class="biblioid">shared_ptr
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry" title="Boost C++ Libraries documentation, shared_ptr"><a id="idp15567040"></a><p><span class="title"><em>
+ <a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
Boost C++ Libraries documentation, shared_ptr
- </em>. </span><span class="subtitle">
+ </a>
+ </em>. </span><span class="subtitle">
N2461
- . </span></p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td align="center"><a accesskey="u" href="utilities.html">Up</a></td><td align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td align="left" valign="top">Pairs </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Traits</td></tr></table></div></body></html>
+ . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/mt_allocator.html b/libstdc++-v3/doc/html/manual/mt_allocator.html
new file mode 100644
index 0000000000..5efda94041
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/mt_allocator.html
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bk01pt03ch20s02.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 20. The mt_allocator"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></div><p>
+</p><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
+ The mt allocator [hereinafter referred to simply as "the allocator"]
+ is a fixed size (power of two) allocator that was initially
+ developed specifically to suit the needs of multi threaded
+ applications [hereinafter referred to as an MT application]. Over
+ time the allocator has evolved and been improved in many ways, in
+ particular it now also does a good job in single threaded
+ applications [hereinafter referred to as a ST application]. (Note:
+ In this document, when referring to single threaded applications
+ this also includes applications that are compiled with gcc without
+ thread support enabled. This is accomplished using ifdef's on
+ __GTHREADS). This allocator is tunable, very flexible, and capable
+ of high-performance.
+</p><p>
+ The aim of this document is to describe - from an application point of
+ view - the "inner workings" of the allocator.
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/numerics.html b/libstdc++-v3/doc/html/manual/numerics.html
index ccf1f26e1b..887eca414e 100644
--- a/libstdc++-v3/doc/html/manual/numerics.html
+++ b/libstdc++-v3/doc/html/manual/numerics.html
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms"/><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
Numerics
-</th></tr><tr><td align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 12.  Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"/>Chapter 12. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 12.  Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
Numerics
- <a id="id480125" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section" title="Complex"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics.complex"/>Complex</h2></div></div></div><p>
- </p><div class="section" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"/>complex Processing</h3></div></div></div><p>
+ <a id="idp16179040" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section" title="Complex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
+ </p><div class="section" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
</p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
<span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
addition of complex types to the C language. David Tribble has
compiled a list of C++98 and C99 conflict points; his description of
C's new type versus those of C++ and how to get them playing together
nicely is
-<a class="link" href="http://david.tribble.com/text/cdiffs.htm#C99-complex">here</a>.
+<a class="link" href="http://david.tribble.com/text/cdiffs.htm#C99-complex" target="_top">here</a>.
</p><p><code class="code">complex&lt;&gt;</code> is intended to be instantiated with a
floating-point type. As long as you meet that and some other basic
requirements, then the resulting instantiation has all of the usual
@@ -24,7 +24,7 @@
and <code class="code">op&gt;&gt;</code> that work with iostreams: <code class="code">op&lt;&lt;</code>
prints <code class="code">(u,v)</code> and <code class="code">op&gt;&gt;</code> can read <code class="code">u</code>,
<code class="code">(u)</code>, and <code class="code">(u,v)</code>.
- </p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 11. 
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11. 
Algorithms
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/numerics_and_c.html b/libstdc++-v3/doc/html/manual/numerics_and_c.html
index 3a2fb499e5..0897edbaf9 100644
--- a/libstdc++-v3/doc/html/manual/numerics_and_c.html
+++ b/libstdc++-v3/doc/html/manual/numerics_and_c.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="numerics.html" title="Chapter 12.  Numerics"/><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations"/><link rel="next" href="io.html" title="Chapter 13.  Input and Output"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
Numerics
-</th><td align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr/></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics.c"/>Interacting with C</h2></div></div></div><div class="section" title="Numerics vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"/>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
+</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="section" title="Numerics vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
is that it is defined to be free of pointer aliasing, an assumption
that C89 is not allowed to make, and neither is C++98. C99 adds a new
keyword, <code class="code">restrict</code>, to apply to individual pointers. The
@@ -18,7 +18,7 @@
speaking this is only one of the five template classes, and they are
designed to be familiar to people who have worked with the BLAS
libraries before.
- </p></div><div class="section" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"/>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
+ </p></div><div class="section" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
of the C99 features that appear in libstdc++.
</p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
This flag is already on by default, but it can be disabled by the
@@ -31,7 +31,7 @@
are supported, as is the <code class="code">lldiv_t</code> typedef. Also supported
are the wide character functions using 'long long', like
<code class="code">wcstoll</code>.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td align="center"><a accesskey="u" href="numerics.html">Up</a></td><td align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td align="left" valign="top">Generalized Operations </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 13. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Generalized Operations </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13. 
Input and Output
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/pairs.html b/libstdc++-v3/doc/html/manual/pairs.html
index 8c4dbb7633..130c63254f 100644
--- a/libstdc++-v3/doc/html/manual/pairs.html
+++ b/libstdc++-v3/doc/html/manual/pairs.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="utilities.html" title="Chapter 6.  Utilities"/><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities"/><link rel="next" href="memory.html" title="Memory"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
-</th><td align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr/></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.pairs"/>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
+</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
carry around a pair of objects. One is of type T1, and another of
type T2; they may be the same type, but you don't get anything
extra if they are. The two members can be accessed directly, as
@@ -14,8 +14,7 @@
pair (const T1&amp; x, const T2&amp; y);
</pre><p>does what you think it does, <code class="code">first</code> getting <code class="code">x</code>
and <code class="code">second</code> getting <code class="code">y</code>.
- </p><p>There is a copy constructor, but it requires that your compiler
- handle member function templates:
+ </p><p>There is a constructor template for copying pairs of other types:
</p><pre class="programlisting">
template &lt;class U, class V&gt; pair (const pair&lt;U,V&gt;&amp; p);
</pre><p>The compiler will convert as necessary from U to T1 and from
@@ -39,7 +38,7 @@
instance of a pair instantiated on their respective types:
</p><pre class="programlisting">
pair&lt;int,MyClass&gt; p = make_pair(4,myobject);
- </pre></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td align="center"><a accesskey="u" href="utilities.html">Up</a></td><td align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 6. 
+ </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. 
Utilities
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Memory</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/parallel_mode.html b/libstdc++-v3/doc/html/manual/parallel_mode.html
index 9c94e266f2..1776f5b7a4 100644
--- a/libstdc++-v3/doc/html/manual/parallel_mode.html
+++ b/libstdc++-v3/doc/html/manual/parallel_mode.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="bk01pt03ch17s04.html" title="Design"/><link rel="next" href="bk01pt03ch18s02.html" title="Semantics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 18. Parallel Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"/>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 18. Parallel Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
implementation of many algorithms the C++ Standard Library.
</p><p>
Several of the standard algorithms, for instance
@@ -11,14 +11,14 @@ Several of the standard algorithms, for instance
annotations. These parallel mode constructs and can be invoked by
explicit source declaration or by compiling existing sources with a
specific compiler flag.
-</p><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.intro"/>Intro</h2></div></div></div><p>The following library components in the include
-<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"/>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id486049"/><p><span class="citetitle"><em class="citetitle">
+</p><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
+<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
+<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp16890112"></a><p><span class="citetitle"><em class="citetitle">
Parallelization of Bulk Operations for STL Dictionaries
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
- . </span></span></p></div><div class="biblioentry"><a id="id486091"/><p><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry"><a id="idp16895184"></a><p><span class="citetitle"><em class="citetitle">
The Multi-Core Standard Template Library
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
Euro-Par 2007: Parallel Processing. (LNCS 4641)
- . </span></span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td align="left" valign="top">Design </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html b/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
new file mode 100644
index 0000000000..c2e9f888b1
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
@@ -0,0 +1,3762 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section" title="Regression"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
+ For a given container type in this library, the test creates
+ an object of the container type and an object of the
+ corresponding standard type (e.g., <code class="classname">std::set</code>). It
+ then performs a random sequence of methods with random
+ arguments (e.g., inserts, erases, and so forth) on both
+ objects. At each operation, the test checks the return value of
+ the method, and optionally both compares this library's
+ object with the standard's object as well as performing other
+ consistency checks on this library's object (e.g.,
+ order preservation, when applicable, or node invariants, when
+ applicable).</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 (e.g.,
+ resource leaks and multiple de-allocations). Both
+ this library's containers and the containers' value-types are
+ configured to use this allocator.</p><p>For granularity, the test is split into the
+ several sources, each checking only some containers.</p><p>For more details, consult the files in
+ <code class="filename">testsuite/ext/pb_ds/regression</code>.
+ </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.performance"></a>Performance</h3></div></div></div><div class="section" title="Hash-Based"><div class="titlepage"><div><div><h4 class="title"><a id="performance.hash"></a>Hash-Based</h4></div></div></div><p></p><div class="section" title="Text find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.text_find"></a>
+ Text <code class="function">find</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.info"></a>
+ Description
+ </h6></div></div></div><p>
+ This test inserts a number of values with keys from an
+ arbitrary text (<a class="xref" href="policy_data_structures.html#biblio.wickland96thirty" title="Thirty Years Among the Dead">[biblio.wickland96thirty]</a>) into a container,
+ then performs a series of finds using
+ <code class="function">find</code> . It measures the average
+ time for <code class="function">find</code> as a function of
+ the number of values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/text_find_timing_test.cc</code>
+ </p><p>
+ And uses the data file:
+ <code class="filename">filethirty_years_among_the_dead_preproc.txt</code>
+ </p><p>The test checks the effect of different range-hashing
+ functions, trigger policies, and cache-hashing policies.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native
+ and collision-chaining hash types the the function
+ applied being a text find timing test using
+ <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_text_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div2_sth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the range-hashing scheme affects performance
+ more than other policies. As the results show, containers using
+ mod-based range-hashing (including the native hash-based container,
+ which is currently hard-wired to this scheme) have lower performance
+ than those using mask-based range-hashing. A modulo-based
+ range-hashing scheme's main benefit is that it takes into account
+ all hash-value bits. Standard string hash-functions are designed to
+ create hash values that are nearly-uniform as is (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>).</p><p>Trigger policies, i.e. the load-checks constants, affect
+ performance to a lesser extent.</p><p>Perhaps surprisingly, storing the hash value alongside each
+ entry affects performance only marginally, at least in this
+ library's implementation. (Unfortunately, it was not possible to run
+ the tests with <code class="classname">std::tr1::unordered_map</code> 's
+ <code class="classname">cache_hash_code = true</code> , as it appeared to
+ malfuntion.)</p></div></div><div class="section" title="Integer find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_find"></a>
+ Integer <code class="function">find</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+ using <code class="function">find</code>. It measures the average time
+ for <code class="function">find</code> as a function of the number of values
+ inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ hash-tables,
+ range-hashing functions, and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </p><p>The first graphic below shows the results for the native and
+ collision-chaining hash types. The function applied being a random
+ integer timing test using <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_cc_hash_int_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>
+ </p><p>
+ </p><p>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_gp_hash_int_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">gp_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">quadratic_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mask_linp_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ gp_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">linear_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the choice of underlying hash-table affects
+ performance most, then the range-hashing scheme and, only finally,
+ other policies.</p><p>When comparing probing and chaining containers, it is
+ apparent that the probing containers are less efficient than the
+ collision-chaining containers (
+ <code class="classname">std::tr1::unordered_map</code> uses
+ collision-chaining) in this case.</p><p>Hash-Based Integer Subscript Insert Timing Test shows
+ a different case, where the situation is reversed;
+ </p><p>Within each type of hash-table, the range-hashing scheme
+ affects performance more than other policies; Hash-Based Text
+ <code class="function">find</code> Find Timing Test also shows this. In the
+ above graphics should be noted that
+ <code class="classname">std::tr1::unordered_map</code> are hard-wired
+ currently to mod-based schemes.
+ </p></div></div><div class="section" title="Integer Subscript find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_find"></a>
+ Integer Subscript <code class="function">find</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+ using <code class="function">operator[]</code>. It measures the average time
+ for <code class="function">operator[]</code> as a function of the number of
+ values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_subscript_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ hash-tables, range-hashing functions, and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </p><p>The first graphic below shows the results for the native
+ and collision-chaining hash types, using as the function
+ applied an integer subscript timing test with
+ <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_cc_hash_int_subscript_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>
+ </p><p>
+ </p><p>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_gp_hash_int_subscript_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">gp_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">quadratic_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mask_linp_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ gp_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">linear_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>This test shows similar results to Hash-Based
+ Integer <code class="classname">find</code> Find Timing test.</p></div></div><div class="section" title="Integer Subscript insert"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_insert"></a>
+ Integer Subscript <code class="function">insert</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform i.i.d.
+ integer keys into a container, using
+ <code class="function">operator[]</code>. It measures the average time for
+ <code class="function">operator[]</code> as a function of the number of
+ values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_subscript_insert_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ hash-tables.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </p><p>The first graphic below shows the results for the native
+ and collision-chaining hash types, using as the function
+ applied an integer subscript timing test with
+ <code class="function">insert</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_cc_hash_int_subscript_insert.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>
+ </p><p>
+ </p><p>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_gp_hash_int_subscript_insert.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">gp_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">quadratic_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mask_linp_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ gp_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">linear_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, as in Hash-Based Text
+ <code class="function">find</code> Find Timing test and Hash-Based
+ Integer <code class="function">find</code> Find Timing test , the choice
+ of underlying hash-table underlying hash-table affects performance
+ most, then the range-hashing scheme, and
+ finally any other policies.</p><p>There are some differences, however:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>In this setting, probing tables function sometimes more
+ efficiently than collision-chaining tables.
+ This is explained shortly.</p></li><li class="listitem"><p>The performance graphs have a "saw-tooth" shape. The
+ average insert time rises and falls. As values are inserted
+ into the container, the load factor grows larger. Eventually,
+ a resize occurs. The reallocations and rehashing are
+ relatively expensive. After this, the load factor is smaller
+ than before.</p></li></ol></div><p>Collision-chaining containers use indirection for greater
+ flexibility; probing containers store values contiguously, in
+ an array (see Figure Motivation::Different
+ underlying data structures A and B, respectively). It
+ follows that for simple data types, probing containers access
+ their allocator less frequently than collision-chaining
+ containers, (although they still have less efficient probing
+ sequences). This explains why some probing containers fare
+ better than collision-chaining containers in this case.</p><p>
+ Within each type of hash-table, the range-hashing scheme affects
+ performance more than other policies. This is similar to the
+ situation in Hash-Based Text
+ <code class="function">find</code> Find Timing Test and Hash-Based
+ Integer <code class="function">find</code> Find Timing Test.
+ Unsurprisingly, however, containers with lower α<sub>max</sub> perform worse in this case,
+ since more re-hashes are performed.</p></div></div><div class="section" title="Integer find with Skewed-Distribution"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.zlob_int_find"></a>
+ Integer <code class="function">find</code> with Skewed-Distribution
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with a markedly
+ non-uniform integer keys into a container, then performs
+ a series of finds using <code class="function">find</code>. It measures the average
+ time for <code class="function">find</code> as a function of the number of values in
+ the containers. The keys are generated as follows. First, a
+ uniform integer is created. Then it is then shifted left 8 bits.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc</code>
+ </p><p>The test checks the effect of different range-hashing
+ functions and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_zlob_int_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">gp_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">quadratic_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the distribution of keys is so skewed that
+ the underlying hash-table type affects performance marginally.
+ (This is in contrast with Hash-Based Text
+ <code class="function">find</code> Find Timing Test, Hash-Based
+ Integer <code class="function">find</code> Find Timing Test, Hash-Based
+ Integer Subscript Find Timing Test and Hash-Based
+ Integer Subscript Insert Timing Test.)</p><p>The range-hashing scheme affects performance dramatically. A
+ mask-based range-hashing scheme effectively maps all values
+ into the same bucket. Access degenerates into a search within
+ an unordered linked-list. In the graphic above, it should be noted that
+ <code class="classname">std::tr1::unordered_map</code> is hard-wired currently to mod-based and mask-based schemes,
+ respectively.</p><p>When observing the settings of this test, it is apparent
+ that the keys' distribution is far from natural. One might ask
+ if the test is not contrived to show that, in some cases,
+ mod-based range hashing does better than mask-based range
+ hashing. This is, in fact just the case. A
+ more natural case in which mod-based range hashing is better was not encountered.
+ Thus the inescapable conclusion: real-life key distributions are handled better
+ with an appropriate hash function and a mask-based
+ range-hashing function. (<code class="filename">pb_ds/example/hash_shift_mask.cc</code>
+ shows an example of handling this a-priori known skewed
+ distribution with a mask-based range-hashing function). If hash
+ performance is bad, a χ<sup>2</sup> test can be used
+ to check how to transform it into a more uniform
+ distribution.</p><p>For this reason, this library's default range-hashing
+ function is mask-based.</p></div></div><div class="section" title="Erase Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.erase_mem"></a>
+ Erase Memory Use
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of uniform integer keys
+ into a container, then erases all keys except one. It measures
+ the final size of the container.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc</code>
+ </p><p>The test checks how containers adjust internally as their
+ logical size decreases.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_int_erase_mem.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ n_hash_map_ncah
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_map</code>
+ </td><td align="left">
+ <code class="classname">cache_hash_code</code>
+ </td><td align="left">
+ <code class="constant">false</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mod_prime_1div1_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mod_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_prime_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/1
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ cc_hash_mask_exp_1div2_nsth_map
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="5" align="left">
+ gp_hash_mask_linp_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">gp_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Probe_Fn</code>
+ </td><td align="left">
+ <code class="classname">linear_probe_fn</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.observations"></a>
+ Observations
+ </h6></div></div></div><p>The standard's hash-based containers act very differently than trees in
+ this respect. When erasing numerous keys from an standard
+ associative-container, the resulting memory user varies greatly
+ depending on whether the container is tree-based or hash-based.
+ This is a fundamental consequence of the standard's interface for
+ associative containers, and it is not due to a specific
+ implementation.</p></div></div></div><div class="section" title="Branch-Based"><div class="titlepage"><div><div><h4 class="title"><a id="performance.branch"></a>Branch-Based</h4></div></div></div><p></p><div class="section" title="Text insert"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_insert"></a>
+ Text <code class="function">insert</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an arbitrary
+ text ([ wickland96thirty ]) into a container
+ using <code class="function">insert</code> . It measures the average time
+ for <code class="function">insert</code> as a function of the number of
+ values inserted.</p><p>The test checks the effect of different underlying
+ data structures.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_text_insert_timing.cc</code>
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.results"></a>
+ Results
+ </h6></div></div></div><p>The three graphics below show the results for the native
+ tree and this library's node-based trees, the native tree and
+ this library's vector-based trees, and the native tree
+ and this library's PATRICIA-trie, respectively.
+ </p><p>The graphic immediately below shows the results for the
+ native tree type and several node-based tree types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_text_insert_node.png" align="middle" /></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p></div><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_map
+ </td></tr><tr><td align="left">
+ <code class="classname">std::map</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ splay_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">splay_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rb_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the
+ native tree type and a vector-based tree type.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_text_insert_vector.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_map
+ </td></tr><tr><td align="left">
+ <code class="classname">std::map</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ ov_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">ov_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the
+ native tree type and a PATRICIA trie type.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_text_insert_trie.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_map
+ </td></tr><tr><td align="left">
+ <code class="classname">std::map</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pat_trie_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pat_trie_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.observations"></a>
+ Observations
+ </h6></div></div></div><p>Observing the first graphic implies that for this setting, a splay tree
+ (<code class="classname">tree</code> with <code class="classname">Tag
+ </code> = <code class="classname">splay_tree_tag</code>) does not do
+ well. See also the Branch-Based
+ Text <code class="function">find</code> Find Timing Test. The two
+ red-black trees perform better.</p><p>Observing the second graphic, an ordered-vector tree
+ (<code class="classname">tree</code> with <code class="classname">Tag
+ </code> = <code class="classname">ov_tree_tag</code>) performs
+ abysmally. Inserting into this type of tree has linear complexity
+ [ austern00noset].</p><p>Observing the third and last graphic, A PATRICIA trie
+ (<code class="classname">trie</code> with <code class="classname">Tag
+ </code> = <code class="classname">pat_trie_tag</code>) has abysmal
+ performance, as well. This is not that surprising, since a
+ large-fan-out PATRICIA trie works like a hash table with
+ collisions resolved by a sub-trie. Each time a collision is
+ encountered, a new "hash-table" is built A large fan-out PATRICIA
+ trie, however, doe does well in look-ups (see Branch-Based
+ Text <code class="function">find</code> Find Timing Test). It may be
+ beneficial in semi-static settings.</p></div></div><div class="section" title="Text find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_find"></a>
+ Text <code class="function">find</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([wickland96thirty]) into
+ a container, then performs a series of finds using
+ <code class="function">find</code>. It measures the average time
+ for <code class="function">find</code> as a function of the number of
+ values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/text_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ data structures.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_text_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_map
+ </td></tr><tr><td align="left">
+ <code class="classname">std::map</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ splay_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">splay_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rb_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ ov_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">ov_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pat_trie_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pat_trie_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>For this setting, a splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag
+ </code> = <code class="classname">splay_tree_tag</code>) does not do
+ well. This is possibly due to two reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A splay tree is not guaranteed to be balanced [motwani95random]. If a
+ splay tree contains n nodes, its average root-leaf
+ path can be m &gt;&gt; log(n).</p></li><li class="listitem"><p>Assume a specific root-leaf search path has length
+ m, and the search-target node has distance m'
+ from the root. A red-black tree will require m + 1
+ comparisons to find the required node; a splay tree will
+ require 2 m' comparisons. A splay tree, consequently,
+ can perform many more comparisons than a red-black tree.</p></li></ol></div><p>An ordered-vector tree (<code class="classname">tree</code>
+ with <code class="classname">Tag</code> = <code class="classname">ov_tree_tag</code>), a red-black
+ tree (<code class="classname">tree</code>
+ with <code class="classname">Tag</code> = <code class="classname">rb_tree_tag</code>), and the
+ native red-black tree all share approximately the same
+ performance.</p><p>An ordered-vector tree is slightly slower than red-black
+ trees, since it requires, in order to find a key, more math
+ operations than they do. Conversely, an ordered-vector tree
+ requires far lower space than the others. ([austern00noset], however,
+ seems to have an implementation that is also faster than a
+ red-black tree).</p><p>A PATRICIA trie (<code class="classname">trie</code>
+ with <code class="classname">Tag</code> = <code class="classname">pat_trie_tag</code>) has good
+ look-up performance, due to its large fan-out in this case. In
+ this setting, a PATRICIA trie has look-up performance comparable
+ to a hash table (see Hash-Based Text
+ <code class="classname">find</code> Timing Test), but it is order
+ preserving. This is not that surprising, since a large-fan-out
+ PATRICIA trie works like a hash table with collisions resolved
+ by a sub-trie. A large-fan-out PATRICIA trie does not do well on
+ modifications (see Tree-Based and Trie-Based
+ Text Insert Timing Test). Therefore, it is possibly beneficial in
+ semi-static settings.</p></div></div><div class="section" title="Text find with Locality-of-Reference"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_lor_find"></a>
+ Text <code class="function">find</code> with Locality-of-Reference
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container, then performs a series of finds using
+ <code class="function">find</code>. It is different than Tree-Based and
+ Trie-Based Text <code class="function">find</code> Find Timing Test in the
+ sequence of finds it performs: this test performs multiple
+ <code class="function">find</code>s on the same key before moving on to the next
+ key. It measures the average time for <code class="function">find</code> as a
+ function of the number of values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_text_lor_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ data structures in a locality-of-reference setting.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_text_lor_find.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_map
+ </td></tr><tr><td align="left">
+ <code class="classname">std::map</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ splay_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">splay_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rb_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ ov_tree_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">ov_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pat_trie_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pat_trie_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>For this setting, an ordered-vector tree
+ (<code class="classname">tree</code> with <code class="classname">Tag</code>
+ = <code class="classname">ov_tree_tag</code>), a red-black tree
+ (<code class="classname">tree</code> with <code class="classname">Tag</code>
+ = <code class="classname">rb_tree_tag</code>), and the native red-black
+ tree all share approximately the same performance.</p><p>A splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag</code> = <code class="classname">splay_tree_tag</code>) does
+ much better, since each (successful) find "bubbles" the
+ corresponding node to the root of the tree.</p></div></div><div class="section" title="split and join"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.split_join"></a>
+ <code class="function">split</code> and <code class="function">join</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.info"></a>
+ Description
+ </h6></div></div></div><p>This test a container, inserts into a number of values, splits
+ the container at the median, and joins the two containers. (If the
+ containers are one of this library's trees,
+ it splits and joins with the <code class="function">split</code> and
+ <code class="function">join</code> method; otherwise, it uses the <code class="function">erase</code> and
+ <code class="function">insert</code> methods.) It measures the time for splitting
+ and joining the containers as a function of the number of
+ values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_split_join_timing.cc</code>
+ </p><p>The test checks the performance difference of <code class="function">join</code>
+ as opposed to a sequence of <code class="function">insert</code> operations; by
+ implication, this test checks the most efficient way to erase a
+ sub-sequence from a tree-like-based container, since this can
+ always be performed by a small sequence of splits and joins.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_split_join.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_set
+ </td></tr><tr><td align="left">
+ <code class="classname">std::set</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ splay_tree_set
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">splay_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rb_tree_set
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ ov_tree_set
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">ov_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pat_trie_map
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pat_trie_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test, the native red-black trees must be split and
+ joined externally, through a sequence of <code class="function">erase</code> and
+ <code class="function">insert</code> operations. This is clearly
+ super-linear, and it is not that surprising that the cost is
+ high.</p><p>This library's tree-based containers use in this test the
+ <code class="function">split</code> and <code class="function">join</code> methods,
+ which have lower complexity: the <code class="function">join</code> method
+ of a splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag </code>
+ = <code class="classname">splay_tree_tag</code>) is quadratic in the
+ length of the longest root-leaf path, and linear in the total
+ number of elements; the <code class="function">join</code> method of a
+ red-black tree (<code class="classname">tree</code>
+ with <code class="classname">Tag </code>
+ = <code class="classname">rb_tree_tag</code>) or an ordered-vector tree
+ (<code class="classname">tree</code> with <code class="classname">Tag </code>
+ = <code class="classname">ov_tree_tag</code>) is linear in the number of
+ elements.</p><p>Asides from orders of growth, this library's trees access their
+ allocator very little in these operations, and some of them do not
+ access it at all. This leads to lower constants in their
+ complexity, and, for some containers, to exception-free splits and
+ joins (which can be determined
+ via <code class="classname">container_traits</code>).</p><p>It is important to note that <code class="function">split</code> and
+ <code class="function">join</code> are not esoteric methods - they are the most
+ efficient means of erasing a contiguous range of values from a
+ tree based container.</p></div></div><div class="section" title="Order-Statistics"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.order_statistics"></a>
+ Order-Statistics
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.info"></a>
+ Description
+ </h6></div></div></div><p>This test creates a container, inserts random integers into the
+ the container, and then checks the order-statistics of the
+ container's values. (If the container is one of this
+ library's trees, it does this with
+ the <code class="function">order_of_key</code> method of
+ <code class="classname">tree_order_statistics_node_update</code>
+ ; otherwise, it uses the <code class="function">find</code> method and
+ <code class="function">std::distance</code>.) It measures the average
+ time for such queries as a function of the number of values
+ inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_order_statistics_timing.cc</code>
+ </p><p>The test checks the performance difference of policies based
+ on node-invariant as opposed to a external functions.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_tree_order_statistics.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_set
+ </td></tr><tr><td align="left">
+ <code class="classname">std::set</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ splay_tree_ost_set
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">splay_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">tree_order_statistics_node_update</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rb_tree_ost_set
+ </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">tree_order_statistics_node_update</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test, the native red-black tree can support
+ order-statistics queries only externally, by performing a
+ <code class="classname">find</code> (alternatively, <code class="classname">lower_bound</code> or
+ <code class="classname">upper_bound</code> ) and then using <code class="classname">std::distance</code> .
+ This is clearly linear, and it is not that surprising that the
+ cost is high.</p><p>This library's tree-based containers use in this test the
+ <code class="classname">order_of_key</code> method of <code class="classname">tree_order_statistics_node_update</code>.
+ This method has only linear complexity in the length of the
+ root-node path. Unfortunately, the average path of a splay tree
+ (<code class="classname">tree</code>
+ with <code class="classname">Tag =</code> <code class="classname">splay_tree_tag</code> ) can
+ be higher than logarithmic; the longest path of a red-black
+ tree (<code class="classname">tree</code>
+ with <code class="classname">Tag =</code> <code class="classname">rb_tree_tag</code> ) is
+ logarithmic in the number of elements. Consequently, the splay
+ tree has worse performance than the red-black tree.</p></div></div></div><div class="section" title="Multimap"><div class="titlepage"><div><div><h4 class="title"><a id="performance.multimap"></a>Multimap</h4></div></div></div><p></p><div class="section" title="Text find with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_small"></a>
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform i.i.d.integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key (see Motivation::Associative
+ Containers::Alternative to Multiple Equivalent Keys). There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</p><p>The test measures the average find-time as a function of the
+ number of values inserted. For this library's containers, it
+ finds the secondary key from a container obtained from finding
+ a primary key. For the native multimaps, it searches a range
+ obtained using <code class="classname">std::equal_range</code> on a primary key.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_find_timing_small.cc</code>
+ </p><p>The test checks the find-time scalability of different
+ "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_small_s2p_tree.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="5" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_small_s2p_hash.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_hash_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="6" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+ Considerations.</p></div></div><div class="section" title="Text find with Large Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_large"></a>
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</p><p>The test measures the average find-time as a function of the
+ number of values inserted. For this library's containers, it
+ finds the secondary key from a container obtained from finding
+ a primary key. For the native multimaps, it searches a range
+ obtained using <code class="classname">std::equal_range</code> on a primary key.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_find_timing_large.cc</code>
+ </p><p>The test checks the find-time scalability of different
+ "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_large_s2p_tree.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="5" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_large_s2p_hash.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_hash_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="6" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+ Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_small"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</p><p>The test measures the average insert-time as a function of
+ the number of values inserted. For this library's containers,
+ it inserts a primary key into the primary associative
+ container, then a secondary key into the secondary associative
+ container. For the native multimaps, it obtains a range using
+ <code class="classname">std::equal_range</code>, and inserts a value only if it was
+ not contained already.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_timing_small.cc</code>
+ </p><p>The test checks the insert-time scalability of different
+ "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_insert_small_s2p_tree.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="5" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_small_s2p_hash.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_hash_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="6" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+ Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_large"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</p><p>The test measures the average insert-time as a function of
+ the number of values inserted. For this library's containers,
+ it inserts a primary key into the primary associative
+ container, then a secondary key into the secondary associative
+ container. For the native multimaps, it obtains a range using
+ <code class="classname">std::equal_range</code>, and inserts a value only if it was
+ not contained already.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_timing_large.cc</code>
+ </p><p>The test checks the insert-time scalability of different
+ "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_insert_large_s2p_tree.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="5" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_large_s2p_hash.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_hash_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="6" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+ Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_small"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 100 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges to about 20.</p><p>The test measures the memory use as a function of the number
+ of values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc</code>
+ </p><p>The test checks the memory scalability of different
+ "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_insert_mem_small_s2p_tree.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="5" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_large_s2p_hash.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_hash_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="6" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+ Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_large"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 100 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges to about 20.</p><p>The test measures the memory use as a function of the number
+ of values inserted.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc</code>
+ </p><p>The test checks the memory scalability of different
+ "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_insert_mem_large_s2p_tree.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="5" align="left" valign="top">
+ <code class="classname">tree</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rb_tree_tag</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div><p>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_multimap_text_find_large_s2p_hash.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ n_hash_mmap
+ </td></tr><tr><td align="left">
+ <code class="classname">std::tr1::unordered_multimap</code>
+ </td><td colspan="6" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_lu_mtf_set
+ </td></tr><tr><td rowspan="4" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left">
+ <code class="classname">Mapped</code>
+ </td><td align="left">
+ <code class="classname">list_update</code>
+ </td><td align="left">
+ <code class="classname">Update_Policy</code>
+ </td><td align="left">
+ <code class="classname">lu_move_to_front_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr bgcolor="#B0B0B0"><td colspan="7" align="left">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </td></tr><tr><td rowspan="6" align="left" valign="top">
+ <code class="classname">
+ cc_hash_table
+ </code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="4" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="3" align="left" valign="top">
+ <code class="classname">Mapped</code>
+ </td><td rowspan="3" align="left" valign="top">
+ <code class="classname">cc_hash_table</code>
+ </td><td align="left">
+ <code class="classname">Comb_Hash_Fn</code>
+ </td><td align="left">
+ <code class="classname">direct_mask_range_hashing</code>
+ </td><td colspan="2" align="left"> </td></tr><tr><td rowspan="2" align="left" valign="top">
+ <code class="classname">Resize_Policy</code>
+ </td><td rowspan="2" align="left" valign="top">
+ <code class="classname">hash_standard_resize_policy</code>
+ </td><td align="left">
+ <code class="classname">Size_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_exponential_size_policy</code>
+ </td></tr><tr><td align="left" valign="top">
+ <code class="classname">Trigger_Policy</code>
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+ Considerations.</p></div></div></div><div class="section" title="Priority Queue"><div class="titlepage"><div><div><h4 class="title"><a id="performance.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section" title="Text push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push"></a>
+ Text <code class="function">push</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container using <code class="function">push</code>. It measures the average time
+ for <code class="function">push</code> as a function of the number of values
+ pushed.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_push_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </p><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_text_push.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the binary-heap
+ based native priority queues and this library's pairing-heap
+ priority_queue data structures.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_pairing_priority_queue_text_push.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.observations"></a>
+ Observations
+ </h6></div></div></div><p>Pairing heaps (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">pairing_heap_tag</code>)
+ are the most suited for sequences of <code class="function">push</code> and
+ <code class="function">pop</code> operations of non-primitive types (e.g.
+ <code class="classname">std::string</code>s). (See Priority Queue
+ Text <code class="function">push</code> and <code class="function">pop</code> Timing Test.) They are
+ less constrained than binomial heaps, e.g., and since
+ they are node-based, they outperform binary heaps. (See
+ Priority
+ Queue Random Integer <code class="function">push</code> Timing Test for the case
+ of primitive types.)</p><p>The standard's priority queues do not seem to perform well in
+ this case: the <code class="classname">std::vector</code> implementation needs to
+ perform a logarithmic sequence of string operations for each
+ operation, and the deque implementation is possibly hampered by
+ its need to manipulate a relatively-complex type (deques
+ support a O(1) <code class="function">push_front</code>, even though it is
+ not used by <code class="classname">std::priority_queue</code>.)</p></div></div><div class="section" title="Text push and pop"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push_pop"></a>
+ Text <code class="function">push</code> and <code class="function">pop</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container using <code class="classname">push</code> , then removes them using
+ <code class="classname">pop</code> . It measures the average time for <code class="classname">push</code>
+ as a function of the number of values.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </p><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_text_push_pop.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the native priority
+ queues and this library's pairing-heap priority_queue data
+ structures.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_pairing_priority_queue_text_push_pop.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code> adapting <code class="classname">std::vector</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>These results are very similar to Priority Queue Text
+ <code class="function">push</code> Timing Test. As stated there, pairing heaps
+ (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code>
+ = <code class="classname">pairing_heap_tag</code>) are most suited
+ for <code class="function">push</code> and <code class="function">pop</code>
+ sequences of non-primitive types such as strings. Observing these
+ two tests, one can note that a pairing heap outperforms the others
+ in terms of <code class="function">push</code> operations, but equals
+ binary heaps (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code>
+ = <code class="classname">binary_heap_tag</code>) if the number
+ of <code class="function">push</code> and <code class="function">pop</code>
+ operations is equal. As the number of <code class="function">pop</code>
+ operations is at most equal to the number
+ of <code class="function">push</code> operations, pairing heaps are better
+ in this case. See Priority Queue Random
+ Integer <code class="function">push</code> and <code class="function">pop</code>
+ Timing Test for a case which is different.</p></div></div><div class="section" title="Integer push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push"></a>
+ Integer <code class="function">push</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with integer keys
+ into a container using <code class="function">push</code>. It
+ measures the average time for <code class="function">push</code> as a
+ function of the number of values.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_random_int_push_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </p><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_int_push.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the binary-heap
+ based native priority queues and this library's
+ priority_queue data structures.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_binary_priority_queue_int_push.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code> adapting <code class="classname">std::vector</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.observations"></a>
+ Observations
+ </h6></div></div></div><p>Binary heaps are the most suited for sequences of
+ <code class="function">push</code> and <code class="function">pop</code> operations of primitive types
+ (e.g. <span class="type">int</span>s). They are less constrained
+ than any other type, and since it is very efficient to store
+ such types in arrays, they outperform even pairing heaps. (See
+ Priority
+ Queue Text <code class="function">push</code> Timing Test for the case of
+ non-primitive types.)</p></div></div><div class="section" title="Integer push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push_pop"></a>
+ Integer <code class="function">push</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with integer keys
+ into a container using <code class="function">push</code> , then removes them
+ using <code class="function">pop</code> . It measures the average time for
+ <code class="function">push</code> and <code class="function">pop</code> as a function
+ of the number of values.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_int_push_pop.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>Binary heaps are the most suited for sequences of
+ <code class="function">push</code> and <code class="function">pop</code> operations of primitive types
+ (e.g. <span class="type">int</span>s). This is explained in
+ Priority
+ Queue Random Int <code class="function">push</code> Timing Test. (See Priority Queue
+ Text <code class="function">push</code> Timing Test for the case of primitive
+ types.)</p><p>At first glance it seems that the standard's vector-based
+ priority queue is approximately on par with this
+ library's corresponding priority queue. There are two
+ differences however:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>The standard's priority queue does not downsize the underlying
+ vector (or deque) as the priority queue becomes smaller
+ (see Priority Queue
+ Text <code class="function">pop</code> Memory Use Test). It is therefore
+ gaining some speed at the expense of space.</p></li><li class="listitem"><p>From Priority Queue Random
+ Integer <code class="function">push</code> and <code class="function">pop</code>
+ Timing Test, it seems that the standard's priority queue is
+ slower in terms of <code class="function">push</code> operations. Since
+ the number of
+ <code class="function">pop</code> operations is at most that of <code class="function">push</code>
+ operations, the test here is the "best" for the standard's
+ priority queue.</p></li></ol></div></div></div><div class="section" title="Text pop Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_pop"></a>
+ Text <code class="function">pop</code> Memory Use
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container, then pops them until only one is left in the
+ container. It measures the memory use as a function of the
+ number of values pushed to the container.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_text_pop_mem.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>The priority queue implementations (excluding the standard's) use
+ memory proportionally to the number of values they hold:
+ node-based implementations (e.g., a pairing heap) do so
+ naturally; this library's binary heap de-allocates memory when
+ a certain lower threshold is exceeded.</p><p>Note from Priority Queue Text <code class="function">push</code>
+ and <code class="function">pop</code> Timing Test and Priority Queue
+ Random Integer <code class="function">push</code>
+ and <code class="function">pop</code> Timing Test that this does not
+ impede performance compared to the standard's priority
+ queues.</p><p>See Hash-Based Erase
+ Memory Use Test for a similar phenomenon regarding priority
+ queues.</p></div></div><div class="section" title="Text join"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_join"></a>
+ Text <code class="function">join</code>
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ two containers, then merges the containers. It uses
+ <code class="function">join</code> for this library's priority queues; for
+ the standard's priority queues, it successively pops values from
+ one container and pushes them into the other. The test measures
+ the average time as a function of the number of values.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_join_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_text_join.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test the node-based heaps perform <code class="function">join</code> in
+ either logarithmic or constant time. The binary heap requires
+ linear time, since the well-known heapify algorithm [clrs2001] is linear.</p><p>It would be possible to apply the heapify algorithm to the
+ standard containers, if they would support iteration (which they
+ don't). Barring iterators, it is still somehow possible to perform
+ linear-time merge on a <code class="classname">std::vector</code>-based
+ standard priority queue, using <code class="function">top()</code>
+ and <code class="function">size()</code> (since they are enough to expose
+ the underlying array), but this is impossible for
+ a <code class="classname">std::deque</code>-based standard priority queue.
+ Without heapify, the cost is super-linear.</p></div></div><div class="section" title="Text modify Up"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_up"></a>
+ Text <code class="function">modify</code> Up
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ into a container then modifies each one "up" (i.e., it
+ makes it larger). It uses <code class="function">modify</code> for this library's
+ priority queues; for the standard's priority queues, it pops values
+ from a container until it reaches the value that should be
+ modified, then pushes values back in. It measures the average
+ time for <code class="function">modify</code> as a function of the number of
+ values.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures for graph algorithms settings. Note that making an
+ arbitrary value larger (in the sense of the priority queue's
+ comparison functor) corresponds to decrease-key in standard graph
+ algorithms [clrs2001].
+ </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </p><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_text_modify_up.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the
+ native priority queues and this library's pairing and thin heap
+ priority_queue data structures.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_pairing_priority_queue_text_modify_up_thin.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.observations"></a>
+ Observations
+ </h6></div></div></div><p>As noted above, increasing an arbitrary value (in the sense of
+ the priority queue's comparison functor) is very common in
+ graph-related algorithms. In this case, a thin heap
+ (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">thin_heap_tag</code>)
+ outperforms a pairing heap (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">pairing_heap_tag</code>).
+ Conversely, Priority Queue Text
+ <code class="function">push</code> Timing Test, Priority Queue
+ Text <code class="function">push</code> and <code class="function">pop</code> Timing Test, Priority
+ Queue Random Integer <code class="function">push</code> Timing Test, and
+ Priority
+ Queue Random Integer <code class="function">push</code> and <code class="function">pop</code> Timing
+ Test show that the situation is reversed for other
+ operations. It is not clear when to prefer one of these two
+ different types.</p><p>In this test this library's binary heaps
+ effectively perform modify in linear time. As explained in
+ Priority Queue Design::Traits, given a valid point-type iterator,
+ a binary heap can perform
+ <code class="function">modify</code> logarithmically. The problem is that binary
+ heaps invalidate their find iterators with each modifying
+ operation, and so the only way to obtain a valid point-type
+ iterator is to iterate using a range-type iterator until
+ finding the appropriate value, then use the range-type iterator
+ for the <code class="function">modify</code> operation.</p><p>The explanation for the standard's priority queues' performance
+ is similar to that in Priority Queue Text
+ <code class="function">join</code> Timing Test.</p></div></div><div class="section" title="Text modify Down"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_down"></a>
+ Text <code class="function">modify</code> Down
+ </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ into a container then modifies each one "down" (i.e., it
+ makes it smaller). It uses <code class="function">modify</code> for this library's
+ priority queues; for the standard's priority queues, it pops values
+ from a container until it reaches the value that should be
+ modified, then pushes values back in. It measures the average
+ time for <code class="function">modify</code> as a function of the number of
+ values.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc</code>
+ </p><p>The main purpose of this test is to contrast Priority Queue
+ Text <code class="classname">modify</code> Up Timing Test.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </p><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_text_modify_down.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_vector
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::vector</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ n_pq_deque
+ </td></tr><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Sequence</code>
+ </td><td align="left">
+ <code class="classname">std::deque</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binary_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ rc_binomial_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">rc_binomial_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div><p>The graphic below shows the results for the
+ native priority queues and this library's pairing and thin heap
+ priority_queue data structures.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_pairing_priority_queue_text_modify_down_thin.png" align="middle" /></div></div><p>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left"><span class="emphasis"><em>Name/Instantiating Type</em></span></th><th align="left"><span class="emphasis"><em>Parameter</em></span></th><th align="left"><span class="emphasis"><em>Details</em></span></th></tr></thead><tbody><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ thin_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">thin_heap_tag</code>
+ </td></tr><tr bgcolor="#B0B0B0"><td colspan="3" align="left">
+ pairing_heap
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ </td><td align="left">
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+ </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.observations"></a>
+ Observations
+ </h6></div></div></div><p>Most points in these results are similar to Priority Queue
+ Text <code class="function">modify</code> Up Timing Test.</p><p>It is interesting to note, however, that as opposed to that
+ test, a thin heap (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">thin_heap_tag</code>) is
+ outperformed by a pairing heap (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">pairing_heap_tag</code>).
+ In this case, both heaps essentially perform an <code class="function">erase</code>
+ operation followed by a <code class="function">push</code> operation. As the other
+ tests show, a pairing heap is usually far more efficient than a
+ thin heap, so this is not surprising.</p><p>Most algorithms that involve priority queues increase values
+ (in the sense of the priority queue's comparison functor), and
+ so Priority Queue
+ Text <code class="classname">modify</code> Up Timing Test - is more interesting
+ than this test.</p></div></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.test.performance.observations"></a>Observations</h4></div></div></div><div class="section" title="Associative"><div class="titlepage"><div><div><h5 class="title"><a id="observations.associative"></a>Associative</h5></div></div></div><div class="section" title="Underlying Data-Structure Families"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.underlying"></a>
+ Underlying Data-Structure Families
+ </h6></div></div></div><p>In general, hash-based containers have better timing performance
+ than containers based on different underlying-data structures. The
+ main reason to choose a tree-based or trie-based container is if a
+ byproduct of the tree-like structure is required: either
+ order-preservation, or the ability to utilize node invariants. If
+ memory-use is the major factor, an ordered-vector tree gives
+ optimal results (albeit with high modificiation costs), and a
+ list-based container gives reasonable results.</p></div><div class="section" title="Hash-Based Containers"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash"></a>
+ Hash-Based Containers
+ </h6></div></div></div><p>Hash-based containers are typically either collision
+ chaining or probing. Collision-chaining
+ containers are more flexible internally, and so offer better
+ timing performance. Probing containers, if used for simple
+ value-types, manage memory more efficiently (they perform far
+ fewer allocation-related calls). In general, therefore, a
+ collision-chaining table should be used. A probing container,
+ conversely, might be used efficiently for operations such as
+ eliminating duplicates in a sequence, or counting the number of
+ occurrences within a sequence. Probing containers might be more
+ useful also in multithreaded applications where each thread
+ manipulates a hash-based container: in the standard, allocators have
+ class-wise semantics (see [meyers96more] - Item 10); a
+ probing container might incur less contention in this case.</p></div><div class="section" title="Hash Policies"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash_policies"></a>
+ Hash Policies
+ </h6></div></div></div><p>In hash-based containers, the range-hashing scheme seems to
+ affect performance more than other considerations. In most
+ settings, a mask-based scheme works well (or can be made to
+ work well). If the key-distribution can be estimated a-priori,
+ a simple hash function can produce nearly uniform hash-value
+ distribution. In many other cases (e.g., text hashing,
+ floating-point hashing), the hash function is powerful enough
+ to generate hash values with good uniformity properties
+ [knuth98sorting];
+ a modulo-based scheme, taking into account all bits of the hash
+ value, appears to overlap the hash function in its effort.</p><p>The range-hashing scheme determines many of the other
+ policies. A mask-based scheme works
+ well with an exponential-size policy; for
+ probing-based containers, it goes well with a linear-probe
+ function.</p><p>An orthogonal consideration is the trigger policy. This
+ presents difficult tradeoffs. E.g., different load
+ factors in a load-check trigger policy yield a
+ space/amortized-cost tradeoff.</p></div><div class="section" title="Branch-Based Containers"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.branch"></a>
+ Branch-Based Containers
+ </h6></div></div></div><p>In general, there are several families of tree-based
+ underlying data structures: balanced node-based trees
+ (e.g., red-black or AVL trees), high-probability
+ balanced node-based trees (e.g., random treaps or
+ skip-lists), competitive node-based trees (e.g., splay
+ trees), vector-based "trees", and tries. (Additionally, there
+ are disk-residing or network-residing trees, such as B-Trees
+ and their numerous variants. An interface for this would have
+ to deal with the execution model and ACID guarantees; this is
+ out of the scope of this library.) Following are some
+ observations on their application to different settings.</p><p>Of the balanced node-based trees, this library includes a
+ red-black tree, as does standard (in
+ practice). This type of tree is the "workhorse" of tree-based
+ containers: it offers both reasonable modification and
+ reasonable lookup time. Unfortunately, this data structure
+ stores a huge amount of metadata. Each node must contain,
+ besides a value, three pointers and a boolean. This type might
+ be avoided if space is at a premium [austern00noset].</p><p>High-probability balanced node-based trees suffer the
+ drawbacks of deterministic balanced trees. Although they are
+ fascinating data structures, preliminary tests with them showed
+ their performance was worse than red-black trees. The library
+ does not contain any such trees, therefore.</p><p>Competitive node-based trees have two drawbacks. They are
+ usually somewhat unbalanced, and they perform a large number of
+ comparisons. Balanced trees perform one comparison per each
+ node they encounter on a search path; a splay tree performs two
+ comparisons. If the keys are complex objects, e.g.,
+ <code class="classname">std::string</code>, this can increase the running time.
+ Conversely, such trees do well when there is much locality of
+ reference. It is difficult to determine in which case to prefer
+ such trees over balanced trees. This library includes a splay
+ tree.</p><p>Ordered-vector trees use very little space
+ [austern00noset].
+ They do not have any other advantages (at least in this
+ implementation).</p><p>Large-fan-out PATRICIA tries have excellent lookup
+ performance, but they do so through maintaining, for each node,
+ a miniature "hash-table". Their space efficiency is low, and
+ their modification performance is bad. These tries might be
+ used for semi-static settings, where order preservation is
+ important. Alternatively, red-black trees cross-referenced with
+ hash tables can be used. [okasaki98mereable]
+ discusses small-fan-out PATRICIA tries for integers, but the
+ cited results seem to indicate that the amortized cost of
+ maintaining such trees is higher than that of balanced trees.
+ Moderate-fan-out trees might be useful for sequences where each
+ element has a limited number of choices, e.g., DNA
+ strings.</p></div><div class="section" title="Mapping-Semantics"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.mapping_semantics"></a>
+ Mapping-Semantics
+ </h6></div></div></div><p>Different mapping semantics were discussed in the introduction and design sections.Here
+ the focus will be on the case where a keys can be composed into
+ primary keys and secondary keys. (In the case where some keys
+ are completely identical, it is trivial that one should use an
+ associative container mapping values to size types.) In this
+ case there are (at least) five possibilities:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Use an associative container that allows equivalent-key
+ values (such as <code class="classname">std::multimap</code>)</p></li><li class="listitem"><p>Use a unique-key value associative container that maps
+ each primary key to some complex associative container of
+ secondary keys, say a tree-based or hash-based container.
+ </p></li><li class="listitem"><p>Use a unique-key value associative container that maps
+ each primary key to some simple associative container of
+ secondary keys, say a list-based container.</p></li><li class="listitem"><p>Use a unique-key value associative container that maps
+ each primary key to some non-associative container
+ (e.g., <code class="classname">std::vector</code>)</p></li><li class="listitem"><p>Use a unique-key value associative container that takes
+ into account both primary and secondary keys.</p></li></ol></div><p>Stated simply: there is a simple answer for this. (Excluding
+ option 1, which should be avoided in all cases).</p><p>If the expected ratio of secondary keys to primary keys is
+ small, then 3 and 4 seem reasonable. Both types of secondary
+ containers are relatively lightweight (in terms of memory use
+ and construction time), and so creating an entire container
+ object for each primary key is not too expensive. Option 4
+ might be preferable to option 3 if changing the secondary key
+ of some primary key is frequent - one cannot modify an
+ associative container's key, and the only possibility,
+ therefore, is erasing the secondary key and inserting another
+ one instead; a non-associative container, conversely, can
+ support in-place modification. The actual cost of erasing a
+ secondary key and inserting another one depends also on the
+ allocator used for secondary associative-containers (The tests
+ above used the standard allocator, but in practice one might
+ choose to use, e.g., [boost_pool]). Option 2 is
+ definitely an overkill in this case. Option 1 loses out either
+ immediately (when there is one secondary key per primary key)
+ or almost immediately after that. Option 5 has the same
+ drawbacks as option 2, but it has the additional drawback that
+ finding all values whose primary key is equivalent to some key,
+ might be linear in the total number of values stored (for
+ example, if using a hash-based container).</p><p>If the expected ratio of secondary keys to primary keys is
+ large, then the answer is more complicated. It depends on the
+ distribution of secondary keys to primary keys, the
+ distribution of accesses according to primary keys, and the
+ types of operations most frequent.</p><p>To be more precise, assume there are m primary keys,
+ primary key i is mapped to n<sub>i</sub>
+ secondary keys, and each primary key is mapped, on average, to
+ n secondary keys (i.e.,
+ E(n<sub>i</sub>) = n).</p><p>Suppose one wants to find a specific pair of primary and
+ secondary keys. Using 1 with a tree based container
+ (<code class="classname">std::multimap</code>), the expected cost is
+ E(Θ(log(m) + n<sub>i</sub>)) = Θ(log(m) +
+ n); using 1 with a hash-based container
+ (<code class="classname">std::tr1::unordered_multimap</code>), the expected cost is
+ Θ(n). Using 2 with a primary hash-based container
+ and secondary hash-based containers, the expected cost is
+ O(1); using 2 with a primary tree-based container and
+ secondary tree-based containers, the expected cost is (using
+ the Jensen inequality [motwani95random])
+ E(O(log(m) + log(n<sub>i</sub>)) = O(log(m)) +
+ E(O(log(n<sub>i</sub>)) = O(log(m)) + O(log(n)),
+ assuming that primary keys are accessed equiprobably. 3 and 4
+ are similar to 1, but with lower constants. Using 5 with a
+ hash-based container, the expected cost is O(1); using 5
+ with a tree based container, the cost is
+ E(Θ(log(mn))) = Θ(log(m) +
+ log(n)).</p><p>Suppose one needs the values whose primary key matches some
+ given key. Using 1 with a hash-based container, the expected
+ cost is Θ(n), but the values will not be ordered
+ by secondary keys (which may or may not be required); using 1
+ with a tree-based container, the expected cost is
+ Θ(log(m) + n), but with high constants; again the
+ values will not be ordered by secondary keys. 2, 3, and 4 are
+ similar to 1, but typically with lower constants (and,
+ additionally, if one uses a tree-based container for secondary
+ keys, they will be ordered). Using 5 with a hash-based
+ container, the cost is Θ(mn).</p><p>Suppose one wants to assign to a primary key all secondary
+ keys assigned to a different primary key. Using 1 with a
+ hash-based container, the expected cost is Θ(n),
+ but with very high constants; using 1 with a tree-based
+ container, the cost is Θ(nlog(mn)). Using 2, 3,
+ and 4, the expected cost is Θ(n), but typically
+ with far lower costs than 1. 5 is similar to 1.</p></div></div><div class="section" title="Priority_Queue"><div class="titlepage"><div><div><h5 class="title"><a id="observations.priority_queue"></a>Priority_Queue</h5></div></div></div><div class="section" title="Complexity"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.complexity"></a>Complexity</h6></div></div></div><p>The following table shows the complexities of the different
+ underlying data structures in terms of orders of growth. It is
+ interesting to note that this table implies something about the
+ constants of the operations as well (see Amortized <code class="function">push</code>
+ and <code class="function">pop</code> operations).</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /></colgroup><thead><tr><th align="left"> </th><th align="left"><span class="emphasis"><em><code class="function">push</code></em></span></th><th align="left"><span class="emphasis"><em><code class="function">pop</code></em></span></th><th align="left"><span class="emphasis"><em><code class="function">modify</code></em></span></th><th align="left"><span class="emphasis"><em><code class="function">erase</code></em></span></th><th align="left"><span class="emphasis"><em><code class="function">join</code></em></span></th></tr></thead><tbody><tr><td align="left">
+ <code class="classname">std::priority_queue</code>
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(log(n)) Worst
+ </td><td align="left">
+ Θ(n log(n)) Worst
+ <sub>[std note 1]</sub>
+ </td><td align="left">
+ Θ(n log(n))
+ <sub>[std note 2]</sub>
+ </td><td align="left">
+ Θ(n log(n))
+ <sub>[std note 1]</sub>
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ &lt;<code class="classname">Tag</code> =
+ <code class="classname">pairing_heap_tag</code>&gt;
+ </td><td align="left">
+ O(1)
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ O(1)
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ &lt;<code class="classname">Tag</code> =
+ <code class="classname">binary_heap_tag</code>&gt;
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(n)
+ </td><td align="left">
+ Θ(n)
+ </td><td align="left">
+ Θ(n)
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ &lt;<code class="classname">Tag</code> =
+ <code class="classname">binomial_heap_tag</code>&gt;
+ </td><td align="left">
+ Θ(log(n)) worst
+ O(1) amortized
+ </td><td align="left">
+ Θ(log(n))
+ </td><td align="left">
+ Θ(log(n))
+ </td><td align="left">
+ Θ(log(n))
+ </td><td align="left">
+ Θ(log(n))
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>
+ &lt;<code class="classname">Tag</code> =
+ <code class="classname">rc_binomial_heap_tag</code>&gt;
+ </td><td align="left">
+ O(1)
+ </td><td align="left">
+ Θ(log(n))
+ </td><td align="left">
+ Θ(log(n))
+ </td><td align="left">
+ Θ(log(n))
+ </td><td align="left">
+ Θ(log(n))
+ </td></tr><tr><td align="left">
+ <code class="classname">priority_queue</code>&lt;<code class="classname">Tag</code> =
+ <code class="classname">thin_heap_tag</code>&gt;
+ </td><td align="left">
+ O(1)
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(log(n)) worst
+ O(1) amortized,
+ or Θ(log(n)) amortized
+ <sub>[thin_heap_note]</sub>
+ </td><td align="left">
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </td><td align="left">
+ Θ(n)
+ </td></tr></tbody></table></div><p>[std note 1] This
+ is not a property of the algorithm, but rather due to the fact
+ that the standard's priority queue implementation does not support
+ iterators (and consequently the ability to access a specific
+ value inside it). If the priority queue is adapting an
+ <code class="classname">std::vector</code>, then it is still possible to reduce this
+ to Θ(n) by adapting over the standard's adapter and
+ using the fact that <code class="function">top</code> returns a reference to the
+ first value; if, however, it is adapting an
+ <code class="classname">std::deque</code>, then this is impossible.</p><p>[std note 2] As
+ with [std note 1], this is not a
+ property of the algorithm, but rather the standard's implementation.
+ Again, if the priority queue is adapting an
+ <code class="classname">std::vector</code> then it is possible to reduce this to
+ Θ(n), but with a very high constant (one must call
+ <code class="function">std::make_heap</code> which is an expensive linear
+ operation); if the priority queue is adapting an
+ <code class="classname">std::deque</code>, then this is impossible.</p><p>[thin_heap_note] A thin heap has
+ Θ(log(n)) worst case <code class="function">modify</code> time
+ always, but the amortized time depends on the nature of the
+ operation: I) if the operation increases the key (in the sense
+ of the priority queue's comparison functor), then the amortized
+ time is O(1), but if II) it decreases it, then the
+ amortized time is the same as the worst case time. Note that
+ for most algorithms, I) is important and II) is not.</p></div><div class="section" title="Amortized push and pop operations"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.amortized_ops"></a>
+ Amortized <code class="function">push</code>
+ and <code class="function">pop</code> operations
+ </h6></div></div></div><p>In many cases, a priority queue is needed primarily for
+ sequences of <code class="function">push</code> and <code class="function">pop</code> operations. All of
+ the underlying data structures have the same amortized
+ logarithmic complexity, but they differ in terms of
+ constants.</p><p>The table above shows that the different data structures are
+ "constrained" in some respects. In general, if a data structure
+ has lower worst-case complexity than another, then it will
+ perform slower in the amortized sense. Thus, for example a
+ redundant-counter binomial heap (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">rc_binomial_heap_tag</code>)
+ has lower worst-case <code class="function">push</code> performance than a binomial
+ heap (<code class="classname">priority_queue</code>
+ with <code class="classname">Tag</code> = <code class="classname">binomial_heap_tag</code>),
+ and so its amortized <code class="function">push</code> performance is slower in
+ terms of constants.</p><p>As the table shows, the "least constrained" underlying
+ data structures are binary heaps and pairing heaps.
+ Consequently, it is not surprising that they perform best in
+ terms of amortized constants.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Pairing heaps seem to perform best for non-primitive
+ types (e.g., <code class="classname">std::string</code>s), as shown by
+ Priority
+ Queue Text <code class="function">push</code> Timing Test and Priority
+ Queue Text <code class="function">push</code> and <code class="function">pop</code> Timing
+ Test</p></li><li class="listitem"><p>binary heaps seem to perform best for primitive types
+ (e.g., <span class="type">int</span>s), as shown by Priority
+ Queue Random Integer <code class="function">push</code> Timing Test and
+ Priority
+ Queue Random Integer <code class="function">push</code> and <code class="function">pop</code> Timing
+ Test.</p></li></ol></div></div><div class="section" title="Graph Algorithms"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.graphs"></a>
+ Graph Algorithms
+ </h6></div></div></div><p>In some graph algorithms, a decrease-key operation is
+ required [clrs2001];
+ this operation is identical to <code class="function">modify</code> if a value is
+ increased (in the sense of the priority queue's comparison
+ functor). The table above and Priority Queue
+ Text <code class="function">modify</code> Up Timing Test show that a thin heap
+ (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">thin_heap_tag</code>)
+ outperforms a pairing heap (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">Tag</code> = <code class="classname">pairing_heap_tag</code>),
+ but the rest of the tests show otherwise.</p><p>This makes it difficult to decide which implementation to use in
+ this case. Dijkstra's shortest-path algorithm, for example, requires
+ Θ(n) <code class="function">push</code> and <code class="function">pop</code> operations
+ (in the number of vertices), but O(n<sup>2</sup>)
+ <code class="function">modify</code> operations, which can be in practice Θ(n)
+ as well. It is difficult to find an a-priori characterization of
+ graphs in which the actual number of <code class="function">modify</code>
+ operations will dwarf the number of <code class="function">push</code> and
+ <code class="function">pop</code> operations.</p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Acknowledgments</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures.html b/libstdc++-v3/doc/html/manual/policy_data_structures.html
new file mode 100644
index 0000000000..c50dc391ca
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/policy_data_structures.html
@@ -0,0 +1,1308 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch21s02.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 22. Policy-Based Data Structures"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+ Querying Container Attributes
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.point_range_iteration">
+ Point and Range Iteration
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.basic">Intermediate Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.query">Querying with <code class="classname">container_traits</code> </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container">By Container Method</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.hash">Hash-Based</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.branch">Branch-Based</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.examples.container.priority_queue">Priority Queues</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts">Concepts</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.null_type">Null Policy Classes</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.associative_semantics">Map and Set Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.associative_semantics.set_vs_map">
+ Distinguishing Between Maps and Sets
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.associative_semantics.multi">Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.iterator_semantics">Iterator Semantics</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.iterator_semantics.point_and_range">Point and Range Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.iterator_semantics.both">Distinguishing Point and Range Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.invalidation">Invalidation Guarantees</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.concepts.genericity">Genericity</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#concepts.genericity.tag">Tag</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#concepts.genericity.traits">Traits</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container">By Container</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.hash">hash</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.hash.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.hash.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.tree">tree</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.tree.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.tree.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.trie">Trie</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.trie.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.trie.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.list">List</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.list.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.list.details">Details</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures_design.html#pbds.design.container.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_design.html#container.priority_queue.interface">Interface</a></span></dt><dt><span class="section"><a href="policy_data_structures_design.html#container.priority_queue.details">Details</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.regression">Regression</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance">Performance</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash">Hash-Based</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_find">
+ Integer <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_subscript_find">
+ Integer Subscript <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.int_subscript_insert">
+ Integer Subscript <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.zlob_int_find">
+ Integer <code class="function">find</code> with Skewed-Distribution
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.hash.erase_mem">
+ Erase Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch">Branch-Based</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_insert">
+ Text <code class="function">insert</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_find">
+ Text <code class="function">find</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.text_lor_find">
+ Text <code class="function">find</code> with Locality-of-Reference
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.split_join">
+ <code class="function">split</code> and <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.branch.order_statistics">
+ Order-Statistics
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap">Multimap</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_find_small">
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_find_large">
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_mem_small">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.multimap.text_insert_mem_large">
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue">Priority Queue</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_push">
+ Text <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_push_pop">
+ Text <code class="function">push</code> and <code class="function">pop</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.int_push">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.int_push_pop">
+ Integer <code class="function">push</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_pop">
+ Text <code class="function">pop</code> Memory Use
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_join">
+ Text <code class="function">join</code>
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_up">
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.intro"></a>Intro</h2></div></div></div><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 <code class="literal">std</code> and
+ <code class="literal">std::tr1</code> (except for some points where it differs
+ by design).
+ </p><p>
+ </p><div class="section" title="Performance Issues"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.issues"></a>Performance Issues</h3></div></div></div><p>
+ </p><p>
+ An attempt is made to categorize the wide variety of possible
+ container designs in terms of performance-impacting factors. These
+ performance factors are translated into design policies and
+ incorporated into container design.
+ </p><p>
+ There is tension between unravelling factors into a coherent set of
+ policies. Every attempt is made to make a minimal set of
+ factors. However, in many cases multiple factors make for long
+ template names. Every attempt is made to alias and use typedefs in
+ the source files, but the generated names for external symbols can
+ be large for binary files or debuggers.
+ </p><p>
+ In many cases, the longer names allow capabilities and behaviours
+ controlled by macros to also be unamibiguously emitted as distinct
+ generated names.
+ </p><p>
+ Specific issues found while unraveling performance factors in the
+ design of associative containers and priority queues follow.
+ </p><div class="section" title="Associative"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.associative"></a>Associative</h4></div></div></div><p>
+ Associative containers depend on their composite policies to a very
+ large extent. Implicitly hard-wiring policies can hamper their
+ performance and limit their functionality. An efficient hash-based
+ container, for example, requires policies for testing key
+ equivalence, hashing keys, translating hash values into positions
+ within the hash table, and determining when and how to resize the
+ table internally. A tree-based container can efficiently support
+ order statistics, i.e. the ability to query what is the order of
+ each key within the sequence of keys in the container, but only if
+ the container is supplied with a policy to internally update
+ meta-data. There are many other such examples.
+ </p><p>
+ 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.
+ </p><pre class="programlisting">
+ template&lt;typename Cntnr&gt;
+ void
+ some_op_sequence(Cntnr&amp; r_cnt)
+ {
+ ...
+ }
+ </pre><p>
+ Given this, then what can one assume about the instantiating
+ container? The answer varies according to its underlying data
+ structure. If the underlying data structure of
+ <code class="literal">Cntnr</code> 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 <code class="literal">Cntnr</code> is based
+ on a collision-chaining hash table, then modifying
+ r_<code class="literal">Cntnr</code> will not invalidate its iterators' order;
+ if the underlying data structure is a probing hash table, then this
+ is not the case. If the underlying data structure is based on a tree
+ or trie, then a reference to the container can efficiently be split;
+ otherwise, it cannot, in general. If the underlying data structure
+ is a red-black tree, then splitting a reference to the container is
+ exception-free; if it is an ordered-vector tree, exceptions can be
+ thrown.
+ </p></div><div class="section" title="Priority Que"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.priority_queue"></a>Priority Que</h4></div></div></div><p>
+ Priority queues are useful when one needs to efficiently access a
+ minimum (or maximum) value as the set of values changes.
+ </p><p>
+ 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>
+ Priority queues, like hash-based containers, store values in an
+ order that is meaningless and undefined externally. For example, a
+ <code class="code">push</code> operation can internally reorganize the
+ values. Because of this characteristic, describing a priority
+ queues' iterator is difficult: on one hand, the values to which
+ iterators point can remain valid, but on the other, the logical
+ order of iterators can change unpredictably.
+ </p><p>
+ Roughly speaking, any element that is both inserted to a priority
+ queue (e.g. through <code class="code">push</code>) and removed
+ from it (e.g., through <code class="code">pop</code>), incurs a
+ logarithmic overhead (in the amortized sense). Different underlying
+ data structures place the actual cost differently: some are
+ optimized for amortized complexity, whereas others guarantee that
+ specific operations only have a constant cost. One underlying data
+ structure might be chosen if modifying a value is frequent
+ (Dijkstra's shortest-path algorithm), whereas a different one might
+ be chosen otherwise. Unfortunately, an array-based binary heap - an
+ underlying data structure that optimizes (in the amortized sense)
+ <code class="code">push</code> and <code class="code">pop</code> operations, differs from the
+ others in terms of its invalidation guarantees. Other design
+ decisions also impact the cost and placement of the overhead, at the
+ expense of more difference in the the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+ </p></div></div><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.motivation"></a>Goals</h3></div></div></div><p>
+ Many fine associative-container libraries were already written,
+ most notably, the C++ standard's associative containers. Why
+ then write another library? This section shows some possible
+ advantages of this library, when considering the challenges in
+ the introduction. Many of these points stem from the fact that
+ the ISO C++ process introduced associative-containers in a
+ two-step process (first standardizing tree-based containers,
+ only then adding hash-based containers, which are fundamentally
+ different), did not standardize priority queues as containers,
+ and (in our opinion) overloads the iterator concept.
+ </p><div class="section" title="Associative"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.associative"></a>Associative</h4></div></div></div><p>
+ </p><div class="section" title="Policy Choices"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.policy"></a>Policy Choices</h5></div></div></div><p>
+ Associative containers require a relatively large number of
+ policies to function efficiently in various settings. In some
+ cases this is needed for making their common operations more
+ efficient, and in other cases this allows them to support a
+ larger set of operations
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Hash-based containers, for example, support look-up and
+ insertion methods (<code class="function">find</code> and
+ <code class="function">insert</code>). In order to locate elements
+ quickly, they are supplied a hash functor, which instruct
+ how to transform a key object into some size type; a hash
+ functor might transform <code class="constant">"hello"</code>
+ into <code class="constant">1123002298</code>. A hash table, though,
+ requires transforming each key object into some size-type
+ type in some specific domain; a hash table with a 128-long
+ table might transform <code class="constant">"hello"</code> into
+ position <code class="constant">63</code>. The policy by which the
+ hash value is transformed into a position within the table
+ can dramatically affect performance. Hash-based containers
+ also do not resize naturally (as opposed to tree-based
+ containers, for example). The appropriate resize policy is
+ unfortunately intertwined with the policy that transforms
+ hash value into a position within the table.
+ </p></li><li class="listitem"><p>
+ Tree-based containers, for example, also support look-up and
+ insertion methods, and are primarily useful when maintaining
+ order between elements is important. In some cases, though,
+ one can utilize their balancing algorithms for completely
+ different purposes.
+ </p><p>
+ Figure A shows a tree whose each node contains two entries:
+ a floating-point key, and some size-type
+ <span class="emphasis"><em>metadata</em></span> (in bold beneath it) that is
+ the number of nodes in the sub-tree. (The root has key 0.99,
+ and has 5 nodes (including itself) in its sub-tree.) A
+ container based on this data structure can obviously answer
+ efficiently whether 0.3 is in the container object, but it
+ can also answer what is the order of 0.3 among all those in
+ the container object: see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.
+
+ </p><p>
+ As another example, Figure B shows a tree whose each node
+ contains two entries: a half-open geometric line interval,
+ and a number <span class="emphasis"><em>metadata</em></span> (in bold beneath
+ it) that is the largest endpoint of all intervals in its
+ sub-tree. (The root describes the interval <code class="constant">[20,
+ 36)</code>, and the largest endpoint in its sub-tree is
+ 99.) A container based on this data structure can obviously
+ answer efficiently whether <code class="constant">[3, 41)</code> is
+ in the container object, but it can also answer efficiently
+ whether the container object has intervals that intersect
+ <code class="constant">[3, 41)</code>. These types of queries are
+ very useful in geometric algorithms and lease-management
+ algorithms.
+ </p><p>
+ It is important to note, however, that as the trees are
+ modified, their internal structure changes. To maintain
+ these invariants, one must supply some policy that is aware
+ of these changes. Without this, it would be better to use a
+ linked list (in itself very efficient for these purposes).
+ </p></li></ol></div><div class="figure"><a id="idp17575248"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section" title="Underlying Data Structures"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+ The standard C++ library contains associative containers based on
+ red-black trees and collision-chaining hash tables. These are
+ very useful, but they are not ideal for all types of
+ settings.
+ </p><p>
+ The figure below shows the different underlying data structures
+ currently supported in this library.
+ </p><div class="figure"><a id="idp17581968"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
+ A shows a collision-chaining hash-table, B shows a probing
+ hash-table, C shows a red-black tree, D shows a splay tree, E shows
+ a tree based on an ordered vector(implicit in the order of the
+ elements), F shows a PATRICIA trie, and G shows a list-based
+ container with update policies.
+ </p><p>
+ Each of these data structures has some performance benefits, in
+ terms of speed, size or both. For now, note that vector-based trees
+ and probing hash tables manipulate memory more efficiently than
+ red-black trees and collision-chaining hash tables, and that
+ list-based associative containers are very useful for constructing
+ "multimaps".
+ </p><p>
+ Now consider a function manipulating a generic associative
+ container,
+ </p><pre class="programlisting">
+ template&lt;class Cntnr&gt;
+ int
+ some_op_sequence(Cntnr &amp;r_cnt)
+ {
+ ...
+ }
+ </pre><p>
+ Ideally, the underlying data structure
+ of <code class="classname">Cntnr</code> would not affect what can be
+ done with <code class="varname">r_cnt</code>. Unfortunately, this is not
+ the case.
+ </p><p>
+ For example, if <code class="classname">Cntnr</code>
+ is <code class="classname">std::map</code>, then the function can
+ use
+ </p><pre class="programlisting">
+ std::for_each(r_cnt.find(foo), r_cnt.find(bar), foobar)
+ </pre><p>
+ in order to apply <code class="classname">foobar</code> to all
+ elements between <code class="classname">foo</code> and
+ <code class="classname">bar</code>. If
+ <code class="classname">Cntnr</code> is a hash-based container,
+ then this call's results are undefined.
+ </p><p>
+ Also, if <code class="classname">Cntnr</code> is tree-based, the type
+ and object of the comparison functor can be
+ accessed. If <code class="classname">Cntnr</code> is hash based, these
+ queries are nonsensical.
+ </p><p>
+ There are various other differences based on the container's
+ underlying data structure. For one, they can be constructed by,
+ and queried for, different policies. Furthermore:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Containers based on C, D, E and F store elements in a
+ meaningful order; the others store elements in a meaningless
+ (and probably time-varying) order. By implication, only
+ containers based on C, D, E and F can
+ support <code class="function">erase</code> operations taking an
+ iterator and returning an iterator to the following element
+ without performance loss.
+ </p></li><li class="listitem"><p>
+ Containers based on C, D, E, and F can be split and joined
+ efficiently, while the others cannot. Containers based on C
+ and D, furthermore, can guarantee that this is exception-free;
+ containers based on E cannot guarantee this.
+ </p></li><li class="listitem"><p>
+ Containers based on all but E can guarantee that
+ erasing an element is exception free; containers based on E
+ cannot guarantee this. Containers based on all but B and E
+ can guarantee that modifying an object of their type does
+ not invalidate iterators or references to their elements,
+ while containers based on B and E cannot. Containers based
+ on C, D, and E can furthermore make a stronger guarantee,
+ namely that modifying an object of their type does not
+ affect the order of iterators.
+ </p></li></ol></div><p>
+ A unified tag and traits system (as used for the C++ standard
+ library iterators, for example) can ease generic manipulation of
+ associative containers based on different underlying data
+ structures.
+ </p></div><div class="section" title="Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.iterators"></a>Iterators</h5></div></div></div><p>
+ Iterators are centric to the design of the standard library
+ containers, because of the container/algorithm/iterator
+ decomposition that allows an algorithm to operate on a range
+ through iterators of some sequence. Iterators, then, are useful
+ because they allow going over a
+ specific <span class="emphasis"><em>sequence</em></span>. The standard library
+ also uses iterators for accessing a
+ specific <span class="emphasis"><em>element</em></span>: when an associative
+ container returns one through <code class="function">find</code>. The
+ standard library consistently uses the same types of iterators
+ for both purposes: going over a range, and accessing a specific
+ found element. Before the introduction of hash-based containers
+ to the standard library, this made sense (with the exception of
+ priority queues, which are discussed later).
+ </p><p>
+ Using the standard associative containers together with
+ non-order-preserving associative containers (and also because of
+ priority-queues container), there is a possible need for
+ different types of iterators for self-organizing containers:
+ the iterator concept seems overloaded to mean two different
+ things (in some cases). <em><span class="remark"> XXX
+ "ds_gen.html#find_range"&gt;Design::Associative
+ Containers::Data-Structure Genericity::Point-Type and Range-Type
+ Methods</span></em>.
+ </p><div class="section" title="Using Point Iterators for Range Operations"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.using"></a>Using Point Iterators for Range Operations</h6></div></div></div><p>
+ Suppose <code class="classname">cntnr</code> is some associative
+ container, and say <code class="varname">c</code> is an object of
+ type <code class="classname">cntnr</code>. Then what will be the outcome
+ of
+ </p><pre class="programlisting">
+ std::for_each(c.find(1), c.find(5), foo);
+ </pre><p>
+ If <code class="classname">cntnr</code> is a tree-based container
+ object, then an in-order walk will
+ apply <code class="classname">foo</code> to the relevant elements,
+ as in the graphic below, label A. If <code class="varname">c</code> is
+ a hash-based container, then the order of elements between any
+ two elements is undefined (and probably time-varying); there is
+ no guarantee that the elements traversed will coincide with the
+ <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
+ label B.
+ </p><div class="figure"><a id="idp17613664"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
+ In our opinion, this problem is not caused just because
+ red-black trees are order preserving while
+ collision-chaining hash tables are (generally) not - it
+ is more fundamental. Most of the standard's containers
+ order sequences in a well-defined manner that is
+ determined by their <span class="emphasis"><em>interface</em></span>:
+ calling <code class="function">insert</code> on a tree-based
+ container modifies its sequence in a predictable way, as
+ does calling <code class="function">push_back</code> on a list or
+ a vector. Conversely, collision-chaining hash tables,
+ probing hash tables, priority queues, and list-based
+ containers (which are very useful for "multimaps") are
+ self-organizing data structures; the effect of each
+ operation modifies their sequences in a manner that is
+ (practically) determined by their
+ <span class="emphasis"><em>implementation</em></span>.
+ </p><p>
+ Consequently, applying an algorithm to a sequence obtained from most
+ containers may or may not make sense, but applying it to a
+ sub-sequence of a self-organizing container does not.
+ </p></div><div class="section" title="Cost to Point Iterators to Enable Range Operations"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.cost"></a>Cost to Point Iterators to Enable Range Operations</h6></div></div></div><p>
+ Suppose <code class="varname">c</code> is some collision-chaining
+ hash-based container object, and one calls
+ </p><pre class="programlisting">c.find(3)</pre><p>
+ Then what composes the returned iterator?
+ </p><p>
+ In the graphic below, label A shows the simplest (and
+ most efficient) implementation of a collision-chaining
+ hash table. The little box marked
+ <code class="classname">point_iterator</code> shows an object
+ that contains a pointer to the element's node. Note that
+ this "iterator" has no way to move to the next element (
+ it cannot support
+ <code class="function">operator++</code>). Conversely, the little
+ box marked <code class="classname">iterator</code> stores both a
+ pointer to the element, as well as some other
+ information (the bucket number of the element). the
+ second iterator, then, is "heavier" than the first one-
+ it requires more time and space. If we were to use a
+ different container to cross-reference into this
+ hash-table using these iterators - it would take much
+ more space. As noted above, nothing much can be done by
+ incrementing these iterators, so why is this extra
+ information needed?
+ </p><p>
+ Alternatively, one might create a collision-chaining hash-table
+ where the lists might be linked, forming a monolithic total-element
+ list, as in the graphic below, label B. Here the iterators are as
+ light as can be, but the hash-table's operations are more
+ complicated.
+ </p><div class="figure"><a id="idp17628576"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
+ It should be noted that containers based on collision-chaining
+ hash-tables are not the only ones with this type of behavior;
+ many other self-organizing data structures display it as well.
+ </p></div><div class="section" title="Invalidation Guarantees"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.invalidation"></a>Invalidation Guarantees</h6></div></div></div><p>Consider the following snippet:</p><pre class="programlisting">
+ it = c.find(3);
+ c.erase(5);
+ </pre><p>
+ Following the call to <code class="classname">erase</code>, what is the
+ validity of <code class="classname">it</code>: can it be de-referenced?
+ can it be incremented?
+ </p><p>
+ The answer depends on the underlying data structure of the
+ container. The graphic below shows three cases: A1 and A2 show
+ a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
+ show a collision-chaining hash table.
+ </p><div class="figure"><a id="idp17637776"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
+ be de-referenced and incremented. The sequence of iterators
+ changed, but in a way that is well-defined by the interface.
+ </p></li><li class="listitem"><p>
+ Erasing 5 from B1 yields B2. Clearly, an iterator to 3 is
+ not valid at all - it cannot be de-referenced or
+ incremented; the order of iterators changed in a way that is
+ (practically) determined by the implementation and not by
+ the interface.
+ </p></li><li class="listitem"><p>
+ Erasing 5 from C1 yields C2. Here the situation is more
+ complicated. On the one hand, there is no problem in
+ de-referencing <code class="classname">it</code>. On the other hand,
+ the order of iterators changed in a way that is
+ (practically) determined by the implementation and not by
+ the interface.
+ </p></li></ol></div><p>
+ So in the standard library containers, it is not always possible
+ to express whether <code class="varname">it</code> is valid or not. This
+ is true also for <code class="function">insert</code>. Again, the
+ iterator concept seems overloaded.
+ </p></div></div><div class="section" title="Functional"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.functions"></a>Functional</h5></div></div></div><p>
+ </p><p>
+ The design of the functional overlay to the underlying data
+ structures differs slightly from some of the conventions used in
+ the C++ standard. A strict public interface of methods that
+ comprise only operations which depend on the class's internal
+ structure; other operations are best designed as external
+ functions. (See <a class="xref" href="policy_data_structures.html#biblio.meyers02both" title="Class Template, Member Template - or Both?">[biblio.meyers02both]</a>).With this
+ rubric, the standard associative containers lack some useful
+ methods, and provide other methods which would be better
+ removed.
+ </p><div class="section" title="erase"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.erase"></a><code class="function">erase</code></h6></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Order-preserving standard associative containers provide the
+ method
+ </p><pre class="programlisting">
+ iterator
+ erase(iterator it)
+ </pre><p>
+ which takes an iterator, erases the corresponding
+ element, and returns an iterator to the following
+ element. Also standardd hash-based associative
+ containers provide this method. This seemingly
+ increasesgenericity between associative containers,
+ since it is possible to use
+ </p><pre class="programlisting">
+ typename C::iterator it = c.begin();
+ typename C::iterator e_it = c.end();
+
+ while(it != e_it)
+ it = pred(*it)? c.erase(it) : ++it;
+ </pre><p>
+ in order to erase from a container object <code class="varname">
+ c</code> all element which match a
+ predicate <code class="classname">pred</code>. However, in a
+ different sense this actually decreases genericity: an
+ integral implication of this method is that tree-based
+ associative containers' memory use is linear in the total
+ number of elements they store, while hash-based
+ containers' memory use is unbounded in the total number of
+ elements they store. Assume a hash-based container is
+ allowed to decrease its size when an element is
+ erased. Then the elements might be rehashed, which means
+ that there is no "next" element - it is simply
+ undefined. Consequently, it is possible to infer from the
+ fact that the standard library's hash-based containers
+ provide this method that they cannot downsize when
+ elements are erased. As a consequence, different code is
+ needed to manipulate different containers, assuming that
+ memory should be conserved. Therefor, this library's
+ non-order preserving associative containers omit this
+ method.
+ </p></li><li class="listitem"><p>
+ All associative containers include a conditional-erase method
+ </p><pre class="programlisting">
+ template&lt;
+ class Pred&gt;
+ size_type
+ erase_if
+ (Pred pred)
+ </pre><p>
+ which erases all elements matching a predicate. This is probably the
+ only way to ensure linear-time multiple-item erase which can
+ actually downsize a container.
+ </p></li><li class="listitem"><p>
+ The standard associative containers provide methods for
+ multiple-item erase of the form
+ </p><pre class="programlisting">
+ size_type
+ erase(It b, It e)
+ </pre><p>
+ erasing a range of elements given by a pair of
+ iterators. For tree-based or trie-based containers, this can
+ implemented more efficiently as a (small) sequence of split
+ and join operations. For other, unordered, containers, this
+ method isn't much better than an external loop. Moreover,
+ if <code class="varname">c</code> is a hash-based container,
+ then
+ </p><pre class="programlisting">
+ c.erase(c.find(2), c.find(5))
+ </pre><p>
+ is almost certain to do something
+ different than erasing all elements whose keys are between 2
+ and 5, and is likely to produce other undefined behavior.
+ </p></li></ol></div></div><div class="section" title="split and join"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.split"></a>
+ <code class="function">split</code> and <code class="function">join</code>
+ </h6></div></div></div><p>
+ It is well-known that tree-based and trie-based container
+ objects can be efficiently split or joined (See
+ <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>). Externally splitting or
+ joining trees is super-linear, and, furthermore, can throw
+ exceptions. Split and join methods, consequently, seem good
+ choices for tree-based container methods, especially, since as
+ noted just before, they are efficient replacements for erasing
+ sub-sequences.
+ </p></div><div class="section" title="insert"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.insert"></a>
+ <code class="function">insert</code>
+ </h6></div></div></div><p>
+ The standard associative containers provide methods of the form
+ </p><pre class="programlisting">
+ template&lt;class It&gt;
+ size_type
+ insert(It b, It e);
+ </pre><p>
+ for inserting a range of elements given by a pair of
+ iterators. At best, this can be implemented as an external loop,
+ or, even more efficiently, as a join operation (for the case of
+ tree-based or trie-based containers). Moreover, these methods seem
+ similar to constructors taking a range given by a pair of
+ iterators; the constructors, however, are transactional, whereas
+ the insert methods are not; this is possibly confusing.
+ </p></div><div class="section" title="operator== and operator&lt;="><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.compare"></a>
+ <code class="function">operator==</code> and <code class="function">operator&lt;=</code>
+ </h6></div></div></div><p>
+ Associative containers are parametrized by policies allowing to
+ test key equivalence: a hash-based container can do this through
+ its equivalence functor, and a tree-based container can do this
+ through its comparison functor. In addition, some standard
+ associative containers have global function operators, like
+ <code class="function">operator==</code> and <code class="function">operator&lt;=</code>,
+ that allow comparing entire associative containers.
+ </p><p>
+ In our opinion, these functions are better left out. To begin
+ with, they do not significantly improve over an external
+ loop. More importantly, however, they are possibly misleading -
+ <code class="function">operator==</code>, for example, usually checks for
+ equivalence, or interchangeability, but the associative
+ container cannot check for values' equivalence, only keys'
+ equivalence; also, are two containers considered equivalent if
+ they store the same values in different order? this is an
+ arbitrary decision.
+ </p></div></div></div><div class="section" title="Priority Queues"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.priority_queue"></a>Priority Queues</h4></div></div></div><div class="section" title="Policy Choices"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.policy"></a>Policy Choices</h5></div></div></div><p>
+ Priority queues are containers that allow efficiently inserting
+ values and accessing the maximal value (in the sense of the
+ container's comparison functor). Their interface
+ supports <code class="function">push</code>
+ and <code class="function">pop</code>. The standard
+ container <code class="classname">std::priorityqueue</code> indeed support
+ these methods, but little else. For algorithmic and
+ software-engineering purposes, other methods are needed:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Many graph algorithms (see
+ <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>) require increasing a
+ value in a priority queue (again, in the sense of the
+ container's comparison functor), or joining two
+ priority-queue objects.
+ </p></li><li class="listitem"><p>The return type of <code class="classname">priority_queue</code>'s
+ <code class="function">push</code> method is a point-type iterator, which can
+ be used for modifying or erasing arbitrary values. For
+ example:</p><pre class="programlisting">
+ priority_queue&lt;int&gt; p;
+ priority_queue&lt;int&gt;::point_iterator it = p.push(3);
+ p.modify(it, 4);
+ </pre><p>These types of cross-referencing operations are necessary
+ for making priority queues useful for different applications,
+ especially graph applications.</p></li><li class="listitem"><p>
+ It is sometimes necessary to erase an arbitrary value in a
+ priority queue. For example, consider
+ the <code class="function">select</code> function for monitoring
+ file descriptors:
+ </p><pre class="programlisting">
+ int
+ select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds,
+ struct timeval *timeout);
+ </pre><p>
+ then, as the select documentation states:
+ </p><p>
+ <span class="quote">“<span class="quote">
+ The nfds argument specifies the range of file
+ descriptors to be tested. The select() function tests file
+ descriptors in the range of 0 to nfds-1.</span>â€</span>
+ </p><p>
+ It stands to reason, therefore, that we might wish to
+ maintain a minimal value for <code class="varname">nfds</code>, and
+ priority queues immediately come to mind. Note, though, that
+ when a socket is closed, the minimal file description might
+ change; in the absence of an efficient means to erase an
+ arbitrary value from a priority queue, we might as well
+ avoid its use altogether.
+ </p><p>
+ The standard containers typically support iterators. It is
+ somewhat unusual
+ for <code class="classname">std::priority_queue</code> to omit them
+ (See <a class="xref" href="policy_data_structures.html#biblio.meyers01stl" title="Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library">[biblio.meyers01stl]</a>). One might
+ ask why do priority queues need to support iterators, since
+ they are self-organizing containers with a different purpose
+ than abstracting sequences. There are several reasons:
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
+ Iterators (even in self-organizing containers) are
+ useful for many purposes: cross-referencing
+ containers, serialization, and debugging code that uses
+ these containers.
+ </p></li><li class="listitem"><p>
+ The standard library's hash-based containers support
+ iterators, even though they too are self-organizing
+ containers with a different purpose than abstracting
+ sequences.
+ </p></li><li class="listitem"><p>
+ In standard-library-like containers, it is natural to specify the
+ interface of operations for modifying a value or erasing
+ a value (discussed previously) in terms of a iterators.
+ It should be noted that the standard
+ containers also use iterators for accessing and
+ manipulating a specific value. In hash-based
+ containers, one checks the existence of a key by
+ comparing the iterator returned by <code class="function">find</code> to the
+ iterator returned by <code class="function">end</code>, and not by comparing a
+ pointer returned by <code class="function">find</code> to <span class="type">NULL</span>.
+ </p></li></ol></div></li></ol></div></div><div class="section" title="Underlying Data Structures"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+ There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the figure below with labels A1 and A2, B, and C.
+ </p><div class="figure"><a id="idp17705360"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
+ No single implementation can completely replace any of the
+ others. Some have better <code class="function">push</code>
+ and <code class="function">pop</code> amortized performance, some have
+ better bounded (worst case) response time than others, some
+ optimize a single method at the expense of others, etc. In
+ general the "best" implementation is dictated by the specific
+ problem.
+ </p><p>
+ As with associative containers, the more implementations
+ co-exist, the more necessary a traits mechanism is for handling
+ generic containers safely and efficiently. This is especially
+ important for priority queues, since the invalidation guarantees
+ of one of the most useful data structures - binary heaps - is
+ markedly different than those of most of the others.
+ </p></div><div class="section" title="Binary Heaps"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.binary_heap"></a>Binary Heaps</h5></div></div></div><p>
+ Binary heaps are one of the most useful underlying
+ data structures for priority queues. They are very efficient in
+ terms of memory (since they don't require per-value structure
+ metadata), and have the best amortized <code class="function">push</code> and
+ <code class="function">pop</code> performance for primitive types like
+ <span class="type">int</span>.
+ </p><p>
+ The standard library's <code class="classname">priority_queue</code>
+ implements this data structure as an adapter over a sequence,
+ typically
+ <code class="classname">std::vector</code>
+ or <code class="classname">std::deque</code>, which correspond to labels
+ A1 and A2 respectively in the graphic above.
+ </p><p>
+ This is indeed an elegant example of the adapter concept and
+ the algorithm/container/iterator decomposition. (See <a class="xref" href="policy_data_structures.html#biblio.nelson96stlpq" title="Priority Queues and the STL">[biblio.nelson96stlpq]</a>). There are
+ several reasons why a binary-heap priority queue
+ may be better implemented as a container instead of a
+ sequence adapter:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <code class="classname">std::priority_queue</code> cannot erase values
+ from its adapted sequence (irrespective of the sequence
+ type). This means that the memory use of
+ an <code class="classname">std::priority_queue</code> object is always
+ proportional to the maximal number of values it ever contained,
+ and not to the number of values that it currently
+ contains. (See <code class="filename">performance/priority_queue_text_pop_mem_usage.cc</code>.)
+ This implementation of binary heaps acts very differently than
+ other underlying data structures (See also pairing heaps).
+ </p></li><li class="listitem"><p>
+ Some combinations of adapted sequences and value types
+ are very inefficient or just don't make sense. If one uses
+ <code class="classname">std::priority_queue&lt;std::vector&lt;std::string&gt;
+ &gt; &gt;</code>, for example, then not only will each
+ operation perform a logarithmic number of
+ <code class="classname">std::string</code> assignments, but, furthermore, any
+ operation (including <code class="function">pop</code>) can render the container
+ useless due to exceptions. Conversely, if one uses
+ <code class="classname">std::priority_queue&lt;std::deque&lt;int&gt; &gt;
+ &gt;</code>, then each operation uses incurs a logarithmic
+ number of indirect accesses (through pointers) unnecessarily.
+ It might be better to let the container make a conservative
+ deduction whether to use the structure in the graphic above, labels A1 or A2.
+ </p></li><li class="listitem"><p>
+ There does not seem to be a systematic way to determine
+ what exactly can be done with the priority queue.
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
+ If <code class="classname">p</code> is a priority queue adapting an
+ <code class="classname">std::vector</code>, then it is possible to iterate over
+ all values by using <code class="function">&amp;p.top()</code> and
+ <code class="function">&amp;p.top() + p.size()</code>, but this will not work
+ if <code class="varname">p</code> is adapting an <code class="classname">std::deque</code>; in any
+ case, one cannot use <code class="classname">p.begin()</code> and
+ <code class="classname">p.end()</code>. If a different sequence is adapted, it
+ is even more difficult to determine what can be
+ done.
+ </p></li><li class="listitem"><p>
+ If <code class="varname">p</code> is a priority queue adapting an
+ <code class="classname">std::deque</code>, then the reference return by
+ </p><pre class="programlisting">
+ p.top()
+ </pre><p>
+ will remain valid until it is popped,
+ but if <code class="varname">p</code> adapts an <code class="classname">std::vector</code>, the
+ next <code class="function">push</code> will invalidate it. If a different
+ sequence is adapted, it is even more difficult to
+ determine what can be done.
+ </p></li></ol></div></li><li class="listitem"><p>
+ Sequence-based binary heaps can still implement
+ linear-time <code class="function">erase</code> and <code class="function">modify</code> operations.
+ This means that if one needs to erase a small
+ (say logarithmic) number of values, then one might still
+ choose this underlying data structure. Using
+ <code class="classname">std::priority_queue</code>, however, this will generally
+ change the order of growth of the entire sequence of
+ operations.
+ </p></li></ol></div></div></div></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="pbds.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="STL Exception Handling Contract"><a id="biblio.abrahams97exception"></a><p>[biblio.abrahams97exception] <span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf" target="_top">
+ STL Exception Handling Contract
+ </a>
+ </em>. </span><span class="date">1997. </span><span class="author"><span class="firstname">
+ Dave
+ </span> <span class="surname">
+ Abrahams
+ </span>. </span><span class="publisher"><span class="publishername">
+ ISO SC22/WG21
+ . </span></span></p></div><div class="biblioentry" title="Modern C++ Design: Generic Programming and Design Patterns Applied"><a id="biblio.alexandrescu01modern"></a><p>[biblio.alexandrescu01modern] <span class="title"><em>
+ Modern C++ Design: Generic Programming and Design Patterns Applied
+ </em>. </span><span class="date">
+ 2001
+ . </span><span class="author"><span class="firstname">
+ Andrei
+ </span> <span class="surname">
+ Alexandrescu
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem"><a id="biblio.andrew04mtf"></a><p>[biblio.andrew04mtf] <span class="title"><em>
+ MTF, Bit, and COMB: A Guide to Deterministic and Randomized
+ Algorithms for the List Update Problem
+ </em>. </span><span class="authorgroup"><span class="firstname">
+ K.
+ </span> <span class="surname">
+ Andrew
+ </span> and <span class="firstname">
+ D.
+ </span> <span class="surname">
+ Gleich
+ </span>. </span></p></div><div class="biblioentry" title="Why You Shouldn't Use set - and What You Should Use Instead"><a id="biblio.austern00noset"></a><p>[biblio.austern00noset] <span class="title"><em>
+ Why You Shouldn't Use set - and What You Should Use Instead
+ </em>. </span><span class="date">
+ April, 2000
+ . </span><span class="author"><span class="firstname">
+ Matthew
+ </span> <span class="surname">
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ C++ Report
+ . </span></span></p></div><div class="biblioentry" title="A Proposal to Add Hashtables to the Standard Library"><a id="biblio.austern01htprop"></a><p>[biblio.austern01htprop] <span class="title"><em>
+ <a class="link" href="http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2001/n1326.html" target="_top">
+ A Proposal to Add Hashtables to the Standard Library
+ </a>
+ </em>. </span><span class="date">
+ 2001
+ . </span><span class="author"><span class="firstname">
+ Matthew
+ </span> <span class="surname">
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ ISO SC22/WG21
+ . </span></span></p></div><div class="biblioentry" title="Segmented iterators and hierarchical algorithms"><a id="biblio.austern98segmentedit"></a><p>[biblio.austern98segmentedit] <span class="title"><em>
+ Segmented iterators and hierarchical algorithms
+ </em>. </span><span class="date">
+ April, 1998
+ . </span><span class="author"><span class="firstname">
+ Matthew
+ </span> <span class="surname">
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ Generic Programming
+ . </span></span></p></div><div class="biblioentry" title="Boost Timer Library"><a id="biblio.dawestimer"></a><p>[biblio.dawestimer] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/timer/" target="_top">
+ Boost Timer Library
+ </a>
+ </em>. </span><span class="author"><span class="firstname">
+ Beeman
+ </span> <span class="surname">
+ Dawes
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+ . </span></span></p></div><div class="biblioentry" title="Boost Pool Library"><a id="biblio.clearypool"></a><p>[biblio.clearypool] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/pool/" target="_top">
+ Boost Pool Library
+ </a>
+ </em>. </span><span class="author"><span class="firstname">
+ Stephen
+ </span> <span class="surname">
+ Cleary
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+ . </span></span></p></div><div class="biblioentry" title="Boost Type Traits Library"><a id="biblio.maddocktraits"></a><p>[biblio.maddocktraits] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/type_traits/" target="_top">
+ Boost Type Traits Library
+ </a>
+ </em>. </span><span class="authorgroup"><span class="firstname">
+ Maddock
+ </span> <span class="surname">
+ John
+ </span> and <span class="firstname">
+ Stephen
+ </span> <span class="surname">
+ Cleary
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+ . </span></span></p></div><div class="biblioentry" title="Worst-case efficient priority queues"><a id="biblio.brodal96priority"></a><p>[biblio.brodal96priority] <span class="title"><em>
+ <a class="link" href="https://dl.acm.org/citation.cfm?id=313883" target="_top">
+ Worst-case efficient priority queues
+ </a>
+ </em>. </span><span class="author"><span class="firstname">
+ Gerth
+ </span> <span class="surname">
+ Stolting Brodal
+ </span>. </span></p></div><div class="biblioentry" title="Efficient C++ Programming Techniques"><a id="biblio.bulkamayheweff"></a><p>[biblio.bulkamayheweff] <span class="title"><em>
+ Efficient C++ Programming Techniques
+ </em>. </span><span class="date">
+ 1997
+ . </span><span class="authorgroup"><span class="firstname">
+ D.
+ </span> <span class="surname">
+ Bulka
+ </span> and <span class="firstname">
+ D.
+ </span> <span class="surname">
+ Mayhew
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="Introduction to Algorithms, 2nd edition"><a id="biblio.clrs2001"></a><p>[biblio.clrs2001] <span class="title"><em>
+ Introduction to Algorithms, 2nd edition
+ </em>. </span><span class="date">
+ 2001
+ . </span><span class="authorgroup"><span class="firstname">
+ T. H.
+ </span> <span class="surname">
+ Cormen
+ </span>, <span class="firstname">
+ C. E.
+ </span> <span class="surname">
+ Leiserson
+ </span>, <span class="firstname">
+ R. L.
+ </span> <span class="surname">
+ Rivest
+ </span>, and <span class="firstname">
+ C.
+ </span> <span class="surname">
+ Stein
+ </span>. </span><span class="publisher"><span class="publishername">
+ MIT Press
+ . </span></span></p></div><div class="biblioentry" title="Balls and bins: A study in negative dependence"><a id="biblio.dubhashi98neg"></a><p>[biblio.dubhashi98neg] <span class="title"><em>
+ Balls and bins: A study in negative dependence
+ </em>. </span><span class="date">
+ 1998
+ . </span><span class="authorgroup"><span class="firstname">
+ D.
+ </span> <span class="surname">
+ Dubashi
+ </span> and <span class="firstname">
+ D.
+ </span> <span class="surname">
+ Ranjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ Random Structures and Algorithms 13
+ . </span></span></p></div><div class="biblioentry" title="Extendible hashing - a fast access method for dynamic files"><a id="biblio.fagin79extendible"></a><p>[biblio.fagin79extendible] <span class="title"><em>
+ Extendible hashing - a fast access method for dynamic files
+ </em>. </span><span class="date">
+ 1979
+ . </span><span class="authorgroup"><span class="firstname">
+ R.
+ </span> <span class="surname">
+ Fagin
+ </span>, <span class="firstname">
+ J.
+ </span> <span class="surname">
+ Nievergelt
+ </span>, <span class="firstname">
+ N.
+ </span> <span class="surname">
+ Pippenger
+ </span>, and <span class="firstname">
+ H. R.
+ </span> <span class="surname">
+ Strong
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Trans. Database Syst. 4
+ . </span></span></p></div><div class="biblioentry" title="Ptset: Sets of integers implemented as Patricia trees"><a id="biblio.filliatre2000ptset"></a><p>[biblio.filliatre2000ptset] <span class="title"><em>
+ <a class="link" href="http://cristal.inria.fr/~frisch/icfp06_contest/advtr/applyOmatic/ptset.ml" target="_top">
+ Ptset: Sets of integers implemented as Patricia trees
+ </a>
+ </em>. </span><span class="date">
+ 2000
+ . </span><span class="author"><span class="firstname">
+ Jean-Christophe
+ </span> <span class="surname">
+ Filliatre
+ </span>. </span></p></div><div class="biblioentry" title="The pairing heap: a new form of self-adjusting heap"><a id="biblio.fredman86pairing"></a><p>[biblio.fredman86pairing] <span class="title"><em>
+ <a class="link" href="http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf" target="_top">
+ The pairing heap: a new form of self-adjusting heap
+ </a>
+ </em>. </span><span class="date">
+ 1986
+ . </span><span class="authorgroup"><span class="firstname">
+ M. L.
+ </span> <span class="surname">
+ Fredman
+ </span>, <span class="firstname">
+ R.
+ </span> <span class="surname">
+ Sedgewick
+ </span>, <span class="firstname">
+ D. D.
+ </span> <span class="surname">
+ Sleator
+ </span>, and <span class="firstname">
+ R. E.
+ </span> <span class="surname">
+ Tarjan
+ </span>. </span></p></div><div class="biblioentry" title="Design Patterns - Elements of Reusable Object-Oriented Software"><a id="biblio.gof"></a><p>[biblio.gof] <span class="title"><em>
+ Design Patterns - Elements of Reusable Object-Oriented Software
+ </em>. </span><span class="date">
+ 1995
+ . </span><span class="authorgroup"><span class="firstname">
+ E.
+ </span> <span class="surname">
+ Gamma
+ </span>, <span class="firstname">
+ R.
+ </span> <span class="surname">
+ Helm
+ </span>, <span class="firstname">
+ R.
+ </span> <span class="surname">
+ Johnson
+ </span>, and <span class="firstname">
+ J.
+ </span> <span class="surname">
+ Vlissides
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="Order-preserving key transformations"><a id="biblio.garg86order"></a><p>[biblio.garg86order] <span class="title"><em>
+ Order-preserving key transformations
+ </em>. </span><span class="date">
+ 1986
+ . </span><span class="authorgroup"><span class="firstname">
+ A. K.
+ </span> <span class="surname">
+ Garg
+ </span> and <span class="firstname">
+ C. C.
+ </span> <span class="surname">
+ Gotlieb
+ </span>. </span><span class="publisher"><span class="publishername">
+ Trans. Database Syst. 11
+ . </span></span></p></div><div class="biblioentry" title="Making a real hash of things"><a id="biblio.hyslop02making"></a><p>[biblio.hyslop02making] <span class="title"><em>
+ Making a real hash of things
+ </em>. </span><span class="date">
+ May 2002
+ . </span><span class="authorgroup"><span class="firstname">
+ J.
+ </span> <span class="surname">
+ Hyslop
+ </span> and <span class="firstname">
+ Herb
+ </span> <span class="surname">
+ Sutter
+ </span>. </span><span class="publisher"><span class="publishername">
+ C++ Report
+ . </span></span></p></div><div class="biblioentry" title="The C++ Standard Library - A Tutorial and Reference"><a id="biblio.jossutis01stl"></a><p>[biblio.jossutis01stl] <span class="title"><em>
+ The C++ Standard Library - A Tutorial and Reference
+ </em>. </span><span class="date">
+ 2001
+ . </span><span class="author"><span class="firstname">
+ N. M.
+ </span> <span class="surname">
+ Jossutis
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="New Heap Data Structures"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
+ <a class="link" href="http://www.cs.princeton.edu/research/techreps/TR-597-99" target="_top">
+ New Heap Data Structures
+ </a>
+ </em>. </span><span class="date">
+ 1999
+ . </span><span class="authorgroup"><span class="firstname">
+ Haim
+ </span> <span class="surname">
+ Kaplan
+ </span> and <span class="firstname">
+ Robert E.
+ </span> <span class="surname">
+ Tarjan
+ </span>. </span></p></div><div class="biblioentry" title="Are Set Iterators Mutable or Immutable?"><a id="biblio.kleft00sets"></a><p>[biblio.kleft00sets] <span class="title"><em>
+ Are Set Iterators Mutable or Immutable?
+ </em>. </span><span class="date">
+ October 2000
+ . </span><span class="authorgroup"><span class="firstname">
+ Angelika
+ </span> <span class="surname">
+ Langer
+ </span> and <span class="firstname">
+ Klaus
+ </span> <span class="surname">
+ Kleft
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Jornal
+ . </span></span></p></div><div class="biblioentry" title="The Art of Computer Programming - Sorting and Searching"><a id="biblio.knuth98sorting"></a><p>[biblio.knuth98sorting] <span class="title"><em>
+ The Art of Computer Programming - Sorting and Searching
+ </em>. </span><span class="date">
+ 1998
+ . </span><span class="author"><span class="firstname">
+ D. E.
+ </span> <span class="surname">
+ Knuth
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="Data abstraction and hierarchy"><a id="biblio.liskov98data"></a><p>[biblio.liskov98data] <span class="title"><em>
+ Data abstraction and hierarchy
+ </em>. </span><span class="date">
+ May 1998
+ . </span><span class="author"><span class="firstname">
+ B.
+ </span> <span class="surname">
+ Liskov
+ </span>. </span><span class="publisher"><span class="publishername">
+ SIGPLAN Notices 23
+ . </span></span></p></div><div class="biblioentry" title="Linear hashing: A new tool for file and table addressing"><a id="biblio.litwin80lh"></a><p>[biblio.litwin80lh] <span class="title"><em>
+ Linear hashing: A new tool for file and table addressing
+ </em>. </span><span class="date">
+ June 1980
+ . </span><span class="author"><span class="firstname">
+ W.
+ </span> <span class="surname">
+ Litwin
+ </span>. </span><span class="publisher"><span class="publishername">
+ Proceedings of International Conference on Very Large Data Bases
+ . </span></span></p></div><div class="biblioentry" title="Deamortization - Part 2: Binomial Heaps"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
+ <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
+ Deamortization - Part 2: Binomial Heaps
+ </a>
+ </em>. </span><span class="date">
+ 2005
+ . </span><span class="author"><span class="firstname">
+ Maverik
+ </span> <span class="surname">
+ Woo
+ </span>. </span></p></div><div class="biblioentry" title="More Effective C++: 35 New Ways to Improve Your Programs and Designs"><a id="biblio.meyers96more"></a><p>[biblio.meyers96more] <span class="title"><em>
+ More Effective C++: 35 New Ways to Improve Your Programs and Designs
+ </em>. </span><span class="date">
+ 1996
+ . </span><span class="author"><span class="firstname">
+ Scott
+ </span> <span class="surname">
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="How Non-Member Functions Improve Encapsulation"><a id="biblio.meyers00nonmember"></a><p>[biblio.meyers00nonmember] <span class="title"><em>
+ How Non-Member Functions Improve Encapsulation
+ </em>. </span><span class="date">
+ 2000
+ . </span><span class="author"><span class="firstname">
+ Scott
+ </span> <span class="surname">
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+ . </span></span></p></div><div class="biblioentry" title="Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library"><a id="biblio.meyers01stl"></a><p>[biblio.meyers01stl] <span class="title"><em>
+ Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
+ </em>. </span><span class="date">
+ 2001
+ . </span><span class="author"><span class="firstname">
+ Scott
+ </span> <span class="surname">
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="Class Template, Member Template - or Both?"><a id="biblio.meyers02both"></a><p>[biblio.meyers02both] <span class="title"><em>
+ Class Template, Member Template - or Both?
+ </em>. </span><span class="date">
+ 2003
+ . </span><span class="author"><span class="firstname">
+ Scott
+ </span> <span class="surname">
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+ . </span></span></p></div><div class="biblioentry" title="Randomized Algorithms"><a id="biblio.motwani95random"></a><p>[biblio.motwani95random] <span class="title"><em>
+ Randomized Algorithms
+ </em>. </span><span class="date">
+ 2003
+ . </span><span class="authorgroup"><span class="firstname">
+ R.
+ </span> <span class="surname">
+ Motwani
+ </span> and <span class="firstname">
+ P.
+ </span> <span class="surname">
+ Raghavan
+ </span>. </span><span class="publisher"><span class="publishername">
+ Cambridge University Press
+ . </span></span></p></div><div class="biblioentry" title="COM: Component Model Object Technologies"><a id="biblio.mscom"></a><p>[biblio.mscom] <span class="title"><em>
+ <a class="link" href="https://www.microsoft.com/com/" target="_top">
+ COM: Component Model Object Technologies
+ </a>
+ </em>. </span><span class="publisher"><span class="publishername">
+ Microsoft
+ . </span></span></p></div><div class="biblioentry" title="Rationale for Adding Hash Tables to the C++ Standard Template Library"><a id="biblio.musser95rationale"></a><p>[biblio.musser95rationale] <span class="title"><em>
+ Rationale for Adding Hash Tables to the C++ Standard Template Library
+ </em>. </span><span class="date">
+ 1995
+ . </span><span class="author"><span class="firstname">
+ David R.
+ </span> <span class="surname">
+ Musser
+ </span>. </span></p></div><div class="biblioentry" title="STL Tutorial and Reference Guide"><a id="biblio.musser96stltutorial"></a><p>[biblio.musser96stltutorial] <span class="title"><em>
+ STL Tutorial and Reference Guide
+ </em>. </span><span class="date">
+ 1996
+ . </span><span class="authorgroup"><span class="firstname">
+ David R.
+ </span> <span class="surname">
+ Musser
+ </span> and <span class="firstname">
+ A.
+ </span> <span class="surname">
+ Saini
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="Priority Queues and the STL"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
+ <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
+ </a>
+ </em>. </span><span class="date">
+ January 1996
+ . </span><span class="author"><span class="firstname">
+ Mark
+ </span> <span class="surname">
+ Nelson
+ </span>. </span><span class="publisher"><span class="publishername">
+ Dr. Dobbs Journal
+ . </span></span></p></div><div class="biblioentry" title="Fast mergeable integer maps"><a id="biblio.okasaki98mereable"></a><p>[biblio.okasaki98mereable] <span class="title"><em>
+ Fast mergeable integer maps
+ </em>. </span><span class="date">
+ September 1998
+ . </span><span class="authorgroup"><span class="firstname">
+ C.
+ </span> <span class="surname">
+ Okasaki
+ </span> and <span class="firstname">
+ A.
+ </span> <span class="surname">
+ Gill
+ </span>. </span><span class="publisher"><span class="publishername">
+ In Workshop on ML
+ . </span></span></p></div><div class="biblioentry" title="Standard Template Library Programmer's Guide"><a id="biblio.sgi_stl"></a><p>[biblio.sgi_stl] <span class="title"><em>
+ <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">
+ Standard Template Library Programmer's Guide
+ </a>
+ </em>. </span><span class="author"><span class="firstname">
+ Matt
+ </span> <span class="surname">
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ SGI
+ . </span></span></p></div><div class="biblioentry" title="select"><a id="biblio.select_man"></a><p>[biblio.select_man] <span class="title"><em>
+ <a class="link" href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html" target="_top">
+ select
+ </a>
+ </em>. </span></p></div><div class="biblioentry" title="Amortized Efficiency of List Update Problems"><a id="biblio.sleator84amortized"></a><p>[biblio.sleator84amortized] <span class="title"><em>
+ Amortized Efficiency of List Update Problems
+ </em>. </span><span class="date">
+ 1984
+ . </span><span class="authorgroup"><span class="firstname">
+ D. D.
+ </span> <span class="surname">
+ Sleator
+ </span> and <span class="firstname">
+ R. E.
+ </span> <span class="surname">
+ Tarjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Symposium on Theory of Computing
+ . </span></span></p></div><div class="biblioentry" title="Self-Adjusting Binary Search Trees"><a id="biblio.sleator85self"></a><p>[biblio.sleator85self] <span class="title"><em>
+ Self-Adjusting Binary Search Trees
+ </em>. </span><span class="date">
+ 1985
+ . </span><span class="authorgroup"><span class="firstname">
+ D. D.
+ </span> <span class="surname">
+ Sleator
+ </span> and <span class="firstname">
+ R. E.
+ </span> <span class="surname">
+ Tarjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Symposium on Theory of Computing
+ . </span></span></p></div><div class="biblioentry" title="The Standard Template Library"><a id="biblio.stepanov94standard"></a><p>[biblio.stepanov94standard] <span class="title"><em>
+ The Standard Template Library
+ </em>. </span><span class="date">
+ 1984
+ . </span><span class="authorgroup"><span class="firstname">
+ A. A.
+ </span> <span class="surname">
+ Stepanov
+ </span> and <span class="firstname">
+ M.
+ </span> <span class="surname">
+ Lee
+ </span>. </span></p></div><div class="biblioentry" title="The C++ Programming Langugage"><a id="biblio.stroustrup97cpp"></a><p>[biblio.stroustrup97cpp] <span class="title"><em>
+ The C++ Programming Langugage
+ </em>. </span><span class="date">
+ 1997
+ . </span><span class="author"><span class="firstname">
+ Bjarne
+ </span> <span class="surname">
+ Stroustrup
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="C++ Templates: The Complete Guide"><a id="biblio.vandevoorde2002cpptemplates"></a><p>[biblio.vandevoorde2002cpptemplates] <span class="title"><em>
+ C++ Templates: The Complete Guide
+ </em>. </span><span class="date">
+ 2002
+ . </span><span class="authorgroup"><span class="firstname">
+ D.
+ </span> <span class="surname">
+ Vandevoorde
+ </span> and <span class="firstname">
+ N. M.
+ </span> <span class="surname">
+ Josuttis
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+ . </span></span></p></div><div class="biblioentry" title="Thirty Years Among the Dead"><a id="biblio.wickland96thirty"></a><p>[biblio.wickland96thirty] <span class="title"><em>
+ <a class="link" href="http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip" target="_top">
+ Thirty Years Among the Dead
+ </a>
+ </em>. </span><span class="date">
+ 1996
+ . </span><span class="author"><span class="firstname">
+ C. A.
+ </span> <span class="surname">
+ Wickland
+ </span>. </span><span class="publisher"><span class="publishername">
+ National Psychological Institute
+ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html b/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
new file mode 100644
index 0000000000..9676af805b
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
+ Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+ Laboratories), and Benjamin Kosnik (Red Hat).
+ </p><p>
+ This library was partially written at
+ <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
+ It is based heavily on policy-based design and uses many useful
+ techniques from Modern C++ Design: Generic Programming and Design
+ Patterns Applied by Andrei Alexandrescu.
+ </p><p>
+ Two ideas are borrowed from the SGI-STL implementation:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ The prime-based resize policies use a list of primes taken from
+ the SGI-STL implementation.
+ </p></li><li class="listitem"><p>
+ 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.
+ </p></li></ol></div><p>
+ Some test utilities borrow ideas from
+ <a class="link" href="http://www.boost.org/doc/libs/release/libs/timer/index.html" target="_top">boost::timer</a>.
+ </p><p>
+ We would like to thank Scott Meyers for useful comments (without
+ attributing to him any flaws in the design or implementation of the
+ library).
+ </p><p>We would like to thank Matt Austern for the suggestion to
+ include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. HP/SGI Extensions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures_design.html b/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
new file mode 100644
index 0000000000..877460b1fd
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
@@ -0,0 +1,1430 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section" title="Concepts"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section" title="Null Policy Classes"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><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 redundant. For example, when the
+ keys are integers, it is possible to use a redundant hash policy,
+ which transforms each key into its value.
+ </p><p>
+ In some other cases, these policies are irrelevant. For example, a
+ hash-based associative container might transform keys into positions
+ within a table by a different method than the two-step method
+ described above. In such a case, the hash functor is simply
+ irrelevant.
+ </p><p>
+ When a policy is either redundant or irrelevant, it can be replaced
+ by <code class="classname">null_type</code>.
+ </p><p>
+ For example, a <span class="emphasis"><em>set</em></span> is an associative
+ container with one of its template parameters (the one for the
+ mapped type) replaced with <code class="classname">null_type</code>. Other
+ places simplifications are made possible with this technique
+ include node updates in tree and trie data structures, and hash
+ and probe functions for hash data structures.
+ </p></div><div class="section" title="Map and Set Semantics"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.associative_semantics"></a>Map and Set Semantics</h4></div></div></div><div class="section" title="Distinguishing Between Maps and Sets"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.set_vs_map"></a>
+ Distinguishing Between Maps and Sets
+ </h5></div></div></div><p>
+ Anyone familiar with the standard knows that there are four kinds
+ of associative containers: maps, sets, multimaps, and
+ multisets. The map datatype associates each key to
+ some data.
+ </p><p>
+ Sets are associative containers that simply store keys -
+ they do not map them to anything. In the standard, each map class
+ has a corresponding set class. E.g.,
+ <code class="classname">std::map&lt;int, char&gt;</code> maps each
+ <code class="classname">int</code> to a <code class="classname">char</code>, but
+ <code class="classname">std::set&lt;int, char&gt;</code> simply stores
+ <code class="classname">int</code>s. In this library, however, there are no
+ distinct classes for maps and sets. Instead, an associative
+ container's <code class="classname">Mapped</code> template parameter is a policy: if
+ it is instantiated by <code class="classname">null_type</code>, then it
+ is a "set"; otherwise, it is a "map". E.g.,
+ </p><pre class="programlisting">
+ cc_hash_table&lt;int, char&gt;
+ </pre><p>
+ is a "map" mapping each <span class="type">int</span> value to a <span class="type">
+ char</span>, but
+ </p><pre class="programlisting">
+ cc_hash_table&lt;int, null_type&gt;
+ </pre><p>
+ is a type that uniquely stores <span class="type">int</span> values.
+ </p><p>Once the <code class="classname">Mapped</code> template parameter is instantiated
+ by <code class="classname">null_type</code>, then
+ the "set" acts very similarly to the standard's sets - it does not
+ map each key to a distinct <code class="classname">null_type</code> object. Also,
+ , the container's <span class="type">value_type</span> is essentially
+ its <span class="type">key_type</span> - just as with the standard's sets
+ .</p><p>
+ The standard's multimaps and multisets allow, respectively,
+ non-uniquely mapping keys and non-uniquely storing keys. As
+ discussed, the
+ reasons why this might be necessary are 1) that a key might be
+ decomposed into a primary key and a secondary key, 2) that a
+ key might appear more than once, or 3) any arbitrary
+ combination of 1)s and 2)s. Correspondingly,
+ one should use 1) "maps" mapping primary keys to secondary
+ keys, 2) "maps" mapping keys to size types, or 3) any arbitrary
+ combination of 1)s and 2)s. Thus, for example, an
+ <code class="classname">std::multiset&lt;int&gt;</code> might be used to store
+ multiple instances of integers, but using this library's
+ containers, one might use
+ </p><pre class="programlisting">
+ tree&lt;int, size_t&gt;
+ </pre><p>
+ i.e., a <code class="classname">map</code> of <span class="type">int</span>s to
+ <span class="type">size_t</span>s.
+ </p><p>
+ These "multimaps" and "multisets" might be confusing to
+ anyone familiar with the standard's <code class="classname">std::multimap</code> and
+ <code class="classname">std::multiset</code>, because there is no clear
+ correspondence between the two. For example, in some cases
+ where one uses <code class="classname">std::multiset</code> in the standard, one might use
+ in this library a "multimap" of "multisets" - i.e., a
+ container that maps primary keys each to an associative
+ container that maps each secondary key to the number of times
+ it occurs.
+ </p><p>
+ When one uses a "multimap," one should choose with care the
+ type of container used for secondary keys.
+ </p></div><div class="section" title="Alternatives to std::multiset and std::multimap"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.multi"></a>Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></h5></div></div></div><p>
+ Brace onself: this library does not contain containers like
+ <code class="classname">std::multimap</code> or
+ <code class="classname">std::multiset</code>. Instead, these data
+ structures can be synthesized via manipulation of the
+ <code class="classname">Mapped</code> template parameter.
+ </p><p>
+ 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><p>
+ Stepping back a bit, and starting in from the beginning.
+ </p><p>
+ Maps (or sets) allow mapping (or storing) unique-key values.
+ The standard library also supplies associative containers which
+ map (or store) multiple values with equivalent keys:
+ <code class="classname">std::multimap</code>, <code class="classname">std::multiset</code>,
+ <code class="classname">std::tr1::unordered_multimap</code>, and
+ <code class="classname">unordered_multiset</code>. We first discuss how these might
+ be used, then why we think it is best to avoid them.
+ </p><p>
+ Suppose one builds a simple bank-account application that
+ records for each client (identified by an <code class="classname">std::string</code>)
+ and account-id (marked by an <span class="type">unsigned long</span>) -
+ the balance in the account (described by a
+ <span class="type">float</span>). Suppose further that ordering this
+ information is not useful, so a hash-based container is
+ preferable to a tree based container. Then one can use
+ </p><pre class="programlisting">
+ std::tr1::unordered_map&lt;std::pair&lt;std::string, unsigned long&gt;, float, ...&gt;
+ </pre><p>
+ which hashes every combination of client and account-id. This
+ might work well, except for the fact that it is now impossible
+ to efficiently list all of the accounts of a specific client
+ (this would practically require iterating over all
+ entries). Instead, one can use
+ </p><pre class="programlisting">
+ std::tr1::unordered_multimap&lt;std::pair&lt;std::string, unsigned long&gt;, float, ...&gt;
+ </pre><p>
+ which hashes every client, and decides equivalence based on
+ client only. This will ensure that all accounts belonging to a
+ specific user are stored consecutively.
+ </p><p>
+ Also, suppose one wants an integers' priority queue
+ (a container that supports <code class="function">push</code>,
+ <code class="function">pop</code>, and <code class="function">top</code> operations, the last of which
+ returns the largest <span class="type">int</span>) that also supports
+ operations such as <code class="function">find</code> and <code class="function">lower_bound</code>. A
+ reasonable solution is to build an adapter over
+ <code class="classname">std::set&lt;int&gt;</code>. In this adapter,
+ <code class="function">push</code> will just call the tree-based
+ associative container's <code class="function">insert</code> method; <code class="function">pop</code>
+ will call its <code class="function">end</code> method, and use it to return the
+ preceding element (which must be the largest). Then this might
+ work well, except that the container object cannot hold
+ multiple instances of the same integer (<code class="function">push(4)</code>,
+ will be a no-op if <code class="constant">4</code> is already in the
+ container object). If multiple keys are necessary, then one
+ might build the adapter over an
+ <code class="classname">std::multiset&lt;int&gt;</code>.
+ </p><p>
+ The standard library's non-unique-mapping containers are useful
+ when (1) a key can be decomposed in to a primary key and a
+ secondary key, (2) a key is needed multiple times, or (3) any
+ combination of (1) and (2).
+ </p><p>
+ The graphic below shows how the standard library's container
+ design works internally; in this figure nodes shaded equally
+ represent equivalent-key values. Equivalent keys are stored
+ consecutively using the properties of the underlying data
+ structure: binary search trees (label A) store equivalent-key
+ values consecutively (in the sense of an in-order walk)
+ naturally; collision-chaining hash tables (label B) store
+ equivalent-key values in the same bucket, the bucket can be
+ arranged so that equivalent-key values are consecutive.
+ </p><div class="figure"><a id="idp17962720"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
+ Put differently, the standards' non-unique mapping
+ associative-containers are associative containers that map
+ primary keys to linked lists that are embedded into the
+ container. The graphic below shows again the two
+ containers from the first graphic above, this time with
+ the embedded linked lists of the grayed nodes marked
+ explicitly.
+ </p><div class="figure"><a id="fig.pbds_embedded_lists_2"></a><p class="title"><strong>Figure 22.9. 
+ Effect of embedded lists in
+ <code class="classname">std::multimap</code>
+ </strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_2.png" align="middle" alt="Effect of embedded lists in std::multimap" /></div></div></div><br class="figure-break" /><p>
+ These embedded linked lists have several disadvantages.
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ The underlying data structure embeds the linked lists
+ according to its own consideration, which means that the
+ search path for a value might include several different
+ equivalent-key values. For example, the search path for the
+ the black node in either of the first graphic, labels A or B,
+ includes more than a single gray node.
+ </p></li><li class="listitem"><p>
+ The links of the linked lists are the underlying data
+ structures' nodes, which typically are quite structured. In
+ the case of tree-based containers (the grapic above, label
+ B), each "link" is actually a node with three pointers (one
+ to a parent and two to children), and a
+ relatively-complicated iteration algorithm. The linked
+ lists, therefore, can take up quite a lot of memory, and
+ iterating over all values equal to a given key (through the
+ return value of the standard
+ library's <code class="function">equal_range</code>) can be
+ expensive.
+ </p></li><li class="listitem"><p>
+ The primary key is stored multiply; this uses more memory.
+ </p></li><li class="listitem"><p>
+ Finally, the interface of this design excludes several
+ useful underlying data structures. Of all the unordered
+ self-organizing data structures, practically only
+ collision-chaining hash tables can (efficiently) guarantee
+ that equivalent-key values are stored consecutively.
+ </p></li></ol></div><p>
+ The above reasons hold even when the ratio of secondary keys to
+ primary keys (or average number of identical keys) is small, but
+ when it is large, there are more severe problems:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ The underlying data structures order the links inside each
+ embedded linked-lists according to their internal
+ considerations, which effectively means that each of the
+ links is unordered. Irrespective of the underlying data
+ structure, searching for a specific value can degrade to
+ linear complexity.
+ </p></li><li class="listitem"><p>
+ Similarly to the above point, it is impossible to apply
+ to the secondary keys considerations that apply to primary
+ keys. For example, it is not possible to maintain secondary
+ keys by sorted order.
+ </p></li><li class="listitem"><p>
+ While the interface "understands" that all equivalent-key
+ values constitute a distinct list (through
+ <code class="function">equal_range</code>), the underlying data
+ structure typically does not. This means that operations such
+ as erasing from a tree-based container all values whose keys
+ are equivalent to a a given key can be super-linear in the
+ size of the tree; this is also true also for several other
+ operations that target a specific list.
+ </p></li></ol></div><p>
+ In this library, all associative containers map
+ (or store) unique-key values. One can (1) map primary keys to
+ secondary associative-containers (containers of
+ secondary keys) or non-associative containers (2) map identical
+ keys to a size-type representing the number of times they
+ occur, or (3) any combination of (1) and (2). Instead of
+ allowing multiple equivalent-key values, this library
+ supplies associative containers based on underlying
+ data structures that are suitable as secondary
+ associative-containers.
+ </p><p>
+ In the figure below, labels A and B show the equivalent
+ underlying data structures in this library, as mapped to the
+ first graphic above. Labels A and B, respectively. Each shaded
+ box represents some size-type or secondary
+ associative-container.
+ </p><div class="figure"><a id="idp17986224"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
+ In the first example above, then, one would use an associative
+ container mapping each user to an associative container which
+ maps each application id to a start time (see
+ <code class="filename">example/basic_multimap.cc</code>); in the second
+ example, one would use an associative container mapping
+ each <code class="classname">int</code> to some size-type indicating the
+ number of times it logically occurs
+ (see <code class="filename">example/basic_multiset.cc</code>.
+ </p><p>
+ See the discussion in list-based container types for containers
+ especially suited as secondary associative-containers.
+ </p></div></div><div class="section" title="Iterator Semantics"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.iterator_semantics"></a>Iterator Semantics</h4></div></div></div><div class="section" title="Point and Range Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.point_and_range"></a>Point and Range Iterators</h5></div></div></div><p>
+ Iterator concepts are bifurcated in this design, and are
+ comprised of point-type and range-type iteration.
+ </p><p>
+ A point-type iterator is an iterator that refers to a specific
+ element as returned through an
+ associative-container's <code class="function">find</code> method.
+ </p><p>
+ A range-type iterator is an iterator that is used to go over a
+ sequence of elements, as returned by a container's
+ <code class="function">find</code> method.
+ </p><p>
+ 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 C++ standard library
+ components), but in this design, it is made explicit. They are
+ distinct types.
+ </p></div><div class="section" title="Distinguishing Point and Range Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.both"></a>Distinguishing Point and Range Iterators</h5></div></div></div><p>When using this library, is necessary to differentiate
+ between two types of methods and iterators: point-type methods and
+ iterators, and range-type methods and iterators. Each associative
+ container's interface includes the methods:</p><pre class="programlisting">
+ point_const_iterator
+ find(const_key_reference r_key) const;
+
+ point_iterator
+ find(const_key_reference r_key);
+
+ std::pair&lt;point_iterator,bool&gt;
+ insert(const_reference r_val);
+ </pre><p>The relationship between these iterator types varies between
+ container types. The figure below
+ shows the most general invariant between point-type and
+ range-type iterators: In <span class="emphasis"><em>A</em></span> <code class="literal">iterator</code>, can
+ always be converted to <code class="literal">point_iterator</code>. In <span class="emphasis"><em>B</em></span>
+ shows invariants for order-preserving containers: point-type
+ iterators are synonymous with range-type iterators.
+ Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set"
+ containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18006032"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
+ (hash-based associative containers) lack movement
+ operators, such as <code class="literal">operator++</code> - in fact, this
+ is the reason why this library differentiates from the standard C++ librarys
+ design on this point.</p><p>Typically, one can determine an iterator's movement
+ capabilities using
+ <code class="literal">std::iterator_traits&lt;It&gt;iterator_category</code>,
+ which is a <code class="literal">struct</code> indicating the iterator's
+ movement capabilities. Unfortunately, none of the standard predefined
+ categories reflect a pointer's <span class="emphasis"><em>not</em></span> having any
+ movement capabilities whatsoever. Consequently,
+ <code class="literal">pb_ds</code> adds a type
+ <code class="literal">trivial_iterator_tag</code> (whose name is taken from
+ a concept in C++ standardese, which is the category of iterators
+ with no movement capabilities.) All other standard C++ library
+ tags, such as <code class="literal">forward_iterator_tag</code> retain their
+ common use.</p></div><div class="section" title="Invalidation Guarantees"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.design.concepts.invalidation"></a>Invalidation Guarantees</h5></div></div></div><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 this design, one can query a container (in compile time) about
+ its invalidation guarantees.
+ </p><p>
+ Given three different types of associative containers, a modifying
+ operation (in that example, <code class="function">erase</code>) invalidated
+ iterators in three different ways: the iterator of one container
+ remained completely valid - it could be de-referenced and
+ incremented; the iterator of a different container could not even be
+ de-referenced; the iterator of the third container could be
+ de-referenced, but its "next" iterator changed unpredictably.
+ </p><p>
+ Distinguishing between find and range types allows fine-grained
+ invalidation guarantees, because these questions correspond exactly
+ to the question of whether point-type iterators and range-type
+ iterators are valid. The graphic below shows tags corresponding to
+ different types of invalidation guarantees.
+ </p><div class="figure"><a id="idp18019376"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <code class="classname">basic_invalidation_guarantee</code>
+ corresponds to a basic guarantee that a point-type iterator,
+ a found pointer, or a found reference, remains valid as long
+ as the container object is not modified.
+ </p></li><li class="listitem"><p>
+ <code class="classname">point_invalidation_guarantee</code>
+ corresponds to a guarantee that a point-type iterator, a
+ found pointer, or a found reference, remains valid even if
+ the container object is modified.
+ </p></li><li class="listitem"><p>
+ <code class="classname">range_invalidation_guarantee</code>
+ corresponds to a guarantee that a range-type iterator remains
+ valid even if the container object is modified.
+ </p></li></ul></div><p>To find the invalidation guarantee of a
+ container, one can use</p><pre class="programlisting">
+ typename container_traits&lt;Cntnr&gt;::invalidation_guarantee
+ </pre><p>Note that this hierarchy corresponds to the logic it
+ represents: if a container has range-invalidation guarantees,
+ then it must also have find invalidation guarantees;
+ correspondingly, its invalidation guarantee (in this case
+ <code class="classname">range_invalidation_guarantee</code>)
+ can be cast to its base class (in this case <code class="classname">point_invalidation_guarantee</code>).
+ This means that this this hierarchy can be used easily using
+ standard metaprogramming techniques, by specializing on the
+ type of <code class="literal">invalidation_guarantee</code>.</p><p>
+ These types of problems were addressed, in a more general
+ setting, in <a class="xref" href="policy_data_structures.html#biblio.meyers96more" title="More Effective C++: 35 New Ways to Improve Your Programs and Designs">[biblio.meyers96more]</a> - Item 2. In
+ our opinion, an invalidation-guarantee hierarchy would solve
+ these problems in all container types - not just associative
+ containers.
+ </p></div></div><div class="section" title="Genericity"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.genericity"></a>Genericity</h4></div></div></div><p>
+ The design attempts to address the following problem of
+ data-structure genericity. When writing a function manipulating
+ a generic container object, what is the behavior of the object?
+ Suppose one writes
+ </p><pre class="programlisting">
+ template&lt;typename Cntnr&gt;
+ void
+ some_op_sequence(Cntnr &amp;r_container)
+ {
+ ...
+ }
+ </pre><p>
+ then one needs to address the following questions in the body
+ of <code class="function">some_op_sequence</code>:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Which types and methods does <code class="literal">Cntnr</code> support?
+ Containers based on hash tables can be queries for the
+ hash-functor type and object; this is meaningless for tree-based
+ containers. Containers based on trees can be split, joined, or
+ can erase iterators and return the following iterator; this
+ cannot be done by hash-based containers.
+ </p></li><li class="listitem"><p>
+ What are the exception and invalidation guarantees
+ of <code class="literal">Cntnr</code>? A container based on a probing
+ hash-table invalidates all iterators when it is modified; this
+ is not the case for containers based on node-based
+ trees. Containers based on a node-based tree can be split or
+ joined without exceptions; this is not the case for containers
+ based on vector-based trees.
+ </p></li><li class="listitem"><p>
+ How does the container maintain its elements? Tree-based and
+ Trie-based containers store elements by key order; others,
+ typically, do not. A container based on a splay trees or lists
+ with update policies "cache" "frequently accessed" elements;
+ containers based on most other underlying data structures do
+ not.
+ </p></li><li class="listitem"><p>
+ How does one query a container about characteristics and
+ capabilities? What is the relationship between two different
+ data structures, if anything?
+ </p></li></ul></div><p>The remainder of this section explains these issues in
+ detail.</p><div class="section" title="Tag"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.tag"></a>Tag</h5></div></div></div><p>
+ Tags are very useful for manipulating generic types. For example, if
+ <code class="literal">It</code> is an iterator class, then <code class="literal">typename
+ It::iterator_category</code> or <code class="literal">typename
+ std::iterator_traits&lt;It&gt;::iterator_category</code> will
+ yield its category, and <code class="literal">typename
+ std::iterator_traits&lt;It&gt;::value_type</code> will yield its
+ value type.
+ </p><p>
+ This library contains a container tag hierarchy corresponding to the
+ diagram below.
+ </p><div class="figure"><a id="idp18049600"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
+ Given any container <span class="type">Cntnr</span>, the tag of
+ the underlying data structure can be found via <code class="literal">typename
+ Cntnr::container_category</code>.
+ </p></div><div class="section" title="Traits"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.traits"></a>Traits</h5></div></div></div><p></p><p>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <code class="literal">Cntnr</code>, then <code class="literal">&lt;Cntnr&gt;</code>
+ is a traits class identifying the properties of the
+ container.</p><p>To find if a container can throw when a key is erased (which
+ is true for vector-based trees, for example), one can
+ use
+ </p><pre class="programlisting">container_traits&lt;Cntnr&gt;::erase_can_throw</pre><p>
+ Some of the definitions in <code class="classname">container_traits</code>
+ are dependent on other
+ definitions. If <code class="classname">container_traits&lt;Cntnr&gt;::order_preserving</code>
+ is <code class="constant">true</code> (which is the case for containers
+ based on trees and tries), then the container can be split or
+ joined; in this
+ case, <code class="classname">container_traits&lt;Cntnr&gt;::split_join_can_throw</code>
+ indicates whether splits or joins can throw exceptions (which is
+ true for vector-based trees);
+ otherwise <code class="classname">container_traits&lt;Cntnr&gt;::split_join_can_throw</code>
+ will yield a compilation error. (This is somewhat similar to a
+ compile-time version of the COM model).
+ </p></div></div></div><div class="section" title="By Container"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.container"></a>By Container</h3></div></div></div><div class="section" title="hash"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.hash"></a>hash</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.interface"></a>Interface</h5></div></div></div><p>
+ The collision-chaining hash-based container has the
+ following declaration.</p><pre class="programlisting">
+ template&lt;
+ typename Key,
+ typename Mapped,
+ typename Hash_Fn = std::hash&lt;Key&gt;,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+ typename Comb_Hash_Fn = direct_mask_range_hashing&lt;&gt;
+ typename Resize_Policy = default explained below.
+ bool Store_Hash = false,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class cc_hash_table;
+ </pre><p>The parameters have the following meaning:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Key</code> is the key type.</p></li><li class="listitem"><p><code class="classname">Mapped</code> is the mapped-policy.</p></li><li class="listitem"><p><code class="classname">Hash_Fn</code> is a key hashing functor.</p></li><li class="listitem"><p><code class="classname">Eq_Fn</code> is a key equivalence functor.</p></li><li class="listitem"><p><code class="classname">Comb_Hash_Fn</code> is a range-hashing_functor;
+ it describes how to translate hash values into positions
+ within the table. </p></li><li class="listitem"><p><code class="classname">Resize_Policy</code> describes how a container object
+ should change its internal size. </p></li><li class="listitem"><p><code class="classname">Store_Hash</code> indicates whether the hash value
+ should be stored with each entry. </p></li><li class="listitem"><p><code class="classname">Allocator</code> is an allocator
+ type.</p></li></ol></div><p>The probing hash-based container has the following
+ declaration.</p><pre class="programlisting">
+ template&lt;
+ typename Key,
+ typename Mapped,
+ typename Hash_Fn = std::hash&lt;Key&gt;,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+ typename Comb_Probe_Fn = direct_mask_range_hashing&lt;&gt;
+ typename Probe_Fn = default explained below.
+ typename Resize_Policy = default explained below.
+ bool Store_Hash = false,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class gp_hash_table;
+ </pre><p>The parameters are identical to those of the
+ collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe
+ sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
+ other parameters, and are explained below.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section" title="Hash Policies"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section" title="General"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
+ involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18089744"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
+ range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the
+ strings of 3 characters). A hash-table algorithm needs to map
+ elements of U "uniformly" into the range [0,..., m -
+ 1] (where m is a non-negative integral value, and
+ is, in general, time varying). I.e., the algorithm needs
+ a ranged-hash function</p><p>
+ f : U × Z<sub>+</sub> → Z<sub>+</sub>
+ </p><p>such that for any u in U ,</p><p>0 ≤ f(u, m) ≤ m - 1</p><p>and which has "good uniformity" properties (say
+ <a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>.)
+ One
+ common solution is to use the composition of the hash
+ function</p><p>h : U → Z<sub>+</sub> ,</p><p>which maps elements of U into the non-negative
+ integrals, and</p><p>g : Z<sub>+</sub> × Z<sub>+</sub> →
+ Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
+ range upper-bound into a non-negative integral in the range
+ between 0 (inclusive) and the range upper bound (exclusive),
+ i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idp18103552"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
+ f(u , m) = g(h(u), m)
+ </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
+ h, f can always be composed (however the converse
+ is not true). The standard's hash-based containers allow specifying
+ a hash function, and use a hard-wired range-hashing function;
+ the ranged-hash function is implicitly composed.</p><p>The above describes the case where a key is to be mapped
+ into a single position within a hash table, e.g.,
+ in a collision-chaining table. In other cases, a key is to be
+ mapped into a sequence of positions within a table,
+ e.g., in a probing table. Similar terms apply in this
+ case: the table requires a ranged probe function,
+ mapping a key into a sequence of positions withing the table.
+ This is typically achieved by composing a hash function
+ mapping the key into a non-negative integral type, a
+ probe function transforming the hash value into a
+ sequence of hash values, and a range-hashing function
+ transforming the sequence of hash values into a sequence of
+ positions.</p></div><div class="section" title="Range Hashing"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
+ division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
+ as</p><div class="equation"><a id="idp18109440"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r mod m
+ </span></div></div><br class="equation-break" /><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and
+ v (typically powers of 2), and some a. Each of
+ these range-hashing functions works best for some different
+ setting.</p><p>The division method (see above) is a
+ very common choice. However, even this single method can be
+ implemented in two very different ways. It is possible to
+ implement using the low
+ level % (modulo) operation (for any m), or the
+ low level &amp; (bit-mask) operation (for the case where
+ m is a power of 2), i.e.,</p><div class="equation"><a id="idp18113952"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r % m
+ </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18115776"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r &amp; m - 1, (with m =
+ 2<sup>k</sup> for some k)
+ </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
+ m a prime far from a power of 2, g(r, m) is
+ affected by all the bits of r (minimizing the chance of
+ collision). It has the disadvantage of using the costly modulo
+ operation. This method is hard-wired into SGI's implementation
+ .</p><p>The &amp; (bit-mask) implementation has the advantage of
+ relying on the fast bit-wise and operation. It has the
+ disadvantage that for g(r, m) is affected only by the
+ low order bits of r. This method is hard-wired into
+ Dinkumware's implementation.</p></div><div class="section" title="Ranged Hash"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.ranged"></a>Ranged Hash</h6></div></div></div><p>In cases it is beneficial to allow the
+ client to directly specify a ranged-hash hash function. It is
+ true, that the writer of the ranged-hash function cannot rely
+ on the values of m having specific numerical properties
+ suitable for hashing (in the sense used in <a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), since
+ the values of m are determined by a resize policy with
+ possibly orthogonal considerations.</p><p>There are two cases where a ranged-hash function can be
+ superior. The firs is when using perfect hashing: the
+ second is when the values of m can be used to estimate
+ the "general" number of distinct values required. This is
+ described in the following.</p><p>Let</p><p>
+ s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
+ </p><p>be a string of t characters, each of which is from
+ domain S. Consider the following ranged-hash
+ function:</p><div class="equation"><a id="idp18125408"></a><p class="title"><strong>Equation 22.5. 
+ A Standard String Hash Function
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ f<sub>1</sub>(s, m) = ∑ <sub>i =
+ 0</sub><sup>t - 1</sup> s<sub>i</sub> a<sup>i</sup> mod m
+ </span></div></div><br class="equation-break" /><p>where a is some non-negative integral value. This is
+ the standard string-hashing function used in SGI's
+ implementation (with a = 5). Its advantage is that
+ it takes into account all of the characters of the string.</p><p>Now assume that s is the string representation of a
+ of a long DNA sequence (and so S = {'A', 'C', 'G',
+ 'T'}). In this case, scanning the entire string might be
+ prohibitively expensive. A possible alternative might be to use
+ only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idp18131552"></a><p class="title"><strong>Equation 22.6. 
+ Only k String DNA Hash
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ f<sub>2</sub>(s, m) = ∑ <sub>i
+ = 0</sub><sup>k - 1</sup> s<sub>i</sub> a<sup>i</sup> mod m
+ </span></div></div><br class="equation-break" /><p>requiring scanning over only</p><p>k = log<sub>4</sub>( m )</p><p>characters.</p><p>Other more elaborate hash-functions might scan k
+ characters starting at a random position (determined at each
+ resize), or scanning k random positions (determined at
+ each resize), i.e., using</p><p>f<sub>3</sub>(s, m) = ∑ <sub>i =
+ r</sub>0<sup>r<sub>0</sub> + k - 1</sup> s<sub>i</sub>
+ a<sup>i</sup> mod m ,</p><p>or</p><p>f<sub>4</sub>(s, m) = ∑ <sub>i = 0</sub><sup>k -
+ 1</sup> s<sub>r</sub>i a<sup>r<sub>i</sub></sup> mod
+ m ,</p><p>respectively, for r<sub>0</sub>,..., r<sub>k-1</sub>
+ each in the (inclusive) range [0,...,t-1].</p><p>It should be noted that the above functions cannot be
+ decomposed as per a ranged hash composed of hash and range hashing.</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.implementation"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of
+ the above in this library. It first explains range-hashing
+ functions in collision-chaining tables, then ranged-hash
+ functions in collision-chaining tables, then probing-based
+ tables, and finally lists the relevant classes in this
+ library.</p><div class="section" title="Range-Hashing and Ranged-Hashes in Collision-Chaining Tables"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.collision-chaining"></a>
+ Range-Hashing and Ranged-Hashes in Collision-Chaining Tables
+ </h6></div></div></div><p><code class="classname">cc_hash_table</code> is
+ parametrized by <code class="classname">Hash_Fn</code> and <code class="classname">Comb_Hash_Fn</code>, a
+ hash functor and a combining hash functor, respectively.</p><p>In general, <code class="classname">Comb_Hash_Fn</code> is considered a
+ range-hashing functor. <code class="classname">cc_hash_table</code>
+ synthesizes a ranged-hash function from <code class="classname">Hash_Fn</code> and
+ <code class="classname">Comb_Hash_Fn</code>. The figure below shows an <code class="classname">insert</code> sequence
+ diagram for this case. The user inserts an element (point A),
+ the container transforms the key into a non-negative integral
+ using the hash functor (points B and C), and transforms the
+ result into a position using the combining functor (points D
+ and E).</p><div class="figure"><a id="idp18154176"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
+ hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be
+ a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
+ diagram. The user inserts an element (point A), the container
+ transforms the key into a position using the combining functor
+ (points B and C).</p><div class="figure"><a id="idp18161232"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section" title="Probing tables"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
+ Probing tables
+ </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
+ <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
+ and <code class="classname">Comb_Probe_Fn</code>. As before, if
+ <code class="classname">Hash_Fn</code> and <code class="classname">Probe_Fn</code>
+ are both <code class="classname">null_type</code>, then
+ <code class="classname">Comb_Probe_Fn</code> is a ranged-probe
+ functor. Otherwise, <code class="classname">Hash_Fn</code> is a hash
+ functor, <code class="classname">Probe_Fn</code> is a functor for offsets
+ from a hash value, and <code class="classname">Comb_Probe_Fn</code>
+ transforms a probe sequence into a sequence of positions within
+ the table.</p></div><div class="section" title="Pre-Defined Policies"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.predefined"></a>
+ Pre-Defined Policies
+ </h6></div></div></div><p>This library contains some pre-defined classes
+ implementing range-hashing and probing functions:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">direct_mask_range_hashing</code>
+ and <code class="classname">direct_mod_range_hashing</code>
+ are range-hashing functions based on a bit-mask and a modulo
+ operation, respectively.</p></li><li class="listitem"><p><code class="classname">linear_probe_fn</code>, and
+ <code class="classname">quadratic_probe_fn</code> are
+ a linear probe and a quadratic probe function,
+ respectively.</p></li></ol></div><p>
+ The graphic below shows the relationships.
+ </p><div class="figure"><a id="idp18178048"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section" title="Resize Policies"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section" title="General"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
+ shrink. It is necessary to specify policies to determine how
+ and when a hash table should change its size. Usually, resize
+ policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table
+ should grow (e.g., it should multiply by powers of
+ 2).</p></li><li class="listitem"><p>A trigger policy indicating when a hash
+ table should grow (e.g., a load factor is
+ exceeded).</p></li></ol></div></div><div class="section" title="Size Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.size"></a>Size Policies</h6></div></div></div><p>Size policies determine how a hash table changes size. These
+ policies are simple, and there are relatively few sensible
+ options. An exponential-size policy (with the initial size and
+ growth factors both powers of 2) works well with a mask-based
+ range-hashing function, and is the
+ hard-wired policy used by Dinkumware. A
+ prime-list based policy works well with a modulo-prime range
+ hashing function and is the hard-wired policy used by SGI's
+ implementation.</p></div><div class="section" title="Trigger Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.trigger"></a>Trigger Policies</h6></div></div></div><p>Trigger policies determine when a hash table changes size.
+ Following is a description of two policies: load-check
+ policies, and collision-check policies.</p><p>Load-check policies are straightforward. The user specifies
+ two factors, Α<sub>min</sub> and
+ Α<sub>max</sub>, and the hash table maintains the
+ invariant that</p><p>Α<sub>min</sub> ≤ (number of
+ stored elements) / (hash-table size) ≤
+ Α<sub>max</sub><em><span class="remark">load factor min max</span></em></p><p>Collision-check policies work in the opposite direction of
+ load-check policies. They focus on keeping the number of
+ collisions moderate and hoping that the size of the table will
+ not grow very large, instead of keeping a moderate load-factor
+ and hoping that the number of collisions will be small. A
+ maximal collision-check policy resizes when the longest
+ probe-sequence grows too large.</p><p>Consider the graphic below. Let the size of the hash table
+ be denoted by m, the length of a probe sequence be denoted by k,
+ and some load factor be denoted by Α. We would like to
+ calculate the minimal length of k, such that if there were Α
+ m elements in the hash table, a probe sequence of length k would
+ be found with probability at most 1/m.</p><div class="figure"><a id="idp18197088"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
+ k appears in bin i by p<sub>i</sub>, the
+ length of the probe sequence of bin i by
+ l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18202592"></a><p class="title"><strong>Equation 22.7. 
+ Probability of Probe Sequence of Length k
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ p<sub>1</sub> =
+ </span></div></div><br class="equation-break" /><p>P(l<sub>1</sub> ≥ k) =</p><p>
+ P(l<sub>1</sub> ≥ α ( 1 + k / α - 1) ≤ (a)
+ </p><p>
+ e ^ ( - ( α ( k / α - 1 )<sup>2</sup> ) /2)
+ </p><p>where (a) follows from the Chernoff bound (<a class="xref" href="policy_data_structures.html#biblio.motwani95random" title="Randomized Algorithms">[biblio.motwani95random]</a>). To
+ calculate the probability that some bin contains a probe
+ sequence greater than k, we note that the
+ l<sub>i</sub> are negatively-dependent
+ (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
+ . Let
+ I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18209360"></a><p class="title"><strong>Equation 22.8. 
+ Probability Probe Sequence in Some Bin
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) =
+ </span></div></div><br class="equation-break" /><p>P ( ∑ <sub>i = 1</sub><sup>m</sup>
+ I(l<sub>i</sub> ≥ k) ≥ 1 ) =</p><p>P ( ∑ <sub>i = 1</sub><sup>m</sup> I (
+ l<sub>i</sub> ≥ k ) ≥ m p<sub>1</sub> ( 1 + 1 / (m
+ p<sub>1</sub>) - 1 ) ) ≤ (a)</p><p>e ^ ( ( - m p<sub>1</sub> ( 1 / (m p<sub>1</sub>)
+ - 1 ) <sup>2</sup> ) / 2 ) ,</p><p>where (a) follows from the fact that the Chernoff bound can
+ be applied to negatively-dependent variables (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>). Inserting the first probability
+ equation into the second one, and equating with 1/m, we
+ obtain</p><p>k ~ √ ( 2 α ln 2 m ln(m) )
+ ) .</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of the
+ above in this library. It first describes resize policies and
+ their decomposition into trigger and size policies, then
+ describes pre-defined classes, and finally discusses controlled
+ access the policies' internals.</p><div class="section" title="Decomposition"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.decomposition"></a>Decomposition</h6></div></div></div><p>Each hash-based container is parametrized by a
+ <code class="classname">Resize_Policy</code> parameter; the container derives
+ <code class="classname">public</code>ly from <code class="classname">Resize_Policy</code>. For
+ example:</p><pre class="programlisting">
+ cc_hash_table&lt;typename Key,
+ typename Mapped,
+ ...
+ typename Resize_Policy
+ ...&gt; : public Resize_Policy
+ </pre><p>As a container object is modified, it continuously notifies
+ its <code class="classname">Resize_Policy</code> base of internal changes
+ (e.g., collisions encountered and elements being
+ inserted). It queries its <code class="classname">Resize_Policy</code> base whether
+ it needs to be resized, and if so, to what size.</p><p>The graphic below shows a (possible) sequence diagram
+ of an insert operation. The user inserts an element; the hash
+ table notifies its resize policy that a search has started
+ (point A); in this case, a single collision is encountered -
+ the table notifies its resize policy of this (point B); the
+ container finally notifies its resize policy that the search
+ has ended (point C); it then queries its resize policy whether
+ a resize is needed, and if so, what is the new size (points D
+ to G); following the resize, it notifies the policy that a
+ resize has completed (point H); finally, the element is
+ inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18227776"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
+ decomposed to a size policy and a trigger policy. Consequently,
+ the library contains a single class for instantiating a resize
+ policy: <code class="classname">hash_standard_resize_policy</code>
+ is parametrized by <code class="classname">Size_Policy</code> and
+ <code class="classname">Trigger_Policy</code>, derives <code class="classname">public</code>ly from
+ both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
+ to these policies.</p><p>The two graphics immediately below show sequence diagrams
+ illustrating the interaction between the standard resize policy
+ and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18235600"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
+ diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idp18239760"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
+ diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section" title="Predefined Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
+ instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code>
+ implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
+ implements a collision check trigger policy.</p></li><li class="listitem"><p><code class="classname">hash_exponential_size_policy</code>
+ implements an exponential-size policy (which should be used
+ with mask range hashing).</p></li><li class="listitem"><p><code class="classname">hash_prime_size_policy</code>
+ implementing a size policy based on a sequence of primes
+ (which should
+ be used with mod range hashing</p></li></ol></div><p>The graphic below gives an overall picture of the resize-related
+ classes. <code class="classname">basic_hash_table</code>
+ is parametrized by <code class="classname">Resize_Policy</code>, which it subclasses
+ publicly. This class is currently instantiated only by <code class="classname">hash_standard_resize_policy</code>.
+ <code class="classname">hash_standard_resize_policy</code>
+ itself is parametrized by <code class="classname">Trigger_Policy</code> and
+ <code class="classname">Size_Policy</code>. Currently, <code class="classname">Trigger_Policy</code> is
+ instantiated by <code class="classname">hash_load_check_resize_trigger</code>,
+ or <code class="classname">cc_hash_max_collision_check_resize_trigger</code>;
+ <code class="classname">Size_Policy</code> is instantiated by <code class="classname">hash_exponential_size_policy</code>,
+ or <code class="classname">hash_prime_size_policy</code>.</p></div><div class="section" title="Controling Access to Internals"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.internals"></a>Controling Access to Internals</h6></div></div></div><p>There are cases where (controlled) access to resize
+ policies' internals is beneficial. E.g., it is sometimes
+ useful to query a hash-table for the table's actual size (as
+ opposed to its <code class="function">size()</code> - the number of values it
+ currently holds); it is sometimes useful to set a table's
+ initial size, externally resize it, or change load factors.</p><p>Clearly, supporting such methods both decreases the
+ encapsulation of hash-based containers, and increases the
+ diversity between different associative-containers' interfaces.
+ Conversely, omitting such methods can decrease containers'
+ flexibility.</p><p>In order to avoid, to the extent possible, the above
+ conflict, the hash-based containers themselves do not address
+ any of these questions; this is deferred to the resize policies,
+ which are easier to change or replace. Thus, for example,
+ neither <code class="classname">cc_hash_table</code> nor
+ <code class="classname">gp_hash_table</code>
+ contain methods for querying the actual size of the table; this
+ is deferred to <code class="classname">hash_standard_resize_policy</code>.</p><p>Furthermore, the policies themselves are parametrized by
+ template arguments that determine the methods they support
+ (
+ <a class="xref" href="policy_data_structures.html#biblio.alexandrescu01modern" title="Modern C++ Design: Generic Programming and Design Patterns Applied">[biblio.alexandrescu01modern]</a>
+ shows techniques for doing so). <code class="classname">hash_standard_resize_policy</code>
+ is parametrized by <code class="classname">External_Size_Access</code> that
+ determines whether it supports methods for querying the actual
+ size of the table or resizing it. <code class="classname">hash_load_check_resize_trigger</code>
+ is parametrized by <code class="classname">External_Load_Access</code> that
+ determines whether it supports methods for querying or
+ modifying the loads. <code class="classname">cc_hash_max_collision_check_resize_trigger</code>
+ is parametrized by <code class="classname">External_Load_Access</code> that
+ determines whether it supports methods for querying the
+ load.</p><p>Some operations, for example, resizing a container at
+ run time, or changing the load factors of a load-check trigger
+ policy, require the container itself to resize. As mentioned
+ above, the hash-based containers themselves do not contain
+ these types of methods, only their resize policies.
+ Consequently, there must be some mechanism for a resize policy
+ to manipulate the hash-based container. As the hash-based
+ container is a subclass of the resize policy, this is done
+ through virtual methods. Each hash-based container has a
+ <code class="classname">private</code> <code class="classname">virtual</code> method:</p><pre class="programlisting">
+ virtual void
+ do_resize
+ (size_type new_size);
+ </pre><p>which resizes the container. Implementations of
+ <code class="classname">Resize_Policy</code> can export public methods for resizing
+ the container externally; these methods internally call
+ <code class="classname">do_resize</code> to resize the table.</p></div></div></div><div class="section" title="Policy Interactions"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.policy_interaction"></a>Policy Interactions</h6></div></div></div><p>
+ </p><p>Hash-tables are unfortunately especially susceptible to
+ choice of policies. One of the more complicated aspects of this
+ is that poor combinations of good policies can form a poor
+ container. Following are some considerations.</p><div class="section" title="probe/size/trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.probesizetrigger"></a>probe/size/trigger</h6></div></div></div><p>Some combinations do not work well for probing containers.
+ For example, combining a quadratic probe policy with an
+ exponential size policy can yield a poor container: when an
+ element is inserted, a trigger policy might decide that there
+ is no need to resize, as the table still contains unused
+ entries; the probe sequence, however, might never reach any of
+ the unused entries.</p><p>Unfortunately, this library cannot detect such problems at
+ compilation (they are halting reducible). It therefore defines
+ an exception class <code class="classname">insert_error</code> to throw an
+ exception in this case.</p></div><div class="section" title="hash/trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.hashtrigger"></a>hash/trigger</h6></div></div></div><p>Some trigger policies are especially susceptible to poor
+ hash functions. Suppose, as an extreme case, that the hash
+ function transforms each key to the same hash value. After some
+ inserts, a collision detecting policy will always indicate that
+ the container needs to grow.</p><p>The library, therefore, by design, limits each operation to
+ one resize. For each <code class="classname">insert</code>, for example, it queries
+ only once whether a resize is needed.</p></div><div class="section" title="equivalence functors/storing hash values/hash"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.eqstorehash"></a>equivalence functors/storing hash values/hash</h6></div></div></div><p><code class="classname">cc_hash_table</code> and
+ <code class="classname">gp_hash_table</code> are
+ parametrized by an equivalence functor and by a
+ <code class="classname">Store_Hash</code> parameter. If the latter parameter is
+ <code class="classname">true</code>, then the container stores with each entry
+ a hash value, and uses this value in case of collisions to
+ determine whether to apply a hash value. This can lower the
+ cost of collision for some types, but increase the cost of
+ collisions for other types.</p><p>If a ranged-hash function or ranged probe function is
+ directly supplied, however, then it makes no sense to store the
+ hash value with each entry. This library's container will
+ fail at compilation, by design, if this is attempted.</p></div><div class="section" title="size/load-check trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.sizeloadtrigger"></a>size/load-check trigger</h6></div></div></div><p>Assume a size policy issues an increasing sequence of sizes
+ a, a q, a q<sup>1</sup>, a q<sup>2</sup>, ... For
+ example, an exponential size policy might issue the sequence of
+ sizes 8, 16, 32, 64, ...</p><p>If a load-check trigger policy is used, with loads
+ α<sub>min</sub> and α<sub>max</sub>,
+ respectively, then it is a good idea to have:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>α<sub>max</sub> ~ 1 / q</p></li><li class="listitem"><p>α<sub>min</sub> &lt; 1 / (2 q)</p></li></ol></div><p>This will ensure that the amortized hash cost of each
+ modifying operation is at most approximately 3.</p><p>α<sub>min</sub> ~ α<sub>max</sub> is, in
+ any case, a bad choice, and α<sub>min</sub> &gt;
+ α <sub>max</sub> is horrendous.</p></div></div></div></div><div class="section" title="tree"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.tree"></a>tree</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.interface"></a>Interface</h5></div></div></div><p>The tree-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;
+ typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less&lt;Key&gt;,
+ typename Tag = rb_tree_tag,
+ template&lt;
+ typename Const_Node_Iterator,
+ typename Node_Iterator,
+ typename Cmp_Fn_,
+ typename Allocator_&gt;
+ class Node_Update = null_node_update,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class tree;
+ </pre><p>The parameters have the following meaning:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Key</code> is the key type.</p></li><li class="listitem"><p><code class="classname">Mapped</code> is the mapped-policy.</p></li><li class="listitem"><p><code class="classname">Cmp_Fn</code> is a key comparison functor</p></li><li class="listitem"><p><code class="classname">Tag</code> specifies which underlying data structure
+ to use.</p></li><li class="listitem"><p><code class="classname">Node_Update</code> is a policy for updating node
+ invariants.</p></li><li class="listitem"><p><code class="classname">Allocator</code> is an allocator
+ type.</p></li></ol></div><p>The <code class="classname">Tag</code> parameter specifies which underlying
+ data structure to use. Instantiating it by <code class="classname">rb_tree_tag</code>, <code class="classname">splay_tree_tag</code>, or
+ <code class="classname">ov_tree_tag</code>,
+ specifies an underlying red-black tree, splay tree, or
+ ordered-vector tree, respectively; any other tag is illegal.
+ Note that containers based on the former two contain more types
+ and methods than the latter (e.g.,
+ <code class="classname">reverse_iterator</code> and <code class="classname">rbegin</code>), and different
+ exception and invalidation guarantees.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.details"></a>Details</h5></div></div></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node"></a>Node Invariants</h6></div></div></div><p>Consider the two trees in the graphic below, labels A and B. The first
+ is a tree of floats; the second is a tree of pairs, each
+ signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
+ these trees can support the usual queries: the first can easily
+ search for <code class="classname">0.4</code>; the second can easily search for
+ <code class="classname">std::make_pair(10, 41)</code>.</p><p>Each of these trees can efficiently support other queries.
+ The first can efficiently determine that the 2rd key in the
+ tree is <code class="constant">0.3</code>; the second can efficiently determine
+ whether any of its intervals overlaps
+ </p><pre class="programlisting">std::make_pair(29,42)</pre><p> (useful in geometric
+ applications or distributed file systems with leases, for
+ example). It should be noted that an <code class="classname">std::set</code> can
+ only solve these types of problems with linear complexity.</p><p>In order to do so, each tree stores some metadata in
+ each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
+ each node the size of the sub-tree rooted at the node; the
+ second stores at each node the maximal endpoint of the
+ intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18317728"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
+ reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata
+ should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
+ invariants. The graphic below shows how a right rotation,
+ performed on A, results in B, with nodes x and y having
+ corrupted invariants (the grayed nodes in C). The graphic shows
+ how an insert, performed on D, results in E, with nodes x and y
+ having corrupted invariants (the grayed nodes in F). It is not
+ feasible to know outside the tree the effect of an operation on
+ the nodes of the tree.</p></li><li class="listitem"><p>The search paths of standard associative containers are
+ defined by comparisons between keys, and not through
+ metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
+ can support. Besides the usual <code class="classname">find</code> method, the
+ first tree can support a <code class="classname">find_by_order</code> method, while
+ the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18327168"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
+ node iterators, and template-template node updater
+ parameters.</p><div class="section" title="Node Iterators"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
+ types, <code class="classname">const_node_iterator</code>
+ and <code class="classname">node_iterator</code>.
+ These iterators allow descending from a node to one of its
+ children. Node iterator allow search paths different than those
+ determined by the comparison functor. The <code class="classname">tree</code>
+ supports the methods:</p><pre class="programlisting">
+ const_node_iterator
+ node_begin() const;
+
+ node_iterator
+ node_begin();
+
+ const_node_iterator
+ node_end() const;
+
+ node_iterator
+ node_end();
+ </pre><p>The first pairs return node iterators corresponding to the
+ root node of the tree; the latter pair returns node iterators
+ corresponding to a just-after-leaf node.</p></div><div class="section" title="Node Updator"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.updator"></a>Node Updator</h6></div></div></div><p>The tree-based containers are parametrized by a
+ <code class="classname">Node_Update</code> template-template parameter. A
+ tree-based container instantiates
+ <code class="classname">Node_Update</code> to some
+ <code class="classname">node_update</code> class, and publicly subclasses
+ <code class="classname">node_update</code>. The graphic below shows this
+ scheme, as well as some predefined policies (which are explained
+ below).</p><div class="figure"><a id="idp18340336"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
+ <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
+ the type of metadata it requires. For order statistics,
+ e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
+ The tree defines within each node a <code class="classname">metadata_type</code>
+ object.</p><p><code class="classname">node_update</code> must also define the following method
+ for restoring node invariants:</p><pre class="programlisting">
+ void
+ operator()(node_iterator nd_it, const_node_iterator end_nd_it)
+ </pre><p>In this method, <code class="varname">nd_it</code> is a
+ <code class="classname">node_iterator</code> corresponding to a node whose
+ A) all descendants have valid invariants, and B) its own
+ invariants might be violated; <code class="classname">end_nd_it</code> is
+ a <code class="classname">const_node_iterator</code> corresponding to a
+ just-after-leaf node. This method should correct the node
+ invariants of the node pointed to by
+ <code class="classname">nd_it</code>. For example, say node x in the
+ graphic below label A has an invalid invariant, but its' children,
+ y and z have valid invariants. After the invocation, all three
+ nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18352000"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
+ it invokes this method in its <code class="classname">node_update</code> base to
+ restore the invariant. For example, the graphic below shows
+ an <code class="function">insert</code> operation (point A); the tree performs some
+ operations, and calls the update functor three times (points B,
+ C, and D). (It is well known that any <code class="function">insert</code>,
+ <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
+ all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
+ .</p><div class="figure"><a id="idp18360176"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
+ need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a
+ method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the
+ tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
+ <code class="classname">node_update</code> is a base class of the tree, yet it
+ uses node iterators defined in the tree (its child).</p></li></ol></div><p>The first two questions are answered by the fact that
+ <code class="classname">node_update</code> (an instantiation of
+ <code class="classname">Node_Update</code>) is a <span class="emphasis"><em>public</em></span> base class
+ of the tree. Consequently:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Any public methods of
+ <code class="classname">node_update</code> are automatically methods of
+ the tree (<a class="xref" href="policy_data_structures.html#biblio.alexandrescu01modern" title="Modern C++ Design: Generic Programming and Design Patterns Applied">[biblio.alexandrescu01modern]</a>).
+ Thus an order-statistics node updater,
+ <code class="classname">tree_order_statistics_node_update</code> defines
+ the <code class="function">find_by_order</code> method; any tree
+ instantiated by this policy consequently supports this method as
+ well.</p></li><li class="listitem"><p>In C++, if a base class declares a method as
+ <code class="literal">virtual</code>, it is
+ <code class="literal">virtual</code> in its subclasses. If
+ <code class="classname">node_update</code> needs to access one of the
+ tree's methods, say the member function
+ <code class="function">end</code>, it simply declares that method as
+ <code class="literal">virtual</code> abstract.</p></li></ol></div><p>The cyclic dependency is solved through template-template
+ parameters. <code class="classname">Node_Update</code> is parametrized by
+ the tree's node iterators, its comparison functor, and its
+ allocator type. Thus, instantiations of
+ <code class="classname">Node_Update</code> have all information
+ required.</p><p>This library assumes that constructing a metadata object and
+ modifying it are exception free. Suppose that during some method,
+ say <code class="classname">insert</code>, a metadata-related operation
+ (e.g., changing the value of a metadata) throws an exception. Ack!
+ Rolling back the method is unusually complex.</p><p>Previously, a distinction was made between redundant
+ policies and null policies. Node invariants show a
+ case where null policies are required.</p><p>Assume a regular tree is required, one which need not
+ support order statistics or interval overlap queries.
+ Seemingly, in this case a redundant policy - a policy which
+ doesn't affect nodes' contents would suffice. This, would lead
+ to the following drawbacks:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Each node would carry a useless metadata object, wasting
+ space.</p></li><li class="listitem"><p>The tree cannot know if its
+ <code class="classname">Node_Update</code> policy actually modifies a
+ node's metadata (this is halting reducible). In the graphic
+ below, assume the shaded node is inserted. The tree would have
+ to traverse the useless path shown to the root, applying
+ redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18382432"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
+ solves both these problems. The tree detects that node
+ invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section" title="Split and Join"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
+ It is possible to split a tree so that it passes
+ all nodes with keys larger than a given key to a different
+ tree. These methods have the following advantages over the
+ alternative of externally inserting to the destination
+ tree and erasing from the source tree:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>These methods are efficient - red-black trees are split
+ and joined in poly-logarithmic complexity; ordered-vector
+ trees are split and joined at linear complexity. The
+ alternatives have super-linear complexity.</p></li><li class="listitem"><p>Aside from orders of growth, these operations perform
+ few allocations and de-allocations. For red-black trees, allocations are not performed,
+ and the methods are exception-free. </p></li></ol></div></div></div></div><div class="section" title="Trie"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.trie"></a>Trie</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.interface"></a>Interface</h5></div></div></div><p>The trie-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less&lt;Key&gt;,
+ typename Tag = pat_trie_tag,
+ template&lt;typename Const_Node_Iterator,
+ typename Node_Iterator,
+ typename E_Access_Traits_,
+ typename Allocator_&gt;
+ class Node_Update = null_node_update,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class trie;
+ </pre><p>The parameters have the following meaning:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Key</code> is the key type.</p></li><li class="listitem"><p><code class="classname">Mapped</code> is the mapped-policy.</p></li><li class="listitem"><p><code class="classname">E_Access_Traits</code> is described in below.</p></li><li class="listitem"><p><code class="classname">Tag</code> specifies which underlying data structure
+ to use, and is described shortly.</p></li><li class="listitem"><p><code class="classname">Node_Update</code> is a policy for updating node
+ invariants. This is described below.</p></li><li class="listitem"><p><code class="classname">Allocator</code> is an allocator
+ type.</p></li></ol></div><p>The <code class="classname">Tag</code> parameter specifies which underlying
+ data structure to use. Instantiating it by <code class="classname">pat_trie_tag</code>, specifies an
+ underlying PATRICIA trie (explained shortly); any other tag is
+ currently illegal.</p><p>Following is a description of a (PATRICIA) trie
+ (this implementation follows <a class="xref" href="policy_data_structures.html#biblio.okasaki98mereable" title="Fast mergeable integer maps">[biblio.okasaki98mereable]</a> and
+ <a class="xref" href="policy_data_structures.html#biblio.filliatre2000ptset" title="Ptset: Sets of integers implemented as Patricia trees">[biblio.filliatre2000ptset]</a>).
+ </p><p>A (PATRICIA) trie is similar to a tree, but with the
+ following differences:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>It explicitly views keys as a sequence of elements.
+ E.g., a trie can view a string as a sequence of
+ characters; a trie can view a number as a sequence of
+ bits.</p></li><li class="listitem"><p>It is not (necessarily) binary. Each node has fan-out n
+ + 1, where n is the number of distinct
+ elements.</p></li><li class="listitem"><p>It stores values only at leaf nodes.</p></li><li class="listitem"><p>Internal nodes have the properties that A) each has at
+ least two children, and B) each shares the same prefix with
+ any of its descendant.</p></li></ol></div><p>A (PATRICIA) trie has some useful properties:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>It can be configured to use large node fan-out, giving it
+ very efficient find performance (albeit at insertion
+ complexity and size).</p></li><li class="listitem"><p>It works well for common-prefix keys.</p></li><li class="listitem"><p>It can support efficiently queries such as which
+ keys match a certain prefix. This is sometimes useful in file
+ systems and routers, and for "type-ahead" aka predictive text matching
+ on mobile devices.</p></li></ol></div></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.details"></a>Details</h5></div></div></div><div class="section" title="Element Access Traits"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.etraits"></a>Element Access Traits</h6></div></div></div><p>A trie inherently views its keys as sequences of elements.
+ For example, a trie can view a string as a sequence of
+ characters. A trie needs to map each of n elements to a
+ number in {0, n - 1}. For example, a trie can map a
+ character <code class="varname">c</code> to
+ </p><pre class="programlisting">static_cast&lt;size_t&gt;(c)</pre><p>.</p><p>Seemingly, then, a trie can assume that its keys support
+ (const) iterators, and that the <code class="classname">value_type</code> of this
+ iterator can be cast to a <code class="classname">size_t</code>. There are several
+ reasons, though, to decouple the mechanism by which the trie
+ accesses its keys' elements from the trie:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>In some cases, the numerical value of an element is
+ inappropriate. Consider a trie storing DNA strings. It is
+ logical to use a trie with a fan-out of 5 = 1 + |{'A', 'C',
+ 'G', 'T'}|. This requires mapping 'T' to 3, though.</p></li><li class="listitem"><p>In some cases the keys' iterators are different than what
+ is needed. For example, a trie can be used to search for
+ common suffixes, by using strings'
+ <code class="classname">reverse_iterator</code>. As another example, a trie mapping
+ UNICODE strings would have a huge fan-out if each node would
+ branch on a UNICODE character; instead, one can define an
+ iterator iterating over 8-bit (or less) groups.</p></li></ol></div><p>trie is,
+ consequently, parametrized by <code class="classname">E_Access_Traits</code> -
+ traits which instruct how to access sequences' elements.
+ <code class="classname">string_trie_e_access_traits</code>
+ is a traits class for strings. Each such traits define some
+ types, like:</p><pre class="programlisting">
+ typename E_Access_Traits::const_iterator
+ </pre><p>is a const iterator iterating over a key's elements. The
+ traits class must also define methods for obtaining an iterator
+ to the first and last element of a key.</p><p>The graphic below shows a
+ (PATRICIA) trie resulting from inserting the words: "I wish
+ that I could ever see a poem lovely as a trie" (which,
+ unfortunately, does not rhyme).</p><p>The leaf nodes contain values; each internal node contains
+ two <code class="classname">typename E_Access_Traits::const_iterator</code>
+ objects, indicating the maximal common prefix of all keys in
+ the sub-tree. For example, the shaded internal node roots a
+ sub-tree with leafs "a" and "as". The maximal common prefix is
+ "a". The internal node contains, consequently, to const
+ iterators, one pointing to <code class="varname">'a'</code>, and the other to
+ <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18427056"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
+ tree-based containers. There are two minor
+ differences, though, which, unfortunately, thwart sharing them
+ sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template
+ parameter is parametrized by <code class="classname">E_Access_Traits</code>, while
+ a tree's <code class="classname">Node_Update</code> template-template parameter is
+ parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
+ trie-based containers (at least in this implementation) store
+ values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
+ policies (which are explained below).</p><div class="figure"><a id="idp18437488"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
+ updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <code class="classname">trie_order_statistics_node_update</code>
+ supports order statistics.
+ </p></li><li class="listitem"><p><code class="classname">trie_prefix_search_node_update</code>
+ supports searching for ranges that match a given prefix.</p></li><li class="listitem"><p><code class="classname">null_node_update</code>
+ is the null node updater.</p></li></ol></div></div><div class="section" title="Split and Join"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.split"></a>Split and Join</h6></div></div></div><p>Trie-based containers support split and join methods; the
+ rationale is equal to that of tree-based containers supporting
+ these methods.</p></div></div></div><div class="section" title="List"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.list"></a>List</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.interface"></a>Interface</h5></div></div></div><p>The list-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;typename Key,
+ typename Mapped,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+ typename Update_Policy = move_to_front_lu_policy&lt;&gt;,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class list_update;
+ </pre><p>The parameters have the following meaning:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <code class="classname">Key</code> is the key type.
+ </p></li><li class="listitem"><p>
+ <code class="classname">Mapped</code> is the mapped-policy.
+ </p></li><li class="listitem"><p>
+ <code class="classname">Eq_Fn</code> is a key equivalence functor.
+ </p></li><li class="listitem"><p>
+ <code class="classname">Update_Policy</code> is a policy updating positions in
+ the list based on access patterns. It is described in the
+ following subsection.
+ </p></li><li class="listitem"><p>
+ <code class="classname">Allocator</code> is an allocator type.
+ </p></li></ol></div><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". In fact,
+ list-based containers are designed in this library expressly for
+ this purpose.</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
+ algorithms exist for reordering lists to reflect access
+ prediction. (See <a class="xref" href="policy_data_structures.html#biblio.motwani95random" title="Randomized Algorithms">[biblio.motwani95random]</a> and <a class="xref" href="policy_data_structures.html#biblio.andrew04mtf" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem">[biblio.andrew04mtf]</a>).
+ </p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.details"></a>Details</h5></div></div></div><p>
+ </p><div class="section" title="Underlying Data Structure"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.ds"></a>Underlying Data Structure</h6></div></div></div><p>The graphic below shows a
+ simple list of integer keys. If we search for the integer 6, we
+ are paying an overhead: the link with key 6 is only the fifth
+ link; if it were the first link, it could be accessed
+ faster.</p><div class="figure"><a id="idp18468000"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><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, in the graphic below label A shows the counter
+ algorithm. Each node contains both a key and a count metadata
+ (shown in bold). When an element is accessed (e.g. 6) its count is
+ incremented, as shown in label B. If the count reaches some
+ predetermined value, say 10, as shown in label C, the count is set
+ to 0 and the node is moved to the front of the list, as in label
+ D.
+ </p><div class="figure"><a id="idp18473584"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section" title="Policies"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
+ implementing any algorithm moving nodes to the front of the
+ list (policies implementing algorithms interchanging nodes are
+ unsupported).</p><p>Associative containers based on lists are parametrized by a
+ <code class="classname">Update_Policy</code> 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.
+ </p><p>An instantiation of <code class="classname">Update_Policy</code> must define
+ internally <code class="classname">update_metadata</code> as the metadata it
+ requires. Internally, each node of the list contains, besides
+ the usual key and data, an instance of <code class="classname">typename
+ Update_Policy::update_metadata</code>.</p><p>An instantiation of <code class="classname">Update_Policy</code> must define
+ internally two operators:</p><pre class="programlisting">
+ update_metadata
+ operator()();
+
+ bool
+ operator()(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 (
+ 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. The first
+ is <code class="classname">lu_counter_policy</code>, which implements the
+ counter algorithm described above. The second is
+ <code class="classname">lu_move_to_front_policy</code>,
+ which unconditionally move an accessed element to the front of
+ the list. The latter type is very useful in this library,
+ since there is no need to associate metadata with each element.
+ (See <a class="xref" href="policy_data_structures.html#biblio.andrew04mtf" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem">[biblio.andrew04mtf]</a>
+ </p></div><div class="section" title="Use in Multimaps"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.mapped"></a>Use in Multimaps</h6></div></div></div><p>In this library, there are no equivalents for the standard's
+ multimaps and multisets; instead one uses an associative
+ container mapping primary keys to secondary keys.</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><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ List-based containers do not store internally the number
+ of values that they hold. This means that their <code class="function">size</code>
+ method has linear complexity (just like <code class="classname">std::list</code>).
+ Note that finding the number of equivalent-key values in a
+ standard multimap also has linear complexity (because it must be
+ done, via <code class="function">std::distance</code> of the
+ multimap's <code class="function">equal_range</code> method), but usually with
+ higher constants.
+ </p></li><li class="listitem"><p>
+ Most associative-container objects each hold a policy
+ object (a hash-based container object holds a
+ hash functor). List-based containers, conversely, only have
+ class-wide policy objects.
+ </p></li></ol></div></div></div></div><div class="section" title="Priority Queue"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.interface"></a>Interface</h5></div></div></div><p>The priority queue container has the following
+ declaration:
+ </p><pre class="programlisting">
+ template&lt;typename Value_Type,
+ typename Cmp_Fn = std::less&lt;Value_Type&gt;,
+ typename Tag = pairing_heap_tag,
+ typename Allocator = std::allocator&lt;char &gt; &gt;
+ class priority_queue;
+ </pre><p>The parameters have the following meaning:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Value_Type</code> is the value type.</p></li><li class="listitem"><p><code class="classname">Cmp_Fn</code> is a value comparison functor</p></li><li class="listitem"><p><code class="classname">Tag</code> specifies which underlying data structure
+ to use.</p></li><li class="listitem"><p><code class="classname">Allocator</code> is an allocator
+ type.</p></li></ol></div><p>The <code class="classname">Tag</code> parameter specifies which underlying
+ data structure to use. Instantiating it by<code class="classname">pairing_heap_tag</code>,<code class="classname">binary_heap_tag</code>,
+ <code class="classname">binomial_heap_tag</code>,
+ <code class="classname">rc_binomial_heap_tag</code>,
+ or <code class="classname">thin_heap_tag</code>,
+ specifies, respectively,
+ an underlying pairing heap (<a class="xref" href="policy_data_structures.html#biblio.fredman86pairing" title="The pairing heap: a new form of self-adjusting heap">[biblio.fredman86pairing]</a>),
+ binary heap (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>),
+ binomial heap (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>),
+ a binomial heap with a redundant binary counter (<a class="xref" href="policy_data_structures.html#biblio.maverik_lowerbounds" title="Deamortization - Part 2: Binomial Heaps">[biblio.maverik_lowerbounds]</a>),
+ or a thin heap (<a class="xref" href="policy_data_structures.html#biblio.kt99fat_heaps" title="New Heap Data Structures">[biblio.kt99fat_heaps]</a>).
+ </p><p>
+ As mentioned in the tutorial,
+ <code class="classname">__gnu_pbds::priority_queue</code> shares most of the
+ same interface with <code class="classname">std::priority_queue</code>.
+ E.g. if <code class="varname">q</code> is a priority queue of type
+ <code class="classname">Q</code>, then <code class="function">q.top()</code> will
+ return the "largest" value in the container (according to
+ <code class="classname">typename
+ Q::cmp_fn</code>). <code class="classname">__gnu_pbds::priority_queue</code>
+ has a larger (and very slightly different) interface than
+ <code class="classname">std::priority_queue</code>, however, since typically
+ <code class="classname">push</code> and <code class="classname">pop</code> are deemed
+ insufficient for manipulating priority-queues. </p><p>Different settings require different priority-queue
+ implementations which are described in later; see traits
+ discusses ways to differentiate between the different traits of
+ different implementations.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.details"></a>Details</h5></div></div></div><div class="section" title="Iterators"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.iterators"></a>Iterators</h6></div></div></div><p>There are many different underlying-data structures for
+ implementing priority queues. Unfortunately, most such
+ structures are oriented towards making <code class="function">push</code> and
+ <code class="function">top</code> efficient, and consequently don't allow efficient
+ access of other elements: for instance, they cannot support an efficient
+ <code class="function">find</code> method. In the use case where it
+ is important to both access and "do something with" an
+ arbitrary value, one would be out of luck. For example, many graph algorithms require
+ modifying a value (typically increasing it in the sense of the
+ priority queue's comparison functor).</p><p>In order to access and manipulate an arbitrary value in a
+ priority queue, one needs to reference the internals of the
+ priority queue from some form of an associative container -
+ this is unavoidable. Of course, in order to maintain the
+ encapsulation of the priority queue, this needs to be done in a
+ way that minimizes exposure to implementation internals.</p><p>In this library the priority queue's <code class="function">insert</code>
+ method returns an iterator, which if valid can be used for subsequent <code class="function">modify</code> and
+ <code class="function">erase</code> operations. This both preserves the priority
+ queue's encapsulation, and allows accessing arbitrary values (since the
+ returned iterators from the <code class="function">push</code> operation can be
+ stored in some form of associative container).</p><p>Priority queues' iterators present a problem regarding their
+ invalidation guarantees. One assumes that calling
+ <code class="function">operator++</code> on an iterator will associate it
+ with the "next" value. Priority-queues are
+ self-organizing: each operation changes what the "next" value
+ means. Consequently, it does not make sense that <code class="function">push</code>
+ will return an iterator that can be incremented - this can have
+ no possible use. Also, as in the case of hash-based containers,
+ it is awkward to define if a subsequent <code class="function">push</code> operation
+ invalidates a prior returned iterator: it invalidates it in the
+ sense that its "next" value is not related to what it
+ previously considered to be its "next" value. However, it might not
+ invalidate it, in the sense that it can be
+ de-referenced and used for <code class="function">modify</code> and <code class="function">erase</code>
+ operations.</p><p>Similarly to the case of the other unordered associative
+ containers, this library uses a distinction between
+ point-type and range type iterators. A priority queue's <code class="classname">iterator</code> can always be
+ converted to a <code class="classname">point_iterator</code>, and a
+ <code class="classname">const_iterator</code> can always be converted to a
+ <code class="classname">point_const_iterator</code>.</p><p>The following snippet demonstrates manipulating an arbitrary
+ value:</p><pre class="programlisting">
+ // A priority queue of integers.
+ priority_queue&lt;int &gt; p;
+
+ // Insert some values into the priority queue.
+ priority_queue&lt;int &gt;::point_iterator it = p.push(0);
+
+ p.push(1);
+ p.push(2);
+
+ // Now modify a value.
+ p.modify(it, 3);
+
+ assert(p.top() == 3);
+ </pre><p>It should be noted that an alternative design could embed an
+ associative container in a priority queue. Could, but most
+ probably should not. To begin with, it should be noted that one
+ could always encapsulate a priority queue and an associative
+ container mapping values to priority queue iterators with no
+ performance loss. One cannot, however, "un-encapsulate" a priority
+ queue embedding an associative container, which might lead to
+ performance loss. Assume, that one needs to associate each value
+ with some data unrelated to priority queues. Then using
+ this library's design, one could use an
+ associative container mapping each value to a pair consisting of
+ this data and a priority queue's iterator. Using the embedded
+ method would need to use two associative containers. Similar
+ problems might arise in cases where a value can reside
+ simultaneously in many priority queues.</p></div><div class="section" title="Underlying Data Structure"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.d"></a>Underlying Data Structure</h6></div></div></div><p>There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18537424"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
+ from a priority queue must incur a logarithmic expense (in the
+ amortized sense). Any priority queue implementation that would
+ avoid this, would violate known bounds on comparison-based
+ sorting (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a> and <a class="xref" href="policy_data_structures.html#biblio.brodal96priority" title="Worst-case efficient priority queues">[biblio.brodal96priority]</a>).
+ </p><p>Most implementations do
+ not differ in the asymptotic amortized complexity of
+ <code class="function">push</code> and <code class="function">pop</code> operations, but they differ in
+ the constants involved, in the complexity of other operations
+ (e.g., <code class="function">modify</code>), and in the worst-case
+ complexity of single operations. In general, the more
+ "structured" an implementation (i.e., the more internal
+ invariants it possesses) - the higher its amortized complexity
+ of <code class="function">push</code> and <code class="function">pop</code> operations.</p><p>This library implements different algorithms using a
+ single class: <code class="classname">priority_queue</code>.
+ Instantiating the <code class="classname">Tag</code> template parameter, "selects"
+ the implementation:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Instantiating <code class="classname">Tag = binary_heap_tag</code> creates
+ a binary heap of the form in represented in the graphic with labels A1 or A2. The former is internally
+ selected by priority_queue
+ if <code class="classname">Value_Type</code> is instantiated by a primitive type
+ (e.g., an <span class="type">int</span>); the latter is
+ internally selected for all other types (e.g.,
+ <code class="classname">std::string</code>). This implementations is relatively
+ unstructured, and so has good <code class="classname">push</code> and <code class="classname">pop</code>
+ performance; it is the "best-in-kind" for primitive
+ types, e.g., <span class="type">int</span>s. Conversely, it has
+ high worst-case performance, and can support only linear-time
+ <code class="function">modify</code> and <code class="function">erase</code> operations.</p></li><li class="listitem"><p>Instantiating <code class="classname">Tag =
+ pairing_heap_tag</code> creates a pairing heap of the form
+ in represented by label B in the graphic above. This
+ implementations too is relatively unstructured, and so has good
+ <code class="function">push</code> and <code class="function">pop</code>
+ performance; it is the "best-in-kind" for non-primitive types,
+ e.g., <code class="classname">std:string</code>s. It also has very good
+ worst-case <code class="function">push</code> and
+ <code class="function">join</code> performance (O(1)), but has high
+ worst-case <code class="function">pop</code>
+ complexity.</p></li><li class="listitem"><p>Instantiating <code class="classname">Tag =
+ binomial_heap_tag</code> creates a binomial heap of the
+ form repsented by label B in the graphic above. This
+ implementations is more structured than a pairing heap, and so
+ has worse <code class="function">push</code> and <code class="function">pop</code>
+ performance. Conversely, it has sub-linear worst-case bounds for
+ <code class="function">pop</code>, e.g., and so it might be preferred in
+ cases where responsiveness is important.</p></li><li class="listitem"><p>Instantiating <code class="classname">Tag =
+ rc_binomial_heap_tag</code> creates a binomial heap of the
+ form represented in label B above, accompanied by a redundant
+ counter which governs the trees. This implementations is
+ therefore more structured than a binomial heap, and so has worse
+ <code class="function">push</code> and <code class="function">pop</code>
+ performance. Conversely, it guarantees O(1)
+ <code class="function">push</code> complexity, and so it might be
+ preferred in cases where the responsiveness of a binomial heap
+ is insufficient.</p></li><li class="listitem"><p>Instantiating <code class="classname">Tag =
+ thin_heap_tag</code> creates a thin heap of the form
+ represented by the label B in the graphic above. This
+ implementations too is more structured than a pairing heap, and
+ so has worse <code class="function">push</code> and
+ <code class="function">pop</code> performance. Conversely, it has better
+ worst-case and identical amortized complexities than a Fibonacci
+ heap, and so might be more appropriate for some graph
+ algorithms.</p></li></ol></div><p>Of course, one can use any order-preserving associative
+ container as a priority queue, as in the graphic above label C, possibly by creating an adapter class
+ over the associative container (much as
+ <code class="classname">std::priority_queue</code> can adapt <code class="classname">std::vector</code>).
+ This has the advantage that no cross-referencing is necessary
+ at all; the priority queue itself is an associative container.
+ Most associative containers are too structured to compete with
+ priority queues in terms of <code class="function">push</code> and <code class="function">pop</code>
+ performance.</p></div><div class="section" title="Traits"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.traits"></a>Traits</h6></div></div></div><p>It would be nice if all priority queues could
+ share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
+ two binary heaps might throw an exception (not corrupt
+ any of the heaps on which it operates), but joining two pairing
+ heaps is exception free.</p><p>Tags and traits are very useful for manipulating generic
+ types. <code class="classname">__gnu_pbds::priority_queue</code>
+ publicly defines <code class="classname">container_category</code> as one of the tags. Given any
+ container <code class="classname">Cntnr</code>, the tag of the underlying
+ data structure can be found via <code class="classname">typename
+ Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
+ </p><div class="figure"><a id="idp18572464"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
+ is a traits class identifying the properties of the
+ container.</p><p>To find if a container might throw if two of its objects are
+ joined, one can use
+ </p><pre class="programlisting">
+ container_traits&lt;Cntnr&gt;::split_join_can_throw
+ </pre><p>
+ </p><p>
+ Different priority-queue implementations have different invalidation guarantees. This is
+ especially important, since there is no way to access an arbitrary
+ value of priority queues except for iterators. Similarly to
+ associative containers, one can use
+ </p><pre class="programlisting">
+ container_traits&lt;Cntnr&gt;::invalidation_guarantee
+ </pre><p>
+ to get the invalidation guarantee type of a priority queue.</p><p>It is easy to understand from the graphic above, what <code class="classname">container_traits&lt;Cntnr&gt;::invalidation_guarantee</code>
+ will be for different implementations. All implementations of
+ type represented by label B have <code class="classname">point_invalidation_guarantee</code>:
+ the container can freely internally reorganize the nodes -
+ range-type iterators are invalidated, but point-type iterators
+ are always valid. Implementations of type represented by labels A1 and A2 have <code class="classname">basic_invalidation_guarantee</code>:
+ the container can freely internally reallocate the array - both
+ point-type and range-type iterators might be invalidated.</p><p>
+ This has major implications, and constitutes a good reason to avoid
+ using binary heaps. A binary heap can perform <code class="function">modify</code>
+ or <code class="function">erase</code> efficiently given a valid point-type
+ iterator. However, in order to supply it with a valid point-type
+ iterator, one needs to iterate (linearly) over all
+ values, then supply the relevant iterator (recall that a
+ range-type iterator can always be converted to a point-type
+ iterator). This means that if the number of <code class="function">modify</code> or
+ <code class="function">erase</code> operations is non-negligible (say
+ super-logarithmic in the total sequence of operations) - binary
+ heaps will perform badly.
+ </p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures_using.html b/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
new file mode 100644
index 0000000000..03812ee5be
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
+ other libraries except the standard C++ library . All classes are
+ defined in namespace <code class="code">__gnu_pbds</code>. The library internally
+ uses macros beginning with <code class="code">PB_DS</code>, but
+ <code class="code">#undef</code>s anything it <code class="code">#define</code>s (except for
+ header guards). Compiling the library in an environment where macros
+ beginning in <code class="code">PB_DS</code> are defined, may yield unpredictable
+ results in compilation, execution, or both.</p><p>
+ Further dependencies are necessary to create the visual output
+ for the performance tests. To create these graphs, an
+ additional package is needed: <span class="command"><strong>pychart</strong></span>.
+ </p></div><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.organization"></a>Organization</h3></div></div></div><p>
+ The various data structures are organized as follows.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Branch-Based
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ <code class="classname">basic_branch</code>
+ is an abstract base class for branched-based
+ associative-containers
+ </p></li><li class="listitem"><p>
+ <code class="classname">tree</code>
+ is a concrete base class for tree-based
+ associative-containers
+ </p></li><li class="listitem"><p>
+ <code class="classname">trie</code>
+ is a concrete base class trie-based
+ associative-containers
+ </p></li></ul></div></li><li class="listitem"><p>
+ Hash-Based
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ <code class="classname">basic_hash_table</code>
+ is an abstract base class for hash-based
+ associative-containers
+ </p></li><li class="listitem"><p>
+ <code class="classname">cc_hash_table</code>
+ is a concrete collision-chaining hash-based
+ associative-containers
+ </p></li><li class="listitem"><p>
+ <code class="classname">gp_hash_table</code>
+ is a concrete (general) probing hash-based
+ associative-containers
+ </p></li></ul></div></li><li class="listitem"><p>
+ List-Based
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ <code class="classname">list_update</code>
+ list-based update-policy associative container
+ </p></li></ul></div></li><li class="listitem"><p>
+ Heap-Based
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ <code class="classname">priority_queue</code>
+ A priority queue.
+ </p></li></ul></div></li></ul></div><p>
+ The hierarchy is composed naturally so that commonality is
+ captured by base classes. Thus <code class="function">operator[]</code>
+ is defined at the base of any hierarchy, since all derived
+ containers support it. Conversely <code class="function">split</code> is
+ defined in <code class="classname">basic_branch</code>, since only
+ tree-like containers support it.
+ </p><p>
+ In addition, there are the following diagnostics classes,
+ used to report errors specific to this library's data
+ structures.
+ </p><div class="figure"><a id="idp17768064"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section" title="Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section" title="Basic Use"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
+ For the most part, the policy-based containers containers in
+ namespace <code class="literal">__gnu_pbds</code> have the same interface as
+ the equivalent containers in the standard C++ library, except for
+ the names used for the container classes themselves. For example,
+ this shows basic operations on a collision-chaining hash-based
+ container:
+ </p><pre class="programlisting">
+ #include &lt;ext/pb_ds/assoc_container.h&gt;
+
+ int main()
+ {
+ __gnu_pbds::cc_hash_table&lt;int, char&gt; c;
+ c[2] = 'b';
+ assert(c.find(1) == c.end());
+ };
+ </pre><p>
+ The container is called
+ <code class="classname">__gnu_pbds::cc_hash_table</code> instead of
+ <code class="classname">std::unordered_map</code>, since <span class="quote">“<span class="quote">unordered
+ map</span>â€</span> does not necessarily mean a hash-based map as implied by
+ the C++ library (C++11 or TR1). For example, list-based associative
+ containers, which are very useful for the construction of
+ "multimaps," are also unordered.
+ </p><p>This snippet shows a red-black tree based container:</p><pre class="programlisting">
+ #include &lt;ext/pb_ds/assoc_container.h&gt;
+
+ int main()
+ {
+ __gnu_pbds::tree&lt;int, char&gt; c;
+ c[2] = 'b';
+ assert(c.find(2) != c.end());
+ };
+ </pre><p>The container is called <code class="classname">tree</code> instead of
+ <code class="classname">map</code> since the underlying data structures are
+ being named with specificity.
+ </p><p>
+ The member function naming convention is to strive to be the same as
+ the equivalent member functions in other C++ standard library
+ containers. The familiar methods are unchanged:
+ <code class="function">begin</code>, <code class="function">end</code>,
+ <code class="function">size</code>, <code class="function">empty</code>, and
+ <code class="function">clear</code>.
+ </p><p>
+ This isn't to say that things are exactly as one would expect, given
+ the container requirments and interfaces in the C++ standard.
+ </p><p>
+ The names of containers' policies and policy accessors are
+ different then the usual. For example, if <span class="type">hash_type</span> is
+ some type of hash-based container, then</p><pre class="programlisting">
+ hash_type::hash_fn
+ </pre><p>
+ gives the type of its hash functor, and if <code class="varname">obj</code> is
+ some hash-based container object, then
+ </p><pre class="programlisting">
+ obj.get_hash_fn()
+ </pre><p>will return a reference to its hash-functor object.</p><p>
+ Similarly, if <span class="type">tree_type</span> is some type of tree-based
+ container, then
+ </p><pre class="programlisting">
+ tree_type::cmp_fn
+ </pre><p>
+ gives the type of its comparison functor, and if
+ <code class="varname">obj</code> is some tree-based container object,
+ then
+ </p><pre class="programlisting">
+ obj.get_cmp_fn()
+ </pre><p>will return a reference to its comparison-functor object.</p><p>
+ It would be nice to give names consistent with those in the existing
+ C++ standard (inclusive of TR1). Unfortunately, these standard
+ containers don't consistently name types and methods. For example,
+ <code class="classname">std::tr1::unordered_map</code> uses
+ <span class="type">hasher</span> for the hash functor, but
+ <code class="classname">std::map</code> uses <span class="type">key_compare</span> for
+ the comparison functor. Also, we could not find an accessor for
+ <code class="classname">std::tr1::unordered_map</code>'s hash functor, but
+ <code class="classname">std::map</code> uses <code class="classname">compare</code>
+ for accessing the comparison functor.
+ </p><p>
+ Instead, <code class="literal">__gnu_pbds</code> attempts to be internally
+ consistent, and uses standard-derived terminology if possible.
+ </p><p>
+ Another source of difference is in scope:
+ <code class="literal">__gnu_pbds</code> contains more types of associative
+ containers than the standard C++ library, and more opportunities
+ to configure these new containers, since different types of
+ associative containers are useful in different settings.
+ </p><p>
+ Namespace <code class="literal">__gnu_pbds</code> contains different classes for
+ hash-based containers, tree-based containers, trie-based containers,
+ and list-based containers.
+ </p><p>
+ Since associative containers share parts of their interface, they
+ are organized as a class hierarchy.
+ </p><p>Each type or method is defined in the most-common ancestor
+ in which it makes sense.
+ </p><p>For example, all associative containers support iteration
+ expressed in the following form:
+ </p><pre class="programlisting">
+ const_iterator
+ begin() const;
+
+ iterator
+ begin();
+
+ const_iterator
+ end() const;
+
+ iterator
+ end();
+ </pre><p>
+ But not all containers contain or use hash functors. Yet, both
+ collision-chaining and (general) probing hash-based associative
+ containers have a hash functor, so
+ <code class="classname">basic_hash_table</code> contains the interface:
+ </p><pre class="programlisting">
+ const hash_fn&amp;
+ get_hash_fn() const;
+
+ hash_fn&amp;
+ get_hash_fn();
+ </pre><p>
+ so all hash-based associative containers inherit the same
+ hash-functor accessor methods.
+ </p></div><div class="section" title="Configuring via Template Parameters"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.configuring"></a>
+ Configuring via Template Parameters
+ </h4></div></div></div><p>
+ In general, each of this library's containers is
+ parametrized by more policies than those of the standard library. For
+ example, the standard hash-based container is parametrized as
+ follows:
+ </p><pre class="programlisting">
+ template&lt;typename Key, typename Mapped, typename Hash,
+ typename Pred, typename Allocator, bool Cache_Hashe_Code&gt;
+ class unordered_map;
+ </pre><p>
+ and so can be configured by key type, mapped type, a functor
+ that translates keys to unsigned integral types, an equivalence
+ predicate, an allocator, and an indicator whether to store hash
+ values with each entry. this library's collision-chaining
+ hash-based container is parametrized as
+ </p><pre class="programlisting">
+ template&lt;typename Key, typename Mapped, typename Hash_Fn,
+ typename Eq_Fn, typename Comb_Hash_Fn,
+ typename Resize_Policy, bool Store_Hash
+ typename Allocator&gt;
+ class cc_hash_table;
+ </pre><p>
+ and so can be configured by the first four types of
+ <code class="classname">std::tr1::unordered_map</code>, then a
+ policy for translating the key-hash result into a position
+ within the table, then a policy by which the table resizes,
+ an indicator whether to store hash values with each entry,
+ and an allocator (which is typically the last template
+ parameter in standard containers).
+ </p><p>
+ Nearly all policy parameters have default values, so this
+ need not be considered for casual use. It is important to
+ note, however, that hash-based containers' policies can
+ dramatically alter their performance in different settings,
+ and that tree-based containers' policies can make them
+ useful for other purposes than just look-up.
+ </p><p>As opposed to associative containers, priority queues have
+ relatively few configuration options. The priority queue is
+ parametrized as follows:</p><pre class="programlisting">
+ template&lt;typename Value_Type, typename Cmp_Fn,typename Tag,
+ typename Allocator&gt;
+ class priority_queue;
+ </pre><p>The <code class="classname">Value_Type</code>, <code class="classname">Cmp_Fn</code>, and
+ <code class="classname">Allocator</code> parameters are the container's value type,
+ comparison-functor type, and allocator type, respectively;
+ these are very similar to the standard's priority queue. The
+ <code class="classname">Tag</code> parameter is different: there are a number of
+ pre-defined tag types corresponding to binary heaps, binomial
+ heaps, etc., and <code class="classname">Tag</code> should be instantiated
+ by one of them.</p><p>Note that as opposed to the
+ <code class="classname">std::priority_queue</code>,
+ <code class="classname">__gnu_pbds::priority_queue</code> is not a
+ sequence-adapter; it is a regular container.</p></div><div class="section" title="Querying Container Attributes"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.traits"></a>
+ Querying Container Attributes
+ </h4></div></div></div><p></p><p>A containers underlying data structure
+ affect their performance; Unfortunately, they can also affect
+ their interface. When manipulating generically associative
+ containers, it is often useful to be able to statically
+ determine what they can support and what the cannot.
+ </p><p>Happily, the standard provides a good solution to a similar
+ problem - that of the different behavior of iterators. If
+ <code class="classname">It</code> is an iterator, then
+ </p><pre class="programlisting">
+ typename std::iterator_traits&lt;It&gt;::iterator_category
+ </pre><p>is one of a small number of pre-defined tag classes, and
+ </p><pre class="programlisting">
+ typename std::iterator_traits&lt;It&gt;::value_type
+ </pre><p>is the value type to which the iterator "points".</p><p>
+ Similarly, in this library, if <span class="type">C</span> is a
+ container, then <code class="classname">container_traits</code> is a
+ trait class that stores information about the kind of
+ container that is implemented.
+ </p><pre class="programlisting">
+ typename container_traits&lt;C&gt;::container_category
+ </pre><p>
+ is one of a small number of predefined tag structures that
+ uniquely identifies the type of underlying data structure.
+ </p><p>In most cases, however, the exact underlying data
+ structure is not really important, but what is important is
+ one of its other attributes: whether it guarantees storing
+ elements by key order, for example. For this one can
+ use</p><pre class="programlisting">
+ typename container_traits&lt;C&gt;::order_preserving
+ </pre><p>
+ Also,
+ </p><pre class="programlisting">
+ typename container_traits&lt;C&gt;::invalidation_guarantee
+ </pre><p>is the container's invalidation guarantee. Invalidation
+ guarantees are especially important regarding priority queues,
+ since in this library's design, iterators are practically the
+ only way to manipulate them.</p></div><div class="section" title="Point and Range Iteration"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.point_range_iteration"></a>
+ Point and Range Iteration
+ </h4></div></div></div><p></p><p>This library differentiates between two types of methods
+ and iterators: point-type, and range-type. For example,
+ <code class="function">find</code> and <code class="function">insert</code> are point-type methods, since
+ they each deal with a specific element; their returned
+ iterators are point-type iterators. <code class="function">begin</code> and
+ <code class="function">end</code> are range-type methods, since they are not used to
+ find a specific element, but rather to go over all elements in
+ a container object; their returned iterators are range-type
+ iterators.
+ </p><p>Most containers store elements in an order that is
+ determined by their interface. Correspondingly, it is fine that
+ their point-type iterators are synonymous with their range-type
+ iterators. For example, in the following snippet
+ </p><pre class="programlisting">
+ std::for_each(c.find(1), c.find(5), foo);
+ </pre><p>
+ two point-type iterators (returned by <code class="function">find</code>) are used
+ for a range-type purpose - going over all elements whose key is
+ between 1 and 5.
+ </p><p>
+ Conversely, the above snippet makes no sense for
+ self-organizing containers - ones that order (and reorder)
+ their elements by implementation. It would be nice to have a
+ uniform iterator system that would allow the above snippet to
+ compile only if it made sense.
+ </p><p>
+ This could trivially be done by specializing
+ <code class="function">std::for_each</code> for the case of iterators returned by
+ <code class="classname">std::tr1::unordered_map</code>, but this would only solve the
+ problem for one algorithm and one container. Fundamentally, the
+ problem is that one can loop using a self-organizing
+ container's point-type iterators.
+ </p><p>
+ This library's containers define two families of
+ iterators: <span class="type">point_const_iterator</span> and
+ <span class="type">point_iterator</span> are the iterator types returned by
+ point-type methods; <span class="type">const_iterator</span> and
+ <span class="type">iterator</span> are the iterator types returned by range-type
+ methods.
+ </p><pre class="programlisting">
+ class &lt;- some container -&gt;
+ {
+ public:
+ ...
+
+ typedef &lt;- something -&gt; const_iterator;
+
+ typedef &lt;- something -&gt; iterator;
+
+ typedef &lt;- something -&gt; point_const_iterator;
+
+ typedef &lt;- something -&gt; point_iterator;
+
+ ...
+
+ public:
+ ...
+
+ const_iterator begin () const;
+
+ iterator begin();
+
+ point_const_iterator find(...) const;
+
+ point_iterator find(...);
+ };
+ </pre><p>For
+ containers whose interface defines sequence order , it
+ is very simple: point-type and range-type iterators are exactly
+ the same, which means that the above snippet will compile if it
+ is used for an order-preserving associative container.
+ </p><p>
+ For self-organizing containers, however, (hash-based
+ containers as a special example), the preceding snippet will
+ not compile, because their point-type iterators do not support
+ <code class="function">operator++</code>.
+ </p><p>In any case, both for order-preserving and self-organizing
+ containers, the following snippet will compile:
+ </p><pre class="programlisting">
+ typename Cntnr::point_iterator it = c.find(2);
+ </pre><p>
+ because a range-type iterator can always be converted to a
+ point-type iterator.
+ </p><p>Distingushing between iterator types also
+ raises the point that a container's iterators might have
+ different invalidation rules concerning their de-referencing
+ abilities and movement abilities. This now corresponds exactly
+ to the question of whether point-type and range-type iterators
+ are valid. As explained above, <code class="classname">container_traits</code> allows
+ querying a container for its data structure attributes. The
+ iterator-invalidation guarantees are certainly a property of
+ the underlying data structure, and so
+ </p><pre class="programlisting">
+ container_traits&lt;C&gt;::invalidation_guarantee
+ </pre><p>
+ gives one of three pre-determined types that answer this
+ query.
+ </p></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.examples"></a>Examples</h3></div></div></div><p>
+ Additional code examples are provided in the source
+ distribution, as part of the regression and performance
+ testsuite.
+ </p><div class="section" title="Intermediate Use"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.basic"></a>Intermediate Use</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Basic use of maps:
+ <code class="filename">basic_map.cc</code>
+ </p></li><li class="listitem"><p>
+ Basic use of sets:
+ <code class="filename">basic_set.cc</code>
+ </p></li><li class="listitem"><p>
+ Conditionally erasing values from an associative container object:
+ <code class="filename">erase_if.cc</code>
+ </p></li><li class="listitem"><p>
+ Basic use of multimaps:
+ <code class="filename">basic_multimap.cc</code>
+ </p></li><li class="listitem"><p>
+ Basic use of multisets:
+ <code class="filename">basic_multiset.cc</code>
+ </p></li><li class="listitem"><p>
+ Basic use of priority queues:
+ <code class="filename">basic_priority_queue.cc</code>
+ </p></li><li class="listitem"><p>
+ Splitting and joining priority queues:
+ <code class="filename">priority_queue_split_join.cc</code>
+ </p></li><li class="listitem"><p>
+ Conditionally erasing values from a priority queue:
+ <code class="filename">priority_queue_erase_if.cc</code>
+ </p></li></ul></div></div><div class="section" title="Querying with container_traits"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.query"></a>Querying with <code class="classname">container_traits</code> </h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Using <code class="classname">container_traits</code> to query
+ about underlying data structure behavior:
+ <code class="filename">assoc_container_traits.cc</code>
+ </p></li><li class="listitem"><p>
+ A non-compiling example showing wrong use of finding keys in
+ hash-based containers: <code class="filename">hash_find_neg.cc</code>
+ </p></li><li class="listitem"><p>
+ Using <code class="classname">container_traits</code>
+ to query about underlying data structure behavior:
+ <code class="filename">priority_queue_container_traits.cc</code>
+ </p></li></ul></div></div><div class="section" title="By Container Method"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.container"></a>By Container Method</h4></div></div></div><p></p><div class="section" title="Hash-Based"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.hash"></a>Hash-Based</h5></div></div></div><div class="section" title="size Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.resize"></a>size Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Setting the initial size of a hash-based container
+ object:
+ <code class="filename">hash_initial_size.cc</code>
+ </p></li><li class="listitem"><p>
+ A non-compiling example showing how not to resize a
+ hash-based container object:
+ <code class="filename">hash_resize_neg.cc</code>
+ </p></li><li class="listitem"><p>
+ Resizing the size of a hash-based container object:
+ <code class="filename">hash_resize.cc</code>
+ </p></li><li class="listitem"><p>
+ Showing an illegal resize of a hash-based container
+ object:
+ <code class="filename">hash_illegal_resize.cc</code>
+ </p></li><li class="listitem"><p>
+ Changing the load factors of a hash-based container
+ object: <code class="filename">hash_load_set_change.cc</code>
+ </p></li></ul></div></div><div class="section" title="Hashing Function Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.hashor"></a>Hashing Function Related</h6></div></div></div><p></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Using a modulo range-hashing function for the case of an
+ unknown skewed key distribution:
+ <code class="filename">hash_mod.cc</code>
+ </p></li><li class="listitem"><p>
+ Writing a range-hashing functor for the case of a known
+ skewed key distribution:
+ <code class="filename">shift_mask.cc</code>
+ </p></li><li class="listitem"><p>
+ Storing the hash value along with each key:
+ <code class="filename">store_hash.cc</code>
+ </p></li><li class="listitem"><p>
+ Writing a ranged-hash functor:
+ <code class="filename">ranged_hash.cc</code>
+ </p></li></ul></div></div></div><div class="section" title="Branch-Based"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.branch"></a>Branch-Based</h5></div></div></div><div class="section" title="split or join Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.split"></a>split or join Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Joining two tree-based container objects:
+ <code class="filename">tree_join.cc</code>
+ </p></li><li class="listitem"><p>
+ Splitting a PATRICIA trie container object:
+ <code class="filename">trie_split.cc</code>
+ </p></li><li class="listitem"><p>
+ Order statistics while joining two tree-based container
+ objects:
+ <code class="filename">tree_order_statistics_join.cc</code>
+ </p></li></ul></div></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.invariants"></a>Node Invariants</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Using trees for order statistics:
+ <code class="filename">tree_order_statistics.cc</code>
+ </p></li><li class="listitem"><p>
+ Augmenting trees to support operations on line
+ intervals:
+ <code class="filename">tree_intervals.cc</code>
+ </p></li></ul></div></div><div class="section" title="trie"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.trie"></a>trie</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Using a PATRICIA trie for DNA strings:
+ <code class="filename">trie_dna.cc</code>
+ </p></li><li class="listitem"><p>
+ Using a PATRICIA
+ trie for finding all entries whose key matches a given prefix:
+ <code class="filename">trie_prefix_search.cc</code>
+ </p></li></ul></div></div></div><div class="section" title="Priority Queues"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.priority_queue"></a>Priority Queues</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Cross referencing an associative container and a priority
+ queue: <code class="filename">priority_queue_xref.cc</code>
+ </p></li><li class="listitem"><p>
+ Cross referencing a vector and a priority queue using a
+ very simple version of Dijkstra's shortest path
+ algorithm:
+ <code class="filename">priority_queue_dijkstra.cc</code>
+ </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Policy-Based Data Structures </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/profile_mode.html b/libstdc++-v3/doc/html/manual/profile_mode.html
index 3c1b2d3b52..a3bbab1ecc 100644
--- a/libstdc++-v3/doc/html/manual/profile_mode.html
+++ b/libstdc++-v3/doc/html/manual/profile_mode.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III.  Extensions"/><link rel="prev" href="bk01pt03ch18s05.html" title="Testing"/><link rel="next" href="bk01pt03ch19s02.html" title="Design"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 19. Profile Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"/>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.intro"/>Intro</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 19. Profile Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
recognition of suboptimal usage patterns of the standard library.
</p><p>
@@ -12,11 +12,11 @@
various components at interesting entry/exit points to/from the standard
library. Process trace, recognize suboptimal patterns, give advice.
For details, see
- <a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
+ <a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
CGO 2009</a>.
</p><p>
<span class="emphasis"><em>Strengths: </em></span>
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Unintrusive solution. The application code does not require any
modification.
</p></li><li class="listitem"><p> The advice is call context sensitive, thus capable of
@@ -27,14 +27,14 @@
</p></li></ul></div><p>
</p><p>
<span class="emphasis"><em>Drawbacks: </em></span>
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
You must recompile the application code with custom options.
</p></li><li class="listitem"><p>You must run the application on representative input.
The advice is input dependent.
</p></li><li class="listitem"><p>
The execution time will increase, in some cases by factors.
</p></li></ul></div><p>
- </p><div class="section" title="Using the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"/>Using the Profile Mode</h3></div></div></div><p>
+ </p><div class="section" title="Using the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"></a>Using the Profile Mode</h3></div></div></div><p>
This is the anticipated common workflow for program <code class="code">foo.cc</code>:
</p><pre class="programlisting">
$ cat foo.cc
@@ -54,7 +54,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
</pre><p>
</p><p>
Anatomy of a warning:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Warning id. This is a short descriptive string for the class
that this warning belongs to. E.g., "vector-to-list".
</p></li><li class="listitem"><p>
@@ -94,11 +94,11 @@ vector-size: improvement = 3: call stack = 0x804842c ...
We believe such warnings can help users understand the performance
behavior of their application better, which can lead to changes
at a higher abstraction level.
- </p></div><div class="section" title="Tuning the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"/>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
+ </p></div><div class="section" title="Tuning the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"></a>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
profiler.h). Unless specified otherwise, they can be set at compile time
using -D_&lt;name&gt; or by setting variable &lt;name&gt;
in the environment where the program is run, before starting execution.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="code">_GLIBCXX_PROFILE_NO_&lt;diagnostic&gt;</code>:
disable specific diagnostics.
See section Diagnostics for possible values.
@@ -138,9 +138,9 @@ vector-size: improvement = 3: call stack = 0x804842c ...
call context.
(Environment variable not supported.)
</p></li></ul></div><p>
- </p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"/>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id489940"/><p><span class="citetitle"><em class="citetitle">
+ </p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp17357280"></a><p><span class="citetitle"><em class="citetitle">
Perflint: A Context Sensitive Performance Advisor for C++ Programs
</em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
Proceedings of the 2009 International Symposium on Code Generation
and Optimization
- . </span></span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td align="left" valign="top">Testing </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Design</td></tr></table></div></body></html>
+ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/setup.html b/libstdc++-v3/doc/html/manual/setup.html
index e0b5caee6e..c83774b8f4 100644
--- a/libstdc++-v3/doc/html/manual/setup.html
+++ b/libstdc++-v3/doc/html/manual/setup.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="intro.html" title="Part I.  Introduction"/><link rel="prev" href="bugs.html" title="Bugs"/><link rel="next" href="configure.html" title="Configure"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. 
Introduction
-</th><td align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 2. Setup"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"/>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
+</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 2. Setup"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
and properly built binaries useful for linking to other software is
a multi-step process. Steps include getting the sources,
configuring and building the sources, testing, and installation.
@@ -19,12 +19,12 @@
make install
</pre><p>
Each step is described in more detail in the following sections.
- </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.prereq"/>Prerequisites</h2></div></div></div><p>
+ </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.prereq"></a>Prerequisites</h2></div></div></div><p>
Because libstdc++ is part of GCC, the primary source for
installation instructions is
- <a class="link" href="http://gcc.gnu.org/install/">the GCC install page</a>.
+ <a class="link" href="http://gcc.gnu.org/install/" target="_top">the GCC install page</a>.
In particular, list of prerequisite software needed to build the library
- <a class="link" href="http://gcc.gnu.org/install/prerequisites.html">
+ <a class="link" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">
starts with those requirements.</a> The same pages also list
the tools you will need if you wish to modify the source.
</p><p>
@@ -32,7 +32,7 @@
</p><p>As of GCC 4.0.1 the minimum version of binutils required to build
libstdc++ is <code class="code">2.15.90.0.1.1</code>. You can get snapshots
(as well as releases) of binutils from
- <a class="link" href="ftp://sources.redhat.com/pub/binutils/">
+ <a class="link" href="ftp://sources.redhat.com/pub/binutils/" target="_top">
ftp://sources.redhat.com/pub/binutils</a>.
Older releases of libstdc++ do not require such a recent version,
but to take full advantage of useful space-saving features and
@@ -46,9 +46,9 @@
</p><p>
Finally, a few system-specific requirements:
</p><div class="variablelist"><dl><dt><span class="term">linux</span></dt><dd><p>
- If gcc 3.1.0 or later on is being used on linux, an attempt
+ If GCC 3.1.0 or later on is being used on GNU/Linux, an attempt
will be made to use "C" library functionality necessary for
- C++ named locale support. For gcc 4.6.0 and later, this
+ C++ named locale support. For GCC 4.6.0 and later, this
means that glibc 2.3 or later is required.
</p><p>
If the 'gnu' locale model is being used, the following
@@ -87,16 +87,7 @@ zh_TW BIG5
libstdc++ after "C" locales are installed is not necessary.
</p><p>
To install support for locales, do only one of the following:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>install all locales</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>with RedHat Linux:
- </p><p> <code class="code"> export LC_ALL=C </code>
- </p><p> <code class="code"> rpm -e glibc-common --nodeps </code>
- </p><p>
- <code class="code"> rpm -i --define "_install_langs all"
- glibc-common-2.2.5-34.i386.rpm
- </code>
- </p></li><li class="listitem"><p>
- Instructions for other operating systems solicited.
- </p></li></ul></div></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>with Debian Linux:</p><p> Add the above list, as shown, to the file
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>install all locales</p></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with Debian GNU/Linux:</p><p> Add the above list, as shown, to the file
<code class="code">/etc/locale.gen</code> </p><p> run <code class="code">/usr/sbin/locale-gen</code> </p></li><li class="listitem"><p>on most Unix-like operating systems:</p><p><code class="code"> localedef -i de_DE -f ISO-8859-1 de_DE </code></p><p>(repeat for each entry in the above list) </p></li><li class="listitem"><p>
Instructions for other operating systems solicited.
- </p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><td align="center"><a accesskey="u" href="intro.html">Up</a></td><td align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr><tr><td align="left" valign="top">Bugs </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Configure</td></tr></table></div></body></html>
+ </p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Bugs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Configure</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/source_code_style.html b/libstdc++-v3/doc/html/manual/source_code_style.html
index ff4b4db2f3..0927ece403 100644
--- a/libstdc++-v3/doc/html/manual/source_code_style.html
+++ b/libstdc++-v3/doc/html/manual/source_code_style.html
@@ -1,620 +1,620 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing"/><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions"/><link rel="next" href="source_design_notes.html" title="Design Notes"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
Contributing
-</th><td align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr/></div><div class="section" title="Coding Style"><div class="titlepage"><div><div><h2 class="title"><a id="contrib.coding_style"/>Coding Style</h2></div></div></div><p>
- </p><div class="section" title="Bad Identifiers"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.bad_identifiers"/>Bad Identifiers</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section" title="Coding Style"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
+ </p><div class="section" title="Bad Identifiers"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.bad_identifiers"></a>Bad Identifiers</h3></div></div></div><p>
Identifiers that conflict and should be avoided.
- </p><div class="literallayout"><p><br/>
-      This is the list of names <span class="quote">“<span class="quote">reserved to the<br/>
-      implementation</span>â€</span> that have been claimed by certain<br/>
-      compilers and system headers of interest, and should not be used<br/>
-      in the library. It will grow, of course.  We generally are<br/>
-      interested in names that are not all-caps, except for those like<br/>
-      "_T"<br/>
-<br/>
-      For Solaris:<br/>
-      _B<br/>
-      _C<br/>
-      _L<br/>
-      _N<br/>
-      _P<br/>
-      _S<br/>
-      _U<br/>
-      _X<br/>
-      _E1<br/>
-      ..<br/>
-      _E24<br/>
-<br/>
-      Irix adds:<br/>
-      _A<br/>
-      _G<br/>
-<br/>
-      MS adds:<br/>
-      _T<br/>
-<br/>
-      BSD adds:<br/>
-      __used<br/>
-      __unused<br/>
-      __inline<br/>
-      _Complex<br/>
-      __istype<br/>
-      __maskrune<br/>
-      __tolower<br/>
-      __toupper<br/>
-      __wchar_t<br/>
-      __wint_t<br/>
-      _res<br/>
-      _res_ext<br/>
-      __tg_*<br/>
-<br/>
-      SPU adds:<br/>
-      __ea<br/>
-<br/>
-      For GCC:<br/>
-<br/>
-      [Note that this list is out of date. It applies to the old<br/>
-      name-mangling; in G++ 3.0 and higher a different name-mangling is<br/>
-      used. In addition, many of the bugs relating to G++ interpreting<br/>
-      these names as operators have been fixed.]<br/>
-<br/>
-      The full set of __* identifiers (combined from gcc/cp/lex.c and<br/>
-      gcc/cplus-dem.c) that are either old or new, but are definitely<br/>
-      recognized by the demangler, is:<br/>
-<br/>
-      __aa<br/>
-      __aad<br/>
-      __ad<br/>
-      __addr<br/>
-      __adv<br/>
-      __aer<br/>
-      __als<br/>
-      __alshift<br/>
-      __amd<br/>
-      __ami<br/>
-      __aml<br/>
-      __amu<br/>
-      __aor<br/>
-      __apl<br/>
-      __array<br/>
-      __ars<br/>
-      __arshift<br/>
-      __as<br/>
-      __bit_and<br/>
-      __bit_ior<br/>
-      __bit_not<br/>
-      __bit_xor<br/>
-      __call<br/>
-      __cl<br/>
-      __cm<br/>
-      __cn<br/>
-      __co<br/>
-      __component<br/>
-      __compound<br/>
-      __cond<br/>
-      __convert<br/>
-      __delete<br/>
-      __dl<br/>
-      __dv<br/>
-      __eq<br/>
-      __er<br/>
-      __ge<br/>
-      __gt<br/>
-      __indirect<br/>
-      __le<br/>
-      __ls<br/>
-      __lt<br/>
-      __max<br/>
-      __md<br/>
-      __method_call<br/>
-      __mi<br/>
-      __min<br/>
-      __minus<br/>
-      __ml<br/>
-      __mm<br/>
-      __mn<br/>
-      __mult<br/>
-      __mx<br/>
-      __ne<br/>
-      __negate<br/>
-      __new<br/>
-      __nop<br/>
-      __nt<br/>
-      __nw<br/>
-      __oo<br/>
-      __op<br/>
-      __or<br/>
-      __pl<br/>
-      __plus<br/>
-      __postdecrement<br/>
-      __postincrement<br/>
-      __pp<br/>
-      __pt<br/>
-      __rf<br/>
-      __rm<br/>
-      __rs<br/>
-      __sz<br/>
-      __trunc_div<br/>
-      __trunc_mod<br/>
-      __truth_andif<br/>
-      __truth_not<br/>
-      __truth_orif<br/>
-      __vc<br/>
-      __vd<br/>
-      __vn<br/>
-<br/>
-      SGI badnames:<br/>
-      __builtin_alloca<br/>
-      __builtin_fsqrt<br/>
-      __builtin_sqrt<br/>
-      __builtin_fabs<br/>
-      __builtin_dabs<br/>
-      __builtin_cast_f2i<br/>
-      __builtin_cast_i2f<br/>
-      __builtin_cast_d2ll<br/>
-      __builtin_cast_ll2d<br/>
-      __builtin_copy_dhi2i<br/>
-      __builtin_copy_i2dhi<br/>
-      __builtin_copy_dlo2i<br/>
-      __builtin_copy_i2dlo<br/>
-      __add_and_fetch<br/>
-      __sub_and_fetch<br/>
-      __or_and_fetch<br/>
-      __xor_and_fetch<br/>
-      __and_and_fetch<br/>
-      __nand_and_fetch<br/>
-      __mpy_and_fetch<br/>
-      __min_and_fetch<br/>
-      __max_and_fetch<br/>
-      __fetch_and_add<br/>
-      __fetch_and_sub<br/>
-      __fetch_and_or<br/>
-      __fetch_and_xor<br/>
-      __fetch_and_and<br/>
-      __fetch_and_nand<br/>
-      __fetch_and_mpy<br/>
-      __fetch_and_min<br/>
-      __fetch_and_max<br/>
-      __lock_test_and_set<br/>
-      __lock_release<br/>
-      __lock_acquire<br/>
-      __compare_and_swap<br/>
-      __synchronize<br/>
-      __high_multiply<br/>
-      __unix<br/>
-      __sgi<br/>
-      __linux__<br/>
-      __i386__<br/>
-      __i486__<br/>
-      __cplusplus<br/>
-      __embedded_cplusplus<br/>
-      // long double conversion members mangled as __opr<br/>
-      // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html<br/>
-      __opr<br/>
-    </p></div></div><div class="section" title="By Example"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"/>By Example</h3></div></div></div><div class="literallayout"><p><br/>
-      This library is written to appropriate C++ coding standards. As such,<br/>
-      it is intended to precede the recommendations of the GNU Coding<br/>
-      Standard, which can be referenced in full here:<br/>
-<br/>
-      <a class="link" href="http://www.gnu.org/prep/standards/standards.html#Formatting">http://www.gnu.org/prep/standards/standards.html#Formatting</a><br/>
-<br/>
-      The rest of this is also interesting reading, but skip the "Design<br/>
-      Advice" part.<br/>
-<br/>
-      The GCC coding conventions are here, and are also useful:<br/>
-      <a class="link" href="http://gcc.gnu.org/codingconventions.html">http://gcc.gnu.org/codingconventions.html</a><br/>
-<br/>
-      In addition, because it doesn't seem to be stated explicitly anywhere<br/>
-      else, there is an 80 column source limit.<br/>
-<br/>
-      <code class="filename">ChangeLog</code> entries for member functions should use the<br/>
-      classname::member function name syntax as follows:<br/>
-<br/>
-<code class="code"><br/>
-1999-04-15  Dennis Ritchie  &lt;dr@att.com&gt;<br/>
-<br/>
-      * src/basic_file.cc (__basic_file::open): Fix thinko in<br/>
-      _G_HAVE_IO_FILE_OPEN bits.<br/>
-</code><br/>
-<br/>
-      Notable areas of divergence from what may be previous local practice<br/>
-      (particularly for GNU C) include:<br/>
-<br/>
-      01. Pointers and references<br/>
-      <code class="code"><br/>
-        char* p = "flop";<br/>
-        char&amp; c = *p;<br/>
-          -NOT-<br/>
-        char *p = "flop";  // wrong<br/>
-        char &amp;c = *p;      // wrong<br/>
-      </code><br/>
-<br/>
-      Reason: In C++, definitions are mixed with executable code. Here,<br/>
-      <code class="code">p</code> is being initialized, not <code class="code">*p</code>.  This is near-universal<br/>
-      practice among C++ programmers; it is normal for C hackers<br/>
-      to switch spontaneously as they gain experience.<br/>
-<br/>
-      02. Operator names and parentheses<br/>
-      <code class="code"><br/>
-        operator==(type)<br/>
-          -NOT-<br/>
-        operator == (type)  // wrong<br/>
-      </code><br/>
-<br/>
-      Reason: The <code class="code">==</code> is part of the function name. Separating<br/>
-      it makes the declaration look like an expression.<br/>
-<br/>
-      03. Function names and parentheses<br/>
-      <code class="code"><br/>
-        void mangle()<br/>
-          -NOT-<br/>
-        void mangle ()  // wrong<br/>
-      </code><br/>
-<br/>
-      Reason: no space before parentheses (except after a control-flow<br/>
-      keyword) is near-universal practice for C++. It identifies the<br/>
-      parentheses as the function-call operator or declarator, as<br/>
-      opposed to an expression or other overloaded use of parentheses.<br/>
-<br/>
-      04. Template function indentation<br/>
-      <code class="code"><br/>
-        template&lt;typename T&gt;<br/>
-          void<br/>
-          template_function(args)<br/>
-          { }<br/>
-          -NOT-<br/>
-        template&lt;class T&gt;<br/>
-        void template_function(args) {};<br/>
-      </code><br/>
-<br/>
-      Reason: In class definitions, without indentation whitespace is<br/>
-      needed both above and below the declaration to distinguish<br/>
-      it visually from other members. (Also, re: "typename"<br/>
-      rather than "class".)  <code class="code">T</code> often could be <code class="code">int</code>, which is<br/>
-      not a class. ("class", here, is an anachronism.)<br/>
-<br/>
-      05. Template class indentation<br/>
-      <code class="code"><br/>
-        template&lt;typename _CharT, typename _Traits&gt;<br/>
-          class basic_ios : public ios_base<br/>
-          {<br/>
-          public:<br/>
-            // Types:<br/>
-          };<br/>
-          -NOT-<br/>
-        template&lt;class _CharT, class _Traits&gt;<br/>
-        class basic_ios : public ios_base<br/>
-          {<br/>
-          public:<br/>
-            // Types:<br/>
-          };<br/>
-          -NOT-<br/>
-        template&lt;class _CharT, class _Traits&gt;<br/>
-          class basic_ios : public ios_base<br/>
-        {<br/>
-          public:<br/>
-            // Types:<br/>
-        };<br/>
-      </code><br/>
-<br/>
-      06. Enumerators<br/>
-      <code class="code"><br/>
-        enum<br/>
-        {<br/>
-          space = _ISspace,<br/>
-          print = _ISprint,<br/>
-          cntrl = _IScntrl<br/>
-        };<br/>
-          -NOT-<br/>
-        enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };<br/>
-      </code><br/>
-<br/>
-      07. Member initialization lists<br/>
-      All one line, separate from class name.<br/>
-<br/>
-      <code class="code"><br/>
-        gribble::gribble()<br/>
-        : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br/>
-        { }<br/>
-          -NOT-<br/>
-        gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br/>
-        { }<br/>
-      </code><br/>
-<br/>
-      08. Try/Catch blocks<br/>
-      <code class="code"><br/>
-        try<br/>
-          {<br/>
-            //<br/>
-          }<br/>
-        catch (...)<br/>
-          {<br/>
-            //<br/>
-          }<br/>
-          -NOT-<br/>
-        try {<br/>
-          //<br/>
-        } catch(...) {<br/>
-          //<br/>
-        }<br/>
-      </code><br/>
-<br/>
-      09. Member functions declarations and definitions<br/>
-      Keywords such as extern, static, export, explicit, inline, etc<br/>
-      go on the line above the function name. Thus<br/>
-<br/>
-      <code class="code"><br/>
-      virtual int<br/>
-      foo()<br/>
-      -NOT-<br/>
-      virtual int foo()<br/>
-      </code><br/>
-<br/>
-      Reason: GNU coding conventions dictate return types for functions<br/>
-      are on a separate line than the function name and parameter list<br/>
-      for definitions. For C++, where we have member functions that can<br/>
-      be either inline definitions or declarations, keeping to this<br/>
-      standard allows all member function names for a given class to be<br/>
-      aligned to the same margin, increasing readability.<br/>
-<br/>
-<br/>
-      10. Invocation of member functions with "this-&gt;"<br/>
-      For non-uglified names, use <code class="code">this-&gt;name</code> to call the function.<br/>
-<br/>
-      <code class="code"><br/>
-      this-&gt;sync()<br/>
-      -NOT-<br/>
-      sync()<br/>
-      </code><br/>
-<br/>
-      Reason: Koenig lookup.<br/>
-<br/>
-      11. Namespaces<br/>
-      <code class="code"><br/>
-      namespace std<br/>
-      {<br/>
-        blah blah blah;<br/>
-      } // namespace std<br/>
-<br/>
-      -NOT-<br/>
-<br/>
-      namespace std {<br/>
-        blah blah blah;<br/>
-      } // namespace std<br/>
-      </code><br/>
-<br/>
-      12. Spacing under protected and private in class declarations:<br/>
-      space above, none below<br/>
-      i.e.<br/>
-<br/>
-      <code class="code"><br/>
-      public:<br/>
-        int foo;<br/>
-<br/>
-      -NOT-<br/>
-      public:<br/>
-<br/>
-        int foo;<br/>
-      </code><br/>
-<br/>
-      13. Spacing WRT return statements.<br/>
-      no extra spacing before returns, no parenthesis<br/>
-      i.e.<br/>
-<br/>
-      <code class="code"><br/>
-      }<br/>
-      return __ret;<br/>
-<br/>
-      -NOT-<br/>
-      }<br/>
-<br/>
-      return __ret;<br/>
-<br/>
-      -NOT-<br/>
-<br/>
-      }<br/>
-      return (__ret);<br/>
-      </code><br/>
-<br/>
-<br/>
-      14. Location of global variables.<br/>
-      All global variables of class type, whether in the "user visible"<br/>
-      space (e.g., <code class="code">cin</code>) or the implementation namespace, must be defined<br/>
-      as a character array with the appropriate alignment and then later<br/>
-      re-initialized to the correct value.<br/>
-<br/>
-      This is due to startup issues on certain platforms, such as AIX.<br/>
-      For more explanation and examples, see <code class="filename">src/globals.cc</code>. All such<br/>
-      variables should be contained in that file, for simplicity.<br/>
-<br/>
-      15. Exception abstractions<br/>
-      Use the exception abstractions found in <code class="filename">functexcept.h</code>, which allow<br/>
-      C++ programmers to use this library with <code class="literal">-fno-exceptions</code>.  (Even if<br/>
-      that is rarely advisable, it's a necessary evil for backwards<br/>
-      compatibility.)<br/>
-<br/>
-      16. Exception error messages<br/>
-      All start with the name of the function where the exception is<br/>
-      thrown, and then (optional) descriptive text is added. Example:<br/>
-<br/>
-      <code class="code"><br/>
-      __throw_logic_error(__N("basic_string::_S_construct NULL not valid"));<br/>
-      </code><br/>
-<br/>
-      Reason: The verbose terminate handler prints out <code class="code">exception::what()</code>,<br/>
-      as well as the typeinfo for the thrown exception. As this is the<br/>
-      default terminate handler, by putting location info into the<br/>
-      exception string, a very useful error message is printed out for<br/>
-      uncaught exceptions. So useful, in fact, that non-programmers can<br/>
-      give useful error messages, and programmers can intelligently<br/>
-      speculate what went wrong without even using a debugger.<br/>
-<br/>
-      17. The doxygen style guide to comments is a separate document,<br/>
-      see index.<br/>
-<br/>
-      The library currently has a mixture of GNU-C and modern C++ coding<br/>
-      styles. The GNU C usages will be combed out gradually.<br/>
-<br/>
-      Name patterns:<br/>
-<br/>
-      For nonstandard names appearing in Standard headers, we are constrained<br/>
-      to use names that begin with underscores. This is called "uglification".<br/>
-      The convention is:<br/>
-<br/>
-      Local and argument names:  <code class="literal">__[a-z].*</code><br/>
-<br/>
-      Examples:  <code class="code">__count  __ix  __s1</code><br/>
-<br/>
-      Type names and template formal-argument names: <code class="literal">_[A-Z][^_].*</code><br/>
-<br/>
-      Examples:  <code class="code">_Helper  _CharT  _N</code><br/>
-<br/>
-      Member data and function names: <code class="literal">_M_.*</code><br/>
-<br/>
-      Examples:  <code class="code">_M_num_elements  _M_initialize ()</code><br/>
-<br/>
-      Static data members, constants, and enumerations: <code class="literal">_S_.*</code><br/>
-<br/>
-      Examples: <code class="code">_S_max_elements  _S_default_value</code><br/>
-<br/>
-      Don't use names in the same scope that differ only in the prefix,<br/>
-      e.g. _S_top and _M_top. See BADNAMES for a list of forbidden names.<br/>
-      (The most tempting of these seem to be and "_T" and "__sz".)<br/>
-<br/>
-      Names must never have "__" internally; it would confuse name<br/>
-      unmanglers on some targets. Also, never use "__[0-9]", same reason.<br/>
-<br/>
-      --------------------------<br/>
-<br/>
-      [BY EXAMPLE]<br/>
-      <code class="code"><br/>
-<br/>
-      #ifndef  _HEADER_<br/>
-      #define  _HEADER_ 1<br/>
-<br/>
-      namespace std<br/>
-      {<br/>
-        class gribble<br/>
-        {<br/>
-        public:<br/>
-          gribble() throw();<br/>
-<br/>
-          gribble(const gribble&amp;);<br/>
-<br/>
-          explicit<br/>
-          gribble(int __howmany);<br/>
-<br/>
-          gribble&amp;<br/>
-          operator=(const gribble&amp;);<br/>
-<br/>
-          virtual<br/>
-          ~gribble() throw ();<br/>
-<br/>
-          // Start with a capital letter, end with a period.<br/>
-          inline void<br/>
-          public_member(const char* __arg) const;<br/>
-<br/>
-          // In-class function definitions should be restricted to one-liners.<br/>
-          int<br/>
-          one_line() { return 0 }<br/>
-<br/>
-          int<br/>
-          two_lines(const char* arg)<br/>
-          { return strchr(arg, 'a'); }<br/>
-<br/>
-          inline int<br/>
-          three_lines();  // inline, but defined below.<br/>
-<br/>
-          // Note indentation.<br/>
-          template&lt;typename _Formal_argument&gt;<br/>
-            void<br/>
-            public_template() const throw();<br/>
-<br/>
-          template&lt;typename _Iterator&gt;<br/>
-            void<br/>
-            other_template();<br/>
-<br/>
-        private:<br/>
-          class _Helper;<br/>
-<br/>
-          int _M_private_data;<br/>
-          int _M_more_stuff;<br/>
-          _Helper* _M_helper;<br/>
-          int _M_private_function();<br/>
-<br/>
-          enum _Enum<br/>
-            {<br/>
-              _S_one,<br/>
-              _S_two<br/>
-            };<br/>
-<br/>
-          static void<br/>
-          _S_initialize_library();<br/>
-        };<br/>
-<br/>
-        // More-or-less-standard language features described by lack, not presence.<br/>
-      # ifndef _G_NO_LONGLONG<br/>
-        extern long long _G_global_with_a_good_long_name;  // avoid globals!<br/>
-      # endif<br/>
-<br/>
-        // Avoid in-class inline definitions, define separately;<br/>
-        // likewise for member class definitions:<br/>
-        inline int<br/>
-        gribble::public_member() const<br/>
-        { int __local = 0; return __local; }<br/>
-<br/>
-        class gribble::_Helper<br/>
-        {<br/>
-          int _M_stuff;<br/>
-<br/>
-          friend class gribble;<br/>
-        };<br/>
-      }<br/>
-<br/>
-      // Names beginning with "__": only for arguments and<br/>
-      //   local variables; never use "__" in a type name, or<br/>
-      //   within any name; never use "__[0-9]".<br/>
-<br/>
-      #endif /* _HEADER_ */<br/>
-<br/>
-<br/>
-      namespace std<br/>
-      {<br/>
-        template&lt;typename T&gt;  // notice: "typename", not "class", no space<br/>
-          long_return_value_type&lt;with_many, args&gt;<br/>
-          function_name(char* pointer,               // "char *pointer" is wrong.<br/>
-                        char* argument,<br/>
-                        const Reference&amp; ref)<br/>
-          {<br/>
-            // int a_local;  /* wrong; see below. */<br/>
-            if (test)<br/>
-            {<br/>
-              nested code<br/>
-            }<br/>
-<br/>
-            int a_local = 0;  // declare variable at first use.<br/>
-<br/>
-            //  char a, b, *p;   /* wrong */<br/>
-            char a = 'a';<br/>
-            char b = a + 1;<br/>
-            char* c = "abc";  // each variable goes on its own line, always.<br/>
-<br/>
-            // except maybe here...<br/>
-            for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {<br/>
-              // ...<br/>
-            }<br/>
-          }<br/>
-<br/>
-        gribble::gribble()<br/>
-        : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br/>
-        { }<br/>
-<br/>
-        int<br/>
-        gribble::three_lines()<br/>
-        {<br/>
-          // doesn't fit in one line.<br/>
-        }<br/>
-      } // namespace std<br/>
-      </code><br/>
-    </p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td align="left" valign="top">Directory Layout and Source Conventions </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
+ </p><div class="literallayout"><p><br />
+      This is the list of names <span class="quote">“<span class="quote">reserved to the<br />
+      implementation</span>â€</span> that have been claimed by certain<br />
+      compilers and system headers of interest, and should not be used<br />
+      in the library. It will grow, of course.  We generally are<br />
+      interested in names that are not all-caps, except for those like<br />
+      "_T"<br />
+<br />
+      For Solaris:<br />
+      _B<br />
+      _C<br />
+      _L<br />
+      _N<br />
+      _P<br />
+      _S<br />
+      _U<br />
+      _X<br />
+      _E1<br />
+      ..<br />
+      _E24<br />
+<br />
+      Irix adds:<br />
+      _A<br />
+      _G<br />
+<br />
+      MS adds:<br />
+      _T<br />
+<br />
+      BSD adds:<br />
+      __used<br />
+      __unused<br />
+      __inline<br />
+      _Complex<br />
+      __istype<br />
+      __maskrune<br />
+      __tolower<br />
+      __toupper<br />
+      __wchar_t<br />
+      __wint_t<br />
+      _res<br />
+      _res_ext<br />
+      __tg_*<br />
+<br />
+      SPU adds:<br />
+      __ea<br />
+<br />
+      For GCC:<br />
+<br />
+      [Note that this list is out of date. It applies to the old<br />
+      name-mangling; in G++ 3.0 and higher a different name-mangling is<br />
+      used. In addition, many of the bugs relating to G++ interpreting<br />
+      these names as operators have been fixed.]<br />
+<br />
+      The full set of __* identifiers (combined from gcc/cp/lex.c and<br />
+      gcc/cplus-dem.c) that are either old or new, but are definitely<br />
+      recognized by the demangler, is:<br />
+<br />
+      __aa<br />
+      __aad<br />
+      __ad<br />
+      __addr<br />
+      __adv<br />
+      __aer<br />
+      __als<br />
+      __alshift<br />
+      __amd<br />
+      __ami<br />
+      __aml<br />
+      __amu<br />
+      __aor<br />
+      __apl<br />
+      __array<br />
+      __ars<br />
+      __arshift<br />
+      __as<br />
+      __bit_and<br />
+      __bit_ior<br />
+      __bit_not<br />
+      __bit_xor<br />
+      __call<br />
+      __cl<br />
+      __cm<br />
+      __cn<br />
+      __co<br />
+      __component<br />
+      __compound<br />
+      __cond<br />
+      __convert<br />
+      __delete<br />
+      __dl<br />
+      __dv<br />
+      __eq<br />
+      __er<br />
+      __ge<br />
+      __gt<br />
+      __indirect<br />
+      __le<br />
+      __ls<br />
+      __lt<br />
+      __max<br />
+      __md<br />
+      __method_call<br />
+      __mi<br />
+      __min<br />
+      __minus<br />
+      __ml<br />
+      __mm<br />
+      __mn<br />
+      __mult<br />
+      __mx<br />
+      __ne<br />
+      __negate<br />
+      __new<br />
+      __nop<br />
+      __nt<br />
+      __nw<br />
+      __oo<br />
+      __op<br />
+      __or<br />
+      __pl<br />
+      __plus<br />
+      __postdecrement<br />
+      __postincrement<br />
+      __pp<br />
+      __pt<br />
+      __rf<br />
+      __rm<br />
+      __rs<br />
+      __sz<br />
+      __trunc_div<br />
+      __trunc_mod<br />
+      __truth_andif<br />
+      __truth_not<br />
+      __truth_orif<br />
+      __vc<br />
+      __vd<br />
+      __vn<br />
+<br />
+      SGI badnames:<br />
+      __builtin_alloca<br />
+      __builtin_fsqrt<br />
+      __builtin_sqrt<br />
+      __builtin_fabs<br />
+      __builtin_dabs<br />
+      __builtin_cast_f2i<br />
+      __builtin_cast_i2f<br />
+      __builtin_cast_d2ll<br />
+      __builtin_cast_ll2d<br />
+      __builtin_copy_dhi2i<br />
+      __builtin_copy_i2dhi<br />
+      __builtin_copy_dlo2i<br />
+      __builtin_copy_i2dlo<br />
+      __add_and_fetch<br />
+      __sub_and_fetch<br />
+      __or_and_fetch<br />
+      __xor_and_fetch<br />
+      __and_and_fetch<br />
+      __nand_and_fetch<br />
+      __mpy_and_fetch<br />
+      __min_and_fetch<br />
+      __max_and_fetch<br />
+      __fetch_and_add<br />
+      __fetch_and_sub<br />
+      __fetch_and_or<br />
+      __fetch_and_xor<br />
+      __fetch_and_and<br />
+      __fetch_and_nand<br />
+      __fetch_and_mpy<br />
+      __fetch_and_min<br />
+      __fetch_and_max<br />
+      __lock_test_and_set<br />
+      __lock_release<br />
+      __lock_acquire<br />
+      __compare_and_swap<br />
+      __synchronize<br />
+      __high_multiply<br />
+      __unix<br />
+      __sgi<br />
+      __linux__<br />
+      __i386__<br />
+      __i486__<br />
+      __cplusplus<br />
+      __embedded_cplusplus<br />
+      // long double conversion members mangled as __opr<br />
+      // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html<br />
+      __opr<br />
+    </p></div></div><div class="section" title="By Example"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"></a>By Example</h3></div></div></div><div class="literallayout"><p><br />
+      This library is written to appropriate C++ coding standards. As such,<br />
+      it is intended to precede the recommendations of the GNU Coding<br />
+      Standard, which can be referenced in full here:<br />
+<br />
+      <a class="link" href="http://www.gnu.org/prep/standards/standards.html#Formatting" target="_top">http://www.gnu.org/prep/standards/standards.html#Formatting</a><br />
+<br />
+      The rest of this is also interesting reading, but skip the "Design<br />
+      Advice" part.<br />
+<br />
+      The GCC coding conventions are here, and are also useful:<br />
+      <a class="link" href="http://gcc.gnu.org/codingconventions.html" target="_top">http://gcc.gnu.org/codingconventions.html</a><br />
+<br />
+      In addition, because it doesn't seem to be stated explicitly anywhere<br />
+      else, there is an 80 column source limit.<br />
+<br />
+      <code class="filename">ChangeLog</code> entries for member functions should use the<br />
+      classname::member function name syntax as follows:<br />
+<br />
+<code class="code"><br />
+1999-04-15  Dennis Ritchie  &lt;dr@att.com&gt;<br />
+<br />
+      * src/basic_file.cc (__basic_file::open): Fix thinko in<br />
+      _G_HAVE_IO_FILE_OPEN bits.<br />
+</code><br />
+<br />
+      Notable areas of divergence from what may be previous local practice<br />
+      (particularly for GNU C) include:<br />
+<br />
+      01. Pointers and references<br />
+      <code class="code"><br />
+        char* p = "flop";<br />
+        char&amp; c = *p;<br />
+          -NOT-<br />
+        char *p = "flop";  // wrong<br />
+        char &amp;c = *p;      // wrong<br />
+      </code><br />
+<br />
+      Reason: In C++, definitions are mixed with executable code. Here,<br />
+      <code class="code">p</code> is being initialized, not <code class="code">*p</code>.  This is near-universal<br />
+      practice among C++ programmers; it is normal for C hackers<br />
+      to switch spontaneously as they gain experience.<br />
+<br />
+      02. Operator names and parentheses<br />
+      <code class="code"><br />
+        operator==(type)<br />
+          -NOT-<br />
+        operator == (type)  // wrong<br />
+      </code><br />
+<br />
+      Reason: The <code class="code">==</code> is part of the function name. Separating<br />
+      it makes the declaration look like an expression.<br />
+<br />
+      03. Function names and parentheses<br />
+      <code class="code"><br />
+        void mangle()<br />
+          -NOT-<br />
+        void mangle ()  // wrong<br />
+      </code><br />
+<br />
+      Reason: no space before parentheses (except after a control-flow<br />
+      keyword) is near-universal practice for C++. It identifies the<br />
+      parentheses as the function-call operator or declarator, as<br />
+      opposed to an expression or other overloaded use of parentheses.<br />
+<br />
+      04. Template function indentation<br />
+      <code class="code"><br />
+        template&lt;typename T&gt;<br />
+          void<br />
+          template_function(args)<br />
+          { }<br />
+          -NOT-<br />
+        template&lt;class T&gt;<br />
+        void template_function(args) {};<br />
+      </code><br />
+<br />
+      Reason: In class definitions, without indentation whitespace is<br />
+      needed both above and below the declaration to distinguish<br />
+      it visually from other members. (Also, re: "typename"<br />
+      rather than "class".)  <code class="code">T</code> often could be <code class="code">int</code>, which is<br />
+      not a class. ("class", here, is an anachronism.)<br />
+<br />
+      05. Template class indentation<br />
+      <code class="code"><br />
+        template&lt;typename _CharT, typename _Traits&gt;<br />
+          class basic_ios : public ios_base<br />
+          {<br />
+          public:<br />
+            // Types:<br />
+          };<br />
+          -NOT-<br />
+        template&lt;class _CharT, class _Traits&gt;<br />
+        class basic_ios : public ios_base<br />
+          {<br />
+          public:<br />
+            // Types:<br />
+          };<br />
+          -NOT-<br />
+        template&lt;class _CharT, class _Traits&gt;<br />
+          class basic_ios : public ios_base<br />
+        {<br />
+          public:<br />
+            // Types:<br />
+        };<br />
+      </code><br />
+<br />
+      06. Enumerators<br />
+      <code class="code"><br />
+        enum<br />
+        {<br />
+          space = _ISspace,<br />
+          print = _ISprint,<br />
+          cntrl = _IScntrl<br />
+        };<br />
+          -NOT-<br />
+        enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };<br />
+      </code><br />
+<br />
+      07. Member initialization lists<br />
+      All one line, separate from class name.<br />
+<br />
+      <code class="code"><br />
+        gribble::gribble()<br />
+        : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br />
+        { }<br />
+          -NOT-<br />
+        gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br />
+        { }<br />
+      </code><br />
+<br />
+      08. Try/Catch blocks<br />
+      <code class="code"><br />
+        try<br />
+          {<br />
+            //<br />
+          }<br />
+        catch (...)<br />
+          {<br />
+            //<br />
+          }<br />
+          -NOT-<br />
+        try {<br />
+          //<br />
+        } catch(...) {<br />
+          //<br />
+        }<br />
+      </code><br />
+<br />
+      09. Member functions declarations and definitions<br />
+      Keywords such as extern, static, export, explicit, inline, etc<br />
+      go on the line above the function name. Thus<br />
+<br />
+      <code class="code"><br />
+      virtual int<br />
+      foo()<br />
+      -NOT-<br />
+      virtual int foo()<br />
+      </code><br />
+<br />
+      Reason: GNU coding conventions dictate return types for functions<br />
+      are on a separate line than the function name and parameter list<br />
+      for definitions. For C++, where we have member functions that can<br />
+      be either inline definitions or declarations, keeping to this<br />
+      standard allows all member function names for a given class to be<br />
+      aligned to the same margin, increasing readability.<br />
+<br />
+<br />
+      10. Invocation of member functions with "this-&gt;"<br />
+      For non-uglified names, use <code class="code">this-&gt;name</code> to call the function.<br />
+<br />
+      <code class="code"><br />
+      this-&gt;sync()<br />
+      -NOT-<br />
+      sync()<br />
+      </code><br />
+<br />
+      Reason: Koenig lookup.<br />
+<br />
+      11. Namespaces<br />
+      <code class="code"><br />
+      namespace std<br />
+      {<br />
+        blah blah blah;<br />
+      } // namespace std<br />
+<br />
+      -NOT-<br />
+<br />
+      namespace std {<br />
+        blah blah blah;<br />
+      } // namespace std<br />
+      </code><br />
+<br />
+      12. Spacing under protected and private in class declarations:<br />
+      space above, none below<br />
+      i.e.<br />
+<br />
+      <code class="code"><br />
+      public:<br />
+        int foo;<br />
+<br />
+      -NOT-<br />
+      public:<br />
+<br />
+        int foo;<br />
+      </code><br />
+<br />
+      13. Spacing WRT return statements.<br />
+      no extra spacing before returns, no parenthesis<br />
+      i.e.<br />
+<br />
+      <code class="code"><br />
+      }<br />
+      return __ret;<br />
+<br />
+      -NOT-<br />
+      }<br />
+<br />
+      return __ret;<br />
+<br />
+      -NOT-<br />
+<br />
+      }<br />
+      return (__ret);<br />
+      </code><br />
+<br />
+<br />
+      14. Location of global variables.<br />
+      All global variables of class type, whether in the "user visible"<br />
+      space (e.g., <code class="code">cin</code>) or the implementation namespace, must be defined<br />
+      as a character array with the appropriate alignment and then later<br />
+      re-initialized to the correct value.<br />
+<br />
+      This is due to startup issues on certain platforms, such as AIX.<br />
+      For more explanation and examples, see <code class="filename">src/globals.cc</code>. All such<br />
+      variables should be contained in that file, for simplicity.<br />
+<br />
+      15. Exception abstractions<br />
+      Use the exception abstractions found in <code class="filename">functexcept.h</code>, which allow<br />
+      C++ programmers to use this library with <code class="literal">-fno-exceptions</code>.  (Even if<br />
+      that is rarely advisable, it's a necessary evil for backwards<br />
+      compatibility.)<br />
+<br />
+      16. Exception error messages<br />
+      All start with the name of the function where the exception is<br />
+      thrown, and then (optional) descriptive text is added. Example:<br />
+<br />
+      <code class="code"><br />
+      __throw_logic_error(__N("basic_string::_S_construct NULL not valid"));<br />
+      </code><br />
+<br />
+      Reason: The verbose terminate handler prints out <code class="code">exception::what()</code>,<br />
+      as well as the typeinfo for the thrown exception. As this is the<br />
+      default terminate handler, by putting location info into the<br />
+      exception string, a very useful error message is printed out for<br />
+      uncaught exceptions. So useful, in fact, that non-programmers can<br />
+      give useful error messages, and programmers can intelligently<br />
+      speculate what went wrong without even using a debugger.<br />
+<br />
+      17. The doxygen style guide to comments is a separate document,<br />
+      see index.<br />
+<br />
+      The library currently has a mixture of GNU-C and modern C++ coding<br />
+      styles. The GNU C usages will be combed out gradually.<br />
+<br />
+      Name patterns:<br />
+<br />
+      For nonstandard names appearing in Standard headers, we are constrained<br />
+      to use names that begin with underscores. This is called "uglification".<br />
+      The convention is:<br />
+<br />
+      Local and argument names:  <code class="literal">__[a-z].*</code><br />
+<br />
+      Examples:  <code class="code">__count  __ix  __s1</code><br />
+<br />
+      Type names and template formal-argument names: <code class="literal">_[A-Z][^_].*</code><br />
+<br />
+      Examples:  <code class="code">_Helper  _CharT  _N</code><br />
+<br />
+      Member data and function names: <code class="literal">_M_.*</code><br />
+<br />
+      Examples:  <code class="code">_M_num_elements  _M_initialize ()</code><br />
+<br />
+      Static data members, constants, and enumerations: <code class="literal">_S_.*</code><br />
+<br />
+      Examples: <code class="code">_S_max_elements  _S_default_value</code><br />
+<br />
+      Don't use names in the same scope that differ only in the prefix,<br />
+      e.g. _S_top and _M_top. See BADNAMES for a list of forbidden names.<br />
+      (The most tempting of these seem to be and "_T" and "__sz".)<br />
+<br />
+      Names must never have "__" internally; it would confuse name<br />
+      unmanglers on some targets. Also, never use "__[0-9]", same reason.<br />
+<br />
+      --------------------------<br />
+<br />
+      [BY EXAMPLE]<br />
+      <code class="code"><br />
+<br />
+      #ifndef  _HEADER_<br />
+      #define  _HEADER_ 1<br />
+<br />
+      namespace std<br />
+      {<br />
+        class gribble<br />
+        {<br />
+        public:<br />
+          gribble() throw();<br />
+<br />
+          gribble(const gribble&amp;);<br />
+<br />
+          explicit<br />
+          gribble(int __howmany);<br />
+<br />
+          gribble&amp;<br />
+          operator=(const gribble&amp;);<br />
+<br />
+          virtual<br />
+          ~gribble() throw ();<br />
+<br />
+          // Start with a capital letter, end with a period.<br />
+          inline void<br />
+          public_member(const char* __arg) const;<br />
+<br />
+          // In-class function definitions should be restricted to one-liners.<br />
+          int<br />
+          one_line() { return 0 }<br />
+<br />
+          int<br />
+          two_lines(const char* arg)<br />
+          { return strchr(arg, 'a'); }<br />
+<br />
+          inline int<br />
+          three_lines();  // inline, but defined below.<br />
+<br />
+          // Note indentation.<br />
+          template&lt;typename _Formal_argument&gt;<br />
+            void<br />
+            public_template() const throw();<br />
+<br />
+          template&lt;typename _Iterator&gt;<br />
+            void<br />
+            other_template();<br />
+<br />
+        private:<br />
+          class _Helper;<br />
+<br />
+          int _M_private_data;<br />
+          int _M_more_stuff;<br />
+          _Helper* _M_helper;<br />
+          int _M_private_function();<br />
+<br />
+          enum _Enum<br />
+            {<br />
+              _S_one,<br />
+              _S_two<br />
+            };<br />
+<br />
+          static void<br />
+          _S_initialize_library();<br />
+        };<br />
+<br />
+        // More-or-less-standard language features described by lack, not presence.<br />
+      # ifndef _G_NO_LONGLONG<br />
+        extern long long _G_global_with_a_good_long_name;  // avoid globals!<br />
+      # endif<br />
+<br />
+        // Avoid in-class inline definitions, define separately;<br />
+        // likewise for member class definitions:<br />
+        inline int<br />
+        gribble::public_member() const<br />
+        { int __local = 0; return __local; }<br />
+<br />
+        class gribble::_Helper<br />
+        {<br />
+          int _M_stuff;<br />
+<br />
+          friend class gribble;<br />
+        };<br />
+      }<br />
+<br />
+      // Names beginning with "__": only for arguments and<br />
+      //   local variables; never use "__" in a type name, or<br />
+      //   within any name; never use "__[0-9]".<br />
+<br />
+      #endif /* _HEADER_ */<br />
+<br />
+<br />
+      namespace std<br />
+      {<br />
+        template&lt;typename T&gt;  // notice: "typename", not "class", no space<br />
+          long_return_value_type&lt;with_many, args&gt;<br />
+          function_name(char* pointer,               // "char *pointer" is wrong.<br />
+                        char* argument,<br />
+                        const Reference&amp; ref)<br />
+          {<br />
+            // int a_local;  /* wrong; see below. */<br />
+            if (test)<br />
+            {<br />
+              nested code<br />
+            }<br />
+<br />
+            int a_local = 0;  // declare variable at first use.<br />
+<br />
+            //  char a, b, *p;   /* wrong */<br />
+            char a = 'a';<br />
+            char b = a + 1;<br />
+            char* c = "abc";  // each variable goes on its own line, always.<br />
+<br />
+            // except maybe here...<br />
+            for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {<br />
+              // ...<br />
+            }<br />
+          }<br />
+<br />
+        gribble::gribble()<br />
+        : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br />
+        { }<br />
+<br />
+        int<br />
+        gribble::three_lines()<br />
+        {<br />
+          // doesn't fit in one line.<br />
+        }<br />
+      } // namespace std<br />
+      </code><br />
+    </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Directory Layout and Source Conventions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/source_design_notes.html b/libstdc++-v3/doc/html/manual/source_design_notes.html
index fab57a6479..5f5bb50f06 100644
--- a/libstdc++-v3/doc/html/manual/source_design_notes.html
+++ b/libstdc++-v3/doc/html/manual/source_design_notes.html
@@ -1,863 +1,863 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing"/><link rel="prev" href="source_code_style.html" title="Coding Style"/><link rel="next" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
Contributing
-</th><td align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design Notes"><div class="titlepage"><div><div><h2 class="title"><a id="contrib.design_notes"/>Design Notes</h2></div></div></div><p>
- </p><div class="literallayout"><p><br/>
-<br/>
-    The Library<br/>
-    -----------<br/>
-<br/>
-    This paper is covers two major areas:<br/>
-<br/>
-    - Features and policies not mentioned in the standard that<br/>
-    the quality of the library implementation depends on, including<br/>
-    extensions and "implementation-defined" features;<br/>
-<br/>
-    - Plans for required but unimplemented library features and<br/>
-    optimizations to them.<br/>
-<br/>
-    Overhead<br/>
-    --------<br/>
-<br/>
-    The standard defines a large library, much larger than the standard<br/>
-    C library. A naive implementation would suffer substantial overhead<br/>
-    in compile time, executable size, and speed, rendering it unusable<br/>
-    in many (particularly embedded) applications. The alternative demands<br/>
-    care in construction, and some compiler support, but there is no<br/>
-    need for library subsets.<br/>
-<br/>
-    What are the sources of this overhead?  There are four main causes:<br/>
-<br/>
-    - The library is specified almost entirely as templates, which<br/>
-    with current compilers must be included in-line, resulting in<br/>
-    very slow builds as tens or hundreds of thousands of lines<br/>
-    of function definitions are read for each user source file.<br/>
-    Indeed, the entire SGI STL, as well as the dos Reis valarray,<br/>
-    are provided purely as header files, largely for simplicity in<br/>
-    porting. Iostream/locale is (or will be) as large again.<br/>
-<br/>
-    - The library is very flexible, specifying a multitude of hooks<br/>
-    where users can insert their own code in place of defaults.<br/>
-    When these hooks are not used, any time and code expended to<br/>
-    support that flexibility is wasted.<br/>
-<br/>
-    - Templates are often described as causing to "code bloat". In<br/>
-    practice, this refers (when it refers to anything real) to several<br/>
-    independent processes. First, when a class template is manually<br/>
-    instantiated in its entirely, current compilers place the definitions<br/>
-    for all members in a single object file, so that a program linking<br/>
-    to one member gets definitions of all. Second, template functions<br/>
-    which do not actually depend on the template argument are, under<br/>
-    current compilers, generated anew for each instantiation, rather<br/>
-    than being shared with other instantiations. Third, some of the<br/>
-    flexibility mentioned above comes from virtual functions (both in<br/>
-    regular classes and template classes) which current linkers add<br/>
-    to the executable file even when they manifestly cannot be called.<br/>
-<br/>
-    - The library is specified to use a language feature, exceptions,<br/>
-    which in the current gcc compiler ABI imposes a run time and<br/>
-    code space cost to handle the possibility of exceptions even when<br/>
-    they are not used. Under the new ABI (accessed with -fnew-abi),<br/>
-    there is a space overhead and a small reduction in code efficiency<br/>
-    resulting from lost optimization opportunities associated with<br/>
-    non-local branches associated with exceptions.<br/>
-<br/>
-    What can be done to eliminate this overhead?  A variety of coding<br/>
-    techniques, and compiler, linker and library improvements and<br/>
-    extensions may be used, as covered below. Most are not difficult,<br/>
-    and some are already implemented in varying degrees.<br/>
-<br/>
-    Overhead: Compilation Time<br/>
-    --------------------------<br/>
-<br/>
-    Providing "ready-instantiated" template code in object code archives<br/>
-    allows us to avoid generating and optimizing template instantiations<br/>
-    in each compilation unit which uses them. However, the number of such<br/>
-    instantiations that are useful to provide is limited, and anyway this<br/>
-    is not enough, by itself, to minimize compilation time. In particular,<br/>
-    it does not reduce time spent parsing conforming headers.<br/>
-<br/>
-    Quicker header parsing will depend on library extensions and compiler<br/>
-    improvements.  One approach is some variation on the techniques<br/>
-    previously marketed as "pre-compiled headers", now standardized as<br/>
-    support for the "export" keyword. "Exported" template definitions<br/>
-    can be placed (once) in a "repository" -- really just a library, but<br/>
-    of template definitions rather than object code -- to be drawn upon<br/>
-    at link time when an instantiation is needed, rather than placed in<br/>
-    header files to be parsed along with every compilation unit.<br/>
-<br/>
-    Until "export" is implemented we can put some of the lengthy template<br/>
-    definitions in #if guards or alternative headers so that users can skip<br/>
-    over the full definitions when they need only the ready-instantiated<br/>
-    specializations.<br/>
-<br/>
-    To be precise, this means that certain headers which define<br/>
-    templates which users normally use only for certain arguments<br/>
-    can be instrumented to avoid exposing the template definitions<br/>
-    to the compiler unless a macro is defined. For example, in<br/>
-    &lt;string&gt;, we might have:<br/>
-<br/>
-    template &lt;class _CharT, ... &gt; class basic_string {<br/>
-    ... // member declarations<br/>
-    };<br/>
-    ... // operator declarations<br/>
-<br/>
-    #ifdef _STRICT_ISO_<br/>
-    # if _G_NO_TEMPLATE_EXPORT<br/>
-    #   include &lt;bits/std_locale.h&gt;  // headers needed by definitions<br/>
-    #   ...<br/>
-    #   include &lt;bits/string.tcc&gt;  // member and global template definitions.<br/>
-    # endif<br/>
-    #endif<br/>
-<br/>
-    Users who compile without specifying a strict-ISO-conforming flag<br/>
-    would not see many of the template definitions they now see, and rely<br/>
-    instead on ready-instantiated specializations in the library. This<br/>
-    technique would be useful for the following substantial components:<br/>
-    string, locale/iostreams, valarray. It would *not* be useful or<br/>
-    usable with the following: containers, algorithms, iterators,<br/>
-    allocator. Since these constitute a large (though decreasing)<br/>
-    fraction of the library, the benefit the technique offers is<br/>
-    limited.<br/>
-<br/>
-    The language specifies the semantics of the "export" keyword, but<br/>
-    the gcc compiler does not yet support it. When it does, problems<br/>
-    with large template inclusions can largely disappear, given some<br/>
-    minor library reorganization, along with the need for the apparatus<br/>
-    described above.<br/>
-<br/>
-    Overhead: Flexibility Cost<br/>
-    --------------------------<br/>
-<br/>
-    The library offers many places where users can specify operations<br/>
-    to be performed by the library in place of defaults. Sometimes<br/>
-    this seems to require that the library use a more-roundabout, and<br/>
-    possibly slower, way to accomplish the default requirements than<br/>
-    would be used otherwise.<br/>
-<br/>
-    The primary protection against this overhead is thorough compiler<br/>
-    optimization, to crush out layers of inline function interfaces.<br/>
-    Kuck &amp; Associates has demonstrated the practicality of this kind<br/>
-    of optimization.<br/>
-<br/>
-    The second line of defense against this overhead is explicit<br/>
-    specialization. By defining helper function templates, and writing<br/>
-    specialized code for the default case, overhead can be eliminated<br/>
-    for that case without sacrificing flexibility. This takes full<br/>
-    advantage of any ability of the optimizer to crush out degenerate<br/>
-    code.<br/>
-<br/>
-    The library specifies many virtual functions which current linkers<br/>
-    load even when they cannot be called. Some minor improvements to the<br/>
-    compiler and to ld would eliminate any such overhead by simply<br/>
-    omitting virtual functions that the complete program does not call.<br/>
-    A prototype of this work has already been done. For targets where<br/>
-    GNU ld is not used, a "pre-linker" could do the same job.<br/>
-<br/>
-    The main areas in the standard interface where user flexibility<br/>
-    can result in overhead are:<br/>
-<br/>
-    - Allocators:  Containers are specified to use user-definable<br/>
-    allocator types and objects, making tuning for the container<br/>
-    characteristics tricky.<br/>
-<br/>
-    - Locales: the standard specifies locale objects used to implement<br/>
-    iostream operations, involving many virtual functions which use<br/>
-    streambuf iterators.<br/>
-<br/>
-    - Algorithms and containers: these may be instantiated on any type,<br/>
-    frequently duplicating code for identical operations.<br/>
-<br/>
-    - Iostreams and strings: users are permitted to use these on their<br/>
-    own types, and specify the operations the stream must use on these<br/>
-    types.<br/>
-<br/>
-    Note that these sources of overhead are _avoidable_. The techniques<br/>
-    to avoid them are covered below.<br/>
-<br/>
-    Code Bloat<br/>
-    ----------<br/>
-<br/>
-    In the SGI STL, and in some other headers, many of the templates<br/>
-    are defined "inline" -- either explicitly or by their placement<br/>
-    in class definitions -- which should not be inline. This is a<br/>
-    source of code bloat. Matt had remarked that he was relying on<br/>
-    the compiler to recognize what was too big to benefit from inlining,<br/>
-    and generate it out-of-line automatically. However, this also can<br/>
-    result in code bloat except where the linker can eliminate the extra<br/>
-    copies.<br/>
-<br/>
-    Fixing these cases will require an audit of all inline functions<br/>
-    defined in the library to determine which merit inlining, and moving<br/>
-    the rest out of line. This is an issue mainly in chapters 23, 25, and<br/>
-    27. Of course it can be done incrementally, and we should generally<br/>
-    accept patches that move large functions out of line and into ".tcc"<br/>
-    files, which can later be pulled into a repository. Compiler/linker<br/>
-    improvements to recognize very large inline functions and move them<br/>
-    out-of-line, but shared among compilation units, could make this<br/>
-    work unnecessary.<br/>
-<br/>
-    Pre-instantiating template specializations currently produces large<br/>
-    amounts of dead code which bloats statically linked programs. The<br/>
-    current state of the static library, libstdc++.a, is intolerable on<br/>
-    this account, and will fuel further confused speculation about a need<br/>
-    for a library "subset". A compiler improvement that treats each<br/>
-    instantiated function as a separate object file, for linking purposes,<br/>
-    would be one solution to this problem. An alternative would be to<br/>
-    split up the manual instantiation files into dozens upon dozens of<br/>
-    little files, each compiled separately, but an abortive attempt at<br/>
-    this was done for &lt;string&gt; and, though it is far from complete, it<br/>
-    is already a nuisance. A better interim solution (just until we have<br/>
-    "export") is badly needed.<br/>
-<br/>
-    When building a shared library, the current compiler/linker cannot<br/>
-    automatically generate the instantiations needed. This creates a<br/>
-    miserable situation; it means any time something is changed in the<br/>
-    library, before a shared library can be built someone must manually<br/>
-    copy the declarations of all templates that are needed by other parts<br/>
-    of the library to an "instantiation" file, and add it to the build<br/>
-    system to be compiled and linked to the library. This process is<br/>
-    readily automated, and should be automated as soon as possible.<br/>
-    Users building their own shared libraries experience identical<br/>
-    frustrations.<br/>
-<br/>
-    Sharing common aspects of template definitions among instantiations<br/>
-    can radically reduce code bloat. The compiler could help a great<br/>
-    deal here by recognizing when a function depends on nothing about<br/>
-    a template parameter, or only on its size, and giving the resulting<br/>
-    function a link-name "equate" that allows it to be shared with other<br/>
-    instantiations. Implementation code could take advantage of the<br/>
-    capability by factoring out code that does not depend on the template<br/>
-    argument into separate functions to be merged by the compiler.<br/>
-<br/>
-    Until such a compiler optimization is implemented, much can be done<br/>
-    manually (if tediously) in this direction. One such optimization is<br/>
-    to derive class templates from non-template classes, and move as much<br/>
-    implementation as possible into the base class. Another is to partial-<br/>
-    specialize certain common instantiations, such as vector&lt;T*&gt;, to share<br/>
-    code for instantiations on all types T. While these techniques work,<br/>
-    they are far from the complete solution that a compiler improvement<br/>
-    would afford.<br/>
-<br/>
-    Overhead: Expensive Language Features<br/>
-    -------------------------------------<br/>
-<br/>
-    The main "expensive" language feature used in the standard library<br/>
-    is exception support, which requires compiling in cleanup code with<br/>
-    static table data to locate it, and linking in library code to use<br/>
-    the table. For small embedded programs the amount of such library<br/>
-    code and table data is assumed by some to be excessive. Under the<br/>
-    "new" ABI this perception is generally exaggerated, although in some<br/>
-    cases it may actually be excessive.<br/>
-<br/>
-    To implement a library which does not use exceptions directly is<br/>
-    not difficult given minor compiler support (to "turn off" exceptions<br/>
-    and ignore exception constructs), and results in no great library<br/>
-    maintenance difficulties. To be precise, given "-fno-exceptions",<br/>
-    the compiler should treat "try" blocks as ordinary blocks, and<br/>
-    "catch" blocks as dead code to ignore or eliminate. Compiler<br/>
-    support is not strictly necessary, except in the case of "function<br/>
-    try blocks"; otherwise the following macros almost suffice:<br/>
-<br/>
-    #define throw(X)<br/>
-    #define try      if (true)<br/>
-    #define catch(X) else if (false)<br/>
-<br/>
-    However, there may be a need to use function try blocks in the<br/>
-    library implementation, and use of macros in this way can make<br/>
-    correct diagnostics impossible. Furthermore, use of this scheme<br/>
-    would require the library to call a function to re-throw exceptions<br/>
-    from a try block. Implementing the above semantics in the compiler<br/>
-    is preferable.<br/>
-<br/>
-    Given the support above (however implemented) it only remains to<br/>
-    replace code that "throws" with a call to a well-documented "handler"<br/>
-    function in a separate compilation unit which may be replaced by<br/>
-    the user. The main source of exceptions that would be difficult<br/>
-    for users to avoid is memory allocation failures, but users can<br/>
-    define their own memory allocation primitives that never throw.<br/>
-    Otherwise, the complete list of such handlers, and which library<br/>
-    functions may call them, would be needed for users to be able to<br/>
-    implement the necessary substitutes. (Fortunately, they have the<br/>
-    source code.)<br/>
-<br/>
-    Opportunities<br/>
-    -------------<br/>
-<br/>
-    The template capabilities of C++ offer enormous opportunities for<br/>
-    optimizing common library operations, well beyond what would be<br/>
-    considered "eliminating overhead". In particular, many operations<br/>
-    done in Glibc with macros that depend on proprietary language<br/>
-    extensions can be implemented in pristine Standard C++. For example,<br/>
-    the chapter 25 algorithms, and even C library functions such as strchr,<br/>
-    can be specialized for the case of static arrays of known (small) size.<br/>
-<br/>
-    Detailed optimization opportunities are identified below where<br/>
-    the component where they would appear is discussed. Of course new<br/>
-    opportunities will be identified during implementation.<br/>
-<br/>
-    Unimplemented Required Library Features<br/>
-    ---------------------------------------<br/>
-<br/>
-    The standard specifies hundreds of components, grouped broadly by<br/>
-    chapter. These are listed in excruciating detail in the CHECKLIST<br/>
-    file.<br/>
-<br/>
-    17 general<br/>
-    18 support<br/>
-    19 diagnostics<br/>
-    20 utilities<br/>
-    21 string<br/>
-    22 locale<br/>
-    23 containers<br/>
-    24 iterators<br/>
-    25 algorithms<br/>
-    26 numerics<br/>
-    27 iostreams<br/>
-    Annex D  backward compatibility<br/>
-<br/>
-    Anyone participating in implementation of the library should obtain<br/>
-    a copy of the standard, ISO 14882.  People in the U.S. can obtain an<br/>
-    electronic copy for US$18 from ANSI's web site. Those from other<br/>
-    countries should visit http://www.iso.org/ to find out the location<br/>
-    of their country's representation in ISO, in order to know who can<br/>
-    sell them a copy.<br/>
-<br/>
-    The emphasis in the following sections is on unimplemented features<br/>
-    and optimization opportunities.<br/>
-<br/>
-    Chapter 17  General<br/>
-    -------------------<br/>
-<br/>
-    Chapter 17 concerns overall library requirements.<br/>
-<br/>
-    The standard doesn't mention threads. A multi-thread (MT) extension<br/>
-    primarily affects operators new and delete (18), allocator (20),<br/>
-    string (21), locale (22), and iostreams (27). The common underlying<br/>
-    support needed for this is discussed under chapter 20.<br/>
-<br/>
-    The standard requirements on names from the C headers create a<br/>
-    lot of work, mostly done. Names in the C headers must be visible<br/>
-    in the std:: and sometimes the global namespace; the names in the<br/>
-    two scopes must refer to the same object. More stringent is that<br/>
-    Koenig lookup implies that any types specified as defined in std::<br/>
-    really are defined in std::. Names optionally implemented as<br/>
-    macros in C cannot be macros in C++. (An overview may be read at<br/>
-    &lt;http://www.cantrip.org/cheaders.html&gt;). The scripts "inclosure"<br/>
-    and "mkcshadow", and the directories shadow/ and cshadow/, are the<br/>
-    beginning of an effort to conform in this area.<br/>
-<br/>
-    A correct conforming definition of C header names based on underlying<br/>
-    C library headers, and practical linking of conforming namespaced<br/>
-    customer code with third-party C libraries depends ultimately on<br/>
-    an ABI change, allowing namespaced C type names to be mangled into<br/>
-    type names as if they were global, somewhat as C function names in a<br/>
-    namespace, or C++ global variable names, are left unmangled. Perhaps<br/>
-    another "extern" mode, such as 'extern "C-global"' would be an<br/>
-    appropriate place for such type definitions. Such a type would<br/>
-    affect mangling as follows:<br/>
-<br/>
-    namespace A {<br/>
-    struct X {};<br/>
-    extern "C-global" {  // or maybe just 'extern "C"'<br/>
-    struct Y {};<br/>
-    };<br/>
-    }<br/>
-    void f(A::X*);  // mangles to f__FPQ21A1X<br/>
-    void f(A::Y*);  // mangles to f__FP1Y<br/>
-<br/>
-    (It may be that this is really the appropriate semantics for regular<br/>
-    'extern "C"', and 'extern "C-global"', as an extension, would not be<br/>
-    necessary.) This would allow functions declared in non-standard C headers<br/>
-    (and thus fixable by neither us nor users) to link properly with functions<br/>
-    declared using C types defined in properly-namespaced headers. The<br/>
-    problem this solves is that C headers (which C++ programmers do persist<br/>
-    in using) frequently forward-declare C struct tags without including<br/>
-    the header where the type is defined, as in<br/>
-<br/>
-    struct tm;<br/>
-    void munge(tm*);<br/>
-<br/>
-    Without some compiler accommodation, munge cannot be called by correct<br/>
-    C++ code using a pointer to a correctly-scoped tm* value.<br/>
-<br/>
-    The current C headers use the preprocessor extension "#include_next",<br/>
-    which the compiler complains about when run "-pedantic".<br/>
-    (Incidentally, it appears that "-fpedantic" is currently ignored,<br/>
-    probably a bug.)  The solution in the C compiler is to use<br/>
-    "-isystem" rather than "-I", but unfortunately in g++ this seems<br/>
-    also to wrap the whole header in an 'extern "C"' block, so it's<br/>
-    unusable for C++ headers. The correct solution appears to be to<br/>
-    allow the various special include-directory options, if not given<br/>
-    an argument, to affect subsequent include-directory options additively,<br/>
-    so that if one said<br/>
-<br/>
-    -pedantic -iprefix $(prefix) \<br/>
-    -idirafter -ino-pedantic -ino-extern-c -iwithprefix -I g++-v3 \<br/>
-    -iwithprefix -I g++-v3/ext<br/>
-<br/>
-    the compiler would search $(prefix)/g++-v3 and not report<br/>
-    pedantic warnings for files found there, but treat files in<br/>
-    $(prefix)/g++-v3/ext pedantically. (The undocumented semantics<br/>
-    of "-isystem" in g++ stink. Can they be rescinded?  If not it<br/>
-    must be replaced with something more rationally behaved.)<br/>
-<br/>
-    All the C headers need the treatment above; in the standard these<br/>
-    headers are mentioned in various chapters. Below, I have only<br/>
-    mentioned those that present interesting implementation issues.<br/>
-<br/>
-    The components identified as "mostly complete", below, have not been<br/>
-    audited for conformance. In many cases where the library passes<br/>
-    conformance tests we have non-conforming extensions that must be<br/>
-    wrapped in #if guards for "pedantic" use, and in some cases renamed<br/>
-    in a conforming way for continued use in the implementation regardless<br/>
-    of conformance flags.<br/>
-<br/>
-    The STL portion of the library still depends on a header<br/>
-    stl/bits/stl_config.h full of #ifdef clauses. This apparatus<br/>
-    should be replaced with autoconf/automake machinery.<br/>
-<br/>
-    The SGI STL defines a type_traits&lt;&gt; template, specialized for<br/>
-    many types in their code including the built-in numeric and<br/>
-    pointer types and some library types, to direct optimizations of<br/>
-    standard functions. The SGI compiler has been extended to generate<br/>
-    specializations of this template automatically for user types,<br/>
-    so that use of STL templates on user types can take advantage of<br/>
-    these optimizations. Specializations for other, non-STL, types<br/>
-    would make more optimizations possible, but extending the gcc<br/>
-    compiler in the same way would be much better. Probably the next<br/>
-    round of standardization will ratify this, but probably with<br/>
-    changes, so it probably should be renamed to place it in the<br/>
-    implementation namespace.<br/>
-<br/>
-    The SGI STL also defines a large number of extensions visible in<br/>
-    standard headers. (Other extensions that appear in separate headers<br/>
-    have been sequestered in subdirectories ext/ and backward/.)  All<br/>
-    these extensions should be moved to other headers where possible,<br/>
-    and in any case wrapped in a namespace (not std!), and (where kept<br/>
-    in a standard header) girded about with macro guards. Some cannot be<br/>
-    moved out of standard headers because they are used to implement<br/>
-    standard features.  The canonical method for accommodating these<br/>
-    is to use a protected name, aliased in macro guards to a user-space<br/>
-    name. Unfortunately C++ offers no satisfactory template typedef<br/>
-    mechanism, so very ad-hoc and unsatisfactory aliasing must be used<br/>
-    instead.<br/>
-<br/>
-    Implementation of a template typedef mechanism should have the highest<br/>
-    priority among possible extensions, on the same level as implementation<br/>
-    of the template "export" feature.<br/>
-<br/>
-    Chapter 18  Language support<br/>
-    ----------------------------<br/>
-<br/>
-    Headers: &lt;limits&gt; &lt;new&gt; &lt;typeinfo&gt; &lt;exception&gt;<br/>
-    C headers: &lt;cstddef&gt; &lt;climits&gt; &lt;cfloat&gt;  &lt;cstdarg&gt; &lt;csetjmp&gt;<br/>
-    &lt;ctime&gt;   &lt;csignal&gt; &lt;cstdlib&gt; (also 21, 25, 26)<br/>
-<br/>
-    This defines the built-in exceptions, rtti, numeric_limits&lt;&gt;,<br/>
-    operator new and delete. Much of this is provided by the<br/>
-    compiler in its static runtime library.<br/>
-<br/>
-    Work to do includes defining numeric_limits&lt;&gt; specializations in<br/>
-    separate files for all target architectures. Values for integer types<br/>
-    except for bool and wchar_t are readily obtained from the C header<br/>
-    &lt;limits.h&gt;, but values for the remaining numeric types (bool, wchar_t,<br/>
-    float, double, long double) must be entered manually. This is<br/>
-    largely dog work except for those members whose values are not<br/>
-    easily deduced from available documentation. Also, this involves<br/>
-    some work in target configuration to identify the correct choice of<br/>
-    file to build against and to install.<br/>
-<br/>
-    The definitions of the various operators new and delete must be<br/>
-    made thread-safe, which depends on a portable exclusion mechanism,<br/>
-    discussed under chapter 20.  Of course there is always plenty of<br/>
-    room for improvements to the speed of operators new and delete.<br/>
-<br/>
-    &lt;cstdarg&gt;, in Glibc, defines some macros that gcc does not allow to<br/>
-    be wrapped into an inline function. Probably this header will demand<br/>
-    attention whenever a new target is chosen. The functions atexit(),<br/>
-    exit(), and abort() in cstdlib have different semantics in C++, so<br/>
-    must be re-implemented for C++.<br/>
-<br/>
-    Chapter 19  Diagnostics<br/>
-    -----------------------<br/>
-<br/>
-    Headers: &lt;stdexcept&gt;<br/>
-    C headers: &lt;cassert&gt; &lt;cerrno&gt;<br/>
-<br/>
-    This defines the standard exception objects, which are "mostly complete".<br/>
-    Cygnus has a version, and now SGI provides a slightly different one.<br/>
-    It makes little difference which we use.<br/>
-<br/>
-    The C global name "errno", which C allows to be a variable or a macro,<br/>
-    is required in C++ to be a macro. For MT it must typically result in<br/>
-    a function call.<br/>
-<br/>
-    Chapter 20  Utilities<br/>
-    ---------------------<br/>
-    Headers: &lt;utility&gt; &lt;functional&gt; &lt;memory&gt;<br/>
-    C header: &lt;ctime&gt; (also in 18)<br/>
-<br/>
-    SGI STL provides "mostly complete" versions of all the components<br/>
-    defined in this chapter. However, the auto_ptr&lt;&gt; implementation<br/>
-    is known to be wrong. Furthermore, the standard definition of it<br/>
-    is known to be unimplementable as written. A minor change to the<br/>
-    standard would fix it, and auto_ptr&lt;&gt; should be adjusted to match.<br/>
-<br/>
-    Multi-threading affects the allocator implementation, and there must<br/>
-    be configuration/installation choices for different users' MT<br/>
-    requirements. Anyway, users will want to tune allocator options<br/>
-    to support different target conditions, MT or no.<br/>
-<br/>
-    The primitives used for MT implementation should be exposed, as an<br/>
-    extension, for users' own work. We need cross-CPU "mutex" support,<br/>
-    multi-processor shared-memory atomic integer operations, and single-<br/>
-    processor uninterruptible integer operations, and all three configurable<br/>
-    to be stubbed out for non-MT use, or to use an appropriately-loaded<br/>
-    dynamic library for the actual runtime environment, or statically<br/>
-    compiled in for cases where the target architecture is known.<br/>
-<br/>
-    Chapter 21  String<br/>
-    ------------------<br/>
-    Headers: &lt;string&gt;<br/>
-    C headers: &lt;cctype&gt; &lt;cwctype&gt; &lt;cstring&gt; &lt;cwchar&gt; (also in 27)<br/>
-    &lt;cstdlib&gt; (also in 18, 25, 26)<br/>
-<br/>
-    We have "mostly-complete" char_traits&lt;&gt; implementations. Many of the<br/>
-    char_traits&lt;char&gt; operations might be optimized further using existing<br/>
-    proprietary language extensions.<br/>
-<br/>
-    We have a "mostly-complete" basic_string&lt;&gt; implementation. The work<br/>
-    to manually instantiate char and wchar_t specializations in object<br/>
-    files to improve link-time behavior is extremely unsatisfactory,<br/>
-    literally tripling library-build time with no commensurate improvement<br/>
-    in static program link sizes. It must be redone. (Similar work is<br/>
-    needed for some components in chapters 22 and 27.)<br/>
-<br/>
-    Other work needed for strings is MT-safety, as discussed under the<br/>
-    chapter 20 heading.<br/>
-<br/>
-    The standard C type mbstate_t from &lt;cwchar&gt; and used in char_traits&lt;&gt;<br/>
-    must be different in C++ than in C, because in C++ the default constructor<br/>
-    value mbstate_t() must be the "base" or "ground" sequence state.<br/>
-    (According to the likely resolution of a recently raised Core issue,<br/>
-    this may become unnecessary. However, there are other reasons to<br/>
-    use a state type not as limited as whatever the C library provides.)<br/>
-    If we might want to provide conversions from (e.g.) internally-<br/>
-    represented EUC-wide to externally-represented Unicode, or vice-<br/>
-    versa, the mbstate_t we choose will need to be more accommodating<br/>
-    than what might be provided by an underlying C library.<br/>
-<br/>
-    There remain some basic_string template-member functions which do<br/>
-    not overload properly with their non-template brethren. The infamous<br/>
-    hack akin to what was done in vector&lt;&gt; is needed, to conform to<br/>
-    23.1.1 para 10. The CHECKLIST items for basic_string marked 'X',<br/>
-    or incomplete, are so marked for this reason.<br/>
-<br/>
-    Replacing the string iterators, which currently are simple character<br/>
-    pointers, with class objects would greatly increase the safety of the<br/>
-    client interface, and also permit a "debug" mode in which range,<br/>
-    ownership, and validity are rigorously checked. The current use of<br/>
-    raw pointers as string iterators is evil. vector&lt;&gt; iterators need the<br/>
-    same treatment. Note that the current implementation freely mixes<br/>
-    pointers and iterators, and that must be fixed before safer iterators<br/>
-    can be introduced.<br/>
-<br/>
-    Some of the functions in &lt;cstring&gt; are different from the C version.<br/>
-    generally overloaded on const and non-const argument pointers. For<br/>
-    example, in &lt;cstring&gt; strchr is overloaded. The functions isupper<br/>
-    etc. in &lt;cctype&gt; typically implemented as macros in C are functions<br/>
-    in C++, because they are overloaded with others of the same name<br/>
-    defined in &lt;locale&gt;.<br/>
-<br/>
-    Many of the functions required in &lt;cwctype&gt; and &lt;cwchar&gt; cannot be<br/>
-    implemented using underlying C facilities on intended targets because<br/>
-    such facilities only partly exist.<br/>
-<br/>
-    Chapter 22  Locale<br/>
-    ------------------<br/>
-    Headers: &lt;locale&gt;<br/>
-    C headers: &lt;clocale&gt;<br/>
-<br/>
-    We have a "mostly complete" class locale, with the exception of<br/>
-    code for constructing, and handling the names of, named locales.<br/>
-    The ways that locales are named (particularly when categories<br/>
-    (e.g. LC_TIME, LC_COLLATE) are different) varies among all target<br/>
-    environments. This code must be written in various versions and<br/>
-    chosen by configuration parameters.<br/>
-<br/>
-    Members of many of the facets defined in &lt;locale&gt; are stubs. Generally,<br/>
-    there are two sets of facets: the base class facets (which are supposed<br/>
-    to implement the "C" locale) and the "byname" facets, which are supposed<br/>
-    to read files to determine their behavior. The base ctype&lt;&gt;, collate&lt;&gt;,<br/>
-    and numpunct&lt;&gt; facets are "mostly complete", except that the table of<br/>
-    bitmask values used for "is" operations, and corresponding mask values,<br/>
-    are still defined in libio and just included/linked. (We will need to<br/>
-    implement these tables independently, soon, but should take advantage<br/>
-    of libio where possible.)  The num_put&lt;&gt;::put members for integer types<br/>
-    are "mostly complete".<br/>
-<br/>
-    A complete list of what has and has not been implemented may be<br/>
-    found in CHECKLIST. However, note that the current definition of<br/>
-    codecvt&lt;wchar_t,char,mbstate_t&gt; is wrong. It should simply write<br/>
-    out the raw bytes representing the wide characters, rather than<br/>
-    trying to convert each to a corresponding single "char" value.<br/>
-<br/>
-    Some of the facets are more important than others. Specifically,<br/>
-    the members of ctype&lt;&gt;, numpunct&lt;&gt;, num_put&lt;&gt;, and num_get&lt;&gt; facets<br/>
-    are used by other library facilities defined in &lt;string&gt;, &lt;istream&gt;,<br/>
-    and &lt;ostream&gt;, and the codecvt&lt;&gt; facet is used by basic_filebuf&lt;&gt;<br/>
-    in &lt;fstream&gt;, so a conforming iostream implementation depends on<br/>
-    these.<br/>
-<br/>
-    The "long long" type eventually must be supported, but code mentioning<br/>
-    it should be wrapped in #if guards to allow pedantic-mode compiling.<br/>
-<br/>
-    Performance of num_put&lt;&gt; and num_get&lt;&gt; depend critically on<br/>
-    caching computed values in ios_base objects, and on extensions<br/>
-    to the interface with streambufs.<br/>
-<br/>
-    Specifically: retrieving a copy of the locale object, extracting<br/>
-    the needed facets, and gathering data from them, for each call to<br/>
-    (e.g.) operator&lt;&lt; would be prohibitively slow.  To cache format<br/>
-    data for use by num_put&lt;&gt; and num_get&lt;&gt; we have a _Format_cache&lt;&gt;<br/>
-    object stored in the ios_base::pword() array. This is constructed<br/>
-    and initialized lazily, and is organized purely for utility. It<br/>
-    is discarded when a new locale with different facets is imbued.<br/>
-<br/>
-    Using only the public interfaces of the iterator arguments to the<br/>
-    facet functions would limit performance by forbidding "vector-style"<br/>
-    character operations. The streambuf iterator optimizations are<br/>
-    described under chapter 24, but facets can also bypass the streambuf<br/>
-    iterators via explicit specializations and operate directly on the<br/>
-    streambufs, and use extended interfaces to get direct access to the<br/>
-    streambuf internal buffer arrays. These extensions are mentioned<br/>
-    under chapter 27. These optimizations are particularly important<br/>
-    for input parsing.<br/>
-<br/>
-    Unused virtual members of locale facets can be omitted, as mentioned<br/>
-    above, by a smart linker.<br/>
-<br/>
-    Chapter 23  Containers<br/>
-    ----------------------<br/>
-    Headers: &lt;deque&gt; &lt;list&gt; &lt;queue&gt; &lt;stack&gt; &lt;vector&gt; &lt;map&gt; &lt;set&gt; &lt;bitset&gt;<br/>
-<br/>
-    All the components in chapter 23 are implemented in the SGI STL.<br/>
-    They are "mostly complete"; they include a large number of<br/>
-    nonconforming extensions which must be wrapped. Some of these<br/>
-    are used internally and must be renamed or duplicated.<br/>
-<br/>
-    The SGI components are optimized for large-memory environments. For<br/>
-    embedded targets, different criteria might be more appropriate. Users<br/>
-    will want to be able to tune this behavior. We should provide<br/>
-    ways for users to compile the library with different memory usage<br/>
-    characteristics.<br/>
-<br/>
-    A lot more work is needed on factoring out common code from different<br/>
-    specializations to reduce code size here and in chapter 25. The<br/>
-    easiest fix for this would be a compiler/ABI improvement that allows<br/>
-    the compiler to recognize when a specialization depends only on the<br/>
-    size (or other gross quality) of a template argument, and allow the<br/>
-    linker to share the code with similar specializations. In its<br/>
-    absence, many of the algorithms and containers can be partial-<br/>
-    specialized, at least for the case of pointers, but this only solves<br/>
-    a small part of the problem. Use of a type_traits-style template<br/>
-    allows a few more optimization opportunities, more if the compiler<br/>
-    can generate the specializations automatically.<br/>
-<br/>
-    As an optimization, containers can specialize on the default allocator<br/>
-    and bypass it, or take advantage of details of its implementation<br/>
-    after it has been improved upon.<br/>
-<br/>
-    Replacing the vector iterators, which currently are simple element<br/>
-    pointers, with class objects would greatly increase the safety of the<br/>
-    client interface, and also permit a "debug" mode in which range,<br/>
-    ownership, and validity are rigorously checked. The current use of<br/>
-    pointers for iterators is evil.<br/>
-<br/>
-    As mentioned for chapter 24, the deque iterator is a good example of<br/>
-    an opportunity to implement a "staged" iterator that would benefit<br/>
-    from specializations of some algorithms.<br/>
-<br/>
-    Chapter 24  Iterators<br/>
-    ---------------------<br/>
-    Headers: &lt;iterator&gt;<br/>
-<br/>
-    Standard iterators are "mostly complete", with the exception of<br/>
-    the stream iterators, which are not yet templatized on the<br/>
-    stream type. Also, the base class template iterator&lt;&gt; appears<br/>
-    to be wrong, so everything derived from it must also be wrong,<br/>
-    currently.<br/>
-<br/>
-    The streambuf iterators (currently located in stl/bits/std_iterator.h,<br/>
-    but should be under bits/) can be rewritten to take advantage of<br/>
-    friendship with the streambuf implementation.<br/>
-<br/>
-    Matt Austern has identified opportunities where certain iterator<br/>
-    types, particularly including streambuf iterators and deque<br/>
-    iterators, have a "two-stage" quality, such that an intermediate<br/>
-    limit can be checked much more quickly than the true limit on<br/>
-    range operations. If identified with a member of iterator_traits,<br/>
-    algorithms may be specialized for this case. Of course the<br/>
-    iterators that have this quality can be identified by specializing<br/>
-    a traits class.<br/>
-<br/>
-    Many of the algorithms must be specialized for the streambuf<br/>
-    iterators, to take advantage of block-mode operations, in order<br/>
-    to allow iostream/locale operations' performance not to suffer.<br/>
-    It may be that they could be treated as staged iterators and<br/>
-    take advantage of those optimizations.<br/>
-<br/>
-    Chapter 25  Algorithms<br/>
-    ----------------------<br/>
-    Headers: &lt;algorithm&gt;<br/>
-    C headers: &lt;cstdlib&gt; (also in 18, 21, 26))<br/>
-<br/>
-    The algorithms are "mostly complete". As mentioned above, they<br/>
-    are optimized for speed at the expense of code and data size.<br/>
-<br/>
-    Specializations of many of the algorithms for non-STL types would<br/>
-    give performance improvements, but we must use great care not to<br/>
-    interfere with fragile template overloading semantics for the<br/>
-    standard interfaces. Conventionally the standard function template<br/>
-    interface is an inline which delegates to a non-standard function<br/>
-    which is then overloaded (this is already done in many places in<br/>
-    the library). Particularly appealing opportunities for the sake of<br/>
-    iostream performance are for copy and find applied to streambuf<br/>
-    iterators or (as noted elsewhere) for staged iterators, of which<br/>
-    the streambuf iterators are a good example.<br/>
-<br/>
-    The bsearch and qsort functions cannot be overloaded properly as<br/>
-    required by the standard because gcc does not yet allow overloading<br/>
-    on the extern-"C"-ness of a function pointer.<br/>
-<br/>
-    Chapter 26  Numerics<br/>
-    --------------------<br/>
-    Headers: &lt;complex&gt; &lt;valarray&gt; &lt;numeric&gt;<br/>
-    C headers: &lt;cmath&gt;, &lt;cstdlib&gt; (also 18, 21, 25)<br/>
-<br/>
-    Numeric components: Gabriel dos Reis's valarray, Drepper's complex,<br/>
-    and the few algorithms from the STL are "mostly done".  Of course<br/>
-    optimization opportunities abound for the numerically literate. It<br/>
-    is not clear whether the valarray implementation really conforms<br/>
-    fully, in the assumptions it makes about aliasing (and lack thereof)<br/>
-    in its arguments.<br/>
-<br/>
-    The C div() and ldiv() functions are interesting, because they are the<br/>
-    only case where a C library function returns a class object by value.<br/>
-    Since the C++ type div_t must be different from the underlying C type<br/>
-    (which is in the wrong namespace) the underlying functions div() and<br/>
-    ldiv() cannot be re-used efficiently. Fortunately they are trivial to<br/>
-    re-implement.<br/>
-<br/>
-    Chapter 27  Iostreams<br/>
-    ---------------------<br/>
-    Headers: &lt;iosfwd&gt; &lt;streambuf&gt; &lt;ios&gt; &lt;ostream&gt; &lt;istream&gt; &lt;iostream&gt;<br/>
-    &lt;iomanip&gt; &lt;sstream&gt; &lt;fstream&gt;<br/>
-    C headers: &lt;cstdio&gt; &lt;cwchar&gt; (also in 21)<br/>
-<br/>
-    Iostream is currently in a very incomplete state. &lt;iosfwd&gt;, &lt;iomanip&gt;,<br/>
-    ios_base, and basic_ios&lt;&gt; are "mostly complete". basic_streambuf&lt;&gt; and<br/>
-    basic_ostream&lt;&gt; are well along, but basic_istream&lt;&gt; has had little work<br/>
-    done. The standard stream objects, &lt;sstream&gt; and &lt;fstream&gt; have been<br/>
-    started; basic_filebuf&lt;&gt; "write" functions have been implemented just<br/>
-    enough to do "hello, world".<br/>
-<br/>
-    Most of the istream and ostream operators &lt;&lt; and &gt;&gt; (with the exception<br/>
-    of the op&lt;&lt;(integer) ones) have not been changed to use locale primitives,<br/>
-    sentry objects, or char_traits members.<br/>
-<br/>
-    All these templates should be manually instantiated for char and<br/>
-    wchar_t in a way that links only used members into user programs.<br/>
-<br/>
-    Streambuf is fertile ground for optimization extensions. An extended<br/>
-    interface giving iterator access to its internal buffer would be very<br/>
-    useful for other library components.<br/>
-<br/>
-    Iostream operations (primarily operators &lt;&lt; and &gt;&gt;) can take advantage<br/>
-    of the case where user code has not specified a locale, and bypass locale<br/>
-    operations entirely. The current implementation of op&lt;&lt;/num_put&lt;&gt;::put,<br/>
-    for the integer types, demonstrates how they can cache encoding details<br/>
-    from the locale on each operation. There is lots more room for<br/>
-    optimization in this area.<br/>
-<br/>
-    The definition of the relationship between the standard streams<br/>
-    cout et al. and stdout et al. requires something like a "stdiobuf".<br/>
-    The SGI solution of using double-indirection to actually use a<br/>
-    stdio FILE object for buffering is unsatisfactory, because it<br/>
-    interferes with peephole loop optimizations.<br/>
-<br/>
-    The &lt;sstream&gt; header work has begun. stringbuf can benefit from<br/>
-    friendship with basic_string&lt;&gt; and basic_string&lt;&gt;::_Rep to use<br/>
-    those objects directly as buffers, and avoid allocating and making<br/>
-    copies.<br/>
-<br/>
-    The basic_filebuf&lt;&gt; template is a complex beast. It is specified to<br/>
-    use the locale facet codecvt&lt;&gt; to translate characters between native<br/>
-    files and the locale character encoding. In general this involves<br/>
-    two buffers, one of "char" representing the file and another of<br/>
-    "char_type", for the stream, with codecvt&lt;&gt; translating. The process<br/>
-    is complicated by the variable-length nature of the translation, and<br/>
-    the need to seek to corresponding places in the two representations.<br/>
-    For the case of basic_filebuf&lt;char&gt;, when no translation is needed,<br/>
-    a single buffer suffices. A specialized filebuf can be used to reduce<br/>
-    code space overhead when no locale has been imbued. Matt Austern's<br/>
-    work at SGI will be useful, perhaps directly as a source of code, or<br/>
-    at least as an example to draw on.<br/>
-<br/>
-    Filebuf, almost uniquely (cf. operator new), depends heavily on<br/>
-    underlying environmental facilities. In current releases iostream<br/>
-    depends fairly heavily on libio constant definitions, but it should<br/>
-    be made independent.  It also depends on operating system primitives<br/>
-    for file operations. There is immense room for optimizations using<br/>
-    (e.g.) mmap for reading. The shadow/ directory wraps, besides the<br/>
-    standard C headers, the libio.h and unistd.h headers, for use mainly<br/>
-    by filebuf. These wrappings have not been completed, though there<br/>
-    is scaffolding in place.<br/>
-<br/>
-    The encapsulation of certain C header &lt;cstdio&gt; names presents an<br/>
-    interesting problem. It is possible to define an inline std::fprintf()<br/>
-    implemented in terms of the 'extern "C"' vfprintf(), but there is no<br/>
-    standard vfscanf() to use to implement std::fscanf(). It appears that<br/>
-    vfscanf but be re-implemented in C++ for targets where no vfscanf<br/>
-    extension has been defined. This is interesting in that it seems<br/>
-    to be the only significant case in the C library where this kind of<br/>
-    rewriting is necessary. (Of course Glibc provides the vfscanf()<br/>
-    extension.)  (The functions related to exit() must be rewritten<br/>
-    for other reasons.)<br/>
-<br/>
-<br/>
-    Annex D<br/>
-    -------<br/>
-    Headers: &lt;strstream&gt;<br/>
-<br/>
-    Annex D defines many non-library features, and many minor<br/>
-    modifications to various headers, and a complete header.<br/>
-    It is "mostly done", except that the libstdc++-2 &lt;strstream&gt;<br/>
-    header has not been adopted into the library, or checked to<br/>
-    verify that it matches the draft in those details that were<br/>
-    clarified by the committee. Certainly it must at least be<br/>
-    moved into the std namespace.<br/>
-<br/>
-    We still need to wrap all the deprecated features in #if guards<br/>
-    so that pedantic compile modes can detect their use.<br/>
-<br/>
-    Nonstandard Extensions<br/>
-    ----------------------<br/>
-    Headers: &lt;iostream.h&gt; &lt;strstream.h&gt; &lt;hash&gt; &lt;rbtree&gt;<br/>
-    &lt;pthread_alloc&gt; &lt;stdiobuf&gt; (etc.)<br/>
-<br/>
-    User code has come to depend on a variety of nonstandard components<br/>
-    that we must not omit. Much of this code can be adopted from<br/>
-    libstdc++-v2 or from the SGI STL. This particularly includes<br/>
-    &lt;iostream.h&gt;, &lt;strstream.h&gt;, and various SGI extensions such<br/>
-    as &lt;hash_map.h&gt;. Many of these are already placed in the<br/>
-    subdirectories ext/ and backward/. (Note that it is better to<br/>
-    include them via "&lt;backward/hash_map.h&gt;" or "&lt;ext/hash_map&gt;" than<br/>
-    to search the subdirectory itself via a "-I" directive.<br/>
-  </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr><tr><td align="left" valign="top">Coding Style </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix B. 
+</th><td width="20%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design Notes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
+ </p><div class="literallayout"><p><br />
+<br />
+    The Library<br />
+    -----------<br />
+<br />
+    This paper is covers two major areas:<br />
+<br />
+    - Features and policies not mentioned in the standard that<br />
+    the quality of the library implementation depends on, including<br />
+    extensions and "implementation-defined" features;<br />
+<br />
+    - Plans for required but unimplemented library features and<br />
+    optimizations to them.<br />
+<br />
+    Overhead<br />
+    --------<br />
+<br />
+    The standard defines a large library, much larger than the standard<br />
+    C library. A naive implementation would suffer substantial overhead<br />
+    in compile time, executable size, and speed, rendering it unusable<br />
+    in many (particularly embedded) applications. The alternative demands<br />
+    care in construction, and some compiler support, but there is no<br />
+    need for library subsets.<br />
+<br />
+    What are the sources of this overhead?  There are four main causes:<br />
+<br />
+    - The library is specified almost entirely as templates, which<br />
+    with current compilers must be included in-line, resulting in<br />
+    very slow builds as tens or hundreds of thousands of lines<br />
+    of function definitions are read for each user source file.<br />
+    Indeed, the entire SGI STL, as well as the dos Reis valarray,<br />
+    are provided purely as header files, largely for simplicity in<br />
+    porting. Iostream/locale is (or will be) as large again.<br />
+<br />
+    - The library is very flexible, specifying a multitude of hooks<br />
+    where users can insert their own code in place of defaults.<br />
+    When these hooks are not used, any time and code expended to<br />
+    support that flexibility is wasted.<br />
+<br />
+    - Templates are often described as causing to "code bloat". In<br />
+    practice, this refers (when it refers to anything real) to several<br />
+    independent processes. First, when a class template is manually<br />
+    instantiated in its entirely, current compilers place the definitions<br />
+    for all members in a single object file, so that a program linking<br />
+    to one member gets definitions of all. Second, template functions<br />
+    which do not actually depend on the template argument are, under<br />
+    current compilers, generated anew for each instantiation, rather<br />
+    than being shared with other instantiations. Third, some of the<br />
+    flexibility mentioned above comes from virtual functions (both in<br />
+    regular classes and template classes) which current linkers add<br />
+    to the executable file even when they manifestly cannot be called.<br />
+<br />
+    - The library is specified to use a language feature, exceptions,<br />
+    which in the current gcc compiler ABI imposes a run time and<br />
+    code space cost to handle the possibility of exceptions even when<br />
+    they are not used. Under the new ABI (accessed with -fnew-abi),<br />
+    there is a space overhead and a small reduction in code efficiency<br />
+    resulting from lost optimization opportunities associated with<br />
+    non-local branches associated with exceptions.<br />
+<br />
+    What can be done to eliminate this overhead?  A variety of coding<br />
+    techniques, and compiler, linker and library improvements and<br />
+    extensions may be used, as covered below. Most are not difficult,<br />
+    and some are already implemented in varying degrees.<br />
+<br />
+    Overhead: Compilation Time<br />
+    --------------------------<br />
+<br />
+    Providing "ready-instantiated" template code in object code archives<br />
+    allows us to avoid generating and optimizing template instantiations<br />
+    in each compilation unit which uses them. However, the number of such<br />
+    instantiations that are useful to provide is limited, and anyway this<br />
+    is not enough, by itself, to minimize compilation time. In particular,<br />
+    it does not reduce time spent parsing conforming headers.<br />
+<br />
+    Quicker header parsing will depend on library extensions and compiler<br />
+    improvements.  One approach is some variation on the techniques<br />
+    previously marketed as "pre-compiled headers", now standardized as<br />
+    support for the "export" keyword. "Exported" template definitions<br />
+    can be placed (once) in a "repository" -- really just a library, but<br />
+    of template definitions rather than object code -- to be drawn upon<br />
+    at link time when an instantiation is needed, rather than placed in<br />
+    header files to be parsed along with every compilation unit.<br />
+<br />
+    Until "export" is implemented we can put some of the lengthy template<br />
+    definitions in #if guards or alternative headers so that users can skip<br />
+    over the full definitions when they need only the ready-instantiated<br />
+    specializations.<br />
+<br />
+    To be precise, this means that certain headers which define<br />
+    templates which users normally use only for certain arguments<br />
+    can be instrumented to avoid exposing the template definitions<br />
+    to the compiler unless a macro is defined. For example, in<br />
+    &lt;string&gt;, we might have:<br />
+<br />
+    template &lt;class _CharT, ... &gt; class basic_string {<br />
+    ... // member declarations<br />
+    };<br />
+    ... // operator declarations<br />
+<br />
+    #ifdef _STRICT_ISO_<br />
+    # if _G_NO_TEMPLATE_EXPORT<br />
+    #   include &lt;bits/std_locale.h&gt;  // headers needed by definitions<br />
+    #   ...<br />
+    #   include &lt;bits/string.tcc&gt;  // member and global template definitions.<br />
+    # endif<br />
+    #endif<br />
+<br />
+    Users who compile without specifying a strict-ISO-conforming flag<br />
+    would not see many of the template definitions they now see, and rely<br />
+    instead on ready-instantiated specializations in the library. This<br />
+    technique would be useful for the following substantial components:<br />
+    string, locale/iostreams, valarray. It would *not* be useful or<br />
+    usable with the following: containers, algorithms, iterators,<br />
+    allocator. Since these constitute a large (though decreasing)<br />
+    fraction of the library, the benefit the technique offers is<br />
+    limited.<br />
+<br />
+    The language specifies the semantics of the "export" keyword, but<br />
+    the gcc compiler does not yet support it. When it does, problems<br />
+    with large template inclusions can largely disappear, given some<br />
+    minor library reorganization, along with the need for the apparatus<br />
+    described above.<br />
+<br />
+    Overhead: Flexibility Cost<br />
+    --------------------------<br />
+<br />
+    The library offers many places where users can specify operations<br />
+    to be performed by the library in place of defaults. Sometimes<br />
+    this seems to require that the library use a more-roundabout, and<br />
+    possibly slower, way to accomplish the default requirements than<br />
+    would be used otherwise.<br />
+<br />
+    The primary protection against this overhead is thorough compiler<br />
+    optimization, to crush out layers of inline function interfaces.<br />
+    Kuck &amp; Associates has demonstrated the practicality of this kind<br />
+    of optimization.<br />
+<br />
+    The second line of defense against this overhead is explicit<br />
+    specialization. By defining helper function templates, and writing<br />
+    specialized code for the default case, overhead can be eliminated<br />
+    for that case without sacrificing flexibility. This takes full<br />
+    advantage of any ability of the optimizer to crush out degenerate<br />
+    code.<br />
+<br />
+    The library specifies many virtual functions which current linkers<br />
+    load even when they cannot be called. Some minor improvements to the<br />
+    compiler and to ld would eliminate any such overhead by simply<br />
+    omitting virtual functions that the complete program does not call.<br />
+    A prototype of this work has already been done. For targets where<br />
+    GNU ld is not used, a "pre-linker" could do the same job.<br />
+<br />
+    The main areas in the standard interface where user flexibility<br />
+    can result in overhead are:<br />
+<br />
+    - Allocators:  Containers are specified to use user-definable<br />
+    allocator types and objects, making tuning for the container<br />
+    characteristics tricky.<br />
+<br />
+    - Locales: the standard specifies locale objects used to implement<br />
+    iostream operations, involving many virtual functions which use<br />
+    streambuf iterators.<br />
+<br />
+    - Algorithms and containers: these may be instantiated on any type,<br />
+    frequently duplicating code for identical operations.<br />
+<br />
+    - Iostreams and strings: users are permitted to use these on their<br />
+    own types, and specify the operations the stream must use on these<br />
+    types.<br />
+<br />
+    Note that these sources of overhead are _avoidable_. The techniques<br />
+    to avoid them are covered below.<br />
+<br />
+    Code Bloat<br />
+    ----------<br />
+<br />
+    In the SGI STL, and in some other headers, many of the templates<br />
+    are defined "inline" -- either explicitly or by their placement<br />
+    in class definitions -- which should not be inline. This is a<br />
+    source of code bloat. Matt had remarked that he was relying on<br />
+    the compiler to recognize what was too big to benefit from inlining,<br />
+    and generate it out-of-line automatically. However, this also can<br />
+    result in code bloat except where the linker can eliminate the extra<br />
+    copies.<br />
+<br />
+    Fixing these cases will require an audit of all inline functions<br />
+    defined in the library to determine which merit inlining, and moving<br />
+    the rest out of line. This is an issue mainly in chapters 23, 25, and<br />
+    27. Of course it can be done incrementally, and we should generally<br />
+    accept patches that move large functions out of line and into ".tcc"<br />
+    files, which can later be pulled into a repository. Compiler/linker<br />
+    improvements to recognize very large inline functions and move them<br />
+    out-of-line, but shared among compilation units, could make this<br />
+    work unnecessary.<br />
+<br />
+    Pre-instantiating template specializations currently produces large<br />
+    amounts of dead code which bloats statically linked programs. The<br />
+    current state of the static library, libstdc++.a, is intolerable on<br />
+    this account, and will fuel further confused speculation about a need<br />
+    for a library "subset". A compiler improvement that treats each<br />
+    instantiated function as a separate object file, for linking purposes,<br />
+    would be one solution to this problem. An alternative would be to<br />
+    split up the manual instantiation files into dozens upon dozens of<br />
+    little files, each compiled separately, but an abortive attempt at<br />
+    this was done for &lt;string&gt; and, though it is far from complete, it<br />
+    is already a nuisance. A better interim solution (just until we have<br />
+    "export") is badly needed.<br />
+<br />
+    When building a shared library, the current compiler/linker cannot<br />
+    automatically generate the instantiations needed. This creates a<br />
+    miserable situation; it means any time something is changed in the<br />
+    library, before a shared library can be built someone must manually<br />
+    copy the declarations of all templates that are needed by other parts<br />
+    of the library to an "instantiation" file, and add it to the build<br />
+    system to be compiled and linked to the library. This process is<br />
+    readily automated, and should be automated as soon as possible.<br />
+    Users building their own shared libraries experience identical<br />
+    frustrations.<br />
+<br />
+    Sharing common aspects of template definitions among instantiations<br />
+    can radically reduce code bloat. The compiler could help a great<br />
+    deal here by recognizing when a function depends on nothing about<br />
+    a template parameter, or only on its size, and giving the resulting<br />
+    function a link-name "equate" that allows it to be shared with other<br />
+    instantiations. Implementation code could take advantage of the<br />
+    capability by factoring out code that does not depend on the template<br />
+    argument into separate functions to be merged by the compiler.<br />
+<br />
+    Until such a compiler optimization is implemented, much can be done<br />
+    manually (if tediously) in this direction. One such optimization is<br />
+    to derive class templates from non-template classes, and move as much<br />
+    implementation as possible into the base class. Another is to partial-<br />
+    specialize certain common instantiations, such as vector&lt;T*&gt;, to share<br />
+    code for instantiations on all types T. While these techniques work,<br />
+    they are far from the complete solution that a compiler improvement<br />
+    would afford.<br />
+<br />
+    Overhead: Expensive Language Features<br />
+    -------------------------------------<br />
+<br />
+    The main "expensive" language feature used in the standard library<br />
+    is exception support, which requires compiling in cleanup code with<br />
+    static table data to locate it, and linking in library code to use<br />
+    the table. For small embedded programs the amount of such library<br />
+    code and table data is assumed by some to be excessive. Under the<br />
+    "new" ABI this perception is generally exaggerated, although in some<br />
+    cases it may actually be excessive.<br />
+<br />
+    To implement a library which does not use exceptions directly is<br />
+    not difficult given minor compiler support (to "turn off" exceptions<br />
+    and ignore exception constructs), and results in no great library<br />
+    maintenance difficulties. To be precise, given "-fno-exceptions",<br />
+    the compiler should treat "try" blocks as ordinary blocks, and<br />
+    "catch" blocks as dead code to ignore or eliminate. Compiler<br />
+    support is not strictly necessary, except in the case of "function<br />
+    try blocks"; otherwise the following macros almost suffice:<br />
+<br />
+    #define throw(X)<br />
+    #define try      if (true)<br />
+    #define catch(X) else if (false)<br />
+<br />
+    However, there may be a need to use function try blocks in the<br />
+    library implementation, and use of macros in this way can make<br />
+    correct diagnostics impossible. Furthermore, use of this scheme<br />
+    would require the library to call a function to re-throw exceptions<br />
+    from a try block. Implementing the above semantics in the compiler<br />
+    is preferable.<br />
+<br />
+    Given the support above (however implemented) it only remains to<br />
+    replace code that "throws" with a call to a well-documented "handler"<br />
+    function in a separate compilation unit which may be replaced by<br />
+    the user. The main source of exceptions that would be difficult<br />
+    for users to avoid is memory allocation failures, but users can<br />
+    define their own memory allocation primitives that never throw.<br />
+    Otherwise, the complete list of such handlers, and which library<br />
+    functions may call them, would be needed for users to be able to<br />
+    implement the necessary substitutes. (Fortunately, they have the<br />
+    source code.)<br />
+<br />
+    Opportunities<br />
+    -------------<br />
+<br />
+    The template capabilities of C++ offer enormous opportunities for<br />
+    optimizing common library operations, well beyond what would be<br />
+    considered "eliminating overhead". In particular, many operations<br />
+    done in Glibc with macros that depend on proprietary language<br />
+    extensions can be implemented in pristine Standard C++. For example,<br />
+    the chapter 25 algorithms, and even C library functions such as strchr,<br />
+    can be specialized for the case of static arrays of known (small) size.<br />
+<br />
+    Detailed optimization opportunities are identified below where<br />
+    the component where they would appear is discussed. Of course new<br />
+    opportunities will be identified during implementation.<br />
+<br />
+    Unimplemented Required Library Features<br />
+    ---------------------------------------<br />
+<br />
+    The standard specifies hundreds of components, grouped broadly by<br />
+    chapter. These are listed in excruciating detail in the CHECKLIST<br />
+    file.<br />
+<br />
+    17 general<br />
+    18 support<br />
+    19 diagnostics<br />
+    20 utilities<br />
+    21 string<br />
+    22 locale<br />
+    23 containers<br />
+    24 iterators<br />
+    25 algorithms<br />
+    26 numerics<br />
+    27 iostreams<br />
+    Annex D  backward compatibility<br />
+<br />
+    Anyone participating in implementation of the library should obtain<br />
+    a copy of the standard, ISO 14882.  People in the U.S. can obtain an<br />
+    electronic copy for US$18 from ANSI's web site. Those from other<br />
+    countries should visit http://www.iso.org/ to find out the location<br />
+    of their country's representation in ISO, in order to know who can<br />
+    sell them a copy.<br />
+<br />
+    The emphasis in the following sections is on unimplemented features<br />
+    and optimization opportunities.<br />
+<br />
+    Chapter 17  General<br />
+    -------------------<br />
+<br />
+    Chapter 17 concerns overall library requirements.<br />
+<br />
+    The standard doesn't mention threads. A multi-thread (MT) extension<br />
+    primarily affects operators new and delete (18), allocator (20),<br />
+    string (21), locale (22), and iostreams (27). The common underlying<br />
+    support needed for this is discussed under chapter 20.<br />
+<br />
+    The standard requirements on names from the C headers create a<br />
+    lot of work, mostly done. Names in the C headers must be visible<br />
+    in the std:: and sometimes the global namespace; the names in the<br />
+    two scopes must refer to the same object. More stringent is that<br />
+    Koenig lookup implies that any types specified as defined in std::<br />
+    really are defined in std::. Names optionally implemented as<br />
+    macros in C cannot be macros in C++. (An overview may be read at<br />
+    &lt;http://www.cantrip.org/cheaders.html&gt;). The scripts "inclosure"<br />
+    and "mkcshadow", and the directories shadow/ and cshadow/, are the<br />
+    beginning of an effort to conform in this area.<br />
+<br />
+    A correct conforming definition of C header names based on underlying<br />
+    C library headers, and practical linking of conforming namespaced<br />
+    customer code with third-party C libraries depends ultimately on<br />
+    an ABI change, allowing namespaced C type names to be mangled into<br />
+    type names as if they were global, somewhat as C function names in a<br />
+    namespace, or C++ global variable names, are left unmangled. Perhaps<br />
+    another "extern" mode, such as 'extern "C-global"' would be an<br />
+    appropriate place for such type definitions. Such a type would<br />
+    affect mangling as follows:<br />
+<br />
+    namespace A {<br />
+    struct X {};<br />
+    extern "C-global" {  // or maybe just 'extern "C"'<br />
+    struct Y {};<br />
+    };<br />
+    }<br />
+    void f(A::X*);  // mangles to f__FPQ21A1X<br />
+    void f(A::Y*);  // mangles to f__FP1Y<br />
+<br />
+    (It may be that this is really the appropriate semantics for regular<br />
+    'extern "C"', and 'extern "C-global"', as an extension, would not be<br />
+    necessary.) This would allow functions declared in non-standard C headers<br />
+    (and thus fixable by neither us nor users) to link properly with functions<br />
+    declared using C types defined in properly-namespaced headers. The<br />
+    problem this solves is that C headers (which C++ programmers do persist<br />
+    in using) frequently forward-declare C struct tags without including<br />
+    the header where the type is defined, as in<br />
+<br />
+    struct tm;<br />
+    void munge(tm*);<br />
+<br />
+    Without some compiler accommodation, munge cannot be called by correct<br />
+    C++ code using a pointer to a correctly-scoped tm* value.<br />
+<br />
+    The current C headers use the preprocessor extension "#include_next",<br />
+    which the compiler complains about when run "-pedantic".<br />
+    (Incidentally, it appears that "-fpedantic" is currently ignored,<br />
+    probably a bug.)  The solution in the C compiler is to use<br />
+    "-isystem" rather than "-I", but unfortunately in g++ this seems<br />
+    also to wrap the whole header in an 'extern "C"' block, so it's<br />
+    unusable for C++ headers. The correct solution appears to be to<br />
+    allow the various special include-directory options, if not given<br />
+    an argument, to affect subsequent include-directory options additively,<br />
+    so that if one said<br />
+<br />
+    -pedantic -iprefix $(prefix) \<br />
+    -idirafter -ino-pedantic -ino-extern-c -iwithprefix -I g++-v3 \<br />
+    -iwithprefix -I g++-v3/ext<br />
+<br />
+    the compiler would search $(prefix)/g++-v3 and not report<br />
+    pedantic warnings for files found there, but treat files in<br />
+    $(prefix)/g++-v3/ext pedantically. (The undocumented semantics<br />
+    of "-isystem" in g++ stink. Can they be rescinded?  If not it<br />
+    must be replaced with something more rationally behaved.)<br />
+<br />
+    All the C headers need the treatment above; in the standard these<br />
+    headers are mentioned in various chapters. Below, I have only<br />
+    mentioned those that present interesting implementation issues.<br />
+<br />
+    The components identified as "mostly complete", below, have not been<br />
+    audited for conformance. In many cases where the library passes<br />
+    conformance tests we have non-conforming extensions that must be<br />
+    wrapped in #if guards for "pedantic" use, and in some cases renamed<br />
+    in a conforming way for continued use in the implementation regardless<br />
+    of conformance flags.<br />
+<br />
+    The STL portion of the library still depends on a header<br />
+    stl/bits/stl_config.h full of #ifdef clauses. This apparatus<br />
+    should be replaced with autoconf/automake machinery.<br />
+<br />
+    The SGI STL defines a type_traits&lt;&gt; template, specialized for<br />
+    many types in their code including the built-in numeric and<br />
+    pointer types and some library types, to direct optimizations of<br />
+    standard functions. The SGI compiler has been extended to generate<br />
+    specializations of this template automatically for user types,<br />
+    so that use of STL templates on user types can take advantage of<br />
+    these optimizations. Specializations for other, non-STL, types<br />
+    would make more optimizations possible, but extending the gcc<br />
+    compiler in the same way would be much better. Probably the next<br />
+    round of standardization will ratify this, but probably with<br />
+    changes, so it probably should be renamed to place it in the<br />
+    implementation namespace.<br />
+<br />
+    The SGI STL also defines a large number of extensions visible in<br />
+    standard headers. (Other extensions that appear in separate headers<br />
+    have been sequestered in subdirectories ext/ and backward/.)  All<br />
+    these extensions should be moved to other headers where possible,<br />
+    and in any case wrapped in a namespace (not std!), and (where kept<br />
+    in a standard header) girded about with macro guards. Some cannot be<br />
+    moved out of standard headers because they are used to implement<br />
+    standard features.  The canonical method for accommodating these<br />
+    is to use a protected name, aliased in macro guards to a user-space<br />
+    name. Unfortunately C++ offers no satisfactory template typedef<br />
+    mechanism, so very ad-hoc and unsatisfactory aliasing must be used<br />
+    instead.<br />
+<br />
+    Implementation of a template typedef mechanism should have the highest<br />
+    priority among possible extensions, on the same level as implementation<br />
+    of the template "export" feature.<br />
+<br />
+    Chapter 18  Language support<br />
+    ----------------------------<br />
+<br />
+    Headers: &lt;limits&gt; &lt;new&gt; &lt;typeinfo&gt; &lt;exception&gt;<br />
+    C headers: &lt;cstddef&gt; &lt;climits&gt; &lt;cfloat&gt;  &lt;cstdarg&gt; &lt;csetjmp&gt;<br />
+    &lt;ctime&gt;   &lt;csignal&gt; &lt;cstdlib&gt; (also 21, 25, 26)<br />
+<br />
+    This defines the built-in exceptions, rtti, numeric_limits&lt;&gt;,<br />
+    operator new and delete. Much of this is provided by the<br />
+    compiler in its static runtime library.<br />
+<br />
+    Work to do includes defining numeric_limits&lt;&gt; specializations in<br />
+    separate files for all target architectures. Values for integer types<br />
+    except for bool and wchar_t are readily obtained from the C header<br />
+    &lt;limits.h&gt;, but values for the remaining numeric types (bool, wchar_t,<br />
+    float, double, long double) must be entered manually. This is<br />
+    largely dog work except for those members whose values are not<br />
+    easily deduced from available documentation. Also, this involves<br />
+    some work in target configuration to identify the correct choice of<br />
+    file to build against and to install.<br />
+<br />
+    The definitions of the various operators new and delete must be<br />
+    made thread-safe, which depends on a portable exclusion mechanism,<br />
+    discussed under chapter 20.  Of course there is always plenty of<br />
+    room for improvements to the speed of operators new and delete.<br />
+<br />
+    &lt;cstdarg&gt;, in Glibc, defines some macros that gcc does not allow to<br />
+    be wrapped into an inline function. Probably this header will demand<br />
+    attention whenever a new target is chosen. The functions atexit(),<br />
+    exit(), and abort() in cstdlib have different semantics in C++, so<br />
+    must be re-implemented for C++.<br />
+<br />
+    Chapter 19  Diagnostics<br />
+    -----------------------<br />
+<br />
+    Headers: &lt;stdexcept&gt;<br />
+    C headers: &lt;cassert&gt; &lt;cerrno&gt;<br />
+<br />
+    This defines the standard exception objects, which are "mostly complete".<br />
+    Cygnus has a version, and now SGI provides a slightly different one.<br />
+    It makes little difference which we use.<br />
+<br />
+    The C global name "errno", which C allows to be a variable or a macro,<br />
+    is required in C++ to be a macro. For MT it must typically result in<br />
+    a function call.<br />
+<br />
+    Chapter 20  Utilities<br />
+    ---------------------<br />
+    Headers: &lt;utility&gt; &lt;functional&gt; &lt;memory&gt;<br />
+    C header: &lt;ctime&gt; (also in 18)<br />
+<br />
+    SGI STL provides "mostly complete" versions of all the components<br />
+    defined in this chapter. However, the auto_ptr&lt;&gt; implementation<br />
+    is known to be wrong. Furthermore, the standard definition of it<br />
+    is known to be unimplementable as written. A minor change to the<br />
+    standard would fix it, and auto_ptr&lt;&gt; should be adjusted to match.<br />
+<br />
+    Multi-threading affects the allocator implementation, and there must<br />
+    be configuration/installation choices for different users' MT<br />
+    requirements. Anyway, users will want to tune allocator options<br />
+    to support different target conditions, MT or no.<br />
+<br />
+    The primitives used for MT implementation should be exposed, as an<br />
+    extension, for users' own work. We need cross-CPU "mutex" support,<br />
+    multi-processor shared-memory atomic integer operations, and single-<br />
+    processor uninterruptible integer operations, and all three configurable<br />
+    to be stubbed out for non-MT use, or to use an appropriately-loaded<br />
+    dynamic library for the actual runtime environment, or statically<br />
+    compiled in for cases where the target architecture is known.<br />
+<br />
+    Chapter 21  String<br />
+    ------------------<br />
+    Headers: &lt;string&gt;<br />
+    C headers: &lt;cctype&gt; &lt;cwctype&gt; &lt;cstring&gt; &lt;cwchar&gt; (also in 27)<br />
+    &lt;cstdlib&gt; (also in 18, 25, 26)<br />
+<br />
+    We have "mostly-complete" char_traits&lt;&gt; implementations. Many of the<br />
+    char_traits&lt;char&gt; operations might be optimized further using existing<br />
+    proprietary language extensions.<br />
+<br />
+    We have a "mostly-complete" basic_string&lt;&gt; implementation. The work<br />
+    to manually instantiate char and wchar_t specializations in object<br />
+    files to improve link-time behavior is extremely unsatisfactory,<br />
+    literally tripling library-build time with no commensurate improvement<br />
+    in static program link sizes. It must be redone. (Similar work is<br />
+    needed for some components in chapters 22 and 27.)<br />
+<br />
+    Other work needed for strings is MT-safety, as discussed under the<br />
+    chapter 20 heading.<br />
+<br />
+    The standard C type mbstate_t from &lt;cwchar&gt; and used in char_traits&lt;&gt;<br />
+    must be different in C++ than in C, because in C++ the default constructor<br />
+    value mbstate_t() must be the "base" or "ground" sequence state.<br />
+    (According to the likely resolution of a recently raised Core issue,<br />
+    this may become unnecessary. However, there are other reasons to<br />
+    use a state type not as limited as whatever the C library provides.)<br />
+    If we might want to provide conversions from (e.g.) internally-<br />
+    represented EUC-wide to externally-represented Unicode, or vice-<br />
+    versa, the mbstate_t we choose will need to be more accommodating<br />
+    than what might be provided by an underlying C library.<br />
+<br />
+    There remain some basic_string template-member functions which do<br />
+    not overload properly with their non-template brethren. The infamous<br />
+    hack akin to what was done in vector&lt;&gt; is needed, to conform to<br />
+    23.1.1 para 10. The CHECKLIST items for basic_string marked 'X',<br />
+    or incomplete, are so marked for this reason.<br />
+<br />
+    Replacing the string iterators, which currently are simple character<br />
+    pointers, with class objects would greatly increase the safety of the<br />
+    client interface, and also permit a "debug" mode in which range,<br />
+    ownership, and validity are rigorously checked. The current use of<br />
+    raw pointers as string iterators is evil. vector&lt;&gt; iterators need the<br />
+    same treatment. Note that the current implementation freely mixes<br />
+    pointers and iterators, and that must be fixed before safer iterators<br />
+    can be introduced.<br />
+<br />
+    Some of the functions in &lt;cstring&gt; are different from the C version.<br />
+    generally overloaded on const and non-const argument pointers. For<br />
+    example, in &lt;cstring&gt; strchr is overloaded. The functions isupper<br />
+    etc. in &lt;cctype&gt; typically implemented as macros in C are functions<br />
+    in C++, because they are overloaded with others of the same name<br />
+    defined in &lt;locale&gt;.<br />
+<br />
+    Many of the functions required in &lt;cwctype&gt; and &lt;cwchar&gt; cannot be<br />
+    implemented using underlying C facilities on intended targets because<br />
+    such facilities only partly exist.<br />
+<br />
+    Chapter 22  Locale<br />
+    ------------------<br />
+    Headers: &lt;locale&gt;<br />
+    C headers: &lt;clocale&gt;<br />
+<br />
+    We have a "mostly complete" class locale, with the exception of<br />
+    code for constructing, and handling the names of, named locales.<br />
+    The ways that locales are named (particularly when categories<br />
+    (e.g. LC_TIME, LC_COLLATE) are different) varies among all target<br />
+    environments. This code must be written in various versions and<br />
+    chosen by configuration parameters.<br />
+<br />
+    Members of many of the facets defined in &lt;locale&gt; are stubs. Generally,<br />
+    there are two sets of facets: the base class facets (which are supposed<br />
+    to implement the "C" locale) and the "byname" facets, which are supposed<br />
+    to read files to determine their behavior. The base ctype&lt;&gt;, collate&lt;&gt;,<br />
+    and numpunct&lt;&gt; facets are "mostly complete", except that the table of<br />
+    bitmask values used for "is" operations, and corresponding mask values,<br />
+    are still defined in libio and just included/linked. (We will need to<br />
+    implement these tables independently, soon, but should take advantage<br />
+    of libio where possible.)  The num_put&lt;&gt;::put members for integer types<br />
+    are "mostly complete".<br />
+<br />
+    A complete list of what has and has not been implemented may be<br />
+    found in CHECKLIST. However, note that the current definition of<br />
+    codecvt&lt;wchar_t,char,mbstate_t&gt; is wrong. It should simply write<br />
+    out the raw bytes representing the wide characters, rather than<br />
+    trying to convert each to a corresponding single "char" value.<br />
+<br />
+    Some of the facets are more important than others. Specifically,<br />
+    the members of ctype&lt;&gt;, numpunct&lt;&gt;, num_put&lt;&gt;, and num_get&lt;&gt; facets<br />
+    are used by other library facilities defined in &lt;string&gt;, &lt;istream&gt;,<br />
+    and &lt;ostream&gt;, and the codecvt&lt;&gt; facet is used by basic_filebuf&lt;&gt;<br />
+    in &lt;fstream&gt;, so a conforming iostream implementation depends on<br />
+    these.<br />
+<br />
+    The "long long" type eventually must be supported, but code mentioning<br />
+    it should be wrapped in #if guards to allow pedantic-mode compiling.<br />
+<br />
+    Performance of num_put&lt;&gt; and num_get&lt;&gt; depend critically on<br />
+    caching computed values in ios_base objects, and on extensions<br />
+    to the interface with streambufs.<br />
+<br />
+    Specifically: retrieving a copy of the locale object, extracting<br />
+    the needed facets, and gathering data from them, for each call to<br />
+    (e.g.) operator&lt;&lt; would be prohibitively slow.  To cache format<br />
+    data for use by num_put&lt;&gt; and num_get&lt;&gt; we have a _Format_cache&lt;&gt;<br />
+    object stored in the ios_base::pword() array. This is constructed<br />
+    and initialized lazily, and is organized purely for utility. It<br />
+    is discarded when a new locale with different facets is imbued.<br />
+<br />
+    Using only the public interfaces of the iterator arguments to the<br />
+    facet functions would limit performance by forbidding "vector-style"<br />
+    character operations. The streambuf iterator optimizations are<br />
+    described under chapter 24, but facets can also bypass the streambuf<br />
+    iterators via explicit specializations and operate directly on the<br />
+    streambufs, and use extended interfaces to get direct access to the<br />
+    streambuf internal buffer arrays. These extensions are mentioned<br />
+    under chapter 27. These optimizations are particularly important<br />
+    for input parsing.<br />
+<br />
+    Unused virtual members of locale facets can be omitted, as mentioned<br />
+    above, by a smart linker.<br />
+<br />
+    Chapter 23  Containers<br />
+    ----------------------<br />
+    Headers: &lt;deque&gt; &lt;list&gt; &lt;queue&gt; &lt;stack&gt; &lt;vector&gt; &lt;map&gt; &lt;set&gt; &lt;bitset&gt;<br />
+<br />
+    All the components in chapter 23 are implemented in the SGI STL.<br />
+    They are "mostly complete"; they include a large number of<br />
+    nonconforming extensions which must be wrapped. Some of these<br />
+    are used internally and must be renamed or duplicated.<br />
+<br />
+    The SGI components are optimized for large-memory environments. For<br />
+    embedded targets, different criteria might be more appropriate. Users<br />
+    will want to be able to tune this behavior. We should provide<br />
+    ways for users to compile the library with different memory usage<br />
+    characteristics.<br />
+<br />
+    A lot more work is needed on factoring out common code from different<br />
+    specializations to reduce code size here and in chapter 25. The<br />
+    easiest fix for this would be a compiler/ABI improvement that allows<br />
+    the compiler to recognize when a specialization depends only on the<br />
+    size (or other gross quality) of a template argument, and allow the<br />
+    linker to share the code with similar specializations. In its<br />
+    absence, many of the algorithms and containers can be partial-<br />
+    specialized, at least for the case of pointers, but this only solves<br />
+    a small part of the problem. Use of a type_traits-style template<br />
+    allows a few more optimization opportunities, more if the compiler<br />
+    can generate the specializations automatically.<br />
+<br />
+    As an optimization, containers can specialize on the default allocator<br />
+    and bypass it, or take advantage of details of its implementation<br />
+    after it has been improved upon.<br />
+<br />
+    Replacing the vector iterators, which currently are simple element<br />
+    pointers, with class objects would greatly increase the safety of the<br />
+    client interface, and also permit a "debug" mode in which range,<br />
+    ownership, and validity are rigorously checked. The current use of<br />
+    pointers for iterators is evil.<br />
+<br />
+    As mentioned for chapter 24, the deque iterator is a good example of<br />
+    an opportunity to implement a "staged" iterator that would benefit<br />
+    from specializations of some algorithms.<br />
+<br />
+    Chapter 24  Iterators<br />
+    ---------------------<br />
+    Headers: &lt;iterator&gt;<br />
+<br />
+    Standard iterators are "mostly complete", with the exception of<br />
+    the stream iterators, which are not yet templatized on the<br />
+    stream type. Also, the base class template iterator&lt;&gt; appears<br />
+    to be wrong, so everything derived from it must also be wrong,<br />
+    currently.<br />
+<br />
+    The streambuf iterators (currently located in stl/bits/std_iterator.h,<br />
+    but should be under bits/) can be rewritten to take advantage of<br />
+    friendship with the streambuf implementation.<br />
+<br />
+    Matt Austern has identified opportunities where certain iterator<br />
+    types, particularly including streambuf iterators and deque<br />
+    iterators, have a "two-stage" quality, such that an intermediate<br />
+    limit can be checked much more quickly than the true limit on<br />
+    range operations. If identified with a member of iterator_traits,<br />
+    algorithms may be specialized for this case. Of course the<br />
+    iterators that have this quality can be identified by specializing<br />
+    a traits class.<br />
+<br />
+    Many of the algorithms must be specialized for the streambuf<br />
+    iterators, to take advantage of block-mode operations, in order<br />
+    to allow iostream/locale operations' performance not to suffer.<br />
+    It may be that they could be treated as staged iterators and<br />
+    take advantage of those optimizations.<br />
+<br />
+    Chapter 25  Algorithms<br />
+    ----------------------<br />
+    Headers: &lt;algorithm&gt;<br />
+    C headers: &lt;cstdlib&gt; (also in 18, 21, 26))<br />
+<br />
+    The algorithms are "mostly complete". As mentioned above, they<br />
+    are optimized for speed at the expense of code and data size.<br />
+<br />
+    Specializations of many of the algorithms for non-STL types would<br />
+    give performance improvements, but we must use great care not to<br />
+    interfere with fragile template overloading semantics for the<br />
+    standard interfaces. Conventionally the standard function template<br />
+    interface is an inline which delegates to a non-standard function<br />
+    which is then overloaded (this is already done in many places in<br />
+    the library). Particularly appealing opportunities for the sake of<br />
+    iostream performance are for copy and find applied to streambuf<br />
+    iterators or (as noted elsewhere) for staged iterators, of which<br />
+    the streambuf iterators are a good example.<br />
+<br />
+    The bsearch and qsort functions cannot be overloaded properly as<br />
+    required by the standard because gcc does not yet allow overloading<br />
+    on the extern-"C"-ness of a function pointer.<br />
+<br />
+    Chapter 26  Numerics<br />
+    --------------------<br />
+    Headers: &lt;complex&gt; &lt;valarray&gt; &lt;numeric&gt;<br />
+    C headers: &lt;cmath&gt;, &lt;cstdlib&gt; (also 18, 21, 25)<br />
+<br />
+    Numeric components: Gabriel dos Reis's valarray, Drepper's complex,<br />
+    and the few algorithms from the STL are "mostly done".  Of course<br />
+    optimization opportunities abound for the numerically literate. It<br />
+    is not clear whether the valarray implementation really conforms<br />
+    fully, in the assumptions it makes about aliasing (and lack thereof)<br />
+    in its arguments.<br />
+<br />
+    The C div() and ldiv() functions are interesting, because they are the<br />
+    only case where a C library function returns a class object by value.<br />
+    Since the C++ type div_t must be different from the underlying C type<br />
+    (which is in the wrong namespace) the underlying functions div() and<br />
+    ldiv() cannot be re-used efficiently. Fortunately they are trivial to<br />
+    re-implement.<br />
+<br />
+    Chapter 27  Iostreams<br />
+    ---------------------<br />
+    Headers: &lt;iosfwd&gt; &lt;streambuf&gt; &lt;ios&gt; &lt;ostream&gt; &lt;istream&gt; &lt;iostream&gt;<br />
+    &lt;iomanip&gt; &lt;sstream&gt; &lt;fstream&gt;<br />
+    C headers: &lt;cstdio&gt; &lt;cwchar&gt; (also in 21)<br />
+<br />
+    Iostream is currently in a very incomplete state. &lt;iosfwd&gt;, &lt;iomanip&gt;,<br />
+    ios_base, and basic_ios&lt;&gt; are "mostly complete". basic_streambuf&lt;&gt; and<br />
+    basic_ostream&lt;&gt; are well along, but basic_istream&lt;&gt; has had little work<br />
+    done. The standard stream objects, &lt;sstream&gt; and &lt;fstream&gt; have been<br />
+    started; basic_filebuf&lt;&gt; "write" functions have been implemented just<br />
+    enough to do "hello, world".<br />
+<br />
+    Most of the istream and ostream operators &lt;&lt; and &gt;&gt; (with the exception<br />
+    of the op&lt;&lt;(integer) ones) have not been changed to use locale primitives,<br />
+    sentry objects, or char_traits members.<br />
+<br />
+    All these templates should be manually instantiated for char and<br />
+    wchar_t in a way that links only used members into user programs.<br />
+<br />
+    Streambuf is fertile ground for optimization extensions. An extended<br />
+    interface giving iterator access to its internal buffer would be very<br />
+    useful for other library components.<br />
+<br />
+    Iostream operations (primarily operators &lt;&lt; and &gt;&gt;) can take advantage<br />
+    of the case where user code has not specified a locale, and bypass locale<br />
+    operations entirely. The current implementation of op&lt;&lt;/num_put&lt;&gt;::put,<br />
+    for the integer types, demonstrates how they can cache encoding details<br />
+    from the locale on each operation. There is lots more room for<br />
+    optimization in this area.<br />
+<br />
+    The definition of the relationship between the standard streams<br />
+    cout et al. and stdout et al. requires something like a "stdiobuf".<br />
+    The SGI solution of using double-indirection to actually use a<br />
+    stdio FILE object for buffering is unsatisfactory, because it<br />
+    interferes with peephole loop optimizations.<br />
+<br />
+    The &lt;sstream&gt; header work has begun. stringbuf can benefit from<br />
+    friendship with basic_string&lt;&gt; and basic_string&lt;&gt;::_Rep to use<br />
+    those objects directly as buffers, and avoid allocating and making<br />
+    copies.<br />
+<br />
+    The basic_filebuf&lt;&gt; template is a complex beast. It is specified to<br />
+    use the locale facet codecvt&lt;&gt; to translate characters between native<br />
+    files and the locale character encoding. In general this involves<br />
+    two buffers, one of "char" representing the file and another of<br />
+    "char_type", for the stream, with codecvt&lt;&gt; translating. The process<br />
+    is complicated by the variable-length nature of the translation, and<br />
+    the need to seek to corresponding places in the two representations.<br />
+    For the case of basic_filebuf&lt;char&gt;, when no translation is needed,<br />
+    a single buffer suffices. A specialized filebuf can be used to reduce<br />
+    code space overhead when no locale has been imbued. Matt Austern's<br />
+    work at SGI will be useful, perhaps directly as a source of code, or<br />
+    at least as an example to draw on.<br />
+<br />
+    Filebuf, almost uniquely (cf. operator new), depends heavily on<br />
+    underlying environmental facilities. In current releases iostream<br />
+    depends fairly heavily on libio constant definitions, but it should<br />
+    be made independent.  It also depends on operating system primitives<br />
+    for file operations. There is immense room for optimizations using<br />
+    (e.g.) mmap for reading. The shadow/ directory wraps, besides the<br />
+    standard C headers, the libio.h and unistd.h headers, for use mainly<br />
+    by filebuf. These wrappings have not been completed, though there<br />
+    is scaffolding in place.<br />
+<br />
+    The encapsulation of certain C header &lt;cstdio&gt; names presents an<br />
+    interesting problem. It is possible to define an inline std::fprintf()<br />
+    implemented in terms of the 'extern "C"' vfprintf(), but there is no<br />
+    standard vfscanf() to use to implement std::fscanf(). It appears that<br />
+    vfscanf but be re-implemented in C++ for targets where no vfscanf<br />
+    extension has been defined. This is interesting in that it seems<br />
+    to be the only significant case in the C library where this kind of<br />
+    rewriting is necessary. (Of course Glibc provides the vfscanf()<br />
+    extension.)  (The functions related to exit() must be rewritten<br />
+    for other reasons.)<br />
+<br />
+<br />
+    Annex D<br />
+    -------<br />
+    Headers: &lt;strstream&gt;<br />
+<br />
+    Annex D defines many non-library features, and many minor<br />
+    modifications to various headers, and a complete header.<br />
+    It is "mostly done", except that the libstdc++-2 &lt;strstream&gt;<br />
+    header has not been adopted into the library, or checked to<br />
+    verify that it matches the draft in those details that were<br />
+    clarified by the committee. Certainly it must at least be<br />
+    moved into the std namespace.<br />
+<br />
+    We still need to wrap all the deprecated features in #if guards<br />
+    so that pedantic compile modes can detect their use.<br />
+<br />
+    Nonstandard Extensions<br />
+    ----------------------<br />
+    Headers: &lt;iostream.h&gt; &lt;strstream.h&gt; &lt;hash&gt; &lt;rbtree&gt;<br />
+    &lt;pthread_alloc&gt; &lt;stdiobuf&gt; (etc.)<br />
+<br />
+    User code has come to depend on a variety of nonstandard components<br />
+    that we must not omit. Much of this code can be adopted from<br />
+    libstdc++-v2 or from the SGI STL. This particularly includes<br />
+    &lt;iostream.h&gt;, &lt;strstream.h&gt;, and various SGI extensions such<br />
+    as &lt;hash_map.h&gt;. Many of these are already placed in the<br />
+    subdirectories ext/ and backward/. (Note that it is better to<br />
+    include them via "&lt;backward/hash_map.h&gt;" or "&lt;ext/hash_map&gt;" than<br />
+    to search the subdirectory itself via a "-I" directive.<br />
+  </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Coding Style </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix B. 
Porting and Maintenance
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/source_organization.html b/libstdc++-v3/doc/html/manual/source_organization.html
index 3e17c8b48b..c47baa2491 100644
--- a/libstdc++-v3/doc/html/manual/source_organization.html
+++ b/libstdc++-v3/doc/html/manual/source_organization.html
@@ -1,97 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing"/><link rel="prev" href="appendix_contributing.html" title="Appendix A.  Contributing"/><link rel="next" href="source_code_style.html" title="Coding Style"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
Contributing
-</th><td align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr/></div><div class="section" title="Directory Layout and Source Conventions"><div class="titlepage"><div><div><h2 class="title"><a id="contrib.organization"/>Directory Layout and Source Conventions</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section" title="Directory Layout and Source Conventions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
The unpacked source directory of libstdc++ contains the files
needed to create the GNU C++ Library.
- </p><div class="literallayout"><p><br/>
-It has subdirectories:<br/>
-<br/>
-  doc<br/>
-    Files in HTML and text format that document usage, quirks of the<br/>
-    implementation, and contributor checklists.<br/>
-<br/>
-  include<br/>
-    All header files for the C++ library are within this directory,<br/>
-    modulo specific runtime-related files that are in the libsupc++<br/>
-    directory.<br/>
-<br/>
-    include/std<br/>
-      Files meant to be found by #include &lt;name&gt; directives in<br/>
-      standard-conforming user programs.<br/>
-<br/>
-    include/c<br/>
-      Headers intended to directly include standard C headers.<br/>
-      [NB: this can be enabled via --enable-cheaders=c]<br/>
-<br/>
-    include/c_global<br/>
-      Headers intended to include standard C headers in<br/>
-      the global namespace, and put select names into the std::<br/>
-      namespace.  [NB: this is the default, and is the same as<br/>
-      --enable-cheaders=c_global]<br/>
-<br/>
-    include/c_std<br/>
-      Headers intended to include standard C headers<br/>
-      already in namespace std, and put select names into the std::<br/>
-      namespace.  [NB: this is the same as --enable-cheaders=c_std]<br/>
-<br/>
-    include/bits<br/>
-      Files included by standard headers and by other files in<br/>
-      the bits directory.<br/>
-<br/>
-    include/backward<br/>
-      Headers provided for backward compatibility, such as &lt;iostream.h&gt;.<br/>
-      They are not used in this library.<br/>
-<br/>
-    include/ext<br/>
-      Headers that define extensions to the standard library.  No<br/>
-      standard header refers to any of them.<br/>
-<br/>
-  scripts<br/>
-    Scripts that are used during the configure, build, make, or test<br/>
-    process.<br/>
-<br/>
-  src<br/>
-    Files that are used in constructing the library, but are not<br/>
-    installed.<br/>
-<br/>
-  testsuites/[backward, demangle, ext, performance, thread, 17_* to 27_*]<br/>
-    Test programs are here, and may be used to begin to exercise the<br/>
-    library.  Support for "make check" and "make check-install" is<br/>
-    complete, and runs through all the subdirectories here when this<br/>
-    command is issued from the build directory.  Please note that<br/>
-    "make check" requires DejaGNU 1.4 or later to be installed.  Please<br/>
-    note that "make check-script" calls the script mkcheck, which<br/>
-    requires bash, and which may need the paths to bash adjusted to<br/>
-    work properly, as /bin/bash is assumed.<br/>
-<br/>
-Other subdirectories contain variant versions of certain files<br/>
-that are meant to be copied or linked by the configure script.<br/>
-Currently these are:<br/>
-<br/>
-  config/abi<br/>
-  config/cpu<br/>
-  config/io<br/>
-  config/locale<br/>
-  config/os<br/>
-<br/>
-In addition, a subdirectory holds the convenience library libsupc++.<br/>
-<br/>
-  libsupc++<br/>
-    Contains the runtime library for C++, including exception<br/>
-    handling and memory allocation and deallocation, RTTI, terminate<br/>
-    handlers, etc.<br/>
-<br/>
-Note that glibc also has a bits/ subdirectory.  We will either<br/>
-need to be careful not to collide with names in its bits/<br/>
-directory; or rename bits to (e.g.) cppbits/.<br/>
-<br/>
-In files throughout the system, lines marked with an "XXX" indicate<br/>
-a bug or incompletely-implemented feature.  Lines marked "XXX MT"<br/>
-indicate a place that may require attention for multi-thread safety.<br/>
-  </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix A. 
+ </p><div class="literallayout"><p><br />
+It has subdirectories:<br />
+<br />
+  doc<br />
+    Files in HTML and text format that document usage, quirks of the<br />
+    implementation, and contributor checklists.<br />
+<br />
+  include<br />
+    All header files for the C++ library are within this directory,<br />
+    modulo specific runtime-related files that are in the libsupc++<br />
+    directory.<br />
+<br />
+    include/std<br />
+      Files meant to be found by #include &lt;name&gt; directives in<br />
+      standard-conforming user programs.<br />
+<br />
+    include/c<br />
+      Headers intended to directly include standard C headers.<br />
+      [NB: this can be enabled via --enable-cheaders=c]<br />
+<br />
+    include/c_global<br />
+      Headers intended to include standard C headers in<br />
+      the global namespace, and put select names into the std::<br />
+      namespace.  [NB: this is the default, and is the same as<br />
+      --enable-cheaders=c_global]<br />
+<br />
+    include/c_std<br />
+      Headers intended to include standard C headers<br />
+      already in namespace std, and put select names into the std::<br />
+      namespace.  [NB: this is the same as --enable-cheaders=c_std]<br />
+<br />
+    include/bits<br />
+      Files included by standard headers and by other files in<br />
+      the bits directory.<br />
+<br />
+    include/backward<br />
+      Headers provided for backward compatibility, such as &lt;iostream.h&gt;.<br />
+      They are not used in this library.<br />
+<br />
+    include/ext<br />
+      Headers that define extensions to the standard library.  No<br />
+      standard header refers to any of them.<br />
+<br />
+  scripts<br />
+    Scripts that are used during the configure, build, make, or test<br />
+    process.<br />
+<br />
+  src<br />
+    Files that are used in constructing the library, but are not<br />
+    installed.<br />
+<br />
+  testsuites/[backward, demangle, ext, performance, thread, 17_* to 30_*]<br />
+    Test programs are here, and may be used to begin to exercise the<br />
+    library.  Support for "make check" and "make check-install" is<br />
+    complete, and runs through all the subdirectories here when this<br />
+    command is issued from the build directory.  Please note that<br />
+    "make check" requires DejaGNU 1.4 or later to be installed.  Please<br />
+    note that "make check-script" calls the script mkcheck, which<br />
+    requires bash, and which may need the paths to bash adjusted to<br />
+    work properly, as /bin/bash is assumed.<br />
+<br />
+Other subdirectories contain variant versions of certain files<br />
+that are meant to be copied or linked by the configure script.<br />
+Currently these are:<br />
+<br />
+  config/abi<br />
+  config/cpu<br />
+  config/io<br />
+  config/locale<br />
+  config/os<br />
+<br />
+In addition, a subdirectory holds the convenience library libsupc++.<br />
+<br />
+  libsupc++<br />
+    Contains the runtime library for C++, including exception<br />
+    handling and memory allocation and deallocation, RTTI, terminate<br />
+    handlers, etc.<br />
+<br />
+Note that glibc also has a bits/ subdirectory.  We will either<br />
+need to be careful not to collide with names in its bits/<br />
+directory; or rename bits to (e.g.) cppbits/.<br />
+<br />
+In files throughout the system, lines marked with an "XXX" indicate<br />
+a bug or incompletely-implemented feature.  Lines marked "XXX MT"<br />
+indicate a place that may require attention for multi-thread safety.<br />
+  </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A. 
Contributing
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/spine.html b/libstdc++-v3/doc/html/manual/spine.html
deleted file mode 100644
index 36225c1c70..0000000000
--- a/libstdc++-v3/doc/html/manual/spine.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="../spine.html" title="The GNU C++ Library"/><link rel="prev" href="../spine.html" title="The GNU C++ Library"/><link rel="next" href="intro.html" title="Part I.  Introduction"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><th width="60%" align="center"> </th><td align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr/></div><div class="book" title="The GNU C++ Library Manual"><div class="titlepage"><div><div><h1 class="title"><a id="manual-index"/>The GNU C++ Library Manual</h1></div><div><p class="copyright">Copyright © 2009, 2010
- <a class="link" href="http://www.fsf.org">FSF</a>
- </p></div><div><div class="legalnotice" title="Legal Notice"><a id="id399399"/><p>
- <a class="link" href="license.html" title="License">License</a>
- </p></div></div></div><hr/></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="part"><a href="intro.html">I.
- Introduction
-
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="section"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="bk01pt02.html">II.
- Standard Contents
- </a></span></dt><dd><dl><dt><span class="chapter"><a href="support.html">4.
- Support
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
- Diagnostics
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
- Utilities
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
- Strings
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
- Localization
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
- Containers
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
- Iterators
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
- Algorithms
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
- Numerics
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
- Input and Output
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="atomics.html">14.
- Atomics
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
- Concurrency
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="extensions.html">III.
- Extensions
-
-</a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt03pr01.html"/></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">20. Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">21. Containers</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">22. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">23. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">24. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">25. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">26. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">27. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">28. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="bk01pt04.html">IV.
- Appendices
-</a></span></dt><dd><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
- Contributing
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
- Porting and Maintenance
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C.
- Free Software Needs Free Documentation
-
-</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
- <acronym class="acronym">GNU</acronym> General Public License version 3
- </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>B.1. <a href="appendix_porting.html#id494186">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#id410184">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#id414053">C++ 200x Implementation Status</a></dt><dt>1.3. <a href="status.html#id456195">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#id461766">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#id465910">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#id466139">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#id466443">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#id466649">C++ 200x Library Headers</a></dt><dt>3.5. <a href="using_headers.html#id467078">C++ 200x Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#id467327">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#id467468">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#id467644">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#id467690">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#id467743">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#id468041">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#id468164">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#id468275">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#id482419">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#id482793">Debugging Containers C++0x</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#id484380">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#id486504">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#id487386">Profile Diagnostics</a></dt><dt>20.1. <a href="bitmap_allocator.html#id490827">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#id495087">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#id495589">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#id495751">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#id496228">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#id496429">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#id502145">Extension Allocators</a></dt><dt>B.7. <a href="api.html#id502375">Extension Allocators Continued</a></dt></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><td align="center"> </td><td align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td align="left" valign="top">The GNU C++ Library </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part I. 
- Introduction
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html
index 438c1bf157..777c371d3c 100644
--- a/libstdc++-v3/doc/html/manual/status.html
+++ b/libstdc++-v3/doc/html/manual/status.html
@@ -1,58 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="intro.html" title="Part I.  Introduction"/><link rel="prev" href="intro.html" title="Part I.  Introduction"/><link rel="next" href="license.html" title="License"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="intro.html" title="Part I.  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I. 
Introduction
-</th><td align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 1. Status"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"/>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="section"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section" title="Implementation Status"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status.iso"/>Implementation Status</h2></div></div></div><div class="section" title="C++ 1998/2003"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"/>C++ 1998/2003</h3></div></div></div><div class="section" title="Implementation Status"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"/>Implementation Status</h4></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 1. Status"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section" title="Implementation Status"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section" title="C++ 1998/2003"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section" title="Implementation Status"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
This status table is based on the table of contents of ISO/IEC 14882:2003.
</p><p>
This page describes the C++ support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="id410184"/><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Section</th><th style="text-align: left">Description</th><th style="text-align: left">Status</th><th style="text-align: left">Comments</th></tr></thead><tbody><tr><td style="text-align: left">
+</p><div class="table"><a id="idp4061552"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>18</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Language support</em></span>
- </td></tr><tr><td style="text-align: left">18.1</td><td style="text-align: left">Types</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.2</td><td style="text-align: left">Implementation properties</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.2.1</td><td style="text-align: left">Numeric Limits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.2.1.1</td><td style="text-align: left">Class template <code class="code">numeric_limits</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.2.1.2</td><td style="text-align: left"><code class="code">numeric_limits</code> members</td><td style="text-align: left">Y</td><td class="auto-generated"> </td></tr><tr><td style="text-align: left">18.2.1.3</td><td style="text-align: left"><code class="code">float_round_style</code></td><td style="text-align: left">Y</td><td class="auto-generated"> </td></tr><tr><td style="text-align: left">18.2.1.4</td><td style="text-align: left"><code class="code">float_denorm_style</code></td><td style="text-align: left">Y</td><td class="auto-generated"> </td></tr><tr><td style="text-align: left">18.2.1.5</td><td style="text-align: left"><code class="code">numeric_limits</code> specializations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.2.2</td><td style="text-align: left">C Library</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.3</td><td style="text-align: left">Start and termination</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.4</td><td style="text-align: left">Dynamic memory management</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.5</td><td style="text-align: left">Type identification</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.5.1</td><td style="text-align: left">Class type_info</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.5.2</td><td style="text-align: left">Class bad_cast</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.5.3</td><td style="text-align: left">Class bad_typeid</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.6</td><td style="text-align: left">Exception handling</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.6.1</td><td style="text-align: left">Class exception</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.6.2</td><td style="text-align: left">Violation exception-specifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.6.3</td><td style="text-align: left">Abnormal termination</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.6.4</td><td style="text-align: left"><code class="code">uncaught_exception</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.7</td><td style="text-align: left">Other runtime support</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">18.1</td><td align="left">Types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.2</td><td align="left">Implementation properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.2.1</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.2.1.1</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.2.1.2</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Y</td><td class="auto-generated"> </td></tr><tr><td align="left">18.2.1.3</td><td align="left"><code class="code">float_round_style</code></td><td align="left">Y</td><td class="auto-generated"> </td></tr><tr><td align="left">18.2.1.4</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">Y</td><td class="auto-generated"> </td></tr><tr><td align="left">18.2.1.5</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.2.2</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3</td><td align="left">Start and termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Dynamic memory management</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.5</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.5.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.5.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.5.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.6</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.6.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.6.2</td><td align="left">Violation exception-specifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.6.3</td><td align="left">Abnormal termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.6.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>19</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Diagnostics</em></span>
- </td></tr><tr><td style="text-align: left">19.1</td><td style="text-align: left">Exception classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.2</td><td style="text-align: left">Assertions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.3</td><td style="text-align: left">Error numbers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">19.1</td><td align="left">Exception classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.2</td><td align="left">Assertions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.3</td><td align="left">Error numbers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>20</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>General utilities</em></span>
- </td></tr><tr><td style="text-align: left">20.1</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2</td><td style="text-align: left">Utility components</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2.1</td><td style="text-align: left">Operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2.2</td><td style="text-align: left"><code class="code">pair</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3</td><td style="text-align: left">Function objects</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.1</td><td style="text-align: left">Base</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.2</td><td style="text-align: left">Arithmetic operation</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.3</td><td style="text-align: left">Comparisons</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.4</td><td style="text-align: left">Logical operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.5</td><td style="text-align: left">Negators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.6</td><td style="text-align: left">Binders</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.7</td><td style="text-align: left">Adaptors for pointers to functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.8</td><td style="text-align: left">Adaptors for pointers to members</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4</td><td style="text-align: left">Memory</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.1</td><td style="text-align: left">The default allocator</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2</td><td style="text-align: left">Raw storage iterator</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.3</td><td style="text-align: left">Temporary buffers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.4</td><td style="text-align: left">Specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.4.1</td><td style="text-align: left"><code class="code">uninitialized_copy</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.4.2</td><td style="text-align: left"><code class="code">uninitialized_fill</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.4.3</td><td style="text-align: left"><code class="code">uninitialized_fill_n</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.5</td><td style="text-align: left">Class template <code class="code">auto_ptr</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.6</td><td style="text-align: left">C library</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">20.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.2</td><td align="left">Utility components</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.2.1</td><td align="left">Operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.2.2</td><td align="left"><code class="code">pair</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3.1</td><td align="left">Base</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.2</td><td align="left">Arithmetic operation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.3</td><td align="left">Comparisons</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.4</td><td align="left">Logical operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.5</td><td align="left">Negators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.6</td><td align="left">Binders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.7</td><td align="left">Adaptors for pointers to functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.8</td><td align="left">Adaptors for pointers to members</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4</td><td align="left">Memory</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.4.1</td><td align="left">The default allocator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2</td><td align="left">Raw storage iterator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.3</td><td align="left">Temporary buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.4</td><td align="left">Specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.4.1</td><td align="left"><code class="code">uninitialized_copy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.4.2</td><td align="left"><code class="code">uninitialized_fill</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.4.3</td><td align="left"><code class="code">uninitialized_fill_n</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.5</td><td align="left">Class template <code class="code">auto_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.6</td><td align="left">C library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>21</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Strings</em></span>
- </td></tr><tr><td style="text-align: left">21.1</td><td style="text-align: left">Character traits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.1.1</td><td style="text-align: left">Character traits requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.1.2</td><td style="text-align: left">traits typedef</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.1.3</td><td style="text-align: left"><code class="code">char_traits</code> specializations</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.1.3.1</td><td style="text-align: left">struct <code class="code">char_traits&lt;char&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.1.3.2</td><td style="text-align: left">struct <code class="code">char_traits&lt;wchar_t&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.2</td><td style="text-align: left">String classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.3</td><td style="text-align: left">Class template <code class="code">basic_string</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.4</td><td style="text-align: left">Null-terminated sequence utilities</td><td style="text-align: left">Y</td><td style="text-align: left">C library dependency</td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">21.1</td><td align="left">Character traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.1.1</td><td align="left">Character traits requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.1.2</td><td align="left">traits typedef</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.1.3</td><td align="left"><code class="code">char_traits</code> specializations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.1.3.1</td><td align="left">struct <code class="code">char_traits&lt;char&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.1.3.2</td><td align="left">struct <code class="code">char_traits&lt;wchar_t&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2</td><td align="left">String classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.3</td><td align="left">Class template <code class="code">basic_string</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.4</td><td align="left">Null-terminated sequence utilities</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">
<span class="emphasis"><em>22</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Localization</em></span>
- </td></tr><tr><td style="text-align: left">22.1</td><td style="text-align: left">Locales</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.1.1</td><td style="text-align: left">Class <code class="code">locale</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.1.2</td><td style="text-align: left"><code class="code">locale</code> globals</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.1.3</td><td style="text-align: left">Convenience interfaces</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.1.3.1</td><td style="text-align: left">Character classification</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.1.3.2</td><td style="text-align: left">Character conversions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2</td><td style="text-align: left">Standard locale categories</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.1</td><td style="text-align: left"><code class="code">ctype</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.2</td><td style="text-align: left">Numeric</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.2.1</td><td style="text-align: left"><code class="code">num_get</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.2.2</td><td style="text-align: left"><code class="code">num_put</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.3</td><td style="text-align: left"><code class="code">num_punct</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.4</td><td style="text-align: left"><code class="code">collate</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.5</td><td style="text-align: left">Time</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.5.1</td><td style="text-align: left"><code class="code">time_get</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.5.2</td><td style="text-align: left"><code class="code">time_get_byname</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.5.3</td><td style="text-align: left"><code class="code">time_put</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.5.3</td><td style="text-align: left"><code class="code">time_put_byname</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.6</td><td style="text-align: left">Monetary</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.6.1</td><td style="text-align: left"><code class="code">money_get</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.6.2</td><td style="text-align: left"><code class="code">money_put</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.6.3</td><td style="text-align: left"><code class="code">money_punct</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.6.4</td><td style="text-align: left"><code class="code">money_punct_byname</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.7</td><td style="text-align: left"><code class="code">messages</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2.8</td><td style="text-align: left">Program-defined facets</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3</td><td style="text-align: left">C Library Locales</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">22.1</td><td align="left">Locales</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.1.1</td><td align="left">Class <code class="code">locale</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.1.2</td><td align="left"><code class="code">locale</code> globals</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.1.3</td><td align="left">Convenience interfaces</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.1.3.1</td><td align="left">Character classification</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.1.3.2</td><td align="left">Character conversions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2</td><td align="left">Standard locale categories</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.2.1</td><td align="left"><code class="code">ctype</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.2</td><td align="left">Numeric</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.2.2.1</td><td align="left"><code class="code">num_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.2.2</td><td align="left"><code class="code">num_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.3</td><td align="left"><code class="code">num_punct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.4</td><td align="left"><code class="code">collate</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.5</td><td align="left">Time</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.2.5.1</td><td align="left"><code class="code">time_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.5.2</td><td align="left"><code class="code">time_get_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.5.3</td><td align="left"><code class="code">time_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.5.3</td><td align="left"><code class="code">time_put_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.6</td><td align="left">Monetary</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.2.6.1</td><td align="left"><code class="code">money_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.6.2</td><td align="left"><code class="code">money_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.6.3</td><td align="left"><code class="code">money_punct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.6.4</td><td align="left"><code class="code">money_punct_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.7</td><td align="left"><code class="code">messages</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2.8</td><td align="left">Program-defined facets</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3</td><td align="left">C Library Locales</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>23</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Containers</em></span>
- </td></tr><tr><td style="text-align: left">23.1</td><td style="text-align: left">Container requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2</td><td style="text-align: left">Sequence containers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.1</td><td style="text-align: left">Class template <code class="code">deque</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.2</td><td style="text-align: left">Class template <code class="code">list</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.3</td><td style="text-align: left">Adaptors</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.3.1</td><td style="text-align: left">Class template <code class="code">queue</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.3.2</td><td style="text-align: left">Class template <code class="code">priority_queue</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.3.3</td><td style="text-align: left">Class template <code class="code">stack</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.4</td><td style="text-align: left">Class template <code class="code">vector</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.5</td><td style="text-align: left">Class <code class="code">vector&lt;bool&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3</td><td style="text-align: left">Associative containers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.1</td><td style="text-align: left">Class template <code class="code">map</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.2</td><td style="text-align: left">Class template <code class="code">multimap</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.3</td><td style="text-align: left">Class template <code class="code">set</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.4</td><td style="text-align: left">Class template <code class="code">multiset</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">23.1</td><td align="left">Container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2</td><td align="left">Sequence containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2.1</td><td align="left">Class template <code class="code">deque</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.2</td><td align="left">Class template <code class="code">list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3</td><td align="left">Adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2.3.1</td><td align="left">Class template <code class="code">queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3.2</td><td align="left">Class template <code class="code">priority_queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3.3</td><td align="left">Class template <code class="code">stack</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.4</td><td align="left">Class template <code class="code">vector</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.5</td><td align="left">Class <code class="code">vector&lt;bool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3</td><td align="left">Associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.1</td><td align="left">Class template <code class="code">map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.2</td><td align="left">Class template <code class="code">multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.3</td><td align="left">Class template <code class="code">set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.4</td><td align="left">Class template <code class="code">multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>24</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Iterators</em></span>
- </td></tr><tr><td style="text-align: left">24.1</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.2</td><td style="text-align: left">Header <code class="code">&lt;iterator&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.3</td><td style="text-align: left">Iterator primitives</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.4</td><td style="text-align: left">Predefined iterators and Iterator adaptors</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.4.1</td><td style="text-align: left">Reverse iterators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.4.2</td><td style="text-align: left">Insert iterators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5</td><td style="text-align: left">Stream iterators</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.1</td><td style="text-align: left">Class template <code class="code">istream_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.2</td><td style="text-align: left">Class template <code class="code">ostream_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.3</td><td style="text-align: left">Class template <code class="code">istreambuf_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.4</td><td style="text-align: left">Class template <code class="code">ostreambuf_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">24.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.2</td><td align="left">Header <code class="code">&lt;iterator&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.3</td><td align="left">Iterator primitives</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.4</td><td align="left">Predefined iterators and Iterator adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.4.1</td><td align="left">Reverse iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.4.2</td><td align="left">Insert iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5</td><td align="left">Stream iterators</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.5.1</td><td align="left">Class template <code class="code">istream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.2</td><td align="left">Class template <code class="code">ostream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.3</td><td align="left">Class template <code class="code">istreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.4</td><td align="left">Class template <code class="code">ostreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>25</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Algorithms</em></span>
- </td></tr><tr><td style="text-align: left">25.1</td><td style="text-align: left">Non-modifying sequence operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.2</td><td style="text-align: left">Mutating sequence operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.3</td><td style="text-align: left">Sorting and related operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.4</td><td style="text-align: left">C library algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">25.1</td><td align="left">Non-modifying sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.2</td><td align="left">Mutating sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.3</td><td align="left">Sorting and related operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.4</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>26</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Numerics</em></span>
- </td></tr><tr><td style="text-align: left">26.1</td><td style="text-align: left">Numeric type requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.2</td><td style="text-align: left">Complex numbers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3</td><td style="text-align: left">Numeric arrays</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.1</td><td style="text-align: left">Header <code class="code">&lt;valarray&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.2</td><td style="text-align: left">Class template <code class="code">valarray</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.3</td><td style="text-align: left"><code class="code">valarray</code> non-member operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.4</td><td style="text-align: left">Class <code class="code">slice</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.5</td><td style="text-align: left">Class template <code class="code">slice_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.6</td><td style="text-align: left">Class <code class="code">gslice</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.7</td><td style="text-align: left">Class template <code class="code">gslice_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.8</td><td style="text-align: left">Class template <code class="code">mask_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3.9</td><td style="text-align: left">Class template <code class="code">indirect_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4</td><td style="text-align: left">Generalized numeric operations</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4.1</td><td style="text-align: left"><code class="code">accumulate</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4.2</td><td style="text-align: left"><code class="code">inner_product</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4.3</td><td style="text-align: left"><code class="code">partial_sum</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4.4</td><td style="text-align: left"><code class="code">adjacent_difference</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4.5</td><td style="text-align: left">iota</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5</td><td style="text-align: left">C Library</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">26.1</td><td align="left">Numeric type requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.2</td><td align="left">Complex numbers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3</td><td align="left">Numeric arrays</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.3.1</td><td align="left">Header <code class="code">&lt;valarray&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.2</td><td align="left">Class template <code class="code">valarray</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.3</td><td align="left"><code class="code">valarray</code> non-member operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.4</td><td align="left">Class <code class="code">slice</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.5</td><td align="left">Class template <code class="code">slice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.6</td><td align="left">Class <code class="code">gslice</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.7</td><td align="left">Class template <code class="code">gslice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.8</td><td align="left">Class template <code class="code">mask_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3.9</td><td align="left">Class template <code class="code">indirect_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4</td><td align="left">Generalized numeric operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.4.1</td><td align="left"><code class="code">accumulate</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4.2</td><td align="left"><code class="code">inner_product</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4.3</td><td align="left"><code class="code">partial_sum</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4.4</td><td align="left"><code class="code">adjacent_difference</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4.5</td><td align="left">iota</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>27</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Input/output</em></span>
- </td></tr><tr><td style="text-align: left">27.1</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.2</td><td style="text-align: left">Forward declarations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.3</td><td style="text-align: left">Standard iostream objects</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.3.1</td><td style="text-align: left">Narrow stream objects</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.3.2</td><td style="text-align: left">Wide stream objects</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.4</td><td style="text-align: left">Iostreams base classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.5</td><td style="text-align: left">Stream buffers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.6</td><td style="text-align: left">Formatting and manipulators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.7</td><td style="text-align: left">String-based streams</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.8</td><td style="text-align: left">File-based streams</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">27.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2</td><td align="left">Forward declarations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.3</td><td align="left">Standard iostream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.3.1</td><td align="left">Narrow stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.3.2</td><td align="left">Wide stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4</td><td align="left">Iostreams base classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.5</td><td align="left">Stream buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.6</td><td align="left">Formatting and manipulators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.7</td><td align="left">String-based streams</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.8</td><td align="left">File-based streams</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>Appendix D</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Compatibility features</em></span>
- </td></tr><tr><td style="text-align: left">D.1</td><td style="text-align: left">Increment operator with bool operand</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.2</td><td style="text-align: left"><code class="code">static</code> keyword</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.3</td><td style="text-align: left">Access declarations</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.4</td><td style="text-align: left">Implicit conversion from const strings</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.5</td><td style="text-align: left">C standard library headers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.6</td><td style="text-align: left">Old iostreams members</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.7</td><td style="text-align: left">char* streams</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr></tbody></table></div></div><br class="table-break"/></div><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.specific"/>Implementation Specific Behavior</h4></div></div></div><p>
+ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with bool operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Implicit conversion from const strings</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>
The ISO standard defines the following phrase:
</p><div class="blockquote"><blockquote class="blockquote"><div class="variablelist"><dl><dt><span class="term">
<code class="code">[1.3.5] implementation-defined behavior</code>
@@ -90,7 +90,7 @@ particular release.
class. But they are the <span class="emphasis"><em>mangled</em></span> names; you will need to call
<code class="code">c++filt</code> and pass the names as command-line parameters to
demangle them, or call a
- <a class="link" href="ext_demangling.html" title="Chapter 27. Demangling">runtime demangler function</a>.
+ <a class="link" href="ext_demangling.html" title="Chapter 29. Demangling">runtime demangler function</a>.
(The classes in <code class="code">&lt;stdexcept&gt;</code> have constructors which
require an argument to use later for <code class="code">what()</code> calls, so the
problem of <code class="code">what()</code>'s value does not arise in most
@@ -142,38 +142,40 @@ particular release.
<a class="link" href="io.html" title="Chapter 13.  Input and Output">in this chapter</a>.
</p><p><span class="emphasis"><em>[27.8.1.4]/16</em></span> Calling <code class="code">fstream::sync</code> when
a get area exists will... whatever <code class="code">fflush()</code> does, I think.
- </p></div></div><div class="section" title="C++ 200x"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.200x"/>C++ 200x</h3></div></div></div><p>
+ </p></div></div><div class="section" title="C++ 2011"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.2011"></a>C++ 2011</h3></div></div></div><p>
+<a id="status.iso.200x"></a>
This table is based on the table of contents of ISO/IEC
JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11
Final Draft International Standard, Standard for Programming Language C++
</p><p>
-In this implementation <code class="literal">-std=gnu++0x</code> or
-<code class="literal">-std=c++0x</code> flags must be used to enable language
+In this implementation <code class="literal">-std=gnu++11</code> or
+<code class="literal">-std=c++11</code> flags must be used to enable language
and library
features. See <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a>
options. The pre-defined symbol
<code class="constant">__GXX_EXPERIMENTAL_CXX0X__</code> is used to check for the
presence of the required flag.
</p><p>
-This page describes the C++0x support in the GCC 4.6 release series.
-</p><div class="table"><a id="id414053"/><p class="title"><strong>Table 1.2. C++ 200x Implementation Status</strong></p><div class="table-contents"><table summary="C++ 200x Implementation Status" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Section</th><th style="text-align: left">Description</th><th style="text-align: left">Status</th><th style="text-align: left">Comments</th></tr></thead><tbody><tr><td style="text-align: left">
+This page describes the C++11 support in mainline GCC SVN, not in any
+particular release.
+</p><div class="table"><a id="idp7562848"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>18</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Language support</em></span>
- </td></tr><tr><td style="text-align: left">18.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">18.2</td><td style="text-align: left">Types</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing offsetof, max_align_t</td></tr><tr><td style="text-align: left">18.3</td><td style="text-align: left">Implementation properties</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.3.2</td><td style="text-align: left">Numeric Limits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.3.2.3</td><td style="text-align: left">Class template <code class="code">numeric_limits</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.3.2.4</td><td style="text-align: left"><code class="code">numeric_limits</code> members</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">18.3.2.5</td><td style="text-align: left"><code class="code">float_round_style</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">18.3.2.6</td><td style="text-align: left"><code class="code">float_denorm_style</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.3.2.7</td><td style="text-align: left"><code class="code">numeric_limits</code> specializations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.3.3</td><td style="text-align: left">C Library</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.4</td><td style="text-align: left">Integer types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.4.1</td><td style="text-align: left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">18.5</td><td style="text-align: left">Start and termination</td><td style="text-align: left">Partial</td><td style="text-align: left">C library dependency for quick_exit, at_quick_exit</td></tr><tr><td style="text-align: left">18.6</td><td style="text-align: left">Dynamic memory management</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.7</td><td style="text-align: left">Type identification</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.7.1</td><td style="text-align: left">Class type_info</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.7.2</td><td style="text-align: left">Class bad_cast</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.7.3</td><td style="text-align: left">Class bad_typeid</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8</td><td style="text-align: left">Exception handling</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8.1</td><td style="text-align: left">Class exception</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8.2</td><td style="text-align: left">Class bad_exception</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8.3</td><td style="text-align: left">Abnormal termination</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8.4</td><td style="text-align: left"><code class="code">uncaught_exception</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8.5</td><td style="text-align: left">Exception Propagation</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.8.6</td><td style="text-align: left"><code class="code">nested_exception</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.9</td><td style="text-align: left">Initializer lists</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.9.1</td><td style="text-align: left">Initializer list constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.9.2</td><td style="text-align: left">Initializer list access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">18.9.3</td><td style="text-align: left">Initializer list range access</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">18.10</td><td style="text-align: left">Other runtime support</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2.3</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2.4</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.5</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.6</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.2.7</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.3</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">C library dependency for quick_exit, at_quick_exit</td></tr><tr><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Class bad_exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Exception Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left"><code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.3</td><td align="left">Initializer list range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>19</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Diagnostics</em></span>
- </td></tr><tr><td style="text-align: left">19.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.2</td><td style="text-align: left">Exception classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.3</td><td style="text-align: left">Assertions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.4</td><td style="text-align: left">Error numbers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.5</td><td style="text-align: left">System error support</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.5.1</td><td style="text-align: left">Class <code class="code">error_category</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.5.2</td><td style="text-align: left">Class <code class="code">error_code</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.5.3</td><td style="text-align: left">Class <code class="code">error_condition</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.5.4</td><td style="text-align: left">Comparison operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">19.5.5</td><td style="text-align: left">Class <code class="code">system_error</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">19.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.2</td><td align="left">Exception classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.3</td><td align="left">Assertions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.4</td><td align="left">Error numbers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5</td><td align="left">System error support</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">19.5.1</td><td align="left">Class <code class="code">error_category</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.2</td><td align="left">Class <code class="code">error_code</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.3</td><td align="left">Class <code class="code">error_condition</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.4</td><td align="left">Comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.5</td><td align="left">Class <code class="code">system_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>20</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>General utilities</em></span>
- </td></tr><tr><td style="text-align: left">20.1</td><td style="text-align: left">General</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2</td><td style="text-align: left">Utility components</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2.1</td><td style="text-align: left">Operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2.2</td><td style="text-align: left">Swap</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2.3</td><td style="text-align: left"><code class="code">forward</code> and <code class="code">move</code> helpers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.2.4</td><td style="text-align: left">Function template <code class="code">declval</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3</td><td style="text-align: left">Pairs</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.1</td><td style="text-align: left">In general</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.2</td><td style="text-align: left">Class template <code class="code">pair</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.3</td><td style="text-align: left">Specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.4</td><td style="text-align: left">Tuple-like access to <code class="code">pair</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.3.5</td><td style="text-align: left">Piecewise construction</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4</td><td style="text-align: left">Tuples</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.1</td><td style="text-align: left">In general</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2</td><td style="text-align: left">Class template <code class="code">tuple</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2.1</td><td style="text-align: left">Construction</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2.2</td><td style="text-align: left">Assignment</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2.3</td><td style="text-align: left">Swap</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.4.2.4</td><td style="text-align: left">Tuple creation functions</td><td style="text-align: left">Partial</td><td style="text-align: left"><code class="code">tuple_cat</code> should be a single variadic signature (DR 1385)</td></tr><tr><td style="text-align: left">20.4.2.5</td><td style="text-align: left">Tuple helper classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2.6</td><td style="text-align: left">Element access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2.7</td><td style="text-align: left">Relational operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.4.2.8</td><td style="text-align: left">Tuple traits</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.4.2.9</td><td style="text-align: left">Tuple specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.5</td><td style="text-align: left">Class template <code class="code">bitset</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.5.1</td><td style="text-align: left"><code class="code">bitset</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.5.2</td><td style="text-align: left"><code class="code">bitset</code> members</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.5.3</td><td style="text-align: left"><code class="code">bitset</code> hash support</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.5.4</td><td style="text-align: left"><code class="code">bitset</code> operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6</td><td style="text-align: left">Memory</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.1</td><td style="text-align: left">In general</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.2</td><td style="text-align: left">Header <code class="code">&lt;memory&gt;</code> synopsis</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.6.3</td><td style="text-align: left">Pointer traits</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.6.4</td><td style="text-align: left">Pointer safety</td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.6.5</td><td style="text-align: left">Align</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.6</td><td style="text-align: left">Allocator argument tag</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.7</td><td style="text-align: left"><code class="code">uses_allocator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.6.8</td><td style="text-align: left">Allocator traits</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.9</td><td style="text-align: left">The default allocator</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.10</td><td style="text-align: left">Raw storage iterator</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.11</td><td style="text-align: left">Temporary buffers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.12</td><td style="text-align: left">Specialized algorithms</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.12.1</td><td style="text-align: left"><code class="code">addressof</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.12.2</td><td style="text-align: left"><code class="code">uninitialized_copy</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.12.3</td><td style="text-align: left"><code class="code">uninitialized_fill</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.12.4</td><td style="text-align: left"><code class="code">uninitialized_fill_n</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.6.13</td><td style="text-align: left">C library</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7</td><td style="text-align: left">Smart pointers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7.1</td><td style="text-align: left">Class template <code class="code">unique_ptr</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7.2</td><td style="text-align: left">Shared-ownership pointers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7.2.1</td><td style="text-align: left">Class <code class="code">bad_weak_ptr</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7.2.2</td><td style="text-align: left">Class template <code class="code">shared_ptr</code></td><td style="text-align: left">Y</td><td style="text-align: left">
+ </td></tr><tr><td align="left">20.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.2</td><td align="left">Utility components</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.2.1</td><td align="left">Operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.2.2</td><td align="left">Swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.2.3</td><td align="left"><code class="code">forward</code> and <code class="code">move</code> helpers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.2.4</td><td align="left">Function template <code class="code">declval</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3</td><td align="left">Pairs</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3.2</td><td align="left">Class template <code class="code">pair</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.3</td><td align="left">Specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.4</td><td align="left">Tuple-like access to <code class="code">pair</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.5</td><td align="left">Piecewise construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4</td><td align="left">Tuples</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.4.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.4.2</td><td align="left">Class template <code class="code">tuple</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.4.2.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.2</td><td align="left">Assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.3</td><td align="left">Swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.4</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.5</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.6</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.7</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.8</td><td align="left">Tuple traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2.9</td><td align="left">Tuple specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.5</td><td align="left">Class template <code class="code">bitset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.5.1</td><td align="left"><code class="code">bitset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.5.2</td><td align="left"><code class="code">bitset</code> members</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.5.3</td><td align="left"><code class="code">bitset</code> hash support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.5.4</td><td align="left"><code class="code">bitset</code> operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6</td><td align="left">Memory</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.2</td><td align="left">Header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.3</td><td align="left">Pointer traits</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.6.4</td><td align="left">Pointer safety</td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.6.5</td><td align="left">Align</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.6.6</td><td align="left">Allocator argument tag</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.7</td><td align="left"><code class="code">uses_allocator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.8</td><td align="left">Allocator traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.9</td><td align="left">The default allocator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.10</td><td align="left">Raw storage iterator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.11</td><td align="left">Temporary buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.12</td><td align="left">Specialized algorithms</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.12.1</td><td align="left"><code class="code">addressof</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.12.2</td><td align="left"><code class="code">uninitialized_copy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.12.3</td><td align="left"><code class="code">uninitialized_fill</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.12.4</td><td align="left"><code class="code">uninitialized_fill_n</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.13</td><td align="left">C library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.7.1</td><td align="left">Class template <code class="code">unique_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.2</td><td align="left">Shared-ownership pointers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.2.1</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.2.2</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left">Y</td><td align="left">
<p>
Uses code from
- <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</a>.
+ <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
</p>
- </td></tr><tr><td style="text-align: left">20.7.2.3</td><td style="text-align: left">Class template <code class="code">weak_ptr</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7.2.4</td><td style="text-align: left">Class template <code class="code">emable_shared_from_this</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.7.2.5</td><td style="text-align: left"><code class="code">shared_ptr</code> atomic access</td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.7.2.6</td><td style="text-align: left">Smart pointer hash support</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8</td><td style="text-align: left">Function objects</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.1</td><td style="text-align: left">Definitions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.2</td><td style="text-align: left">Requirements</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.3</td><td style="text-align: left">Class template <code class="code">reference_wrapper</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.4</td><td style="text-align: left">Arithmetic operation</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.5</td><td style="text-align: left">Comparisons</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.6</td><td style="text-align: left">Logical operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.7</td><td style="text-align: left">Bitwise operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.8</td><td style="text-align: left">Negators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.9</td><td style="text-align: left">Function template <code class="code">bind</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.8.10</td><td style="text-align: left">Function template <code class="code">mem_fn</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing overloads for reference-qualified member functions</td></tr><tr><td style="text-align: left">20.8.11</td><td style="text-align: left">Polymorphic function wrappers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.8.11.1</td><td style="text-align: left">Class <code class="code">bad_function_call</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.8.11.2</td><td style="text-align: left">Class template <code class="code">function</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing allocator support</td></tr><tr><td style="text-align: left">20.8.12</td><td style="text-align: left">Class template <code class="code">hash</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9</td><td style="text-align: left">Metaprogramming and type traits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.1</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.2</td><td style="text-align: left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.3</td><td style="text-align: left">Helper classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.4</td><td style="text-align: left">Unary Type Traits</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.4.1</td><td style="text-align: left">Primary type categories</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.4.2</td><td style="text-align: left">Composite type traits</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.9.4.3</td><td style="text-align: left">Type properties</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing is_trivially_copyable,
+ </td></tr><tr><td align="left">20.7.2.3</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.2.4</td><td align="left">Class template <code class="code">emable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.7.2.5</td><td align="left"><code class="code">shared_ptr</code> atomic access</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.7.2.6</td><td align="left">Smart pointer hash support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.1</td><td align="left">Definitions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.2</td><td align="left">Requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.3</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.4</td><td align="left">Arithmetic operation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.5</td><td align="left">Comparisons</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.6</td><td align="left">Logical operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.7</td><td align="left">Bitwise operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.8</td><td align="left">Negators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.9</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.8.10</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Partial</td><td align="left">Missing overloads for reference-qualified member functions</td></tr><tr><td align="left">20.8.11</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.11.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.8.11.2</td><td align="left">Class template <code class="code">function</code></td><td align="left">Partial</td><td align="left">Missing allocator support</td></tr><tr><td align="left">20.8.12</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9</td><td align="left">Metaprogramming and type traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.4</td><td align="left">Unary Type Traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.4.1</td><td align="left">Primary type categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.4.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.4.3</td><td align="left">Type properties</td><td align="left">Partial</td><td align="left">Missing is_trivially_copyable,
is_assignable, is_copy_assignable, is_move_assignable,
is_trivially_constructible, is_trivially_default_constructible,
is_trivially_copy_constructible, is_trivially_move_constructible,
@@ -183,57 +185,97 @@ This page describes the C++0x support in the GCC 4.6 release series.
is_nothrow_assignable,
is_nothrow_copy_assignable, is_nothrow_move_assignable,
is_nothrow_destructible
- </td></tr><tr><td style="text-align: left">20.9.5</td><td style="text-align: left">Type property queries</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.6</td><td style="text-align: left">Relationships between types</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7</td><td style="text-align: left">Transformations between types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7.1</td><td style="text-align: left">Const-volatile modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7.2</td><td style="text-align: left">Reference modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7.3</td><td style="text-align: left">Sign modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7.4</td><td style="text-align: left">Array modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7.5</td><td style="text-align: left">Pointer modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.9.7.6</td><td style="text-align: left">Other transformations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10</td><td style="text-align: left">Compile-time rational arithmetic</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10.1</td><td style="text-align: left">In general</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10.2</td><td style="text-align: left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10.3</td><td style="text-align: left">Class template <code class="code">ratio</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10.4</td><td style="text-align: left">Arithmetic on <code class="code">ratio</code>s</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10.5</td><td style="text-align: left">Comparison of <code class="code">ratio</code>s</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.10.6</td><td style="text-align: left">SI types for <code class="code">ratio</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11</td><td style="text-align: left">Time utilities</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.3</td><td style="text-align: left">Clock requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.4</td><td style="text-align: left">Time-related traits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.4.1</td><td style="text-align: left"><code class="code">treat_as_floating_point</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.4.2</td><td style="text-align: left"><code class="code">duration_values</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.4.3</td><td style="text-align: left">Specializations of <code class="code">common_type</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">20.11.5</td><td style="text-align: left">Class template <code class="code">duration</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td style="text-align: left">20.11.6</td><td style="text-align: left">Class template <code class="code">time_point</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.7</td><td style="text-align: left">Clocks</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.7.1</td><td style="text-align: left">Class <code class="code">system_clock</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.11.7.2</td><td style="text-align: left">Class <code class="code">steady_clock</code></td><td style="text-align: left">N</td><td style="text-align: left">Support old <code class="code">monotonic_clock</code> spec instead</td></tr><tr><td style="text-align: left">20.11.7.3</td><td style="text-align: left">Class <code class="code">high_resolution_clock</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">20.11.8</td><td style="text-align: left">Date and time functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.12</td><td style="text-align: left">Scoped allocator adaptor</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.12.1</td><td style="text-align: left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.12.2</td><td style="text-align: left">Scoped allocator adaptor member types</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.12.3</td><td style="text-align: left">Scoped allocator adaptor constructors</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.12.4</td><td style="text-align: left">Scoped allocator adaptor members</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.12.5</td><td style="text-align: left">Scoped allocator operators</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">20.13</td><td style="text-align: left">Class <code class="code">type_index</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>21</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Strings</em></span>
- </td></tr><tr><td style="text-align: left">21.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.2</td><td style="text-align: left">Character traits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.2.1</td><td style="text-align: left">Character traits requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.2.2</td><td style="text-align: left">traits typedefs</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.2.3</td><td style="text-align: left"><code class="code">char_traits</code> specializations</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">21.2.3.1</td><td style="text-align: left">struct <code class="code">char_traits&lt;char&gt;</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing constexpr</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">21.2.3.2</td><td style="text-align: left">struct <code class="code">char_traits&lt;char16_t&gt;</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">21.2.3.3</td><td style="text-align: left">struct <code class="code">char_traits&lt;char32_t&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.2.3.4</td><td style="text-align: left">struct <code class="code">char_traits&lt;wchar_t&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.3</td><td style="text-align: left">String classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.4</td><td style="text-align: left">Class template <code class="code">basic_string</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.5</td><td style="text-align: left">Numeric Conversions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.6</td><td style="text-align: left">Hash support</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">21.7</td><td style="text-align: left">Null-terminated sequence utilities</td><td style="text-align: left">Y</td><td style="text-align: left">C library dependency</td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">21.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2</td><td align="left">Character traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.2.1</td><td align="left">Character traits requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.2</td><td align="left">traits typedefs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.3</td><td align="left"><code class="code">char_traits</code> specializations</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">21.2.3.1</td><td align="left">struct <code class="code">char_traits&lt;char&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr bgcolor="#B0B0B0"><td align="left">21.2.3.2</td><td align="left">struct <code class="code">char_traits&lt;char16_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.3</td><td align="left">struct <code class="code">char_traits&lt;char32_t&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.3.4</td><td align="left">struct <code class="code">char_traits&lt;wchar_t&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.3</td><td align="left">String classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.4</td><td align="left">Class template <code class="code">basic_string</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.5</td><td align="left">Numeric Conversions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.6</td><td align="left">Hash support</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">21.7</td><td align="left">Null-terminated sequence utilities</td><td align="left">Partial</td><td align="left">C library dependency.
+ Missing <code class="filename">&lt;cuchar&gt;</code>
+ </td></tr><tr><td align="left">
<span class="emphasis"><em>22</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Localization</em></span>
- </td></tr><tr><td style="text-align: left">22.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.2</td><td style="text-align: left">Header <code class="code">&lt;locale&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3</td><td style="text-align: left">Locales</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3.1</td><td style="text-align: left">Class <code class="code">locale</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3.2</td><td style="text-align: left"><code class="code">locale</code> globals</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3.3</td><td style="text-align: left">Convenience interfaces</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3.3.1</td><td style="text-align: left">Character classification</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3.3.2</td><td style="text-align: left">Conversions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.3.3.2.1</td><td style="text-align: left">Character conversions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">22.3.3.2.2</td><td style="text-align: left"><code class="code">string</code> conversions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">22.3.3.2.3</td><td style="text-align: left">Buffer conversions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4</td><td style="text-align: left">Standard <code class="code">locale</code> categories</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.1</td><td style="text-align: left">The <code class="code">ctype</code> category</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.2</td><td style="text-align: left">The numeric category</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.2.1</td><td style="text-align: left"><code class="code">num_get</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.2.2</td><td style="text-align: left"><code class="code">num_put</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.3</td><td style="text-align: left">The numeric punctuation facet</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.4</td><td style="text-align: left">The collate category</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.5</td><td style="text-align: left">The time category</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.5.1</td><td style="text-align: left">Class template <code class="code">time_get</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.5.2</td><td style="text-align: left">Class template <code class="code">time_get_byname</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.5.3</td><td style="text-align: left">Class template <code class="code">time_put</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.5.3</td><td style="text-align: left">Class template <code class="code">time_put_byname</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.6</td><td style="text-align: left">The monetary category</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.6.1</td><td style="text-align: left">Class template <code class="code">money_get</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.6.2</td><td style="text-align: left">Class template <code class="code">money_put</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.6.3</td><td style="text-align: left">Class template <code class="code">money_punct</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.6.4</td><td style="text-align: left">Class template <code class="code">money_punct_byname</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.7</td><td style="text-align: left">The message retrieval category</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.4.8</td><td style="text-align: left">Program-defined facets</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">22.5</td><td style="text-align: left">Standard code conversion facets</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">22.6</td><td style="text-align: left">C Library Locales</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">22.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2</td><td align="left">Header <code class="code">&lt;locale&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3</td><td align="left">Locales</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.1</td><td align="left">Class <code class="code">locale</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.2</td><td align="left"><code class="code">locale</code> globals</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.3</td><td align="left">Convenience interfaces</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.3.1</td><td align="left">Character classification</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.3.2</td><td align="left">Conversions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.3.2.1</td><td align="left">Character conversions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.3.3.2.2</td><td align="left"><code class="code">string</code> conversions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.3.3.2.3</td><td align="left">Buffer conversions</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">22.4</td><td align="left">Standard <code class="code">locale</code> categories</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.1</td><td align="left">The <code class="code">ctype</code> category</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.2</td><td align="left">The numeric category</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.2.1</td><td align="left"><code class="code">num_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.2.2</td><td align="left"><code class="code">num_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.3</td><td align="left">The numeric punctuation facet</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.4</td><td align="left">The collate category</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5</td><td align="left">The time category</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.5.1</td><td align="left">Class template <code class="code">time_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.2</td><td align="left">Class template <code class="code">time_get_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.3</td><td align="left">Class template <code class="code">time_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.3</td><td align="left">Class template <code class="code">time_put_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6</td><td align="left">The monetary category</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.6.1</td><td align="left">Class template <code class="code">money_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.2</td><td align="left">Class template <code class="code">money_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.3</td><td align="left">Class template <code class="code">money_punct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.4</td><td align="left">Class template <code class="code">money_punct_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.7</td><td align="left">The message retrieval category</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.8</td><td align="left">Program-defined facets</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.5</td><td align="left">Standard code conversion facets</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">22.6</td><td align="left">C Library Locales</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>23</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Containers</em></span>
- </td></tr><tr><td style="text-align: left">23.1</td><td style="text-align: left">General</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2</td><td style="text-align: left">Container requirements</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.1</td><td style="text-align: left">General container requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.2</td><td style="text-align: left">Container data races</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.3</td><td style="text-align: left">Sequence containers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.4</td><td style="text-align: left">Associative containers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.2.5</td><td style="text-align: left">Unordered associative containers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3</td><td style="text-align: left">Sequence containers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.2</td><td style="text-align: left">Class template <code class="code">array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.3</td><td style="text-align: left">Class template <code class="code">deque</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.4</td><td style="text-align: left">Class template <code class="code">forward_list</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.5</td><td style="text-align: left">Class template <code class="code">list</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.6</td><td style="text-align: left">Class template <code class="code">vector</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.3.7</td><td style="text-align: left">Class <code class="code">vector&lt;bool&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.4</td><td style="text-align: left">Associative containers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.4.4</td><td style="text-align: left">Class template <code class="code">map</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.4.5</td><td style="text-align: left">Class template <code class="code">multimap</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.4.6</td><td style="text-align: left">Class template <code class="code">set</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.4.7</td><td style="text-align: left">Class template <code class="code">multiset</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.5</td><td style="text-align: left">Unordered associative containers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.5.4</td><td style="text-align: left">Class template <code class="code">unordered_map</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.5.5</td><td style="text-align: left">Class template <code class="code">unordered_multimap</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.5.6</td><td style="text-align: left">Class template <code class="code">unordered_set</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.5.7</td><td style="text-align: left">Class template <code class="code">unordered_multiset</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.6</td><td style="text-align: left">Container adaptors</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.6.1</td><td style="text-align: left">Class template <code class="code">queue</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.6.2</td><td style="text-align: left">Class template <code class="code">priority_queue</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">23.6.3</td><td style="text-align: left">Class template <code class="code">stack</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">23.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2</td><td align="left">Container requirements</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">23.2.1</td><td align="left">General container requirements</td><td align="left">Partial</td><td align="left">Only <code class="code">vector</code> meets the requirements
+ relating to allocator use and propagation.</td></tr><tr><td align="left">23.2.2</td><td align="left">Container data races</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3</td><td align="left">Sequence containers</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">23.2.4</td><td align="left">Associative containers</td><td align="left">Partial</td><td align="left">Missing emplace members</td></tr><tr><td align="left">23.2.5</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3</td><td align="left">Sequence containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.3</td><td align="left">Class template <code class="code">deque</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.4</td><td align="left">Class template <code class="code">forward_list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5</td><td align="left">Class template <code class="code">list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.6</td><td align="left">Class template <code class="code">vector</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.7</td><td align="left">Class <code class="code">vector&lt;bool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4</td><td align="left">Associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.4.4</td><td align="left">Class template <code class="code">map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.5</td><td align="left">Class template <code class="code">multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.6</td><td align="left">Class template <code class="code">set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.7</td><td align="left">Class template <code class="code">multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5</td><td align="left">Unordered associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.5.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.5</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.6</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.7</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6</td><td align="left">Container adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.6.1</td><td align="left">Class template <code class="code">queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6.2</td><td align="left">Class template <code class="code">priority_queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6.3</td><td align="left">Class template <code class="code">stack</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>24</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Iterators</em></span>
- </td></tr><tr><td style="text-align: left">24.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.2</td><td style="text-align: left">Iterator requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.3</td><td style="text-align: left">Header <code class="code">&lt;iterator&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.4</td><td style="text-align: left">Iterator primitives</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5</td><td style="text-align: left">Iterator adaptors</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.1</td><td style="text-align: left">Reverse iterators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.2</td><td style="text-align: left">Insert iterators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.5.3</td><td style="text-align: left">Move iterators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.6</td><td style="text-align: left">Stream iterators</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.6.1</td><td style="text-align: left">Class template <code class="code">istream_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.6.2</td><td style="text-align: left">Class template <code class="code">ostream_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.6.3</td><td style="text-align: left">Class template <code class="code">istreambuf_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">24.6.4</td><td style="text-align: left">Class template <code class="code">ostreambuf_iterator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">24.6.5</td><td style="text-align: left">range access</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">24.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.2</td><td align="left">Iterator requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.3</td><td align="left">Header <code class="code">&lt;iterator&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.4</td><td align="left">Iterator primitives</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5</td><td align="left">Iterator adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.5.1</td><td align="left">Reverse iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.2</td><td align="left">Insert iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.3</td><td align="left">Move iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6</td><td align="left">Stream iterators</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.6.1</td><td align="left">Class template <code class="code">istream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.2</td><td align="left">Class template <code class="code">ostream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.3</td><td align="left">Class template <code class="code">istreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.4</td><td align="left">Class template <code class="code">ostreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.5</td><td align="left">range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>25</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Algorithms</em></span>
- </td></tr><tr><td style="text-align: left">25.1</td><td style="text-align: left">General</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.2</td><td style="text-align: left">Non-modifying sequence operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.3</td><td style="text-align: left">Mutating sequence operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.4</td><td style="text-align: left">Sorting and related operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">25.5</td><td style="text-align: left">C library algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">25.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.2</td><td align="left">Non-modifying sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.3</td><td align="left">Mutating sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.4</td><td align="left">Sorting and related operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.5</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>26</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Numerics</em></span>
- </td></tr><tr><td style="text-align: left">26.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.2</td><td style="text-align: left">Numeric type requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.3</td><td style="text-align: left">The floating-point environment</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.4</td><td style="text-align: left">Complex numbers</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5</td><td style="text-align: left">Random number generation</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.1</td><td style="text-align: left">Requirements</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.2</td><td style="text-align: left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.3</td><td style="text-align: left">Random number engine class templates</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.3.1</td><td style="text-align: left">Class template <code class="code">linear_congruential_engine</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.3.2</td><td style="text-align: left">Class template <code class="code">mersenne_twister_engine</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.3.3</td><td style="text-align: left">Class template <code class="code">subtract_with_carry_engine</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.4</td><td style="text-align: left">Random number engine adaptor class templates</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.4.2</td><td style="text-align: left">Class template <code class="code">discard_block_engine</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.4.3</td><td style="text-align: left">Class template <code class="code">independent_bits_engine</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.4.4</td><td style="text-align: left">Class template <code class="code">shuffle_order_engine</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.5</td><td style="text-align: left">Engines and engine adaptors with predefined parameters</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.6</td><td style="text-align: left">Class <code class="code">random_device</code></td><td style="text-align: left">Y</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">26.5.7</td><td style="text-align: left">Utilities</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.7.1</td><td style="text-align: left">Class <code class="code">seed_seq</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.7.2</td><td style="text-align: left">Function template <code class="code">generate_canonical</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8</td><td style="text-align: left">Random number distribution class templates</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.2</td><td style="text-align: left">Uniform distributions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.2.1</td><td style="text-align: left">Class template <code class="code">uniform_int_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.2.2</td><td style="text-align: left">Class template <code class="code">uniform_real_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.3</td><td style="text-align: left">Bernoulli distributions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.3.1</td><td style="text-align: left">Class <code class="code">bernoulli_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.3.2</td><td style="text-align: left">Class template <code class="code">binomial_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.3.3</td><td style="text-align: left">Class template <code class="code">geometric_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.3.4</td><td style="text-align: left">Class template <code class="code">negative_binomial_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.4</td><td style="text-align: left">Poisson distributions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.4.1</td><td style="text-align: left">Class template <code class="code">poisson_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.4.2</td><td style="text-align: left">Class template <code class="code">exponential_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.4.3</td><td style="text-align: left">Class template <code class="code">gamma_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.4.4</td><td style="text-align: left">Class template <code class="code">weibull_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.4.5</td><td style="text-align: left">Class template <code class="code">extreme_value_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5</td><td style="text-align: left">Normal distributions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5.1</td><td style="text-align: left">Class template <code class="code">normal_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5.2</td><td style="text-align: left">Class template <code class="code">lognormal_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5.3</td><td style="text-align: left">Class template <code class="code">chi_squared_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5.4</td><td style="text-align: left">Class template <code class="code">cauchy_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5.5</td><td style="text-align: left">Class template <code class="code">fisher_f_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.5.6</td><td style="text-align: left">Class template <code class="code">student_t_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.6</td><td style="text-align: left">Sampling distributions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.6.1</td><td style="text-align: left">Class template <code class="code">discrete_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.6.2</td><td style="text-align: left">Class template <code class="code">piecewise_constant_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.5.8.6.3</td><td style="text-align: left">Class template <code class="code">piecewise_linear_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6</td><td style="text-align: left">Numeric arrays</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.1</td><td style="text-align: left">Header <code class="code">&lt;valarray&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">26.6.2</td><td style="text-align: left">Class template <code class="code">valarray</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing move and swap operations</td></tr><tr><td style="text-align: left">26.6.3</td><td style="text-align: left"><code class="code">valarray</code> non-member operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.4</td><td style="text-align: left">Class <code class="code">slice</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.5</td><td style="text-align: left">Class template <code class="code">slice_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.6</td><td style="text-align: left">The <code class="code">gslice</code> class</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.7</td><td style="text-align: left">Class template <code class="code">gslice_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.8</td><td style="text-align: left">Class template <code class="code">mask_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.9</td><td style="text-align: left">Class template <code class="code">indirect_array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.6.10</td><td style="text-align: left"><code class="code">valarray</code> range access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7</td><td style="text-align: left">Generalized numeric operations</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7.1</td><td style="text-align: left">Header <code class="code">&lt;numeric&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7.2</td><td style="text-align: left"><code class="code">accumulate</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7.3</td><td style="text-align: left"><code class="code">inner_product</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7.4</td><td style="text-align: left"><code class="code">partial_sum</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7.5</td><td style="text-align: left"><code class="code">adjacent_difference</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.7.6</td><td style="text-align: left">iota</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">26.8</td><td style="text-align: left">C Library</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">26.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.2</td><td align="left">Numeric type requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3</td><td align="left">The floating-point environment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4</td><td align="left">Complex numbers</td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.1</td><td align="left">Requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.3</td><td align="left">Random number engine class templates</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.3.1</td><td align="left">Class template <code class="code">linear_congruential_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.3.2</td><td align="left">Class template <code class="code">mersenne_twister_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.3.3</td><td align="left">Class template <code class="code">subtract_with_carry_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4</td><td align="left">Random number engine adaptor class templates</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.4.2</td><td align="left">Class template <code class="code">discard_block_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4.3</td><td align="left">Class template <code class="code">independent_bits_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4.4</td><td align="left">Class template <code class="code">shuffle_order_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.5</td><td align="left">Engines and engine adaptors with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.7</td><td align="left">Utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.7.1</td><td align="left">Class <code class="code">seed_seq</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.7.2</td><td align="left">Function template <code class="code">generate_canonical</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8</td><td align="left">Random number distribution class templates</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.2</td><td align="left">Uniform distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.1</td><td align="left">Class template <code class="code">uniform_int_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.2</td><td align="left">Class template <code class="code">uniform_real_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3</td><td align="left">Bernoulli distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.1</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.2</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.4</td><td align="left">Class template <code class="code">negative_binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4</td><td align="left">Poisson distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.1</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.2</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.3</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.4</td><td align="left">Class template <code class="code">weibull_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.5</td><td align="left">Class template <code class="code">extreme_value_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5</td><td align="left">Normal distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.1</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.2</td><td align="left">Class template <code class="code">lognormal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.3</td><td align="left">Class template <code class="code">chi_squared_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.4</td><td align="left">Class template <code class="code">cauchy_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.5</td><td align="left">Class template <code class="code">fisher_f_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.6</td><td align="left">Class template <code class="code">student_t_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.6</td><td align="left">Sampling distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.6.1</td><td align="left">Class template <code class="code">discrete_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.6.2</td><td align="left">Class template <code class="code">piecewise_constant_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.6.3</td><td align="left">Class template <code class="code">piecewise_linear_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6</td><td align="left">Numeric arrays</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.6.1</td><td align="left">Header <code class="code">&lt;valarray&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.2</td><td align="left">Class template <code class="code">valarray</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.3</td><td align="left"><code class="code">valarray</code> non-member operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.4</td><td align="left">Class <code class="code">slice</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.5</td><td align="left">Class template <code class="code">slice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.6</td><td align="left">The <code class="code">gslice</code> class</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.7</td><td align="left">Class template <code class="code">gslice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.8</td><td align="left">Class template <code class="code">mask_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.9</td><td align="left">Class template <code class="code">indirect_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.10</td><td align="left"><code class="code">valarray</code> range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7</td><td align="left">Generalized numeric operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.7.1</td><td align="left">Header <code class="code">&lt;numeric&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.2</td><td align="left"><code class="code">accumulate</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.3</td><td align="left"><code class="code">inner_product</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.4</td><td align="left"><code class="code">partial_sum</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.5</td><td align="left"><code class="code">adjacent_difference</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.6</td><td align="left">iota</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.8</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>27</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Input/output library</em></span>
- </td></tr><tr><td style="text-align: left">27.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.2</td><td style="text-align: left">Iostreams requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.2.1</td><td style="text-align: left">Imbue Limitations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.2.2</td><td style="text-align: left">Positioning Type Limitations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">27.2.3</td><td style="text-align: left">Thread safety</td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.3</td><td style="text-align: left">Forward declarations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.4</td><td style="text-align: left">Standard iostream objects</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.4.1</td><td style="text-align: left">Overview</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.4.2</td><td style="text-align: left">Narrow stream objects</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">27.4.3</td><td style="text-align: left">Wide stream objects</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">27.5</td><td style="text-align: left">Iostreams base classes</td><td style="text-align: left">Partial</td><td style="text-align: left">
- Missing move and swap operations on <code class="code">basic_ios</code>. Missing
- <code class="code">make_error_code</code> and <code class="code">make_error_condition</code>.
- </td></tr><tr><td style="text-align: left">27.6</td><td style="text-align: left">Stream buffers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">27.7</td><td style="text-align: left">Formatting and manipulators</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing move and swap operations</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">27.8</td><td style="text-align: left">String-based streams</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing move and swap operations</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">27.9</td><td style="text-align: left">File-based streams</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing move and swap operations</td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">27.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2</td><td align="left">Iostreams requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2.1</td><td align="left">Imbue Limitations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2.2</td><td align="left">Positioning Type Limitations</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.2.3</td><td align="left">Thread safety</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">27.3</td><td align="left">Forward declarations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4</td><td align="left">Standard iostream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.1</td><td align="left">Overview</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.2</td><td align="left">Narrow stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.3</td><td align="left">Wide stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.5</td><td align="left">Iostreams base classes</td><td align="left">Partial</td><td align="left">
+ Missing move and swap operations on <code class="code">basic_ios</code>.
+ Missing <code class="code">io_errc</code> and <code class="code">iostream_category</code>.
+ <code class="code">ios_base::failure</code> is not derived from <code class="code">system_error</code>.
+ </td></tr><tr><td align="left">27.6</td><td align="left">Stream buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.7</td><td align="left">Formatting and manipulators</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr bgcolor="#B0B0B0"><td align="left">27.8</td><td align="left">String-based streams</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr bgcolor="#B0B0B0"><td align="left">27.9</td><td align="left">File-based streams</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr><td align="left">
<span class="emphasis"><em>28</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Regular expressions</em></span>
- </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.1</td><td style="text-align: left">General</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.3</td><td style="text-align: left">Requirements</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.4</td><td style="text-align: left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">28.5</td><td style="text-align: left">Namespace <code class="code">std::regex_constants</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">28.6</td><td style="text-align: left">Class <code class="code">regex_error</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">28.7</td><td style="text-align: left">Class template <code class="code">regex_traits</code></td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">28.8</td><td style="text-align: left">Class template <code class="code">basic_regex</code></td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">28.9</td><td style="text-align: left">Class template <code class="code">sub_match</code></td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">28.10</td><td style="text-align: left">Class template <code class="code">match_results</code></td><td style="text-align: left">Partial</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.11</td><td style="text-align: left">Regular expression algorithms</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.12</td><td style="text-align: left">Regular expression Iterators</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">28.13</td><td style="text-align: left">Modified ECMAScript regular expression grammar</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.1</td><td align="left">General</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.2</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.3</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">28.5</td><td align="left">Namespace <code class="code">std::regex_constants</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>29</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Atomic operations</em></span>
- </td></tr><tr><td style="text-align: left">29.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">29.2</td><td style="text-align: left">Header <code class="code">&lt;atomic&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">29.3</td><td style="text-align: left">Order and consistency</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">29.4</td><td style="text-align: left">Lock-free property</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing <code class="code">ATOMIC_BOOL_LOCK_FREE</code> and
- <code class="code">ATOMIC_POINTER_LOCK_FREE</code>.
- Based on _GLIBCXX_ATOMIC_PROPERTY
- </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">29.5</td><td style="text-align: left">Atomic types</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing constexpr</td></tr><tr><td style="text-align: left">29.6</td><td style="text-align: left">Operations on atomic types</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">29.7</td><td style="text-align: left">Flag Type and operations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">29.8</td><td style="text-align: left">Fences</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">29.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">29.2</td><td align="left">Header <code class="code">&lt;atomic&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">29.3</td><td align="left">Order and consistency</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">29.4</td><td align="left">Lock-free property</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">29.5</td><td align="left">Atomic types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">29.6</td><td align="left">Operations on atomic types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">29.7</td><td align="left">Flag Type and operations</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">29.8</td><td align="left">Fences</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>30</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Thread support</em></span>
- </td></tr><tr><td style="text-align: left">30.1</td><td style="text-align: left">General</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.2</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.3</td><td style="text-align: left">Threads</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">30.3.1</td><td style="text-align: left">Class <code class="code">thread</code></td><td style="text-align: left">Partial</td><td style="text-align: left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td style="text-align: left">30.3.2</td><td style="text-align: left">Namespace <code class="code">this_thread</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4</td><td style="text-align: left">Mutual exclusion</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1</td><td style="text-align: left">Mutex requirements</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.1</td><td style="text-align: left">In general</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.2</td><td style="text-align: left">Mutex types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.2.1</td><td style="text-align: left">Class <code class="code">mutex</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.2.2</td><td style="text-align: left">Class <code class="code">recursive_mutex</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.3</td><td style="text-align: left">Timed mutex types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.3.1</td><td style="text-align: left">Class <code class="code">timed_mutex</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.1.3.2</td><td style="text-align: left">Class <code class="code">recursive_timed_mutex</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.2</td><td style="text-align: left">Locks</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.2.1</td><td style="text-align: left">Class template <code class="code">lock_guard</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.2.2</td><td style="text-align: left">Class template <code class="code">unique_lock</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.3</td><td style="text-align: left">Generic locking algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.4</td><td style="text-align: left">Call once</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.4.1</td><td style="text-align: left">Struct <code class="code">once_flag</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.4.4.2</td><td style="text-align: left">Function <code class="code">call_once</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">30.5</td><td style="text-align: left">Condition variables</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing notify_all_at_thread_exit</td></tr><tr><td style="text-align: left">30.5.1</td><td style="text-align: left">Class <code class="code">condition_variable</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.5.2</td><td style="text-align: left">Class <code class="code">condition_variable_any</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.6</td><td style="text-align: left">Futures</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.6.1</td><td style="text-align: left">Overview</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.6.2</td><td style="text-align: left">Error handling</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.6.3</td><td style="text-align: left">Class <code class="code">future_error</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">30.6.4</td><td style="text-align: left">Shared state</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">30.6.5</td><td style="text-align: left">Class template <code class="code">promise</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing set_*_at_thread_exit</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">30.6.6</td><td style="text-align: left">Class template <code class="code">future</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing future_status and future::share()</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">30.6.7</td><td style="text-align: left">Class template <code class="code">shared_future</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing future_status</td></tr><tr><td style="text-align: left">30.6.8</td><td style="text-align: left">Function template <code class="code">async</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">30.6.9</td><td style="text-align: left">Class template <code class="code">packaged_task</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing make_ready_at_thread_exit</td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left">On POSIX sytems these types are only defined if the OS
+ supports the POSIX Timeouts option. </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.5</td><td align="left">Condition variables</td><td align="left">Partial</td><td align="left">Missing notify_all_at_thread_exit</td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.4</td><td align="left">Shared state</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.5</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Partial</td><td align="left">Missing set_*_at_thread_exit</td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.6</td><td align="left">Class template <code class="code">future</code></td><td align="left">Partial</td><td align="left">Timed waiting functions do not return future_status::deferred</td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.7</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Partial</td><td align="left">Timed waiting functions do not return future_status::deferred</td></tr><tr><td align="left">30.6.8</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.9</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Partial</td><td align="left">Missing make_ready_at_thread_exit</td></tr><tr><td align="left">
<span class="emphasis"><em>Appendix D</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Compatibility features</em></span>
- </td></tr><tr><td style="text-align: left">D.1</td><td style="text-align: left">Increment operator with <code class="code">bool</code> operand</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.2</td><td style="text-align: left"><code class="code">register</code> keyword</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.3</td><td style="text-align: left">Implicit declaration of copy functions</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.4</td><td style="text-align: left">Dynamic exception specifications</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.5</td><td style="text-align: left">C standard library headers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.6</td><td style="text-align: left">Old iostreams members</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.7</td><td style="text-align: left"><code class="code">char*</code> streams</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.8</td><td style="text-align: left">Function objects</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.9</td><td style="text-align: left">Binders</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.10</td><td style="text-align: left"><code class="code">auto_ptr</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">D.11</td><td style="text-align: left">Violating exception-specifications</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr></tbody></table></div></div><br class="table-break"/></div><div class="section" title="C++ TR1"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"/>C++ TR1</h3></div></div></div><p>
+ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with <code class="code">bool</code> operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">register</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Implicit declaration of copy functions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Dynamic exception specifications</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left"><code class="code">char*</code> streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.11</td><td align="left">Violating exception-specifications</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.2011.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is also specified by the 1998 and 2003 standards,
+ see <a class="link" href="status.html#iso.1998.specific" title="Implementation Specific Behavior">C++ 1998/2003 Implementation
+ Specific Behavior</a>. This section only documents behaviour which
+ is new in the 2011 standard.
+ </p><p>
+ <span class="emphasis"><em>20.8.9.1.3 [func.bind.place]/1</em></span> There are 29
+ placeholders defined and the placeholder types are
+ <code class="literal">CopyAssignable</code>.
+ </p><p>
+ <span class="emphasis"><em>30.2.3 [thread.req.native]/1</em></span>
+ <code class="classname">native_handle_type</code> and
+ <code class="methodname">native_handle</code> are provided. The handle types
+ are defined in terms of the Gthreads abstraction layer.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="classname">thread</code>: The native handle type is
+ a typedef for <code class="code">__gthread_t</code> i.e. <code class="code">pthread_t</code>
+ when GCC is configured with the <code class="literal">posix</code> thread
+ model. The value of the native handle is undefined for a thread
+ which is not joinable.
+ </p></li><li class="listitem"><p><code class="classname">mutex</code> and
+ <code class="classname">timed_mutex</code>:
+ The native handle type is <code class="code">__gthread_mutex_t*</code> i.e.
+ <code class="code">pthread_mutex_t*</code> for the <code class="literal">posix</code>
+ thread model.
+ </p></li><li class="listitem"><p><code class="classname">recursive_mutex</code> and
+ <code class="classname">recursive_timed_mutex</code>:
+ The native handle type is <code class="code">__gthread_recursive_mutex_t*</code>
+ i.e. <code class="code">pthread_mutex_t*</code> for the <code class="literal">posix</code>
+ thread model.
+ </p></li><li class="listitem"><p><code class="classname">condition_variable</code>: The native
+ handle type is <code class="code">__gthread_cond_t*</code> i.e.
+ <code class="code">pthread_cond_t*</code> for the <code class="literal">posix</code>
+ thread model.
+ </p></li></ul></div><p>
+ </p><p>
+ <span class="emphasis"><em>30.6.1 [futures.overview]/2</em></span>
+ <code class="code">launch</code> is a scoped enumeration type with
+ overloaded operators to support bitmask operations. There are no
+ additional bitmask elements defined.
+ </p></div></div><div class="section" title="C++ TR1"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
This table is based on the table of contents of ISO/IEC DTR 19768
Doc No: N1836=05-0096 Date: 2005-06-24
Draft Technical Report on C++ Library Extensions
@@ -244,12 +286,20 @@ In this implementation the header names are prefixed by
</p><p>
This page describes the TR1 support in mainline GCC SVN, not in any particular
release.
-</p><div class="table"><a id="id456195"/><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Section</th><th style="text-align: left">Description</th><th style="text-align: left">Status</th><th style="text-align: left">Comments</th></tr></thead><tbody><tr><td style="text-align: left"><span class="emphasis"><em>2</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td style="text-align: left">2.1</td><td style="text-align: left">Reference wrappers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.1</td><td style="text-align: left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.2</td><td style="text-align: left">Class template <code class="code">reference_wrapper</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.2.1</td><td style="text-align: left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.2.2</td><td style="text-align: left"><code class="code">reference_wrapper</code> assignment</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.2.3</td><td style="text-align: left"><code class="code">reference_wrapper</code> access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.2.4</td><td style="text-align: left"><code class="code">reference_wrapper</code> invocation</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.1.2.5</td><td style="text-align: left"><code class="code">reference_wrapper</code> helper functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2</td><td style="text-align: left">Smart pointers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.1</td><td style="text-align: left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.2</td><td style="text-align: left">Class <code class="code">bad_weak_ptr</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3</td><td style="text-align: left">Class template <code class="code">shared_ptr</code></td><td style="text-align: left"> </td><td style="text-align: left">
+</p><div class="table"><a id="idp2271168"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
<p>
Uses code from
- <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</a>.
+ <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
</p>
- </td></tr><tr><td style="text-align: left">2.2.3.1</td><td style="text-align: left"><code class="code">shared_ptr</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.2</td><td style="text-align: left"><code class="code">shared_ptr</code> destructor</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.3</td><td style="text-align: left"><code class="code">shared_ptr</code> assignment</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.4</td><td style="text-align: left"><code class="code">shared_ptr</code> modifiers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.5</td><td style="text-align: left"><code class="code">shared_ptr</code> observers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.6</td><td style="text-align: left"><code class="code">shared_ptr</code> comparison</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.7</td><td style="text-align: left"><code class="code">shared_ptr</code> I/O</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.8</td><td style="text-align: left"><code class="code">shared_ptr</code> specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.9</td><td style="text-align: left"><code class="code">shared_ptr</code> casts</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.3.10</td><td style="text-align: left"><code class="code">get_deleter</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4</td><td style="text-align: left">Class template <code class="code">weak_ptr</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.1</td><td style="text-align: left"><code class="code">weak_ptr</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.2</td><td style="text-align: left"><code class="code">weak_ptr</code> destructor</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.3</td><td style="text-align: left"><code class="code">weak_ptr</code> assignment</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.4</td><td style="text-align: left"><code class="code">weak_ptr</code> modifiers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.5</td><td style="text-align: left"><code class="code">weak_ptr</code> observers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.6</td><td style="text-align: left"><code class="code">weak_ptr</code> comparison</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.4.7</td><td style="text-align: left"><code class="code">weak_ptr</code> specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">2.2.5</td><td style="text-align: left">Class template <code class="code">enable_shared_from_this</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><span class="emphasis"><em>3</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td style="text-align: left">3.1</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.2</td><td style="text-align: left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.3</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4</td><td style="text-align: left">Function return types</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.5</td><td style="text-align: left">Function template <code class="code">mem_fn</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.6</td><td style="text-align: left">Function object binders</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.6.1</td><td style="text-align: left">Class template <code class="code">is_bind_expression</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.6.2</td><td style="text-align: left">Class template <code class="code">is_placeholder</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.6.3</td><td style="text-align: left">Function template <code class="code">bind</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.6.4</td><td style="text-align: left">Placeholders</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7</td><td style="text-align: left">Polymorphic function wrappers</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.1</td><td style="text-align: left">Class <code class="code">bad_function_call</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.1.1</td><td style="text-align: left"><code class="code">bad_function_call</code> constructor</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2</td><td style="text-align: left">Class template <code class="code">function</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.1</td><td style="text-align: left"><code class="code">function</code> construct/copy/destroy</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.2</td><td style="text-align: left"><code class="code">function</code> modifiers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.3</td><td style="text-align: left"><code class="code">function</code> capacity</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.4</td><td style="text-align: left"><code class="code">function</code> invocation</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.5</td><td style="text-align: left"><code class="code">function</code> target access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.6</td><td style="text-align: left">undefined operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.7</td><td style="text-align: left">null pointer comparison operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.7.2.8</td><td style="text-align: left">specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><span class="emphasis"><em>4</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td style="text-align: left">4.1</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.2</td><td style="text-align: left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.3</td><td style="text-align: left">Helper classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.4</td><td style="text-align: left">General Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.5</td><td style="text-align: left">Unary Type Traits</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.5.1</td><td style="text-align: left">Primary Type Categories</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.5.2</td><td style="text-align: left">Composite type traits</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.5.3</td><td style="text-align: left">Type properties</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.6</td><td style="text-align: left">Relationships between types</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.7</td><td style="text-align: left">Transformations between types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.7.1</td><td style="text-align: left">Const-volatile modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.7.2</td><td style="text-align: left">Reference modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.7.3</td><td style="text-align: left">Array modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.7.4</td><td style="text-align: left">Pointer modifications</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.8</td><td style="text-align: left">Other transformations</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">4.9</td><td style="text-align: left">Implementation requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><span class="emphasis"><em>5</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td style="text-align: left">5.1</td><td style="text-align: left">Random number generation</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.1</td><td style="text-align: left">Requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.2</td><td style="text-align: left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.3</td><td style="text-align: left">Class template <code class="code">variate_generator</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4</td><td style="text-align: left">Random number engine class templates</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4.1</td><td style="text-align: left">Class template <code class="code">linear_congruential</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4.2</td><td style="text-align: left">Class template <code class="code">mersenne_twister</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4.3</td><td style="text-align: left">Class template <code class="code">subtract_with_carry</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4.4</td><td style="text-align: left">Class template <code class="code">subtract_with_carry_01</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4.5</td><td style="text-align: left">Class template <code class="code">discard_block</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.4.6</td><td style="text-align: left">Class template <code class="code">xor_combine</code></td><td style="text-align: left">Y</td><td style="text-align: left">operator()() per N2079</td></tr><tr><td style="text-align: left">5.1.5</td><td style="text-align: left">Engines with predefined parameters</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.6</td><td style="text-align: left">Class <code class="code">random_device</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7</td><td style="text-align: left">Random distribution class templates</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.1</td><td style="text-align: left">Class template <code class="code">uniform_int</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.2</td><td style="text-align: left">Class <code class="code">bernoulli_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.3</td><td style="text-align: left">Class template <code class="code">geometric_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.4</td><td style="text-align: left">Class template <code class="code">poisson_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.5</td><td style="text-align: left">Class template <code class="code">binomial_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.6</td><td style="text-align: left">Class template <code class="code">uniform_real</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.7</td><td style="text-align: left">Class template <code class="code">exponential_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.8</td><td style="text-align: left">Class template <code class="code">normal_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.1.7.9</td><td style="text-align: left">Class template <code class="code">gamma_distribution</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2</td><td style="text-align: left">Mathematical special functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1</td><td style="text-align: left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.1</td><td style="text-align: left">associated Laguerre polynomials</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.2</td><td style="text-align: left">associated Legendre functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.3</td><td style="text-align: left">beta function</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.4</td><td style="text-align: left">(complete) elliptic integral of the first kind</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.5</td><td style="text-align: left">(complete) elliptic integral of the second kind</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.6</td><td style="text-align: left">(complete) elliptic integral of the third kind</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.7</td><td style="text-align: left">confluent hypergeometric functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.8</td><td style="text-align: left">regular modified cylindrical Bessel functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.9</td><td style="text-align: left">cylindrical Bessel functions (of the first kind)</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.10</td><td style="text-align: left">irregular modified cylindrical Bessel functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.11</td><td style="text-align: left">cylindrical Neumann functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.12</td><td style="text-align: left">(incomplete) elliptic integral of the first kind</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.13</td><td style="text-align: left">(incomplete) elliptic integral of the second kind</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.14</td><td style="text-align: left">(incomplete) elliptic integral of the third kind</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.15</td><td style="text-align: left">exponential integral</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.16</td><td style="text-align: left">Hermite polynomials</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.17</td><td style="text-align: left">hypergeometric functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.18</td><td style="text-align: left">Laguerre polynomials</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.19</td><td style="text-align: left">Legendre polynomials</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.20</td><td style="text-align: left">Riemann zeta function</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.21</td><td style="text-align: left">spherical Bessel functions (of the first kind)</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.22</td><td style="text-align: left">spherical associated Legendre functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.1.23</td><td style="text-align: left">spherical Neumann functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">5.2.2</td><td style="text-align: left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><span class="emphasis"><em>6</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td style="text-align: left">6.1</td><td style="text-align: left">Tuple types</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.1</td><td style="text-align: left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.2</td><td style="text-align: left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.3</td><td style="text-align: left">Class template <code class="code">tuple</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.3.1</td><td style="text-align: left">Construction</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.3.2</td><td style="text-align: left">Tuple creation functions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.3.3</td><td style="text-align: left">Tuple helper classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.3.4</td><td style="text-align: left">Element access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.3.5</td><td style="text-align: left">Relational operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.1.4</td><td style="text-align: left">Pairs</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2</td><td style="text-align: left">Fixed size array</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.1</td><td style="text-align: left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.2</td><td style="text-align: left">Class template <code class="code">array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.2.1</td><td style="text-align: left"><code class="code">array</code> constructors, copy, and assignment</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.2.2</td><td style="text-align: left"><code class="code">array</code> specialized algorithms</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.2.3</td><td style="text-align: left"><code class="code">array</code> size</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.2.4</td><td style="text-align: left">Zero sized <code class="code">array</code>s</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.2.2.5</td><td style="text-align: left">Tuple interface to class template <code class="code">array</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3</td><td style="text-align: left">Unordered associative containers</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.1</td><td style="text-align: left">Unordered associative container requirements</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.1.1</td><td style="text-align: left">Exception safety guarantees</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.2</td><td style="text-align: left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.3</td><td style="text-align: left">Class template <code class="code">hash</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4</td><td style="text-align: left">Unordered associative container classes</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.1</td><td style="text-align: left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.2</td><td style="text-align: left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.3</td><td style="text-align: left">Class template <code class="code">unordered_set</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.3.1</td><td style="text-align: left"><code class="code">unordered_set</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.3.2</td><td style="text-align: left"><code class="code">unordered_set</code> swap</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.4</td><td style="text-align: left">Class template <code class="code">unordered_map</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.4.1</td><td style="text-align: left"><code class="code">unordered_map</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.4.2</td><td style="text-align: left"><code class="code">unordered_map</code> element access</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.4.3</td><td style="text-align: left"><code class="code">unordered_map</code> swap</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.5</td><td style="text-align: left">Class template <code class="code">unordered_multiset</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.5.1</td><td style="text-align: left"><code class="code">unordered_multiset</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.5.2</td><td style="text-align: left"><code class="code">unordered_multiset</code> swap</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.6</td><td style="text-align: left">Class template <code class="code">unordered_multimap</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.6.1</td><td style="text-align: left"><code class="code">unordered_multimap</code> constructors</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">6.3.4.6.2</td><td style="text-align: left"><code class="code">unordered_multimap</code> swap</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><span class="emphasis"><em>7</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.1</td><td style="text-align: left">Definitions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.2</td><td style="text-align: left">Requirements</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.3</td><td style="text-align: left">Regular expressions summary</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.4</td><td style="text-align: left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.5</td><td style="text-align: left">Namespace <code class="code">tr1::regex_constants</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.5.1</td><td style="text-align: left">Bitmask Type <code class="code">syntax_option_type</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.5.2</td><td style="text-align: left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.5.3</td><td style="text-align: left">Implementation defined <code class="code">error_type</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.6</td><td style="text-align: left">Class <code class="code">regex_error</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.7</td><td style="text-align: left">Class template <code class="code">regex_traits</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8</td><td style="text-align: left">Class template <code class="code">basic_regex</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.1</td><td style="text-align: left"><code class="code">basic_regex</code> constants</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.2</td><td style="text-align: left"><code class="code">basic_regex</code> constructors</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.3</td><td style="text-align: left"><code class="code">basic_regex</code> assign</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.4</td><td style="text-align: left"><code class="code">basic_regex</code> constant operations</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.5</td><td style="text-align: left"><code class="code">basic_regex</code> locale</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.6</td><td style="text-align: left"><code class="code">basic_regex</code> swap</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.7</td><td style="text-align: left"><code class="code">basic_regex</code> non-member functions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.8.7.1</td><td style="text-align: left"><code class="code">basic_regex</code> non-member swap</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.9</td><td style="text-align: left">Class template <code class="code">sub_match</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.9.1</td><td style="text-align: left"><code class="code">sub_match</code> members</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.9.2</td><td style="text-align: left"><code class="code">sub_match</code> non-member operators</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10</td><td style="text-align: left">Class template <code class="code">match_results</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10.1</td><td style="text-align: left"><code class="code">match_results</code> constructors</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10.2</td><td style="text-align: left"><code class="code">match_results</code> size</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10.3</td><td style="text-align: left"><code class="code">match_results</code> element access</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10.4</td><td style="text-align: left"><code class="code">match_results</code> formatting</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10.5</td><td style="text-align: left"><code class="code">match_results</code> allocator</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.10.6</td><td style="text-align: left"><code class="code">match_results</code> swap</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.11</td><td style="text-align: left">Regular expression algorithms</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.11.1</td><td style="text-align: left">exceptions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.11.2</td><td style="text-align: left"><code class="code">regex_match</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.11.3</td><td style="text-align: left"><code class="code">regex_search</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.11.4</td><td style="text-align: left"><code class="code">regex_replace</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12</td><td style="text-align: left">Regular expression Iterators</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.1</td><td style="text-align: left">Class template <code class="code">regex_iterator</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.1.1</td><td style="text-align: left"><code class="code">regex_iterator</code> constructors</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.1.2</td><td style="text-align: left"><code class="code">regex_iterator</code> comparisons</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.1.3</td><td style="text-align: left"><code class="code">regex_iterator</code> dereference</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.1.4</td><td style="text-align: left"><code class="code">regex_iterator</code> increment</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.2</td><td style="text-align: left">Class template <code class="code">regex_token_iterator</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.2.1</td><td style="text-align: left"><code class="code">regex_token_iterator</code> constructors</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.2.2</td><td style="text-align: left"><code class="code">regex_token_iterator</code> comparisons</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.2.3</td><td style="text-align: left"><code class="code">regex_token_iterator</code> dereference</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.12.2.4</td><td style="text-align: left"><code class="code">regex_token_iterator</code> increment</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">7.13</td><td style="text-align: left">Modified ECMAScript regular expression grammar</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><span class="emphasis"><em>8</em></span></td><td colspan="3" style="text-align: left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td style="text-align: left">8.1</td><td style="text-align: left">Additions to header <code class="code">&lt;complex&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.2</td><td style="text-align: left">Function <code class="code">acos</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.3</td><td style="text-align: left">Function <code class="code">asin</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.4</td><td style="text-align: left">Function <code class="code">atan</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.5</td><td style="text-align: left">Function <code class="code">acosh</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.6</td><td style="text-align: left">Function <code class="code">asinh</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.7</td><td style="text-align: left">Function <code class="code">atanh</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.8</td><td style="text-align: left">Function <code class="code">fabs</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.1.9</td><td style="text-align: left">Additional Overloads</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">8.2</td><td style="text-align: left">Header <code class="code">&lt;ccomplex&gt;</code></td><td style="text-align: left">N</td><td style="text-align: left">DR 551</td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">8.3</td><td style="text-align: left">Header <code class="code">&lt;complex.h&gt;</code></td><td style="text-align: left">N</td><td style="text-align: left">DR 551</td></tr><tr><td style="text-align: left">8.4</td><td style="text-align: left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.4.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.4.2</td><td style="text-align: left">Function <code class="code">isblank</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.5</td><td style="text-align: left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.6</td><td style="text-align: left">Header <code class="code">&lt;cfenv&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.6.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.6.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.7</td><td style="text-align: left">Header <code class="code">&lt;fenv.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.8</td><td style="text-align: left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.9</td><td style="text-align: left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">8.10</td><td style="text-align: left">Additions to header <code class="code">&lt;ios&gt;</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">8.10.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">8.10.2</td><td style="text-align: left">Function <code class="code">hexfloat</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.11</td><td style="text-align: left">Header <code class="code">&lt;cinttypes&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.11.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left">DR 557</td></tr><tr><td style="text-align: left">8.11.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.12</td><td style="text-align: left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.13</td><td style="text-align: left">Additions to header <code class="code">&lt;climits&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.14</td><td style="text-align: left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">8.15</td><td style="text-align: left">Additions to header <code class="code">&lt;locale&gt;</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.16</td><td style="text-align: left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.16.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.16.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.16.3</td><td style="text-align: left">Function template definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.16.4</td><td style="text-align: left">Additional overloads</td><td style="text-align: left">Y</td><td style="text-align: left">DR 568; DR 550</td></tr><tr><td style="text-align: left">8.17</td><td style="text-align: left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.18</td><td style="text-align: left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.19</td><td style="text-align: left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.20</td><td style="text-align: left">The header <code class="code">&lt;cstdbool&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.21</td><td style="text-align: left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.22</td><td style="text-align: left">The header <code class="code">&lt;cstdint&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.22.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.22.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.23</td><td style="text-align: left">The header <code class="code">&lt;stdint.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.24</td><td style="text-align: left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.24.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.24.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.24.3</td><td style="text-align: left">Additional format specifiers</td><td style="text-align: left">Y</td><td style="text-align: left">C library dependency</td></tr><tr><td style="text-align: left">8.24.4</td><td style="text-align: left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.25</td><td style="text-align: left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.25.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.25.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.25.3</td><td style="text-align: left">Function <code class="code">abs</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.25.4</td><td style="text-align: left">Function <code class="code">div</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.26</td><td style="text-align: left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.27</td><td style="text-align: left">Header <code class="code">&lt;ctgmath&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left">DR 551</td></tr><tr><td style="text-align: left">8.28</td><td style="text-align: left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left">DR 551</td></tr><tr><td style="text-align: left">8.29</td><td style="text-align: left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left">C library dependency</td></tr><tr><td style="text-align: left">8.30</td><td style="text-align: left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.30.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.30.2</td><td style="text-align: left">Definitions</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.30.3</td><td style="text-align: left">Additional wide format specifiers</td><td style="text-align: left">Y</td><td style="text-align: left">C library dependency</td></tr><tr><td style="text-align: left">8.31</td><td style="text-align: left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.32</td><td style="text-align: left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.32.1</td><td style="text-align: left">Synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.32.2</td><td style="text-align: left">Function <code class="code">iswblank</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">8.33</td><td style="text-align: left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr></tbody></table></div></div><br class="table-break"/></div><div class="section" title="C++ TR 24733"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"/>C++ TR 24733</h3></div></div></div><p>
+ </td></tr><tr><td align="left">2.2.3.1</td><td align="left"><code class="code">shared_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.2</td><td align="left"><code class="code">shared_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.3</td><td align="left"><code class="code">shared_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.4</td><td align="left"><code class="code">shared_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.5</td><td align="left"><code class="code">shared_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.6</td><td align="left"><code class="code">shared_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.7</td><td align="left"><code class="code">shared_ptr</code> I/O</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.8</td><td align="left"><code class="code">shared_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.9</td><td align="left"><code class="code">shared_ptr</code> casts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.10</td><td align="left"><code class="code">get_deleter</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.4.1</td><td align="left"><code class="code">weak_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.2</td><td align="left"><code class="code">weak_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.3</td><td align="left"><code class="code">weak_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.4</td><td align="left"><code class="code">weak_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.5</td><td align="left"><code class="code">weak_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.6</td><td align="left"><code class="code">weak_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.7</td><td align="left"><code class="code">weak_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.5</td><td align="left">Class template <code class="code">enable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>3</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td align="left">3.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.3</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Function return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.5</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6</td><td align="left">Function object binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.6.1</td><td align="left">Class template <code class="code">is_bind_expression</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.2</td><td align="left">Class template <code class="code">is_placeholder</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.3</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.4</td><td align="left">Placeholders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.1.1</td><td align="left"><code class="code">bad_function_call</code> constructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2</td><td align="left">Class template <code class="code">function</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.2.1</td><td align="left"><code class="code">function</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.2</td><td align="left"><code class="code">function</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.3</td><td align="left"><code class="code">function</code> capacity</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.4</td><td align="left"><code class="code">function</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.5</td><td align="left"><code class="code">function</code> target access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.6</td><td align="left">undefined operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.7</td><td align="left">null pointer comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.8</td><td align="left">specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>4</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td align="left">4.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.4</td><td align="left">General Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.5.1</td><td align="left">Primary Type Categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.3</td><td align="left">Type properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.3</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.4</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.8</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.9</td><td align="left">Implementation requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>5</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td align="left">5.1</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">5.1.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.3</td><td align="left">Class template <code class="code">variate_generator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4</td><td align="left">Random number engine class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.1</td><td align="left">Class template <code class="code">linear_congruential</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.2</td><td align="left">Class template <code class="code">mersenne_twister</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.3</td><td align="left">Class template <code class="code">subtract_with_carry</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.4</td><td align="left">Class template <code class="code">subtract_with_carry_01</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.5</td><td align="left">Class template <code class="code">discard_block</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.6</td><td align="left">Class template <code class="code">xor_combine</code></td><td align="left">Y</td><td align="left">operator()() per N2079</td></tr><tr><td align="left">5.1.5</td><td align="left">Engines with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7</td><td align="left">Random distribution class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.1</td><td align="left">Class template <code class="code">uniform_int</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.2</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.4</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.5</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.6</td><td align="left">Class template <code class="code">uniform_real</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.7</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.8</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.9</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2</td><td align="left">Mathematical special functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.1</td><td align="left">associated Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.2</td><td align="left">associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.3</td><td align="left">beta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.4</td><td align="left">(complete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.5</td><td align="left">(complete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.6</td><td align="left">(complete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.7</td><td align="left">confluent hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.8</td><td align="left">regular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.9</td><td align="left">cylindrical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.10</td><td align="left">irregular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.11</td><td align="left">cylindrical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.12</td><td align="left">(incomplete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.13</td><td align="left">(incomplete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.14</td><td align="left">(incomplete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.15</td><td align="left">exponential integral</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.16</td><td align="left">Hermite polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.17</td><td align="left">hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.18</td><td align="left">Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.19</td><td align="left">Legendre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.20</td><td align="left">Riemann zeta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.21</td><td align="left">spherical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.22</td><td align="left">spherical associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.23</td><td align="left">spherical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.2</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>6</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td align="left">6.1</td><td align="left">Tuple types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.1</td><td align="left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.2</td><td align="left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.2</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.3</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.4</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.5</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.4</td><td align="left">Pairs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2</td><td align="left">Fixed size array</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.1</td><td align="left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.1</td><td align="left"><code class="code">array</code> constructors, copy, and assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.2</td><td align="left"><code class="code">array</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.3</td><td align="left"><code class="code">array</code> size</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.4</td><td align="left">Zero sized <code class="code">array</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.5</td><td align="left">Tuple interface to class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1</td><td align="left">Unordered associative container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1.1</td><td align="left">Exception safety guarantees</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.2</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.3</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4</td><td align="left">Unordered associative container classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.1</td><td align="left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.2</td><td align="left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.1</td><td align="left"><code class="code">unordered_set</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.2</td><td align="left"><code class="code">unordered_set</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.1</td><td align="left"><code class="code">unordered_map</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.2</td><td align="left"><code class="code">unordered_map</code> element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.3</td><td align="left"><code class="code">unordered_map</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.1</td><td align="left"><code class="code">unordered_multiset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.2</td><td align="left"><code class="code">unordered_multiset</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.1</td><td align="left"><code class="code">unordered_multimap</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.2</td><td align="left"><code class="code">unordered_multimap</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>7</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr bgcolor="#C8B0B0"><td align="left">7.1</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.2</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.3</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5</td><td align="left">Namespace <code class="code">tr1::regex_constants</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.1</td><td align="left">Bitmask Type <code class="code">syntax_option_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.2</td><td align="left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.3</td><td align="left">Implementation defined <code class="code">error_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.1</td><td align="left"><code class="code">basic_regex</code> constants</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.2</td><td align="left"><code class="code">basic_regex</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.3</td><td align="left"><code class="code">basic_regex</code> assign</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.4</td><td align="left"><code class="code">basic_regex</code> constant operations</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.5</td><td align="left"><code class="code">basic_regex</code> locale</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.6</td><td align="left"><code class="code">basic_regex</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7</td><td align="left"><code class="code">basic_regex</code> non-member functions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7.1</td><td align="left"><code class="code">basic_regex</code> non-member swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.1</td><td align="left"><code class="code">sub_match</code> members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.2</td><td align="left"><code class="code">sub_match</code> non-member operators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.1</td><td align="left"><code class="code">match_results</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.2</td><td align="left"><code class="code">match_results</code> size</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.3</td><td align="left"><code class="code">match_results</code> element access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.4</td><td align="left"><code class="code">match_results</code> formatting</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.5</td><td align="left"><code class="code">match_results</code> allocator</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.6</td><td align="left"><code class="code">match_results</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.1</td><td align="left">exceptions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.2</td><td align="left"><code class="code">regex_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.3</td><td align="left"><code class="code">regex_search</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.4</td><td align="left"><code class="code">regex_replace</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1</td><td align="left">Class template <code class="code">regex_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.1</td><td align="left"><code class="code">regex_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.2</td><td align="left"><code class="code">regex_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.3</td><td align="left"><code class="code">regex_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.4</td><td align="left"><code class="code">regex_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2</td><td align="left">Class template <code class="code">regex_token_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.1</td><td align="left"><code class="code">regex_token_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.2</td><td align="left"><code class="code">regex_token_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.3</td><td align="left"><code class="code">regex_token_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.4</td><td align="left"><code class="code">regex_token_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>8</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td align="left">8.1</td><td align="left">Additions to header <code class="code">&lt;complex&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.2</td><td align="left">Function <code class="code">acos</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.3</td><td align="left">Function <code class="code">asin</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.4</td><td align="left">Function <code class="code">atan</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.5</td><td align="left">Function <code class="code">acosh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.6</td><td align="left">Function <code class="code">asinh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.7</td><td align="left">Function <code class="code">atanh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.8</td><td align="left">Function <code class="code">fabs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.9</td><td align="left">Additional Overloads</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.2</td><td align="left">Header <code class="code">&lt;ccomplex&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr bgcolor="#C8B0B0"><td align="left">8.3</td><td align="left">Header <code class="code">&lt;complex.h&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr><td align="left">8.4</td><td align="left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.2</td><td align="left">Function <code class="code">isblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.5</td><td align="left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6</td><td align="left">Header <code class="code">&lt;cfenv&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.7</td><td align="left">Header <code class="code">&lt;fenv.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.8</td><td align="left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.9</td><td align="left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10</td><td align="left">Additions to header <code class="code">&lt;ios&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.1</td><td align="left">Synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.2</td><td align="left">Function <code class="code">hexfloat</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.11</td><td align="left">Header <code class="code">&lt;cinttypes&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.11.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left">DR 557</td></tr><tr><td align="left">8.11.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.12</td><td align="left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.13</td><td align="left">Additions to header <code class="code">&lt;climits&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.14</td><td align="left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.15</td><td align="left">Additions to header <code class="code">&lt;locale&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.16</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.3</td><td align="left">Function template definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.4</td><td align="left">Additional overloads</td><td align="left">Y</td><td align="left">DR 568; DR 550</td></tr><tr><td align="left">8.17</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.18</td><td align="left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.19</td><td align="left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.20</td><td align="left">The header <code class="code">&lt;cstdbool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.21</td><td align="left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22</td><td align="left">The header <code class="code">&lt;cstdint&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.23</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24</td><td align="left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.3</td><td align="left">Additional format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.24.4</td><td align="left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25</td><td align="left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.3</td><td align="left">Function <code class="code">abs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.4</td><td align="left">Function <code class="code">div</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.26</td><td align="left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.27</td><td align="left">Header <code class="code">&lt;ctgmath&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.28</td><td align="left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.29</td><td align="left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.30</td><td align="left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.3</td><td align="left">Additional wide format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.31</td><td align="left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32</td><td align="left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.2</td><td align="left">Function <code class="code">iswblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.33</td><td align="left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.tr1.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is specified by the 1998 and 2003 standards,
+ see <a class="link" href="status.html#iso.1998.specific" title="Implementation Specific Behavior">C++ 1998/2003 Implementation
+ Specific Behavior</a>. This section documents behaviour which
+ is required by TR1.
+ </p><p>
+ <span class="emphasis"><em>3.6.4 [tr.func.bind.place]/1</em></span> There are 29
+ placeholders defined and the placeholder types are
+ <code class="literal">Assignable</code>.
+ </p></div></div><div class="section" title="C++ TR 24733"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"></a>C++ TR 24733</h3></div></div></div><p>
This table is based on the table of contents of
ISO/IEC TR 24733 Date: 2009-08-28
Extension for the programming language C++ to support
@@ -257,27 +307,27 @@ decimal floating-point arithmetic
</p><p>
This page describes the TR 24733 support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="id461766"/><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Section</th><th style="text-align: left">Description</th><th style="text-align: left">Status</th><th style="text-align: left">Comments</th></tr></thead><tbody><tr><td style="text-align: left">
+</p><div class="table"><a id="idp12526624"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>0</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Introduction</em></span>
- </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">
<span class="emphasis"><em>1</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Normative references</em></span>
- </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">
<span class="emphasis"><em>2</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Conventions</em></span>
- </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">
<span class="emphasis"><em>3</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Decimal floating-point types</em></span>
- </td></tr><tr><td style="text-align: left">3.1</td><td style="text-align: left">Characteristics of decimal floating-point types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.2</td><td style="text-align: left">Decimal Types</td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">3.2.1</td><td style="text-align: left">Class <code class="code">decimal</code> synopsis</td><td style="text-align: left">Partial</td><td style="text-align: left">Missing declarations for formatted input/output; non-conforming extension for functions converting to integral type</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">3.2.2</td><td style="text-align: left">Class <code class="code">decimal32</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing 3.2.2.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">3.2.3</td><td style="text-align: left">Class <code class="code">decimal64</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing 3.2.3.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">3.2.4</td><td style="text-align: left">Class <code class="code">decimal128</code></td><td style="text-align: left">Partial</td><td style="text-align: left">Missing 3.2.4.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</td></tr><tr><td style="text-align: left">3.2.5</td><td style="text-align: left">Initialization from coefficient and exponent</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.2.6</td><td style="text-align: left">Conversion to generic floating-point type</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.2.7</td><td style="text-align: left">Unary arithmetic operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.2.8</td><td style="text-align: left">Binary arithmetic operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.2.9</td><td style="text-align: left">Comparison operators</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.2.10</td><td style="text-align: left">Formatted input</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.2.11</td><td style="text-align: left">Formatted output</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.3</td><td style="text-align: left">Additions to header <code class="code">limits</code></td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4</td><td style="text-align: left">Headers <code class="code">cfloat</code> and <code class="code">float.h</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4.2</td><td style="text-align: left">Additions to header <code class="code">cfloat</code> synopsis</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #B0B0B0"><td style="text-align: left">3.4.3</td><td style="text-align: left">Additions to header <code class="code">float.h</code> synopsis</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4.4</td><td style="text-align: left">Maximum finite value</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4.5</td><td style="text-align: left">Epsilon</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4.6</td><td style="text-align: left">Minimum positive normal value</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4.7</td><td style="text-align: left">Minimum positive subnormal value</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">3.4.8</td><td style="text-align: left">Evaluation format</td><td style="text-align: left">Y</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.5</td><td style="text-align: left">Additions to <code class="code">cfenv</code> and <code class="code">fenv.h</code></td><td style="text-align: left">Outside the scope of GCC</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.6</td><td style="text-align: left">Additions to <code class="code">cmath</code> and <code class="code">math.h</code></td><td style="text-align: left">Outside the scope of GCC</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.7</td><td style="text-align: left">Additions to <code class="code">cstdio</code> and <code class="code">stdio.h</code></td><td style="text-align: left">Outside the scope of GCC</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.8</td><td style="text-align: left">Additions to <code class="code">cstdlib</code> and <code class="code">stdlib.h</code></td><td style="text-align: left">Outside the scope of GCC</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.9</td><td style="text-align: left">Additions to <code class="code">cwchar</code> and <code class="code">wchar.h</code></td><td style="text-align: left">Outside the scope of GCC</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.10</td><td style="text-align: left">Facets</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.11</td><td style="text-align: left">Type traits</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr style="background-color: #C8B0B0"><td style="text-align: left">3.12</td><td style="text-align: left">Hash functions</td><td style="text-align: left">N</td><td style="text-align: left"> </td></tr><tr><td style="text-align: left">
+ </td></tr><tr><td align="left">3.1</td><td align="left">Characteristics of decimal floating-point types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Decimal Types</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">3.2.1</td><td align="left">Class <code class="code">decimal</code> synopsis</td><td align="left">Partial</td><td align="left">Missing declarations for formatted input/output; non-conforming extension for functions converting to integral type</td></tr><tr bgcolor="#B0B0B0"><td align="left">3.2.2</td><td align="left">Class <code class="code">decimal32</code></td><td align="left">Partial</td><td align="left">Missing 3.2.2.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</td></tr><tr bgcolor="#B0B0B0"><td align="left">3.2.3</td><td align="left">Class <code class="code">decimal64</code></td><td align="left">Partial</td><td align="left">Missing 3.2.3.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</td></tr><tr bgcolor="#B0B0B0"><td align="left">3.2.4</td><td align="left">Class <code class="code">decimal128</code></td><td align="left">Partial</td><td align="left">Missing 3.2.4.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</td></tr><tr><td align="left">3.2.5</td><td align="left">Initialization from coefficient and exponent</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2.6</td><td align="left">Conversion to generic floating-point type</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2.7</td><td align="left">Unary arithmetic operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2.8</td><td align="left">Binary arithmetic operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2.9</td><td align="left">Comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.2.10</td><td align="left">Formatted input</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.2.11</td><td align="left">Formatted output</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.3</td><td align="left">Additions to header <code class="code">limits</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Headers <code class="code">cfloat</code> and <code class="code">float.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.4.2</td><td align="left">Additions to header <code class="code">cfloat</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">3.4.3</td><td align="left">Additions to header <code class="code">float.h</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">3.4.4</td><td align="left">Maximum finite value</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4.5</td><td align="left">Epsilon</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4.6</td><td align="left">Minimum positive normal value</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4.7</td><td align="left">Minimum positive subnormal value</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4.8</td><td align="left">Evaluation format</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.5</td><td align="left">Additions to <code class="code">cfenv</code> and <code class="code">fenv.h</code></td><td align="left">Outside the scope of GCC</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.6</td><td align="left">Additions to <code class="code">cmath</code> and <code class="code">math.h</code></td><td align="left">Outside the scope of GCC</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.7</td><td align="left">Additions to <code class="code">cstdio</code> and <code class="code">stdio.h</code></td><td align="left">Outside the scope of GCC</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.8</td><td align="left">Additions to <code class="code">cstdlib</code> and <code class="code">stdlib.h</code></td><td align="left">Outside the scope of GCC</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.9</td><td align="left">Additions to <code class="code">cwchar</code> and <code class="code">wchar.h</code></td><td align="left">Outside the scope of GCC</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.10</td><td align="left">Facets</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.11</td><td align="left">Type traits</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">3.12</td><td align="left">Hash functions</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>4</em></span>
- </td><td colspan="3" style="text-align: left">
+ </td><td colspan="3" align="left">
<span class="emphasis"><em>Notes on C compatibility</em></span>
- </td></tr></tbody></table></div></div><br class="table-break"/></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="intro.html">Prev</a> </td><td align="center"><a accesskey="u" href="intro.html">Up</a></td><td align="right"> <a accesskey="n" href="license.html">Next</a></td></tr><tr><td align="left" valign="top">Part I. 
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part I. 
Introduction
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> License</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> License</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/streambufs.html b/libstdc++-v3/doc/html/manual/streambufs.html
index 92c148dfcd..4030501dad 100644
--- a/libstdc++-v3/doc/html/manual/streambufs.html
+++ b/libstdc++-v3/doc/html/manual/streambufs.html
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13.  Input and Output"/><link rel="prev" href="io.html" title="Chapter 13.  Input and Output"/><link rel="next" href="stringstreams.html" title="Memory Based Streams"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="io.html" title="Chapter 13.  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr/></div><div class="section" title="Stream Buffers"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.streambufs"/>Stream Buffers</h2></div></div></div><div class="section" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"/>Derived streambuf Classes</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section" title="Stream Buffers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="section" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
</p><p>Creating your own stream buffers for I/O can be remarkably easy.
If you are interested in doing so, we highly recommend two very
excellent books:
- <a class="link" href="http://www.angelikalanger.com/iostreams.html">Standard C++
+ <a class="link" href="http://www.angelikalanger.com/iostreams.html" target="_top">Standard C++
IOStreams and Locales</a> by Langer and Kreft, ISBN 0-201-18395-1, and
- <a class="link" href="http://www.josuttis.com/libbook/">The C++ Standard Library</a>
+ <a class="link" href="http://www.josuttis.com/libbook/" target="_top">The C++ Standard Library</a>
by Nicolai Josuttis, ISBN 0-201-37926-0. Both are published by
Addison-Wesley, who isn't paying us a cent for saying that, honest.
</p><p>Here is a simple example, io/outbuf1, from the Josuttis text. It
@@ -55,9 +55,9 @@
}
</pre><p>Try it yourself! More examples can be found in 3.1.x code, in
<code class="code">include/ext/*_filebuf.h</code>, and in this article by James Kanze:
- <a class="link" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html">Filtering
+ <a class="link" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html" target="_top">Filtering
Streambufs</a>.
- </p></div><div class="section" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"/>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
+ </p></div><div class="section" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
the fact that C++ may not, in fact, have anything to do with it?
</p><p>The rules for buffering can be a little odd, but they aren't any
different from those of C. (Maybe that's why they can be a bit
@@ -131,7 +131,7 @@
just those at the language/library level. Kernel buffers, disk
buffers, and the like will also have an effect. Inspecting and
changing those are system-dependent.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="io.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 13. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. 
Input and Output
- </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/strings.html b/libstdc++-v3/doc/html/manual/strings.html
index a70edcdb81..82df2a751d 100644
--- a/libstdc++-v3/doc/html/manual/strings.html
+++ b/libstdc++-v3/doc/html/manual/strings.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="traits.html" title="Traits"/><link rel="next" href="localization.html" title="Chapter 8.  Localization"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
Strings
-</th></tr><tr><td align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 7.  Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"/>Chapter 7. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 7.  Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
Strings
- <a id="id475084" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section" title="String Classes"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings.string"/>String Classes</h2></div></div></div><div class="section" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"/>Simple Transformations</h3></div></div></div><p>
+ <a id="idp15576144" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section" title="String Classes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
Here are Standard, simple, and portable ways to perform common
transformations on a <code class="code">string</code> instance, such as
"convert to all upper case." The word transformations
@@ -64,7 +64,7 @@
are overloaded names (declared in <code class="code">&lt;cctype&gt;</code> and
<code class="code">&lt;locale&gt;</code>) so the template-arguments for
<code class="code">transform&lt;&gt;</code> cannot be deduced, as explained in
- <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html">this
+ <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html" target="_top">this
message</a>.
At minimum, you can write short wrappers like
@@ -89,9 +89,9 @@
str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
into the calls to <code class="code">erase</code>, in case your compiler does not
optimize named temporaries out of existence.
- </p></div><div class="section" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"/>Case Sensitivity</h3></div></div></div><p>
+ </p></div><div class="section" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
</p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
- <a class="link" href="http://www.gotw.ca/gotw/">Guru of the Week</a>
+ <a class="link" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
discussions held on Usenet covered this topic in January of 1998.
Briefly, the challenge was, <span class="quote">“<span class="quote">write a 'ci_string' class which
is identical to the standard 'string' class, but is
@@ -108,10 +108,10 @@
assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
assert( strcmp( s.c_str(), "abcde" ) != 0 ); </pre><p>The solution is surprisingly easy. The original answer was
posted on Usenet, and a revised version appears in Herb Sutter's
- book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="link" href="http://www.gotw.ca/gotw/029.htm">GotW 29</a>.
+ book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="link" href="http://www.gotw.ca/gotw/029.htm" target="_top">GotW 29</a>.
</p><p>See? Told you it was easy!</p><p>
<span class="emphasis"><em>Added June 2000:</em></span> The May 2000 issue of C++
- Report contains a fascinating <a class="link" href="http://lafstern.org/matt/col2_new.pdf"> article</a> by
+ Report contains a fascinating <a class="link" href="http://lafstern.org/matt/col2_new.pdf" target="_top"> article</a> by
Matt Austern (yes, <span class="emphasis"><em>the</em></span> Matt Austern) on why
case-insensitive comparisons are not as easy as they seem, and
why creating a class is the <span class="emphasis"><em>wrong</em></span> way to go
@@ -123,10 +123,10 @@
that nobody ever called me on it...) The GotW question and answer
remain useful instructional tools, however.
</p><p><span class="emphasis"><em>Added September 2000:</em></span> James Kanze provided a link to a
- <a class="link" href="http://www.unicode.org/reports/tr21/tr21-5.html">Unicode
+ <a class="link" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
Technical Report discussing case handling</a>, which provides some
very good information.
- </p></div><div class="section" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"/>Arbitrary Character Types</h3></div></div></div><p>
+ </p></div><div class="section" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
</p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
it is parameterized on the type of the characters which it holds.
In theory, you could whip up a Unicode character class and instantiate
@@ -169,18 +169,18 @@
works and can be specialized even for <code class="code">int</code> and other
built-in types.
</p><p>If you want to use your own special character class, then you have
- <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html">a lot
+ <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html" target="_top">a lot
of work to do</a>, especially if you with to use i18n features
(facets require traits information but don't have a traits argument).
- </p><p>Another example of how to specialize char_traits was given <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html">on the
+ </p><p>Another example of how to specialize char_traits was given <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html" target="_top">on the
mailing list</a> and at a later date was put into the file <code class="code">
include/ext/pod_char_traits.h</code>. We agree
that the way it's used with basic_string (scroll down to main())
- doesn't look nice, but that's because <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html">the
- nice-looking first attempt</a> turned out to <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html">not
+ doesn't look nice, but that's because <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html" target="_top">the
+ nice-looking first attempt</a> turned out to <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html" target="_top">not
be conforming C++</a>, due to the rule that CharT must be a POD.
(See how tricky this is?)
- </p></div><div class="section" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"/>Tokenizing</h3></div></div></div><p>
+ </p></div><div class="section" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
</p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
be desired in terms of user-friendliness. It's unintuitive, it
destroys the character string on which it operates, and it requires
@@ -256,7 +256,7 @@ stringtok(Container &amp;container, string const &amp;in,
tokenizing as well. Build an istringstream from the input text,
and then use std::getline with varying delimiters (the three-argument
signature) to extract tokens into a string.
- </p></div><div class="section" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"/>Shrink to Fit</h3></div></div></div><p>
+ </p></div><div class="section" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
</p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
<code class="code">string s</code> with <code class="code">res &lt; s.capacity()</code> will
reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
@@ -269,10 +269,10 @@ stringtok(Container &amp;container, string const &amp;in,
(see <a class="link" href="../faq.html#faq.size_equals_capacity" title="7.8.">this FAQ
entry</a>) but the regular copy constructor cannot be used
because libstdc++'s <code class="code">string</code> is Copy-On-Write.
- </p><p>In <a class="link" href="status.html#status.iso.200x" title="C++ 200x">C++0x</a> mode you can call
+ </p><p>In <a class="link" href="status.html#status.iso.2011" title="C++ 2011">C++11</a> mode you can call
<code class="code">s.shrink_to_fit()</code> to achieve the same effect as
<code class="code">s.reserve(s.size())</code>.
- </p></div><div class="section" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"/>CString (MFC)</h3></div></div></div><p>
+ </p></div><div class="section" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
</p><p>A common lament seen in various newsgroups deals with the Standard
string class as opposed to the Microsoft Foundation Class called
CString. Often programmers realize that a standard portable
@@ -280,9 +280,9 @@ stringtok(Container &amp;container, string const &amp;in,
their application from a Win32 platform, they discover that they
are relying on special functions offered by the CString class.
</p><p>Things are not as bad as they seem. In
- <a class="link" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html">this
+ <a class="link" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html" target="_top">this
message</a>, Joe Buck points out a few very important things:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
that CString does, with three exceptions.
</p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
conversion) are trivial to implement. In fact, we do so
@@ -340,7 +340,7 @@ stringtok(Container &amp;container, string const &amp;in,
performance is O(n).
</pre><p>Joe Buck also pointed out some other things to keep in mind when
comparing CString and the Standard string class:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>CString permits access to its internal representation; coders
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>CString permits access to its internal representation; coders
who exploited that may have problems moving to <code class="code">string</code>.
</p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
@@ -360,7 +360,7 @@ stringtok(Container &amp;container, string const &amp;in,
libstdc++ string, the SGI string, and the SGI rope, and this
is all before any allocator or traits customizations! (More
choices than you can shake a stick at -- want fries with that?)
- </p></li></ul></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td align="left" valign="top">Traits </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 8. 
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Traits </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. 
Localization
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/stringstreams.html b/libstdc++-v3/doc/html/manual/stringstreams.html
index 1107d61b1b..e501e19444 100644
--- a/libstdc++-v3/doc/html/manual/stringstreams.html
+++ b/libstdc++-v3/doc/html/manual/stringstreams.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13.  Input and Output"/><link rel="prev" href="streambufs.html" title="Stream Buffers"/><link rel="next" href="fstreams.html" title="File Based Streams"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr/></div><div class="section" title="Memory Based Streams"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.memstreams"/>Memory Based Streams</h2></div></div></div><div class="section" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"/>Compatibility With strstream</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory Based Streams"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="section" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
</p><p>Stringstreams (defined in the header <code class="code">&lt;sstream&gt;</code>)
are in this author's opinion one of the coolest things since
sliced time. An example of their use is in the Received Wisdom
@@ -34,4 +34,4 @@
memory yourself. The strstreams have been officially deprecated,
which means that 1) future revisions of the C++ Standard won't
support them, and 2) if you use them, people will laugh at you.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td align="left" valign="top">Stream Buffers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/support.html b/libstdc++-v3/doc/html/manual/support.html
index 39c8185c60..248a5c3a4f 100644
--- a/libstdc++-v3/doc/html/manual/support.html
+++ b/libstdc++-v3/doc/html/manual/support.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="next" href="dynamic_memory.html" title="Dynamic Memory"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
Support
-</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 4.  Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"/>Chapter 4. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 4.  Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
Support
- <a id="id471617" class="indexterm"/>
+ <a id="idp13718496" class="indexterm"></a>
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
This part deals with the functions called and objects created
automatically during the course of a program's existence.
@@ -16,9 +16,9 @@
need to get your own copy from your nation's member body; see our
homepage for help), we can mention a couple of changes in what
kind of support a C++ program gets from the Standard Library.
- </p><div class="section" title="Types"><div class="titlepage"><div><div><h2 class="title"><a id="std.support.types"/>Types</h2></div></div></div><div class="section" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"/>Fundamental Types</h3></div></div></div><p>
+ </p><div class="section" title="Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="section" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
C++ has the following builtin types:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
char
</p></li><li class="listitem"><p>
signed char
@@ -53,12 +53,12 @@
</p><p>
Specializing parts of the library on these types is prohibited:
instead, use a POD.
- </p></div><div class="section" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"/>Numeric Properties</h3></div></div></div><p>
+ </p></div><div class="section" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
The header <code class="filename">limits</code> defines
traits classes to give access to various implementation
defined-aspects of the fundamental types. The traits classes --
fourteen in total -- are all specializations of the template class
- <code class="classname">numeric_limits</code>, documented <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html">here</a>
+ <code class="classname">numeric_limits</code>, documented <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html" target="_top">here</a>
and defined as follows:
</p><pre class="programlisting">
template&lt;typename T&gt;
@@ -99,7 +99,7 @@
static const bool tinyness_before;
static const float_round_style round_style;
};
- </pre></div><div class="section" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"/>NULL</h3></div></div></div><p>
+ </pre></div><div class="section" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
The only change that might affect people is the type of
<code class="constant">NULL</code>: while it is required to be a macro,
the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
@@ -116,15 +116,15 @@
overloading won't do what you expect. (This is why
<span class="command"><strong>g++</strong></span> has a magic extension, so that
<code class="constant">NULL</code> is always a pointer.)
- </p><p>In his book <a class="link" href="http://www.awprofessional.com/titles/0-201-92488-9/"><span class="emphasis"><em>Effective
+ </p><p>In his book <a class="link" href="http://www.awprofessional.com/titles/0-201-92488-9/" target="_top"><span class="emphasis"><em>Effective
C++</em></span></a>, Scott Meyers points out that the best way
to solve this problem is to not overload on pointer-vs-integer
types to begin with. He also offers a way to make your own magic
<code class="constant">NULL</code> that will match pointers before it
matches integers.
</p><p>See
- <a class="link" href="http://www.awprofessional.com/titles/0-201-31015-5/">the
+ <a class="link" href="http://www.awprofessional.com/titles/0-201-31015-5/" target="_top">the
Effective C++ CD example</a>
- </p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td align="left" valign="top">Part II. 
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. 
Standard Contents
-  </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/termination.html b/libstdc++-v3/doc/html/manual/termination.html
index cc52359435..fc7389f100 100644
--- a/libstdc++-v3/doc/html/manual/termination.html
+++ b/libstdc++-v3/doc/html/manual/termination.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="support.html" title="Chapter 4.  Support"/><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory"/><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
Support
-</th><td align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr/></div><div class="section" title="Termination"><div class="titlepage"><div><div><h2 class="title"><a id="std.support.termination"/>Termination</h2></div></div></div><div class="section" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"/>Termination Handlers</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section" title="Termination"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="section" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
Not many changes here to <code class="filename">cstdlib</code>. You should note that the
<code class="function">abort()</code> function does not call the
destructors of automatic nor static objects, so if you're
@@ -15,7 +15,7 @@
The good old <code class="function">exit()</code> function can be a bit
funky, too, until you look closer. Basically, three points to
remember are:
- </p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Static objects are destroyed in reverse order of their creation.
</p></li><li class="listitem"><p>
Functions registered with <code class="function">atexit()</code> are called in
@@ -45,7 +45,7 @@
functions, and the compiler/library might already be using some of
those slots. If you think you may run out, we recommend using
the <code class="function">xatexit</code>/<code class="function">xexit</code> combination from <code class="literal">libiberty</code>, which has no such limit.
- </p></div><div class="section" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"/>Verbose Terminate Handler</h3></div></div></div><p>
+ </p></div><div class="section" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
If you are having difficulty with uncaught exceptions and want a
little bit of help debugging the causes of the core dumps, you can
make use of a GNU extension, the verbose terminate handler.
@@ -118,7 +118,7 @@ int main(int argc)
inappropriate location,
<code class="function">__verbose_terminate_handler</code> will behave in
an unspecified manner.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td align="center"><a accesskey="u" href="support.html">Up</a></td><td align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td align="left" valign="top">Dynamic Memory </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 5. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Dynamic Memory </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. 
Diagnostics
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/test.html b/libstdc++-v3/doc/html/manual/test.html
index b346c422ba..fb254d9c4a 100644
--- a/libstdc++-v3/doc/html/manual/test.html
+++ b/libstdc++-v3/doc/html/manual/test.html
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; test&#10; , &#10; testsuite&#10; , &#10; performance&#10; , &#10; conformance&#10; , &#10; ABI&#10; , &#10; exception safety&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"/><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems"/><link rel="next" href="abi.html" title="ABI Policy and Guidelines"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; test&#10; , &#10; testsuite&#10; , &#10; performance&#10; , &#10; conformance&#10; , &#10; ABI&#10; , &#10; exception safety&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
Porting and Maintenance
-</th><td align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr/></div><div class="section" title="Test"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.test"/>Test</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section" title="Test"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
The libstdc++ testsuite includes testing for standard conformance,
regressions, ABI, and performance.
-</p><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"/>Organization</h3></div></div></div><div class="section" title="Directory Layout"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"/>Directory Layout</h4></div></div></div><p>
+</p><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="section" title="Directory Layout"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p>
The directory <span class="emphasis"><em>libsrcdir/testsuite</em></span> contains the
individual test cases organized in sub-directories corresponding to
chapters of the C++ standard (detailed below), the dejagnu test
@@ -77,11 +77,11 @@ util Files for libtestc++, utilities and testing routines.
</pre><p>
All new tests should be written with the policy of one test
case, one file in mind.
- </p></div><div class="section" title="Naming Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"/>Naming Conventions</h4></div></div></div><p>
+ </p></div><div class="section" title="Naming Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"></a>Naming Conventions</h4></div></div></div><p>
In addition, there are some special names and suffixes that are
used within the testsuite to designate particular kinds of
tests.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<span class="emphasis"><em>_xin.cc</em></span>
</p><p>
This test case expects some kind of interactive input in order
@@ -131,7 +131,7 @@ cat 27_io/objects/char/3_xin.in | a.out
analyze runtime performance, for performance regression testing,
or for other optimization related analysis. At the moment, these
test cases are not run by default.
- </p></li></ul></div></div></div><div class="section" title="Running the Testsuite"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"/>Running the Testsuite</h3></div></div></div><div class="section" title="Basic"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"/>Basic</h4></div></div></div><p>
+ </p></li></ul></div></div></div><div class="section" title="Running the Testsuite"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"></a>Running the Testsuite</h3></div></div></div><div class="section" title="Basic"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"></a>Basic</h4></div></div></div><p>
You can check the status of the build without installing it
using the dejagnu harness, much like the rest of the gcc
tools.</p><pre class="programlisting"> make check</pre><p>in the <span class="emphasis"><em>libbuilddir</em></span> directory.</p><p>or</p><pre class="programlisting"> make check-target-libstdc++-v3</pre><p>in the <span class="emphasis"><em>gccbuilddir</em></span> directory.
@@ -146,12 +146,12 @@ cat 27_io/objects/char/3_xin.in | a.out
output, and the executable output (if any).
</p><p>
Archives of test results for various versions and platforms are
- available on the GCC website in the <a class="link" href="http://gcc.gnu.org/gcc-4.3/buildstat.html">build
+ available on the GCC website in the <a class="link" href="http://gcc.gnu.org/gcc-4.3/buildstat.html" target="_top">build
status</a> section of each individual release, and are also
- archived on a daily basis on the <a class="link" href="http://gcc.gnu.org/ml/gcc-testresults/current">gcc-testresults</a>
+ archived on a daily basis on the <a class="link" href="http://gcc.gnu.org/ml/gcc-testresults/current" target="_top">gcc-testresults</a>
mailing list. Please check either of these places for a similar
combination of source version, operating system, and host CPU.
- </p></div><div class="section" title="Variations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"/>Variations</h4></div></div></div><p>
+ </p></div><div class="section" title="Variations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"></a>Variations</h4></div></div></div><p>
There are several options for running tests, including testing
the regression tests, testing a subset of the regression tests,
testing the performance tests, testing just compilation, testing
@@ -222,7 +222,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
</pre><p>
Five files are generated that determine what test files
are run. These files are:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<span class="emphasis"><em>testsuite_files</em></span>
</p><p>
This is a list of all the test cases that will be run. Each
@@ -277,7 +277,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
We are interested in any strange failures of the testsuite;
please email the main libstdc++ mailing list if you see
something odd or have questions.
- </p></div><div class="section" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"/>Permutations</h4></div></div></div><p>
+ </p></div><div class="section" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, edit
<code class="filename">libstdc++-v3/scripts/testsuite_flags</code> to add the
compile-time flag <code class="constant">-D_GLIBCXX_DEBUG</code> to the
@@ -297,7 +297,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
Or, just run the testsuites with <code class="constant">CXXFLAGS</code>
set to <code class="constant">-D_GLIBCXX_DEBUG</code> or
<code class="constant">-D_GLIBCXX_PARALLEL</code>.
- </p></div></div><div class="section" title="Writing a new test case"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"/>Writing a new test case</h3></div></div></div><p>
+ </p></div></div><div class="section" title="Writing a new test case"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"></a>Writing a new test case</h3></div></div></div><p>
The first step in making a new test case is to choose the correct
directory and file name, given the organization as previously
described.
@@ -392,10 +392,10 @@ Example 1: Testing compilation only
// { dg-do compile }
Example 2: Testing for expected warnings on line 36, which all targets fail
-// { dg-warning "string literals" "" { xfail *-*-* } 36
+// { dg-warning "string literals" "" { xfail *-*-* } 36 }
Example 3: Testing for expected warnings on line 36
-// { dg-warning "string literals" "" { target *-*-* } 36
+// { dg-warning "string literals" "" { target *-*-* } 36 }
Example 4: Testing for compilation errors on line 41
// { dg-do compile }
@@ -408,7 +408,7 @@ up in the normal.exp file.
// { dg-options "-O0" { target *-*-* } }
</pre><p>
More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
- </p></div><div class="section" title="Test Harness and Utilities"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"/>Test Harness and Utilities</h3></div></div></div><div class="section" title="Dejagnu Harness Details"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"/>Dejagnu Harness Details</h4></div></div></div><p>
+ </p></div><div class="section" title="Test Harness and Utilities"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"></a>Test Harness and Utilities</h3></div></div></div><div class="section" title="Dejagnu Harness Details"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"></a>Dejagnu Harness Details</h4></div></div></div><p>
Underlying details of testing for conformance and regressions are
abstracted via the GNU Dejagnu package. This is similar to the
rest of GCC.
@@ -435,7 +435,7 @@ callbacks loaded from the support library.
</p><p>The <code class="code">config</code> directory is searched for any particular "target
board" information unique to this library. This is currently unused and sets
only default variables.
-</p></div><div class="section" title="Utilities"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"/>Utilities</h4></div></div></div><p>
+</p></div><div class="section" title="Utilities"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"></a>Utilities</h4></div></div></div><p>
</p><p>
The testsuite directory also contains some files that implement
functionality that is intended to make writing test cases easier,
@@ -447,7 +447,7 @@ only default variables.
during testing.
</p><p>
These files include the following functionality:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<span class="emphasis"><em>testsuite_abi.h</em></span>,
<span class="emphasis"><em>testsuite_abi.cc</em></span>,
<span class="emphasis"><em>testsuite_abi_check.cc</em></span>
@@ -477,7 +477,7 @@ only default variables.
<span class="emphasis"><em>testsuite_hooks.cc</em></span>
</p><p>
A large number of utilities, including:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
<span class="emphasis"><em>testsuite_io.h</em></span>
</p><p>
Error, exception, and constraint checking for
@@ -491,10 +491,10 @@ only default variables.
</p><p>
A number of class abstractions for performance counters, and
reporting functions including:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"/>Special Topics</h3></div></div></div><div class="section" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"/>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
Qualifying Exception Safety Guarantees
- <a id="id498690" class="indexterm"/>
-</h4></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"/>Overview</h5></div></div></div><p>
+ <a id="idp22593984" class="indexterm"></a>
+</h4></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
Testing is composed of running a particular test sequence,
and looking at what happens to the surrounding code when
exceptions are thrown. Each test is composed of measuring
@@ -524,9 +524,9 @@ only default variables.
completes without an exception being thrown, assume all
potential error paths have been exercised in a sequential
manner.
- </p></div><div class="section" title="Existing tests"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"/>
+ </p></div><div class="section" title="Existing tests"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"></a>
Existing tests
-</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Ad Hoc
</p><p>
For example,
@@ -548,7 +548,7 @@ container uses an extension
allocator, <code class="classname">__gnu_cxx::throw_allocator_random</code>,
as the allocator type.
</p></li><li class="listitem"><p>
- C++0x Container Requirements.
+ C++11 Container Requirements.
</p><p>
Coverage is currently limited to testing container
requirements for exception safety,
@@ -563,9 +563,9 @@ as the allocator type.
instrumentation to <code class="classname">iterator</code>
and <code class="classname">const_iterator</code> types that throw
conditionally on iterator operations.
- </p></li></ul></div></div><div class="section" title="C++0x Requirements Test Sequence Descriptions"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"/>
-C++0x Requirements Test Sequence Descriptions
-</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p></li></ul></div></div><div class="section" title="C++11 Requirements Test Sequence Descriptions"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"></a>
+C++11 Requirements Test Sequence Descriptions
+</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Basic
</p><p>
Basic consistency on exception propagation tests. For
@@ -636,4 +636,4 @@ C++0x Requirements Test Sequence Descriptions
The general form demonstrated in
<code class="filename">testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
</code>. The instantiating test object is <code class="classname">__gnu_test::propagation_coherent</code> and is detailed in <code class="filename">testsuite/util/exception/safety.h</code>.
- </p></li></ul></div></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td align="left" valign="top">Porting to New Hardware or Operating Systems </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
+ </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/traits.html b/libstdc++-v3/doc/html/manual/traits.html
index 4c04c7b15c..9c3c83f6b3 100644
--- a/libstdc++-v3/doc/html/manual/traits.html
+++ b/libstdc++-v3/doc/html/manual/traits.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="utilities.html" title="Chapter 6.  Utilities"/><link rel="prev" href="memory.html" title="Memory"/><link rel="next" href="strings.html" title="Chapter 7.  Strings"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
-</th><td align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr/></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.traits"/>Traits</h2></div></div></div><p>
- </p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td align="center"><a accesskey="u" href="utilities.html">Up</a></td><td align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td align="left" valign="top">Memory </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 7. 
+</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. 
Strings
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html
index f9eeb59bd1..dce5536d79 100644
--- a/libstdc++-v3/doc/html/manual/using.html
+++ b/libstdc++-v3/doc/html/manual/using.html
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="intro.html" title="Part I.  Introduction"/><link rel="prev" href="make.html" title="Make"/><link rel="next" href="using_headers.html" title="Headers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. 
Introduction
-</th><td align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 3. Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"/>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section" title="Command Options"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.flags"/>Command Options</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 3. Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section" title="Command Options"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
The set of features available in the GNU C++ library is shaped
by
- several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Invoking-GCC.html">GCC
+ several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
Command Options</a>. Options that impact libstdc++ are
enumerated and detailed in the table below.
</p><p>
By default, <span class="command"><strong>g++</strong></span> is equivalent to <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
- </p><div class="table"><a id="id465910"/><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">Option Flags</th><th style="text-align: left">Description</th></tr></thead><tbody><tr><td style="text-align: left"><code class="literal">-std=c++98</code></td><td style="text-align: left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td style="text-align: left"><code class="literal">-std=gnu++98</code></td><td style="text-align: left">As directly above, with GNU extensions.</td></tr><tr><td style="text-align: left"><code class="literal">-std=c++0x</code></td><td style="text-align: left">Use the working draft of the upcoming ISO C++0x standard.</td></tr><tr><td style="text-align: left"><code class="literal">-std=gnu++0x</code></td><td style="text-align: left">As directly above, with GNU extensions.</td></tr><tr><td style="text-align: left"><code class="literal">-fexceptions</code></td><td style="text-align: left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td style="text-align: left"><code class="literal">-frtti</code></td><td style="text-align: left">As above, but RTTI-free dialect.</td></tr><tr><td style="text-align: left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td style="text-align: left">For ISO C++0x &lt;thread&gt;, &lt;future&gt;,
- &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td style="text-align: left"><code class="literal">-fopenmp</code></td><td style="text-align: left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="make.html">Prev</a> </td><td align="center"><a accesskey="u" href="intro.html">Up</a></td><td align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td align="left" valign="top">Make </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Headers</td></tr></table></div></body></html>
+ </p><div class="table"><a id="idp13018432"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+ &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_concurrency.html b/libstdc++-v3/doc/html/manual/using_concurrency.html
index a0ca2a651a..90424a3275 100644
--- a/libstdc++-v3/doc/html/manual/using_concurrency.html
+++ b/libstdc++-v3/doc/html/manual/using_concurrency.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_dynamic_or_shared.html" title="Linking"/><link rel="next" href="using_exceptions.html" title="Exceptions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr/></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.concurrency"/>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
of multithreaded applications which use the Standard C++
library. This information is GCC-specific since the C++
standard does not address matters of multithreaded applications.
- </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"/>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
+ </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"></a>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
only supported when libstdc++ and all user code was built with
compilers which report (via <code class="code"> gcc/g++ -v </code>) the same thread
model and that model is not <span class="emphasis"><em>single</em></span>. As long as your
@@ -29,15 +29,23 @@
to display how ad hoc this is: On Solaris, both -pthreads and
-threads (with subtly different meanings) are honored. On OSF,
-pthread and -threads (with subtly different meanings) are
- honored. On Linux/i386, -pthread is honored. On FreeBSD,
+ honored. On GNU/Linux x86, -pthread is honored. On FreeBSD,
-pthread is honored. Some other ports use other switches.
AFAIK, none of this is properly documented anywhere other than
in ``gcc -dumpspecs'' (look at lib and cpp entries).
- </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"/>Thread Safety</h3></div></div></div><p>
-We currently use the <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</a> definition of thread safety.
+ </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"></a>Thread Safety</h3></div></div></div><p>
+In the terms of the 2011 C++ standard a thread-safe program is one which
+does not perform any conflicting non-atomic operations on memory locations
+and so does not contain any data races.
+The standard places requirements on the library to ensure that no data
+races are caused by the library itself or by programs which use the
+library correctly (as described below).
+The C++11 memory model and library requirements are a more formal version
+of the <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI STL</a> definition of thread safety, which the library used
+prior to the 2011 standard.
</p><p>The library strives to be thread-safe when all of the following
conditions are met:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>The system's libc is itself thread-safe,
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The system's libc is itself thread-safe,
</p></li><li class="listitem"><p>
The compiler in use reports a thread model other than
'single'. This can be tested via output from <code class="code">gcc
@@ -53,45 +61,104 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
Requisite command-line flags are used for atomic operations
and threading. Examples of this include <code class="code">-pthread</code>
and <code class="code">-march=native</code>, although specifics vary
- depending on the host environment. See <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html">Machine
+ depending on the host environment. See <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html" target="_top">Machine
Dependent Options</a>.
</p></li><li class="listitem"><p>
An implementation of atomicity.h functions
exists for the architecture in question. See the internals documentation for more <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">details</a>.
- </p></li></ul></div><p>The user-code must guard against concurrent method calls which may
- access any particular library object's state. Typically, the
- application programmer may infer what object locks must be held
- based on the objects referenced in a method call. Without getting
+ </p></li></ul></div><p>The user code must guard against concurrent function calls which
+ access any particular library object's state when one or more of
+ those accesses modifies the state. An object will be modified by
+ invoking a non-const member function on it or passing it as a
+ non-const argument to a library function. An object will not be
+ modified by invoking a const member function on it or passing it to
+ a function as a pointer- or reference-to-const.
+ Typically, the application
+ programmer may infer what object locks must be held based on the
+ objects referenced in a function call and whether the objects are
+ accessed as const or non-const. Without getting
into great detail, here is an example which requires user-level
locks:
</p><pre class="programlisting">
library_class_a shared_object_a;
- thread_main () {
+ void thread_main () {
library_class_b *object_b = new library_class_b;
shared_object_a.add_b (object_b); // must hold lock for shared_object_a
shared_object_a.mutate (); // must hold lock for shared_object_a
}
// Multiple copies of thread_main() are started in independent threads.</pre><p>Under the assumption that object_a and object_b are never exposed to
- another thread, here is an example that should not require any
+ another thread, here is an example that does not require any
user-level locks:
</p><pre class="programlisting">
- thread_main () {
+ void thread_main () {
library_class_a object_a;
library_class_b *object_b = new library_class_b;
object_a.add_b (object_b);
object_a.mutate ();
- } </pre><p>All library objects are safe to use in a multithreaded program as
- long as each thread carefully locks out access by any other
- thread while it uses any object visible to another thread, i.e.,
- treat library objects like any other shared resource. In general,
- this requirement includes both read and write access to objects;
- unless otherwise documented as safe, do not assume that two threads
- may access a shared standard library object at the same time.
- </p></div><div class="section" title="Atomics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"/>Atomics</h3></div></div></div><p>
- </p></div><div class="section" title="IO"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"/>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
- </p><div class="section" title="Structure"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"/>Structure</h4></div></div></div><p>A wrapper
+ } </pre><p>All library types are safe to use in a multithreaded program
+ if objects are not shared between threads or as
+ long each thread carefully locks out access by any other
+ thread while it modifies any object visible to another thread.
+ Unless otherwise documented, the only exceptions to these rules
+ are atomic operations on the types in
+ <code class="filename">&lt;atomic&gt;</code>
+ and lock/unlock operations on the standard mutex types in
+ <code class="filename">&lt;mutex&gt;</code>. These
+ atomic operations allow concurrent accesses to the same object
+ without introducing data races.
+ </p><p>The following member functions of standard containers can be
+ considered to be const for the purposes of avoiding data races:
+ <code class="code">begin</code>, <code class="code">end</code>, <code class="code">rbegin</code>, <code class="code">rend</code>,
+ <code class="code">front</code>, <code class="code">back</code>, <code class="code">data</code>,
+ <code class="code">find</code>, <code class="code">lower_bound</code>, <code class="code">upper_bound</code>,
+ <code class="code">equal_range</code>, <code class="code">at</code>
+ and, except in associative or unordered associative containers,
+ <code class="code">operator[]</code>. In other words, although they are non-const
+ so that they can return mutable iterators, those member functions
+ will not modify the container.
+ Accessing an iterator might cause a non-modifying access to
+ the container the iterator refers to (for example incrementing a
+ list iterator must access the pointers between nodes, which are part
+ of the container and so conflict with other accesses to the container).
+ </p><p>Programs which follow the rules above will not encounter data
+ races in library code, even when using library types which share
+ state between distinct objects. In the example below the
+ <code class="code">shared_ptr</code> objects share a reference count, but
+ because the code does not perform any non-const operations on the
+ globally-visible object, the library ensures that the reference
+ count updates are atomic and do not introduce data races:
+ </p><pre class="programlisting">
+ std::shared_ptr&lt;int&gt; global_sp;
+
+ void thread_main() {
+ auto local_sp = global_sp; // OK, copy constructor's parameter is reference-to-const
+
+ int i = *global_sp; // OK, operator* is const
+ int j = *local_sp; // OK, does not operate on global_sp
+
+ // *global_sp = 2; // NOT OK, modifies int visible to other threads
+ // *local_sp = 2; // NOT OK, modifies int visible to other threads
+
+ // global_sp.reset(); // NOT OK, reset is non-const
+ local_sp.reset(); // OK, does not operate on global_sp
+ }
+
+ int main() {
+ global_sp.reset(new int(1));
+ std::thread t1(thread_main);
+ std::thread t2(thread_main);
+ t1.join();
+ t2.join();
+ }
+ </pre><p>For further details of the C++11 memory model see Hans-J. Boehm's
+ <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html" target="_top">Threads
+ and memory model for C++</a> pages, particularly the <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.html" target="_top">introduction</a>
+ and <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html" target="_top">FAQ</a>.
+ </p></div><div class="section" title="Atomics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"></a>Atomics</h3></div></div></div><p>
+ </p></div><div class="section" title="IO"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"></a>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
+ </p><div class="section" title="Structure"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"></a>Structure</h4></div></div></div><p>A wrapper
type called <code class="code">__basic_file</code> provides our abstraction layer
for the <code class="code">std::filebuf</code> classes. Nearly all decisions dealing
with actual input and output must be made in <code class="code">__basic_file</code>.
@@ -99,7 +166,7 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
but is not used in the current code. Providing locking at any higher
level is akin to providing locking within containers, and is not done
for the same reasons (see the links above).
- </p></div><div class="section" title="Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"/>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
+ </p></div><div class="section" title="Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"></a>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
the C stdio layer (again, see the link under Structure). We do no
locking ourselves, but simply pass through to calls to <code class="code">fopen</code>,
<code class="code">fwrite</code>, and so forth.
@@ -121,7 +188,7 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
contained in the stream formatting classes (e.g., setting up callbacks
inside an <code class="code">std::ofstream</code>), you need to guard such accesses
like any other critical shared resource.
- </p></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"/>Future</h4></div></div></div><p> A
+ </p></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"></a>Future</h4></div></div></div><p> A
second choice may be available for I/O implementations: libio. This is
disabled by default, and in fact will not currently work due to other
issues. It will be revisited, however.
@@ -146,10 +213,10 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
version will see calls from libstdc++ directly into the glibc already
installed. For other platforms, a copy of the libio subsection will
be built and included in libstdc++.
- </p></div><div class="section" title="Alternatives"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"/>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
+ </p></div><div class="section" title="Alternatives"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"></a>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
easily write one to perform your own forms of locking, to solve your
"interesting" problems.
- </p></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"/>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
+ </p></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"></a>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
multithreaded applications which use Standard C++ containers.
All information in this section is current as of the gcc 3.0
release and all later point releases. Although earlier gcc
@@ -161,9 +228,9 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
threaded and non-threaded code), see Chapter 17.
</p><p>Two excellent pages to read when working with the Standard C++
containers and threads are
- <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html">SGI's
+ <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI's
http://www.sgi.com/tech/stl/thread_safety.html</a> and
- <a class="link" href="http://www.sgi.com/tech/stl/Allocators.html">SGI's
+ <a class="link" href="http://www.sgi.com/tech/stl/Allocators.html" target="_top">SGI's
http://www.sgi.com/tech/stl/Allocators.html</a>.
</p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
configuration of the lock implementation inside the STL
@@ -202,4 +269,4 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
useful are details
on <a class="link" href="memory.html#std.util.memory.allocator" title="Allocators">allocator</a>
options and capabilities.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td align="left" valign="top">Linking </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html b/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
index 6ca06caa71..4f15bb5842 100644
--- a/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+++ b/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_namespaces.html" title="Namespaces"/><link rel="next" href="using_concurrency.html" title="Concurrency"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr/></div><div class="section" title="Linking"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.linkage"/>Linking</h2></div></div></div><div class="section" title="Almost Nothing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"/>Almost Nothing</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section" title="Linking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section" title="Almost Nothing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
Or as close as it gets: freestanding. This is a minimal
configuration, with only partial support for the standard
library. Assume only the following header files can be used:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="filename">cstdarg</code>
</p></li><li class="listitem"><p>
<code class="filename">cstddef</code>
@@ -22,12 +22,12 @@
<code class="filename">typeinfo</code>
</p></li></ul></div><p>
In addition, throw in
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="filename">cxxabi.h</code>.
</p></li></ul></div><p>
In the
- C++0x <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a> add
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ C++11 <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a> add
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="filename">initializer_list</code>
</p></li><li class="listitem"><p>
<code class="filename">type_traits</code>
@@ -40,7 +40,7 @@
No attempt is made to verify that only the minimal subset
identified above is actually used at compile time. Violations
are diagnosed as undefined symbols at link time.
- </p></div><div class="section" title="Finding Dynamic or Shared Libraries"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"/>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
+ </p></div><div class="section" title="Finding Dynamic or Shared Libraries"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"></a>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
If the only library built is the static library
(<code class="filename">libstdc++.a</code>), or if
specifying static linking, this section is can be skipped. But
@@ -51,10 +51,10 @@
But how?
</p><p>
A quick read of the relevant part of the GCC
- manual, <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b">Compiling
+ manual, <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b" target="_top">Compiling
C++ Programs</a>, specifies linking against a C++
library. More details from the
- GCC <a class="link" href="http://gcc.gnu.org/faq.html#rpath">FAQ</a>,
+ GCC <a class="link" href="http://gcc.gnu.org/faq.html#rpath" target="_top">FAQ</a>,
which states <span class="emphasis"><em>GCC does not, by default, specify a
location so that the dynamic linker can find dynamic libraries at
runtime.</em></span>
@@ -63,7 +63,7 @@ A quick read of the relevant part of the GCC
</p><p>
Methods vary for different platforms and different styles, and
are printed to the screen during installation. To summarize:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
At runtime set <code class="literal">LD_LIBRARY_PATH</code> in your
environment correctly, so that the shared library for
libstdc++ can be found and loaded. Be certain that you
@@ -75,8 +75,8 @@ A quick read of the relevant part of the GCC
<span class="command"><strong>g++</strong></span>, which will in turn pass them on to
the linker. The exact format of the options is dependent on
which linker you use:
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
- GNU ld (default on Linux):
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ GNU ld (default on GNU/Linux):
<code class="literal">-Wl,-rpath,</code><code class="filename">destdir/lib</code>
</p></li><li class="listitem"><p>
IRIX ld:
@@ -92,7 +92,7 @@ A quick read of the relevant part of the GCC
On some platforms the system administrator can configure the
dynamic linker to always look for libraries in
<code class="filename">destdir/lib</code>, for example
- by using the <span class="command"><strong>ldconfig</strong></span> utility on Linux
+ by using the <span class="command"><strong>ldconfig</strong></span> utility on GNU/Linux
or the <span class="command"><strong>crle</strong></span> utility on Solaris. This is a
system-wide change which can make the system unusable so if you
are unsure then use one of the other methods described above.
@@ -106,4 +106,4 @@ A quick read of the relevant part of the GCC
also installed, for use with Libtool. If you use Libtool to
create your executables, these details are taken care of for
you.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td align="left" valign="top">Namespaces </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Namespaces </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_exceptions.html b/libstdc++-v3/doc/html/manual/using_exceptions.html
index d1e2693ab0..c2dd6326d7 100644
--- a/libstdc++-v3/doc/html/manual/using_exceptions.html
+++ b/libstdc++-v3/doc/html/manual/using_exceptions.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; C++&#10; , &#10; exception&#10; , &#10; error&#10; , &#10; exception neutrality&#10; , &#10; exception safety&#10; , &#10; exception propagation&#10; , &#10; -fno-exceptions&#10; "/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_concurrency.html" title="Concurrency"/><link rel="next" href="debug.html" title="Debugging Support"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr/></div><div class="section" title="Exceptions"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.exceptions"/>Exceptions</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; exception&#10; , &#10; error&#10; , &#10; exception neutrality&#10; , &#10; exception safety&#10; , &#10; exception propagation&#10; , &#10; -fno-exceptions&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
The C++ language provides language support for stack unwinding
with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
the <code class="literal">throw</code> keyword.
@@ -12,7 +12,7 @@ exceptional circumstances.
</p><p>
Two general topics of discussion follow:
exception neutrality and exception safety.
-</p><div class="section" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"/>Exception Safety</h3></div></div></div><p>
+</p><div class="section" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
What is exception-safe code?
</p><p>
Will define this as reasonable and well-defined behavior by classes
@@ -27,7 +27,7 @@ exception neutrality and exception safety.
Using the layered approach from Abrahams, can classify library
components as providing set levels of safety. These will be called
exception guarantees, and can be divided into three categories.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
One. Don't throw.
</p><p>
As specified in 23.2.1 general container requirements. Applicable
@@ -51,7 +51,7 @@ exception neutrality and exception safety.
Member functions <code class="function">insert</code> of a single
element, <code class="function">push_back</code>, <code class="function">push_front</code>,
and <code class="function">rehash</code>.
- </p></li></ul></div></div><div class="section" title="Exception Neutrality"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"/>Exception Neutrality</h3></div></div></div><p>
+ </p></li></ul></div></div><div class="section" title="Exception Neutrality"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p>
Simply put, once thrown an exception object should continue in
flight unless handled explicitly. In practice, this means
propagating exceptions should not be swallowed in
@@ -75,7 +75,7 @@ exception neutrality and exception safety.
Unfortunately, this tends to be more of a guideline than a strict
rule as applied to the standard library. As such, the following is
a list of known problem areas where exceptions are not propagated.
- </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Input/Output
</p><p>
The destructor <code class="function">ios_base::Init::~Init()</code>
@@ -101,7 +101,7 @@ exception neutrality and exception safety.
The constructors of <code class="classname">thread</code> that take a
callable function argument swallow all exceptions resulting from
executing the function argument.
- </p></li></ul></div></div><div class="section" title="Doing without"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"/>Doing without</h3></div></div></div><p>
+ </p></li></ul></div></div><div class="section" title="Doing without"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
C++ is a language that strives to be as efficient as is possible
in delivering features. As such, considerable care is used by both
language implementer and designers to make sure unused features
@@ -113,7 +113,7 @@ exception neutrality and exception safety.
support <code class="literal">try</code> and <code class="literal">catch</code> blocks
and thrown objects. (Language support
for <code class="literal">-fno-exceptions</code> is documented in the GNU
- GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</a>.)
+ GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options" target="_top">manual</a>.)
</p><p>Before detailing the library support
for <code class="literal">-fno-exceptions</code>, first a passing note on
the things lost when this flag is used: it will break exceptions
@@ -220,7 +220,7 @@ exception neutrality and exception safety.
substitution of the C language keyword
<code class="literal">const</code> with the uglified
doppelganger <code class="literal">__const</code>.
-</p></div><div class="section" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"/>Compatibility</h3></div></div></div><div class="section" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"/>With <code class="literal">C</code></h4></div></div></div><p>
+</p></div><div class="section" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="section" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
C language code that is expecting to interoperate with C++ should be
compiled with <code class="literal">-fexceptions</code>. This will make
debugging a C language function called as part of C++-induced stack
@@ -235,7 +235,7 @@ is called.
getting these details right. For GNU systems, all appropriate parts
of the GNU C library are already compiled
with <code class="literal">-fexceptions</code>.
-</p></div><div class="section" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"/>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
+</p></div><div class="section" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
GNU systems re-use some of the exception handling mechanisms to
track control flow for <code class="literal">POSIX</code> thread cancellation.
</p><p>
@@ -266,42 +266,49 @@ is called.
}
catch(...)
{ this-&gt;_M_setstate(ios_base::badbit); }
-</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"/>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id470759"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp13615600"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
</em>. </span><span class="pagenums">
2.9.5 Thread Cancellation
. </span><span class="copyright">Copyright © 2008
The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
- . </span></p></div><div class="biblioentry"><a id="id470792"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></p></div><div class="biblioentry" title="Error and Exception Handling"><a id="idp13619296"></a><p><span class="title"><em>
+ <a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
Error and Exception Handling
+ </a>
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
Boost
- . </span></span></p></div><div class="biblioentry"><a id="id470825"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="Exception-Safety in Generic Components"><a id="idp13622992"></a><p><span class="title"><em>
+ <a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
Exception-Safety in Generic Components
+ </a>
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
Boost
- . </span></span></p></div><div class="biblioentry"><a id="id470858"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="Standard Library Exception Policy"><a id="idp13626704"></a><p><span class="title"><em>
+ <a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
Standard Library Exception Policy
+ </a>
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
WG21 N1077
- . </span></span></p></div><div class="biblioentry"><a id="id470891"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="ia64 c++ abi exception handling"><a id="idp13630416"></a><p><span class="title"><em>
+ <a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
ia64 c++ abi exception handling
+ </a>
</em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
GNU
- . </span></span></p></div><div class="biblioentry"><a id="id470924"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span></span></p></div><div class="biblioentry" title="Appendix E: Standard-Library Exception Safety"><a id="idp13634112"></a><p><span class="title"><em>
+ <a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
Appendix E: Standard-Library Exception Safety
- </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="id470950"/><p><span class="citetitle"><em class="citetitle">
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13636928"></a><p><span class="citetitle"><em class="citetitle">
Exceptional C++
</em>. </span><span class="pagenums">
Exception-Safety Issues and Techniques
- . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="id470970"/><p><span class="biblioid">
- . </span><span class="citetitle"><em class="citetitle">
+ . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry" title="GCC Bug 25191: exception_defines.h #defines try/catch"><a id="idp13639312"></a><p><span class="title"><em>
+ <a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
GCC Bug 25191: exception_defines.h #defines try/catch
- </em>. </span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td align="left" valign="top">Concurrency </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
+ </a>
+ </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_headers.html b/libstdc++-v3/doc/html/manual/using_headers.html
index fde253e361..ec181105be 100644
--- a/libstdc++-v3/doc/html/manual/using_headers.html
+++ b/libstdc++-v3/doc/html/manual/using_headers.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using.html" title="Chapter 3. Using"/><link rel="next" href="using_macros.html" title="Macros"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr/></div><div class="section" title="Headers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.headers"/>Headers</h2></div></div></div><div class="section" title="Header Files"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"/>Header Files</h3></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section" title="Headers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section" title="Header Files"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
The C++ standard specifies the entire set of header files that
must be available to all hosted implementations. Actually, the
word "files" is a misnomer, since the contents of the
@@ -16,46 +16,45 @@
Headers), and all others (TR1, C++ ABI, and Extensions).
</p><p>
Two dialects of standard headers are supported, corresponding to
- the 1998 standard as updated for 2003, and the draft of the
- upcoming 200x standard.
+ the 1998 standard as updated for 2003, and the current 2011 standard.
</p><p>
C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
- </p><div class="table"><a id="id466139"/><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="filename">bitset</code></td><td style="text-align: left"><code class="filename">complex</code></td><td style="text-align: left"><code class="filename">deque</code></td><td style="text-align: left"><code class="filename">exception</code></td></tr><tr><td style="text-align: left"><code class="filename">fstream</code></td><td style="text-align: left"><code class="filename">functional</code></td><td style="text-align: left"><code class="filename">iomanip</code></td><td style="text-align: left"><code class="filename">ios</code></td><td style="text-align: left"><code class="filename">iosfwd</code></td></tr><tr><td style="text-align: left"><code class="filename">iostream</code></td><td style="text-align: left"><code class="filename">istream</code></td><td style="text-align: left"><code class="filename">iterator</code></td><td style="text-align: left"><code class="filename">limits</code></td><td style="text-align: left"><code class="filename">list</code></td></tr><tr><td style="text-align: left"><code class="filename">locale</code></td><td style="text-align: left"><code class="filename">map</code></td><td style="text-align: left"><code class="filename">memory</code></td><td style="text-align: left"><code class="filename">new</code></td><td style="text-align: left"><code class="filename">numeric</code></td></tr><tr><td style="text-align: left"><code class="filename">ostream</code></td><td style="text-align: left"><code class="filename">queue</code></td><td style="text-align: left"><code class="filename">set</code></td><td style="text-align: left"><code class="filename">sstream</code></td><td style="text-align: left"><code class="filename">stack</code></td></tr><tr><td style="text-align: left"><code class="filename">stdexcept</code></td><td style="text-align: left"><code class="filename">streambuf</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="filename">utility</code></td><td style="text-align: left"><code class="filename">typeinfo</code></td></tr><tr><td style="text-align: left"><code class="filename">valarray</code></td><td style="text-align: left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"/><p/><div class="table"><a id="id466443"/><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">cassert</code></td><td style="text-align: left"><code class="filename">cerrno</code></td><td style="text-align: left"><code class="filename">cctype</code></td><td style="text-align: left"><code class="filename">cfloat</code></td><td style="text-align: left"><code class="filename">ciso646</code></td></tr><tr><td style="text-align: left"><code class="filename">climits</code></td><td style="text-align: left"><code class="filename">clocale</code></td><td style="text-align: left"><code class="filename">cmath</code></td><td style="text-align: left"><code class="filename">csetjmp</code></td><td style="text-align: left"><code class="filename">csignal</code></td></tr><tr><td style="text-align: left"><code class="filename">cstdarg</code></td><td style="text-align: left"><code class="filename">cstddef</code></td><td style="text-align: left"><code class="filename">cstdio</code></td><td style="text-align: left"><code class="filename">cstdlib</code></td><td style="text-align: left"><code class="filename">cstring</code></td></tr><tr><td style="text-align: left"><code class="filename">ctime</code></td><td style="text-align: left"><code class="filename">cwchar</code></td><td style="text-align: left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"/><p>
-C++0x include files. These are only available in C++0x compilation
-mode, i.e. <code class="literal">-std=c++0x</code> or <code class="literal">-std=gnu++0x</code>.
-</p><p/><div class="table"><a id="id466649"/><p class="title"><strong>Table 3.4. C++ 200x Library Headers</strong></p><div class="table-contents"><table summary="C++ 200x Library Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">algorithm</code></td><td style="text-align: left"><code class="filename">array</code></td><td style="text-align: left"><code class="filename">bitset</code></td><td style="text-align: left"><code class="filename">chrono</code></td><td style="text-align: left"><code class="filename">complex</code></td></tr><tr><td style="text-align: left"><code class="filename">condition_variable</code></td><td style="text-align: left"><code class="filename">deque</code></td><td style="text-align: left"><code class="filename">exception</code></td><td style="text-align: left"><code class="filename">forward_list</code></td><td style="text-align: left"><code class="filename">fstream</code></td></tr><tr><td style="text-align: left"><code class="filename">functional</code></td><td style="text-align: left"><code class="filename">future</code></td><td style="text-align: left"><code class="filename">initalizer_list</code></td><td style="text-align: left"><code class="filename">iomanip</code></td><td style="text-align: left"><code class="filename">ios</code></td></tr><tr><td style="text-align: left"><code class="filename">iosfwd</code></td><td style="text-align: left"><code class="filename">iostream</code></td><td style="text-align: left"><code class="filename">istream</code></td><td style="text-align: left"><code class="filename">iterator</code></td><td style="text-align: left"><code class="filename">limits</code></td></tr><tr><td style="text-align: left"><code class="filename">list</code></td><td style="text-align: left"><code class="filename">locale</code></td><td style="text-align: left"><code class="filename">map</code></td><td style="text-align: left"><code class="filename">memory</code></td><td style="text-align: left"><code class="filename">mutex</code></td></tr><tr><td style="text-align: left"><code class="filename">new</code></td><td style="text-align: left"><code class="filename">numeric</code></td><td style="text-align: left"><code class="filename">ostream</code></td><td style="text-align: left"><code class="filename">queue</code></td><td style="text-align: left"><code class="filename">random</code></td></tr><tr><td style="text-align: left"><code class="filename">ratio</code></td><td style="text-align: left"><code class="filename">regex</code></td><td style="text-align: left"><code class="filename">set</code></td><td style="text-align: left"><code class="filename">sstream</code></td><td style="text-align: left"><code class="filename">stack</code></td></tr><tr><td style="text-align: left"><code class="filename">stdexcept</code></td><td style="text-align: left"><code class="filename">streambuf</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="filename">system_error</code></td><td style="text-align: left"><code class="filename">thread</code></td></tr><tr><td style="text-align: left"><code class="filename">tuple</code></td><td style="text-align: left"><code class="filename">type_traits</code></td><td style="text-align: left"><code class="filename">typeinfo</code></td><td style="text-align: left"><code class="filename">unordered_map</code></td><td style="text-align: left"><code class="filename">unordered_set</code></td></tr><tr><td style="text-align: left"><code class="filename">utility</code></td><td style="text-align: left"><code class="filename">valarray</code></td><td style="text-align: left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"/><p/><div class="table"><a id="id467078"/><p class="title"><strong>Table 3.5. C++ 200x Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 200x Library Headers for C Library Facilities" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">cassert</code></td><td style="text-align: left"><code class="filename">ccomplex</code></td><td style="text-align: left"><code class="filename">cctype</code></td><td style="text-align: left"><code class="filename">cerrno</code></td><td style="text-align: left"><code class="filename">cfenv</code></td></tr><tr><td style="text-align: left"><code class="filename">cfloat</code></td><td style="text-align: left"><code class="filename">cinttypes</code></td><td style="text-align: left"><code class="filename">ciso646</code></td><td style="text-align: left"><code class="filename">climits</code></td><td style="text-align: left"><code class="filename">clocale</code></td></tr><tr><td style="text-align: left"><code class="filename">cmath</code></td><td style="text-align: left"><code class="filename">csetjmp</code></td><td style="text-align: left"><code class="filename">csignal</code></td><td style="text-align: left"><code class="filename">cstdarg</code></td><td style="text-align: left"><code class="filename">cstdbool</code></td></tr><tr><td style="text-align: left"><code class="filename">cstddef</code></td><td style="text-align: left"><code class="filename">cstdint</code></td><td style="text-align: left"><code class="filename">cstdlib</code></td><td style="text-align: left"><code class="filename">cstdio</code></td><td style="text-align: left"><code class="filename">cstring</code></td></tr><tr><td style="text-align: left"><code class="filename">ctgmath</code></td><td style="text-align: left"><code class="filename">ctime</code></td><td style="text-align: left"><code class="filename">cuchar</code></td><td style="text-align: left"><code class="filename">cwchar</code></td><td style="text-align: left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break"/><p>
+ </p><div class="table"><a id="idp13045856"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13082336"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
+C++11 include files. These are only available in C++11 compilation
+mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
+</p><p></p><div class="table"><a id="idp13107072"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13158512"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
In addition, TR1 includes as:
-</p><div class="table"><a id="id467327"/><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">tr1/array</code></td><td style="text-align: left"><code class="filename">tr1/complex</code></td><td style="text-align: left"><code class="filename">tr1/memory</code></td><td style="text-align: left"><code class="filename">tr1/functional</code></td><td style="text-align: left"><code class="filename">tr1/random</code></td></tr><tr><td style="text-align: left"><code class="filename">tr1/regex</code></td><td style="text-align: left"><code class="filename">tr1/tuple</code></td><td style="text-align: left"><code class="filename">tr1/type_traits</code></td><td style="text-align: left"><code class="filename">tr1/unordered_map</code></td><td style="text-align: left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td style="text-align: left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"/><p/><div class="table"><a id="id467468"/><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">tr1/ccomplex</code></td><td style="text-align: left"><code class="filename">tr1/cfenv</code></td><td style="text-align: left"><code class="filename">tr1/cfloat</code></td><td style="text-align: left"><code class="filename">tr1/cmath</code></td><td style="text-align: left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td style="text-align: left"><code class="filename">tr1/climits</code></td><td style="text-align: left"><code class="filename">tr1/cstdarg</code></td><td style="text-align: left"><code class="filename">tr1/cstdbool</code></td><td style="text-align: left"><code class="filename">tr1/cstdint</code></td><td style="text-align: left"><code class="filename">tr1/cstdio</code></td></tr><tr><td style="text-align: left"><code class="filename">tr1/cstdlib</code></td><td style="text-align: left"><code class="filename">tr1/ctgmath</code></td><td style="text-align: left"><code class="filename">tr1/ctime</code></td><td style="text-align: left"><code class="filename">tr1/cwchar</code></td><td style="text-align: left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break"/><p>Decimal floating-point arithmetic is available if the C++
+</p><div class="table"><a id="idp13188400"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13205328"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
compiler supports scalar decimal floating-point types defined via
<code class="code">__attribute__((mode(SD|DD|LD)))</code>.
-</p><div class="table"><a id="id467644"/><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col style="text-align: left" class="c1"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break"/><p>
+</p><div class="table"><a id="idp13226400"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
Also included are files for the C++ ABI interface:
-</p><div class="table"><a id="id467690"/><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">cxxabi.h</code></td><td style="text-align: left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break"/><p>
+</p><div class="table"><a id="idp13231920"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
And a large variety of extensions.
-</p><div class="table"><a id="id467743"/><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">ext/algorithm</code></td><td style="text-align: left"><code class="filename">ext/atomicity.h</code></td><td style="text-align: left"><code class="filename">ext/array_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/bitmap_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/cast.h</code></td></tr><tr><td style="text-align: left"><code class="filename">ext/codecvt_specializations.h</code></td><td style="text-align: left"><code class="filename">ext/concurrence.h</code></td><td style="text-align: left"><code class="filename">ext/debug_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/enc_filebuf.h</code></td><td style="text-align: left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td style="text-align: left"><code class="filename">ext/functional</code></td><td style="text-align: left"><code class="filename">ext/iterator</code></td><td style="text-align: left"><code class="filename">ext/malloc_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/memory</code></td><td style="text-align: left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td style="text-align: left"><code class="filename">ext/new_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/numeric</code></td><td style="text-align: left"><code class="filename">ext/numeric_traits.h</code></td><td style="text-align: left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td style="text-align: left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td style="text-align: left"><code class="filename">ext/pod_char_traits.h</code></td><td style="text-align: left"><code class="filename">ext/pool_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/rb_tree</code></td><td style="text-align: left"><code class="filename">ext/rope</code></td><td style="text-align: left"><code class="filename">ext/slist</code></td></tr><tr><td style="text-align: left"><code class="filename">ext/stdio_filebuf.h</code></td><td style="text-align: left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td style="text-align: left"><code class="filename">ext/throw_allocator.h</code></td><td style="text-align: left"><code class="filename">ext/typelist.h</code></td><td style="text-align: left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td style="text-align: left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"/><p/><div class="table"><a id="id468041"/><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">debug/bitset</code></td><td style="text-align: left"><code class="filename">debug/deque</code></td><td style="text-align: left"><code class="filename">debug/list</code></td><td style="text-align: left"><code class="filename">debug/map</code></td><td style="text-align: left"><code class="filename">debug/set</code></td></tr><tr><td style="text-align: left"><code class="filename">debug/string</code></td><td style="text-align: left"><code class="filename">debug/unordered_map</code></td><td style="text-align: left"><code class="filename">debug/unordered_set</code></td><td style="text-align: left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"/><p/><div class="table"><a id="id468164"/><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">profile/bitset</code></td><td style="text-align: left"><code class="filename">profile/deque</code></td><td style="text-align: left"><code class="filename">profile/list</code></td><td style="text-align: left"><code class="filename">profile/map</code></td></tr><tr><td style="text-align: left"><code class="filename">profile/set</code></td><td style="text-align: left"><code class="filename">profile/unordered_map</code></td><td style="text-align: left"><code class="filename">profile/unordered_set</code></td><td style="text-align: left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break"/><p/><div class="table"><a id="id468275"/><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><tbody><tr><td style="text-align: left"><code class="filename">parallel/algorithm</code></td><td style="text-align: left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break"/></div><div class="section" title="Mixing Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"/>Mixing Headers</h3></div></div></div><p> A few simple rules.
+</p><div class="table"><a id="idp13238320"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13274048"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13288816"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13302192"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section" title="Mixing Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
</p><p>First, mixing different dialects of the standard headers is not
possible. It's an all-or-nothing affair. Thus, code like
</p><pre class="programlisting">
#include &lt;array&gt;
#include &lt;functional&gt;
-</pre><p>Implies C++0x mode. To use the entities in &lt;array&gt;, the C++0x
-compilation mode must be used, which implies the C++0x functionality
+</pre><p>Implies C++11 mode. To use the entities in &lt;array&gt;, the C++11
+compilation mode must be used, which implies the C++11 functionality
(and deprecations) in &lt;functional&gt; will be present.
</p><p>Second, the other headers can be included with either dialect of
-the standard headers, although features and types specific to C++0x
-are still only enabled when in C++0x compilation mode. So, to use
+the standard headers, although features and types specific to C++11
+are still only enabled when in C++11 compilation mode. So, to use
rvalue references with <code class="code">__gnu_cxx::vstring</code>, or to use the
debug-mode versions of <code class="code">std::unordered_map</code>, one must use
-the <code class="code">std=gnu++0x</code> compiler flag. (Or <code class="code">std=c++0x</code>, of course.)
-</p><p>A special case of the second rule is the mixing of TR1 and C++0x
+the <code class="code">std=gnu++11</code> compiler flag. (Or <code class="code">std=c++11</code>, of course.)
+</p><p>A special case of the second rule is the mixing of TR1 and C++11
facilities. It is possible (although not especially prudent) to
-include both the TR1 version and the C++0x version of header in the
+include both the TR1 version and the C++11 version of header in the
same translation unit:
</p><pre class="programlisting">
#include &lt;tr1/type_traits&gt;
#include &lt;type_traits&gt;
-</pre><p> Several parts of C++0x diverge quite substantially from TR1 predecessors.
-</p></div><div class="section" title="The C Headers and namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.cheaders"/>The C Headers and <code class="code">namespace std</code></h3></div></div></div><p>
+</pre><p> Several parts of C++11 diverge quite substantially from TR1 predecessors.
+</p></div><div class="section" title="The C Headers and namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.cheaders"></a>The C Headers and <code class="code">namespace std</code></h3></div></div></div><p>
The standard specifies that if one includes the C-style header
(&lt;math.h&gt; in this case), the symbols will be available
in the global namespace and perhaps in
@@ -74,10 +73,10 @@ floating-point types. This means that <code class="code">std::sin</code> can be
used uniformly, instead of a combination
of <code class="code">std::sinf</code>, <code class="code">std::sin</code>,
and <code class="code">std::sinl</code>.
-</p></div><div class="section" title="Precompiled Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.pre"/>Precompiled Headers</h3></div></div></div><p>There are three base header files that are provided. They can be
+</p></div><div class="section" title="Precompiled Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.pre"></a>Precompiled Headers</h3></div></div></div><p>There are three base header files that are provided. They can be
used to precompile the standard headers and extensions into binary
files that may the be used to speed compiles that use these headers.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>stdc++.h</p><p>Includes all standard headers. Actual content varies depending on
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>stdc++.h</p><p>Includes all standard headers. Actual content varies depending on
language dialect.
</p></li><li class="listitem"><p>stdtr1c++.h</p><p>Includes all of &lt;stdc++.h&gt;, and adds all the TR1 headers.
</p></li><li class="listitem"><p>extc++.h</p><p>Includes all of &lt;stdtr1c++.h&gt;, and adds all the Extension headers.
@@ -100,5 +99,5 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
! ./stdc++.h.gch
. /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/iostream
. /mnt/share/bld/H-x86-gcc.20071201include/c++/4.3.0/string
-</pre><p>The exclamation point to the left of the <code class="code">stdc++.h.gch</code> listing means that the generated PCH file was used, and thus the </p><p/><p> Detailed information about creating precompiled header files can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html">documentation</a>.
-</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 3. Using </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Macros</td></tr></table></div></body></html>
+</pre><p>The exclamation point to the left of the <code class="code">stdc++.h.gch</code> listing means that the generated PCH file was used, and thus the </p><p></p><p> Detailed information about creating precompiled header files can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html" target="_top">documentation</a>.
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Macros</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html
index 3e124e9098..e542dbea8d 100644
--- a/libstdc++-v3/doc/html/manual/using_macros.html
+++ b/libstdc++-v3/doc/html/manual/using_macros.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_headers.html" title="Headers"/><link rel="next" href="using_namespaces.html" title="Namespaces"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr/></div><div class="section" title="Macros"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.macros"/>Macros</h2></div></div></div><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section" title="Macros"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
All library macros begin with <code class="code">_GLIBCXX_</code>.
</p><p>
Furthermore, all pre-processor macros, switches, and
@@ -45,7 +45,7 @@
removes older ARM-style iostreams code, and other anachronisms
from the API. This macro is dependent on the version of the
standard being tracked, and as a result may give different results for
- <code class="code">-std=c++98</code> and <code class="code">-std=c++0x</code>. This may
+ <code class="code">-std=c++98</code> and <code class="code">-std=c++11</code>. This may
be useful in updating old C++ code which no longer meet the
requirements of the language, or for checking current code
against new language standards.
@@ -74,4 +74,4 @@
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
mode</a>.
- </p></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td align="left" valign="top">Headers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
+ </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_namespaces.html b/libstdc++-v3/doc/html/manual/using_namespaces.html
index ffd6c6f637..e85b99c145 100644
--- a/libstdc++-v3/doc/html/manual/using_namespaces.html
+++ b/libstdc++-v3/doc/html/manual/using_namespaces.html
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_macros.html" title="Macros"/><link rel="next" href="using_dynamic_or_shared.html" title="Linking"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr/></div><div class="section" title="Namespaces"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.namespaces"/>Namespaces</h2></div></div></div><div class="section" title="Available Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"/>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section" title="Namespaces"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section" title="Available Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
within namespace std." This includes namespaces nested
within <code class="code">namespace std</code>, such as <code class="code">namespace
std::tr1</code>.
@@ -11,12 +11,12 @@ but necessary for interoperability.
</p></li><li class="listitem"><p>__gnu_</p><p>Indicating one of several GNU extensions. Choices
include <code class="code">__gnu_cxx</code>, <code class="code">__gnu_debug</code>, <code class="code">__gnu_parallel</code>,
and <code class="code">__gnu_pbds</code>.
-</p></li></ul></div><p> A complete list of implementation namespaces (including namespace contents) is available in the generated source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">documentation</a>.
-</p></div><div class="section" title="namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"/>namespace std</h3></div></div></div><p>
+</p></li></ul></div><p> A complete list of implementation namespaces (including namespace contents) is available in the generated source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html" target="_top">documentation</a>.
+</p></div><div class="section" title="namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"></a>namespace std</h3></div></div></div><p>
One standard requirement is that the library components are defined
in <code class="code">namespace std::</code>. Thus, in order to use these types or
functions, one must do one of two things:
-</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
(either <code class="code">using namespace std;</code> or i.e. <code class="code">using
std::string;</code>) This approach works well for individual source files, but
should not be used in a global context, like header files.
@@ -25,7 +25,7 @@ qualified name</em></span> for each library symbol
(i.e. <code class="code">std::string</code>, <code class="code">std::cout</code>) Always can be
used, and usually enhanced, by strategic use of typedefs. (In the
cases where the qualified verbiage becomes unwieldy.)
- </p></li></ul></div></div><div class="section" title="Using Namespace Composition"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"/>Using Namespace Composition</h3></div></div></div><p>
+ </p></li></ul></div></div><div class="section" title="Using Namespace Composition"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"></a>Using Namespace Composition</h3></div></div></div><p>
Best practice in programming suggests sequestering new data or
functionality in a sanely-named, unique namespace whenever
possible. This is considered an advantage over dumping everything in
@@ -58,4 +58,4 @@ namespace gtk
std::string;</code> (depending on whether the system has
libstdc++ in <code class="code">std::</code> or not). (ideas from
Llewelly and Karl Nelson)
-</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td align="left" valign="top">Macros </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Linking</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Macros </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Linking</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/utilities.html b/libstdc++-v3/doc/html/manual/utilities.html
index e41e994d22..ab4b625933 100644
--- a/libstdc++-v3/doc/html/manual/utilities.html
+++ b/libstdc++-v3/doc/html/manual/utilities.html
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents"/><link rel="prev" href="bk01pt02ch05s02.html" title="Concept Checking"/><link rel="next" href="pairs.html" title="Pairs"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
Utilities
-</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II. 
Standard Contents
- </th><td align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 6.  Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"/>Chapter 6. 
+ </th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 6.  Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
Utilities
- <a id="id472594" class="indexterm"/>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section" title="Functors"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.functors"/>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
+ <a id="idp13835728" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section" title="Functors"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
get slightly the wrong idea. In the interest of not reinventing
the wheel, we will refer you to the introduction to the functor
- concept written by SGI as chapter of their STL, in
- <a class="link" href="http://www.sgi.com/tech/stl/functors.html">their
+ concept written by SGI as part of their STL, in
+ <a class="link" href="http://www.sgi.com/tech/stl/functors.html" target="_top">their
http://www.sgi.com/tech/stl/functors.html</a>.
- </p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td align="left" valign="top">Concept Checking </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Pairs</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/spine.html b/libstdc++-v3/doc/html/spine.html
deleted file mode 100644
index e3522b7daa..0000000000
--- a/libstdc++-v3/doc/html/spine.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="next" href="manual/spine.html" title="The GNU C++ Library Manual"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td align="left"> </td><th width="60%" align="center"> </th><td align="right"> <a accesskey="n" href="manual/spine.html">Next</a></td></tr></table><hr/></div><div class="set" title="The GNU C++ Library" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"/>The GNU C++ Library</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"/> <span class="surname"/></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
- <a class="link" href="http://www.fsf.org">FSF</a>
- </p></div></div><hr/></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="book"><a href="manual/spine.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
- Introduction
-
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/bk01pt02.html">II.
- Standard Contents
- </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/support.html">4.
- Support
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="manual/support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="manual/support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="manual/support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="manual/termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="manual/termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="manual/termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/diagnostics.html">5.
- Diagnostics
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
- Utilities
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
- Strings
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8.
- Localization
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
- Containers
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dt><span class="section"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10.
- Iterators
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="manual/iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="manual/iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/algorithms.html">11.
- Algorithms
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="manual/algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/numerics.html">12.
- Numerics
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="manual/numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="manual/numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="manual/numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/io.html">13.
- Input and Output
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="manual/streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="manual/streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="manual/stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="manual/stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="manual/fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="manual/fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="manual/fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="manual/io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="manual/io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/atomics.html">14.
- Atomics
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/concurrency.html">15.
- Concurrency
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/extensions.html">III.
- Extensions
-
-</a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt03pr01.html"/></span></dt><dt><span class="chapter"><a href="manual/ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="manual/debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="manual/parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="manual/profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_allocators.html">20. Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="section"><a href="manual/ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/ext_containers.html">21. Containers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_utilities.html">22. Utilities</a></span></dt><dt><span class="chapter"><a href="manual/ext_algorithms.html">23. Algorithms</a></span></dt><dt><span class="chapter"><a href="manual/ext_numerics.html">24. Numerics</a></span></dt><dt><span class="chapter"><a href="manual/ext_iterators.html">25. Iterators</a></span></dt><dt><span class="chapter"><a href="manual/ext_io.html">26. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_demangling.html">27. Demangling</a></span></dt><dt><span class="chapter"><a href="manual/ext_concurrency.html">28. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="manual/bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bk01pt03ch28s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/bk01pt04.html">IV.
- Appendices
-</a></span></dt><dd><dl><dt><span class="appendix"><a href="manual/appendix_contributing.html">A.
- Contributing
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="manual/source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="manual/source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="manual/source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="manual/source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="manual/source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="manual/appendix_porting.html">B.
- Porting and Maintenance
-
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.docbook">Docbook</a></span></dt></dl></dd><dt><span class="section"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization">Organization</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="section"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="section"><a href="manual/test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="manual/appendix_free.html">C.
- Free Software Needs Free Documentation
-
-</a></span></dt><dt><span class="appendix"><a href="manual/appendix_gpl.html">D.
- <acronym class="acronym">GNU</acronym> General Public License version 3
- </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"/></span></dt><dd><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"/></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"> </td><td align="center"> </td><td align="right"> <a accesskey="n" href="manual/spine.html">Next</a></td></tr><tr><td align="left" valign="top"> </td><td align="center"> </td><td align="right" valign="top"> The GNU C++ Library Manual</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/xml/api.xml b/libstdc++-v3/doc/xml/api.xml
index dcd88d7e36..7c02dffc84 100644
--- a/libstdc++-v3/doc/xml/api.xml
+++ b/libstdc++-v3/doc/xml/api.xml
@@ -20,12 +20,12 @@
</copyright>
<legalnotice>
<para>
- <link linkend="manual.intro.status.license">License
+ <link linkend="manual.intro.status.license">License
</link>
</para>
</legalnotice>
</info>
-
+
<para>
The GNU C++ library sources have been specially formatted so that
with the proper invocation of another tool (Doxygen), a set of
@@ -79,6 +79,12 @@
</listitem>
<listitem>
<para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.6/index.html">for the 4.6 release
+ </link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">"the latest collection"
</link>
(For the main development tree; see the date on the first page.)
diff --git a/libstdc++-v3/doc/xml/class.txml b/libstdc++-v3/doc/xml/class.txml
index 26c9acf97f..c452192a9f 100644
--- a/libstdc++-v3/doc/xml/class.txml
+++ b/libstdc++-v3/doc/xml/class.txml
@@ -108,48 +108,57 @@
</para>
</section>
-<bibliography xml:id="allocator.biblio" xreflabel="allocator.biblio"><info><title>Bibliography</title></info>
+<bibliography xml:id="allocator.biblio" xreflabel="allocator.biblio">
+<info>
+ <title>
+ Bibliography
+ </title>
+</info>
<!--
- <biblioentry>
- <abbrev>
- </abbrev>
-
- <biblioid class="uri">
- <ulink url="http://about:blank">
- </ulink>
- </biblioid>
- <citetitle>
- The Title
- </citetitle>
-
- <editor>
- <firstname></firstname>
- <surname></surname>
- </editor>
-
- <author>
- <surname></surname>
- <firstname></firstname>
- </author>
-
- <copyright>
- <year></year>
- <holder></holder>
- </copyright>
- <pagenums></pagenums>
-
- <publisher>
- <publishername>
- </publishername>
- </publisher>
-
- </biblioentry>
+ <biblioentry xml:id="biblio.xxx">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://xxx.html">
+ XXX
+ </link>
+ </title>
+ <date>
+
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ E.
+ </firstname>
+ <surname>
+ Gamma
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Helm
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+
+ </publishername>
+ </publisher>
+ </biblioentry>
-->
- <biblioentry>
- </biblioentry>
</bibliography>
diff --git a/libstdc++-v3/doc/xml/faq.xml b/libstdc++-v3/doc/xml/faq.xml
index 05e805e90a..86142ec9c4 100644
--- a/libstdc++-v3/doc/xml/faq.xml
+++ b/libstdc++-v3/doc/xml/faq.xml
@@ -87,7 +87,7 @@
<answer xml:id="a-who">
<para>
The libstdc++ project is contributed to by several developers
- all over the world, in the same way as GCC or Linux.
+ all over the world, in the same way as GCC or the Linux kernel.
Benjamin Kosnik, Gabriel Dos Reis, Phil Edwards, Ulrich Drepper,
Loren James Rittle, and Paolo Carlini are the lead maintainers of
the SVN archive.
@@ -261,7 +261,7 @@
<answer xml:id="a-how_to_install">
<para>
Often libstdc++ comes pre-installed as an integral part of many
- existing Linux and Unix systems, as well as many embedded
+ existing GNU/Linux and Unix systems, as well as many embedded
development tools. It may be necessary to install extra
development packages to get the headers, or the documentation, or
the source: please consult your vendor for details.
@@ -694,7 +694,7 @@
Long answer: See the implementation status pages for
<link linkend="status.iso.1998">C++98</link>,
<link linkend="status.iso.tr1">TR1</link>, and
- <link linkend="status.iso.200x">C++0x</link>.
+ <link linkend="status.iso.2011">C++11</link>.
</para>
</answer>
</qandaentry>
@@ -713,14 +713,15 @@
For those people who are not part of the ISO Library Group
(i.e., nearly all of us needing to read this page in the first
place), a public list of the library defects is occasionally
- published <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">here</link>.
+ published on <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">the WG21
+ website</link>.
Some of these issues have resulted in code changes in libstdc++.
</para>
<para>
If you think you've discovered a new bug that is not listed,
- please post a message describing your problem
- to <email>libstdc++@gcc.gnu.org</email> or the Usenet group
- comp.lang.c++.moderated.
+ please post a message describing your problem to the author of
+ the library issues list or the Usenet group comp.lang.c++.moderated.
</para>
</answer>
</qandaentry>
diff --git a/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png b/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png
new file mode 100644
index 0000000000..529c3ae41b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdf b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdf
new file mode 100644
index 0000000000..f5f61f8747
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.png b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.png
new file mode 100644
index 0000000000..601d60fda8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg
new file mode 100644
index 0000000000..91c774b69a
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg
@@ -0,0 +1,442 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -317.96178260869567 L 337.3863636363636 -327.96178260869567 L 349.8863636363636 -327.96178260869567 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -340.7823188405797 L 381.02272727272725 -350.7823188405797 L 393.52272727272725 -350.7823188405797 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -362.15515942028986 L 424.6590909090909 -372.15515942028986 L 437.1590909090909 -372.15515942028986 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -381.66884057971015 L 468.2954545454545 -391.66884057971015 L 480.7954545454545 -391.66884057971015 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -401.2800869565217 L 511.9318181818182 -411.2800869565217 L 524.4318181818182 -411.2800869565217 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -424.9412463768116 L 555.5681818181818 -434.9412463768116 L 568.0681818181818 -434.9412463768116 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -446.8286956521739 L 599.2045454545455 -456.8286956521739 L 611.7045454545455 -456.8286956521739 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -466.6835362318841 L 642.840909090909 -476.6835362318841 L 655.340909090909 -476.6835362318841 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -483.94269565217394 L 686.4772727272727 -493.94269565217394 L 698.9772727272727 -493.94269565217394 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -295.81628289855075 L 337.3863636363636 -305.81628289855075 L 349.8863636363636 -305.81628289855075 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -295.89136347826087 L 381.02272727272725 -305.89136347826087 L 393.52272727272725 -305.89136347826087 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -295.94318782608696 L 424.6590909090909 -305.94318782608696 L 437.1590909090909 -305.94318782608696 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -295.94503710144926 L 468.2954545454545 -305.94503710144926 L 480.7954545454545 -305.94503710144926 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -295.95860695652175 L 511.9318181818182 -305.95860695652175 L 524.4318181818182 -305.95860695652175 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -295.9781997101449 L 555.5681818181818 -305.9781997101449 L 568.0681818181818 -305.9781997101449 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -295.9791402898551 L 599.2045454545455 -305.9791402898551 L 611.7045454545455 -305.9791402898551 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -295.9892124637681 L 642.840909090909 -305.9892124637681 L 655.340909090909 -305.9892124637681 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -295.9891391304348 L 686.4772727272727 -305.9891391304348 L 698.9772727272727 -305.9891391304348 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -296.0042234782609 L 730.1136363636364 -306.0042234782609 L 742.6136363636364 -306.0042234782609 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 336.4935064935065 -300.63330985507247 L 343.6363636363636 -307.77616699792964 L 350.7792207792208 -300.63330985507247 L 343.6363636363636 -293.4904527122153 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 380.12987012987014 -300.6028542028985 L 387.27272727272725 -307.7457113457557 L 394.4155844155844 -300.6028542028985 L 387.27272727272725 -293.4599970600414 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 423.76623376623377 -300.5912611594203 L 430.9090909090909 -307.7341183022774 L 438.05194805194805 -300.5912611594203 L 430.9090909090909 -293.44840401656313 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 467.4025974025974 -300.5779431884058 L 474.5454545454545 -307.7208003312629 L 481.68831168831167 -300.5779431884058 L 474.5454545454545 -293.43508604554864 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.038961038961 -300.5727428985507 L 518.1818181818182 -307.71560004140787 L 525.3246753246754 -300.5727428985507 L 518.1818181818182 -293.4298857556936 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 554.6753246753246 -300.57923768115944 L 561.8181818181818 -307.72209482401655 L 568.961038961039 -300.57923768115944 L 561.8181818181818 -293.4363805383023 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 598.3116883116883 -300.57126985507244 L 605.4545454545455 -307.7141269979296 L 612.5974025974026 -300.57126985507244 L 605.4545454545455 -293.42841271221533 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 641.9480519480519 -300.57128260869564 L 649.090909090909 -307.7141397515528 L 656.2337662337662 -300.57128260869564 L 649.090909090909 -293.42842546583853 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 685.5844155844156 -300.56368144927535 L 692.7272727272727 -307.7065385921325 L 699.8701298701299 -300.56368144927535 L 692.7272727272727 -293.42082430641824 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 729.2207792207791 -300.5616408695652 L 736.3636363636364 -307.70449801242233 L 743.5064935064936 -300.5616408695652 L 736.3636363636364 -293.41878372670806 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -74 L 290 -136 L 419.408 -136 L 419.408 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.38e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.76e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 4.14e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 5.52e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.90e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -322.96178260869567 L 387.27272727272725 -345.7823188405797 L 430.9090909090909 -367.15515942028986 L 474.5454545454545 -386.66884057971015 L 518.1818181818182 -406.2800869565217 L 561.8181818181818 -429.9412463768116 L 605.4545454545455 -451.8286956521739 L 649.090909090909 -471.6835362318841 L 692.7272727272727 -488.94269565217394 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -317.96178260869567 L 337.3863636363636 -327.96178260869567 L 349.8863636363636 -327.96178260869567 L 349.8863636363636 -317.96178260869567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -317.96178260869567 L 337.3863636363636 -327.96178260869567 L 349.8863636363636 -327.96178260869567 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -340.7823188405797 L 381.02272727272725 -350.7823188405797 L 393.52272727272725 -350.7823188405797 L 393.52272727272725 -340.7823188405797 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -340.7823188405797 L 381.02272727272725 -350.7823188405797 L 393.52272727272725 -350.7823188405797 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -362.15515942028986 L 424.6590909090909 -372.15515942028986 L 437.1590909090909 -372.15515942028986 L 437.1590909090909 -362.15515942028986 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -362.15515942028986 L 424.6590909090909 -372.15515942028986 L 437.1590909090909 -372.15515942028986 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -381.66884057971015 L 468.2954545454545 -391.66884057971015 L 480.7954545454545 -391.66884057971015 L 480.7954545454545 -381.66884057971015 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -381.66884057971015 L 468.2954545454545 -391.66884057971015 L 480.7954545454545 -391.66884057971015 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -401.2800869565217 L 511.9318181818182 -411.2800869565217 L 524.4318181818182 -411.2800869565217 L 524.4318181818182 -401.2800869565217 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -401.2800869565217 L 511.9318181818182 -411.2800869565217 L 524.4318181818182 -411.2800869565217 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -424.9412463768116 L 555.5681818181818 -434.9412463768116 L 568.0681818181818 -434.9412463768116 L 568.0681818181818 -424.9412463768116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -424.9412463768116 L 555.5681818181818 -434.9412463768116 L 568.0681818181818 -434.9412463768116 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -446.8286956521739 L 599.2045454545455 -456.8286956521739 L 611.7045454545455 -456.8286956521739 L 611.7045454545455 -446.8286956521739 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -446.8286956521739 L 599.2045454545455 -456.8286956521739 L 611.7045454545455 -456.8286956521739 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -466.6835362318841 L 642.840909090909 -476.6835362318841 L 655.340909090909 -476.6835362318841 L 655.340909090909 -466.6835362318841 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -466.6835362318841 L 642.840909090909 -476.6835362318841 L 655.340909090909 -476.6835362318841 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -483.94269565217394 L 686.4772727272727 -493.94269565217394 L 698.9772727272727 -493.94269565217394 L 698.9772727272727 -483.94269565217394 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -483.94269565217394 L 686.4772727272727 -493.94269565217394 L 698.9772727272727 -493.94269565217394 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -300.81628289855075 L 387.27272727272725 -300.89136347826087 L 430.9090909090909 -300.94318782608696 L 474.5454545454545 -300.94503710144926 L 518.1818181818182 -300.95860695652175 L 561.8181818181818 -300.9781997101449 L 605.4545454545455 -300.9791402898551 L 649.090909090909 -300.9892124637681 L 692.7272727272727 -300.9891391304348 L 736.3636363636364 -301.0042234782609" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -295.81628289855075 L 337.3863636363636 -305.81628289855075 L 349.8863636363636 -305.81628289855075 L 349.8863636363636 -295.81628289855075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.81628289855075 L 337.3863636363636 -305.81628289855075 L 349.8863636363636 -305.81628289855075 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -295.89136347826087 L 381.02272727272725 -305.89136347826087 L 393.52272727272725 -305.89136347826087 L 393.52272727272725 -295.89136347826087 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.89136347826087 L 381.02272727272725 -305.89136347826087 L 393.52272727272725 -305.89136347826087 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -295.94318782608696 L 424.6590909090909 -305.94318782608696 L 437.1590909090909 -305.94318782608696 L 437.1590909090909 -295.94318782608696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.94318782608696 L 424.6590909090909 -305.94318782608696 L 437.1590909090909 -305.94318782608696 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -295.94503710144926 L 468.2954545454545 -305.94503710144926 L 480.7954545454545 -305.94503710144926 L 480.7954545454545 -295.94503710144926 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.94503710144926 L 468.2954545454545 -305.94503710144926 L 480.7954545454545 -305.94503710144926 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -295.95860695652175 L 511.9318181818182 -305.95860695652175 L 524.4318181818182 -305.95860695652175 L 524.4318181818182 -295.95860695652175 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.95860695652175 L 511.9318181818182 -305.95860695652175 L 524.4318181818182 -305.95860695652175 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -295.9781997101449 L 555.5681818181818 -305.9781997101449 L 568.0681818181818 -305.9781997101449 L 568.0681818181818 -295.9781997101449 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.9781997101449 L 555.5681818181818 -305.9781997101449 L 568.0681818181818 -305.9781997101449 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -295.9791402898551 L 599.2045454545455 -305.9791402898551 L 611.7045454545455 -305.9791402898551 L 611.7045454545455 -295.9791402898551 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.9791402898551 L 599.2045454545455 -305.9791402898551 L 611.7045454545455 -305.9791402898551 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -295.9892124637681 L 642.840909090909 -305.9892124637681 L 655.340909090909 -305.9892124637681 L 655.340909090909 -295.9892124637681 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -295.9892124637681 L 642.840909090909 -305.9892124637681 L 655.340909090909 -305.9892124637681 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -295.9891391304348 L 686.4772727272727 -305.9891391304348 L 698.9772727272727 -305.9891391304348 L 698.9772727272727 -295.9891391304348 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.9891391304348 L 686.4772727272727 -305.9891391304348 L 698.9772727272727 -305.9891391304348 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -296.0042234782609 L 730.1136363636364 -306.0042234782609 L 742.6136363636364 -306.0042234782609 L 742.6136363636364 -296.0042234782609 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.0042234782609 L 730.1136363636364 -306.0042234782609 L 742.6136363636364 -306.0042234782609 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -300.63330985507247 L 387.27272727272725 -300.6028542028985 L 430.9090909090909 -300.5912611594203 L 474.5454545454545 -300.5779431884058 L 518.1818181818182 -300.5727428985507 L 561.8181818181818 -300.57923768115944 L 605.4545454545455 -300.57126985507244 L 649.090909090909 -300.57128260869564 L 692.7272727272727 -300.56368144927535 L 736.3636363636364 -300.5616408695652" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 336.4935064935065 -293.4904527122153 L 336.4935064935065 -307.77616699792964 L 350.7792207792208 -307.77616699792964 L 350.7792207792208 -293.4904527122153 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.63330985507247 L 343.6363636363636 -307.77616699792964 L 350.7792207792208 -300.63330985507247 L 343.6363636363636 -293.4904527122153 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 380.12987012987014 -293.4599970600414 L 380.12987012987014 -307.7457113457557 L 394.4155844155844 -307.7457113457557 L 394.4155844155844 -293.4599970600414 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.6028542028985 L 387.27272727272725 -307.7457113457557 L 394.4155844155844 -300.6028542028985 L 387.27272727272725 -293.4599970600414 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 423.76623376623377 -293.44840401656313 L 423.76623376623377 -307.7341183022774 L 438.05194805194805 -307.7341183022774 L 438.05194805194805 -293.44840401656313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.5912611594203 L 430.9090909090909 -307.7341183022774 L 438.05194805194805 -300.5912611594203 L 430.9090909090909 -293.44840401656313 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 467.4025974025974 -293.43508604554864 L 467.4025974025974 -307.7208003312629 L 481.68831168831167 -307.7208003312629 L 481.68831168831167 -293.43508604554864 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.5779431884058 L 474.5454545454545 -307.7208003312629 L 481.68831168831167 -300.5779431884058 L 474.5454545454545 -293.43508604554864 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.038961038961 -293.4298857556936 L 511.038961038961 -307.71560004140787 L 525.3246753246754 -307.71560004140787 L 525.3246753246754 -293.4298857556936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.5727428985507 L 518.1818181818182 -307.71560004140787 L 525.3246753246754 -300.5727428985507 L 518.1818181818182 -293.4298857556936 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 554.6753246753246 -293.4363805383023 L 554.6753246753246 -307.72209482401655 L 568.961038961039 -307.72209482401655 L 568.961038961039 -293.4363805383023 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -300.57923768115944 L 561.8181818181818 -307.72209482401655 L 568.961038961039 -300.57923768115944 L 561.8181818181818 -293.4363805383023 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 598.3116883116883 -293.42841271221533 L 598.3116883116883 -307.7141269979296 L 612.5974025974026 -307.7141269979296 L 612.5974025974026 -293.42841271221533 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -300.57126985507244 L 605.4545454545455 -307.7141269979296 L 612.5974025974026 -300.57126985507244 L 605.4545454545455 -293.42841271221533 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 641.9480519480519 -293.42842546583853 L 641.9480519480519 -307.7141397515528 L 656.2337662337662 -307.7141397515528 L 656.2337662337662 -293.42842546583853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -300.57128260869564 L 649.090909090909 -307.7141397515528 L 656.2337662337662 -300.57128260869564 L 649.090909090909 -293.42842546583853 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 685.5844155844156 -293.42082430641824 L 685.5844155844156 -307.7065385921325 L 699.8701298701299 -307.7065385921325 L 699.8701298701299 -293.42082430641824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -300.56368144927535 L 692.7272727272727 -307.7065385921325 L 699.8701298701299 -300.56368144927535 L 692.7272727272727 -293.42082430641824 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 729.2207792207791 -293.41878372670806 L 729.2207792207791 -307.70449801242233 L 743.5064935064936 -307.70449801242233 L 743.5064935064936 -293.41878372670806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -300.5616408695652 L 736.3636363636364 -307.70449801242233 L 743.5064935064936 -300.5616408695652 L 736.3636363636364 -293.41878372670806 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -74 L 290 -136 L 419.408 -136 L 419.408 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ binary_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 300.85714285714283 -78.1904761904762 L 300.85714285714283 -92.47619047619048 L 315.14285714285717 -92.47619047619048 L 315.14285714285717 -78.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdf b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdf
new file mode 100644
index 0000000000..acae1fefad
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.png b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.png
new file mode 100644
index 0000000000..93637b06c8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg
new file mode 100644
index 0000000000..37bd874f13
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg
@@ -0,0 +1,442 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -320.1915104477612 L 337.3863636363636 -330.1915104477612 L 349.8863636363636 -330.1915104477612 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -344.63561194029853 L 381.02272727272725 -354.63561194029853 L 393.52272727272725 -354.63561194029853 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -362.9274626865672 L 424.6590909090909 -372.9274626865672 L 437.1590909090909 -372.9274626865672 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -388.45337313432833 L 468.2954545454545 -398.45337313432833 L 480.7954545454545 -398.45337313432833 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -411.7497313432836 L 511.9318181818182 -421.7497313432836 L 524.4318181818182 -421.7497313432836 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -433.88895522388054 L 555.5681818181818 -443.88895522388054 L 568.0681818181818 -443.88895522388054 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -453.96707462686567 L 599.2045454545455 -463.96707462686567 L 611.7045454545455 -463.96707462686567 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -476.544328358209 L 642.840909090909 -486.544328358209 L 655.340909090909 -486.544328358209 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -495.07489552238803 L 686.4772727272727 -505.07489552238803 L 698.9772727272727 -505.07489552238803 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -298.2357928358209 L 337.3863636363636 -308.2357928358209 L 349.8863636363636 -308.2357928358209 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -298.6628029850746 L 381.02272727272725 -308.6628029850746 L 393.52272727272725 -308.6628029850746 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -299.02189552238804 L 424.6590909090909 -309.02189552238804 L 437.1590909090909 -309.02189552238804 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -299.2205194029851 L 468.2954545454545 -309.2205194029851 L 480.7954545454545 -309.2205194029851 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -299.41576119402987 L 511.9318181818182 -309.41576119402987 L 524.4318181818182 -309.41576119402987 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -299.51932537313434 L 555.5681818181818 -309.51932537313434 L 568.0681818181818 -309.51932537313434 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -299.6235791044776 L 599.2045454545455 -309.6235791044776 L 611.7045454545455 -309.6235791044776 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -299.75291940298507 L 642.840909090909 -309.75291940298507 L 655.340909090909 -309.75291940298507 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -299.8146507462687 L 686.4772727272727 -309.8146507462687 L 698.9772727272727 -309.8146507462687 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -299.8596029850746 L 730.1136363636364 -309.8596029850746 L 742.6136363636364 -309.8596029850746 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 336.4935064935065 -302.0788095522388 L 343.6363636363636 -309.22166669509596 L 350.7792207792208 -302.0788095522388 L 343.6363636363636 -294.9359524093817 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 380.12987012987014 -302.2534402985075 L 387.27272727272725 -309.3962974413646 L 394.4155844155844 -302.2534402985075 L 387.27272727272725 -295.1105831556503 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 423.76623376623377 -302.34449731343284 L 430.9090909090909 -309.48735445628995 L 438.05194805194805 -302.34449731343284 L 430.9090909090909 -295.2016401705757 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 467.4025974025974 -302.4607919402985 L 474.5454545454545 -309.60364908315563 L 481.68831168831167 -302.4607919402985 L 474.5454545454545 -295.31793479744135 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.038961038961 -302.4959032835821 L 518.1818181818182 -309.63876042643926 L 525.3246753246754 -302.4959032835821 L 518.1818181818182 -295.3530461407249 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 554.6753246753246 -302.54936656716416 L 561.8181818181818 -309.6922237100213 L 568.961038961039 -302.54936656716416 L 561.8181818181818 -295.40650942430705 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 598.3116883116883 -302.6060182089552 L 605.4545454545455 -309.7488753518124 L 612.5974025974026 -302.6060182089552 L 605.4545454545455 -295.4631610660981 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 641.9480519480519 -302.64897402985076 L 649.090909090909 -309.7918311727079 L 656.2337662337662 -302.64897402985076 L 649.090909090909 -295.5061168869936 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 685.5844155844156 -302.66701402985075 L 692.7272727272727 -309.8098711727079 L 699.8701298701299 -302.66701402985075 L 692.7272727272727 -295.5241568869936 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 729.2207792207791 -302.66857701492535 L 736.3636363636364 -309.8114341577825 L 743.5064935064936 -302.66857701492535 L 736.3636363636364 -295.52571987206824 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -74 L 290 -136 L 419.408 -136 L 419.408 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.34e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.68e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 4.02e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 5.36e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.70e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -325.1915104477612 L 387.27272727272725 -349.63561194029853 L 430.9090909090909 -367.9274626865672 L 474.5454545454545 -393.45337313432833 L 518.1818181818182 -416.7497313432836 L 561.8181818181818 -438.88895522388054 L 605.4545454545455 -458.96707462686567 L 649.090909090909 -481.544328358209 L 692.7272727272727 -500.07489552238803 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -320.1915104477612 L 337.3863636363636 -330.1915104477612 L 349.8863636363636 -330.1915104477612 L 349.8863636363636 -320.1915104477612 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -320.1915104477612 L 337.3863636363636 -330.1915104477612 L 349.8863636363636 -330.1915104477612 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -344.63561194029853 L 381.02272727272725 -354.63561194029853 L 393.52272727272725 -354.63561194029853 L 393.52272727272725 -344.63561194029853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -344.63561194029853 L 381.02272727272725 -354.63561194029853 L 393.52272727272725 -354.63561194029853 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -362.9274626865672 L 424.6590909090909 -372.9274626865672 L 437.1590909090909 -372.9274626865672 L 437.1590909090909 -362.9274626865672 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -362.9274626865672 L 424.6590909090909 -372.9274626865672 L 437.1590909090909 -372.9274626865672 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -388.45337313432833 L 468.2954545454545 -398.45337313432833 L 480.7954545454545 -398.45337313432833 L 480.7954545454545 -388.45337313432833 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -388.45337313432833 L 468.2954545454545 -398.45337313432833 L 480.7954545454545 -398.45337313432833 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -411.7497313432836 L 511.9318181818182 -421.7497313432836 L 524.4318181818182 -421.7497313432836 L 524.4318181818182 -411.7497313432836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -411.7497313432836 L 511.9318181818182 -421.7497313432836 L 524.4318181818182 -421.7497313432836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -433.88895522388054 L 555.5681818181818 -443.88895522388054 L 568.0681818181818 -443.88895522388054 L 568.0681818181818 -433.88895522388054 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -433.88895522388054 L 555.5681818181818 -443.88895522388054 L 568.0681818181818 -443.88895522388054 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -453.96707462686567 L 599.2045454545455 -463.96707462686567 L 611.7045454545455 -463.96707462686567 L 611.7045454545455 -453.96707462686567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -453.96707462686567 L 599.2045454545455 -463.96707462686567 L 611.7045454545455 -463.96707462686567 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -476.544328358209 L 642.840909090909 -486.544328358209 L 655.340909090909 -486.544328358209 L 655.340909090909 -476.544328358209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -476.544328358209 L 642.840909090909 -486.544328358209 L 655.340909090909 -486.544328358209 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -495.07489552238803 L 686.4772727272727 -505.07489552238803 L 698.9772727272727 -505.07489552238803 L 698.9772727272727 -495.07489552238803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -495.07489552238803 L 686.4772727272727 -505.07489552238803 L 698.9772727272727 -505.07489552238803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -303.2357928358209 L 387.27272727272725 -303.6628029850746 L 430.9090909090909 -304.02189552238804 L 474.5454545454545 -304.2205194029851 L 518.1818181818182 -304.41576119402987 L 561.8181818181818 -304.51932537313434 L 605.4545454545455 -304.6235791044776 L 649.090909090909 -304.75291940298507 L 692.7272727272727 -304.8146507462687 L 736.3636363636364 -304.8596029850746" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -298.2357928358209 L 337.3863636363636 -308.2357928358209 L 349.8863636363636 -308.2357928358209 L 349.8863636363636 -298.2357928358209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -298.2357928358209 L 337.3863636363636 -308.2357928358209 L 349.8863636363636 -308.2357928358209 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -298.6628029850746 L 381.02272727272725 -308.6628029850746 L 393.52272727272725 -308.6628029850746 L 393.52272727272725 -298.6628029850746 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -298.6628029850746 L 381.02272727272725 -308.6628029850746 L 393.52272727272725 -308.6628029850746 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -299.02189552238804 L 424.6590909090909 -309.02189552238804 L 437.1590909090909 -309.02189552238804 L 437.1590909090909 -299.02189552238804 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -299.02189552238804 L 424.6590909090909 -309.02189552238804 L 437.1590909090909 -309.02189552238804 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -299.2205194029851 L 468.2954545454545 -309.2205194029851 L 480.7954545454545 -309.2205194029851 L 480.7954545454545 -299.2205194029851 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -299.2205194029851 L 468.2954545454545 -309.2205194029851 L 480.7954545454545 -309.2205194029851 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -299.41576119402987 L 511.9318181818182 -309.41576119402987 L 524.4318181818182 -309.41576119402987 L 524.4318181818182 -299.41576119402987 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -299.41576119402987 L 511.9318181818182 -309.41576119402987 L 524.4318181818182 -309.41576119402987 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -299.51932537313434 L 555.5681818181818 -309.51932537313434 L 568.0681818181818 -309.51932537313434 L 568.0681818181818 -299.51932537313434 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -299.51932537313434 L 555.5681818181818 -309.51932537313434 L 568.0681818181818 -309.51932537313434 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -299.6235791044776 L 599.2045454545455 -309.6235791044776 L 611.7045454545455 -309.6235791044776 L 611.7045454545455 -299.6235791044776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -299.6235791044776 L 599.2045454545455 -309.6235791044776 L 611.7045454545455 -309.6235791044776 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -299.75291940298507 L 642.840909090909 -309.75291940298507 L 655.340909090909 -309.75291940298507 L 655.340909090909 -299.75291940298507 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -299.75291940298507 L 642.840909090909 -309.75291940298507 L 655.340909090909 -309.75291940298507 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -299.8146507462687 L 686.4772727272727 -309.8146507462687 L 698.9772727272727 -309.8146507462687 L 698.9772727272727 -299.8146507462687 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -299.8146507462687 L 686.4772727272727 -309.8146507462687 L 698.9772727272727 -309.8146507462687 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -299.8596029850746 L 730.1136363636364 -309.8596029850746 L 742.6136363636364 -309.8596029850746 L 742.6136363636364 -299.8596029850746 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -299.8596029850746 L 730.1136363636364 -309.8596029850746 L 742.6136363636364 -309.8596029850746 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -302.0788095522388 L 387.27272727272725 -302.2534402985075 L 430.9090909090909 -302.34449731343284 L 474.5454545454545 -302.4607919402985 L 518.1818181818182 -302.4959032835821 L 561.8181818181818 -302.54936656716416 L 605.4545454545455 -302.6060182089552 L 649.090909090909 -302.64897402985076 L 692.7272727272727 -302.66701402985075 L 736.3636363636364 -302.66857701492535" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 336.4935064935065 -294.9359524093817 L 336.4935064935065 -309.22166669509596 L 350.7792207792208 -309.22166669509596 L 350.7792207792208 -294.9359524093817 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -302.0788095522388 L 343.6363636363636 -309.22166669509596 L 350.7792207792208 -302.0788095522388 L 343.6363636363636 -294.9359524093817 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 380.12987012987014 -295.1105831556503 L 380.12987012987014 -309.3962974413646 L 394.4155844155844 -309.3962974413646 L 394.4155844155844 -295.1105831556503 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -302.2534402985075 L 387.27272727272725 -309.3962974413646 L 394.4155844155844 -302.2534402985075 L 387.27272727272725 -295.1105831556503 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 423.76623376623377 -295.2016401705757 L 423.76623376623377 -309.48735445628995 L 438.05194805194805 -309.48735445628995 L 438.05194805194805 -295.2016401705757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -302.34449731343284 L 430.9090909090909 -309.48735445628995 L 438.05194805194805 -302.34449731343284 L 430.9090909090909 -295.2016401705757 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 467.4025974025974 -295.31793479744135 L 467.4025974025974 -309.60364908315563 L 481.68831168831167 -309.60364908315563 L 481.68831168831167 -295.31793479744135 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -302.4607919402985 L 474.5454545454545 -309.60364908315563 L 481.68831168831167 -302.4607919402985 L 474.5454545454545 -295.31793479744135 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.038961038961 -295.3530461407249 L 511.038961038961 -309.63876042643926 L 525.3246753246754 -309.63876042643926 L 525.3246753246754 -295.3530461407249 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -302.4959032835821 L 518.1818181818182 -309.63876042643926 L 525.3246753246754 -302.4959032835821 L 518.1818181818182 -295.3530461407249 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 554.6753246753246 -295.40650942430705 L 554.6753246753246 -309.6922237100213 L 568.961038961039 -309.6922237100213 L 568.961038961039 -295.40650942430705 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -302.54936656716416 L 561.8181818181818 -309.6922237100213 L 568.961038961039 -302.54936656716416 L 561.8181818181818 -295.40650942430705 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 598.3116883116883 -295.4631610660981 L 598.3116883116883 -309.7488753518124 L 612.5974025974026 -309.7488753518124 L 612.5974025974026 -295.4631610660981 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -302.6060182089552 L 605.4545454545455 -309.7488753518124 L 612.5974025974026 -302.6060182089552 L 605.4545454545455 -295.4631610660981 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 641.9480519480519 -295.5061168869936 L 641.9480519480519 -309.7918311727079 L 656.2337662337662 -309.7918311727079 L 656.2337662337662 -295.5061168869936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -302.64897402985076 L 649.090909090909 -309.7918311727079 L 656.2337662337662 -302.64897402985076 L 649.090909090909 -295.5061168869936 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 685.5844155844156 -295.5241568869936 L 685.5844155844156 -309.8098711727079 L 699.8701298701299 -309.8098711727079 L 699.8701298701299 -295.5241568869936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -302.66701402985075 L 692.7272727272727 -309.8098711727079 L 699.8701298701299 -302.66701402985075 L 692.7272727272727 -295.5241568869936 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 729.2207792207791 -295.52571987206824 L 729.2207792207791 -309.8114341577825 L 743.5064935064936 -309.8114341577825 L 743.5064935064936 -295.52571987206824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -302.66857701492535 L 736.3636363636364 -309.8114341577825 L 743.5064935064936 -302.66857701492535 L 736.3636363636364 -295.52571987206824 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -74 L 290 -136 L 419.408 -136 L 419.408 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ binary_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 300.85714285714283 -78.1904761904762 L 300.85714285714283 -92.47619047619048 L 315.14285714285717 -92.47619047619048 L 315.14285714285717 -78.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdf b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdf
new file mode 100644
index 0000000000..128ce66351
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.png b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.png
new file mode 100644
index 0000000000..ee3518799d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg
new file mode 100644
index 0000000000..dfccb84ea2
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg
@@ -0,0 +1,593 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -502.2555950660012 L 337.3863636363636 -512.2555950660012 L 349.8863636363636 -512.2555950660012 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -507.7363856031908 L 381.02272727272725 -517.7363856031908 L 393.52272727272725 -517.7363856031908 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -500.0723322535374 L 424.6590909090909 -510.0723322535374 L 437.1590909090909 -510.0723322535374 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -502.5596965316395 L 468.2954545454545 -512.5596965316395 L 480.7954545454545 -512.5596965316395 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -502.2497916029165 L 511.9318181818182 -512.2497916029165 L 524.4318181818182 -512.2497916029165 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -502.74540735034975 L 555.5681818181818 -512.7454073503498 L 568.0681818181818 -512.7454073503498 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -503.9618132129027 L 599.2045454545455 -513.9618132129027 L 611.7045454545455 -513.9618132129027 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -506.80551012440515 L 642.840909090909 -516.8055101244051 L 655.340909090909 -516.8055101244051 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -509.24064323474477 L 686.4772727272727 -519.2406432347448 L 698.9772727272727 -519.2406432347448 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -452.0080509860611 L 337.3863636363636 -462.0080509860611 L 349.8863636363636 -462.0080509860611 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -490.89009296092684 L 381.02272727272725 -500.89009296092684 L 393.52272727272725 -500.89009296092684 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -471.49259794662925 L 424.6590909090909 -481.49259794662925 L 437.1590909090909 -481.49259794662925 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -490.2261767840373 L 468.2954545454545 -500.2261767840373 L 480.7954545454545 -500.2261767840373 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -471.2302814152008 L 511.9318181818182 -481.2302814152008 L 524.4318181818182 -481.2302814152008 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -487.13177026727584 L 555.5681818181818 -497.13177026727584 L 568.0681818181818 -497.13177026727584 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -498.0306739403404 L 599.2045454545455 -508.0306739403404 L 611.7045454545455 -508.0306739403404 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -504.8323326756075 L 642.840909090909 -514.8323326756075 L 655.340909090909 -514.8323326756075 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -475.1731542349453 L 686.4772727272727 -485.1731542349453 L 698.9772727272727 -485.1731542349453 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -479.6801236665225 L 730.1136363636364 -489.6801236665225 L 742.6136363636364 -489.6801236665225 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 337.3863636363636 -450.8427155986536 L 349.8863636363636 -450.8427155986536 L 343.6363636363636 -460.8427155986536 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 381.02272727272725 -446.83600468497747 L 393.52272727272725 -446.83600468497747 L 387.27272727272725 -456.83600468497747 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 424.6590909090909 -441.7150288590392 L 437.1590909090909 -441.7150288590392 L 430.9090909090909 -451.7150288590392 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 468.2954545454545 -461.6522459402138 L 480.7954545454545 -461.6522459402138 L 474.5454545454545 -471.6522459402138 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.9318181818182 -444.2325711451815 L 524.4318181818182 -444.2325711451815 L 518.1818181818182 -454.2325711451815 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 555.5681818181818 -453.1362442097266 L 568.0681818181818 -453.1362442097266 L 561.8181818181818 -463.1362442097266 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 599.2045454545455 -457.1499192791044 L 611.7045454545455 -457.1499192791044 L 605.4545454545455 -467.1499192791044 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 642.840909090909 -461.20305789745805 L 655.340909090909 -461.20305789745805 L 649.090909090909 -471.20305789745805 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 686.4772727272727 -439.4992666533011 L 698.9772727272727 -439.4992666533011 L 692.7272727272727 -449.4992666533011 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 730.1136363636364 -445.6045098184044 L 742.6136363636364 -445.6045098184044 L 736.3636363636364 -455.6045098184044 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 336.4935064935065 -383.98261071424804 L 343.6363636363636 -391.12546785710515 L 350.7792207792208 -383.98261071424804 L 343.6363636363636 -376.83975357139093 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 380.12987012987014 -386.882253009887 L 387.27272727272725 -394.0251101527441 L 394.4155844155844 -386.882253009887 L 387.27272727272725 -379.7393958670298 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 423.76623376623377 -380.8364373067711 L 430.9090909090909 -387.9792944496282 L 438.05194805194805 -380.8364373067711 L 430.9090909090909 -373.6935801639139 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 467.4025974025974 -390.8967405640966 L 474.5454545454545 -398.0395977069537 L 481.68831168831167 -390.8967405640966 L 474.5454545454545 -383.7538834212395 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 511.038961038961 -405.7154192738285 L 518.1818181818182 -412.8582764166856 L 525.3246753246754 -405.7154192738285 L 518.1818181818182 -398.5725621309714 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 554.6753246753246 -391.3980437053529 L 561.8181818181818 -398.54090084821 L 568.961038961039 -391.3980437053529 L 561.8181818181818 -384.25518656249574 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 598.3116883116883 -394.78761435460217 L 605.4545454545455 -401.9304714974593 L 612.5974025974026 -394.78761435460217 L 605.4545454545455 -387.644757211745 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 641.9480519480519 -403.7800804043431 L 649.090909090909 -410.92293754720026 L 656.2337662337662 -403.7800804043431 L 649.090909090909 -396.63722326148593 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 685.5844155844156 -410.0746325352692 L 692.7272727272727 -417.21748967812636 L 699.8701298701299 -410.0746325352692 L 692.7272727272727 -402.9317753924121 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 729.2207792207791 -415.2789460911038 L 736.3636363636364 -422.421803233961 L 743.5064935064936 -415.2789460911038 L 736.3636363636364 -408.1360889482467 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 290 -34 L 290 -136 L 708.4 -136 L 708.4 -34 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 301.75 -80.33333333333334 L 314.25 -80.33333333333334 L 308.0 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 300.85714285714283 -65.33333333333334 L 308.0 -72.47619047619048 L 315.14285714285717 -65.33333333333334 L 308.0 -58.190476190476204 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 3.79e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 7.58e-09
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.14e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.52e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.90e-08
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -507.2555950660012 L 387.27272727272725 -512.7363856031908 L 430.9090909090909 -505.0723322535374 L 474.5454545454545 -507.5596965316395 L 518.1818181818182 -507.2497916029165 L 561.8181818181818 -507.74540735034975 L 605.4545454545455 -508.9618132129027 L 649.090909090909 -511.80551012440515 L 692.7272727272727 -514.2406432347448 L 736.3636363636364 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -502.2555950660012 L 337.3863636363636 -512.2555950660012 L 349.8863636363636 -512.2555950660012 L 349.8863636363636 -502.2555950660012 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -502.2555950660012 L 337.3863636363636 -512.2555950660012 L 349.8863636363636 -512.2555950660012 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -507.7363856031908 L 381.02272727272725 -517.7363856031908 L 393.52272727272725 -517.7363856031908 L 393.52272727272725 -507.7363856031908 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -507.7363856031908 L 381.02272727272725 -517.7363856031908 L 393.52272727272725 -517.7363856031908 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -500.0723322535374 L 424.6590909090909 -510.0723322535374 L 437.1590909090909 -510.0723322535374 L 437.1590909090909 -500.0723322535374 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -500.0723322535374 L 424.6590909090909 -510.0723322535374 L 437.1590909090909 -510.0723322535374 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -502.5596965316395 L 468.2954545454545 -512.5596965316395 L 480.7954545454545 -512.5596965316395 L 480.7954545454545 -502.5596965316395 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -502.5596965316395 L 468.2954545454545 -512.5596965316395 L 480.7954545454545 -512.5596965316395 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -502.2497916029165 L 511.9318181818182 -512.2497916029165 L 524.4318181818182 -512.2497916029165 L 524.4318181818182 -502.2497916029165 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -502.2497916029165 L 511.9318181818182 -512.2497916029165 L 524.4318181818182 -512.2497916029165 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -502.74540735034975 L 555.5681818181818 -512.7454073503498 L 568.0681818181818 -512.7454073503498 L 568.0681818181818 -502.74540735034975 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -502.74540735034975 L 555.5681818181818 -512.7454073503498 L 568.0681818181818 -512.7454073503498 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -503.9618132129027 L 599.2045454545455 -513.9618132129027 L 611.7045454545455 -513.9618132129027 L 611.7045454545455 -503.9618132129027 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -503.9618132129027 L 599.2045454545455 -513.9618132129027 L 611.7045454545455 -513.9618132129027 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -506.80551012440515 L 642.840909090909 -516.8055101244051 L 655.340909090909 -516.8055101244051 L 655.340909090909 -506.80551012440515 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -506.80551012440515 L 642.840909090909 -516.8055101244051 L 655.340909090909 -516.8055101244051 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -509.24064323474477 L 686.4772727272727 -519.2406432347448 L 698.9772727272727 -519.2406432347448 L 698.9772727272727 -509.24064323474477 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -509.24064323474477 L 686.4772727272727 -519.2406432347448 L 698.9772727272727 -519.2406432347448 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -457.0080509860611 L 387.27272727272725 -495.89009296092684 L 430.9090909090909 -476.49259794662925 L 474.5454545454545 -495.2261767840373 L 518.1818181818182 -476.2302814152008 L 561.8181818181818 -492.13177026727584 L 605.4545454545455 -503.0306739403404 L 649.090909090909 -509.8323326756075 L 692.7272727272727 -480.1731542349453 L 736.3636363636364 -484.6801236665225" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -452.0080509860611 L 337.3863636363636 -462.0080509860611 L 349.8863636363636 -462.0080509860611 L 349.8863636363636 -452.0080509860611 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -452.0080509860611 L 337.3863636363636 -462.0080509860611 L 349.8863636363636 -462.0080509860611 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -490.89009296092684 L 381.02272727272725 -500.89009296092684 L 393.52272727272725 -500.89009296092684 L 393.52272727272725 -490.89009296092684 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -490.89009296092684 L 381.02272727272725 -500.89009296092684 L 393.52272727272725 -500.89009296092684 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -471.49259794662925 L 424.6590909090909 -481.49259794662925 L 437.1590909090909 -481.49259794662925 L 437.1590909090909 -471.49259794662925 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -471.49259794662925 L 424.6590909090909 -481.49259794662925 L 437.1590909090909 -481.49259794662925 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -490.2261767840373 L 468.2954545454545 -500.2261767840373 L 480.7954545454545 -500.2261767840373 L 480.7954545454545 -490.2261767840373 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -490.2261767840373 L 468.2954545454545 -500.2261767840373 L 480.7954545454545 -500.2261767840373 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -471.2302814152008 L 511.9318181818182 -481.2302814152008 L 524.4318181818182 -481.2302814152008 L 524.4318181818182 -471.2302814152008 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -471.2302814152008 L 511.9318181818182 -481.2302814152008 L 524.4318181818182 -481.2302814152008 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -487.13177026727584 L 555.5681818181818 -497.13177026727584 L 568.0681818181818 -497.13177026727584 L 568.0681818181818 -487.13177026727584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -487.13177026727584 L 555.5681818181818 -497.13177026727584 L 568.0681818181818 -497.13177026727584 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -498.0306739403404 L 599.2045454545455 -508.0306739403404 L 611.7045454545455 -508.0306739403404 L 611.7045454545455 -498.0306739403404 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -498.0306739403404 L 599.2045454545455 -508.0306739403404 L 611.7045454545455 -508.0306739403404 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -504.8323326756075 L 642.840909090909 -514.8323326756075 L 655.340909090909 -514.8323326756075 L 655.340909090909 -504.8323326756075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -504.8323326756075 L 642.840909090909 -514.8323326756075 L 655.340909090909 -514.8323326756075 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -475.1731542349453 L 686.4772727272727 -485.1731542349453 L 698.9772727272727 -485.1731542349453 L 698.9772727272727 -475.1731542349453 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -475.1731542349453 L 686.4772727272727 -485.1731542349453 L 698.9772727272727 -485.1731542349453 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -479.6801236665225 L 730.1136363636364 -489.6801236665225 L 742.6136363636364 -489.6801236665225 L 742.6136363636364 -479.6801236665225 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -479.6801236665225 L 730.1136363636364 -489.6801236665225 L 742.6136363636364 -489.6801236665225 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -455.8427155986536 L 387.27272727272725 -451.83600468497747 L 430.9090909090909 -446.7150288590392 L 474.5454545454545 -466.6522459402138 L 518.1818181818182 -449.2325711451815 L 561.8181818181818 -458.1362442097266 L 605.4545454545455 -462.1499192791044 L 649.090909090909 -466.20305789745805 L 692.7272727272727 -444.4992666533011 L 736.3636363636364 -450.6045098184044" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -450.8427155986536 L 337.3863636363636 -460.8427155986536 L 349.8863636363636 -460.8427155986536 L 349.8863636363636 -450.8427155986536 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -450.8427155986536 L 349.8863636363636 -450.8427155986536 L 343.6363636363636 -460.8427155986536 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -446.83600468497747 L 381.02272727272725 -456.83600468497747 L 393.52272727272725 -456.83600468497747 L 393.52272727272725 -446.83600468497747 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -446.83600468497747 L 393.52272727272725 -446.83600468497747 L 387.27272727272725 -456.83600468497747 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -441.7150288590392 L 424.6590909090909 -451.7150288590392 L 437.1590909090909 -451.7150288590392 L 437.1590909090909 -441.7150288590392 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -441.7150288590392 L 437.1590909090909 -441.7150288590392 L 430.9090909090909 -451.7150288590392 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -461.6522459402138 L 468.2954545454545 -471.6522459402138 L 480.7954545454545 -471.6522459402138 L 480.7954545454545 -461.6522459402138 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -461.6522459402138 L 480.7954545454545 -461.6522459402138 L 474.5454545454545 -471.6522459402138 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -444.2325711451815 L 511.9318181818182 -454.2325711451815 L 524.4318181818182 -454.2325711451815 L 524.4318181818182 -444.2325711451815 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -444.2325711451815 L 524.4318181818182 -444.2325711451815 L 518.1818181818182 -454.2325711451815 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -453.1362442097266 L 555.5681818181818 -463.1362442097266 L 568.0681818181818 -463.1362442097266 L 568.0681818181818 -453.1362442097266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -453.1362442097266 L 568.0681818181818 -453.1362442097266 L 561.8181818181818 -463.1362442097266 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -457.1499192791044 L 599.2045454545455 -467.1499192791044 L 611.7045454545455 -467.1499192791044 L 611.7045454545455 -457.1499192791044 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -457.1499192791044 L 611.7045454545455 -457.1499192791044 L 605.4545454545455 -467.1499192791044 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -461.20305789745805 L 642.840909090909 -471.20305789745805 L 655.340909090909 -471.20305789745805 L 655.340909090909 -461.20305789745805 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -461.20305789745805 L 655.340909090909 -461.20305789745805 L 649.090909090909 -471.20305789745805 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -439.4992666533011 L 686.4772727272727 -449.4992666533011 L 698.9772727272727 -449.4992666533011 L 698.9772727272727 -439.4992666533011 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -439.4992666533011 L 698.9772727272727 -439.4992666533011 L 692.7272727272727 -449.4992666533011 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -445.6045098184044 L 730.1136363636364 -455.6045098184044 L 742.6136363636364 -455.6045098184044 L 742.6136363636364 -445.6045098184044 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -445.6045098184044 L 742.6136363636364 -445.6045098184044 L 736.3636363636364 -455.6045098184044 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -383.98261071424804 L 387.27272727272725 -386.882253009887 L 430.9090909090909 -380.8364373067711 L 474.5454545454545 -390.8967405640966 L 518.1818181818182 -405.7154192738285 L 561.8181818181818 -391.3980437053529 L 605.4545454545455 -394.78761435460217 L 649.090909090909 -403.7800804043431 L 692.7272727272727 -410.0746325352692 L 736.3636363636364 -415.2789460911038" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 336.4935064935065 -376.83975357139093 L 336.4935064935065 -391.12546785710515 L 350.7792207792208 -391.12546785710515 L 350.7792207792208 -376.83975357139093 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -383.98261071424804 L 343.6363636363636 -391.12546785710515 L 350.7792207792208 -383.98261071424804 L 343.6363636363636 -376.83975357139093 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 380.12987012987014 -379.7393958670298 L 380.12987012987014 -394.0251101527441 L 394.4155844155844 -394.0251101527441 L 394.4155844155844 -379.7393958670298 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -386.882253009887 L 387.27272727272725 -394.0251101527441 L 394.4155844155844 -386.882253009887 L 387.27272727272725 -379.7393958670298 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 423.76623376623377 -373.6935801639139 L 423.76623376623377 -387.9792944496282 L 438.05194805194805 -387.9792944496282 L 438.05194805194805 -373.6935801639139 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -380.8364373067711 L 430.9090909090909 -387.9792944496282 L 438.05194805194805 -380.8364373067711 L 430.9090909090909 -373.6935801639139 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 467.4025974025974 -383.7538834212395 L 467.4025974025974 -398.0395977069537 L 481.68831168831167 -398.0395977069537 L 481.68831168831167 -383.7538834212395 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -390.8967405640966 L 474.5454545454545 -398.0395977069537 L 481.68831168831167 -390.8967405640966 L 474.5454545454545 -383.7538834212395 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 511.038961038961 -398.5725621309714 L 511.038961038961 -412.8582764166856 L 525.3246753246754 -412.8582764166856 L 525.3246753246754 -398.5725621309714 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -405.7154192738285 L 518.1818181818182 -412.8582764166856 L 525.3246753246754 -405.7154192738285 L 518.1818181818182 -398.5725621309714 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 554.6753246753246 -384.25518656249574 L 554.6753246753246 -398.54090084821 L 568.961038961039 -398.54090084821 L 568.961038961039 -384.25518656249574 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -391.3980437053529 L 561.8181818181818 -398.54090084821 L 568.961038961039 -391.3980437053529 L 561.8181818181818 -384.25518656249574 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 598.3116883116883 -387.644757211745 L 598.3116883116883 -401.9304714974593 L 612.5974025974026 -401.9304714974593 L 612.5974025974026 -387.644757211745 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -394.78761435460217 L 605.4545454545455 -401.9304714974593 L 612.5974025974026 -394.78761435460217 L 605.4545454545455 -387.644757211745 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 641.9480519480519 -396.63722326148593 L 641.9480519480519 -410.92293754720026 L 656.2337662337662 -410.92293754720026 L 656.2337662337662 -396.63722326148593 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -403.7800804043431 L 649.090909090909 -410.92293754720026 L 656.2337662337662 -403.7800804043431 L 649.090909090909 -396.63722326148593 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 685.5844155844156 -402.9317753924121 L 685.5844155844156 -417.21748967812636 L 699.8701298701299 -417.21748967812636 L 699.8701298701299 -402.9317753924121 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -410.0746325352692 L 692.7272727272727 -417.21748967812636 L 699.8701298701299 -410.0746325352692 L 692.7272727272727 -402.9317753924121 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 729.2207792207791 -408.1360889482467 L 729.2207792207791 -422.421803233961 L 743.5064935064936 -422.421803233961 L 743.5064935064936 -408.1360889482467 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -415.2789460911038 L 736.3636363636364 -422.421803233961 L 743.5064935064936 -415.2789460911038 L 736.3636363636364 -408.1360889482467 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -362.1505629359192 L 387.27272727272725 -368.4983908579629 L 430.9090909090909 -363.4398602948159 L 474.5454545454545 -372.22200884236736 L 518.1818181818182 -380.7117789197117 L 561.8181818181818 -370.55954880712454 L 605.4545454545455 -375.21241730065105 L 649.090909090909 -381.1219676905382 L 692.7272727272727 -384.34103259435904 L 736.3636363636364 -387.58423990461216" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 338.6363636363636 -357.1505629359192 L 348.6363636363636 -367.1505629359192" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -357.1505629359192 L 338.6363636363636 -367.1505629359192" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -363.4983908579629 L 392.27272727272725 -373.4983908579629" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -363.4983908579629 L 382.27272727272725 -373.4983908579629" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -358.4398602948159 L 435.9090909090909 -368.43986029481596" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -358.4398602948159 L 425.9090909090909 -368.43986029481596" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -367.22200884236736 L 479.5454545454545 -377.22200884236736" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -367.22200884236736 L 469.5454545454545 -377.22200884236736" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -375.7117789197117 L 523.1818181818182 -385.7117789197117" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -375.7117789197117 L 513.1818181818182 -385.7117789197117" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -365.55954880712454 L 566.8181818181818 -375.55954880712454" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -365.55954880712454 L 556.8181818181818 -375.55954880712454" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -370.21241730065105 L 610.4545454545455 -380.21241730065105" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -370.21241730065105 L 600.4545454545455 -380.21241730065105" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -376.1219676905382 L 654.090909090909 -386.1219676905382" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -376.1219676905382 L 644.090909090909 -386.1219676905382" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -379.34103259435904 L 697.7272727272727 -389.34103259435904" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -379.34103259435904 L 687.7272727272727 -389.34103259435904" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -382.58423990461216 L 741.3636363636364 -392.58423990461216" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -382.58423990461216 L 731.3636363636364 -392.58423990461216" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 290 -34 L 290 -136 L 708.4 -136 L 708.4 -34 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip52);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -80.33333333333334 L 314.25 -80.33333333333334 L 308.0 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 300.85714285714283 -58.190476190476204 L 300.85714285714283 -72.47619047619048 L 315.14285714285717 -72.47619047619048 L 315.14285714285717 -58.190476190476204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -65.33333333333334 L 308.0 -72.47619047619048 L 315.14285714285717 -65.33333333333334 L 308.0 -58.190476190476204 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -40.33333333333337 L 313.0 -50.33333333333337" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -40.33333333333337 L 303.0 -50.33333333333337" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdf b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdf
new file mode 100644
index 0000000000..fed7e33d23
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.png b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.png
new file mode 100644
index 0000000000..6c66291f51
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg
new file mode 100644
index 0000000000..c0416a69f4
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg
@@ -0,0 +1,593 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -495.5340064050372 L 337.3863636363636 -505.5340064050372 L 349.8863636363636 -505.5340064050372 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -503.71280464636595 L 381.02272727272725 -513.712804646366 L 393.52272727272725 -513.712804646366 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -494.97752808988764 L 424.6590909090909 -504.97752808988764 L 437.1590909090909 -504.97752808988764 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -500.88742332953376 L 468.2954545454545 -510.88742332953376 L 480.7954545454545 -510.88742332953376 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -491.63388156109215 L 511.9318181818182 -501.63388156109215 L 524.4318181818182 -501.63388156109215 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -501.9323128697823 L 555.5681818181818 -511.9323128697823 L 568.0681818181818 -511.9323128697823 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -506.7614937849428 L 599.2045454545455 -516.7614937849428 L 611.7045454545455 -516.7614937849428 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -514.5151712533246 L 642.840909090909 -524.5151712533246 L 655.340909090909 -524.5151712533246 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -515.0 L 686.4772727272727 -525.0 L 698.9772727272727 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -512.9460457037399 L 730.1136363636364 -522.9460457037399 L 742.6136363636364 -522.9460457037399 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -461.4192585355263 L 337.3863636363636 -471.4192585355263 L 349.8863636363636 -471.4192585355263 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -507.41947565543074 L 381.02272727272725 -517.4194756554307 L 393.52272727272725 -517.4194756554307 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -490.74662107148674 L 424.6590909090909 -500.74662107148674 L 437.1590909090909 -500.74662107148674 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -512.854095424198 L 468.2954545454545 -522.854095424198 L 480.7954545454545 -522.854095424198 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -483.94110622591324 L 511.9318181818182 -493.94110622591324 L 524.4318181818182 -493.94110622591324 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -493.7284372794876 L 555.5681818181818 -503.7284372794876 L 568.0681818181818 -503.7284372794876 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -501.83200347391846 L 599.2045454545455 -511.83200347391846 L 611.7045454545455 -511.83200347391846 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -509.9092981599088 L 642.840909090909 -519.9092981599088 L 655.340909090909 -519.9092981599088 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -482.52244477012437 L 686.4772727272727 -492.52244477012437 L 698.9772727272727 -492.52244477012437 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -488.78581121424304 L 730.1136363636364 -498.78581121424304 L 742.6136363636364 -498.78581121424304 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 337.3863636363636 -473.97942788905175 L 349.8863636363636 -473.97942788905175 L 343.6363636363636 -483.97942788905175 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 381.02272727272725 -469.4380394072627 L 393.52272727272725 -469.4380394072627 L 387.27272727272725 -479.4380394072627 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 424.6590909090909 -459.3366444118765 L 437.1590909090909 -459.3366444118765 L 430.9090909090909 -469.3366444118765 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 468.2954545454545 -472.80795744449875 L 480.7954545454545 -472.80795744449875 L 474.5454545454545 -482.80795744449875 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.9318181818182 -452.309015904033 L 524.4318181818182 -452.309015904033 L 518.1818181818182 -462.309015904033 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 555.5681818181818 -464.2088150681214 L 568.0681818181818 -464.2088150681214 L 561.8181818181818 -474.2088150681214 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 599.2045454545455 -468.68213645986 L 611.7045454545455 -468.68213645986 L 605.4545454545455 -478.68213645986 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 642.840909090909 -476.13010910275204 L 655.340909090909 -476.13010910275204 L 649.090909090909 -486.13010910275204 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 686.4772727272727 -451.7023828909515 L 698.9772727272727 -451.7023828909515 L 692.7272727272727 -461.7023828909515 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 730.1136363636364 -455.89507680616623 L 742.6136363636364 -455.89507680616623 L 736.3636363636364 -465.89507680616623 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 336.4935064935065 -390.0304293546111 L 343.6363636363636 -397.1732864974682 L 350.7792207792208 -390.0304293546111 L 343.6363636363636 -382.88757221175393 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 380.12987012987014 -391.78023123269827 L 387.27272727272725 -398.9230883755554 L 394.4155844155844 -391.78023123269827 L 387.27272727272725 -384.63737408984116 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 423.76623376623377 -382.3740758834066 L 430.9090909090909 -389.51693302626376 L 438.05194805194805 -382.3740758834066 L 430.9090909090909 -375.2312187405495 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 467.4025974025974 -393.0719535363404 L 474.5454545454545 -400.21481067919757 L 481.68831168831167 -393.0719535363404 L 474.5454545454545 -385.9290963934833 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 511.038961038961 -406.8156543451121 L 518.1818181818182 -413.95851148796925 L 525.3246753246754 -406.8156543451121 L 518.1818181818182 -399.67279720225497 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 554.6753246753246 -389.3886880529773 L 561.8181818181818 -396.5315451958344 L 568.961038961039 -389.3886880529773 L 561.8181818181818 -382.2458309101201 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 598.3116883116883 -394.98248927970474 L 605.4545454545455 -402.12534642256185 L 612.5974025974026 -394.98248927970474 L 605.4545454545455 -387.8396321368476 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 641.9480519480519 -400.9267763122184 L 649.090909090909 -408.0696334550756 L 656.2337662337662 -400.9267763122184 L 649.090909090909 -393.7839191693613 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 685.5844155844156 -408.4640720838083 L 692.7272727272727 -415.60692922666544 L 699.8701298701299 -408.4640720838083 L 692.7272727272727 -401.32121494095117 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 729.2207792207791 -412.65652716712805 L 736.3636363636364 -419.79938430998516 L 743.5064935064936 -412.65652716712805 L 736.3636363636364 -405.51367002427094 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 290 -34 L 290 -136 L 708.4 -136 L 708.4 -34 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 301.75 -80.33333333333334 L 314.25 -80.33333333333334 L 308.0 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 300.85714285714283 -65.33333333333334 L 308.0 -72.47619047619048 L 315.14285714285717 -65.33333333333334 L 308.0 -58.190476190476204 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 3.68e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 7.37e-09
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.11e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.47e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.84e-08
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -500.5340064050372 L 387.27272727272725 -508.71280464636595 L 430.9090909090909 -499.97752808988764 L 474.5454545454545 -505.88742332953376 L 518.1818181818182 -496.63388156109215 L 561.8181818181818 -506.9323128697823 L 605.4545454545455 -511.7614937849428 L 649.090909090909 -519.5151712533246 L 692.7272727272727 -520.0 L 736.3636363636364 -517.9460457037399" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -495.5340064050372 L 337.3863636363636 -505.5340064050372 L 349.8863636363636 -505.5340064050372 L 349.8863636363636 -495.5340064050372 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -495.5340064050372 L 337.3863636363636 -505.5340064050372 L 349.8863636363636 -505.5340064050372 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -503.71280464636595 L 381.02272727272725 -513.712804646366 L 393.52272727272725 -513.712804646366 L 393.52272727272725 -503.71280464636595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -503.71280464636595 L 381.02272727272725 -513.712804646366 L 393.52272727272725 -513.712804646366 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -494.97752808988764 L 424.6590909090909 -504.97752808988764 L 437.1590909090909 -504.97752808988764 L 437.1590909090909 -494.97752808988764 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -494.97752808988764 L 424.6590909090909 -504.97752808988764 L 437.1590909090909 -504.97752808988764 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -500.88742332953376 L 468.2954545454545 -510.88742332953376 L 480.7954545454545 -510.88742332953376 L 480.7954545454545 -500.88742332953376 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -500.88742332953376 L 468.2954545454545 -510.88742332953376 L 480.7954545454545 -510.88742332953376 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -491.63388156109215 L 511.9318181818182 -501.63388156109215 L 524.4318181818182 -501.63388156109215 L 524.4318181818182 -491.63388156109215 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -491.63388156109215 L 511.9318181818182 -501.63388156109215 L 524.4318181818182 -501.63388156109215 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -501.9323128697823 L 555.5681818181818 -511.9323128697823 L 568.0681818181818 -511.9323128697823 L 568.0681818181818 -501.9323128697823 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -501.9323128697823 L 555.5681818181818 -511.9323128697823 L 568.0681818181818 -511.9323128697823 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -506.7614937849428 L 599.2045454545455 -516.7614937849428 L 611.7045454545455 -516.7614937849428 L 611.7045454545455 -506.7614937849428 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -506.7614937849428 L 599.2045454545455 -516.7614937849428 L 611.7045454545455 -516.7614937849428 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -514.5151712533246 L 642.840909090909 -524.5151712533246 L 655.340909090909 -524.5151712533246 L 655.340909090909 -514.5151712533246 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -514.5151712533246 L 642.840909090909 -524.5151712533246 L 655.340909090909 -524.5151712533246 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -515.0 L 686.4772727272727 -525.0 L 698.9772727272727 -525.0 L 698.9772727272727 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -515.0 L 686.4772727272727 -525.0 L 698.9772727272727 -525.0 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -512.9460457037399 L 730.1136363636364 -522.9460457037399 L 742.6136363636364 -522.9460457037399 L 742.6136363636364 -512.9460457037399 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -512.9460457037399 L 730.1136363636364 -522.9460457037399 L 742.6136363636364 -522.9460457037399 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -466.4192585355263 L 387.27272727272725 -512.4194756554307 L 430.9090909090909 -495.74662107148674 L 474.5454545454545 -517.854095424198 L 518.1818181818182 -488.94110622591324 L 561.8181818181818 -498.7284372794876 L 605.4545454545455 -506.83200347391846 L 649.090909090909 -514.9092981599088 L 692.7272727272727 -487.52244477012437 L 736.3636363636364 -493.78581121424304" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -461.4192585355263 L 337.3863636363636 -471.4192585355263 L 349.8863636363636 -471.4192585355263 L 349.8863636363636 -461.4192585355263 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -461.4192585355263 L 337.3863636363636 -471.4192585355263 L 349.8863636363636 -471.4192585355263 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -507.41947565543074 L 381.02272727272725 -517.4194756554307 L 393.52272727272725 -517.4194756554307 L 393.52272727272725 -507.41947565543074 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -507.41947565543074 L 381.02272727272725 -517.4194756554307 L 393.52272727272725 -517.4194756554307 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -490.74662107148674 L 424.6590909090909 -500.74662107148674 L 437.1590909090909 -500.74662107148674 L 437.1590909090909 -490.74662107148674 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -490.74662107148674 L 424.6590909090909 -500.74662107148674 L 437.1590909090909 -500.74662107148674 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -512.854095424198 L 468.2954545454545 -522.854095424198 L 480.7954545454545 -522.854095424198 L 480.7954545454545 -512.854095424198 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -512.854095424198 L 468.2954545454545 -522.854095424198 L 480.7954545454545 -522.854095424198 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -483.94110622591324 L 511.9318181818182 -493.94110622591324 L 524.4318181818182 -493.94110622591324 L 524.4318181818182 -483.94110622591324 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -483.94110622591324 L 511.9318181818182 -493.94110622591324 L 524.4318181818182 -493.94110622591324 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -493.7284372794876 L 555.5681818181818 -503.7284372794876 L 568.0681818181818 -503.7284372794876 L 568.0681818181818 -493.7284372794876 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -493.7284372794876 L 555.5681818181818 -503.7284372794876 L 568.0681818181818 -503.7284372794876 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -501.83200347391846 L 599.2045454545455 -511.83200347391846 L 611.7045454545455 -511.83200347391846 L 611.7045454545455 -501.83200347391846 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -501.83200347391846 L 599.2045454545455 -511.83200347391846 L 611.7045454545455 -511.83200347391846 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -509.9092981599088 L 642.840909090909 -519.9092981599088 L 655.340909090909 -519.9092981599088 L 655.340909090909 -509.9092981599088 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -509.9092981599088 L 642.840909090909 -519.9092981599088 L 655.340909090909 -519.9092981599088 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -482.52244477012437 L 686.4772727272727 -492.52244477012437 L 698.9772727272727 -492.52244477012437 L 698.9772727272727 -482.52244477012437 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -482.52244477012437 L 686.4772727272727 -492.52244477012437 L 698.9772727272727 -492.52244477012437 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -488.78581121424304 L 730.1136363636364 -498.78581121424304 L 742.6136363636364 -498.78581121424304 L 742.6136363636364 -488.78581121424304 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -488.78581121424304 L 730.1136363636364 -498.78581121424304 L 742.6136363636364 -498.78581121424304 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -478.97942788905175 L 387.27272727272725 -474.4380394072627 L 430.9090909090909 -464.3366444118765 L 474.5454545454545 -477.80795744449875 L 518.1818181818182 -457.309015904033 L 561.8181818181818 -469.2088150681214 L 605.4545454545455 -473.68213645986 L 649.090909090909 -481.13010910275204 L 692.7272727272727 -456.7023828909515 L 736.3636363636364 -460.89507680616623" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -473.97942788905175 L 337.3863636363636 -483.97942788905175 L 349.8863636363636 -483.97942788905175 L 349.8863636363636 -473.97942788905175 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -473.97942788905175 L 349.8863636363636 -473.97942788905175 L 343.6363636363636 -483.97942788905175 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -469.4380394072627 L 381.02272727272725 -479.4380394072627 L 393.52272727272725 -479.4380394072627 L 393.52272727272725 -469.4380394072627 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -469.4380394072627 L 393.52272727272725 -469.4380394072627 L 387.27272727272725 -479.4380394072627 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -459.3366444118765 L 424.6590909090909 -469.3366444118765 L 437.1590909090909 -469.3366444118765 L 437.1590909090909 -459.3366444118765 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -459.3366444118765 L 437.1590909090909 -459.3366444118765 L 430.9090909090909 -469.3366444118765 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -472.80795744449875 L 468.2954545454545 -482.80795744449875 L 480.7954545454545 -482.80795744449875 L 480.7954545454545 -472.80795744449875 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -472.80795744449875 L 480.7954545454545 -472.80795744449875 L 474.5454545454545 -482.80795744449875 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -452.309015904033 L 511.9318181818182 -462.309015904033 L 524.4318181818182 -462.309015904033 L 524.4318181818182 -452.309015904033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -452.309015904033 L 524.4318181818182 -452.309015904033 L 518.1818181818182 -462.309015904033 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -464.2088150681214 L 555.5681818181818 -474.2088150681214 L 568.0681818181818 -474.2088150681214 L 568.0681818181818 -464.2088150681214 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -464.2088150681214 L 568.0681818181818 -464.2088150681214 L 561.8181818181818 -474.2088150681214 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -468.68213645986 L 599.2045454545455 -478.68213645986 L 611.7045454545455 -478.68213645986 L 611.7045454545455 -468.68213645986 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -468.68213645986 L 611.7045454545455 -468.68213645986 L 605.4545454545455 -478.68213645986 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -476.13010910275204 L 642.840909090909 -486.13010910275204 L 655.340909090909 -486.13010910275204 L 655.340909090909 -476.13010910275204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -476.13010910275204 L 655.340909090909 -476.13010910275204 L 649.090909090909 -486.13010910275204 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -451.7023828909515 L 686.4772727272727 -461.7023828909515 L 698.9772727272727 -461.7023828909515 L 698.9772727272727 -451.7023828909515 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -451.7023828909515 L 698.9772727272727 -451.7023828909515 L 692.7272727272727 -461.7023828909515 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -455.89507680616623 L 730.1136363636364 -465.89507680616623 L 742.6136363636364 -465.89507680616623 L 742.6136363636364 -455.89507680616623 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -455.89507680616623 L 742.6136363636364 -455.89507680616623 L 736.3636363636364 -465.89507680616623 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -390.0304293546111 L 387.27272727272725 -391.78023123269827 L 430.9090909090909 -382.3740758834066 L 474.5454545454545 -393.0719535363404 L 518.1818181818182 -406.8156543451121 L 561.8181818181818 -389.3886880529773 L 605.4545454545455 -394.98248927970474 L 649.090909090909 -400.9267763122184 L 692.7272727272727 -408.4640720838083 L 736.3636363636364 -412.65652716712805" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 336.4935064935065 -382.88757221175393 L 336.4935064935065 -397.1732864974682 L 350.7792207792208 -397.1732864974682 L 350.7792207792208 -382.88757221175393 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -390.0304293546111 L 343.6363636363636 -397.1732864974682 L 350.7792207792208 -390.0304293546111 L 343.6363636363636 -382.88757221175393 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 380.12987012987014 -384.63737408984116 L 380.12987012987014 -398.9230883755554 L 394.4155844155844 -398.9230883755554 L 394.4155844155844 -384.63737408984116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -391.78023123269827 L 387.27272727272725 -398.9230883755554 L 394.4155844155844 -391.78023123269827 L 387.27272727272725 -384.63737408984116 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 423.76623376623377 -375.2312187405495 L 423.76623376623377 -389.51693302626376 L 438.05194805194805 -389.51693302626376 L 438.05194805194805 -375.2312187405495 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -382.3740758834066 L 430.9090909090909 -389.51693302626376 L 438.05194805194805 -382.3740758834066 L 430.9090909090909 -375.2312187405495 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 467.4025974025974 -385.9290963934833 L 467.4025974025974 -400.21481067919757 L 481.68831168831167 -400.21481067919757 L 481.68831168831167 -385.9290963934833 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -393.0719535363404 L 474.5454545454545 -400.21481067919757 L 481.68831168831167 -393.0719535363404 L 474.5454545454545 -385.9290963934833 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 511.038961038961 -399.67279720225497 L 511.038961038961 -413.95851148796925 L 525.3246753246754 -413.95851148796925 L 525.3246753246754 -399.67279720225497 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -406.8156543451121 L 518.1818181818182 -413.95851148796925 L 525.3246753246754 -406.8156543451121 L 518.1818181818182 -399.67279720225497 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 554.6753246753246 -382.2458309101201 L 554.6753246753246 -396.5315451958344 L 568.961038961039 -396.5315451958344 L 568.961038961039 -382.2458309101201 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -389.3886880529773 L 561.8181818181818 -396.5315451958344 L 568.961038961039 -389.3886880529773 L 561.8181818181818 -382.2458309101201 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 598.3116883116883 -387.8396321368476 L 598.3116883116883 -402.12534642256185 L 612.5974025974026 -402.12534642256185 L 612.5974025974026 -387.8396321368476 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -394.98248927970474 L 605.4545454545455 -402.12534642256185 L 612.5974025974026 -394.98248927970474 L 605.4545454545455 -387.8396321368476 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 641.9480519480519 -393.7839191693613 L 641.9480519480519 -408.0696334550756 L 656.2337662337662 -408.0696334550756 L 656.2337662337662 -393.7839191693613 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -400.9267763122184 L 649.090909090909 -408.0696334550756 L 656.2337662337662 -400.9267763122184 L 649.090909090909 -393.7839191693613 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 685.5844155844156 -401.32121494095117 L 685.5844155844156 -415.60692922666544 L 699.8701298701299 -415.60692922666544 L 699.8701298701299 -401.32121494095117 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -408.4640720838083 L 692.7272727272727 -415.60692922666544 L 699.8701298701299 -408.4640720838083 L 692.7272727272727 -401.32121494095117 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 729.2207792207791 -405.51367002427094 L 729.2207792207791 -419.79938430998516 L 743.5064935064936 -419.79938430998516 L 743.5064935064936 -405.51367002427094 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -412.65652716712805 L 736.3636363636364 -419.79938430998516 L 743.5064935064936 -412.65652716712805 L 736.3636363636364 -405.51367002427094 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -362.13366986918527 L 387.27272727272725 -365.8742550073278 L 430.9090909090909 -363.1755740107474 L 474.5454545454545 -369.4186397437985 L 518.1818181818182 -380.2119307387505 L 561.8181818181818 -370.80625305324867 L 605.4545454545455 -374.69407805460565 L 649.090909090909 -376.9590403300223 L 692.7272727272727 -382.2055799815448 L 736.3636363636364 -387.19800249687887" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 338.6363636363636 -357.13366986918527 L 348.6363636363636 -367.13366986918527" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -357.13366986918527 L 338.6363636363636 -367.13366986918527" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -360.8742550073278 L 392.27272727272725 -370.8742550073278" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -360.8742550073278 L 382.27272727272725 -370.8742550073278" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -358.1755740107474 L 435.9090909090909 -368.1755740107474" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -358.1755740107474 L 425.9090909090909 -368.1755740107474" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -364.4186397437985 L 479.5454545454545 -374.4186397437985" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -364.4186397437985 L 469.5454545454545 -374.4186397437985" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -375.2119307387505 L 523.1818181818182 -385.2119307387505" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -375.2119307387505 L 513.1818181818182 -385.2119307387505" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -365.80625305324867 L 566.8181818181818 -375.80625305324867" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -365.80625305324867 L 556.8181818181818 -375.80625305324867" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -369.69407805460565 L 610.4545454545455 -379.69407805460565" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -369.69407805460565 L 600.4545454545455 -379.69407805460565" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -371.9590403300223 L 654.090909090909 -381.9590403300223" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -371.9590403300223 L 644.090909090909 -381.9590403300223" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -377.2055799815448 L 697.7272727272727 -387.2055799815448" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -377.2055799815448 L 687.7272727272727 -387.2055799815448" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -382.19800249687887 L 741.3636363636364 -392.19800249687887" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -382.19800249687887 L 731.3636363636364 -392.19800249687887" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 290 -34 L 290 -136 L 708.4 -136 L 708.4 -34 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip52);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -80.33333333333334 L 314.25 -80.33333333333334 L 308.0 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 300.85714285714283 -58.190476190476204 L 300.85714285714283 -72.47619047619048 L 315.14285714285717 -72.47619047619048 L 315.14285714285717 -58.190476190476204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -65.33333333333334 L 308.0 -72.47619047619048 L 315.14285714285717 -65.33333333333334 L 308.0 -58.190476190476204 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -40.33333333333337 L 313.0 -50.33333333333337" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -40.33333333333337 L 303.0 -50.33333333333337" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdf b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdf
new file mode 100644
index 0000000000..cf926daada
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.png b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.png
new file mode 100644
index 0000000000..ba8478084b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg
new file mode 100644
index 0000000000..136c8a72b8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg
@@ -0,0 +1,594 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -478.1851422619615 L 349.8863636363636 -478.1851422619615 L 343.6363636363636 -488.1851422619615 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -475.7549162711889 L 393.52272727272725 -475.7549162711889 L 387.27272727272725 -485.7549162711889 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -486.70707018843564 L 437.1590909090909 -486.70707018843564 L 430.9090909090909 -496.70707018843564 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -472.87608282660835 L 480.7954545454545 -472.87608282660835 L 474.5454545454545 -482.87608282660835 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -505.0370416553585 L 524.4318181818182 -505.0370416553585 L 518.1818181818182 -515.0370416553585 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -494.2220518876574 L 568.0681818181818 -494.2220518876574 L 561.8181818181818 -504.2220518876574 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -479.9715035978083 L 611.7045454545455 -479.9715035978083 L 605.4545454545455 -489.9715035978083 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -474.49946087887747 L 655.340909090909 -474.49946087887747 L 649.090909090909 -484.49946087887747 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -514.786992144235 L 698.9772727272727 -514.786992144235 L 692.7272727272727 -524.786992144235 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -507.58829483690664 L 337.3863636363636 -517.5882948369067 L 349.8863636363636 -517.5882948369067 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -470.258668114103 L 381.02272727272725 -480.258668114103 L 393.52272727272725 -480.258668114103 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -487.07176545663924 L 424.6590909090909 -497.07176545663924 L 437.1590909090909 -497.07176545663924 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -471.649673960083 L 468.2954545454545 -481.649673960083 L 480.7954545454545 -481.649673960083 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -492.53412600030805 L 511.9318181818182 -502.53412600030805 L 524.4318181818182 -502.53412600030805 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -483.8233956562241 L 555.5681818181818 -493.8233956562241 L 568.0681818181818 -493.8233956562241 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -476.39716723023776 L 599.2045454545455 -486.39716723023776 L 611.7045454545455 -486.39716723023776 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -470.86057667622663 L 642.840909090909 -480.86057667622663 L 655.340909090909 -480.86057667622663 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -503.4443238247526 L 686.4772727272727 -513.4443238247526 L 698.9772727272727 -513.4443238247526 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -496.9362883527832 L 730.1136363636364 -506.9362883527832 L 742.6136363636364 -506.9362883527832 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -501.4207491949858 L 337.3863636363636 -511.4207491949858 L 349.8863636363636 -511.4207491949858 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -461.90456455883754 L 381.02272727272725 -471.90456455883754 L 393.52272727272725 -471.90456455883754 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -475.3369690390441 L 424.6590909090909 -485.3369690390441 L 437.1590909090909 -485.3369690390441 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -460.3086193364776 L 468.2954545454545 -470.3086193364776 L 480.7954545454545 -470.3086193364776 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -483.0762544651698 L 511.9318181818182 -493.0762544651698 L 524.4318181818182 -493.0762544651698 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -473.3004848422612 L 555.5681818181818 -483.3004848422612 L 568.0681818181818 -483.3004848422612 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -465.98882882354235 L 599.2045454545455 -475.98882882354235 L 611.7045454545455 -475.98882882354235 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -462.0433424042601 L 642.840909090909 -472.0433424042601 L 655.340909090909 -472.0433424042601 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -493.1215112995386 L 686.4772727272727 -503.1215112995386 L 698.9772727272727 -503.1215112995386 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -486.9749437040188 L 730.1136363636364 -496.9749437040188 L 742.6136363636364 -496.9749437040188 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 336.4935064935065 -457.8959459558581 L 343.6363636363636 -465.0388030987152 L 350.7792207792208 -457.8959459558581 L 343.6363636363636 -450.75308881300094 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 380.12987012987014 -450.4056538035545 L 387.27272727272725 -457.5485109464117 L 394.4155844155844 -450.4056538035545 L 387.27272727272725 -443.2627966606974 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 423.76623376623377 -460.48286181628805 L 430.9090909090909 -467.62571895914516 L 438.05194805194805 -460.48286181628805 L 430.9090909090909 -453.34000467343094 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 467.4025974025974 -448.2397511974357 L 474.5454545454545 -455.3826083402928 L 481.68831168831167 -448.2397511974357 L 474.5454545454545 -441.09689405457857 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 511.038961038961 -441.7717353832161 L 518.1818181818182 -448.9145925260732 L 525.3246753246754 -441.7717353832161 L 518.1818181818182 -434.628878240359 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 554.6753246753246 -462.2232328196401 L 561.8181818181818 -469.36608996249726 L 568.961038961039 -462.2232328196401 L 561.8181818181818 -455.080375676783 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 598.3116883116883 -454.531067313123 L 605.4545454545455 -461.6739244559801 L 612.5974025974026 -454.531067313123 L 605.4545454545455 -447.3882101702659 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 641.9480519480519 -450.5420111051616 L 649.090909090909 -457.68486824801874 L 656.2337662337662 -450.5420111051616 L 649.090909090909 -443.39915396230447 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 685.5844155844156 -448.90685307299043 L 692.7272727272727 -456.04971021584754 L 699.8701298701299 -448.90685307299043 L 692.7272727272727 -441.76399593013326 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 729.2207792207791 -445.7194809767261 L 736.3636363636364 -452.8623381195832 L 743.5064935064936 -445.7194809767261 L 736.3636363636364 -438.57662383386895 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 290 -34 L 290 -136 L 708.4 -136 L 708.4 -34 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 300.85714285714283 -45.33333333333334 L 308.0 -52.47619047619048 L 315.14285714285717 -45.33333333333334 L 308.0 -38.190476190476204 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -461.3695877007034 L 780 -461.3695877007034" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 2.73e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 5.45e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 8.18e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.09e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.36e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -483.1851422619615 L 387.27272727272725 -480.7549162711889 L 430.9090909090909 -491.70707018843564 L 474.5454545454545 -477.87608282660835 L 518.1818181818182 -510.0370416553585 L 561.8181818181818 -499.2220518876574 L 605.4545454545455 -484.9715035978083 L 649.090909090909 -479.49946087887747 L 692.7272727272727 -519.786992144235 L 736.3636363636364 -520.0" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -478.1851422619615 L 337.3863636363636 -488.1851422619615 L 349.8863636363636 -488.1851422619615 L 349.8863636363636 -478.1851422619615 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -478.1851422619615 L 349.8863636363636 -478.1851422619615 L 343.6363636363636 -488.1851422619615 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -475.7549162711889 L 381.02272727272725 -485.7549162711889 L 393.52272727272725 -485.7549162711889 L 393.52272727272725 -475.7549162711889 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -475.7549162711889 L 393.52272727272725 -475.7549162711889 L 387.27272727272725 -485.7549162711889 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -486.70707018843564 L 424.6590909090909 -496.70707018843564 L 437.1590909090909 -496.70707018843564 L 437.1590909090909 -486.70707018843564 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -486.70707018843564 L 437.1590909090909 -486.70707018843564 L 430.9090909090909 -496.70707018843564 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -472.87608282660835 L 468.2954545454545 -482.87608282660835 L 480.7954545454545 -482.87608282660835 L 480.7954545454545 -472.87608282660835 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -472.87608282660835 L 480.7954545454545 -472.87608282660835 L 474.5454545454545 -482.87608282660835 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -505.0370416553585 L 511.9318181818182 -515.0370416553585 L 524.4318181818182 -515.0370416553585 L 524.4318181818182 -505.0370416553585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -505.0370416553585 L 524.4318181818182 -505.0370416553585 L 518.1818181818182 -515.0370416553585 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -494.2220518876574 L 555.5681818181818 -504.2220518876574 L 568.0681818181818 -504.2220518876574 L 568.0681818181818 -494.2220518876574 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -494.2220518876574 L 568.0681818181818 -494.2220518876574 L 561.8181818181818 -504.2220518876574 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -479.9715035978083 L 599.2045454545455 -489.9715035978083 L 611.7045454545455 -489.9715035978083 L 611.7045454545455 -479.9715035978083 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -479.9715035978083 L 611.7045454545455 -479.9715035978083 L 605.4545454545455 -489.9715035978083 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -474.49946087887747 L 642.840909090909 -484.49946087887747 L 655.340909090909 -484.49946087887747 L 655.340909090909 -474.49946087887747 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -474.49946087887747 L 655.340909090909 -474.49946087887747 L 649.090909090909 -484.49946087887747 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -514.786992144235 L 686.4772727272727 -524.786992144235 L 698.9772727272727 -524.786992144235 L 698.9772727272727 -514.786992144235 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -514.786992144235 L 698.9772727272727 -514.786992144235 L 692.7272727272727 -524.786992144235 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -512.5882948369067 L 387.27272727272725 -475.258668114103 L 430.9090909090909 -492.07176545663924 L 474.5454545454545 -476.649673960083 L 518.1818181818182 -497.53412600030805 L 561.8181818181818 -488.8233956562241 L 605.4545454545455 -481.39716723023776 L 649.090909090909 -475.86057667622663 L 692.7272727272727 -508.4443238247526 L 736.3636363636364 -501.9362883527832" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -507.58829483690664 L 337.3863636363636 -517.5882948369067 L 349.8863636363636 -517.5882948369067 L 349.8863636363636 -507.58829483690664 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -507.58829483690664 L 337.3863636363636 -517.5882948369067 L 349.8863636363636 -517.5882948369067 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -470.258668114103 L 381.02272727272725 -480.258668114103 L 393.52272727272725 -480.258668114103 L 393.52272727272725 -470.258668114103 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -470.258668114103 L 381.02272727272725 -480.258668114103 L 393.52272727272725 -480.258668114103 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -487.07176545663924 L 424.6590909090909 -497.07176545663924 L 437.1590909090909 -497.07176545663924 L 437.1590909090909 -487.07176545663924 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -487.07176545663924 L 424.6590909090909 -497.07176545663924 L 437.1590909090909 -497.07176545663924 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -471.649673960083 L 468.2954545454545 -481.649673960083 L 480.7954545454545 -481.649673960083 L 480.7954545454545 -471.649673960083 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -471.649673960083 L 468.2954545454545 -481.649673960083 L 480.7954545454545 -481.649673960083 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -492.53412600030805 L 511.9318181818182 -502.53412600030805 L 524.4318181818182 -502.53412600030805 L 524.4318181818182 -492.53412600030805 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -492.53412600030805 L 511.9318181818182 -502.53412600030805 L 524.4318181818182 -502.53412600030805 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -483.8233956562241 L 555.5681818181818 -493.8233956562241 L 568.0681818181818 -493.8233956562241 L 568.0681818181818 -483.8233956562241 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -483.8233956562241 L 555.5681818181818 -493.8233956562241 L 568.0681818181818 -493.8233956562241 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -476.39716723023776 L 599.2045454545455 -486.39716723023776 L 611.7045454545455 -486.39716723023776 L 611.7045454545455 -476.39716723023776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -476.39716723023776 L 599.2045454545455 -486.39716723023776 L 611.7045454545455 -486.39716723023776 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -470.86057667622663 L 642.840909090909 -480.86057667622663 L 655.340909090909 -480.86057667622663 L 655.340909090909 -470.86057667622663 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -470.86057667622663 L 642.840909090909 -480.86057667622663 L 655.340909090909 -480.86057667622663 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -503.4443238247526 L 686.4772727272727 -513.4443238247526 L 698.9772727272727 -513.4443238247526 L 698.9772727272727 -503.4443238247526 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -503.4443238247526 L 686.4772727272727 -513.4443238247526 L 698.9772727272727 -513.4443238247526 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -496.9362883527832 L 730.1136363636364 -506.9362883527832 L 742.6136363636364 -506.9362883527832 L 742.6136363636364 -496.9362883527832 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -496.9362883527832 L 730.1136363636364 -506.9362883527832 L 742.6136363636364 -506.9362883527832 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -506.4207491949858 L 387.27272727272725 -466.90456455883754 L 430.9090909090909 -480.3369690390441 L 474.5454545454545 -465.3086193364776 L 518.1818181818182 -488.0762544651698 L 561.8181818181818 -478.3004848422612 L 605.4545454545455 -470.98882882354235 L 649.090909090909 -467.0433424042601 L 692.7272727272727 -498.1215112995386 L 736.3636363636364 -491.9749437040188" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -501.4207491949858 L 337.3863636363636 -511.4207491949858 L 349.8863636363636 -511.4207491949858 L 349.8863636363636 -501.4207491949858 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -501.4207491949858 L 337.3863636363636 -511.4207491949858 L 349.8863636363636 -511.4207491949858 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -461.90456455883754 L 381.02272727272725 -471.90456455883754 L 393.52272727272725 -471.90456455883754 L 393.52272727272725 -461.90456455883754 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -461.90456455883754 L 381.02272727272725 -471.90456455883754 L 393.52272727272725 -471.90456455883754 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -475.3369690390441 L 424.6590909090909 -485.3369690390441 L 437.1590909090909 -485.3369690390441 L 437.1590909090909 -475.3369690390441 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -475.3369690390441 L 424.6590909090909 -485.3369690390441 L 437.1590909090909 -485.3369690390441 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -460.3086193364776 L 468.2954545454545 -470.3086193364776 L 480.7954545454545 -470.3086193364776 L 480.7954545454545 -460.3086193364776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -460.3086193364776 L 468.2954545454545 -470.3086193364776 L 480.7954545454545 -470.3086193364776 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -483.0762544651698 L 511.9318181818182 -493.0762544651698 L 524.4318181818182 -493.0762544651698 L 524.4318181818182 -483.0762544651698 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -483.0762544651698 L 511.9318181818182 -493.0762544651698 L 524.4318181818182 -493.0762544651698 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -473.3004848422612 L 555.5681818181818 -483.3004848422612 L 568.0681818181818 -483.3004848422612 L 568.0681818181818 -473.3004848422612 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -473.3004848422612 L 555.5681818181818 -483.3004848422612 L 568.0681818181818 -483.3004848422612 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -465.98882882354235 L 599.2045454545455 -475.98882882354235 L 611.7045454545455 -475.98882882354235 L 611.7045454545455 -465.98882882354235 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -465.98882882354235 L 599.2045454545455 -475.98882882354235 L 611.7045454545455 -475.98882882354235 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -462.0433424042601 L 642.840909090909 -472.0433424042601 L 655.340909090909 -472.0433424042601 L 655.340909090909 -462.0433424042601 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -462.0433424042601 L 642.840909090909 -472.0433424042601 L 655.340909090909 -472.0433424042601 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -493.1215112995386 L 686.4772727272727 -503.1215112995386 L 698.9772727272727 -503.1215112995386 L 698.9772727272727 -493.1215112995386 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -493.1215112995386 L 686.4772727272727 -503.1215112995386 L 698.9772727272727 -503.1215112995386 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -486.9749437040188 L 730.1136363636364 -496.9749437040188 L 742.6136363636364 -496.9749437040188 L 742.6136363636364 -486.9749437040188 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -486.9749437040188 L 730.1136363636364 -496.9749437040188 L 742.6136363636364 -496.9749437040188 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -471.5487812928638 L 387.27272727272725 -466.39140926994935 L 430.9090909090909 -482.4492969420463 L 474.5454545454545 -463.4948251707217 L 518.1818181818182 -455.0861786948134 L 561.8181818181818 -479.44459521905924 L 605.4545454545455 -472.74775732948 L 649.090909090909 -467.0433424042601 L 692.7272727272727 -464.4243139958777 L 736.3636363636364 -465.41835065611406" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 338.6363636363636 -466.5487812928638 L 348.6363636363636 -476.5487812928638" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -466.5487812928638 L 338.6363636363636 -476.5487812928638" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -461.39140926994935 L 392.27272727272725 -471.39140926994935" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -461.39140926994935 L 382.27272727272725 -471.39140926994935" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -477.4492969420463 L 435.9090909090909 -487.4492969420463" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -477.4492969420463 L 425.9090909090909 -487.4492969420463" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -458.4948251707217 L 479.5454545454545 -468.4948251707217" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -458.4948251707217 L 469.5454545454545 -468.4948251707217" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -450.0861786948134 L 523.1818181818182 -460.0861786948134" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -450.0861786948134 L 513.1818181818182 -460.0861786948134" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -474.44459521905924 L 566.8181818181818 -484.44459521905924" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -474.44459521905924 L 556.8181818181818 -484.44459521905924" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -467.74775732948 L 610.4545454545455 -477.74775732948" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -467.74775732948 L 600.4545454545455 -477.74775732948" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -462.0433424042601 L 654.090909090909 -472.0433424042601" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -462.0433424042601 L 644.090909090909 -472.0433424042601" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -459.4243139958777 L 697.7272727272727 -469.4243139958777" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -459.4243139958777 L 687.7272727272727 -469.4243139958777" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -460.41835065611406 L 741.3636363636364 -470.41835065611406" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -460.41835065611406 L 731.3636363636364 -470.41835065611406" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip39);">
+ <path d="M 343.6363636363636 -457.8959459558581 L 387.27272727272725 -450.4056538035545 L 430.9090909090909 -460.48286181628805 L 474.5454545454545 -448.2397511974357 L 518.1818181818182 -441.7717353832161 L 561.8181818181818 -462.2232328196401 L 605.4545454545455 -454.531067313123 L 649.090909090909 -450.5420111051616 L 692.7272727272727 -448.90685307299043 L 736.3636363636364 -445.7194809767261" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip40);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 336.4935064935065 -450.75308881300094 L 336.4935064935065 -465.0388030987152 L 350.7792207792208 -465.0388030987152 L 350.7792207792208 -450.75308881300094 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -457.8959459558581 L 343.6363636363636 -465.0388030987152 L 350.7792207792208 -457.8959459558581 L 343.6363636363636 -450.75308881300094 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 380.12987012987014 -443.2627966606974 L 380.12987012987014 -457.5485109464117 L 394.4155844155844 -457.5485109464117 L 394.4155844155844 -443.2627966606974 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -450.4056538035545 L 387.27272727272725 -457.5485109464117 L 394.4155844155844 -450.4056538035545 L 387.27272727272725 -443.2627966606974 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 423.76623376623377 -453.34000467343094 L 423.76623376623377 -467.62571895914516 L 438.05194805194805 -467.62571895914516 L 438.05194805194805 -453.34000467343094 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -460.48286181628805 L 430.9090909090909 -467.62571895914516 L 438.05194805194805 -460.48286181628805 L 430.9090909090909 -453.34000467343094 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 467.4025974025974 -441.09689405457857 L 467.4025974025974 -455.3826083402928 L 481.68831168831167 -455.3826083402928 L 481.68831168831167 -441.09689405457857 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -448.2397511974357 L 474.5454545454545 -455.3826083402928 L 481.68831168831167 -448.2397511974357 L 474.5454545454545 -441.09689405457857 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 511.038961038961 -434.628878240359 L 511.038961038961 -448.9145925260732 L 525.3246753246754 -448.9145925260732 L 525.3246753246754 -434.628878240359 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -441.7717353832161 L 518.1818181818182 -448.9145925260732 L 525.3246753246754 -441.7717353832161 L 518.1818181818182 -434.628878240359 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 554.6753246753246 -455.080375676783 L 554.6753246753246 -469.36608996249726 L 568.961038961039 -469.36608996249726 L 568.961038961039 -455.080375676783 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -462.2232328196401 L 561.8181818181818 -469.36608996249726 L 568.961038961039 -462.2232328196401 L 561.8181818181818 -455.080375676783 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 598.3116883116883 -447.3882101702659 L 598.3116883116883 -461.6739244559801 L 612.5974025974026 -461.6739244559801 L 612.5974025974026 -447.3882101702659 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -454.531067313123 L 605.4545454545455 -461.6739244559801 L 612.5974025974026 -454.531067313123 L 605.4545454545455 -447.3882101702659 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 641.9480519480519 -443.39915396230447 L 641.9480519480519 -457.68486824801874 L 656.2337662337662 -457.68486824801874 L 656.2337662337662 -443.39915396230447 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -450.5420111051616 L 649.090909090909 -457.68486824801874 L 656.2337662337662 -450.5420111051616 L 649.090909090909 -443.39915396230447 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip49);">
+ <path d="M 685.5844155844156 -441.76399593013326 L 685.5844155844156 -456.04971021584754 L 699.8701298701299 -456.04971021584754 L 699.8701298701299 -441.76399593013326 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -448.90685307299043 L 692.7272727272727 -456.04971021584754 L 699.8701298701299 -448.90685307299043 L 692.7272727272727 -441.76399593013326 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip50);">
+ <path d="M 729.2207792207791 -438.57662383386895 L 729.2207792207791 -452.8623381195832 L 743.5064935064936 -452.8623381195832 L 743.5064935064936 -438.57662383386895 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -445.7194809767261 L 736.3636363636364 -452.8623381195832 L 743.5064935064936 -445.7194809767261 L 736.3636363636364 -438.57662383386895 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 290 -34 L 290 -136 L 708.4 -136 L 708.4 -34 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip53);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -60.33333333333334 L 313.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -60.33333333333334 L 303.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 300.85714285714283 -38.190476190476204 L 300.85714285714283 -52.47619047619048 L 315.14285714285717 -52.47619047619048 L 315.14285714285717 -38.190476190476204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -45.33333333333334 L 308.0 -52.47619047619048 L 315.14285714285717 -45.33333333333334 L 308.0 -38.190476190476204 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdf b/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdf
new file mode 100644
index 0000000000..364e30c738
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.png b/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.png
new file mode 100644
index 0000000000..d36c47eb41
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg b/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg
new file mode 100644
index 0000000000..62746f9048
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg
@@ -0,0 +1,402 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 496" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -452.03574684817806 L 349.8863636363636 -452.03574684817806 L 343.6363636363636 -462.03574684817806 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -449.9524318546232 L 393.52272727272725 -449.9524318546232 L 387.27272727272725 -459.9524318546232 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -459.34118275851233 L 437.1590909090909 -459.34118275851233 L 430.9090909090909 -469.34118275851233 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -447.48454742666706 L 480.7954545454545 -447.48454742666706 L 474.5454545454545 -457.48454742666706 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -475.0545791806835 L 524.4318181818182 -475.0545791806835 L 518.1818181818182 -485.0545791806835 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -465.7834124563775 L 568.0681818181818 -465.7834124563775 L 561.8181818181818 -475.7834124563775 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -453.56710786933695 L 611.7045454545455 -453.56710786933695 L 605.4545454545455 -463.56710786933695 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -448.87619077561544 L 655.340909090909 -448.87619077561544 L 649.090909090909 -458.87619077561544 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -483.41273933410884 L 698.9772727272727 -483.41273933410884 L 692.7272727272727 -493.41273933410884 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -483.59534064828495 L 742.6136363636364 -483.59534064828495 L 736.3636363636364 -493.59534064828495 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 337.3863636363636 -407.2468261703399 L 349.8863636363636 -407.2468261703399 L 343.6363636363636 -417.2468261703399 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 381.02272727272725 -412.45746533781875 L 393.52272727272725 -412.45746533781875 L 387.27272727272725 -422.45746533781875 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 424.6590909090909 -435.8506303643852 L 437.1590909090909 -435.8506303643852 L 430.9090909090909 -445.8506303643852 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 468.2954545454545 -417.1124155060207 L 480.7954545454545 -417.1124155060207 L 474.5454545454545 -427.1124155060207 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.9318181818182 -482.1815638067093 L 524.4318181818182 -482.1815638067093 L 518.1818181818182 -492.1815638067093 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 555.5681818181818 -462.07051906812967 L 568.0681818181818 -462.07051906812967 L 561.8181818181818 -472.07051906812967 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.2045454545455 -447.84006665199485 L 611.7045454545455 -447.84006665199485 L 605.4545454545455 -457.84006665199485 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 642.840909090909 -437.40274153488224 L 655.340909090909 -437.40274153488224 L 649.090909090909 -447.40274153488224 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 686.4772727272727 -515.0 L 698.9772727272727 -515.0 L 692.7272727272727 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 730.1136363636364 -498.1162951551545 L 742.6136363636364 -498.1162951551545 L 736.3636363636364 -508.1162951551545 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 290 -54 L 290 -136 L 763.568 -136 L 763.568 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 3.18e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 6.36e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 9.54e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.27e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.59e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -457.03574684817806 L 387.27272727272725 -454.9524318546232 L 430.9090909090909 -464.34118275851233 L 474.5454545454545 -452.48454742666706 L 518.1818181818182 -480.0545791806835 L 561.8181818181818 -470.7834124563775 L 605.4545454545455 -458.56710786933695 L 649.090909090909 -453.87619077561544 L 692.7272727272727 -488.41273933410884 L 736.3636363636364 -488.59534064828495" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -452.03574684817806 L 337.3863636363636 -462.03574684817806 L 349.8863636363636 -462.03574684817806 L 349.8863636363636 -452.03574684817806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -452.03574684817806 L 349.8863636363636 -452.03574684817806 L 343.6363636363636 -462.03574684817806 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -449.9524318546232 L 381.02272727272725 -459.9524318546232 L 393.52272727272725 -459.9524318546232 L 393.52272727272725 -449.9524318546232 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -449.9524318546232 L 393.52272727272725 -449.9524318546232 L 387.27272727272725 -459.9524318546232 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -459.34118275851233 L 424.6590909090909 -469.34118275851233 L 437.1590909090909 -469.34118275851233 L 437.1590909090909 -459.34118275851233 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -459.34118275851233 L 437.1590909090909 -459.34118275851233 L 430.9090909090909 -469.34118275851233 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -447.48454742666706 L 468.2954545454545 -457.48454742666706 L 480.7954545454545 -457.48454742666706 L 480.7954545454545 -447.48454742666706 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -447.48454742666706 L 480.7954545454545 -447.48454742666706 L 474.5454545454545 -457.48454742666706 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -475.0545791806835 L 511.9318181818182 -485.0545791806835 L 524.4318181818182 -485.0545791806835 L 524.4318181818182 -475.0545791806835 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -475.0545791806835 L 524.4318181818182 -475.0545791806835 L 518.1818181818182 -485.0545791806835 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -465.7834124563775 L 555.5681818181818 -475.7834124563775 L 568.0681818181818 -475.7834124563775 L 568.0681818181818 -465.7834124563775 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -465.7834124563775 L 568.0681818181818 -465.7834124563775 L 561.8181818181818 -475.7834124563775 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -453.56710786933695 L 599.2045454545455 -463.56710786933695 L 611.7045454545455 -463.56710786933695 L 611.7045454545455 -453.56710786933695 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -453.56710786933695 L 611.7045454545455 -453.56710786933695 L 605.4545454545455 -463.56710786933695 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -448.87619077561544 L 642.840909090909 -458.87619077561544 L 655.340909090909 -458.87619077561544 L 655.340909090909 -448.87619077561544 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -448.87619077561544 L 655.340909090909 -448.87619077561544 L 649.090909090909 -458.87619077561544 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -483.41273933410884 L 686.4772727272727 -493.41273933410884 L 698.9772727272727 -493.41273933410884 L 698.9772727272727 -483.41273933410884 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -483.41273933410884 L 698.9772727272727 -483.41273933410884 L 692.7272727272727 -493.41273933410884 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -483.59534064828495 L 730.1136363636364 -493.59534064828495 L 742.6136363636364 -493.59534064828495 L 742.6136363636364 -483.59534064828495 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -483.59534064828495 L 742.6136363636364 -483.59534064828495 L 736.3636363636364 -493.59534064828495 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -412.2468261703399 L 387.27272727272725 -417.45746533781875 L 430.9090909090909 -440.8506303643852 L 474.5454545454545 -422.1124155060207 L 518.1818181818182 -487.1815638067093 L 561.8181818181818 -467.07051906812967 L 605.4545454545455 -452.84006665199485 L 649.090909090909 -442.40274153488224 L 692.7272727272727 -520.0 L 736.3636363636364 -503.1162951551545" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -407.2468261703399 L 337.3863636363636 -417.2468261703399 L 349.8863636363636 -417.2468261703399 L 349.8863636363636 -407.2468261703399 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -407.2468261703399 L 349.8863636363636 -407.2468261703399 L 343.6363636363636 -417.2468261703399 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -412.45746533781875 L 381.02272727272725 -422.45746533781875 L 393.52272727272725 -422.45746533781875 L 393.52272727272725 -412.45746533781875 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -412.45746533781875 L 393.52272727272725 -412.45746533781875 L 387.27272727272725 -422.45746533781875 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -435.8506303643852 L 424.6590909090909 -445.8506303643852 L 437.1590909090909 -445.8506303643852 L 437.1590909090909 -435.8506303643852 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -435.8506303643852 L 437.1590909090909 -435.8506303643852 L 430.9090909090909 -445.8506303643852 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -417.1124155060207 L 468.2954545454545 -427.1124155060207 L 480.7954545454545 -427.1124155060207 L 480.7954545454545 -417.1124155060207 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -417.1124155060207 L 480.7954545454545 -417.1124155060207 L 474.5454545454545 -427.1124155060207 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -482.1815638067093 L 511.9318181818182 -492.1815638067093 L 524.4318181818182 -492.1815638067093 L 524.4318181818182 -482.1815638067093 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -482.1815638067093 L 524.4318181818182 -482.1815638067093 L 518.1818181818182 -492.1815638067093 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -462.07051906812967 L 555.5681818181818 -472.07051906812967 L 568.0681818181818 -472.07051906812967 L 568.0681818181818 -462.07051906812967 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -462.07051906812967 L 568.0681818181818 -462.07051906812967 L 561.8181818181818 -472.07051906812967 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -447.84006665199485 L 599.2045454545455 -457.84006665199485 L 611.7045454545455 -457.84006665199485 L 611.7045454545455 -447.84006665199485 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -447.84006665199485 L 611.7045454545455 -447.84006665199485 L 605.4545454545455 -457.84006665199485 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -437.40274153488224 L 642.840909090909 -447.40274153488224 L 655.340909090909 -447.40274153488224 L 655.340909090909 -437.40274153488224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -437.40274153488224 L 655.340909090909 -437.40274153488224 L 649.090909090909 -447.40274153488224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -515.0 L 686.4772727272727 -525.0 L 698.9772727272727 -525.0 L 698.9772727272727 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -515.0 L 698.9772727272727 -515.0 L 692.7272727272727 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -498.1162951551545 L 730.1136363636364 -508.1162951551545 L 742.6136363636364 -508.1162951551545 L 742.6136363636364 -498.1162951551545 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -498.1162951551545 L 742.6136363636364 -498.1162951551545 L 736.3636363636364 -508.1162951551545 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -447.0604583896627 L 387.27272727272725 -442.6392932373377 L 430.9090909090909 -456.4049423082969 L 474.5454545454545 -440.1561920332002 L 518.1818181818182 -432.9478668217688 L 561.8181818181818 -453.8291571037822 L 605.4545454545455 -448.088282453548 L 649.090909090909 -443.19816392617975 L 692.7272727272727 -440.952997767787 L 736.3636363636364 -441.8051372339422" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 338.6363636363636 -442.0604583896627 L 348.6363636363636 -452.0604583896627" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -442.0604583896627 L 338.6363636363636 -452.0604583896627" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -437.6392932373377 L 392.27272727272725 -447.6392932373377" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -437.6392932373377 L 382.27272727272725 -447.6392932373377" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -451.4049423082969 L 435.9090909090909 -461.4049423082969" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -451.4049423082969 L 425.9090909090909 -461.4049423082969" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -435.1561920332002 L 479.5454545454545 -445.1561920332002" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -435.1561920332002 L 469.5454545454545 -445.1561920332002" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -427.9478668217688 L 523.1818181818182 -437.9478668217688" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -427.9478668217688 L 513.1818181818182 -437.9478668217688" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -448.8291571037822 L 566.8181818181818 -458.8291571037822" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -448.8291571037822 L 556.8181818181818 -458.8291571037822" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -443.088282453548 L 610.4545454545455 -453.088282453548" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -443.088282453548 L 600.4545454545455 -453.088282453548" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -438.19816392617975 L 654.090909090909 -448.19816392617975" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -438.19816392617975 L 644.090909090909 -448.19816392617975" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -435.952997767787 L 697.7272727272727 -445.952997767787" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -435.952997767787 L 687.7272727272727 -445.952997767787" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -436.8051372339422 L 741.3636363636364 -446.8051372339422" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -436.8051372339422 L 731.3636363636364 -446.8051372339422" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 343.6363636363636 -300.0 L 387.27272727272725 -369.8324142484359 L 430.9090909090909 -386.9352406702927 L 474.5454545454545 -371.3197849529978 L 518.1818181818182 -362.24270129216836 L 561.8181818181818 -423.17233313421576 L 605.4545454545455 -409.7272047033672 L 649.090909090909 -399.2404942308297 L 692.7272727272727 -389.52347596441035 L 736.3636363636364 -383.3339830854843" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <path d="M 338.6363636363636 -295.0 L 348.6363636363636 -305.0" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -295.0 L 338.6363636363636 -305.0" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -364.8324142484359 L 392.27272727272725 -374.8324142484359" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -364.8324142484359 L 382.27272727272725 -374.8324142484359" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -381.9352406702927 L 435.9090909090909 -391.9352406702927" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -381.9352406702927 L 425.9090909090909 -391.9352406702927" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -366.3197849529978 L 479.5454545454545 -376.3197849529978" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -366.3197849529978 L 469.5454545454545 -376.3197849529978" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -357.24270129216836 L 523.1818181818182 -367.24270129216836" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -357.24270129216836 L 513.1818181818182 -367.24270129216836" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -418.17233313421576 L 566.8181818181818 -428.17233313421576" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -418.17233313421576 L 556.8181818181818 -428.17233313421576" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -404.7272047033672 L 610.4545454545455 -414.7272047033672" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -404.7272047033672 L 600.4545454545455 -414.7272047033672" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -394.2404942308297 L 654.090909090909 -404.2404942308297" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -394.2404942308297 L 644.090909090909 -404.2404942308297" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -384.52347596441035 L 697.7272727272727 -394.52347596441035" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -384.52347596441035 L 687.7272727272727 -394.52347596441035" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -378.3339830854843 L 741.3636363636364 -388.3339830854843" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -378.3339830854843 L 731.3636363636364 -388.3339830854843" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 290 -54 L 290 -136 L 763.568 -136 L 763.568 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -80.33333333333334 L 313.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -80.33333333333334 L 303.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -60.33333333333334 L 313.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -60.33333333333334 L 303.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdf b/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdf
new file mode 100644
index 0000000000..b9581c2ab6
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png b/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png
new file mode 100644
index 0000000000..f827f6e0b0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg b/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg
new file mode 100644
index 0000000000..cedb955111
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="924pt" height="436pt" viewBox="0.00 0.00 924.00 436.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 432)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-432 921,-432 921,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="0.5,-114 0.5,-134 143.5,-134 143.5,-114 0.5,-114"/>
+<text text-anchor="middle" x="72" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::container_tag</text>
+</g>
+<!-- Node2 -->
+<g id="node3" class="node"><title>Node2</title>
+<a xlink:href="a00181.html" target="_top" xlink:title="Basic associative-container.">
+<polygon fill="white" stroke="black" points="187,-247 187,-267 337,-267 337,-247 187,-247"/>
+<text text-anchor="middle" x="262" y="-254.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::associative_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node2 -->
+<g id="edge2" class="edge"><title>Node1-&gt;Node2</title>
+<path fill="none" stroke="midnightblue" d="M94.8477,-139.993C134.478,-167.735 214.859,-224.001 247.617,-246.932"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="96.793,-137.083 86.5935,-134.215 92.7787,-142.817 96.793,-137.083"/>
+</g>
+<!-- Node14 -->
+<g id="node27" class="node"><title>Node14</title>
+<a xlink:href="a00353.html" target="_top" xlink:title="Basic priority-queue.">
+<polygon fill="white" stroke="black" points="180,-114 180,-134 344,-134 344,-114 180,-114"/>
+<text text-anchor="middle" x="262" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::priority_queue_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node14 -->
+<g id="edge26" class="edge"><title>Node1-&gt;Node14</title>
+<path fill="none" stroke="midnightblue" d="M153.696,-124C162.404,-124 171.265,-124 179.978,-124"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="153.56,-120.5 143.56,-124 153.56,-127.5 153.56,-120.5"/>
+</g>
+<!-- Node20 -->
+<g id="node39" class="node"><title>Node20</title>
+<a xlink:href="a00370.html" target="_top" xlink:title="Basic sequence.">
+<polygon fill="white" stroke="black" points="190,-38 190,-58 334,-58 334,-38 190,-38"/>
+<text text-anchor="middle" x="262" y="-45.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::sequence_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node20 -->
+<g id="edge38" class="edge"><title>Node1-&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M106.781,-110.088C144.452,-95.0192 203.618,-71.3528 236.968,-58.0129"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="105.215,-106.944 97.2305,-113.908 107.815,-113.443 105.215,-106.944"/>
+</g>
+<!-- Node3 -->
+<g id="node5" class="node"><title>Node3</title>
+<a xlink:href="a00183.html" target="_top" xlink:title="Basic branch structure.">
+<polygon fill="white" stroke="black" points="390,-304 390,-324 550,-324 550,-304 390,-304"/>
+<text text-anchor="middle" x="470" y="-311.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::basic_branch_tag</text>
+</a>
+</g>
+<!-- Node2&#45;&gt;Node3 -->
+<g id="edge4" class="edge"><title>Node2-&gt;Node3</title>
+<path fill="none" stroke="midnightblue" d="M300.076,-270.369C323.049,-278.157 353.003,-287.824 380,-295 392.192,-298.241 405.431,-301.291 417.908,-303.959"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="300.963,-266.973 290.368,-267.049 298.698,-273.596 300.963,-266.973"/>
+</g>
+<!-- Node10 -->
+<g id="node19" class="node"><title>Node10</title>
+<a xlink:href="a00185.html" target="_top" xlink:title="Basic hash structure.">
+<polygon fill="white" stroke="black" points="395,-266 395,-286 545,-286 545,-266 395,-266"/>
+<text text-anchor="middle" x="470" y="-273.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::basic_hash_tag</text>
+</a>
+</g>
+<!-- Node2&#45;&gt;Node10 -->
+<g id="edge18" class="edge"><title>Node2-&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M347.308,-264.793C363.005,-266.226 379.29,-267.714 394.668,-269.119"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="347.37,-261.284 337.093,-263.859 346.733,-268.255 347.37,-261.284"/>
+</g>
+<!-- Node13 -->
+<g id="node25" class="node"><title>Node13</title>
+<a xlink:href="a00343.html" target="_top" xlink:title="List-update.">
+<polygon fill="white" stroke="black" points="395.5,-228 395.5,-248 544.5,-248 544.5,-228 395.5,-228"/>
+<text text-anchor="middle" x="470" y="-235.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::list_update_tag</text>
+</a>
+</g>
+<!-- Node2&#45;&gt;Node13 -->
+<g id="edge24" class="edge"><title>Node2-&gt;Node13</title>
+<path fill="none" stroke="midnightblue" d="M347.436,-249.196C363.332,-247.744 379.826,-246.237 395.366,-244.818"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="346.733,-245.745 337.093,-250.141 347.37,-252.716 346.733,-245.745"/>
+</g>
+<!-- Node4 -->
+<g id="node7" class="node"><title>Node4</title>
+<a xlink:href="a00376.html" target="_top" xlink:title="Basic tree structure.">
+<polygon fill="white" stroke="black" points="606.5,-361 606.5,-381 723.5,-381 723.5,-361 606.5,-361"/>
+<text text-anchor="middle" x="665" y="-368.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::tree_tag</text>
+</a>
+</g>
+<!-- Node3&#45;&gt;Node4 -->
+<g id="edge6" class="edge"><title>Node3-&gt;Node4</title>
+<path fill="none" stroke="midnightblue" d="M514.437,-326.989C549.695,-337.296 598.267,-351.493 630.603,-360.946"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="514.994,-323.506 504.413,-324.059 513.03,-330.224 514.994,-323.506"/>
+</g>
+<!-- Node8 -->
+<g id="node15" class="node"><title>Node8</title>
+<a xlink:href="a00381.html" target="_top" xlink:title="Basic trie structure.">
+<polygon fill="white" stroke="black" points="608.5,-304 608.5,-324 721.5,-324 721.5,-304 608.5,-304"/>
+<text text-anchor="middle" x="665" y="-311.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::trie_tag</text>
+</a>
+</g>
+<!-- Node3&#45;&gt;Node8 -->
+<g id="edge14" class="edge"><title>Node3-&gt;Node8</title>
+<path fill="none" stroke="midnightblue" d="M560.301,-314C576.675,-314 593.321,-314 608.378,-314"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="560.158,-310.5 550.158,-314 560.158,-317.5 560.158,-310.5"/>
+</g>
+<!-- Node5 -->
+<g id="node9" class="node"><title>Node5</title>
+<a xlink:href="a00348.html" target="_top" xlink:title="Ordered-vector tree.">
+<polygon fill="white" stroke="black" points="777,-408 777,-428 909,-428 909,-408 777,-408"/>
+<text text-anchor="middle" x="843" y="-415.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::ov_tree_tag</text>
+</a>
+</g>
+<!-- Node4&#45;&gt;Node5 -->
+<g id="edge8" class="edge"><title>Node4-&gt;Node5</title>
+<path fill="none" stroke="midnightblue" d="M712.14,-383.635C730.228,-388.466 751.067,-394.012 770,-399 781.144,-401.936 793.253,-405.099 804.346,-407.985"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="712.969,-380.234 702.404,-381.033 711.161,-386.996 712.969,-380.234"/>
+</g>
+<!-- Node6 -->
+<g id="node11" class="node"><title>Node6</title>
+<a xlink:href="a00356.html" target="_top" xlink:title="Red-black tree.">
+<polygon fill="white" stroke="black" points="777.5,-370 777.5,-390 908.5,-390 908.5,-370 777.5,-370"/>
+<text text-anchor="middle" x="843" y="-377.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::rb_tree_tag</text>
+</a>
+</g>
+<!-- Node4&#45;&gt;Node6 -->
+<g id="edge10" class="edge"><title>Node4-&gt;Node6</title>
+<path fill="none" stroke="midnightblue" d="M733.976,-374.488C748.188,-375.206 763.117,-375.961 777.212,-376.674"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="733.941,-370.981 723.777,-373.972 733.588,-377.972 733.941,-370.981"/>
+</g>
+<!-- Node7 -->
+<g id="node13" class="node"><title>Node7</title>
+<a xlink:href="a00371.html" target="_top" xlink:title="Splay tree.">
+<polygon fill="white" stroke="black" points="770,-332 770,-352 916,-352 916,-332 770,-332"/>
+<text text-anchor="middle" x="843" y="-339.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::splay_tree_tag</text>
+</a>
+</g>
+<!-- Node4&#45;&gt;Node7 -->
+<g id="edge12" class="edge"><title>Node4-&gt;Node7</title>
+<path fill="none" stroke="midnightblue" d="M733.937,-359.769C749.623,-357.213 766.186,-354.515 781.537,-352.014"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="733.084,-356.361 723.777,-361.424 734.21,-363.27 733.084,-356.361"/>
+</g>
+<!-- Node9 -->
+<g id="node17" class="node"><title>Node9</title>
+<a xlink:href="a00350.html" target="_top" xlink:title="PATRICIA trie.">
+<polygon fill="white" stroke="black" points="776,-294 776,-314 910,-314 910,-294 776,-294"/>
+<text text-anchor="middle" x="843" y="-301.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::pat_trie_tag</text>
+</a>
+</g>
+<!-- Node8&#45;&gt;Node9 -->
+<g id="edge16" class="edge"><title>Node8-&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M732.074,-310.232C746.397,-309.427 761.529,-308.577 775.855,-307.772"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="731.598,-306.753 721.81,-310.808 731.99,-313.742 731.598,-306.753"/>
+</g>
+<!-- Node11 -->
+<g id="node21" class="node"><title>Node11</title>
+<a xlink:href="a00191.html" target="_top" xlink:title="Collision-chaining hash.">
+<polygon fill="white" stroke="black" points="597,-266 597,-286 733,-286 733,-266 597,-266"/>
+<text text-anchor="middle" x="665" y="-273.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::cc_hash_tag</text>
+</a>
+</g>
+<!-- Node10&#45;&gt;Node11 -->
+<g id="edge20" class="edge"><title>Node10-&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M555.203,-276C569.165,-276 583.469,-276 596.944,-276"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="555.113,-272.5 545.113,-276 555.113,-279.5 555.113,-272.5"/>
+</g>
+<!-- Node12 -->
+<g id="node23" class="node"><title>Node12</title>
+<a xlink:href="a00334.html" target="_top" xlink:title="General-probing hash.">
+<polygon fill="white" stroke="black" points="596.5,-228 596.5,-248 733.5,-248 733.5,-228 596.5,-228"/>
+<text text-anchor="middle" x="665" y="-235.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::gp_hash_tag</text>
+</a>
+</g>
+<!-- Node10&#45;&gt;Node12 -->
+<g id="edge22" class="edge"><title>Node10-&gt;Node12</title>
+<path fill="none" stroke="midnightblue" d="M531.394,-264.036C557.814,-258.887 588.354,-252.936 613.561,-248.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="530.635,-260.618 521.489,-265.966 531.974,-267.489 530.635,-260.618"/>
+</g>
+<!-- Node15 -->
+<g id="node29" class="node"><title>Node15</title>
+<a xlink:href="a00187.html" target="_top" xlink:title="Binary-heap (array-based).">
+<polygon fill="white" stroke="black" points="392.5,-190 392.5,-210 547.5,-210 547.5,-190 392.5,-190"/>
+<text text-anchor="middle" x="470" y="-197.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binary_heap_tag</text>
+</a>
+</g>
+<!-- Node14&#45;&gt;Node15 -->
+<g id="edge28" class="edge"><title>Node14-&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-139.033C311.786,-151.814 347.263,-169.822 380,-181 390.277,-184.509 401.444,-187.494 412.304,-189.987"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="289.867,-135.859 279.422,-134.079 286.477,-141.984 289.867,-135.859"/>
+</g>
+<!-- Node16 -->
+<g id="node31" class="node"><title>Node16</title>
+<a xlink:href="a00188.html" target="_top" xlink:title="Binomial-heap.">
+<polygon fill="white" stroke="black" points="387.5,-152 387.5,-172 552.5,-172 552.5,-152 387.5,-152"/>
+<text text-anchor="middle" x="470" y="-159.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node14&#45;&gt;Node16 -->
+<g id="edge30" class="edge"><title>Node14-&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-135.896C355.381,-141.06 388.126,-147.042 415.132,-151.976"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="327.388,-132.388 316.922,-134.034 326.13,-139.274 327.388,-132.388"/>
+</g>
+<!-- Node17 -->
+<g id="node33" class="node"><title>Node17</title>
+<a xlink:href="a00349.html" target="_top" xlink:title="Pairing-heap.">
+<polygon fill="white" stroke="black" points="391,-114 391,-134 549,-134 549,-114 391,-114"/>
+<text text-anchor="middle" x="470" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::pairing_heap_tag</text>
+</a>
+</g>
+<!-- Node14&#45;&gt;Node17 -->
+<g id="edge32" class="edge"><title>Node14-&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M354.347,-124C366.497,-124 378.861,-124 390.766,-124"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="354.207,-120.5 344.207,-124 354.207,-127.5 354.207,-120.5"/>
+</g>
+<!-- Node18 -->
+<g id="node35" class="node"><title>Node18</title>
+<a xlink:href="a00357.html" target="_top" xlink:title="Redundant-counter binomial-heap.">
+<polygon fill="white" stroke="black" points="380.5,-76 380.5,-96 559.5,-96 559.5,-76 380.5,-76"/>
+<text text-anchor="middle" x="470" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::rc_binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node14&#45;&gt;Node18 -->
+<g id="edge34" class="edge"><title>Node14-&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-112.104C355.381,-106.94 388.126,-100.958 415.132,-96.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="326.13,-108.726 316.922,-113.966 327.388,-115.612 326.13,-108.726"/>
+</g>
+<!-- Node19 -->
+<g id="node37" class="node"><title>Node19</title>
+<a xlink:href="a00373.html" target="_top" xlink:title="Thin heap.">
+<polygon fill="white" stroke="black" points="398,-38 398,-58 542,-58 542,-38 398,-38"/>
+<text text-anchor="middle" x="470" y="-45.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::thin_heap_tag</text>
+</a>
+</g>
+<!-- Node14&#45;&gt;Node19 -->
+<g id="edge36" class="edge"><title>Node14-&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-108.967C311.786,-96.1857 347.263,-78.1778 380,-67 390.277,-63.4912 401.444,-60.5058 412.304,-58.0134"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="286.477,-106.016 279.422,-113.921 289.867,-112.141 286.477,-106.016"/>
+</g>
+<!-- Node21 -->
+<g id="node41" class="node"><title>Node21</title>
+<a xlink:href="a00372.html" target="_top" xlink:title="Basic string container, inclusive of strings, ropes, etc.">
+<polygon fill="white" stroke="black" points="407.5,-0 407.5,-20 532.5,-20 532.5,-0 407.5,-0"/>
+<text text-anchor="middle" x="470" y="-7.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::string_tag</text>
+</a>
+</g>
+<!-- Node20&#45;&gt;Node21 -->
+<g id="edge40" class="edge"><title>Node20-&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-36.1041C355.381,-30.9399 388.126,-24.9578 415.132,-20.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="326.13,-32.726 316.922,-37.9662 327.388,-39.612 326.13,-32.726"/>
+</g>
+</g>
+</svg> \ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png b/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png
new file mode 100644
index 0000000000..adee126360
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png b/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png
new file mode 100644
index 0000000000..9d84791fc0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png b/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png
new file mode 100644
index 0000000000..9470a65b56
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png b/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png
new file mode 100644
index 0000000000..d2ac91c1ab
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png b/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png
new file mode 100644
index 0000000000..08ecb0ffe1
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdf b/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdf
new file mode 100644
index 0000000000..ccc3001173
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png b/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png
new file mode 100644
index 0000000000..a7c3383825
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg b/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg
new file mode 100644
index 0000000000..ac6067ad80
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="430pt" height="204pt" viewBox="0.00 0.00 430.00 204.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 200)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-200 427,-200 427,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="136,-59 136,-79 286,-79 286,-59 136,-59"/>
+<text text-anchor="middle" x="211" y="-66.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::container_error</text>
+</g>
+<!-- Node4 -->
+<g id="node7" class="node"><title>Node4</title>
+<a xlink:href="a00339.html" target="_top" xlink:title="An entry cannot be inserted into a container object for logical reasons (not, e.g., if memory is unabvailable, in which case the allocator_type's exception will be thrown).">
+<polygon fill="white" stroke="black" points="0,-1 0,-21 132,-21 132,-1 0,-1"/>
+<text text-anchor="middle" x="66" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::insert_error</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node4 -->
+<g id="edge6" class="edge"><title>Node1-&gt;Node4</title>
+<path fill="none" stroke="midnightblue" d="M176.225,-55.0898C150.121,-44.6486 114.974,-30.5898 91.4542,-21.1817"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="175.158,-58.4329 185.743,-58.8972 177.758,-51.9335 175.158,-58.4329"/>
+</g>
+<!-- Node5 -->
+<g id="node9" class="node"><title>Node5</title>
+<a xlink:href="a00340.html" target="_top" xlink:title="A join cannot be performed logical reasons (i.e., the ranges of the two container objects being joine...">
+<polygon fill="white" stroke="black" points="150,-1 150,-21 272,-21 272,-1 150,-1"/>
+<text text-anchor="middle" x="211" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::join_error</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node5 -->
+<g id="edge8" class="edge"><title>Node1-&gt;Node5</title>
+<path fill="none" stroke="midnightblue" d="M211,-48.8902C211,-39.6201 211,-29.0083 211,-21.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="207.5,-48.8971 211,-58.8972 214.5,-48.8972 207.5,-48.8971"/>
+</g>
+<!-- Node6 -->
+<g id="node11" class="node"><title>Node6</title>
+<a xlink:href="a00358.html" target="_top" xlink:title="A container cannot be resized.">
+<polygon fill="white" stroke="black" points="290,-1 290,-21 422,-21 422,-1 290,-1"/>
+<text text-anchor="middle" x="356" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::resize_error</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node6 -->
+<g id="edge10" class="edge"><title>Node1-&gt;Node6</title>
+<path fill="none" stroke="midnightblue" d="M245.775,-55.0898C271.879,-44.6486 307.026,-30.5898 330.546,-21.1817"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="244.242,-51.9335 236.257,-58.8972 246.842,-58.4329 244.242,-51.9335"/>
+</g>
+<!-- Node2 -->
+<g id="node2" class="node"><title>Node2</title>
+<a xlink:href="a00771.html" target="_top" xlink:title="One of two subclasses of exception.">
+<polygon fill="white" stroke="black" points="167.5,-117 167.5,-137 254.5,-137 254.5,-117 167.5,-117"/>
+<text text-anchor="middle" x="211" y="-124.9" font-family="FreeSans" font-size="9.00">std::logic_error</text>
+</a>
+</g>
+<!-- Node2&#45;&gt;Node1 -->
+<g id="edge2" class="edge"><title>Node2-&gt;Node1</title>
+<path fill="none" stroke="midnightblue" d="M211,-106.89C211,-97.6201 211,-87.0083 211,-79.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="207.5,-106.897 211,-116.897 214.5,-106.897 207.5,-106.897"/>
+</g>
+<!-- Node3 -->
+<g id="node4" class="node"><title>Node3</title>
+<a xlink:href="a00647.html" target="_top" xlink:title="Base class for all library exceptions.">
+<polygon fill="white" stroke="black" points="169.5,-175 169.5,-195 252.5,-195 252.5,-175 169.5,-175"/>
+<text text-anchor="middle" x="211" y="-182.9" font-family="FreeSans" font-size="9.00">std::exception</text>
+</a>
+</g>
+<!-- Node3&#45;&gt;Node2 -->
+<g id="edge4" class="edge"><title>Node3-&gt;Node2</title>
+<path fill="none" stroke="midnightblue" d="M211,-164.89C211,-155.62 211,-145.008 211,-137.378"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="207.5,-164.897 211,-174.897 214.5,-164.897 207.5,-164.897"/>
+</g>
+</g>
+</svg> \ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdf b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdf
new file mode 100644
index 0000000000..27ccb3286c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.png b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.png
new file mode 100644
index 0000000000..66aa0481cd
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg
new file mode 100644
index 0000000000..f8dafcfee8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg
@@ -0,0 +1,365 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -510.0304052177379 L 349.8863636363636 -510.0304052177379 L 343.6363636363636 -520.0304052177379 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -515.0 L 393.52272727272725 -515.0 L 387.27272727272725 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -488.12479373139496 L 437.1590909090909 -488.12479373139496 L 430.9090909090909 -498.12479373139496 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -512.1877542617952 L 480.7954545454545 -512.1877542617952 L 474.5454545454545 -522.1877542617952 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -478.91454516343003 L 524.4318181818182 -478.91454516343003 L 518.1818181818182 -488.91454516343003 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -485.63676139501297 L 568.0681818181818 -485.63676139501297 L 561.8181818181818 -495.63676139501297 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -495.1374361588456 L 611.7045454545455 -495.1374361588456 L 605.4545454545455 -505.1374361588456 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -506.73076106171555 L 655.340909090909 -506.73076106171555 L 649.090909090909 -516.7307610617156 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -471.9982322167871 L 698.9772727272727 -471.9982322167871 L 692.7272727272727 -481.9982322167871 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -476.39128786764826 L 742.6136363636364 -476.39128786764826 L 736.3636363636364 -486.39128786764826 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -423.3640653132178 L 337.3863636363636 -433.3640653132178 L 349.8863636363636 -433.3640653132178 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -426.75860119660297 L 381.02272727272725 -436.75860119660297 L 393.52272727272725 -436.75860119660297 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -422.01185819829885 L 424.6590909090909 -432.01185819829885 L 437.1590909090909 -432.01185819829885 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -423.55241101449843 L 468.2954545454545 -433.55241101449843 L 480.7954545454545 -433.55241101449843 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -423.36047092960564 L 511.9318181818182 -433.36047092960564 L 524.4318181818182 -433.36047092960564 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -423.6674312900896 L 555.5681818181818 -433.6674312900896 L 568.0681818181818 -433.6674312900896 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -424.42081409521194 L 599.2045454545455 -434.42081409521194 L 611.7045454545455 -434.42081409521194 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -426.1820620652021 L 642.840909090909 -436.1820620652021 L 655.340909090909 -436.1820620652021 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -427.6902654288916 L 686.4772727272727 -437.6902654288916 L 698.9772727272727 -437.6902654288916 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -431.25733172566356 L 730.1136363636364 -441.25733172566356 L 742.6136363636364 -441.25733172566356 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -74 L 290 -136 L 763.568 -136 L 763.568 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 6.12e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.22e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.84e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 2.45e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 3.06e-08
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -515.0304052177379 L 387.27272727272725 -520.0 L 430.9090909090909 -493.12479373139496 L 474.5454545454545 -517.1877542617952 L 518.1818181818182 -483.91454516343003 L 561.8181818181818 -490.63676139501297 L 605.4545454545455 -500.1374361588456 L 649.090909090909 -511.73076106171555 L 692.7272727272727 -476.9982322167871 L 736.3636363636364 -481.39128786764826" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -510.0304052177379 L 337.3863636363636 -520.0304052177379 L 349.8863636363636 -520.0304052177379 L 349.8863636363636 -510.0304052177379 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -510.0304052177379 L 349.8863636363636 -510.0304052177379 L 343.6363636363636 -520.0304052177379 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -515.0 L 381.02272727272725 -525.0 L 393.52272727272725 -525.0 L 393.52272727272725 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -515.0 L 393.52272727272725 -515.0 L 387.27272727272725 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -488.12479373139496 L 424.6590909090909 -498.12479373139496 L 437.1590909090909 -498.12479373139496 L 437.1590909090909 -488.12479373139496 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -488.12479373139496 L 437.1590909090909 -488.12479373139496 L 430.9090909090909 -498.12479373139496 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -512.1877542617952 L 468.2954545454545 -522.1877542617952 L 480.7954545454545 -522.1877542617952 L 480.7954545454545 -512.1877542617952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -512.1877542617952 L 480.7954545454545 -512.1877542617952 L 474.5454545454545 -522.1877542617952 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -478.91454516343003 L 511.9318181818182 -488.91454516343003 L 524.4318181818182 -488.91454516343003 L 524.4318181818182 -478.91454516343003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -478.91454516343003 L 524.4318181818182 -478.91454516343003 L 518.1818181818182 -488.91454516343003 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -485.63676139501297 L 555.5681818181818 -495.63676139501297 L 568.0681818181818 -495.63676139501297 L 568.0681818181818 -485.63676139501297 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -485.63676139501297 L 568.0681818181818 -485.63676139501297 L 561.8181818181818 -495.63676139501297 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -495.1374361588456 L 599.2045454545455 -505.1374361588456 L 611.7045454545455 -505.1374361588456 L 611.7045454545455 -495.1374361588456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -495.1374361588456 L 611.7045454545455 -495.1374361588456 L 605.4545454545455 -505.1374361588456 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -506.73076106171555 L 642.840909090909 -516.7307610617156 L 655.340909090909 -516.7307610617156 L 655.340909090909 -506.73076106171555 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -506.73076106171555 L 655.340909090909 -506.73076106171555 L 649.090909090909 -516.7307610617156 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -471.9982322167871 L 686.4772727272727 -481.9982322167871 L 698.9772727272727 -481.9982322167871 L 698.9772727272727 -471.9982322167871 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -471.9982322167871 L 698.9772727272727 -471.9982322167871 L 692.7272727272727 -481.9982322167871 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -476.39128786764826 L 730.1136363636364 -486.39128786764826 L 742.6136363636364 -486.39128786764826 L 742.6136363636364 -476.39128786764826 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -476.39128786764826 L 742.6136363636364 -476.39128786764826 L 736.3636363636364 -486.39128786764826 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -428.3640653132178 L 387.27272727272725 -431.75860119660297 L 430.9090909090909 -427.01185819829885 L 474.5454545454545 -428.55241101449843 L 518.1818181818182 -428.36047092960564 L 561.8181818181818 -428.6674312900896 L 605.4545454545455 -429.42081409521194 L 649.090909090909 -431.1820620652021 L 692.7272727272727 -432.6902654288916 L 736.3636363636364 -436.25733172566356" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -423.3640653132178 L 337.3863636363636 -433.3640653132178 L 349.8863636363636 -433.3640653132178 L 349.8863636363636 -423.3640653132178 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -423.3640653132178 L 337.3863636363636 -433.3640653132178 L 349.8863636363636 -433.3640653132178 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -426.75860119660297 L 381.02272727272725 -436.75860119660297 L 393.52272727272725 -436.75860119660297 L 393.52272727272725 -426.75860119660297 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -426.75860119660297 L 381.02272727272725 -436.75860119660297 L 393.52272727272725 -436.75860119660297 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -422.01185819829885 L 424.6590909090909 -432.01185819829885 L 437.1590909090909 -432.01185819829885 L 437.1590909090909 -422.01185819829885 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -422.01185819829885 L 424.6590909090909 -432.01185819829885 L 437.1590909090909 -432.01185819829885 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -423.55241101449843 L 468.2954545454545 -433.55241101449843 L 480.7954545454545 -433.55241101449843 L 480.7954545454545 -423.55241101449843 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -423.55241101449843 L 468.2954545454545 -433.55241101449843 L 480.7954545454545 -433.55241101449843 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -423.36047092960564 L 511.9318181818182 -433.36047092960564 L 524.4318181818182 -433.36047092960564 L 524.4318181818182 -423.36047092960564 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -423.36047092960564 L 511.9318181818182 -433.36047092960564 L 524.4318181818182 -433.36047092960564 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -423.6674312900896 L 555.5681818181818 -433.6674312900896 L 568.0681818181818 -433.6674312900896 L 568.0681818181818 -423.6674312900896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -423.6674312900896 L 555.5681818181818 -433.6674312900896 L 568.0681818181818 -433.6674312900896 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -424.42081409521194 L 599.2045454545455 -434.42081409521194 L 611.7045454545455 -434.42081409521194 L 611.7045454545455 -424.42081409521194 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -424.42081409521194 L 599.2045454545455 -434.42081409521194 L 611.7045454545455 -434.42081409521194 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -426.1820620652021 L 642.840909090909 -436.1820620652021 L 655.340909090909 -436.1820620652021 L 655.340909090909 -426.1820620652021 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -426.1820620652021 L 642.840909090909 -436.1820620652021 L 655.340909090909 -436.1820620652021 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -427.6902654288916 L 686.4772727272727 -437.6902654288916 L 698.9772727272727 -437.6902654288916 L 698.9772727272727 -427.6902654288916 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -427.6902654288916 L 686.4772727272727 -437.6902654288916 L 698.9772727272727 -437.6902654288916 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -431.25733172566356 L 730.1136363636364 -441.25733172566356 L 742.6136363636364 -441.25733172566356 L 742.6136363636364 -431.25733172566356 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -431.25733172566356 L 730.1136363636364 -441.25733172566356 L 742.6136363636364 -441.25733172566356 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -357.9400979632915 L 387.27272727272725 -354.82642721536564 L 430.9090909090909 -350.42661412331347 L 474.5454545454545 -361.0836739828711 L 518.1818181818182 -371.639372224564 L 561.8181818181818 -354.0294085931909 L 605.4545454545455 -358.4386389703071 L 649.090909090909 -365.1532351086321 L 692.7272727272727 -369.53716102511817 L 736.3636363636364 -375.89972323246184" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 338.6363636363636 -352.9400979632915 L 348.6363636363636 -362.9400979632915" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -352.9400979632915 L 338.6363636363636 -362.9400979632915" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -349.82642721536564 L 392.27272727272725 -359.82642721536564" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -349.82642721536564 L 382.27272727272725 -359.82642721536564" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -345.42661412331347 L 435.9090909090909 -355.42661412331347" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -345.42661412331347 L 425.9090909090909 -355.42661412331347" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -356.0836739828711 L 479.5454545454545 -366.0836739828711" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -356.0836739828711 L 469.5454545454545 -366.0836739828711" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -366.639372224564 L 523.1818181818182 -376.639372224564" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -366.639372224564 L 513.1818181818182 -376.639372224564" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -349.0294085931909 L 566.8181818181818 -359.0294085931909" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -349.0294085931909 L 556.8181818181818 -359.0294085931909" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -353.4386389703071 L 610.4545454545455 -363.4386389703071" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -353.4386389703071 L 600.4545454545455 -363.4386389703071" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -360.1532351086321 L 654.090909090909 -370.1532351086321" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -360.1532351086321 L 644.090909090909 -370.1532351086321" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -364.53716102511817 L 697.7272727272727 -374.53716102511817" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -364.53716102511817 L 687.7272727272727 -374.53716102511817" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -370.89972323246184 L 741.3636363636364 -380.89972323246184" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -370.89972323246184 L 731.3636363636364 -380.89972323246184" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -74 L 290 -136 L 763.568 -136 L 763.568 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -80.33333333333334 L 313.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -80.33333333333334 L 303.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdf b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdf
new file mode 100644
index 0000000000..d5911b9451
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.png b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.png
new file mode 100644
index 0000000000..d84733fe08
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg
new file mode 100644
index 0000000000..2f12dabde0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg
@@ -0,0 +1,365 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -473.63251018586266 L 349.8863636363636 -473.63251018586266 L 343.6363636363636 -483.63251018586266 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -505.0758485981434 L 393.52272727272725 -505.0758485981434 L 387.27272727272725 -515.0758485981435 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -494.7027808915231 L 437.1590909090909 -494.7027808915231 L 430.9090909090909 -504.7027808915231 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -515.0 L 480.7954545454545 -515.0 L 474.5454545454545 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -481.4220940925353 L 524.4318181818182 -481.4220940925353 L 518.1818181818182 -491.4220940925353 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -491.21408099019334 L 568.0681818181818 -491.21408099019334 L 561.8181818181818 -501.21408099019334 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -503.70473416073196 L 611.7045454545455 -503.70473416073196 L 605.4545454545455 -513.704734160732 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -512.4659855954786 L 655.340909090909 -512.4659855954786 L 649.090909090909 -522.4659855954786 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -474.35313899087805 L 698.9772727272727 -474.35313899087805 L 692.7272727272727 -484.35313899087805 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -479.0608533974131 L 742.6136363636364 -479.0608533974131 L 736.3636363636364 -489.0608533974131 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -418.9902403662212 L 337.3863636363636 -428.9902403662212 L 349.8863636363636 -428.9902403662212 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -424.04719393748195 L 381.02272727272725 -434.04719393748195 L 393.52272727272725 -434.04719393748195 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -418.64616964579375 L 424.6590909090909 -428.64616964579375 L 437.1590909090909 -428.64616964579375 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -422.300259764668 L 468.2954545454545 -432.300259764668 L 480.7954545454545 -432.300259764668 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -416.57879192648727 L 511.9318181818182 -426.57879192648727 L 524.4318181818182 -426.57879192648727 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -422.94631530195124 L 555.5681818181818 -432.94631530195124 L 568.0681818181818 -432.94631530195124 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -425.9321994079782 L 599.2045454545455 -435.9321994079782 L 611.7045454545455 -435.9321994079782 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -430.72630066921283 L 642.840909090909 -440.72630066921283 L 655.340909090909 -440.72630066921283 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -431.0260704385123 L 686.4772727272727 -441.0260704385123 L 698.9772727272727 -441.0260704385123 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -429.75610983950975 L 730.1136363636364 -439.75610983950975 L 742.6136363636364 -439.75610983950975 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -74 L 290 -136 L 763.568 -136 L 763.568 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 5.96e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.19e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.79e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 2.38e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 2.98e-08
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -478.63251018586266 L 387.27272727272725 -510.0758485981434 L 430.9090909090909 -499.7027808915231 L 474.5454545454545 -520.0 L 518.1818181818182 -486.4220940925353 L 561.8181818181818 -496.21408099019334 L 605.4545454545455 -508.70473416073196 L 649.090909090909 -517.4659855954786 L 692.7272727272727 -479.35313899087805 L 736.3636363636364 -484.0608533974131" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -473.63251018586266 L 337.3863636363636 -483.63251018586266 L 349.8863636363636 -483.63251018586266 L 349.8863636363636 -473.63251018586266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -473.63251018586266 L 349.8863636363636 -473.63251018586266 L 343.6363636363636 -483.63251018586266 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -505.0758485981434 L 381.02272727272725 -515.0758485981435 L 393.52272727272725 -515.0758485981435 L 393.52272727272725 -505.0758485981434 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -505.0758485981434 L 393.52272727272725 -505.0758485981434 L 387.27272727272725 -515.0758485981435 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -494.7027808915231 L 424.6590909090909 -504.7027808915231 L 437.1590909090909 -504.7027808915231 L 437.1590909090909 -494.7027808915231 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -494.7027808915231 L 437.1590909090909 -494.7027808915231 L 430.9090909090909 -504.7027808915231 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -515.0 L 468.2954545454545 -525.0 L 480.7954545454545 -525.0 L 480.7954545454545 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -515.0 L 480.7954545454545 -515.0 L 474.5454545454545 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -481.4220940925353 L 511.9318181818182 -491.4220940925353 L 524.4318181818182 -491.4220940925353 L 524.4318181818182 -481.4220940925353 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -481.4220940925353 L 524.4318181818182 -481.4220940925353 L 518.1818181818182 -491.4220940925353 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -491.21408099019334 L 555.5681818181818 -501.21408099019334 L 568.0681818181818 -501.21408099019334 L 568.0681818181818 -491.21408099019334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -491.21408099019334 L 568.0681818181818 -491.21408099019334 L 561.8181818181818 -501.21408099019334 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -503.70473416073196 L 599.2045454545455 -513.704734160732 L 611.7045454545455 -513.704734160732 L 611.7045454545455 -503.70473416073196 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -503.70473416073196 L 611.7045454545455 -503.70473416073196 L 605.4545454545455 -513.704734160732 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -512.4659855954786 L 642.840909090909 -522.4659855954786 L 655.340909090909 -522.4659855954786 L 655.340909090909 -512.4659855954786 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -512.4659855954786 L 655.340909090909 -512.4659855954786 L 649.090909090909 -522.4659855954786 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -474.35313899087805 L 686.4772727272727 -484.35313899087805 L 698.9772727272727 -484.35313899087805 L 698.9772727272727 -474.35313899087805 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -474.35313899087805 L 698.9772727272727 -474.35313899087805 L 692.7272727272727 -484.35313899087805 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -479.0608533974131 L 730.1136363636364 -489.0608533974131 L 742.6136363636364 -489.0608533974131 L 742.6136363636364 -479.0608533974131 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -479.0608533974131 L 742.6136363636364 -479.0608533974131 L 736.3636363636364 -489.0608533974131 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -423.9902403662212 L 387.27272727272725 -429.04719393748195 L 430.9090909090909 -423.64616964579375 L 474.5454545454545 -427.300259764668 L 518.1818181818182 -421.57879192648727 L 561.8181818181818 -427.94631530195124 L 605.4545454545455 -430.9321994079782 L 649.090909090909 -435.72630066921283 L 692.7272727272727 -436.0260704385123 L 736.3636363636364 -434.75610983950975" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -418.9902403662212 L 337.3863636363636 -428.9902403662212 L 349.8863636363636 -428.9902403662212 L 349.8863636363636 -418.9902403662212 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -418.9902403662212 L 337.3863636363636 -428.9902403662212 L 349.8863636363636 -428.9902403662212 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -424.04719393748195 L 381.02272727272725 -434.04719393748195 L 393.52272727272725 -434.04719393748195 L 393.52272727272725 -424.04719393748195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -424.04719393748195 L 381.02272727272725 -434.04719393748195 L 393.52272727272725 -434.04719393748195 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -418.64616964579375 L 424.6590909090909 -428.64616964579375 L 437.1590909090909 -428.64616964579375 L 437.1590909090909 -418.64616964579375 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -418.64616964579375 L 424.6590909090909 -428.64616964579375 L 437.1590909090909 -428.64616964579375 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -422.300259764668 L 468.2954545454545 -432.300259764668 L 480.7954545454545 -432.300259764668 L 480.7954545454545 -422.300259764668 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -422.300259764668 L 468.2954545454545 -432.300259764668 L 480.7954545454545 -432.300259764668 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -416.57879192648727 L 511.9318181818182 -426.57879192648727 L 524.4318181818182 -426.57879192648727 L 524.4318181818182 -416.57879192648727 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -416.57879192648727 L 511.9318181818182 -426.57879192648727 L 524.4318181818182 -426.57879192648727 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -422.94631530195124 L 555.5681818181818 -432.94631530195124 L 568.0681818181818 -432.94631530195124 L 568.0681818181818 -422.94631530195124 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -422.94631530195124 L 555.5681818181818 -432.94631530195124 L 568.0681818181818 -432.94631530195124 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -425.9321994079782 L 599.2045454545455 -435.9321994079782 L 611.7045454545455 -435.9321994079782 L 611.7045454545455 -425.9321994079782 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -425.9321994079782 L 599.2045454545455 -435.9321994079782 L 611.7045454545455 -435.9321994079782 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -430.72630066921283 L 642.840909090909 -440.72630066921283 L 655.340909090909 -440.72630066921283 L 655.340909090909 -430.72630066921283 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -430.72630066921283 L 642.840909090909 -440.72630066921283 L 655.340909090909 -440.72630066921283 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -431.0260704385123 L 686.4772727272727 -441.0260704385123 L 698.9772727272727 -441.0260704385123 L 698.9772727272727 -431.0260704385123 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -431.0260704385123 L 686.4772727272727 -441.0260704385123 L 698.9772727272727 -441.0260704385123 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -429.75610983950975 L 730.1136363636364 -439.75610983950975 L 742.6136363636364 -439.75610983950975 L 742.6136363636364 -429.75610983950975 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -429.75610983950975 L 730.1136363636364 -439.75610983950975 L 742.6136363636364 -439.75610983950975 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -346.6816842416147 L 387.27272727272725 -363.6542646377726 L 430.9090909090909 -354.52413394996677 L 474.5454545454545 -365.9528933219672 L 518.1818181818182 -376.5926527543781 L 561.8181818181818 -357.2847477195079 L 605.4545454545455 -361.38760647330867 L 649.090909090909 -367.39319107805693 L 692.7272727272727 -372.23668789979934 L 736.3636363636364 -377.9556453507494" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 338.6363636363636 -341.6816842416147 L 348.6363636363636 -351.6816842416147" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -341.6816842416147 L 338.6363636363636 -351.6816842416147" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -358.6542646377726 L 392.27272727272725 -368.6542646377726" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -358.6542646377726 L 382.27272727272725 -368.6542646377726" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -349.52413394996677 L 435.9090909090909 -359.52413394996677" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -349.52413394996677 L 425.9090909090909 -359.52413394996677" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -360.9528933219672 L 479.5454545454545 -370.9528933219672" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -360.9528933219672 L 469.5454545454545 -370.9528933219672" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -371.5926527543781 L 523.1818181818182 -381.5926527543781" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -371.5926527543781 L 513.1818181818182 -381.5926527543781" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -352.2847477195079 L 566.8181818181818 -362.2847477195079" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -352.2847477195079 L 556.8181818181818 -362.2847477195079" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -356.38760647330867 L 610.4545454545455 -366.38760647330867" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -356.38760647330867 L 600.4545454545455 -366.38760647330867" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -362.39319107805693 L 654.090909090909 -372.39319107805693" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -362.39319107805693 L 644.090909090909 -372.39319107805693" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -367.23668789979934 L 697.7272727272727 -377.23668789979934" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -367.23668789979934 L 687.7272727272727 -377.23668789979934" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -372.9556453507494 L 741.3636363636364 -382.9556453507494" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -372.9556453507494 L 731.3636363636364 -382.9556453507494" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -74 L 290 -136 L 763.568 -136 L 763.568 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -80.33333333333334 L 313.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -80.33333333333334 L 303.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdf b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdf
new file mode 100644
index 0000000000..f53522d651
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.png b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.png
new file mode 100644
index 0000000000..27940fcd8b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg
new file mode 100644
index 0000000000..c87e21c3b5
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg
@@ -0,0 +1,365 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -477.24164492092933 L 337.3863636363636 -487.24164492092933 L 349.8863636363636 -487.24164492092933 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -445.24076461156346 L 381.02272727272725 -455.24076461156346 L 393.52272727272725 -455.24076461156346 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -459.6538183418744 L 424.6590909090909 -469.6538183418744 L 437.1590909090909 -469.6538183418744 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -446.43320652686515 L 468.2954545454545 -456.43320652686515 L 480.7954545454545 -456.43320652686515 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -464.3364353758607 L 511.9318181818182 -474.3364353758607 L 524.4318181818182 -474.3364353758607 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -456.86914830068855 L 555.5681818181818 -466.86914830068855 L 568.0681818181818 -466.86914830068855 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -450.50300248373003 L 599.2045454545455 -460.50300248373003 L 611.7045454545455 -460.50300248373003 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -445.75675165843995 L 642.840909090909 -455.75675165843995 L 655.340909090909 -455.75675165843995 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -473.6892193542302 L 686.4772727272727 -483.6892193542302 L 698.9772727272727 -483.6892193542302 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -468.1101958688339 L 730.1136363636364 -478.1101958688339 L 742.6136363636364 -478.1101958688339 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 337.3863636363636 -407.2468261703399 L 349.8863636363636 -407.2468261703399 L 343.6363636363636 -417.2468261703399 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 381.02272727272725 -412.45746533781875 L 393.52272727272725 -412.45746533781875 L 387.27272727272725 -422.45746533781875 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 424.6590909090909 -435.8506303643852 L 437.1590909090909 -435.8506303643852 L 430.9090909090909 -445.8506303643852 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 468.2954545454545 -417.1124155060207 L 480.7954545454545 -417.1124155060207 L 474.5454545454545 -427.1124155060207 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.9318181818182 -482.1815638067093 L 524.4318181818182 -482.1815638067093 L 518.1818181818182 -492.1815638067093 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 555.5681818181818 -462.07051906812967 L 568.0681818181818 -462.07051906812967 L 561.8181818181818 -472.07051906812967 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.2045454545455 -447.84006665199485 L 611.7045454545455 -447.84006665199485 L 605.4545454545455 -457.84006665199485 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 642.840909090909 -437.40274153488224 L 655.340909090909 -437.40274153488224 L 649.090909090909 -447.40274153488224 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 686.4772727272727 -515.0 L 698.9772727272727 -515.0 L 692.7272727272727 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 730.1136363636364 -498.1162951551545 L 742.6136363636364 -498.1162951551545 L 736.3636363636364 -508.1162951551545 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -74 L 290 -136 L 763.568 -136 L 763.568 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 3.18e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 6.36e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 9.54e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.27e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.59e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -482.24164492092933 L 387.27272727272725 -450.24076461156346 L 430.9090909090909 -464.6538183418744 L 474.5454545454545 -451.43320652686515 L 518.1818181818182 -469.3364353758607 L 561.8181818181818 -461.86914830068855 L 605.4545454545455 -455.50300248373003 L 649.090909090909 -450.75675165843995 L 692.7272727272727 -478.6892193542302 L 736.3636363636364 -473.1101958688339" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -477.24164492092933 L 337.3863636363636 -487.24164492092933 L 349.8863636363636 -487.24164492092933 L 349.8863636363636 -477.24164492092933 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -477.24164492092933 L 337.3863636363636 -487.24164492092933 L 349.8863636363636 -487.24164492092933 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -445.24076461156346 L 381.02272727272725 -455.24076461156346 L 393.52272727272725 -455.24076461156346 L 393.52272727272725 -445.24076461156346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -445.24076461156346 L 381.02272727272725 -455.24076461156346 L 393.52272727272725 -455.24076461156346 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -459.6538183418744 L 424.6590909090909 -469.6538183418744 L 437.1590909090909 -469.6538183418744 L 437.1590909090909 -459.6538183418744 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -459.6538183418744 L 424.6590909090909 -469.6538183418744 L 437.1590909090909 -469.6538183418744 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -446.43320652686515 L 468.2954545454545 -456.43320652686515 L 480.7954545454545 -456.43320652686515 L 480.7954545454545 -446.43320652686515 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -446.43320652686515 L 468.2954545454545 -456.43320652686515 L 480.7954545454545 -456.43320652686515 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -464.3364353758607 L 511.9318181818182 -474.3364353758607 L 524.4318181818182 -474.3364353758607 L 524.4318181818182 -464.3364353758607 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -464.3364353758607 L 511.9318181818182 -474.3364353758607 L 524.4318181818182 -474.3364353758607 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -456.86914830068855 L 555.5681818181818 -466.86914830068855 L 568.0681818181818 -466.86914830068855 L 568.0681818181818 -456.86914830068855 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -456.86914830068855 L 555.5681818181818 -466.86914830068855 L 568.0681818181818 -466.86914830068855 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -450.50300248373003 L 599.2045454545455 -460.50300248373003 L 611.7045454545455 -460.50300248373003 L 611.7045454545455 -450.50300248373003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -450.50300248373003 L 599.2045454545455 -460.50300248373003 L 611.7045454545455 -460.50300248373003 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -445.75675165843995 L 642.840909090909 -455.75675165843995 L 655.340909090909 -455.75675165843995 L 655.340909090909 -445.75675165843995 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -445.75675165843995 L 642.840909090909 -455.75675165843995 L 655.340909090909 -455.75675165843995 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -473.6892193542302 L 686.4772727272727 -483.6892193542302 L 698.9772727272727 -483.6892193542302 L 698.9772727272727 -473.6892193542302 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -473.6892193542302 L 686.4772727272727 -483.6892193542302 L 698.9772727272727 -483.6892193542302 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -468.1101958688339 L 730.1136363636364 -478.1101958688339 L 742.6136363636364 -478.1101958688339 L 742.6136363636364 -468.1101958688339 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -468.1101958688339 L 730.1136363636364 -478.1101958688339 L 742.6136363636364 -478.1101958688339 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -412.2468261703399 L 387.27272727272725 -417.45746533781875 L 430.9090909090909 -440.8506303643852 L 474.5454545454545 -422.1124155060207 L 518.1818181818182 -487.1815638067093 L 561.8181818181818 -467.07051906812967 L 605.4545454545455 -452.84006665199485 L 649.090909090909 -442.40274153488224 L 692.7272727272727 -520.0 L 736.3636363636364 -503.1162951551545" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -407.2468261703399 L 337.3863636363636 -417.2468261703399 L 349.8863636363636 -417.2468261703399 L 349.8863636363636 -407.2468261703399 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -407.2468261703399 L 349.8863636363636 -407.2468261703399 L 343.6363636363636 -417.2468261703399 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -412.45746533781875 L 381.02272727272725 -422.45746533781875 L 393.52272727272725 -422.45746533781875 L 393.52272727272725 -412.45746533781875 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -412.45746533781875 L 393.52272727272725 -412.45746533781875 L 387.27272727272725 -422.45746533781875 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -435.8506303643852 L 424.6590909090909 -445.8506303643852 L 437.1590909090909 -445.8506303643852 L 437.1590909090909 -435.8506303643852 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -435.8506303643852 L 437.1590909090909 -435.8506303643852 L 430.9090909090909 -445.8506303643852 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -417.1124155060207 L 468.2954545454545 -427.1124155060207 L 480.7954545454545 -427.1124155060207 L 480.7954545454545 -417.1124155060207 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -417.1124155060207 L 480.7954545454545 -417.1124155060207 L 474.5454545454545 -427.1124155060207 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -482.1815638067093 L 511.9318181818182 -492.1815638067093 L 524.4318181818182 -492.1815638067093 L 524.4318181818182 -482.1815638067093 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -482.1815638067093 L 524.4318181818182 -482.1815638067093 L 518.1818181818182 -492.1815638067093 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -462.07051906812967 L 555.5681818181818 -472.07051906812967 L 568.0681818181818 -472.07051906812967 L 568.0681818181818 -462.07051906812967 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -462.07051906812967 L 568.0681818181818 -462.07051906812967 L 561.8181818181818 -472.07051906812967 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -447.84006665199485 L 599.2045454545455 -457.84006665199485 L 611.7045454545455 -457.84006665199485 L 611.7045454545455 -447.84006665199485 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -447.84006665199485 L 611.7045454545455 -447.84006665199485 L 605.4545454545455 -457.84006665199485 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -437.40274153488224 L 642.840909090909 -447.40274153488224 L 655.340909090909 -447.40274153488224 L 655.340909090909 -437.40274153488224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -437.40274153488224 L 655.340909090909 -437.40274153488224 L 649.090909090909 -447.40274153488224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -515.0 L 686.4772727272727 -525.0 L 698.9772727272727 -525.0 L 698.9772727272727 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -515.0 L 698.9772727272727 -515.0 L 692.7272727272727 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -498.1162951551545 L 730.1136363636364 -508.1162951551545 L 742.6136363636364 -508.1162951551545 L 742.6136363636364 -498.1162951551545 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -498.1162951551545 L 742.6136363636364 -498.1162951551545 L 736.3636363636364 -508.1162951551545 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -300.0 L 387.27272727272725 -369.8324142484359 L 430.9090909090909 -386.9352406702927 L 474.5454545454545 -371.3197849529978 L 518.1818181818182 -362.24270129216836 L 561.8181818181818 -423.17233313421576 L 605.4545454545455 -409.7272047033672 L 649.090909090909 -399.2404942308297 L 692.7272727272727 -389.52347596441035 L 736.3636363636364 -383.3339830854843" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 338.6363636363636 -295.0 L 348.6363636363636 -305.0" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -295.0 L 338.6363636363636 -305.0" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -364.8324142484359 L 392.27272727272725 -374.8324142484359" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -364.8324142484359 L 382.27272727272725 -374.8324142484359" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -381.9352406702927 L 435.9090909090909 -391.9352406702927" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -381.9352406702927 L 425.9090909090909 -391.9352406702927" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -366.3197849529978 L 479.5454545454545 -376.3197849529978" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -366.3197849529978 L 469.5454545454545 -376.3197849529978" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -357.24270129216836 L 523.1818181818182 -367.24270129216836" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -357.24270129216836 L 513.1818181818182 -367.24270129216836" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -418.17233313421576 L 566.8181818181818 -428.17233313421576" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -418.17233313421576 L 556.8181818181818 -428.17233313421576" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -404.7272047033672 L 610.4545454545455 -414.7272047033672" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -404.7272047033672 L 600.4545454545455 -414.7272047033672" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -394.2404942308297 L 654.090909090909 -404.2404942308297" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -394.2404942308297 L 644.090909090909 -404.2404942308297" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -384.52347596441035 L 697.7272727272727 -394.52347596441035" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -384.52347596441035 L 687.7272727272727 -394.52347596441035" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -378.3339830854843 L 741.3636363636364 -388.3339830854843" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -378.3339830854843 L 731.3636363636364 -388.3339830854843" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -74 L 290 -136 L 763.568 -136 L 763.568 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -80.33333333333334 L 313.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -80.33333333333334 L 303.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdf b/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdf
new file mode 100644
index 0000000000..d1a4c4fc3a
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.png b/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.png
new file mode 100644
index 0000000000..d26ed8fd54
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg b/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg
new file mode 100644
index 0000000000..cad68c70ed
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg
@@ -0,0 +1,412 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -526 620 478" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -310.0656 L 337.3863636363636 -320.0656 L 349.8863636363636 -320.0656 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -324.0048 L 381.02272727272725 -334.0048 L 393.52272727272725 -334.0048 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -338.7888 L 424.6590909090909 -348.7888 L 437.1590909090909 -348.7888 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -353.1504 L 468.2954545454545 -363.1504 L 480.7954545454545 -363.1504 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -367.79359999999997 L 511.9318181818182 -377.79359999999997 L 524.4318181818182 -377.79359999999997 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -385.9568 L 555.5681818181818 -395.9568 L 568.0681818181818 -395.9568 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -400.3184 L 599.2045454545455 -410.3184 L 611.7045454545455 -410.3184 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -408.7664 L 642.840909090909 -418.7664 L 655.340909090909 -418.7664 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -427.4928 L 686.4772727272727 -437.4928 L 698.9772727272727 -437.4928 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -438.0528 L 730.1136363636364 -448.0528 L 742.6136363636364 -448.0528 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -295.9152 L 337.3863636363636 -305.9152 L 349.8863636363636 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -295.9152 L 381.02272727272725 -305.9152 L 393.52272727272725 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -295.9152 L 424.6590909090909 -305.9152 L 437.1590909090909 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -295.9152 L 468.2954545454545 -305.9152 L 480.7954545454545 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -295.9152 L 511.9318181818182 -305.9152 L 524.4318181818182 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -295.9152 L 555.5681818181818 -305.9152 L 568.0681818181818 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -295.9152 L 599.2045454545455 -305.9152 L 611.7045454545455 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -295.9152 L 642.840909090909 -305.9152 L 655.340909090909 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -295.9152 L 686.4772727272727 -305.9152 L 698.9772727272727 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -295.9152 L 730.1136363636364 -305.9152 L 742.6136363636364 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 290 -54 L 290 -136 L 727.104 -136 L 727.104 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -328.61056 L 288 -328.61056"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-322.61056">
+ 3.25e+03
+ </text>
+ <path d="M 300 -357.22112 L 288 -357.22112"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-351.22112">
+ 6.50e+03
+ </text>
+ <path d="M 300 -385.83168 L 288 -385.83168"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-379.83168">
+ 9.75e+03
+ </text>
+ <path d="M 300 -414.44223999999997 L 288 -414.44223999999997"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-408.44223999999997">
+ 1.30e+04
+ </text>
+ <path d="M 300 -443.0528 L 288 -443.0528"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-437.0528">
+ 1.63e+04
+ </text>
+ <path d="M 300 -471.66336 L 288 -471.66336"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-465.66336">
+ 1.95e+04
+ </text>
+ <path d="M 300 -500.27392 L 288 -500.27392"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-494.27392">
+ 2.28e+04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-354.44)" x="200.0" y="-354.44">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -315.0656 L 387.27272727272725 -329.0048 L 430.9090909090909 -343.7888 L 474.5454545454545 -358.1504 L 518.1818181818182 -372.79359999999997 L 561.8181818181818 -390.9568 L 605.4545454545455 -405.3184 L 649.090909090909 -413.7664 L 692.7272727272727 -432.4928 L 736.3636363636364 -443.0528" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -310.0656 L 337.3863636363636 -320.0656 L 349.8863636363636 -320.0656 L 349.8863636363636 -310.0656 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -310.0656 L 337.3863636363636 -320.0656 L 349.8863636363636 -320.0656 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -324.0048 L 381.02272727272725 -334.0048 L 393.52272727272725 -334.0048 L 393.52272727272725 -324.0048 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -324.0048 L 381.02272727272725 -334.0048 L 393.52272727272725 -334.0048 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -338.7888 L 424.6590909090909 -348.7888 L 437.1590909090909 -348.7888 L 437.1590909090909 -338.7888 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -338.7888 L 424.6590909090909 -348.7888 L 437.1590909090909 -348.7888 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -353.1504 L 468.2954545454545 -363.1504 L 480.7954545454545 -363.1504 L 480.7954545454545 -353.1504 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -353.1504 L 468.2954545454545 -363.1504 L 480.7954545454545 -363.1504 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -367.79359999999997 L 511.9318181818182 -377.79359999999997 L 524.4318181818182 -377.79359999999997 L 524.4318181818182 -367.79359999999997 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -367.79359999999997 L 511.9318181818182 -377.79359999999997 L 524.4318181818182 -377.79359999999997 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -385.9568 L 555.5681818181818 -395.9568 L 568.0681818181818 -395.9568 L 568.0681818181818 -385.9568 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -385.9568 L 555.5681818181818 -395.9568 L 568.0681818181818 -395.9568 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -400.3184 L 599.2045454545455 -410.3184 L 611.7045454545455 -410.3184 L 611.7045454545455 -400.3184 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -400.3184 L 599.2045454545455 -410.3184 L 611.7045454545455 -410.3184 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -408.7664 L 642.840909090909 -418.7664 L 655.340909090909 -418.7664 L 655.340909090909 -408.7664 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -408.7664 L 642.840909090909 -418.7664 L 655.340909090909 -418.7664 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -427.4928 L 686.4772727272727 -437.4928 L 698.9772727272727 -437.4928 L 698.9772727272727 -427.4928 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -427.4928 L 686.4772727272727 -437.4928 L 698.9772727272727 -437.4928 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -438.0528 L 730.1136363636364 -448.0528 L 742.6136363636364 -448.0528 L 742.6136363636364 -438.0528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -438.0528 L 730.1136363636364 -448.0528 L 742.6136363636364 -448.0528 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -300.9152 L 387.27272727272725 -300.9152 L 430.9090909090909 -300.9152 L 474.5454545454545 -300.9152 L 518.1818181818182 -300.9152 L 561.8181818181818 -300.9152 L 605.4545454545455 -300.9152 L 649.090909090909 -300.9152 L 692.7272727272727 -300.9152 L 736.3636363636364 -300.9152" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -295.9152 L 337.3863636363636 -305.9152 L 349.8863636363636 -305.9152 L 349.8863636363636 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.9152 L 337.3863636363636 -305.9152 L 349.8863636363636 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -295.9152 L 381.02272727272725 -305.9152 L 393.52272727272725 -305.9152 L 393.52272727272725 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.9152 L 381.02272727272725 -305.9152 L 393.52272727272725 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -295.9152 L 424.6590909090909 -305.9152 L 437.1590909090909 -305.9152 L 437.1590909090909 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.9152 L 424.6590909090909 -305.9152 L 437.1590909090909 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -295.9152 L 468.2954545454545 -305.9152 L 480.7954545454545 -305.9152 L 480.7954545454545 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.9152 L 468.2954545454545 -305.9152 L 480.7954545454545 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -295.9152 L 511.9318181818182 -305.9152 L 524.4318181818182 -305.9152 L 524.4318181818182 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.9152 L 511.9318181818182 -305.9152 L 524.4318181818182 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -295.9152 L 555.5681818181818 -305.9152 L 568.0681818181818 -305.9152 L 568.0681818181818 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.9152 L 555.5681818181818 -305.9152 L 568.0681818181818 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -295.9152 L 599.2045454545455 -305.9152 L 611.7045454545455 -305.9152 L 611.7045454545455 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.9152 L 599.2045454545455 -305.9152 L 611.7045454545455 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -295.9152 L 642.840909090909 -305.9152 L 655.340909090909 -305.9152 L 655.340909090909 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -295.9152 L 642.840909090909 -305.9152 L 655.340909090909 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -295.9152 L 686.4772727272727 -305.9152 L 698.9772727272727 -305.9152 L 698.9772727272727 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.9152 L 686.4772727272727 -305.9152 L 698.9772727272727 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -295.9152 L 730.1136363636364 -305.9152 L 742.6136363636364 -305.9152 L 742.6136363636364 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -295.9152 L 730.1136363636364 -305.9152 L 742.6136363636364 -305.9152 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -300.704 L 387.27272727272725 -300.704 L 430.9090909090909 -300.704 L 474.5454545454545 -300.704 L 518.1818181818182 -300.704 L 561.8181818181818 -300.704 L 605.4545454545455 -300.704 L 649.090909090909 -300.704 L 692.7272727272727 -300.704 L 736.3636363636364 -300.704" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 338.6363636363636 -295.704 L 348.6363636363636 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -295.704 L 338.6363636363636 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -295.704 L 392.27272727272725 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -295.704 L 382.27272727272725 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -295.704 L 435.9090909090909 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -295.704 L 425.9090909090909 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -295.704 L 479.5454545454545 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -295.704 L 469.5454545454545 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -295.704 L 523.1818181818182 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -295.704 L 513.1818181818182 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -295.704 L 566.8181818181818 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -295.704 L 556.8181818181818 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -295.704 L 610.4545454545455 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -295.704 L 600.4545454545455 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -295.704 L 654.090909090909 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -295.704 L 644.090909090909 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -295.704 L 697.7272727272727 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -295.704 L 687.7272727272727 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -295.704 L 741.3636363636364 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -295.704 L 731.3636363636364 -305.704" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 343.6363636363636 -300.5632 L 387.27272727272725 -300.5632 L 430.9090909090909 -300.5632 L 474.5454545454545 -300.5632 L 518.1818181818182 -300.5632 L 561.8181818181818 -300.5632 L 605.4545454545455 -300.5632 L 649.090909090909 -300.5632 L 692.7272727272727 -300.5632 L 736.3636363636364 -300.5632" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <path d="M 338.6363636363636 -295.5632 L 348.6363636363636 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -295.5632 L 338.6363636363636 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -295.5632 L 392.27272727272725 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -295.5632 L 382.27272727272725 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -295.5632 L 435.9090909090909 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -295.5632 L 425.9090909090909 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -295.5632 L 479.5454545454545 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -295.5632 L 469.5454545454545 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -295.5632 L 523.1818181818182 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -295.5632 L 513.1818181818182 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -295.5632 L 566.8181818181818 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -295.5632 L 556.8181818181818 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -295.5632 L 610.4545454545455 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -295.5632 L 600.4545454545455 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -295.5632 L 654.090909090909 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -295.5632 L 644.090909090909 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -295.5632 L 697.7272727272727 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -295.5632 L 687.7272727272727 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -295.5632 L 741.3636363636364 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -295.5632 L 731.3636363636364 -305.5632" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 290 -54 L 290 -136 L 727.104 -136 L 727.104 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_hash_set_ncah
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -80.33333333333334 L 313.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -80.33333333333334 L 303.0 -90.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -60.33333333333334 L 313.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -60.33333333333334 L 303.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png b/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png
new file mode 100644
index 0000000000..f3122a112f
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png b/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png
new file mode 100644
index 0000000000..5c37407dda
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png b/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png
new file mode 100644
index 0000000000..87763caacc
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png b/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png
new file mode 100644
index 0000000000..5e0d7f4037
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdf b/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdf
new file mode 100644
index 0000000000..b27dd73f1d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_text_find.png b/libstdc++-v3/doc/xml/images/pbds_hash_text_find.png
new file mode 100644
index 0000000000..04c7eebb6e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_text_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg b/libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg
new file mode 100644
index 0000000000..92cac1860d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg
@@ -0,0 +1,479 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 496" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -498.1253144878448 L 337.3863636363636 -508.1253144878448 L 349.8863636363636 -508.1253144878448 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -497.9976793613362 L 381.02272727272725 -507.9976793613362 L 393.52272727272725 -507.9976793613362 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -504.46163436047254 L 424.6590909090909 -514.4616343604725 L 437.1590909090909 -514.4616343604725 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -500.38350619212486 L 468.2954545454545 -510.38350619212486 L 480.7954545454545 -510.38350619212486 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -503.0382342117714 L 511.9318181818182 -513.0382342117714 L 524.4318181818182 -513.0382342117714 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -508.315471675441 L 555.5681818181818 -518.315471675441 L 568.0681818181818 -518.315471675441 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -512.1023934871914 L 599.2045454545455 -522.1023934871914 L 611.7045454545455 -522.1023934871914 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -515.0 L 642.840909090909 -525.0 L 655.340909090909 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -493.7898507731707 L 686.4772727272727 -503.7898507731707 L 698.9772727272727 -503.7898507731707 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -500.06462490518425 L 730.1136363636364 -510.06462490518425 L 742.6136363636364 -510.06462490518425 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 336.4935064935065 -457.2126050483279 L 343.6363636363636 -464.355462191185 L 350.7792207792208 -457.2126050483279 L 343.6363636363636 -450.0697479054707 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 380.12987012987014 -470.17562503285694 L 387.27272727272725 -477.31848217571405 L 394.4155844155844 -470.17562503285694 L 387.27272727272725 -463.03276788999983 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 423.76623376623377 -463.46011730865996 L 430.9090909090909 -470.60297445151707 L 438.05194805194805 -463.46011730865996 L 430.9090909090909 -456.31726016580285 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 467.4025974025974 -470.70764458930705 L 474.5454545454545 -477.85050173216416 L 481.68831168831167 -470.70764458930705 L 474.5454545454545 -463.56478744644994 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.038961038961 -459.0606295014006 L 518.1818181818182 -466.2034866442578 L 525.3246753246754 -459.0606295014006 L 518.1818181818182 -451.9177723585435 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 554.6753246753246 -464.9785209495843 L 561.8181818181818 -472.12137809244143 L 568.961038961039 -464.9785209495843 L 561.8181818181818 -457.8356638067272 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 598.3116883116883 -466.1780433035681 L 605.4545454545455 -473.3209004464252 L 612.5974025974026 -466.1780433035681 L 605.4545454545455 -459.03518616071096 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 641.9480519480519 -469.82617740494015 L 649.090909090909 -476.9690345477973 L 656.2337662337662 -469.82617740494015 L 649.090909090909 -462.68332026208304 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 685.5844155844156 -470.6907091841716 L 692.7272727272727 -477.83356632702873 L 699.8701298701299 -470.6907091841716 L 692.7272727272727 -463.54785204131446 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 729.2207792207791 -478.273227039571 L 736.3636363636364 -485.41608418242816 L 743.5064935064936 -478.273227039571 L 736.3636363636364 -471.1303698967139 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 336.4935064935065 -449.5991077932904 L 343.6363636363636 -456.74196493614755 L 350.7792207792208 -449.5991077932904 L 343.6363636363636 -442.4562506504333 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 380.12987012987014 -457.63062041411007 L 387.27272727272725 -464.77347755696724 L 394.4155844155844 -457.63062041411007 L 387.27272727272725 -450.4877632712529 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 423.76623376623377 -456.300158464323 L 430.9090909090909 -463.44301560718014 L 438.05194805194805 -456.300158464323 L 430.9090909090909 -449.15730132146587 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 467.4025974025974 -459.93342245386884 L 474.5454545454545 -467.07627959672595 L 481.68831168831167 -459.93342245386884 L 474.5454545454545 -452.79056531101173 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.038961038961 -461.9838456512433 L 518.1818181818182 -469.1267027941004 L 525.3246753246754 -461.9838456512433 L 518.1818181818182 -454.8409885083862 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 554.6753246753246 -460.4295059067389 L 561.8181818181818 -467.572363049596 L 568.961038961039 -460.4295059067389 L 561.8181818181818 -453.2866487638818 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 598.3116883116883 -461.5534385256059 L 605.4545454545455 -468.696295668463 L 612.5974025974026 -461.5534385256059 L 605.4545454545455 -454.4105813827487 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 641.9480519480519 -462.6216082251245 L 649.090909090909 -469.76446536798164 L 656.2337662337662 -462.6216082251245 L 649.090909090909 -455.4787510822673 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 685.5844155844156 -463.2321089273242 L 692.7272727272727 -470.37496607018136 L 699.8701298701299 -463.2321089273242 L 692.7272727272727 -456.089251784467 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 729.2207792207791 -466.05206041170686 L 736.3636363636364 -473.194917554564 L 743.5064935064936 -466.05206041170686 L 736.3636363636364 -458.9092032688497 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -54 L 290 -136 L 708.4 -136 L 708.4 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.07e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.13e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 3.20e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 4.26e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 5.33e-08
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -503.1253144878448 L 387.27272727272725 -502.9976793613362 L 430.9090909090909 -509.46163436047254 L 474.5454545454545 -505.38350619212486 L 518.1818181818182 -508.0382342117714 L 561.8181818181818 -513.315471675441 L 605.4545454545455 -517.1023934871914 L 649.090909090909 -520.0 L 692.7272727272727 -498.7898507731707 L 736.3636363636364 -505.06462490518425" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -498.1253144878448 L 337.3863636363636 -508.1253144878448 L 349.8863636363636 -508.1253144878448 L 349.8863636363636 -498.1253144878448 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -498.1253144878448 L 337.3863636363636 -508.1253144878448 L 349.8863636363636 -508.1253144878448 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -497.9976793613362 L 381.02272727272725 -507.9976793613362 L 393.52272727272725 -507.9976793613362 L 393.52272727272725 -497.9976793613362 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -497.9976793613362 L 381.02272727272725 -507.9976793613362 L 393.52272727272725 -507.9976793613362 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -504.46163436047254 L 424.6590909090909 -514.4616343604725 L 437.1590909090909 -514.4616343604725 L 437.1590909090909 -504.46163436047254 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -504.46163436047254 L 424.6590909090909 -514.4616343604725 L 437.1590909090909 -514.4616343604725 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -500.38350619212486 L 468.2954545454545 -510.38350619212486 L 480.7954545454545 -510.38350619212486 L 480.7954545454545 -500.38350619212486 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -500.38350619212486 L 468.2954545454545 -510.38350619212486 L 480.7954545454545 -510.38350619212486 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -503.0382342117714 L 511.9318181818182 -513.0382342117714 L 524.4318181818182 -513.0382342117714 L 524.4318181818182 -503.0382342117714 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -503.0382342117714 L 511.9318181818182 -513.0382342117714 L 524.4318181818182 -513.0382342117714 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -508.315471675441 L 555.5681818181818 -518.315471675441 L 568.0681818181818 -518.315471675441 L 568.0681818181818 -508.315471675441 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -508.315471675441 L 555.5681818181818 -518.315471675441 L 568.0681818181818 -518.315471675441 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -512.1023934871914 L 599.2045454545455 -522.1023934871914 L 611.7045454545455 -522.1023934871914 L 611.7045454545455 -512.1023934871914 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -512.1023934871914 L 599.2045454545455 -522.1023934871914 L 611.7045454545455 -522.1023934871914 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -515.0 L 642.840909090909 -525.0 L 655.340909090909 -525.0 L 655.340909090909 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -515.0 L 642.840909090909 -525.0 L 655.340909090909 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -493.7898507731707 L 686.4772727272727 -503.7898507731707 L 698.9772727272727 -503.7898507731707 L 698.9772727272727 -493.7898507731707 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -493.7898507731707 L 686.4772727272727 -503.7898507731707 L 698.9772727272727 -503.7898507731707 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -500.06462490518425 L 730.1136363636364 -510.06462490518425 L 742.6136363636364 -510.06462490518425 L 742.6136363636364 -500.06462490518425 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -500.06462490518425 L 730.1136363636364 -510.06462490518425 L 742.6136363636364 -510.06462490518425 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -457.2126050483279 L 387.27272727272725 -470.17562503285694 L 430.9090909090909 -463.46011730865996 L 474.5454545454545 -470.70764458930705 L 518.1818181818182 -459.0606295014006 L 561.8181818181818 -464.9785209495843 L 605.4545454545455 -466.1780433035681 L 649.090909090909 -469.82617740494015 L 692.7272727272727 -470.6907091841716 L 736.3636363636364 -478.273227039571" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 336.4935064935065 -450.0697479054707 L 336.4935064935065 -464.355462191185 L 350.7792207792208 -464.355462191185 L 350.7792207792208 -450.0697479054707 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -457.2126050483279 L 343.6363636363636 -464.355462191185 L 350.7792207792208 -457.2126050483279 L 343.6363636363636 -450.0697479054707 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 380.12987012987014 -463.03276788999983 L 380.12987012987014 -477.31848217571405 L 394.4155844155844 -477.31848217571405 L 394.4155844155844 -463.03276788999983 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -470.17562503285694 L 387.27272727272725 -477.31848217571405 L 394.4155844155844 -470.17562503285694 L 387.27272727272725 -463.03276788999983 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 423.76623376623377 -456.31726016580285 L 423.76623376623377 -470.60297445151707 L 438.05194805194805 -470.60297445151707 L 438.05194805194805 -456.31726016580285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -463.46011730865996 L 430.9090909090909 -470.60297445151707 L 438.05194805194805 -463.46011730865996 L 430.9090909090909 -456.31726016580285 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 467.4025974025974 -463.56478744644994 L 467.4025974025974 -477.85050173216416 L 481.68831168831167 -477.85050173216416 L 481.68831168831167 -463.56478744644994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -470.70764458930705 L 474.5454545454545 -477.85050173216416 L 481.68831168831167 -470.70764458930705 L 474.5454545454545 -463.56478744644994 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.038961038961 -451.9177723585435 L 511.038961038961 -466.2034866442578 L 525.3246753246754 -466.2034866442578 L 525.3246753246754 -451.9177723585435 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -459.0606295014006 L 518.1818181818182 -466.2034866442578 L 525.3246753246754 -459.0606295014006 L 518.1818181818182 -451.9177723585435 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 554.6753246753246 -457.8356638067272 L 554.6753246753246 -472.12137809244143 L 568.961038961039 -472.12137809244143 L 568.961038961039 -457.8356638067272 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -464.9785209495843 L 561.8181818181818 -472.12137809244143 L 568.961038961039 -464.9785209495843 L 561.8181818181818 -457.8356638067272 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 598.3116883116883 -459.03518616071096 L 598.3116883116883 -473.3209004464252 L 612.5974025974026 -473.3209004464252 L 612.5974025974026 -459.03518616071096 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -466.1780433035681 L 605.4545454545455 -473.3209004464252 L 612.5974025974026 -466.1780433035681 L 605.4545454545455 -459.03518616071096 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 641.9480519480519 -462.68332026208304 L 641.9480519480519 -476.9690345477973 L 656.2337662337662 -476.9690345477973 L 656.2337662337662 -462.68332026208304 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -469.82617740494015 L 649.090909090909 -476.9690345477973 L 656.2337662337662 -469.82617740494015 L 649.090909090909 -462.68332026208304 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 685.5844155844156 -463.54785204131446 L 685.5844155844156 -477.83356632702873 L 699.8701298701299 -477.83356632702873 L 699.8701298701299 -463.54785204131446 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -470.6907091841716 L 692.7272727272727 -477.83356632702873 L 699.8701298701299 -470.6907091841716 L 692.7272727272727 -463.54785204131446 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 729.2207792207791 -471.1303698967139 L 729.2207792207791 -485.41608418242816 L 743.5064935064936 -485.41608418242816 L 743.5064935064936 -471.1303698967139 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -478.273227039571 L 736.3636363636364 -485.41608418242816 L 743.5064935064936 -478.273227039571 L 736.3636363636364 -471.1303698967139 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -449.5991077932904 L 387.27272727272725 -457.63062041411007 L 430.9090909090909 -456.300158464323 L 474.5454545454545 -459.93342245386884 L 518.1818181818182 -461.9838456512433 L 561.8181818181818 -460.4295059067389 L 605.4545454545455 -461.5534385256059 L 649.090909090909 -462.6216082251245 L 692.7272727272727 -463.2321089273242 L 736.3636363636364 -466.05206041170686" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip27);">
+ <path d="M 336.4935064935065 -442.4562506504333 L 336.4935064935065 -456.74196493614755 L 350.7792207792208 -456.74196493614755 L 350.7792207792208 -442.4562506504333 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -449.5991077932904 L 343.6363636363636 -456.74196493614755 L 350.7792207792208 -449.5991077932904 L 343.6363636363636 -442.4562506504333 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip28);">
+ <path d="M 380.12987012987014 -450.4877632712529 L 380.12987012987014 -464.77347755696724 L 394.4155844155844 -464.77347755696724 L 394.4155844155844 -450.4877632712529 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -457.63062041411007 L 387.27272727272725 -464.77347755696724 L 394.4155844155844 -457.63062041411007 L 387.27272727272725 -450.4877632712529 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip29);">
+ <path d="M 423.76623376623377 -449.15730132146587 L 423.76623376623377 -463.44301560718014 L 438.05194805194805 -463.44301560718014 L 438.05194805194805 -449.15730132146587 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -456.300158464323 L 430.9090909090909 -463.44301560718014 L 438.05194805194805 -456.300158464323 L 430.9090909090909 -449.15730132146587 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip30);">
+ <path d="M 467.4025974025974 -452.79056531101173 L 467.4025974025974 -467.07627959672595 L 481.68831168831167 -467.07627959672595 L 481.68831168831167 -452.79056531101173 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -459.93342245386884 L 474.5454545454545 -467.07627959672595 L 481.68831168831167 -459.93342245386884 L 474.5454545454545 -452.79056531101173 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip31);">
+ <path d="M 511.038961038961 -454.8409885083862 L 511.038961038961 -469.1267027941004 L 525.3246753246754 -469.1267027941004 L 525.3246753246754 -454.8409885083862 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -461.9838456512433 L 518.1818181818182 -469.1267027941004 L 525.3246753246754 -461.9838456512433 L 518.1818181818182 -454.8409885083862 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip32);">
+ <path d="M 554.6753246753246 -453.2866487638818 L 554.6753246753246 -467.572363049596 L 568.961038961039 -467.572363049596 L 568.961038961039 -453.2866487638818 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -460.4295059067389 L 561.8181818181818 -467.572363049596 L 568.961038961039 -460.4295059067389 L 561.8181818181818 -453.2866487638818 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip33);">
+ <path d="M 598.3116883116883 -454.4105813827487 L 598.3116883116883 -468.696295668463 L 612.5974025974026 -468.696295668463 L 612.5974025974026 -454.4105813827487 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -461.5534385256059 L 605.4545454545455 -468.696295668463 L 612.5974025974026 -461.5534385256059 L 605.4545454545455 -454.4105813827487 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip34);">
+ <path d="M 641.9480519480519 -455.4787510822673 L 641.9480519480519 -469.76446536798164 L 656.2337662337662 -469.76446536798164 L 656.2337662337662 -455.4787510822673 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -462.6216082251245 L 649.090909090909 -469.76446536798164 L 656.2337662337662 -462.6216082251245 L 649.090909090909 -455.4787510822673 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip35);">
+ <path d="M 685.5844155844156 -456.089251784467 L 685.5844155844156 -470.37496607018136 L 699.8701298701299 -470.37496607018136 L 699.8701298701299 -456.089251784467 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -463.2321089273242 L 692.7272727272727 -470.37496607018136 L 699.8701298701299 -463.2321089273242 L 692.7272727272727 -456.089251784467 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip36);">
+ <path d="M 729.2207792207791 -458.9092032688497 L 729.2207792207791 -473.194917554564 L 743.5064935064936 -473.194917554564 L 743.5064935064936 -458.9092032688497 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -466.05206041170686 L 736.3636363636364 -473.194917554564 L 743.5064935064936 -466.05206041170686 L 736.3636363636364 -458.9092032688497 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -448.23807950252717 L 387.27272727272725 -456.5062747365812 L 430.9090909090909 -454.65329357956637 L 474.5454545454545 -460.05527475911174 L 518.1818181818182 -456.11676041846596 L 561.8181818181818 -459.08623913843473 L 605.4545454545455 -460.2477600955292 L 649.090909090909 -462.6216082251245 L 692.7272727272727 -462.638130571598 L 736.3636363636364 -466.50022905980336" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 338.6363636363636 -443.23807950252717 L 348.6363636363636 -453.23807950252717" style="stroke-width:0.7;"/>
+ <path d="M 348.6363636363636 -443.23807950252717 L 338.6363636363636 -453.23807950252717" style="stroke-width:0.7;"/>
+ <path d="M 382.27272727272725 -451.5062747365812 L 392.27272727272725 -461.5062747365812" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -451.5062747365812 L 382.27272727272725 -461.5062747365812" style="stroke-width:0.7;"/>
+ <path d="M 425.9090909090909 -449.65329357956637 L 435.9090909090909 -459.65329357956637" style="stroke-width:0.7;"/>
+ <path d="M 435.9090909090909 -449.65329357956637 L 425.9090909090909 -459.65329357956637" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -455.05527475911174 L 479.5454545454545 -465.05527475911174" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -455.05527475911174 L 469.5454545454545 -465.05527475911174" style="stroke-width:0.7;"/>
+ <path d="M 513.1818181818182 -451.11676041846596 L 523.1818181818182 -461.11676041846596" style="stroke-width:0.7;"/>
+ <path d="M 523.1818181818182 -451.11676041846596 L 513.1818181818182 -461.11676041846596" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -454.08623913843473 L 566.8181818181818 -464.08623913843473" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -454.08623913843473 L 556.8181818181818 -464.08623913843473" style="stroke-width:0.7;"/>
+ <path d="M 600.4545454545455 -455.2477600955292 L 610.4545454545455 -465.2477600955292" style="stroke-width:0.7;"/>
+ <path d="M 610.4545454545455 -455.2477600955292 L 600.4545454545455 -465.2477600955292" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -457.6216082251245 L 654.090909090909 -467.6216082251245" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -457.6216082251245 L 644.090909090909 -467.6216082251245" style="stroke-width:0.7;"/>
+ <path d="M 687.7272727272727 -457.638130571598 L 697.7272727272727 -467.638130571598" style="stroke-width:0.7;"/>
+ <path d="M 697.7272727272727 -457.638130571598 L 687.7272727272727 -467.638130571598" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -461.50022905980336 L 741.3636363636364 -471.50022905980336" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -461.50022905980336 L 731.3636363636364 -471.50022905980336" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -54 L 290 -136 L 708.4 -136 L 708.4 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip42);">
+ <path d="M 300.85714285714283 -78.1904761904762 L 300.85714285714283 -92.47619047619048 L 315.14285714285717 -92.47619047619048 L 315.14285714285717 -78.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -60.33333333333334 L 313.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -60.33333333333334 L 303.0 -70.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdf b/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdf
new file mode 100644
index 0000000000..3891834fbe
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.png b/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.png
new file mode 100644
index 0000000000..d4dac479c1
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg b/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg
new file mode 100644
index 0000000000..a62e75de13
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg
@@ -0,0 +1,552 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -532 620 484" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 336.4935064935065 -420.07896179633497 L 343.6363636363636 -427.2218189391921 L 350.7792207792208 -420.07896179633497 L 343.6363636363636 -412.9361046534778 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 380.12987012987014 -423.8026016349809 L 387.27272727272725 -430.945458777838 L 394.4155844155844 -423.8026016349809 L 387.27272727272725 -416.65974449212376 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 423.76623376623377 -393.37670412604484 L 430.9090909090909 -400.51956126890195 L 438.05194805194805 -393.37670412604484 L 430.9090909090909 -386.23384698318773 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 467.4025974025974 -423.1900810752036 L 474.5454545454545 -430.33293821806075 L 481.68831168831167 -423.1900810752036 L 474.5454545454545 -416.04722393234647 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.038961038961 -454.30396922388945 L 518.1818181818182 -461.4468263667466 L 525.3246753246754 -454.30396922388945 L 518.1818181818182 -447.16111208103234 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 554.6753246753246 -402.22759252282634 L 561.8181818181818 -409.37044966568345 L 568.961038961039 -402.22759252282634 L 561.8181818181818 -395.0847353799692 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 598.3116883116883 -427.0329905938062 L 605.4545454545455 -434.17584773666334 L 612.5974025974026 -427.0329905938062 L 605.4545454545455 -419.89013345094907 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 641.9480519480519 -454.90570834367065 L 649.090909090909 -462.0485654865278 L 656.2337662337662 -454.90570834367065 L 649.090909090909 -447.76285120081354 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 685.5844155844156 -486.24668057227393 L 692.7272727272727 -493.3895377151311 L 699.8701298701299 -486.24668057227393 L 692.7272727272727 -479.1038234294168 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 729.2207792207791 -520.0 L 736.3636363636364 -527.1428571428571 L 743.5064935064936 -520.0 L 736.3636363636364 -512.8571428571429 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 337.3863636363636 -314.3311219129705 L 349.8863636363636 -314.3311219129705 L 343.6363636363636 -324.3311219129705 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 381.02272727272725 -315.4668792325575 L 393.52272727272725 -315.4668792325575 L 387.27272727272725 -325.4668792325575 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 424.6590909090909 -313.23734482536827 L 437.1590909090909 -313.23734482536827 L 430.9090909090909 -323.23734482536827 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 468.2954545454545 -315.5069727125429 L 480.7954545454545 -315.5069727125429 L 474.5454545454545 -325.5069727125429 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.9318181818182 -312.27793143371713 L 524.4318181818182 -312.27793143371713 L 518.1818181818182 -322.27793143371713 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 555.5681818181818 -313.22494616937274 L 568.0681818181818 -313.22494616937274 L 561.8181818181818 -323.22494616937274 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.2045454545455 -313.9978406490917 L 611.7045454545455 -313.9978406490917 L 605.4545454545455 -323.9978406490917 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 642.840909090909 -315.3247663766092 L 655.340909090909 -315.3247663766092 L 649.090909090909 -325.3247663766092 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 686.4772727272727 -311.502745897999 L 698.9772727272727 -311.502745897999 L 692.7272727272727 -321.502745897999 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 730.1136363636364 -312.11560337777615 L 742.6136363636364 -312.11560337777615 L 736.3636363636364 -322.11560337777615 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -306.4457788518379 L 337.3863636363636 -316.4457788518379 L 349.8863636363636 -316.4457788518379 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -306.45137172383585 L 381.02272727272725 -316.45137172383585 L 393.52272727272725 -316.45137172383585 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -307.12568341159067 L 424.6590909090909 -317.12568341159067 L 437.1590909090909 -317.12568341159067 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -306.4736084438278 L 468.2954545454545 -316.4736084438278 L 480.7954545454545 -316.4736084438278 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -306.7746127717183 L 511.9318181818182 -316.77461277171835 L 524.4318181818182 -316.77461277171835 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -307.73685629136844 L 555.5681818181818 -317.73685629136844 L 568.0681818181818 -317.73685629136844 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -307.2029728595626 L 599.2045454545455 -317.2029728595626 L 611.7045454545455 -317.2029728595626 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -307.52533791544533 L 642.840909090909 -317.52533791544533 L 655.340909090909 -317.52533791544533 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -307.43773871547717 L 686.4772727272727 -317.43773871547717 L 698.9772727272727 -317.43773871547717 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -307.3762845074995 L 730.1136363636364 -317.3762845074995 L 742.6136363636364 -317.3762845074995 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 343.6363636363636 -304.14987120467276 L 337.3863636363636 -314.14987120467276 L 349.8863636363636 -314.14987120467276 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 387.27272727272725 -306.8547997316892 L 381.02272727272725 -316.8547997316892 L 393.52272727272725 -316.8547997316892 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 430.9090909090909 -305.2336080762787 L 424.6590909090909 -315.2336080762787 L 437.1590909090909 -315.2336080762787 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 474.5454545454545 -306.3901870518581 L 468.2954545454545 -316.3901870518581 L 480.7954545454545 -316.3901870518581 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 518.1818181818182 -305.22909334828034 L 511.9318181818182 -315.22909334828034 L 524.4318181818182 -315.22909334828034 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 561.8181818181818 -305.95481902801646 L 555.5681818181818 -315.95481902801646 L 568.0681818181818 -315.95481902801646 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 605.4545454545455 -306.18520492393264 L 599.2045454545455 -316.18520492393264 L 611.7045454545455 -316.18520492393264 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 649.090909090909 -306.7504892997271 L 642.840909090909 -316.7504892997271 L 655.340909090909 -316.7504892997271 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 692.7272727272727 -305.5815116681522 L 686.4772727272727 -315.5815116681522 L 698.9772727272727 -315.5815116681522 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 736.3636363636364 -305.810280348069 L 730.1136363636364 -315.810280348069 L 742.6136363636364 -315.810280348069 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 290 -54 L 290 -136 L 763.568 -136 L 763.568 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 300.85714285714283 -125.33333333333334 L 308.0 -132.47619047619048 L 315.14285714285717 -125.33333333333334 L 308.0 -118.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 6.53e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.31e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.96e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 2.61e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -420.07896179633497 L 387.27272727272725 -423.8026016349809 L 430.9090909090909 -393.37670412604484 L 474.5454545454545 -423.1900810752036 L 518.1818181818182 -454.30396922388945 L 561.8181818181818 -402.22759252282634 L 605.4545454545455 -427.0329905938062 L 649.090909090909 -454.90570834367065 L 692.7272727272727 -486.24668057227393 L 736.3636363636364 -520.0" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 336.4935064935065 -412.9361046534778 L 336.4935064935065 -427.2218189391921 L 350.7792207792208 -427.2218189391921 L 350.7792207792208 -412.9361046534778 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -420.07896179633497 L 343.6363636363636 -427.2218189391921 L 350.7792207792208 -420.07896179633497 L 343.6363636363636 -412.9361046534778 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 380.12987012987014 -416.65974449212376 L 380.12987012987014 -430.945458777838 L 394.4155844155844 -430.945458777838 L 394.4155844155844 -416.65974449212376 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -423.8026016349809 L 387.27272727272725 -430.945458777838 L 394.4155844155844 -423.8026016349809 L 387.27272727272725 -416.65974449212376 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 423.76623376623377 -386.23384698318773 L 423.76623376623377 -400.51956126890195 L 438.05194805194805 -400.51956126890195 L 438.05194805194805 -386.23384698318773 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -393.37670412604484 L 430.9090909090909 -400.51956126890195 L 438.05194805194805 -393.37670412604484 L 430.9090909090909 -386.23384698318773 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 467.4025974025974 -416.04722393234647 L 467.4025974025974 -430.33293821806075 L 481.68831168831167 -430.33293821806075 L 481.68831168831167 -416.04722393234647 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -423.1900810752036 L 474.5454545454545 -430.33293821806075 L 481.68831168831167 -423.1900810752036 L 474.5454545454545 -416.04722393234647 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.038961038961 -447.16111208103234 L 511.038961038961 -461.4468263667466 L 525.3246753246754 -461.4468263667466 L 525.3246753246754 -447.16111208103234 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -454.30396922388945 L 518.1818181818182 -461.4468263667466 L 525.3246753246754 -454.30396922388945 L 518.1818181818182 -447.16111208103234 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 554.6753246753246 -395.0847353799692 L 554.6753246753246 -409.37044966568345 L 568.961038961039 -409.37044966568345 L 568.961038961039 -395.0847353799692 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -402.22759252282634 L 561.8181818181818 -409.37044966568345 L 568.961038961039 -402.22759252282634 L 561.8181818181818 -395.0847353799692 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 598.3116883116883 -419.89013345094907 L 598.3116883116883 -434.17584773666334 L 612.5974025974026 -434.17584773666334 L 612.5974025974026 -419.89013345094907 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -427.0329905938062 L 605.4545454545455 -434.17584773666334 L 612.5974025974026 -427.0329905938062 L 605.4545454545455 -419.89013345094907 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 641.9480519480519 -447.76285120081354 L 641.9480519480519 -462.0485654865278 L 656.2337662337662 -462.0485654865278 L 656.2337662337662 -447.76285120081354 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -454.90570834367065 L 649.090909090909 -462.0485654865278 L 656.2337662337662 -454.90570834367065 L 649.090909090909 -447.76285120081354 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 685.5844155844156 -479.1038234294168 L 685.5844155844156 -493.3895377151311 L 699.8701298701299 -493.3895377151311 L 699.8701298701299 -479.1038234294168 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -486.24668057227393 L 692.7272727272727 -493.3895377151311 L 699.8701298701299 -486.24668057227393 L 692.7272727272727 -479.1038234294168 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 729.2207792207791 -512.8571428571429 L 729.2207792207791 -527.1428571428571 L 743.5064935064936 -527.1428571428571 L 743.5064935064936 -512.8571428571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -520.0 L 736.3636363636364 -527.1428571428571 L 743.5064935064936 -520.0 L 736.3636363636364 -512.8571428571429 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -319.3311219129705 L 387.27272727272725 -320.4668792325575 L 430.9090909090909 -318.23734482536827 L 474.5454545454545 -320.5069727125429 L 518.1818181818182 -317.27793143371713 L 561.8181818181818 -318.22494616937274 L 605.4545454545455 -318.9978406490917 L 649.090909090909 -320.3247663766092 L 692.7272727272727 -316.502745897999 L 736.3636363636364 -317.11560337777615" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -314.3311219129705 L 337.3863636363636 -324.3311219129705 L 349.8863636363636 -324.3311219129705 L 349.8863636363636 -314.3311219129705 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -314.3311219129705 L 349.8863636363636 -314.3311219129705 L 343.6363636363636 -324.3311219129705 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -315.4668792325575 L 381.02272727272725 -325.4668792325575 L 393.52272727272725 -325.4668792325575 L 393.52272727272725 -315.4668792325575 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -315.4668792325575 L 393.52272727272725 -315.4668792325575 L 387.27272727272725 -325.4668792325575 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -313.23734482536827 L 424.6590909090909 -323.23734482536827 L 437.1590909090909 -323.23734482536827 L 437.1590909090909 -313.23734482536827 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -313.23734482536827 L 437.1590909090909 -313.23734482536827 L 430.9090909090909 -323.23734482536827 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -315.5069727125429 L 468.2954545454545 -325.5069727125429 L 480.7954545454545 -325.5069727125429 L 480.7954545454545 -315.5069727125429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -315.5069727125429 L 480.7954545454545 -315.5069727125429 L 474.5454545454545 -325.5069727125429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -312.27793143371713 L 511.9318181818182 -322.27793143371713 L 524.4318181818182 -322.27793143371713 L 524.4318181818182 -312.27793143371713 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -312.27793143371713 L 524.4318181818182 -312.27793143371713 L 518.1818181818182 -322.27793143371713 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -313.22494616937274 L 555.5681818181818 -323.22494616937274 L 568.0681818181818 -323.22494616937274 L 568.0681818181818 -313.22494616937274 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -313.22494616937274 L 568.0681818181818 -313.22494616937274 L 561.8181818181818 -323.22494616937274 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -313.9978406490917 L 599.2045454545455 -323.9978406490917 L 611.7045454545455 -323.9978406490917 L 611.7045454545455 -313.9978406490917 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -313.9978406490917 L 611.7045454545455 -313.9978406490917 L 605.4545454545455 -323.9978406490917 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -315.3247663766092 L 642.840909090909 -325.3247663766092 L 655.340909090909 -325.3247663766092 L 655.340909090909 -315.3247663766092 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -315.3247663766092 L 655.340909090909 -315.3247663766092 L 649.090909090909 -325.3247663766092 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -311.502745897999 L 686.4772727272727 -321.502745897999 L 698.9772727272727 -321.502745897999 L 698.9772727272727 -311.502745897999 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -311.502745897999 L 698.9772727272727 -311.502745897999 L 692.7272727272727 -321.502745897999 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -312.11560337777615 L 730.1136363636364 -322.11560337777615 L 742.6136363636364 -322.11560337777615 L 742.6136363636364 -312.11560337777615 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -312.11560337777615 L 742.6136363636364 -312.11560337777615 L 736.3636363636364 -322.11560337777615 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -311.4457788518379 L 387.27272727272725 -311.45137172383585 L 430.9090909090909 -312.12568341159067 L 474.5454545454545 -311.4736084438278 L 518.1818181818182 -311.7746127717183 L 561.8181818181818 -312.73685629136844 L 605.4545454545455 -312.2029728595626 L 649.090909090909 -312.52533791544533 L 692.7272727272727 -312.43773871547717 L 736.3636363636364 -312.3762845074995" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -306.4457788518379 L 337.3863636363636 -316.4457788518379 L 349.8863636363636 -316.4457788518379 L 349.8863636363636 -306.4457788518379 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -306.4457788518379 L 337.3863636363636 -316.4457788518379 L 349.8863636363636 -316.4457788518379 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -306.45137172383585 L 381.02272727272725 -316.45137172383585 L 393.52272727272725 -316.45137172383585 L 393.52272727272725 -306.45137172383585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -306.45137172383585 L 381.02272727272725 -316.45137172383585 L 393.52272727272725 -316.45137172383585 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -307.12568341159067 L 424.6590909090909 -317.12568341159067 L 437.1590909090909 -317.12568341159067 L 437.1590909090909 -307.12568341159067 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -307.12568341159067 L 424.6590909090909 -317.12568341159067 L 437.1590909090909 -317.12568341159067 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -306.4736084438278 L 468.2954545454545 -316.4736084438278 L 480.7954545454545 -316.4736084438278 L 480.7954545454545 -306.4736084438278 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -306.4736084438278 L 468.2954545454545 -316.4736084438278 L 480.7954545454545 -316.4736084438278 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -306.7746127717183 L 511.9318181818182 -316.77461277171835 L 524.4318181818182 -316.77461277171835 L 524.4318181818182 -306.7746127717183 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -306.7746127717183 L 511.9318181818182 -316.77461277171835 L 524.4318181818182 -316.77461277171835 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -307.73685629136844 L 555.5681818181818 -317.73685629136844 L 568.0681818181818 -317.73685629136844 L 568.0681818181818 -307.73685629136844 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -307.73685629136844 L 555.5681818181818 -317.73685629136844 L 568.0681818181818 -317.73685629136844 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -307.2029728595626 L 599.2045454545455 -317.2029728595626 L 611.7045454545455 -317.2029728595626 L 611.7045454545455 -307.2029728595626 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -307.2029728595626 L 599.2045454545455 -317.2029728595626 L 611.7045454545455 -317.2029728595626 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -307.52533791544533 L 642.840909090909 -317.52533791544533 L 655.340909090909 -317.52533791544533 L 655.340909090909 -307.52533791544533 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -307.52533791544533 L 642.840909090909 -317.52533791544533 L 655.340909090909 -317.52533791544533 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -307.43773871547717 L 686.4772727272727 -317.43773871547717 L 698.9772727272727 -317.43773871547717 L 698.9772727272727 -307.43773871547717 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -307.43773871547717 L 686.4772727272727 -317.43773871547717 L 698.9772727272727 -317.43773871547717 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -307.3762845074995 L 730.1136363636364 -317.3762845074995 L 742.6136363636364 -317.3762845074995 L 742.6136363636364 -307.3762845074995 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -307.3762845074995 L 730.1136363636364 -317.3762845074995 L 742.6136363636364 -317.3762845074995 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -309.14987120467276 L 387.27272727272725 -311.8547997316892 L 430.9090909090909 -310.2336080762787 L 474.5454545454545 -311.3901870518581 L 518.1818181818182 -310.22909334828034 L 561.8181818181818 -310.95481902801646 L 605.4545454545455 -311.18520492393264 L 649.090909090909 -311.7504892997271 L 692.7272727272727 -310.5815116681522 L 736.3636363636364 -310.810280348069" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -304.14987120467276 L 337.3863636363636 -314.14987120467276 L 349.8863636363636 -314.14987120467276 L 349.8863636363636 -304.14987120467276 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -304.14987120467276 L 337.3863636363636 -314.14987120467276 L 349.8863636363636 -314.14987120467276 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -306.8547997316892 L 381.02272727272725 -316.8547997316892 L 393.52272727272725 -316.8547997316892 L 393.52272727272725 -306.8547997316892 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -306.8547997316892 L 381.02272727272725 -316.8547997316892 L 393.52272727272725 -316.8547997316892 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -305.2336080762787 L 424.6590909090909 -315.2336080762787 L 437.1590909090909 -315.2336080762787 L 437.1590909090909 -305.2336080762787 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -305.2336080762787 L 424.6590909090909 -315.2336080762787 L 437.1590909090909 -315.2336080762787 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -306.3901870518581 L 468.2954545454545 -316.3901870518581 L 480.7954545454545 -316.3901870518581 L 480.7954545454545 -306.3901870518581 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -306.3901870518581 L 468.2954545454545 -316.3901870518581 L 480.7954545454545 -316.3901870518581 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -305.22909334828034 L 511.9318181818182 -315.22909334828034 L 524.4318181818182 -315.22909334828034 L 524.4318181818182 -305.22909334828034 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -305.22909334828034 L 511.9318181818182 -315.22909334828034 L 524.4318181818182 -315.22909334828034 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -305.95481902801646 L 555.5681818181818 -315.95481902801646 L 568.0681818181818 -315.95481902801646 L 568.0681818181818 -305.95481902801646 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -305.95481902801646 L 555.5681818181818 -315.95481902801646 L 568.0681818181818 -315.95481902801646 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -306.18520492393264 L 599.2045454545455 -316.18520492393264 L 611.7045454545455 -316.18520492393264 L 611.7045454545455 -306.18520492393264 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -306.18520492393264 L 599.2045454545455 -316.18520492393264 L 611.7045454545455 -316.18520492393264 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -306.7504892997271 L 642.840909090909 -316.7504892997271 L 655.340909090909 -316.7504892997271 L 655.340909090909 -306.7504892997271 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -306.7504892997271 L 642.840909090909 -316.7504892997271 L 655.340909090909 -316.7504892997271 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -305.5815116681522 L 686.4772727272727 -315.5815116681522 L 698.9772727272727 -315.5815116681522 L 698.9772727272727 -305.5815116681522 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -305.5815116681522 L 686.4772727272727 -315.5815116681522 L 698.9772727272727 -315.5815116681522 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -305.810280348069 L 730.1136363636364 -315.810280348069 L 742.6136363636364 -315.810280348069 L 742.6136363636364 -305.810280348069 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -305.810280348069 L 730.1136363636364 -315.810280348069 L 742.6136363636364 -315.810280348069 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip49);">
+ <path d="M 290 -54 L 290 -136 L 763.568 -136 L 763.568 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip50);">
+ <path d="M 300.85714285714283 -118.1904761904762 L 300.85714285714283 -132.47619047619048 L 315.14285714285717 -132.47619047619048 L 315.14285714285717 -118.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -125.33333333333334 L 308.0 -132.47619047619048 L 315.14285714285717 -125.33333333333334 L 308.0 -118.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip52);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png b/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png
new file mode 100644
index 0000000000..f64764ec93
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png b/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png
new file mode 100644
index 0000000000..e4645973ee
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png b/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png
new file mode 100644
index 0000000000..5535c5fe60
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png b/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png
new file mode 100644
index 0000000000..940a27f714
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdf b/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdf
new file mode 100644
index 0000000000..39e4e2cb63
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png b/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png
new file mode 100644
index 0000000000..570a70da96
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg b/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg
new file mode 100644
index 0000000000..46ebb3da57
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="224pt" height="146pt" viewBox="0.00 0.00 224.00 146.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 142)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-142 221,-142 221,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="1,-117 1,-137 215,-137 215,-117 1,-117"/>
+<text text-anchor="middle" x="108" y="-124.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::basic_invalidation_guarantee</text>
+</g>
+<!-- Node2 -->
+<g id="node3" class="node"><title>Node2</title>
+<a xlink:href="a00351.html" target="_top" xlink:title="__gnu_pbds::point_invalidation_guarantee">
+<polygon fill="white" stroke="black" points="1.5,-59 1.5,-79 214.5,-79 214.5,-59 1.5,-59"/>
+<text text-anchor="middle" x="108" y="-66.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::point_invalidation_guarantee</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node2 -->
+<g id="edge2" class="edge"><title>Node1-&gt;Node2</title>
+<path fill="none" stroke="midnightblue" d="M108,-106.89C108,-97.6201 108,-87.0083 108,-79.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="104.5,-106.897 108,-116.897 111.5,-106.897 104.5,-106.897"/>
+</g>
+<!-- Node3 -->
+<g id="node5" class="node"><title>Node3</title>
+<a xlink:href="a00355.html" target="_top" xlink:title="__gnu_pbds::range_invalidation_guarantee">
+<polygon fill="white" stroke="black" points="-0.5,-1 -0.5,-21 216.5,-21 216.5,-1 -0.5,-1"/>
+<text text-anchor="middle" x="108" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::range_invalidation_guarantee</text>
+</a>
+</g>
+<!-- Node2&#45;&gt;Node3 -->
+<g id="edge4" class="edge"><title>Node2-&gt;Node3</title>
+<path fill="none" stroke="midnightblue" d="M108,-48.8902C108,-39.6201 108,-29.0083 108,-21.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="104.5,-48.8971 108,-58.8972 111.5,-48.8972 104.5,-48.8971"/>
+</g>
+</g>
+</svg> \ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/images/pbds_list_update.png b/libstdc++-v3/doc/xml/images/pbds_list_update.png
new file mode 100644
index 0000000000..7c96dcaf66
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_list_update.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdf
new file mode 100644
index 0000000000..1eb60d103f
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.png
new file mode 100644
index 0000000000..cb9000fa41
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg
new file mode 100644
index 0000000000..b43876cb6e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 365.45454545454544 -349.42975133995253 L 359.20454545454544 -359.42975133995253 L 371.70454545454544 -359.42975133995253 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 452.72727272727275 -391.9388893770319 L 446.47727272727275 -401.9388893770319 L 458.97727272727275 -401.9388893770319 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 540.0 -434.3407433441701 L 533.75 -444.3407433441701 L 546.25 -444.3407433441701 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 627.2727272727273 -474.4388893770319 L 621.0227272727273 -484.4388893770319 L 633.5227272727273 -484.4388893770319 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 9.10e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.82e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.73e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.64e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.55e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 365.45454545454544 -354.42975133995253 L 452.72727272727275 -396.9388893770319 L 540.0 -439.3407433441701 L 627.2727272727273 -479.4388893770319 L 714.5454545454545 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 359.20454545454544 -349.42975133995253 L 359.20454545454544 -359.42975133995253 L 371.70454545454544 -359.42975133995253 L 371.70454545454544 -349.42975133995253 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -349.42975133995253 L 359.20454545454544 -359.42975133995253 L 371.70454545454544 -359.42975133995253 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 446.47727272727275 -391.9388893770319 L 446.47727272727275 -401.9388893770319 L 458.97727272727275 -401.9388893770319 L 458.97727272727275 -391.9388893770319 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -391.9388893770319 L 446.47727272727275 -401.9388893770319 L 458.97727272727275 -401.9388893770319 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 533.75 -434.3407433441701 L 533.75 -444.3407433441701 L 546.25 -444.3407433441701 L 546.25 -434.3407433441701 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -434.3407433441701 L 533.75 -444.3407433441701 L 546.25 -444.3407433441701 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 621.0227272727273 -474.4388893770319 L 621.0227272727273 -484.4388893770319 L 633.5227272727273 -484.4388893770319 L 633.5227272727273 -474.4388893770319 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 627.2727272727273 -474.4388893770319 L 621.0227272727273 -484.4388893770319 L 633.5227272727273 -484.4388893770319 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 708.2954545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 L 720.7954545454545 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 365.45454545454544 -320.29621298655655 L 452.72727272727275 -322.45117300764434 L 540.0 -327.4993717599508 L 627.2727272727273 -332.92499780335646 L 714.5454545454545 -339.02694842280994" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 360.45454545454544 -315.29621298655655 L 370.45454545454544 -325.29621298655655" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -315.29621298655655 L 360.45454545454544 -325.29621298655655" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -317.45117300764434 L 457.72727272727275 -327.45117300764434" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -317.45117300764434 L 447.72727272727275 -327.45117300764434" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -322.4993717599508 L 545.0 -332.4993717599508" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -322.4993717599508 L 535.0 -332.4993717599508" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -327.92499780335646 L 632.2727272727273 -337.92499780335646" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -327.92499780335646 L 622.2727272727273 -337.92499780335646" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -334.02694842280994 L 719.5454545454545 -344.02694842280994" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -334.02694842280994 L 709.5454545454545 -344.02694842280994" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 365.45454545454544 -320.71582901326775 L 452.72727272727275 -321.2288595026799 L 540.0 -321.1708197873649 L 627.2727272727273 -322.0411255601441 L 714.5454545454545 -321.08354274668307" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 360.45454545454544 -315.71582901326775 L 370.45454545454544 -325.71582901326775" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -315.71582901326775 L 360.45454545454544 -325.71582901326775" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -316.2288595026799 L 457.72727272727275 -326.2288595026799" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -316.2288595026799 L 447.72727272727275 -326.2288595026799" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -316.1708197873649 L 545.0 -326.1708197873649" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -316.1708197873649 L 535.0 -326.1708197873649" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -317.0411255601441 L 632.2727272727273 -327.0411255601441" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -317.0411255601441 L 622.2727272727273 -327.0411255601441" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -316.08354274668307 L 719.5454545454545 -326.08354274668307" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -316.08354274668307 L 709.5454545454545 -326.08354274668307" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 301.75 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 L 314.25 -184.33333333333331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -169.33333333333334 L 316 -169.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -164.33333333333334 L 313.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -164.33333333333334 L 303.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-164.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-148.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ lu_mtf_set
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -112.33333333333334 L 313.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -112.33333333333334 L 303.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdf
new file mode 100644
index 0000000000..829364690e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.png
new file mode 100644
index 0000000000..12d062dbc0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg
new file mode 100644
index 0000000000..110da9d7ed
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg
@@ -0,0 +1,277 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 365.45454545454544 -418.85314145874344 L 359.20454545454544 -428.85314145874344 L 371.70454545454544 -428.85314145874344 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 452.72727272727275 -457.93022157791137 L 446.47727272727275 -467.93022157791137 L 458.97727272727275 -467.93022157791137 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 540.0 -480.48089455764216 L 533.75 -490.48089455764216 L 546.25 -490.48089455764216 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 627.2727272727273 -504.8069173272331 L 621.0227272727273 -514.8069173272331 L 633.5227272727273 -514.8069173272331 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 358.31168831168833 -371.63978959408416 L 365.45454545454544 -378.7826467369413 L 372.5974025974026 -371.63978959408416 L 365.45454545454544 -364.49693245122705 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 445.5844155844156 -380.1720021811991 L 452.72727272727275 -387.3148593240563 L 459.87012987012986 -380.1720021811991 L 452.72727272727275 -373.029145038342 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 532.8571428571429 -386.4244959302016 L 540.0 -393.56735307305877 L 547.1428571428571 -386.4244959302016 L 540.0 -379.2816387873445 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 620.1298701298701 -392.11483215406713 L 627.2727272727273 -399.2576892969243 L 634.4155844155844 -392.11483215406713 L 627.2727272727273 -384.97197501121 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 707.4025974025974 -397.5334162366335 L 714.5454545454545 -404.6762733794907 L 721.6883116883117 -397.5334162366335 L 714.5454545454545 -390.39055909377635 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 300.85714285714283 -169.33333333333334 L 308.0 -176.47619047619048 L 315.14285714285717 -169.33333333333334 L 308.0 -162.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.20e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.41e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 3.61e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 4.81e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.02e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 365.45454545454544 -423.85314145874344 L 452.72727272727275 -462.93022157791137 L 540.0 -485.48089455764216 L 627.2727272727273 -509.8069173272331 L 714.5454545454545 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 359.20454545454544 -418.85314145874344 L 359.20454545454544 -428.85314145874344 L 371.70454545454544 -428.85314145874344 L 371.70454545454544 -418.85314145874344 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -418.85314145874344 L 359.20454545454544 -428.85314145874344 L 371.70454545454544 -428.85314145874344 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 446.47727272727275 -457.93022157791137 L 446.47727272727275 -467.93022157791137 L 458.97727272727275 -467.93022157791137 L 458.97727272727275 -457.93022157791137 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -457.93022157791137 L 446.47727272727275 -467.93022157791137 L 458.97727272727275 -467.93022157791137 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 533.75 -480.48089455764216 L 533.75 -490.48089455764216 L 546.25 -490.48089455764216 L 546.25 -480.48089455764216 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -480.48089455764216 L 533.75 -490.48089455764216 L 546.25 -490.48089455764216 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 621.0227272727273 -504.8069173272331 L 621.0227272727273 -514.8069173272331 L 633.5227272727273 -514.8069173272331 L 633.5227272727273 -504.8069173272331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 627.2727272727273 -504.8069173272331 L 621.0227272727273 -514.8069173272331 L 633.5227272727273 -514.8069173272331 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 708.2954545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 L 720.7954545454545 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 365.45454545454544 -371.63978959408416 L 452.72727272727275 -380.1720021811991 L 540.0 -386.4244959302016 L 627.2727272727273 -392.11483215406713 L 714.5454545454545 -397.5334162366335" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 358.31168831168833 -364.49693245122705 L 358.31168831168833 -378.7826467369413 L 372.5974025974026 -378.7826467369413 L 372.5974025974026 -364.49693245122705 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -371.63978959408416 L 365.45454545454544 -378.7826467369413 L 372.5974025974026 -371.63978959408416 L 365.45454545454544 -364.49693245122705 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 445.5844155844156 -373.029145038342 L 445.5844155844156 -387.3148593240563 L 459.87012987012986 -387.3148593240563 L 459.87012987012986 -373.029145038342 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -380.1720021811991 L 452.72727272727275 -387.3148593240563 L 459.87012987012986 -380.1720021811991 L 452.72727272727275 -373.029145038342 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 532.8571428571429 -379.2816387873445 L 532.8571428571429 -393.56735307305877 L 547.1428571428571 -393.56735307305877 L 547.1428571428571 -379.2816387873445 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 532.8571428571429 -386.4244959302016 L 540.0 -393.56735307305877 L 547.1428571428571 -386.4244959302016 L 540.0 -379.2816387873445 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 620.1298701298701 -384.97197501121 L 620.1298701298701 -399.2576892969243 L 634.4155844155844 -399.2576892969243 L 634.4155844155844 -384.97197501121 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.1298701298701 -392.11483215406713 L 627.2727272727273 -399.2576892969243 L 634.4155844155844 -392.11483215406713 L 627.2727272727273 -384.97197501121 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 707.4025974025974 -390.39055909377635 L 707.4025974025974 -404.6762733794907 L 721.6883116883117 -404.6762733794907 L 721.6883116883117 -390.39055909377635 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 707.4025974025974 -397.5334162366335 L 714.5454545454545 -404.6762733794907 L 721.6883116883117 -397.5334162366335 L 714.5454545454545 -390.39055909377635 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip15);">
+ <path d="M 365.45454545454544 -371.47264191094325 L 452.72727272727275 -372.0512581794967 L 540.0 -373.0515840293664 L 627.2727272727273 -373.4122133851147 L 714.5454545454545 -374.7493948502421" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip16);">
+ <path d="M 360.45454545454544 -366.47264191094325 L 370.45454545454544 -376.47264191094325" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -366.47264191094325 L 360.45454545454544 -376.47264191094325" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -367.0512581794967 L 457.72727272727275 -377.0512581794967" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -367.0512581794967 L 447.72727272727275 -377.0512581794967" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -368.0515840293664 L 545.0 -378.0515840293664" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -368.0515840293664 L 535.0 -378.0515840293664" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -368.4122133851147 L 632.2727272727273 -378.4122133851147" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -368.4122133851147 L 622.2727272727273 -378.4122133851147" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -369.7493948502421 L 719.5454545454545 -379.7493948502421" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -369.7493948502421 L 709.5454545454545 -379.7493948502421" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 301.75 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 L 314.25 -184.33333333333331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ n_mmap
+ </text>
+ <path d="M 300 -169.33333333333334 L 316 -169.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 300.85714285714283 -162.1904761904762 L 300.85714285714283 -176.47619047619048 L 315.14285714285717 -176.47619047619048 L 315.14285714285717 -162.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -169.33333333333334 L 308.0 -176.47619047619048 L 315.14285714285717 -169.33333333333334 L 308.0 -162.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-164.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-148.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ lu_mtf_set
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -112.33333333333334 L 313.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -112.33333333333334 L 303.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdf
new file mode 100644
index 0000000000..6a849de08d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.png
new file mode 100644
index 0000000000..7c387198e2
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg
new file mode 100644
index 0000000000..95a78222d1
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 387.27272727272725 -388.60809721619444 L 381.02272727272725 -398.60809721619444 L 393.52272727272725 -398.60809721619444 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 474.5454545454545 -429.2522413044826 L 468.2954545454545 -439.2522413044826 L 480.7954545454545 -439.2522413044826 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 561.8181818181818 -451.3829127658255 L 555.5681818181818 -461.3829127658255 L 568.0681818181818 -461.3829127658255 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 649.090909090909 -480.7335234670469 L 642.840909090909 -490.7335234670469 L 655.340909090909 -490.7335234670469 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 3.23e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 6.45e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 9.68e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.29e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.61e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 387.27272727272725 -393.60809721619444 L 474.5454545454545 -434.2522413044826 L 561.8181818181818 -456.3829127658255 L 649.090909090909 -485.7335234670469 L 736.3636363636364 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 381.02272727272725 -388.60809721619444 L 381.02272727272725 -398.60809721619444 L 393.52272727272725 -398.60809721619444 L 393.52272727272725 -388.60809721619444 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -388.60809721619444 L 381.02272727272725 -398.60809721619444 L 393.52272727272725 -398.60809721619444 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 468.2954545454545 -429.2522413044826 L 468.2954545454545 -439.2522413044826 L 480.7954545454545 -439.2522413044826 L 480.7954545454545 -429.2522413044826 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -429.2522413044826 L 468.2954545454545 -439.2522413044826 L 480.7954545454545 -439.2522413044826 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 555.5681818181818 -451.3829127658255 L 555.5681818181818 -461.3829127658255 L 568.0681818181818 -461.3829127658255 L 568.0681818181818 -451.3829127658255 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -451.3829127658255 L 555.5681818181818 -461.3829127658255 L 568.0681818181818 -461.3829127658255 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 642.840909090909 -480.7335234670469 L 642.840909090909 -490.7335234670469 L 655.340909090909 -490.7335234670469 L 655.340909090909 -480.7335234670469 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -480.7335234670469 L 642.840909090909 -490.7335234670469 L 655.340909090909 -490.7335234670469 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 387.27272727272725 -358.7219542439085 L 474.5454545454545 -360.06754293508584 L 561.8181818181818 -361.5009734019468 L 649.090909090909 -364.88861057722113 L 736.3636363636364 -364.8719697439395" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 382.27272727272725 -353.7219542439085 L 392.27272727272725 -363.7219542439085" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -353.7219542439085 L 382.27272727272725 -363.7219542439085" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -355.06754293508584 L 479.5454545454545 -365.06754293508584" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -355.06754293508584 L 469.5454545454545 -365.06754293508584" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -356.5009734019468 L 566.8181818181818 -366.5009734019468" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -356.5009734019468 L 556.8181818181818 -366.5009734019468" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -359.88861057722113 L 654.090909090909 -369.88861057722113" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -359.88861057722113 L 644.090909090909 -369.88861057722113" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -359.8719697439395 L 741.3636363636364 -369.8719697439395" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -359.8719697439395 L 731.3636363636364 -369.8719697439395" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 387.27272727272725 -358.5368590737181 L 474.5454545454545 -359.8979973959948 L 561.8181818181818 -361.08454336908676 L 649.090909090909 -362.7300762601525 L 736.3636363636364 -366.7199206398413" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 382.27272727272725 -353.5368590737181 L 392.27272727272725 -363.5368590737181" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -353.5368590737181 L 382.27272727272725 -363.5368590737181" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -354.8979973959948 L 479.5454545454545 -364.8979973959948" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -354.8979973959948 L 469.5454545454545 -364.8979973959948" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -356.08454336908676 L 566.8181818181818 -366.08454336908676" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -356.08454336908676 L 556.8181818181818 -366.08454336908676" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -357.7300762601525 L 654.090909090909 -367.7300762601525" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -357.7300762601525 L 644.090909090909 -367.7300762601525" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -361.7199206398413 L 741.3636363636364 -371.7199206398413" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -361.7199206398413 L 731.3636363636364 -371.7199206398413" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 301.75 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 L 314.25 -184.33333333333331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -169.33333333333334 L 316 -169.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -164.33333333333334 L 313.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -164.33333333333334 L 303.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-164.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-148.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -112.33333333333334 L 313.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -112.33333333333334 L 303.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdf
new file mode 100644
index 0000000000..3acdebf08f
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.png
new file mode 100644
index 0000000000..2066376ee5
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg
new file mode 100644
index 0000000000..be4f1bfd61
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg
@@ -0,0 +1,277 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 387.27272727272725 -438.6924210526316 L 381.02272727272725 -448.6924210526316 L 393.52272727272725 -448.6924210526316 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 474.5454545454545 -462.67936842105263 L 468.2954545454545 -472.67936842105263 L 480.7954545454545 -472.67936842105263 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 561.8181818181818 -486.5736842105263 L 555.5681818181818 -496.5736842105263 L 568.0681818181818 -496.5736842105263 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 649.090909090909 -494.4154105263158 L 642.840909090909 -504.4154105263158 L 655.340909090909 -504.4154105263158 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 380.12987012987014 -410.7016842105263 L 387.27272727272725 -417.8445413533835 L 394.4155844155844 -410.7016842105263 L 387.27272727272725 -403.5588270676692 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 467.4025974025974 -413.0758315789474 L 474.5454545454545 -420.2186887218045 L 481.68831168831167 -413.0758315789474 L 474.5454545454545 -405.9329744360902 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 554.6753246753246 -416.20446315789474 L 561.8181818181818 -423.3473203007519 L 568.961038961039 -416.20446315789474 L 561.8181818181818 -409.06160601503757 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 641.9480519480519 -416.5073684210526 L 649.090909090909 -423.65022556390977 L 656.2337662337662 -416.5073684210526 L 649.090909090909 -409.3645112781955 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 729.2207792207791 -419.06029473684214 L 736.3636363636364 -426.20315187969925 L 743.5064935064936 -419.06029473684214 L 736.3636363636364 -411.91743759398497 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 9.50e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.90e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.85e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.80e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.75e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 387.27272727272725 -443.6924210526316 L 474.5454545454545 -467.67936842105263 L 561.8181818181818 -491.5736842105263 L 649.090909090909 -499.4154105263158 L 736.3636363636364 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 381.02272727272725 -438.6924210526316 L 381.02272727272725 -448.6924210526316 L 393.52272727272725 -448.6924210526316 L 393.52272727272725 -438.6924210526316 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -438.6924210526316 L 381.02272727272725 -448.6924210526316 L 393.52272727272725 -448.6924210526316 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 468.2954545454545 -462.67936842105263 L 468.2954545454545 -472.67936842105263 L 480.7954545454545 -472.67936842105263 L 480.7954545454545 -462.67936842105263 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -462.67936842105263 L 468.2954545454545 -472.67936842105263 L 480.7954545454545 -472.67936842105263 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 555.5681818181818 -486.5736842105263 L 555.5681818181818 -496.5736842105263 L 568.0681818181818 -496.5736842105263 L 568.0681818181818 -486.5736842105263 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -486.5736842105263 L 555.5681818181818 -496.5736842105263 L 568.0681818181818 -496.5736842105263 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 642.840909090909 -494.4154105263158 L 642.840909090909 -504.4154105263158 L 655.340909090909 -504.4154105263158 L 655.340909090909 -494.4154105263158 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -494.4154105263158 L 642.840909090909 -504.4154105263158 L 655.340909090909 -504.4154105263158 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 387.27272727272725 -413.74046315789474 L 474.5454545454545 -414.92753684210527 L 561.8181818181818 -420.35482105263156 L 649.090909090909 -418.10526315789474 L 736.3636363636364 -419.06029473684214" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 382.27272727272725 -408.74046315789474 L 392.27272727272725 -418.74046315789474" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -408.74046315789474 L 382.27272727272725 -418.74046315789474" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -409.92753684210527 L 479.5454545454545 -419.92753684210527" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -409.92753684210527 L 469.5454545454545 -419.92753684210527" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -415.35482105263156 L 566.8181818181818 -425.35482105263156" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -415.35482105263156 L 556.8181818181818 -425.35482105263156" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -413.10526315789474 L 654.090909090909 -423.10526315789474" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -413.10526315789474 L 644.090909090909 -423.10526315789474" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -414.06029473684214 L 741.3636363636364 -424.06029473684214" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -414.06029473684214 L 731.3636363636364 -424.06029473684214" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 387.27272727272725 -410.7016842105263 L 474.5454545454545 -413.0758315789474 L 561.8181818181818 -416.20446315789474 L 649.090909090909 -416.5073684210526 L 736.3636363636364 -419.06029473684214" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 380.12987012987014 -403.5588270676692 L 380.12987012987014 -417.8445413533835 L 394.4155844155844 -417.8445413533835 L 394.4155844155844 -403.5588270676692 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -410.7016842105263 L 387.27272727272725 -417.8445413533835 L 394.4155844155844 -410.7016842105263 L 387.27272727272725 -403.5588270676692 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 467.4025974025974 -405.9329744360902 L 467.4025974025974 -420.2186887218045 L 481.68831168831167 -420.2186887218045 L 481.68831168831167 -405.9329744360902 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -413.0758315789474 L 474.5454545454545 -420.2186887218045 L 481.68831168831167 -413.0758315789474 L 474.5454545454545 -405.9329744360902 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 554.6753246753246 -409.06160601503757 L 554.6753246753246 -423.3473203007519 L 568.961038961039 -423.3473203007519 L 568.961038961039 -409.06160601503757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -416.20446315789474 L 561.8181818181818 -423.3473203007519 L 568.961038961039 -416.20446315789474 L 561.8181818181818 -409.06160601503757 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 641.9480519480519 -409.3645112781955 L 641.9480519480519 -423.65022556390977 L 656.2337662337662 -423.65022556390977 L 656.2337662337662 -409.3645112781955 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -416.5073684210526 L 649.090909090909 -423.65022556390977 L 656.2337662337662 -416.5073684210526 L 649.090909090909 -409.3645112781955 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 729.2207792207791 -411.91743759398497 L 729.2207792207791 -426.20315187969925 L 743.5064935064936 -426.20315187969925 L 743.5064935064936 -411.91743759398497 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -419.06029473684214 L 736.3636363636364 -426.20315187969925 L 743.5064935064936 -419.06029473684214 L 736.3636363636364 -411.91743759398497 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 301.75 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 L 314.25 -184.33333333333331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ n_mmap
+ </text>
+ <path d="M 300 -169.33333333333334 L 316 -169.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -164.33333333333334 L 313.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -164.33333333333334 L 303.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-164.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-148.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 300.85714285714283 -110.1904761904762 L 300.85714285714283 -124.47619047619048 L 315.14285714285717 -124.47619047619048 L 315.14285714285717 -110.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdf
new file mode 100644
index 0000000000..654787575f
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.png
new file mode 100644
index 0000000000..09afca29a6
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg
new file mode 100644
index 0000000000..feb54b4e81
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 365.45454545454544 -417.0113823194638 L 359.20454545454544 -427.0113823194638 L 371.70454545454544 -427.0113823194638 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 452.72727272727275 -439.7628683445049 L 446.47727272727275 -449.7628683445049 L 458.97727272727275 -449.7628683445049 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 540.0 -467.898950297205 L 533.75 -477.898950297205 L 546.25 -477.898950297205 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 627.2727272727273 -485.48589857088655 L 621.0227272727273 -495.48589857088655 L 633.5227272727273 -495.48589857088655 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.70e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.74e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.61e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.48e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.35e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 365.45454545454544 -422.0113823194638 L 452.72727272727275 -444.7628683445049 L 540.0 -472.898950297205 L 627.2727272727273 -490.48589857088655 L 714.5454545454545 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 359.20454545454544 -417.0113823194638 L 359.20454545454544 -427.0113823194638 L 371.70454545454544 -427.0113823194638 L 371.70454545454544 -417.0113823194638 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -417.0113823194638 L 359.20454545454544 -427.0113823194638 L 371.70454545454544 -427.0113823194638 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 446.47727272727275 -439.7628683445049 L 446.47727272727275 -449.7628683445049 L 458.97727272727275 -449.7628683445049 L 458.97727272727275 -439.7628683445049 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -439.7628683445049 L 446.47727272727275 -449.7628683445049 L 458.97727272727275 -449.7628683445049 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 533.75 -467.898950297205 L 533.75 -477.898950297205 L 546.25 -477.898950297205 L 546.25 -467.898950297205 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -467.898950297205 L 533.75 -477.898950297205 L 546.25 -477.898950297205 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 621.0227272727273 -485.48589857088655 L 621.0227272727273 -495.48589857088655 L 633.5227272727273 -495.48589857088655 L 633.5227272727273 -485.48589857088655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 627.2727272727273 -485.48589857088655 L 621.0227272727273 -495.48589857088655 L 633.5227272727273 -495.48589857088655 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 708.2954545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 L 720.7954545454545 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 365.45454545454544 -457.67699506766155 L 452.72727272727275 -422.1130643733401 L 540.0 -417.3987605918806 L 627.2727272727273 -401.5388895915012 L 714.5454545454545 -406.2324522574934" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 360.45454545454544 -452.67699506766155 L 370.45454545454544 -462.67699506766155" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -452.67699506766155 L 360.45454545454544 -462.67699506766155" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -417.1130643733401 L 457.72727272727275 -427.1130643733401" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -417.1130643733401 L 447.72727272727275 -427.1130643733401" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -412.3987605918806 L 545.0 -422.3987605918806" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -412.3987605918806 L 535.0 -422.3987605918806" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -396.5388895915012 L 632.2727272727273 -406.5388895915012" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -396.5388895915012 L 622.2727272727273 -406.5388895915012" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -401.2324522574934 L 719.5454545454545 -411.2324522574934" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -401.2324522574934 L 709.5454545454545 -411.2324522574934" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 365.45454545454544 -371.77134184899455 L 452.72727272727275 -358.28101682053875 L 540.0 -356.9748324269635 L 627.2727272727273 -355.31655495130894 L 714.5454545454545 -358.35386366510687" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 360.45454545454544 -366.77134184899455 L 370.45454545454544 -376.77134184899455" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -366.77134184899455 L 360.45454545454544 -376.77134184899455" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -353.28101682053875 L 457.72727272727275 -363.28101682053875" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -353.28101682053875 L 447.72727272727275 -363.28101682053875" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -351.9748324269635 L 545.0 -361.9748324269635" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -351.9748324269635 L 535.0 -361.9748324269635" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -350.31655495130894 L 632.2727272727273 -360.31655495130894" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -350.31655495130894 L 622.2727272727273 -360.31655495130894" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -353.35386366510687 L 719.5454545454545 -363.35386366510687" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -353.35386366510687 L 709.5454545454545 -363.35386366510687" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 301.75 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 L 314.25 -184.33333333333331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -169.33333333333334 L 316 -169.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -164.33333333333334 L 313.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -164.33333333333334 L 303.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-164.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-148.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -112.33333333333334 L 313.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -112.33333333333334 L 303.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdf
new file mode 100644
index 0000000000..7b3f0afe79
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.png
new file mode 100644
index 0000000000..a063d4b093
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg
new file mode 100644
index 0000000000..fc927db896
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg
@@ -0,0 +1,277 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 365.45454545454544 -426.8383802878785 L 359.20454545454544 -436.8383802878785 L 371.70454545454544 -436.8383802878785 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 452.72727272727275 -457.0009490500712 L 446.47727272727275 -467.0009490500712 L 458.97727272727275 -467.0009490500712 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 540.0 -474.6556471408402 L 533.75 -484.6556471408402 L 546.25 -484.6556471408402 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 627.2727272727273 -493.9695893893859 L 621.0227272727273 -503.9695893893859 L 633.5227272727273 -503.9695893893859 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 358.31168831168833 -365.3108607649812 L 365.45454545454544 -372.4537179078384 L 372.5974025974026 -365.3108607649812 L 365.45454545454544 -358.1680036221241 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 445.5844155844156 -364.4022331968342 L 452.72727272727275 -371.5450903396913 L 459.87012987012986 -364.4022331968342 L 452.72727272727275 -357.259376053977 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 532.8571428571429 -366.30816007311205 L 540.0 -373.45101721596916 L 547.1428571428571 -366.30816007311205 L 540.0 -359.1653029302549 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 620.1298701298701 -367.8111976191732 L 627.2727272727273 -374.9540547620303 L 634.4155844155844 -367.8111976191732 L 627.2727272727273 -360.668340476316 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 707.4025974025974 -369.3407851338922 L 714.5454545454545 -376.4836422767494 L 721.6883116883117 -369.3407851338922 L 714.5454545454545 -362.19792799103504 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.71e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 3.41e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 5.12e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 6.83e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 8.53e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 365.45454545454544 -431.8383802878785 L 452.72727272727275 -462.0009490500712 L 540.0 -479.6556471408402 L 627.2727272727273 -498.9695893893859 L 714.5454545454545 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 359.20454545454544 -426.8383802878785 L 359.20454545454544 -436.8383802878785 L 371.70454545454544 -436.8383802878785 L 371.70454545454544 -426.8383802878785 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -426.8383802878785 L 359.20454545454544 -436.8383802878785 L 371.70454545454544 -436.8383802878785 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 446.47727272727275 -457.0009490500712 L 446.47727272727275 -467.0009490500712 L 458.97727272727275 -467.0009490500712 L 458.97727272727275 -457.0009490500712 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -457.0009490500712 L 446.47727272727275 -467.0009490500712 L 458.97727272727275 -467.0009490500712 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 533.75 -474.6556471408402 L 533.75 -484.6556471408402 L 546.25 -484.6556471408402 L 546.25 -474.6556471408402 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -474.6556471408402 L 533.75 -484.6556471408402 L 546.25 -484.6556471408402 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 621.0227272727273 -493.9695893893859 L 621.0227272727273 -503.9695893893859 L 633.5227272727273 -503.9695893893859 L 633.5227272727273 -493.9695893893859 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 627.2727272727273 -493.9695893893859 L 621.0227272727273 -503.9695893893859 L 633.5227272727273 -503.9695893893859 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 708.2954545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 L 720.7954545454545 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 714.5454545454545 -515.0 L 708.2954545454545 -525.0 L 720.7954545454545 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 365.45454545454544 -464.05921603777455 L 452.72727272727275 -464.9400048038337 L 540.0 -467.3810553202458 L 627.2727272727273 -461.6655945915862 L 714.5454545454545 -468.39201626273456" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 360.45454545454544 -459.05921603777455 L 370.45454545454544 -469.05921603777455" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -459.05921603777455 L 360.45454545454544 -469.05921603777455" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -459.9400048038337 L 457.72727272727275 -469.9400048038337" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -459.9400048038337 L 447.72727272727275 -469.9400048038337" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -462.3810553202458 L 545.0 -472.3810553202458" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -462.3810553202458 L 535.0 -472.3810553202458" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -456.6655945915862 L 632.2727272727273 -466.6655945915862" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -456.6655945915862 L 622.2727272727273 -466.6655945915862" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -463.39201626273456 L 719.5454545454545 -473.39201626273456" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -463.39201626273456 L 709.5454545454545 -473.39201626273456" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 365.45454545454544 -365.3108607649812 L 452.72727272727275 -364.4022331968342 L 540.0 -366.30816007311205 L 627.2727272727273 -367.8111976191732 L 714.5454545454545 -369.3407851338922" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 358.31168831168833 -358.1680036221241 L 358.31168831168833 -372.4537179078384 L 372.5974025974026 -372.4537179078384 L 372.5974025974026 -358.1680036221241 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -365.3108607649812 L 365.45454545454544 -372.4537179078384 L 372.5974025974026 -365.3108607649812 L 365.45454545454544 -358.1680036221241 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 445.5844155844156 -357.259376053977 L 445.5844155844156 -371.5450903396913 L 459.87012987012986 -371.5450903396913 L 459.87012987012986 -357.259376053977 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -364.4022331968342 L 452.72727272727275 -371.5450903396913 L 459.87012987012986 -364.4022331968342 L 452.72727272727275 -357.259376053977 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 532.8571428571429 -359.1653029302549 L 532.8571428571429 -373.45101721596916 L 547.1428571428571 -373.45101721596916 L 547.1428571428571 -359.1653029302549 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 532.8571428571429 -366.30816007311205 L 540.0 -373.45101721596916 L 547.1428571428571 -366.30816007311205 L 540.0 -359.1653029302549 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 620.1298701298701 -360.668340476316 L 620.1298701298701 -374.9540547620303 L 634.4155844155844 -374.9540547620303 L 634.4155844155844 -360.668340476316 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.1298701298701 -367.8111976191732 L 627.2727272727273 -374.9540547620303 L 634.4155844155844 -367.8111976191732 L 627.2727272727273 -360.668340476316 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 707.4025974025974 -362.19792799103504 L 707.4025974025974 -376.4836422767494 L 721.6883116883117 -376.4836422767494 L 721.6883116883117 -362.19792799103504 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 707.4025974025974 -369.3407851338922 L 714.5454545454545 -376.4836422767494 L 721.6883116883117 -369.3407851338922 L 714.5454545454545 -362.19792799103504 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 301.75 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 L 314.25 -184.33333333333331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -184.33333333333331 L 301.75 -194.33333333333331 L 314.25 -194.33333333333331 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ n_mmap
+ </text>
+ <path d="M 300 -169.33333333333334 L 316 -169.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -164.33333333333334 L 313.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -164.33333333333334 L 303.0 -174.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-164.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-148.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 300.85714285714283 -110.1904761904762 L 300.85714285714283 -124.47619047619048 L 315.14285714285717 -124.47619047619048 L 315.14285714285717 -110.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdf
new file mode 100644
index 0000000000..08a1006bd5
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.png
new file mode 100644
index 0000000000..01b0884c16
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg
new file mode 100644
index 0000000000..7a4cd0b0c2
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg
@@ -0,0 +1,240 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -526 620 458" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 365.45454545454544 -296.1115789473684 L 359.20454545454544 -306.1115789473684 L 371.70454545454544 -306.1115789473684 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 452.72727272727275 -326.01305263157894 L 446.47727272727275 -336.01305263157894 L 458.97727272727275 -336.01305263157894 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 540.0 -365.2517894736842 L 533.75 -375.2517894736842 L 546.25 -375.2517894736842 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 627.2727272727273 -387.48336842105266 L 621.0227272727273 -397.48336842105266 L 633.5227272727273 -397.48336842105266 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 714.5454545454545 -446.73052631578946 L 708.2954545454545 -456.73052631578946 L 720.7954545454545 -456.73052631578946 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -323.1578947368421 L 780 -323.1578947368421" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -346.3157894736842 L 780 -346.3157894736842" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -369.4736842105263 L 780 -369.4736842105263" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -392.63157894736844 L 780 -392.63157894736844" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -415.7894736842105 L 780 -415.7894736842105" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -438.9473684210526 L 780 -438.9473684210526" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -462.10526315789474 L 780 -462.10526315789474" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -485.2631578947369 L 780 -485.2631578947369" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -508.42105263157896 L 780 -508.42105263157896" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 1.00e+04
+ </text>
+ <path d="M 300 -344.3001263157895 L 288 -344.3001263157895"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.3001263157895">
+ 2.91e+04
+ </text>
+ <path d="M 300 -388.60025263157894 L 288 -388.60025263157894"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.60025263157894">
+ 4.83e+04
+ </text>
+ <path d="M 300 -432.9003789473684 L 288 -432.9003789473684"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.9003789473684">
+ 6.74e+04
+ </text>
+ <path d="M 300 -477.2005052631579 L 288 -477.2005052631579"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-471.2005052631579">
+ 8.65e+04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-354.44)" x="200.0" y="-354.44">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 365.45454545454544 -335.3111578947368 L 452.72727272727275 -364.95326315789475 L 540.0 -409.41642105263156 L 627.2727272727273 -424.2374736842105 L 714.5454545454545 -498.3427368421053" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 360.45454545454544 -330.3111578947368 L 370.45454545454544 -340.3111578947368" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -330.3111578947368 L 360.45454545454544 -340.3111578947368" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -359.95326315789475 L 457.72727272727275 -369.95326315789475" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -359.95326315789475 L 447.72727272727275 -369.95326315789475" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -404.41642105263156 L 545.0 -414.41642105263156" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -404.41642105263156 L 535.0 -414.41642105263156" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -419.2374736842105 L 632.2727272727273 -429.2374736842105" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -419.2374736842105 L 622.2727272727273 -429.2374736842105" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -493.3427368421053 L 719.5454545454545 -503.3427368421053" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -493.3427368421053 L 709.5454545454545 -503.3427368421053" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 365.45454545454544 -301.1115789473684 L 452.72727272727275 -331.01305263157894 L 540.0 -370.2517894736842 L 627.2727272727273 -392.48336842105266 L 714.5454545454545 -451.73052631578946" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 359.20454545454544 -296.1115789473684 L 359.20454545454544 -306.1115789473684 L 371.70454545454544 -306.1115789473684 L 371.70454545454544 -296.1115789473684 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -296.1115789473684 L 359.20454545454544 -306.1115789473684 L 371.70454545454544 -306.1115789473684 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 446.47727272727275 -326.01305263157894 L 446.47727272727275 -336.01305263157894 L 458.97727272727275 -336.01305263157894 L 458.97727272727275 -326.01305263157894 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -326.01305263157894 L 446.47727272727275 -336.01305263157894 L 458.97727272727275 -336.01305263157894 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 533.75 -365.2517894736842 L 533.75 -375.2517894736842 L 546.25 -375.2517894736842 L 546.25 -365.2517894736842 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -365.2517894736842 L 533.75 -375.2517894736842 L 546.25 -375.2517894736842 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 621.0227272727273 -387.48336842105266 L 621.0227272727273 -397.48336842105266 L 633.5227272727273 -397.48336842105266 L 633.5227272727273 -387.48336842105266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 627.2727272727273 -387.48336842105266 L 621.0227272727273 -397.48336842105266 L 633.5227272727273 -397.48336842105266 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 708.2954545454545 -446.73052631578946 L 708.2954545454545 -456.73052631578946 L 720.7954545454545 -456.73052631578946 L 720.7954545454545 -446.73052631578946 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 714.5454545454545 -446.73052631578946 L 708.2954545454545 -456.73052631578946 L 720.7954545454545 -456.73052631578946 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 365.45454545454544 -301.9637894736842 L 452.72727272727275 -316.7848421052632 L 540.0 -331.6058947368421 L 627.2727272727273 -346.42694736842105 L 714.5454545454545 -361.248" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 360.45454545454544 -296.9637894736842 L 370.45454545454544 -306.9637894736842" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -296.9637894736842 L 360.45454545454544 -306.9637894736842" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -311.7848421052632 L 457.72727272727275 -321.7848421052632" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -311.7848421052632 L 447.72727272727275 -321.7848421052632" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -326.6058947368421 L 545.0 -336.6058947368421" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -326.6058947368421 L 535.0 -336.6058947368421" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -341.42694736842105 L 632.2727272727273 -351.42694736842105" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -341.42694736842105 L 622.2727272727273 -351.42694736842105" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -356.248 L 719.5454545454545 -366.248" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -356.248 L 709.5454545454545 -366.248" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -184.33333333333331 L 313.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -184.33333333333331 L 303.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-168.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-152.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -137.33333333333334 L 316 -137.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 301.75 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 L 314.25 -132.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -112.33333333333334 L 313.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -112.33333333333334 L 303.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf
new file mode 100644
index 0000000000..59f9e66286
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.png
new file mode 100644
index 0000000000..f88c9b9aa4
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg
new file mode 100644
index 0000000000..8786b4244b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg
@@ -0,0 +1,282 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -526 620 458" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 365.45454545454544 -305.1894736842105 L 359.20454545454544 -315.1894736842105 L 371.70454545454544 -315.1894736842105 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 452.72727272727275 -349.65263157894736 L 446.47727272727275 -359.65263157894736 L 458.97727272727275 -359.65263157894736 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 540.0 -394.11578947368423 L 533.75 -404.11578947368423 L 546.25 -404.11578947368423 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 627.2727272727273 -438.57894736842104 L 621.0227272727273 -448.57894736842104 L 633.5227272727273 -448.57894736842104 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 714.5454545454545 -483.0421052631579 L 708.2954545454545 -493.0421052631579 L 720.7954545454545 -493.0421052631579 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 358.31168831168833 -302.92715789473687 L 365.45454545454544 -310.070015037594 L 372.5974025974026 -302.92715789473687 L 365.45454545454544 -295.7843007518797 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 445.5844155844156 -317.7482105263158 L 452.72727272727275 -324.8910676691729 L 459.87012987012986 -317.7482105263158 L 452.72727272727275 -310.60535338345863 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 532.8571428571429 -332.56926315789474 L 540.0 -339.7121203007519 L 547.1428571428571 -332.56926315789474 L 540.0 -325.42640601503757 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 620.1298701298701 -347.3903157894737 L 627.2727272727273 -354.53317293233084 L 634.4155844155844 -347.3903157894737 L 627.2727272727273 -340.24745864661656 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 707.4025974025974 -362.2113684210526 L 714.5454545454545 -369.3542255639098 L 721.6883116883117 -362.2113684210526 L 714.5454545454545 -355.0685112781955 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -323.1578947368421 L 780 -323.1578947368421" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -346.3157894736842 L 780 -346.3157894736842" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -369.4736842105263 L 780 -369.4736842105263" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -392.63157894736844 L 780 -392.63157894736844" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -415.7894736842105 L 780 -415.7894736842105" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -438.9473684210526 L 780 -438.9473684210526" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -462.10526315789474 L 780 -462.10526315789474" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -485.2631578947369 L 780 -485.2631578947369" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -508.42105263157896 L 780 -508.42105263157896" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 1.00e+04
+ </text>
+ <path d="M 300 -344.52985263157893 L 288 -344.52985263157893"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.52985263157893">
+ 2.92e+04
+ </text>
+ <path d="M 300 -389.05970526315787 L 288 -389.05970526315787"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-383.05970526315787">
+ 4.85e+04
+ </text>
+ <path d="M 300 -433.5895578947368 L 288 -433.5895578947368"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-427.5895578947368">
+ 6.77e+04
+ </text>
+ <path d="M 300 -478.1194105263158 L 288 -478.1194105263158"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-472.1194105263158">
+ 8.69e+04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-354.44)" x="200.0" y="-354.44">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 365.45454545454544 -336.4597894736842 L 452.72727272727275 -366.1018947368421 L 540.0 -410.56505263157896 L 627.2727272727273 -425.3861052631579 L 714.5454545454545 -499.49136842105264" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 360.45454545454544 -331.4597894736842 L 370.45454545454544 -341.4597894736842" style="stroke-width:0.7;"/>
+ <path d="M 370.45454545454544 -331.4597894736842 L 360.45454545454544 -341.4597894736842" style="stroke-width:0.7;"/>
+ <path d="M 447.72727272727275 -361.1018947368421 L 457.72727272727275 -371.1018947368421" style="stroke-width:0.7;"/>
+ <path d="M 457.72727272727275 -361.1018947368421 L 447.72727272727275 -371.1018947368421" style="stroke-width:0.7;"/>
+ <path d="M 535.0 -405.56505263157896 L 545.0 -415.56505263157896" style="stroke-width:0.7;"/>
+ <path d="M 545.0 -405.56505263157896 L 535.0 -415.56505263157896" style="stroke-width:0.7;"/>
+ <path d="M 622.2727272727273 -420.3861052631579 L 632.2727272727273 -430.3861052631579" style="stroke-width:0.7;"/>
+ <path d="M 632.2727272727273 -420.3861052631579 L 622.2727272727273 -430.3861052631579" style="stroke-width:0.7;"/>
+ <path d="M 709.5454545454545 -494.49136842105264 L 719.5454545454545 -504.49136842105264" style="stroke-width:0.7;"/>
+ <path d="M 719.5454545454545 -494.49136842105264 L 709.5454545454545 -504.49136842105264" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 365.45454545454544 -310.1894736842105 L 452.72727272727275 -354.65263157894736 L 540.0 -399.11578947368423 L 627.2727272727273 -443.57894736842104 L 714.5454545454545 -488.0421052631579" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 359.20454545454544 -305.1894736842105 L 359.20454545454544 -315.1894736842105 L 371.70454545454544 -315.1894736842105 L 371.70454545454544 -305.1894736842105 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -305.1894736842105 L 359.20454545454544 -315.1894736842105 L 371.70454545454544 -315.1894736842105 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 446.47727272727275 -349.65263157894736 L 446.47727272727275 -359.65263157894736 L 458.97727272727275 -359.65263157894736 L 458.97727272727275 -349.65263157894736 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -349.65263157894736 L 446.47727272727275 -359.65263157894736 L 458.97727272727275 -359.65263157894736 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 533.75 -394.11578947368423 L 533.75 -404.11578947368423 L 546.25 -404.11578947368423 L 546.25 -394.11578947368423 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -394.11578947368423 L 533.75 -404.11578947368423 L 546.25 -404.11578947368423 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 621.0227272727273 -438.57894736842104 L 621.0227272727273 -448.57894736842104 L 633.5227272727273 -448.57894736842104 L 633.5227272727273 -438.57894736842104 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 627.2727272727273 -438.57894736842104 L 621.0227272727273 -448.57894736842104 L 633.5227272727273 -448.57894736842104 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 708.2954545454545 -483.0421052631579 L 708.2954545454545 -493.0421052631579 L 720.7954545454545 -493.0421052631579 L 720.7954545454545 -483.0421052631579 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 714.5454545454545 -483.0421052631579 L 708.2954545454545 -493.0421052631579 L 720.7954545454545 -493.0421052631579 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 365.45454545454544 -302.92715789473687 L 452.72727272727275 -317.7482105263158 L 540.0 -332.56926315789474 L 627.2727272727273 -347.3903157894737 L 714.5454545454545 -362.2113684210526" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 358.31168831168833 -295.7843007518797 L 358.31168831168833 -310.070015037594 L 372.5974025974026 -310.070015037594 L 372.5974025974026 -295.7843007518797 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -302.92715789473687 L 365.45454545454544 -310.070015037594 L 372.5974025974026 -302.92715789473687 L 365.45454545454544 -295.7843007518797 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 445.5844155844156 -310.60535338345863 L 445.5844155844156 -324.8910676691729 L 459.87012987012986 -324.8910676691729 L 459.87012987012986 -310.60535338345863 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -317.7482105263158 L 452.72727272727275 -324.8910676691729 L 459.87012987012986 -317.7482105263158 L 452.72727272727275 -310.60535338345863 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 532.8571428571429 -325.42640601503757 L 532.8571428571429 -339.7121203007519 L 547.1428571428571 -339.7121203007519 L 547.1428571428571 -325.42640601503757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 532.8571428571429 -332.56926315789474 L 540.0 -339.7121203007519 L 547.1428571428571 -332.56926315789474 L 540.0 -325.42640601503757 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 620.1298701298701 -340.24745864661656 L 620.1298701298701 -354.53317293233084 L 634.4155844155844 -354.53317293233084 L 634.4155844155844 -340.24745864661656 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.1298701298701 -347.3903157894737 L 627.2727272727273 -354.53317293233084 L 634.4155844155844 -347.3903157894737 L 627.2727272727273 -340.24745864661656 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 707.4025974025974 -355.0685112781955 L 707.4025974025974 -369.3542255639098 L 721.6883116883117 -369.3542255639098 L 721.6883116883117 -355.0685112781955 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 707.4025974025974 -362.2113684210526 L 714.5454545454545 -369.3542255639098 L 721.6883116883117 -362.2113684210526 L 714.5454545454545 -355.0685112781955 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -184.33333333333331 L 313.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -184.33333333333331 L 303.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-168.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-152.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -137.33333333333334 L 316 -137.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 301.75 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 L 314.25 -132.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ n_mmap
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 300.85714285714283 -110.1904761904762 L 300.85714285714283 -124.47619047619048 L 315.14285714285717 -124.47619047619048 L 315.14285714285717 -110.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdf
new file mode 100644
index 0000000000..41b8bc2460
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.png
new file mode 100644
index 0000000000..a5c8cf6029
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg
new file mode 100644
index 0000000000..09c3bdd84c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg
@@ -0,0 +1,249 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -526 620 458" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 387.27272727272725 -306.3344 L 381.02272727272725 -316.3344 L 393.52272727272725 -316.3344 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 474.5454545454545 -317.69696 L 468.2954545454545 -327.69696 L 480.7954545454545 -327.69696 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 561.8181818181818 -332.60768 L 555.5681818181818 -342.60768 L 568.0681818181818 -342.60768 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -341.05568 L 642.840909090909 -351.05568 L 655.340909090909 -351.05568 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 736.3636363636364 -363.5696 L 730.1136363636364 -373.5696 L 742.6136363636364 -373.5696 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -324.532992 L 288 -324.532992"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-318.532992">
+ 2.79e+04
+ </text>
+ <path d="M 300 -349.065984 L 288 -349.065984"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-343.065984">
+ 5.58e+04
+ </text>
+ <path d="M 300 -373.598976 L 288 -373.598976"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-367.598976">
+ 8.36e+04
+ </text>
+ <path d="M 300 -398.13196800000003 L 288 -398.13196800000003"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-392.13196800000003">
+ 1.12e+05
+ </text>
+ <path d="M 300 -422.66496 L 288 -422.66496"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-416.66496">
+ 1.39e+05
+ </text>
+ <path d="M 300 -447.197952 L 288 -447.197952"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-441.197952">
+ 1.67e+05
+ </text>
+ <path d="M 300 -471.730944 L 288 -471.730944"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-465.730944">
+ 1.95e+05
+ </text>
+ <path d="M 300 -496.26393599999994 L 288 -496.26393599999994"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-490.26393599999994">
+ 2.23e+05
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-354.44)" x="200.0" y="-354.44">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 387.27272727272725 -377.60896 L 474.5454545454545 -383.24096 L 561.8181818181818 -388.87296000000003 L 649.090909090909 -417.03296 L 736.3636363636364 -422.66496" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 382.27272727272725 -372.60896 L 392.27272727272725 -382.60896" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -372.60896 L 382.27272727272725 -382.60896" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -378.24096 L 479.5454545454545 -388.24096" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -378.24096 L 469.5454545454545 -388.24096" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -383.87296000000003 L 566.8181818181818 -393.87296000000003" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -383.87296000000003 L 556.8181818181818 -393.87296000000003" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -412.03296 L 654.090909090909 -422.03296" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -412.03296 L 644.090909090909 -422.03296" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -417.66496 L 741.3636363636364 -427.66496" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -417.66496 L 731.3636363636364 -427.66496" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 387.27272727272725 -326.92096 L 474.5454545454545 -332.55296 L 561.8181818181818 -338.18496 L 649.090909090909 -343.81696 L 736.3636363636364 -349.44896" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <path d="M 382.27272727272725 -321.92096 L 392.27272727272725 -331.92096" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -321.92096 L 382.27272727272725 -331.92096" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -327.55296 L 479.5454545454545 -337.55296" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -327.55296 L 469.5454545454545 -337.55296" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -333.18496 L 566.8181818181818 -343.18496" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -333.18496 L 556.8181818181818 -343.18496" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -338.81696 L 654.090909090909 -348.81696" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -338.81696 L 644.090909090909 -348.81696" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -344.44896 L 741.3636363636364 -354.44896" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -344.44896 L 731.3636363636364 -354.44896" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip5);">
+ <path d="M 387.27272727272725 -311.3344 L 474.5454545454545 -322.69696 L 561.8181818181818 -337.60768 L 649.090909090909 -346.05568 L 736.3636363636364 -368.5696" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip6);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 381.02272727272725 -306.3344 L 381.02272727272725 -316.3344 L 393.52272727272725 -316.3344 L 393.52272727272725 -306.3344 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -306.3344 L 381.02272727272725 -316.3344 L 393.52272727272725 -316.3344 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 468.2954545454545 -317.69696 L 468.2954545454545 -327.69696 L 480.7954545454545 -327.69696 L 480.7954545454545 -317.69696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -317.69696 L 468.2954545454545 -327.69696 L 480.7954545454545 -327.69696 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 555.5681818181818 -332.60768 L 555.5681818181818 -342.60768 L 568.0681818181818 -342.60768 L 568.0681818181818 -332.60768 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -332.60768 L 555.5681818181818 -342.60768 L 568.0681818181818 -342.60768 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -341.05568 L 642.840909090909 -351.05568 L 655.340909090909 -351.05568 L 655.340909090909 -341.05568 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -341.05568 L 642.840909090909 -351.05568 L 655.340909090909 -351.05568 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 730.1136363636364 -363.5696 L 730.1136363636364 -373.5696 L 742.6136363636364 -373.5696 L 742.6136363636364 -363.5696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -363.5696 L 730.1136363636364 -373.5696 L 742.6136363636364 -373.5696 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -184.33333333333331 L 313.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -184.33333333333331 L 303.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-168.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-152.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -137.33333333333334 L 316 -137.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -132.33333333333334 L 313.0 -142.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -132.33333333333334 L 303.0 -142.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-116.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ lu_mtf_set
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_hash_mmap
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf
new file mode 100644
index 0000000000..0d0b3ee3aa
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.png
new file mode 100644
index 0000000000..88b59ae4c0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg
new file mode 100644
index 0000000000..fb955ca423
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg
@@ -0,0 +1,291 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -526 620 458" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 387.27272727272725 -311.896 L 381.02272727272725 -321.896 L 393.52272727272725 -321.896 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -328.79200000000003 L 468.2954545454545 -338.79200000000003 L 480.7954545454545 -338.79200000000003 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 561.8181818181818 -345.688 L 555.5681818181818 -355.688 L 568.0681818181818 -355.688 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 649.090909090909 -362.584 L 642.840909090909 -372.584 L 655.340909090909 -372.584 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 736.3636363636364 -379.48 L 730.1136363636364 -389.48 L 742.6136363636364 -389.48 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 380.12987012987014 -328.21632 L 387.27272727272725 -335.35917714285716 L 394.4155844155844 -328.21632 L 387.27272727272725 -321.0734628571429 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 467.4025974025974 -333.84832 L 474.5454545454545 -340.99117714285717 L 481.68831168831167 -333.84832 L 474.5454545454545 -326.70546285714283 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 554.6753246753246 -339.48032 L 561.8181818181818 -346.6231771428571 L 568.961038961039 -339.48032 L 561.8181818181818 -332.33746285714284 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 641.9480519480519 -345.11232 L 649.090909090909 -352.2551771428571 L 656.2337662337662 -345.11232 L 649.090909090909 -337.96946285714284 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 729.2207792207791 -350.74432 L 736.3636363636364 -357.8871771428571 L 743.5064935064936 -350.74432 L 736.3636363636364 -343.60146285714285 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -324.806144 L 288 -324.806144"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-318.806144">
+ 2.82e+04
+ </text>
+ <path d="M 300 -349.612288 L 288 -349.612288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-343.612288">
+ 5.64e+04
+ </text>
+ <path d="M 300 -374.418432 L 288 -374.418432"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-368.418432">
+ 8.46e+04
+ </text>
+ <path d="M 300 -399.224576 L 288 -399.224576"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-393.224576">
+ 1.13e+05
+ </text>
+ <path d="M 300 -424.03072 L 288 -424.03072"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-418.03072">
+ 1.41e+05
+ </text>
+ <path d="M 300 -448.836864 L 288 -448.836864"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-442.836864">
+ 1.69e+05
+ </text>
+ <path d="M 300 -473.643008 L 288 -473.643008"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-467.643008">
+ 1.97e+05
+ </text>
+ <path d="M 300 -498.44915199999997 L 288 -498.44915199999997"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-492.44915199999997">
+ 2.26e+05
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-354.44)" x="200.0" y="-354.44">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 387.27272727272725 -378.97472 L 474.5454545454545 -384.60672 L 561.8181818181818 -390.23872 L 649.090909090909 -418.39872 L 736.3636363636364 -424.03072" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 382.27272727272725 -373.97472 L 392.27272727272725 -383.97472" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -373.97472 L 382.27272727272725 -383.97472" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -379.60672 L 479.5454545454545 -389.60672" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -379.60672 L 469.5454545454545 -389.60672" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -385.23872 L 566.8181818181818 -395.23872" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -385.23872 L 556.8181818181818 -395.23872" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -413.39872 L 654.090909090909 -423.39872" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -413.39872 L 644.090909090909 -423.39872" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -419.03072 L 741.3636363636364 -429.03072" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -419.03072 L 731.3636363636364 -429.03072" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 387.27272727272725 -316.896 L 474.5454545454545 -333.79200000000003 L 561.8181818181818 -350.688 L 649.090909090909 -367.584 L 736.3636363636364 -384.48" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 381.02272727272725 -311.896 L 381.02272727272725 -321.896 L 393.52272727272725 -321.896 L 393.52272727272725 -311.896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -311.896 L 381.02272727272725 -321.896 L 393.52272727272725 -321.896 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -328.79200000000003 L 468.2954545454545 -338.79200000000003 L 480.7954545454545 -338.79200000000003 L 480.7954545454545 -328.79200000000003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -328.79200000000003 L 468.2954545454545 -338.79200000000003 L 480.7954545454545 -338.79200000000003 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 555.5681818181818 -345.688 L 555.5681818181818 -355.688 L 568.0681818181818 -355.688 L 568.0681818181818 -345.688 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -345.688 L 555.5681818181818 -355.688 L 568.0681818181818 -355.688 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 642.840909090909 -362.584 L 642.840909090909 -372.584 L 655.340909090909 -372.584 L 655.340909090909 -362.584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -362.584 L 642.840909090909 -372.584 L 655.340909090909 -372.584 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 730.1136363636364 -379.48 L 730.1136363636364 -389.48 L 742.6136363636364 -389.48 L 742.6136363636364 -379.48 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -379.48 L 730.1136363636364 -389.48 L 742.6136363636364 -389.48 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 387.27272727272725 -328.21632 L 474.5454545454545 -333.84832 L 561.8181818181818 -339.48032 L 649.090909090909 -345.11232 L 736.3636363636364 -350.74432" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 380.12987012987014 -321.0734628571429 L 380.12987012987014 -335.35917714285716 L 394.4155844155844 -335.35917714285716 L 394.4155844155844 -321.0734628571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -328.21632 L 387.27272727272725 -335.35917714285716 L 394.4155844155844 -328.21632 L 387.27272727272725 -321.0734628571429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 467.4025974025974 -326.70546285714283 L 467.4025974025974 -340.99117714285717 L 481.68831168831167 -340.99117714285717 L 481.68831168831167 -326.70546285714283 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -333.84832 L 474.5454545454545 -340.99117714285717 L 481.68831168831167 -333.84832 L 474.5454545454545 -326.70546285714283 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 554.6753246753246 -332.33746285714284 L 554.6753246753246 -346.6231771428571 L 568.961038961039 -346.6231771428571 L 568.961038961039 -332.33746285714284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -339.48032 L 561.8181818181818 -346.6231771428571 L 568.961038961039 -339.48032 L 561.8181818181818 -332.33746285714284 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 641.9480519480519 -337.96946285714284 L 641.9480519480519 -352.2551771428571 L 656.2337662337662 -352.2551771428571 L 656.2337662337662 -337.96946285714284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -345.11232 L 649.090909090909 -352.2551771428571 L 656.2337662337662 -345.11232 L 649.090909090909 -337.96946285714284 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 729.2207792207791 -343.60146285714285 L 729.2207792207791 -357.8871771428571 L 743.5064935064936 -357.8871771428571 L 743.5064935064936 -343.60146285714285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -350.74432 L 736.3636363636364 -357.8871771428571 L 743.5064935064936 -350.74432 L 736.3636363636364 -343.60146285714285 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -184.33333333333331 L 313.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -184.33333333333331 L 303.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-168.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-152.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -137.33333333333334 L 316 -137.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 301.75 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 L 314.25 -132.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ n_mmap
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 300.85714285714283 -110.1904761904762 L 300.85714285714283 -124.47619047619048 L 315.14285714285717 -124.47619047619048 L 315.14285714285717 -110.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdf
new file mode 100644
index 0000000000..22aca40374
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.png
new file mode 100644
index 0000000000..9cf2a8e8d1
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg
new file mode 100644
index 0000000000..6c297f311d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 387.27272727272725 -355.0698557327259 L 381.02272727272725 -365.0698557327259 L 393.52272727272725 -365.0698557327259 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -366.05195791300577 L 468.2954545454545 -376.05195791300577 L 480.7954545454545 -376.05195791300577 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 561.8181818181818 -375.14500488122354 L 555.5681818181818 -385.14500488122354 L 568.0681818181818 -385.14500488122354 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 649.090909090909 -374.34509165853126 L 642.840909090909 -384.34509165853126 L 655.340909090909 -384.34509165853126 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 736.3636363636364 -383.60804859529236 L 730.1136363636364 -393.60804859529236 L 742.6136363636364 -393.60804859529236 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.38e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.77e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 4.15e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 5.53e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.91e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 387.27272727272725 -520.0 L 474.5454545454545 -431.5990888382688 L 561.8181818181818 -402.33957406804785 L 649.090909090909 -412.0298513938605 L 736.3636363636364 -398.9903749502838" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 382.27272727272725 -515.0 L 392.27272727272725 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -515.0 L 382.27272727272725 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -426.5990888382688 L 479.5454545454545 -436.5990888382688" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -426.5990888382688 L 469.5454545454545 -436.5990888382688" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -397.33957406804785 L 566.8181818181818 -407.33957406804785" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -397.33957406804785 L 556.8181818181818 -407.33957406804785" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -407.0298513938605 L 654.090909090909 -417.0298513938605" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -407.0298513938605 L 644.090909090909 -417.0298513938605" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -393.9903749502838 L 741.3636363636364 -403.9903749502838" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -393.9903749502838 L 731.3636363636364 -403.9903749502838" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 387.27272727272725 -360.0698557327259 L 474.5454545454545 -371.05195791300577 L 561.8181818181818 -380.14500488122354 L 649.090909090909 -379.34509165853126 L 736.3636363636364 -388.60804859529236" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 381.02272727272725 -355.0698557327259 L 381.02272727272725 -365.0698557327259 L 393.52272727272725 -365.0698557327259 L 393.52272727272725 -355.0698557327259 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -355.0698557327259 L 381.02272727272725 -365.0698557327259 L 393.52272727272725 -365.0698557327259 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -366.05195791300577 L 468.2954545454545 -376.05195791300577 L 480.7954545454545 -376.05195791300577 L 480.7954545454545 -366.05195791300577 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -366.05195791300577 L 468.2954545454545 -376.05195791300577 L 480.7954545454545 -376.05195791300577 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 555.5681818181818 -375.14500488122354 L 555.5681818181818 -385.14500488122354 L 568.0681818181818 -385.14500488122354 L 568.0681818181818 -375.14500488122354 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -375.14500488122354 L 555.5681818181818 -385.14500488122354 L 568.0681818181818 -385.14500488122354 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 642.840909090909 -374.34509165853126 L 642.840909090909 -384.34509165853126 L 655.340909090909 -384.34509165853126 L 655.340909090909 -374.34509165853126 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -374.34509165853126 L 642.840909090909 -384.34509165853126 L 655.340909090909 -384.34509165853126 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 730.1136363636364 -383.60804859529236 L 730.1136363636364 -393.60804859529236 L 742.6136363636364 -393.60804859529236 L 742.6136363636364 -383.60804859529236 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -383.60804859529236 L 730.1136363636364 -393.60804859529236 L 742.6136363636364 -393.60804859529236 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 387.27272727272725 -370.4159091730846 L 474.5454545454545 -350.6061250316376 L 561.8181818181818 -344.411411215967 L 649.090909090909 -340.2992081570669 L 736.3636363636364 -338.76683660556097" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 382.27272727272725 -365.4159091730846 L 392.27272727272725 -375.4159091730846" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -365.4159091730846 L 382.27272727272725 -375.4159091730846" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -345.6061250316376 L 479.5454545454545 -355.6061250316376" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -345.6061250316376 L 469.5454545454545 -355.6061250316376" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -339.411411215967 L 566.8181818181818 -349.411411215967" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -339.411411215967 L 556.8181818181818 -349.411411215967" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -335.2992081570669 L 654.090909090909 -345.2992081570669" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -335.2992081570669 L 644.090909090909 -345.2992081570669" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -333.76683660556097 L 741.3636363636364 -343.76683660556097" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -333.76683660556097 L 731.3636363636364 -343.76683660556097" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -184.33333333333331 L 313.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -184.33333333333331 L 303.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-168.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-152.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -137.33333333333334 L 316 -137.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 301.75 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 L 314.25 -132.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -112.33333333333334 L 313.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -112.33333333333334 L 303.0 -122.33333333333334" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdf b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdf
new file mode 100644
index 0000000000..a5a6b41d4e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.png b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.png
new file mode 100644
index 0000000000..b851d21499
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg
new file mode 100644
index 0000000000..940e361c70
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg
@@ -0,0 +1,277 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 387.27272727272725 -431.5241123533185 L 381.02272727272725 -441.5241123533185 L 393.52272727272725 -441.5241123533185 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -449.10612839529097 L 468.2954545454545 -459.10612839529097 L 480.7954545454545 -459.10612839529097 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 561.8181818181818 -458.78913340260493 L 555.5681818181818 -468.78913340260493 L 568.0681818181818 -468.78913340260493 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 649.090909090909 -473.67329388898213 L 642.840909090909 -483.67329388898213 L 655.340909090909 -483.67329388898213 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 736.3636363636364 -482.0368294073469 L 730.1136363636364 -492.0368294073469 L 742.6136363636364 -492.0368294073469 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 380.12987012987014 -391.1483971715282 L 387.27272727272725 -398.2912543143853 L 394.4155844155844 -391.1483971715282 L 387.27272727272725 -384.005540028671 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 467.4025974025974 -384.9035017871362 L 474.5454545454545 -392.04635892999335 L 481.68831168831167 -384.9035017871362 L 474.5454545454545 -377.76064464427907 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 554.6753246753246 -383.4845287447436 L 561.8181818181818 -390.6273858876008 L 568.961038961039 -383.4845287447436 L 561.8181818181818 -376.3416716018865 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 641.9480519480519 -382.68090662496087 L 649.090909090909 -389.82376376781804 L 656.2337662337662 -382.68090662496087 L 649.090909090909 -375.5380494821037 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 729.2207792207791 -384.37429999369175 L 736.3636363636364 -391.5171571365489 L 743.5064935064936 -384.37429999369175 L 736.3636363636364 -377.23144285083464 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.68e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 3.36e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 5.04e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 6.72e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 8.40e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 387.27272727272725 -520.0 L 474.5454545454545 -497.9109966899596 L 561.8181818181818 -487.75901572418 L 649.090909090909 -502.01551826949515 L 736.3636363636364 -499.5059339110729" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 382.27272727272725 -515.0 L 392.27272727272725 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 392.27272727272725 -515.0 L 382.27272727272725 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 469.5454545454545 -492.9109966899596 L 479.5454545454545 -502.9109966899596" style="stroke-width:0.7;"/>
+ <path d="M 479.5454545454545 -492.9109966899596 L 469.5454545454545 -502.9109966899596" style="stroke-width:0.7;"/>
+ <path d="M 556.8181818181818 -482.75901572418 L 566.8181818181818 -492.75901572418" style="stroke-width:0.7;"/>
+ <path d="M 566.8181818181818 -482.75901572418 L 556.8181818181818 -492.75901572418" style="stroke-width:0.7;"/>
+ <path d="M 644.090909090909 -497.01551826949515 L 654.090909090909 -507.01551826949515" style="stroke-width:0.7;"/>
+ <path d="M 654.090909090909 -497.01551826949515 L 644.090909090909 -507.01551826949515" style="stroke-width:0.7;"/>
+ <path d="M 731.3636363636364 -494.5059339110729 L 741.3636363636364 -504.5059339110729" style="stroke-width:0.7;"/>
+ <path d="M 741.3636363636364 -494.5059339110729 L 731.3636363636364 -504.5059339110729" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 387.27272727272725 -436.5241123533185 L 474.5454545454545 -454.10612839529097 L 561.8181818181818 -463.78913340260493 L 649.090909090909 -478.67329388898213 L 736.3636363636364 -487.0368294073469" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 381.02272727272725 -431.5241123533185 L 381.02272727272725 -441.5241123533185 L 393.52272727272725 -441.5241123533185 L 393.52272727272725 -431.5241123533185 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -431.5241123533185 L 381.02272727272725 -441.5241123533185 L 393.52272727272725 -441.5241123533185 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -449.10612839529097 L 468.2954545454545 -459.10612839529097 L 480.7954545454545 -459.10612839529097 L 480.7954545454545 -449.10612839529097 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -449.10612839529097 L 468.2954545454545 -459.10612839529097 L 480.7954545454545 -459.10612839529097 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 555.5681818181818 -458.78913340260493 L 555.5681818181818 -468.78913340260493 L 568.0681818181818 -468.78913340260493 L 568.0681818181818 -458.78913340260493 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -458.78913340260493 L 555.5681818181818 -468.78913340260493 L 568.0681818181818 -468.78913340260493 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 642.840909090909 -473.67329388898213 L 642.840909090909 -483.67329388898213 L 655.340909090909 -483.67329388898213 L 655.340909090909 -473.67329388898213 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -473.67329388898213 L 642.840909090909 -483.67329388898213 L 655.340909090909 -483.67329388898213 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 730.1136363636364 -482.0368294073469 L 730.1136363636364 -492.0368294073469 L 742.6136363636364 -492.0368294073469 L 742.6136363636364 -482.0368294073469 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -482.0368294073469 L 730.1136363636364 -492.0368294073469 L 742.6136363636364 -492.0368294073469 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 387.27272727272725 -391.1483971715282 L 474.5454545454545 -384.9035017871362 L 561.8181818181818 -383.4845287447436 L 649.090909090909 -382.68090662496087 L 736.3636363636364 -384.37429999369175" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 380.12987012987014 -384.005540028671 L 380.12987012987014 -398.2912543143853 L 394.4155844155844 -398.2912543143853 L 394.4155844155844 -384.005540028671 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -391.1483971715282 L 387.27272727272725 -398.2912543143853 L 394.4155844155844 -391.1483971715282 L 387.27272727272725 -384.005540028671 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 467.4025974025974 -377.76064464427907 L 467.4025974025974 -392.04635892999335 L 481.68831168831167 -392.04635892999335 L 481.68831168831167 -377.76064464427907 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -384.9035017871362 L 474.5454545454545 -392.04635892999335 L 481.68831168831167 -384.9035017871362 L 474.5454545454545 -377.76064464427907 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 554.6753246753246 -376.3416716018865 L 554.6753246753246 -390.6273858876008 L 568.961038961039 -390.6273858876008 L 568.961038961039 -376.3416716018865 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -383.4845287447436 L 561.8181818181818 -390.6273858876008 L 568.961038961039 -383.4845287447436 L 561.8181818181818 -376.3416716018865 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 641.9480519480519 -375.5380494821037 L 641.9480519480519 -389.82376376781804 L 656.2337662337662 -389.82376376781804 L 656.2337662337662 -375.5380494821037 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -382.68090662496087 L 649.090909090909 -389.82376376781804 L 656.2337662337662 -382.68090662496087 L 649.090909090909 -375.5380494821037 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 729.2207792207791 -377.23144285083464 L 729.2207792207791 -391.5171571365489 L 743.5064935064936 -391.5171571365489 L 743.5064935064936 -377.23144285083464 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -384.37429999369175 L 736.3636363636364 -391.5171571365489 L 743.5064935064936 -384.37429999369175 L 736.3636363636364 -377.23144285083464 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -74 L 290 -200 L 687.072 -200 L 687.072 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -189.33333333333331 L 316 -189.33333333333331" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 303.0 -184.33333333333331 L 313.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <path d="M 313.0 -184.33333333333331 L 303.0 -194.33333333333331" style="stroke-width:0.7;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-184.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-168.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-152.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -137.33333333333334 L 316 -137.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 301.75 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 L 314.25 -132.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -132.33333333333334 L 301.75 -142.33333333333334 L 314.25 -142.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-132.0">
+ n_mmap
+ </text>
+ <path d="M 300 -117.33333333333334 L 316 -117.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 300.85714285714283 -110.1904761904762 L 300.85714285714283 -124.47619047619048 L 315.14285714285717 -124.47619047619048 L 315.14285714285717 -110.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -117.33333333333334 L 308.0 -124.47619047619048 L 315.14285714285717 -117.33333333333334 L 308.0 -110.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-112.0">
+ rb_tree_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-96.0">
+ mmap_
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_node_invariants.png b/libstdc++-v3/doc/xml/images/pbds_node_invariants.png
new file mode 100644
index 0000000000..b375f5168d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_node_invariants.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdf b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdf
new file mode 100644
index 0000000000..51197d24c1
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.png b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.png
new file mode 100644
index 0000000000..3f56eebb08
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg
new file mode 100644
index 0000000000..a64dd4e387
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg
@@ -0,0 +1,251 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 456" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 321.8181818181818 -441.4383867795615 L 315.5681818181818 -451.4383867795615 L 328.0681818181818 -451.4383867795615 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 343.6363636363636 -456.61127287587965 L 337.3863636363636 -466.61127287587965 L 349.8863636363636 -466.61127287587965 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 365.45454545454544 -477.9863479049334 L 359.20454545454544 -487.9863479049334 L 371.70454545454544 -487.9863479049334 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 387.27272727272725 -482.27203938546415 L 381.02272727272725 -492.27203938546415 L 393.52272727272725 -492.27203938546415 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 409.0909090909091 -483.06294139432714 L 402.8409090909091 -493.06294139432714 L 415.3409090909091 -493.06294139432714 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 430.9090909090909 -496.94025133136665 L 424.6590909090909 -506.94025133136665 L 437.1590909090909 -506.94025133136665 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 452.72727272727275 -503.234454618597 L 446.47727272727275 -513.234454618597 L 458.97727272727275 -513.234454618597 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 474.5454545454545 -507.66554282722245 L 468.2954545454545 -517.6655428272225 L 480.7954545454545 -517.6655428272225 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 496.3636363636364 -485.585609746753 L 490.1136363636364 -495.585609746753 L 502.6136363636364 -495.585609746753 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 518.1818181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -94 L 290 -136 L 422.944 -136 L 422.944 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.25e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.51e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 3.76e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 5.01e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.26e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 321.8181818181818 -446.4383867795615 L 343.6363636363636 -461.61127287587965 L 365.45454545454544 -482.9863479049334 L 387.27272727272725 -487.27203938546415 L 409.0909090909091 -488.06294139432714 L 430.9090909090909 -501.94025133136665 L 452.72727272727275 -508.234454618597 L 474.5454545454545 -512.6655428272225 L 496.3636363636364 -490.585609746753 L 518.1818181818182 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 315.5681818181818 -441.4383867795615 L 315.5681818181818 -451.4383867795615 L 328.0681818181818 -451.4383867795615 L 328.0681818181818 -441.4383867795615 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -441.4383867795615 L 315.5681818181818 -451.4383867795615 L 328.0681818181818 -451.4383867795615 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 337.3863636363636 -456.61127287587965 L 337.3863636363636 -466.61127287587965 L 349.8863636363636 -466.61127287587965 L 349.8863636363636 -456.61127287587965 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -456.61127287587965 L 337.3863636363636 -466.61127287587965 L 349.8863636363636 -466.61127287587965 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 359.20454545454544 -477.9863479049334 L 359.20454545454544 -487.9863479049334 L 371.70454545454544 -487.9863479049334 L 371.70454545454544 -477.9863479049334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -477.9863479049334 L 359.20454545454544 -487.9863479049334 L 371.70454545454544 -487.9863479049334 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 381.02272727272725 -482.27203938546415 L 381.02272727272725 -492.27203938546415 L 393.52272727272725 -492.27203938546415 L 393.52272727272725 -482.27203938546415 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -482.27203938546415 L 381.02272727272725 -492.27203938546415 L 393.52272727272725 -492.27203938546415 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 402.8409090909091 -483.06294139432714 L 402.8409090909091 -493.06294139432714 L 415.3409090909091 -493.06294139432714 L 415.3409090909091 -483.06294139432714 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -483.06294139432714 L 402.8409090909091 -493.06294139432714 L 415.3409090909091 -493.06294139432714 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 424.6590909090909 -496.94025133136665 L 424.6590909090909 -506.94025133136665 L 437.1590909090909 -506.94025133136665 L 437.1590909090909 -496.94025133136665 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -496.94025133136665 L 424.6590909090909 -506.94025133136665 L 437.1590909090909 -506.94025133136665 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 446.47727272727275 -503.234454618597 L 446.47727272727275 -513.234454618597 L 458.97727272727275 -513.234454618597 L 458.97727272727275 -503.234454618597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -503.234454618597 L 446.47727272727275 -513.234454618597 L 458.97727272727275 -513.234454618597 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 468.2954545454545 -507.66554282722245 L 468.2954545454545 -517.6655428272225 L 480.7954545454545 -517.6655428272225 L 480.7954545454545 -507.66554282722245 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -507.66554282722245 L 468.2954545454545 -517.6655428272225 L 480.7954545454545 -517.6655428272225 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 490.1136363636364 -485.585609746753 L 490.1136363636364 -495.585609746753 L 502.6136363636364 -495.585609746753 L 502.6136363636364 -485.585609746753 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -485.585609746753 L 490.1136363636364 -495.585609746753 L 502.6136363636364 -495.585609746753 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 511.9318181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 L 524.4318181818182 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 321.8181818181818 -349.430321954459 L 343.6363636363636 -352.54932761196886 L 365.45454545454544 -353.9235725323423 L 387.27272727272725 -350.9562851998008 L 409.0909090909091 -352.33474451808996 L 430.9090909090909 -354.1191908356002 L 452.72727272727275 -352.67997394735835 L 474.5454545454545 -350.2728503377904 L 496.3636363636364 -353.6043318902213 L 518.1818181818182 -354.41349629005276" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <path d="M 314.67532467532465 -349.430321954459 L 328.961038961039 -349.430321954459" style="stroke-width:1;"/>
+ <path d="M 321.8181818181818 -342.2874648116018 L 321.8181818181818 -356.5731790973161" style="stroke-width:1;"/>
+ <path d="M 336.4935064935065 -352.54932761196886 L 350.7792207792208 -352.54932761196886" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -345.40647046911175 L 343.6363636363636 -359.69218475482603" style="stroke-width:1;"/>
+ <path d="M 358.31168831168833 -353.9235725323423 L 372.5974025974026 -353.9235725323423" style="stroke-width:1;"/>
+ <path d="M 365.45454545454544 -346.7807153894852 L 365.45454545454544 -361.06642967519946" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -350.9562851998008 L 394.4155844155844 -350.9562851998008" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -343.8134280569436 L 387.27272727272725 -358.09914234265796" style="stroke-width:1;"/>
+ <path d="M 401.94805194805195 -352.33474451808996 L 416.23376623376623 -352.33474451808996" style="stroke-width:1;"/>
+ <path d="M 409.0909090909091 -345.19188737523285 L 409.0909090909091 -359.47760166094713" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -354.1191908356002 L 438.05194805194805 -354.1191908356002" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -346.976333692743 L 430.9090909090909 -361.2620479784573" style="stroke-width:1;"/>
+ <path d="M 445.5844155844156 -352.67997394735835 L 459.87012987012986 -352.67997394735835" style="stroke-width:1;"/>
+ <path d="M 452.72727272727275 -345.5371168045012 L 452.72727272727275 -359.82283109021546" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -350.2728503377904 L 481.68831168831167 -350.2728503377904" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -343.1299931949332 L 474.5454545454545 -357.41570748064754" style="stroke-width:1;"/>
+ <path d="M 489.22077922077926 -353.6043318902213 L 503.5064935064935 -353.6043318902213" style="stroke-width:1;"/>
+ <path d="M 496.3636363636364 -346.46147474736415 L 496.3636363636364 -360.7471890330785" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -354.41349629005276 L 525.3246753246754 -354.41349629005276" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -347.2706391471956 L 518.1818181818182 -361.5563534329099" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -94 L 290 -136 L 422.944 -136 L 422.944 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ thin_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -105.33333333333334 L 315.14285714285717 -105.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -98.1904761904762 L 308.0 -112.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdf b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdf
new file mode 100644
index 0000000000..31376595d2
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.png b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.png
new file mode 100644
index 0000000000..c647e4f551
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg
new file mode 100644
index 0000000000..be1efba8d8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg
@@ -0,0 +1,252 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 456" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 321.8181818181818 -389.9422954140156 L 315.5681818181818 -399.9422954140156 L 328.0681818181818 -399.9422954140156 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 343.6363636363636 -384.9848968538782 L 337.3863636363636 -394.9848968538782 L 349.8863636363636 -394.9848968538782 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 365.45454545454544 -389.3484731732018 L 359.20454545454544 -399.3484731732018 L 371.70454545454544 -399.3484731732018 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 387.27272727272725 -390.4437668332563 L 381.02272727272725 -400.4437668332563 L 393.52272727272725 -400.4437668332563 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 409.0909090909091 -392.29707991164145 L 402.8409090909091 -402.29707991164145 L 415.3409090909091 -402.29707991164145 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 430.9090909090909 -391.01046505654506 L 424.6590909090909 -401.01046505654506 L 437.1590909090909 -401.01046505654506 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 452.72727272727275 -392.49066144147713 L 446.47727272727275 -402.49066144147713 L 458.97727272727275 -402.49066144147713 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 474.5454545454545 -388.6637531831825 L 468.2954545454545 -398.6637531831825 L 480.7954545454545 -398.6637531831825 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 496.3636363636364 -398.719659775581 L 490.1136363636364 -408.719659775581 L 502.6136363636364 -408.719659775581 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 518.1818181818182 -390.3041104334999 L 511.9318181818182 -400.3041104334999 L 524.4318181818182 -400.3041104334999 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -94 L 290 -136 L 422.944 -136 L 422.944 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -461.4524852674607 L 780 -461.4524852674607" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 2.73e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 5.45e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 8.18e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.09e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 1.36e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 321.8181818181818 -488.41343578227395 L 343.6363636363636 -480.2875321987627 L 365.45454545454544 -476.6790691530349 L 387.27272727272725 -470.56970711051423 L 409.0909090909091 -520.0 L 430.9090909090909 -506.42991861326993 L 452.72727272727275 -508.6950969815724 L 474.5454545454545 -499.3066349632696 L 496.3636363636364 -499.48423269706376 L 518.1818181818182 -497.76960730352334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 314.67532467532465 -488.41343578227395 L 328.961038961039 -488.41343578227395" style="stroke-width:1;"/>
+ <path d="M 321.8181818181818 -481.27057863941684 L 321.8181818181818 -495.5562929251311" style="stroke-width:1;"/>
+ <path d="M 336.4935064935065 -480.2875321987627 L 350.7792207792208 -480.2875321987627" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -473.1446750559055 L 343.6363636363636 -487.43038934161984" style="stroke-width:1;"/>
+ <path d="M 358.31168831168833 -476.6790691530349 L 372.5974025974026 -476.6790691530349" style="stroke-width:1;"/>
+ <path d="M 365.45454545454544 -469.5362120101778 L 365.45454545454544 -483.82192629589207" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -470.56970711051423 L 394.4155844155844 -470.56970711051423" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -463.42684996765706 L 387.27272727272725 -477.7125642533714" style="stroke-width:1;"/>
+ <path d="M 401.94805194805195 -520.0 L 416.23376623376623 -520.0" style="stroke-width:1;"/>
+ <path d="M 409.0909090909091 -512.8571428571429 L 409.0909090909091 -527.1428571428571" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -506.42991861326993 L 438.05194805194805 -506.42991861326993" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -499.2870614704128 L 430.9090909090909 -513.572775756127" style="stroke-width:1;"/>
+ <path d="M 445.5844155844156 -508.6950969815724 L 459.87012987012986 -508.6950969815724" style="stroke-width:1;"/>
+ <path d="M 452.72727272727275 -501.55223983871525 L 452.72727272727275 -515.8379541244295" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -499.3066349632696 L 481.68831168831167 -499.3066349632696" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -492.1637778204124 L 474.5454545454545 -506.44949210612674" style="stroke-width:1;"/>
+ <path d="M 489.22077922077926 -499.48423269706376 L 503.5064935064935 -499.48423269706376" style="stroke-width:1;"/>
+ <path d="M 496.3636363636364 -492.3413755542066 L 496.3636363636364 -506.6270898399209" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -497.76960730352334 L 525.3246753246754 -497.76960730352334" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -490.62675016066623 L 518.1818181818182 -504.91246444638045" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 321.8181818181818 -394.9422954140156 L 343.6363636363636 -389.9848968538782 L 365.45454545454544 -394.3484731732018 L 387.27272727272725 -395.4437668332563 L 409.0909090909091 -397.29707991164145 L 430.9090909090909 -396.01046505654506 L 452.72727272727275 -397.49066144147713 L 474.5454545454545 -393.6637531831825 L 496.3636363636364 -403.719659775581 L 518.1818181818182 -395.3041104334999" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 315.5681818181818 -389.9422954140156 L 315.5681818181818 -399.9422954140156 L 328.0681818181818 -399.9422954140156 L 328.0681818181818 -389.9422954140156 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -389.9422954140156 L 315.5681818181818 -399.9422954140156 L 328.0681818181818 -399.9422954140156 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 337.3863636363636 -384.9848968538782 L 337.3863636363636 -394.9848968538782 L 349.8863636363636 -394.9848968538782 L 349.8863636363636 -384.9848968538782 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -384.9848968538782 L 337.3863636363636 -394.9848968538782 L 349.8863636363636 -394.9848968538782 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 359.20454545454544 -389.3484731732018 L 359.20454545454544 -399.3484731732018 L 371.70454545454544 -399.3484731732018 L 371.70454545454544 -389.3484731732018 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -389.3484731732018 L 359.20454545454544 -399.3484731732018 L 371.70454545454544 -399.3484731732018 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 381.02272727272725 -390.4437668332563 L 381.02272727272725 -400.4437668332563 L 393.52272727272725 -400.4437668332563 L 393.52272727272725 -390.4437668332563 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -390.4437668332563 L 381.02272727272725 -400.4437668332563 L 393.52272727272725 -400.4437668332563 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 402.8409090909091 -392.29707991164145 L 402.8409090909091 -402.29707991164145 L 415.3409090909091 -402.29707991164145 L 415.3409090909091 -392.29707991164145 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -392.29707991164145 L 402.8409090909091 -402.29707991164145 L 415.3409090909091 -402.29707991164145 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 424.6590909090909 -391.01046505654506 L 424.6590909090909 -401.01046505654506 L 437.1590909090909 -401.01046505654506 L 437.1590909090909 -391.01046505654506 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -391.01046505654506 L 424.6590909090909 -401.01046505654506 L 437.1590909090909 -401.01046505654506 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 446.47727272727275 -392.49066144147713 L 446.47727272727275 -402.49066144147713 L 458.97727272727275 -402.49066144147713 L 458.97727272727275 -392.49066144147713 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -392.49066144147713 L 446.47727272727275 -402.49066144147713 L 458.97727272727275 -402.49066144147713 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 468.2954545454545 -388.6637531831825 L 468.2954545454545 -398.6637531831825 L 480.7954545454545 -398.6637531831825 L 480.7954545454545 -388.6637531831825 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -388.6637531831825 L 468.2954545454545 -398.6637531831825 L 480.7954545454545 -398.6637531831825 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 490.1136363636364 -398.719659775581 L 490.1136363636364 -408.719659775581 L 502.6136363636364 -408.719659775581 L 502.6136363636364 -398.719659775581 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -398.719659775581 L 490.1136363636364 -408.719659775581 L 502.6136363636364 -408.719659775581 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip14);">
+ <path d="M 511.9318181818182 -390.3041104334999 L 511.9318181818182 -400.3041104334999 L 524.4318181818182 -400.3041104334999 L 524.4318181818182 -390.3041104334999 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -390.3041104334999 L 511.9318181818182 -400.3041104334999 L 524.4318181818182 -400.3041104334999 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -94 L 290 -136 L 422.944 -136 L 422.944 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -125.33333333333334 L 315.14285714285717 -125.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -118.1904761904762 L 308.0 -132.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ thin_heap
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdf b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdf
new file mode 100644
index 0000000000..da403713f7
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.png b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.png
new file mode 100644
index 0000000000..9f7498a5f3
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg
new file mode 100644
index 0000000000..9d96151b39
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg
@@ -0,0 +1,475 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -531 620 483" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -515.0 L 337.3863636363636 -525.0 L 349.8863636363636 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -512.6844090441507 L 381.02272727272725 -522.6844090441507 L 393.52272727272725 -522.6844090441507 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -512.0484224790029 L 424.6590909090909 -522.0484224790029 L 437.1590909090909 -522.0484224790029 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -510.8911950491 L 468.2954545454545 -520.8911950491 L 480.7954545454545 -520.8911950491 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -510.8527950028299 L 511.9318181818182 -520.8527950028299 L 524.4318181818182 -520.8527950028299 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -507.5874277546198 L 555.5681818181818 -517.5874277546197 L 568.0681818181818 -517.5874277546197 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -510.22521554840387 L 599.2045454545455 -520.2252155484039 L 611.7045454545455 -520.2252155484039 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -509.1913681488245 L 642.840909090909 -519.1913681488245 L 655.340909090909 -519.1913681488245 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -508.95415129494296 L 686.4772727272727 -518.9541512949429 L 698.9772727272727 -518.9541512949429 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -510.10933375196754 L 730.1136363636364 -520.1093337519676 L 742.6136363636364 -520.1093337519676 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 336.4935064935065 -504.08056780014624 L 343.6363636363636 -511.22342494300335 L 350.7792207792208 -504.08056780014624 L 343.6363636363636 -496.93771065728913 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 380.12987012987014 -495.7411684024837 L 387.27272727272725 -502.8840255453408 L 394.4155844155844 -495.7411684024837 L 387.27272727272725 -488.5983112596266 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 423.76623376623377 -494.9690775313253 L 430.9090909090909 -502.1119346741824 L 438.05194805194805 -494.9690775313253 L 430.9090909090909 -487.82622038846813 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 467.4025974025974 -488.2595215176591 L 474.5454545454545 -495.4023786605162 L 481.68831168831167 -488.2595215176591 L 474.5454545454545 -481.1166643748019 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.038961038961 -483.6633313641002 L 518.1818181818182 -490.80618850695737 L 525.3246753246754 -483.6633313641002 L 518.1818181818182 -476.52047422124303 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 554.6753246753246 -485.2397782340523 L 561.8181818181818 -492.38263537690943 L 568.961038961039 -485.2397782340523 L 561.8181818181818 -478.09692109119516 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 598.3116883116883 -484.4395121810152 L 605.4545454545455 -491.58236932387234 L 612.5974025974026 -484.4395121810152 L 605.4545454545455 -477.29665503815806 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 641.9480519480519 -483.30523389119094 L 649.090909090909 -490.44809103404805 L 656.2337662337662 -483.30523389119094 L 649.090909090909 -476.1623767483338 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 685.5844155844156 -480.15643009704326 L 692.7272727272727 -487.2992872399004 L 699.8701298701299 -480.15643009704326 L 692.7272727272727 -473.0135729541861 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 729.2207792207791 -480.0896276496858 L 736.3636363636364 -487.23248479254295 L 743.5064935064936 -480.0896276496858 L 736.3636363636364 -472.94677050682867 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -435.14267300677113 L 337.3863636363636 -445.14267300677113 L 349.8863636363636 -445.14267300677113 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -434.94135678786404 L 381.02272727272725 -444.94135678786404 L 393.52272727272725 -444.94135678786404 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -438.5589138095573 L 424.6590909090909 -448.5589138095573 L 437.1590909090909 -448.5589138095573 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -435.49236336895854 L 468.2954545454545 -445.49236336895854 L 480.7954545454545 -445.49236336895854 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -438.13015116274266 L 511.9318181818182 -448.13015116274266 L 524.4318181818182 -448.13015116274266 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -437.98904803414075 L 555.5681818181818 -447.98904803414075 L 568.0681818181818 -447.98904803414075 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -437.668214511458 L 599.2045454545455 -447.668214511458 L 611.7045454545455 -447.668214511458 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -438.1240162441078 L 642.840909090909 -448.1240162441078 L 655.340909090909 -448.1240162441078 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -437.76341935990285 L 686.4772727272727 -447.76341935990285 L 698.9772727272727 -447.76341935990285 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -438.353962083311 L 730.1136363636364 -448.353962083311 L 742.6136363636364 -448.353962083311 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -54 L 290 -136 L 422.944 -136 L 422.944 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.94e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 3.87e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 5.81e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 7.75e-08
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -520.0 L 387.27272727272725 -517.6844090441507 L 430.9090909090909 -517.0484224790029 L 474.5454545454545 -515.8911950491 L 518.1818181818182 -515.8527950028299 L 561.8181818181818 -512.5874277546197 L 605.4545454545455 -515.2252155484039 L 649.090909090909 -514.1913681488245 L 692.7272727272727 -513.9541512949429 L 736.3636363636364 -515.1093337519676" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -515.0 L 337.3863636363636 -525.0 L 349.8863636363636 -525.0 L 349.8863636363636 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -515.0 L 337.3863636363636 -525.0 L 349.8863636363636 -525.0 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -512.6844090441507 L 381.02272727272725 -522.6844090441507 L 393.52272727272725 -522.6844090441507 L 393.52272727272725 -512.6844090441507 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -512.6844090441507 L 381.02272727272725 -522.6844090441507 L 393.52272727272725 -522.6844090441507 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -512.0484224790029 L 424.6590909090909 -522.0484224790029 L 437.1590909090909 -522.0484224790029 L 437.1590909090909 -512.0484224790029 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -512.0484224790029 L 424.6590909090909 -522.0484224790029 L 437.1590909090909 -522.0484224790029 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -510.8911950491 L 468.2954545454545 -520.8911950491 L 480.7954545454545 -520.8911950491 L 480.7954545454545 -510.8911950491 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -510.8911950491 L 468.2954545454545 -520.8911950491 L 480.7954545454545 -520.8911950491 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -510.8527950028299 L 511.9318181818182 -520.8527950028299 L 524.4318181818182 -520.8527950028299 L 524.4318181818182 -510.8527950028299 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -510.8527950028299 L 511.9318181818182 -520.8527950028299 L 524.4318181818182 -520.8527950028299 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -507.5874277546198 L 555.5681818181818 -517.5874277546197 L 568.0681818181818 -517.5874277546197 L 568.0681818181818 -507.5874277546198 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -507.5874277546198 L 555.5681818181818 -517.5874277546197 L 568.0681818181818 -517.5874277546197 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -510.22521554840387 L 599.2045454545455 -520.2252155484039 L 611.7045454545455 -520.2252155484039 L 611.7045454545455 -510.22521554840387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -510.22521554840387 L 599.2045454545455 -520.2252155484039 L 611.7045454545455 -520.2252155484039 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -509.1913681488245 L 642.840909090909 -519.1913681488245 L 655.340909090909 -519.1913681488245 L 655.340909090909 -509.1913681488245 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -509.1913681488245 L 642.840909090909 -519.1913681488245 L 655.340909090909 -519.1913681488245 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -508.95415129494296 L 686.4772727272727 -518.9541512949429 L 698.9772727272727 -518.9541512949429 L 698.9772727272727 -508.95415129494296 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -508.95415129494296 L 686.4772727272727 -518.9541512949429 L 698.9772727272727 -518.9541512949429 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -510.10933375196754 L 730.1136363636364 -520.1093337519676 L 742.6136363636364 -520.1093337519676 L 742.6136363636364 -510.10933375196754 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -510.10933375196754 L 730.1136363636364 -520.1093337519676 L 742.6136363636364 -520.1093337519676 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -504.08056780014624 L 387.27272727272725 -495.7411684024837 L 430.9090909090909 -494.9690775313253 L 474.5454545454545 -488.2595215176591 L 518.1818181818182 -483.6633313641002 L 561.8181818181818 -485.2397782340523 L 605.4545454545455 -484.4395121810152 L 649.090909090909 -483.30523389119094 L 692.7272727272727 -480.15643009704326 L 736.3636363636364 -480.0896276496858" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 336.4935064935065 -496.93771065728913 L 336.4935064935065 -511.22342494300335 L 350.7792207792208 -511.22342494300335 L 350.7792207792208 -496.93771065728913 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -504.08056780014624 L 343.6363636363636 -511.22342494300335 L 350.7792207792208 -504.08056780014624 L 343.6363636363636 -496.93771065728913 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 380.12987012987014 -488.5983112596266 L 380.12987012987014 -502.8840255453408 L 394.4155844155844 -502.8840255453408 L 394.4155844155844 -488.5983112596266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -495.7411684024837 L 387.27272727272725 -502.8840255453408 L 394.4155844155844 -495.7411684024837 L 387.27272727272725 -488.5983112596266 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 423.76623376623377 -487.82622038846813 L 423.76623376623377 -502.1119346741824 L 438.05194805194805 -502.1119346741824 L 438.05194805194805 -487.82622038846813 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -494.9690775313253 L 430.9090909090909 -502.1119346741824 L 438.05194805194805 -494.9690775313253 L 430.9090909090909 -487.82622038846813 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 467.4025974025974 -481.1166643748019 L 467.4025974025974 -495.4023786605162 L 481.68831168831167 -495.4023786605162 L 481.68831168831167 -481.1166643748019 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -488.2595215176591 L 474.5454545454545 -495.4023786605162 L 481.68831168831167 -488.2595215176591 L 474.5454545454545 -481.1166643748019 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.038961038961 -476.52047422124303 L 511.038961038961 -490.80618850695737 L 525.3246753246754 -490.80618850695737 L 525.3246753246754 -476.52047422124303 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -483.6633313641002 L 518.1818181818182 -490.80618850695737 L 525.3246753246754 -483.6633313641002 L 518.1818181818182 -476.52047422124303 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 554.6753246753246 -478.09692109119516 L 554.6753246753246 -492.38263537690943 L 568.961038961039 -492.38263537690943 L 568.961038961039 -478.09692109119516 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -485.2397782340523 L 561.8181818181818 -492.38263537690943 L 568.961038961039 -485.2397782340523 L 561.8181818181818 -478.09692109119516 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 598.3116883116883 -477.29665503815806 L 598.3116883116883 -491.58236932387234 L 612.5974025974026 -491.58236932387234 L 612.5974025974026 -477.29665503815806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -484.4395121810152 L 605.4545454545455 -491.58236932387234 L 612.5974025974026 -484.4395121810152 L 605.4545454545455 -477.29665503815806 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 641.9480519480519 -476.1623767483338 L 641.9480519480519 -490.44809103404805 L 656.2337662337662 -490.44809103404805 L 656.2337662337662 -476.1623767483338 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -483.30523389119094 L 649.090909090909 -490.44809103404805 L 656.2337662337662 -483.30523389119094 L 649.090909090909 -476.1623767483338 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 685.5844155844156 -473.0135729541861 L 685.5844155844156 -487.2992872399004 L 699.8701298701299 -487.2992872399004 L 699.8701298701299 -473.0135729541861 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -480.15643009704326 L 692.7272727272727 -487.2992872399004 L 699.8701298701299 -480.15643009704326 L 692.7272727272727 -473.0135729541861 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 729.2207792207791 -472.94677050682867 L 729.2207792207791 -487.23248479254295 L 743.5064935064936 -487.23248479254295 L 743.5064935064936 -472.94677050682867 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -480.0896276496858 L 736.3636363636364 -487.23248479254295 L 743.5064935064936 -480.0896276496858 L 736.3636363636364 -472.94677050682867 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -440.14267300677113 L 387.27272727272725 -439.94135678786404 L 430.9090909090909 -443.5589138095573 L 474.5454545454545 -440.49236336895854 L 518.1818181818182 -443.13015116274266 L 561.8181818181818 -442.98904803414075 L 605.4545454545455 -442.668214511458 L 649.090909090909 -443.1240162441078 L 692.7272727272727 -442.76341935990285 L 736.3636363636364 -443.353962083311" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -435.14267300677113 L 337.3863636363636 -445.14267300677113 L 349.8863636363636 -445.14267300677113 L 349.8863636363636 -435.14267300677113 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -435.14267300677113 L 337.3863636363636 -445.14267300677113 L 349.8863636363636 -445.14267300677113 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -434.94135678786404 L 381.02272727272725 -444.94135678786404 L 393.52272727272725 -444.94135678786404 L 393.52272727272725 -434.94135678786404 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -434.94135678786404 L 381.02272727272725 -444.94135678786404 L 393.52272727272725 -444.94135678786404 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -438.5589138095573 L 424.6590909090909 -448.5589138095573 L 437.1590909090909 -448.5589138095573 L 437.1590909090909 -438.5589138095573 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -438.5589138095573 L 424.6590909090909 -448.5589138095573 L 437.1590909090909 -448.5589138095573 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -435.49236336895854 L 468.2954545454545 -445.49236336895854 L 480.7954545454545 -445.49236336895854 L 480.7954545454545 -435.49236336895854 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -435.49236336895854 L 468.2954545454545 -445.49236336895854 L 480.7954545454545 -445.49236336895854 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -438.13015116274266 L 511.9318181818182 -448.13015116274266 L 524.4318181818182 -448.13015116274266 L 524.4318181818182 -438.13015116274266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -438.13015116274266 L 511.9318181818182 -448.13015116274266 L 524.4318181818182 -448.13015116274266 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -437.98904803414075 L 555.5681818181818 -447.98904803414075 L 568.0681818181818 -447.98904803414075 L 568.0681818181818 -437.98904803414075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -437.98904803414075 L 555.5681818181818 -447.98904803414075 L 568.0681818181818 -447.98904803414075 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -437.668214511458 L 599.2045454545455 -447.668214511458 L 611.7045454545455 -447.668214511458 L 611.7045454545455 -437.668214511458 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -437.668214511458 L 599.2045454545455 -447.668214511458 L 611.7045454545455 -447.668214511458 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -438.1240162441078 L 642.840909090909 -448.1240162441078 L 655.340909090909 -448.1240162441078 L 655.340909090909 -438.1240162441078 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -438.1240162441078 L 642.840909090909 -448.1240162441078 L 655.340909090909 -448.1240162441078 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -437.76341935990285 L 686.4772727272727 -447.76341935990285 L 698.9772727272727 -447.76341935990285 L 698.9772727272727 -437.76341935990285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -437.76341935990285 L 686.4772727272727 -447.76341935990285 L 698.9772727272727 -447.76341935990285 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -438.353962083311 L 730.1136363636364 -448.353962083311 L 742.6136363636364 -448.353962083311 L 742.6136363636364 -438.353962083311 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -438.353962083311 L 730.1136363636364 -448.353962083311 L 742.6136363636364 -448.353962083311 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -440.16334995476274 L 387.27272727272725 -438.2135819249185 L 430.9090909090909 -438.8459329827272 L 474.5454545454545 -439.42466030728303 L 518.1818181818182 -439.3876235762651 L 561.8181818181818 -439.1542694489315 L 605.4545454545455 -440.1658493660584 L 649.090909090909 -440.7659352962319 L 692.7272727272727 -440.2587820224162 L 736.3636363636364 -440.98747402471315" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 336.4935064935065 -440.16334995476274 L 350.7792207792208 -440.16334995476274" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -433.02049281190557 L 343.6363636363636 -447.3062070976199" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -438.2135819249185 L 394.4155844155844 -438.2135819249185" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -431.07072478206135 L 387.27272727272725 -445.3564390677757" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -438.8459329827272 L 438.05194805194805 -438.8459329827272" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -431.70307583987005 L 430.9090909090909 -445.9887901255844" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -439.42466030728303 L 481.68831168831167 -439.42466030728303" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -432.2818031644259 L 474.5454545454545 -446.56751745014014" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -439.3876235762651 L 525.3246753246754 -439.3876235762651" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -432.24476643340796 L 518.1818181818182 -446.53048071912224" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -439.1542694489315 L 568.961038961039 -439.1542694489315" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -432.0114123060743 L 561.8181818181818 -446.2971265917886" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -440.1658493660584 L 612.5974025974026 -440.1658493660584" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -433.0229922232013 L 605.4545454545455 -447.3087065089155" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -440.7659352962319 L 656.2337662337662 -440.7659352962319" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -433.62307815337476 L 649.090909090909 -447.90879243908904" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -440.2587820224162 L 699.8701298701299 -440.2587820224162" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -433.1159248795591 L 692.7272727272727 -447.40163916527337" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -440.98747402471315 L 743.5064935064936 -440.98747402471315" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -433.84461688185604 L 736.3636363636364 -448.1303311675703" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -54 L 290 -136 L 422.944 -136 L 422.944 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip41);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip42);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ thin_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -65.33333333333334 L 315.14285714285717 -65.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -58.190476190476204 L 308.0 -72.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdf b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdf
new file mode 100644
index 0000000000..b3db81311b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.png b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.png
new file mode 100644
index 0000000000..b56a35e17b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg
new file mode 100644
index 0000000000..9f18a5b34a
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg
@@ -0,0 +1,365 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -449.4915391030642 L 337.3863636363636 -459.4915391030642 L 349.8863636363636 -459.4915391030642 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -470.332875987553 L 381.02272727272725 -480.332875987553 L 393.52272727272725 -480.332875987553 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -480.6188964515348 L 424.6590909090909 -490.6188964515348 L 437.1590909090909 -490.6188964515348 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -487.2482132128093 L 468.2954545454545 -497.2482132128093 L 480.7954545454545 -497.2482132128093 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -490.80873978818613 L 511.9318181818182 -500.80873978818613 L 524.4318181818182 -500.80873978818613 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -498.17689417377346 L 555.5681818181818 -508.17689417377346 L 568.0681818181818 -508.17689417377346 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -502.76478975545456 L 599.2045454545455 -512.7647897554546 L 611.7045454545455 -512.7647897554546 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -508.834306314062 L 642.840909090909 -518.834306314062 L 655.340909090909 -518.834306314062 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -513.303830046721 L 686.4772727272727 -523.303830046721 L 698.9772727272727 -523.303830046721 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 336.4935064935065 -423.11461443957205 L 343.6363636363636 -430.25747158242916 L 350.7792207792208 -423.11461443957205 L 343.6363636363636 -415.97175729671494 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 380.12987012987014 -434.48965591455703 L 387.27272727272725 -441.63251305741414 L 394.4155844155844 -434.48965591455703 L 387.27272727272725 -427.3467987716999 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 423.76623376623377 -440.7530063759382 L 430.9090909090909 -447.89586351879535 L 438.05194805194805 -440.7530063759382 L 430.9090909090909 -433.6101492330811 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 467.4025974025974 -446.0289383300602 L 474.5454545454545 -453.1717954729173 L 481.68831168831167 -446.0289383300602 L 474.5454545454545 -438.88608118720305 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 511.038961038961 -449.39612421870095 L 518.1818181818182 -456.53898136155806 L 525.3246753246754 -449.39612421870095 L 518.1818181818182 -442.25326707584384 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 554.6753246753246 -455.9174266677428 L 561.8181818181818 -463.0602838105999 L 568.961038961039 -455.9174266677428 L 561.8181818181818 -448.77456952488564 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 598.3116883116883 -460.90186794364786 L 605.4545454545455 -468.04472508650497 L 612.5974025974026 -460.90186794364786 L 605.4545454545455 -453.7590108007907 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 641.9480519480519 -463.6071579098401 L 649.090909090909 -470.7500150526972 L 656.2337662337662 -463.6071579098401 L 649.090909090909 -456.464300766983 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 685.5844155844156 -467.8611462340714 L 692.7272727272727 -475.0040033769285 L 699.8701298701299 -467.8611462340714 L 692.7272727272727 -460.7182890912143 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 729.2207792207791 -469.885304852349 L 736.3636363636364 -477.0281619952062 L 743.5064935064936 -469.885304852349 L 736.3636363636364 -462.7424477094919 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -74 L 290 -136 L 422.944 -136 L 422.944 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.92e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.78e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.68e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.57e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.46e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -454.4915391030642 L 387.27272727272725 -475.332875987553 L 430.9090909090909 -485.6188964515348 L 474.5454545454545 -492.2482132128093 L 518.1818181818182 -495.80873978818613 L 561.8181818181818 -503.17689417377346 L 605.4545454545455 -507.76478975545456 L 649.090909090909 -513.834306314062 L 692.7272727272727 -518.303830046721 L 736.3636363636364 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -449.4915391030642 L 337.3863636363636 -459.4915391030642 L 349.8863636363636 -459.4915391030642 L 349.8863636363636 -449.4915391030642 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -449.4915391030642 L 337.3863636363636 -459.4915391030642 L 349.8863636363636 -459.4915391030642 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -470.332875987553 L 381.02272727272725 -480.332875987553 L 393.52272727272725 -480.332875987553 L 393.52272727272725 -470.332875987553 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -470.332875987553 L 381.02272727272725 -480.332875987553 L 393.52272727272725 -480.332875987553 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -480.6188964515348 L 424.6590909090909 -490.6188964515348 L 437.1590909090909 -490.6188964515348 L 437.1590909090909 -480.6188964515348 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -480.6188964515348 L 424.6590909090909 -490.6188964515348 L 437.1590909090909 -490.6188964515348 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -487.2482132128093 L 468.2954545454545 -497.2482132128093 L 480.7954545454545 -497.2482132128093 L 480.7954545454545 -487.2482132128093 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -487.2482132128093 L 468.2954545454545 -497.2482132128093 L 480.7954545454545 -497.2482132128093 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -490.80873978818613 L 511.9318181818182 -500.80873978818613 L 524.4318181818182 -500.80873978818613 L 524.4318181818182 -490.80873978818613 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -490.80873978818613 L 511.9318181818182 -500.80873978818613 L 524.4318181818182 -500.80873978818613 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -498.17689417377346 L 555.5681818181818 -508.17689417377346 L 568.0681818181818 -508.17689417377346 L 568.0681818181818 -498.17689417377346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -498.17689417377346 L 555.5681818181818 -508.17689417377346 L 568.0681818181818 -508.17689417377346 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -502.76478975545456 L 599.2045454545455 -512.7647897554546 L 611.7045454545455 -512.7647897554546 L 611.7045454545455 -502.76478975545456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -502.76478975545456 L 599.2045454545455 -512.7647897554546 L 611.7045454545455 -512.7647897554546 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -508.834306314062 L 642.840909090909 -518.834306314062 L 655.340909090909 -518.834306314062 L 655.340909090909 -508.834306314062 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -508.834306314062 L 642.840909090909 -518.834306314062 L 655.340909090909 -518.834306314062 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -513.303830046721 L 686.4772727272727 -523.303830046721 L 698.9772727272727 -523.303830046721 L 698.9772727272727 -513.303830046721 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -513.303830046721 L 686.4772727272727 -523.303830046721 L 698.9772727272727 -523.303830046721 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -425.0199079927901 L 387.27272727272725 -449.5751616403469 L 430.9090909090909 -461.1815214369625 L 474.5454545454545 -472.79527947414203 L 518.1818181818182 -478.27096392348875 L 561.8181818181818 -483.4452933738667 L 605.4545454545455 -488.8603122505896 L 649.090909090909 -491.8062916431268 L 692.7272727272727 -497.884686090411 L 736.3636363636364 -500.1455884067328" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <path d="M 336.4935064935065 -425.0199079927901 L 350.7792207792208 -425.0199079927901" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -417.8770508499329 L 343.6363636363636 -432.1627651356472" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -449.5751616403469 L 394.4155844155844 -449.5751616403469" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -442.4323044974897 L 387.27272727272725 -456.718018783204" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -461.1815214369625 L 438.05194805194805 -461.1815214369625" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -454.0386642941054 L 430.9090909090909 -468.3243785798196" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -472.79527947414203 L 481.68831168831167 -472.79527947414203" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -465.65242233128487 L 474.5454545454545 -479.93813661699915" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -478.27096392348875 L 525.3246753246754 -478.27096392348875" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -471.1281067806316 L 518.1818181818182 -485.4138210663459" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -483.4452933738667 L 568.961038961039 -483.4452933738667" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -476.30243623100955 L 561.8181818181818 -490.5881505167239" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -488.8603122505896 L 612.5974025974026 -488.8603122505896" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -481.71745510773246 L 605.4545454545455 -496.00316939344674" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -491.8062916431268 L 656.2337662337662 -491.8062916431268" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -484.66343450026966 L 649.090909090909 -498.949148785984" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -497.884686090411 L 699.8701298701299 -497.884686090411" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -490.7418289475538 L 692.7272727272727 -505.02754323326815" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -500.1455884067328 L 743.5064935064936 -500.1455884067328" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -493.0027312638757 L 736.3636363636364 -507.28844554959" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip15);">
+ <path d="M 343.6363636363636 -423.11461443957205 L 387.27272727272725 -434.48965591455703 L 430.9090909090909 -440.7530063759382 L 474.5454545454545 -446.0289383300602 L 518.1818181818182 -449.39612421870095 L 561.8181818181818 -455.9174266677428 L 605.4545454545455 -460.90186794364786 L 649.090909090909 -463.6071579098401 L 692.7272727272727 -467.8611462340714 L 736.3636363636364 -469.885304852349" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip16);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 336.4935064935065 -415.97175729671494 L 336.4935064935065 -430.25747158242916 L 350.7792207792208 -430.25747158242916 L 350.7792207792208 -415.97175729671494 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -423.11461443957205 L 343.6363636363636 -430.25747158242916 L 350.7792207792208 -423.11461443957205 L 343.6363636363636 -415.97175729671494 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 380.12987012987014 -427.3467987716999 L 380.12987012987014 -441.63251305741414 L 394.4155844155844 -441.63251305741414 L 394.4155844155844 -427.3467987716999 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -434.48965591455703 L 387.27272727272725 -441.63251305741414 L 394.4155844155844 -434.48965591455703 L 387.27272727272725 -427.3467987716999 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 423.76623376623377 -433.6101492330811 L 423.76623376623377 -447.89586351879535 L 438.05194805194805 -447.89586351879535 L 438.05194805194805 -433.6101492330811 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -440.7530063759382 L 430.9090909090909 -447.89586351879535 L 438.05194805194805 -440.7530063759382 L 430.9090909090909 -433.6101492330811 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 467.4025974025974 -438.88608118720305 L 467.4025974025974 -453.1717954729173 L 481.68831168831167 -453.1717954729173 L 481.68831168831167 -438.88608118720305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -446.0289383300602 L 474.5454545454545 -453.1717954729173 L 481.68831168831167 -446.0289383300602 L 474.5454545454545 -438.88608118720305 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 511.038961038961 -442.25326707584384 L 511.038961038961 -456.53898136155806 L 525.3246753246754 -456.53898136155806 L 525.3246753246754 -442.25326707584384 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -449.39612421870095 L 518.1818181818182 -456.53898136155806 L 525.3246753246754 -449.39612421870095 L 518.1818181818182 -442.25326707584384 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 554.6753246753246 -448.77456952488564 L 554.6753246753246 -463.0602838105999 L 568.961038961039 -463.0602838105999 L 568.961038961039 -448.77456952488564 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -455.9174266677428 L 561.8181818181818 -463.0602838105999 L 568.961038961039 -455.9174266677428 L 561.8181818181818 -448.77456952488564 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 598.3116883116883 -453.7590108007907 L 598.3116883116883 -468.04472508650497 L 612.5974025974026 -468.04472508650497 L 612.5974025974026 -453.7590108007907 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -460.90186794364786 L 605.4545454545455 -468.04472508650497 L 612.5974025974026 -460.90186794364786 L 605.4545454545455 -453.7590108007907 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 641.9480519480519 -456.464300766983 L 641.9480519480519 -470.7500150526972 L 656.2337662337662 -470.7500150526972 L 656.2337662337662 -456.464300766983 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -463.6071579098401 L 649.090909090909 -470.7500150526972 L 656.2337662337662 -463.6071579098401 L 649.090909090909 -456.464300766983 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip25);">
+ <path d="M 685.5844155844156 -460.7182890912143 L 685.5844155844156 -475.0040033769285 L 699.8701298701299 -475.0040033769285 L 699.8701298701299 -460.7182890912143 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -467.8611462340714 L 692.7272727272727 -475.0040033769285 L 699.8701298701299 -467.8611462340714 L 692.7272727272727 -460.7182890912143 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip26);">
+ <path d="M 729.2207792207791 -462.7424477094919 L 729.2207792207791 -477.0281619952062 L 743.5064935064936 -477.0281619952062 L 743.5064935064936 -462.7424477094919 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -469.885304852349 L 736.3636363636364 -477.0281619952062 L 743.5064935064936 -469.885304852349 L 736.3636363636364 -462.7424477094919 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -74 L 290 -136 L 422.944 -136 L 422.944 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -105.33333333333334 L 315.14285714285717 -105.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -98.1904761904762 L 308.0 -112.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 300.85714285714283 -78.1904761904762 L 300.85714285714283 -92.47619047619048 L 315.14285714285717 -92.47619047619048 L 315.14285714285717 -78.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_pat_trie.png b/libstdc++-v3/doc/xml/images/pbds_pat_trie.png
new file mode 100644
index 0000000000..e7129a1a67
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_pat_trie.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png b/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png
new file mode 100644
index 0000000000..25a69fc6e8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png b/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png
new file mode 100644
index 0000000000..c5bc8e5d6c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png b/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png
new file mode 100644
index 0000000000..c3f94ee93b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png
new file mode 100644
index 0000000000..9d84791fc0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdf
new file mode 100644
index 0000000000..9283106a11
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.png
new file mode 100644
index 0000000000..fdc53c7625
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg
new file mode 100644
index 0000000000..76dd1b6eab
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg
@@ -0,0 +1,821 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 556" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -317.96178260869567 L 337.3863636363636 -327.96178260869567 L 349.8863636363636 -327.96178260869567 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -340.7823188405797 L 381.02272727272725 -350.7823188405797 L 393.52272727272725 -350.7823188405797 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -362.15515942028986 L 424.6590909090909 -372.15515942028986 L 437.1590909090909 -372.15515942028986 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -381.66884057971015 L 468.2954545454545 -391.66884057971015 L 480.7954545454545 -391.66884057971015 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -401.2800869565217 L 511.9318181818182 -411.2800869565217 L 524.4318181818182 -411.2800869565217 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -424.9412463768116 L 555.5681818181818 -434.9412463768116 L 568.0681818181818 -434.9412463768116 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -446.8286956521739 L 599.2045454545455 -456.8286956521739 L 611.7045454545455 -456.8286956521739 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -466.6835362318841 L 642.840909090909 -476.6835362318841 L 655.340909090909 -476.6835362318841 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -483.94269565217394 L 686.4772727272727 -493.94269565217394 L 698.9772727272727 -493.94269565217394 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 336.4935064935065 -302.12481739130436 L 343.6363636363636 -309.2676745341615 L 350.7792207792208 -302.12481739130436 L 343.6363636363636 -294.9819602484472 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 380.12987012987014 -302.12292985507247 L 387.27272727272725 -309.2657869979296 L 394.4155844155844 -302.12292985507247 L 387.27272727272725 -294.9800727122153 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 423.76623376623377 -302.1251649275362 L 430.9090909090909 -309.2680220703934 L 438.05194805194805 -302.1251649275362 L 430.9090909090909 -294.9823077846791 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 467.4025974025974 -302.13736376811596 L 474.5454545454545 -309.28022091097307 L 481.68831168831167 -302.13736376811596 L 474.5454545454545 -294.9945066252588 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.038961038961 -302.1172449275362 L 518.1818181818182 -309.2601020703934 L 525.3246753246754 -302.1172449275362 L 518.1818181818182 -294.9743877846791 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 554.6753246753246 -302.1307 L 561.8181818181818 -309.27355714285716 L 568.961038961039 -302.1307 L 561.8181818181818 -294.9878428571429 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 598.3116883116883 -302.12183304347826 L 605.4545454545455 -309.26469018633543 L 612.5974025974026 -302.12183304347826 L 605.4545454545455 -294.9789759006211 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 641.9480519480519 -302.1363339130435 L 649.090909090909 -309.27919105590064 L 656.2337662337662 -302.1363339130435 L 649.090909090909 -294.99347677018636 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 685.5844155844156 -302.1368504347826 L 692.7272727272727 -309.2797075776397 L 699.8701298701299 -302.1368504347826 L 692.7272727272727 -294.99399329192545 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 729.2207792207791 -302.1373 L 736.3636363636364 -309.28015714285715 L 743.5064935064936 -302.1373 L 736.3636363636364 -294.9944428571429 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 337.3863636363636 -296.69144289855075 L 349.8863636363636 -296.69144289855075 L 343.6363636363636 -306.69144289855075 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 381.02272727272725 -296.6947588405797 L 393.52272727272725 -296.6947588405797 L 387.27272727272725 -306.6947588405797 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 424.6590909090909 -296.7050286956522 L 437.1590909090909 -296.7050286956522 L 430.9090909090909 -306.7050286956522 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 468.2954545454545 -296.71349391304346 L 480.7954545454545 -296.71349391304346 L 474.5454545454545 -306.71349391304346 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.9318181818182 -296.7348211594203 L 524.4318181818182 -296.7348211594203 L 518.1818181818182 -306.7348211594203 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 555.5681818181818 -296.734935942029 L 568.0681818181818 -296.734935942029 L 561.8181818181818 -306.734935942029 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 599.2045454545455 -296.7234162318841 L 611.7045454545455 -296.7234162318841 L 605.4545454545455 -306.7234162318841 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 642.840909090909 -296.73872376811596 L 655.340909090909 -296.73872376811596 L 649.090909090909 -306.73872376811596 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 686.4772727272727 -296.7232663768116 L 698.9772727272727 -296.7232663768116 L 692.7272727272727 -306.7232663768116 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 730.1136363636364 -296.7713379710145 L 742.6136363636364 -296.7713379710145 L 736.3636363636364 -306.7713379710145 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 343.6363636363636 -296.2135263768116 L 337.3863636363636 -306.2135263768116 L 349.8863636363636 -306.2135263768116 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 387.27272727272725 -296.18551304347824 L 381.02272727272725 -306.18551304347824 L 393.52272727272725 -306.18551304347824 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 430.9090909090909 -296.17607536231884 L 424.6590909090909 -306.17607536231884 L 437.1590909090909 -306.17607536231884 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 474.5454545454545 -296.1834915942029 L 468.2954545454545 -306.1834915942029 L 480.7954545454545 -306.1834915942029 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 518.1818181818182 -296.17121942028984 L 511.9318181818182 -306.17121942028984 L 524.4318181818182 -306.17121942028984 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 561.8181818181818 -296.19550231884057 L 555.5681818181818 -306.19550231884057 L 568.0681818181818 -306.19550231884057 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 605.4545454545455 -296.1725107246377 L 599.2045454545455 -306.1725107246377 L 611.7045454545455 -306.1725107246377 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 649.090909090909 -296.17134376811595 L 642.840909090909 -306.17134376811595 L 655.340909090909 -306.17134376811595 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 692.7272727272727 -296.18166463768114 L 686.4772727272727 -306.18166463768114 L 698.9772727272727 -306.18166463768114 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 736.3636363636364 -296.1715924637681 L 730.1136363636364 -306.1715924637681 L 742.6136363636364 -306.1715924637681 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 343.6363636363636 -295.81628289855075 L 337.3863636363636 -305.81628289855075 L 349.8863636363636 -305.81628289855075 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 387.27272727272725 -295.89136347826087 L 381.02272727272725 -305.89136347826087 L 393.52272727272725 -305.89136347826087 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 430.9090909090909 -295.94318782608696 L 424.6590909090909 -305.94318782608696 L 437.1590909090909 -305.94318782608696 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 474.5454545454545 -295.94503710144926 L 468.2954545454545 -305.94503710144926 L 480.7954545454545 -305.94503710144926 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 518.1818181818182 -295.95860695652175 L 511.9318181818182 -305.95860695652175 L 524.4318181818182 -305.95860695652175 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 561.8181818181818 -295.9781997101449 L 555.5681818181818 -305.9781997101449 L 568.0681818181818 -305.9781997101449 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 605.4545454545455 -295.9791402898551 L 599.2045454545455 -305.9791402898551 L 611.7045454545455 -305.9791402898551 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 649.090909090909 -295.9892124637681 L 642.840909090909 -305.9892124637681 L 655.340909090909 -305.9892124637681 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 692.7272727272727 -295.9891391304348 L 686.4772727272727 -305.9891391304348 L 698.9772727272727 -305.9891391304348 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 736.3636363636364 -296.0042234782609 L 730.1136363636364 -306.0042234782609 L 742.6136363636364 -306.0042234782609 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 336.4935064935065 -300.63330985507247 L 343.6363636363636 -307.77616699792964 L 350.7792207792208 -300.63330985507247 L 343.6363636363636 -293.4904527122153 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 380.12987012987014 -300.6028542028985 L 387.27272727272725 -307.7457113457557 L 394.4155844155844 -300.6028542028985 L 387.27272727272725 -293.4599970600414 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 423.76623376623377 -300.5912611594203 L 430.9090909090909 -307.7341183022774 L 438.05194805194805 -300.5912611594203 L 430.9090909090909 -293.44840401656313 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 467.4025974025974 -300.5779431884058 L 474.5454545454545 -307.7208003312629 L 481.68831168831167 -300.5779431884058 L 474.5454545454545 -293.43508604554864 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 511.038961038961 -300.5727428985507 L 518.1818181818182 -307.71560004140787 L 525.3246753246754 -300.5727428985507 L 518.1818181818182 -293.4298857556936 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 554.6753246753246 -300.57923768115944 L 561.8181818181818 -307.72209482401655 L 568.961038961039 -300.57923768115944 L 561.8181818181818 -293.4363805383023 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 598.3116883116883 -300.57126985507244 L 605.4545454545455 -307.7141269979296 L 612.5974025974026 -300.57126985507244 L 605.4545454545455 -293.42841271221533 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 641.9480519480519 -300.57128260869564 L 649.090909090909 -307.7141397515528 L 656.2337662337662 -300.57128260869564 L 649.090909090909 -293.42842546583853 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 685.5844155844156 -300.56368144927535 L 692.7272727272727 -307.7065385921325 L 699.8701298701299 -300.56368144927535 L 692.7272727272727 -293.42082430641824 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 729.2207792207791 -300.5616408695652 L 736.3636363636364 -307.70449801242233 L 743.5064935064936 -300.5616408695652 L 736.3636363636364 -293.41878372670806 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 301.75 -80.33333333333334 L 314.25 -80.33333333333334 L 308.0 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 308.0 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.38e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.76e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 4.14e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 5.52e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.90e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -322.96178260869567 L 387.27272727272725 -345.7823188405797 L 430.9090909090909 -367.15515942028986 L 474.5454545454545 -386.66884057971015 L 518.1818181818182 -406.2800869565217 L 561.8181818181818 -429.9412463768116 L 605.4545454545455 -451.8286956521739 L 649.090909090909 -471.6835362318841 L 692.7272727272727 -488.94269565217394 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -317.96178260869567 L 337.3863636363636 -327.96178260869567 L 349.8863636363636 -327.96178260869567 L 349.8863636363636 -317.96178260869567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -317.96178260869567 L 337.3863636363636 -327.96178260869567 L 349.8863636363636 -327.96178260869567 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -340.7823188405797 L 381.02272727272725 -350.7823188405797 L 393.52272727272725 -350.7823188405797 L 393.52272727272725 -340.7823188405797 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -340.7823188405797 L 381.02272727272725 -350.7823188405797 L 393.52272727272725 -350.7823188405797 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -362.15515942028986 L 424.6590909090909 -372.15515942028986 L 437.1590909090909 -372.15515942028986 L 437.1590909090909 -362.15515942028986 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -362.15515942028986 L 424.6590909090909 -372.15515942028986 L 437.1590909090909 -372.15515942028986 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -381.66884057971015 L 468.2954545454545 -391.66884057971015 L 480.7954545454545 -391.66884057971015 L 480.7954545454545 -381.66884057971015 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -381.66884057971015 L 468.2954545454545 -391.66884057971015 L 480.7954545454545 -391.66884057971015 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -401.2800869565217 L 511.9318181818182 -411.2800869565217 L 524.4318181818182 -411.2800869565217 L 524.4318181818182 -401.2800869565217 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -401.2800869565217 L 511.9318181818182 -411.2800869565217 L 524.4318181818182 -411.2800869565217 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -424.9412463768116 L 555.5681818181818 -434.9412463768116 L 568.0681818181818 -434.9412463768116 L 568.0681818181818 -424.9412463768116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -424.9412463768116 L 555.5681818181818 -434.9412463768116 L 568.0681818181818 -434.9412463768116 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -446.8286956521739 L 599.2045454545455 -456.8286956521739 L 611.7045454545455 -456.8286956521739 L 611.7045454545455 -446.8286956521739 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -446.8286956521739 L 599.2045454545455 -456.8286956521739 L 611.7045454545455 -456.8286956521739 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -466.6835362318841 L 642.840909090909 -476.6835362318841 L 655.340909090909 -476.6835362318841 L 655.340909090909 -466.6835362318841 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -466.6835362318841 L 642.840909090909 -476.6835362318841 L 655.340909090909 -476.6835362318841 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -483.94269565217394 L 686.4772727272727 -493.94269565217394 L 698.9772727272727 -493.94269565217394 L 698.9772727272727 -483.94269565217394 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -483.94269565217394 L 686.4772727272727 -493.94269565217394 L 698.9772727272727 -493.94269565217394 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -302.12481739130436 L 387.27272727272725 -302.12292985507247 L 430.9090909090909 -302.1251649275362 L 474.5454545454545 -302.13736376811596 L 518.1818181818182 -302.1172449275362 L 561.8181818181818 -302.1307 L 605.4545454545455 -302.12183304347826 L 649.090909090909 -302.1363339130435 L 692.7272727272727 -302.1368504347826 L 736.3636363636364 -302.1373" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 336.4935064935065 -294.9819602484472 L 336.4935064935065 -309.2676745341615 L 350.7792207792208 -309.2676745341615 L 350.7792207792208 -294.9819602484472 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -302.12481739130436 L 343.6363636363636 -309.2676745341615 L 350.7792207792208 -302.12481739130436 L 343.6363636363636 -294.9819602484472 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 380.12987012987014 -294.9800727122153 L 380.12987012987014 -309.2657869979296 L 394.4155844155844 -309.2657869979296 L 394.4155844155844 -294.9800727122153 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -302.12292985507247 L 387.27272727272725 -309.2657869979296 L 394.4155844155844 -302.12292985507247 L 387.27272727272725 -294.9800727122153 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 423.76623376623377 -294.9823077846791 L 423.76623376623377 -309.2680220703934 L 438.05194805194805 -309.2680220703934 L 438.05194805194805 -294.9823077846791 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -302.1251649275362 L 430.9090909090909 -309.2680220703934 L 438.05194805194805 -302.1251649275362 L 430.9090909090909 -294.9823077846791 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 467.4025974025974 -294.9945066252588 L 467.4025974025974 -309.28022091097307 L 481.68831168831167 -309.28022091097307 L 481.68831168831167 -294.9945066252588 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -302.13736376811596 L 474.5454545454545 -309.28022091097307 L 481.68831168831167 -302.13736376811596 L 474.5454545454545 -294.9945066252588 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.038961038961 -294.9743877846791 L 511.038961038961 -309.2601020703934 L 525.3246753246754 -309.2601020703934 L 525.3246753246754 -294.9743877846791 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -302.1172449275362 L 518.1818181818182 -309.2601020703934 L 525.3246753246754 -302.1172449275362 L 518.1818181818182 -294.9743877846791 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 554.6753246753246 -294.9878428571429 L 554.6753246753246 -309.27355714285716 L 568.961038961039 -309.27355714285716 L 568.961038961039 -294.9878428571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -302.1307 L 561.8181818181818 -309.27355714285716 L 568.961038961039 -302.1307 L 561.8181818181818 -294.9878428571429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 598.3116883116883 -294.9789759006211 L 598.3116883116883 -309.26469018633543 L 612.5974025974026 -309.26469018633543 L 612.5974025974026 -294.9789759006211 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -302.12183304347826 L 605.4545454545455 -309.26469018633543 L 612.5974025974026 -302.12183304347826 L 605.4545454545455 -294.9789759006211 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 641.9480519480519 -294.99347677018636 L 641.9480519480519 -309.27919105590064 L 656.2337662337662 -309.27919105590064 L 656.2337662337662 -294.99347677018636 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -302.1363339130435 L 649.090909090909 -309.27919105590064 L 656.2337662337662 -302.1363339130435 L 649.090909090909 -294.99347677018636 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 685.5844155844156 -294.99399329192545 L 685.5844155844156 -309.2797075776397 L 699.8701298701299 -309.2797075776397 L 699.8701298701299 -294.99399329192545 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -302.1368504347826 L 692.7272727272727 -309.2797075776397 L 699.8701298701299 -302.1368504347826 L 692.7272727272727 -294.99399329192545 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 729.2207792207791 -294.9944428571429 L 729.2207792207791 -309.28015714285715 L 743.5064935064936 -309.28015714285715 L 743.5064935064936 -294.9944428571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -302.1373 L 736.3636363636364 -309.28015714285715 L 743.5064935064936 -302.1373 L 736.3636363636364 -294.9944428571429 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -301.69144289855075 L 387.27272727272725 -301.6947588405797 L 430.9090909090909 -301.7050286956522 L 474.5454545454545 -301.71349391304346 L 518.1818181818182 -301.7348211594203 L 561.8181818181818 -301.734935942029 L 605.4545454545455 -301.7234162318841 L 649.090909090909 -301.73872376811596 L 692.7272727272727 -301.7232663768116 L 736.3636363636364 -301.7713379710145" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -296.69144289855075 L 337.3863636363636 -306.69144289855075 L 349.8863636363636 -306.69144289855075 L 349.8863636363636 -296.69144289855075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -296.69144289855075 L 349.8863636363636 -296.69144289855075 L 343.6363636363636 -306.69144289855075 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -296.6947588405797 L 381.02272727272725 -306.6947588405797 L 393.52272727272725 -306.6947588405797 L 393.52272727272725 -296.6947588405797 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -296.6947588405797 L 393.52272727272725 -296.6947588405797 L 387.27272727272725 -306.6947588405797 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -296.7050286956522 L 424.6590909090909 -306.7050286956522 L 437.1590909090909 -306.7050286956522 L 437.1590909090909 -296.7050286956522 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -296.7050286956522 L 437.1590909090909 -296.7050286956522 L 430.9090909090909 -306.7050286956522 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -296.71349391304346 L 468.2954545454545 -306.71349391304346 L 480.7954545454545 -306.71349391304346 L 480.7954545454545 -296.71349391304346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -296.71349391304346 L 480.7954545454545 -296.71349391304346 L 474.5454545454545 -306.71349391304346 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -296.7348211594203 L 511.9318181818182 -306.7348211594203 L 524.4318181818182 -306.7348211594203 L 524.4318181818182 -296.7348211594203 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -296.7348211594203 L 524.4318181818182 -296.7348211594203 L 518.1818181818182 -306.7348211594203 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -296.734935942029 L 555.5681818181818 -306.734935942029 L 568.0681818181818 -306.734935942029 L 568.0681818181818 -296.734935942029 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -296.734935942029 L 568.0681818181818 -296.734935942029 L 561.8181818181818 -306.734935942029 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -296.7234162318841 L 599.2045454545455 -306.7234162318841 L 611.7045454545455 -306.7234162318841 L 611.7045454545455 -296.7234162318841 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -296.7234162318841 L 611.7045454545455 -296.7234162318841 L 605.4545454545455 -306.7234162318841 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -296.73872376811596 L 642.840909090909 -306.73872376811596 L 655.340909090909 -306.73872376811596 L 655.340909090909 -296.73872376811596 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -296.73872376811596 L 655.340909090909 -296.73872376811596 L 649.090909090909 -306.73872376811596 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -296.7232663768116 L 686.4772727272727 -306.7232663768116 L 698.9772727272727 -306.7232663768116 L 698.9772727272727 -296.7232663768116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -296.7232663768116 L 698.9772727272727 -296.7232663768116 L 692.7272727272727 -306.7232663768116 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -296.7713379710145 L 730.1136363636364 -306.7713379710145 L 742.6136363636364 -306.7713379710145 L 742.6136363636364 -296.7713379710145 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -296.7713379710145 L 742.6136363636364 -296.7713379710145 L 736.3636363636364 -306.7713379710145 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -301.2135263768116 L 387.27272727272725 -301.18551304347824 L 430.9090909090909 -301.17607536231884 L 474.5454545454545 -301.1834915942029 L 518.1818181818182 -301.17121942028984 L 561.8181818181818 -301.19550231884057 L 605.4545454545455 -301.1725107246377 L 649.090909090909 -301.17134376811595 L 692.7272727272727 -301.18166463768114 L 736.3636363636364 -301.1715924637681" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -296.2135263768116 L 337.3863636363636 -306.2135263768116 L 349.8863636363636 -306.2135263768116 L 349.8863636363636 -296.2135263768116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.2135263768116 L 337.3863636363636 -306.2135263768116 L 349.8863636363636 -306.2135263768116 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -296.18551304347824 L 381.02272727272725 -306.18551304347824 L 393.52272727272725 -306.18551304347824 L 393.52272727272725 -296.18551304347824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -296.18551304347824 L 381.02272727272725 -306.18551304347824 L 393.52272727272725 -306.18551304347824 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -296.17607536231884 L 424.6590909090909 -306.17607536231884 L 437.1590909090909 -306.17607536231884 L 437.1590909090909 -296.17607536231884 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -296.17607536231884 L 424.6590909090909 -306.17607536231884 L 437.1590909090909 -306.17607536231884 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -296.1834915942029 L 468.2954545454545 -306.1834915942029 L 480.7954545454545 -306.1834915942029 L 480.7954545454545 -296.1834915942029 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.1834915942029 L 468.2954545454545 -306.1834915942029 L 480.7954545454545 -306.1834915942029 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -296.17121942028984 L 511.9318181818182 -306.17121942028984 L 524.4318181818182 -306.17121942028984 L 524.4318181818182 -296.17121942028984 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.17121942028984 L 511.9318181818182 -306.17121942028984 L 524.4318181818182 -306.17121942028984 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -296.19550231884057 L 555.5681818181818 -306.19550231884057 L 568.0681818181818 -306.19550231884057 L 568.0681818181818 -296.19550231884057 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -296.19550231884057 L 555.5681818181818 -306.19550231884057 L 568.0681818181818 -306.19550231884057 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -296.1725107246377 L 599.2045454545455 -306.1725107246377 L 611.7045454545455 -306.1725107246377 L 611.7045454545455 -296.1725107246377 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -296.1725107246377 L 599.2045454545455 -306.1725107246377 L 611.7045454545455 -306.1725107246377 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -296.17134376811595 L 642.840909090909 -306.17134376811595 L 655.340909090909 -306.17134376811595 L 655.340909090909 -296.17134376811595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -296.17134376811595 L 642.840909090909 -306.17134376811595 L 655.340909090909 -306.17134376811595 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -296.18166463768114 L 686.4772727272727 -306.18166463768114 L 698.9772727272727 -306.18166463768114 L 698.9772727272727 -296.18166463768114 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -296.18166463768114 L 686.4772727272727 -306.18166463768114 L 698.9772727272727 -306.18166463768114 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -296.1715924637681 L 730.1136363636364 -306.1715924637681 L 742.6136363636364 -306.1715924637681 L 742.6136363636364 -296.1715924637681 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.1715924637681 L 730.1136363636364 -306.1715924637681 L 742.6136363636364 -306.1715924637681 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -301.18088985507245 L 387.27272727272725 -301.1558863768116 L 430.9090909090909 -301.1584753623188 L 474.5454545454545 -301.1528095652174 L 518.1818181818182 -301.1669979710145 L 561.8181818181818 -301.1458428985507 L 605.4545454545455 -301.14631478260867 L 649.090909090909 -301.147064057971 L 692.7272727272727 -301.14330492753624 L 736.3636363636364 -301.1715924637681" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 336.4935064935065 -301.18088985507245 L 350.7792207792208 -301.18088985507245" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -294.03803271221534 L 343.6363636363636 -308.3237469979296" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -301.1558863768116 L 394.4155844155844 -301.1558863768116" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -294.01302923395446 L 387.27272727272725 -308.29874351966873" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -301.1584753623188 L 438.05194805194805 -301.1584753623188" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -294.0156182194617 L 430.9090909090909 -308.301332505176" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -301.1528095652174 L 481.68831168831167 -301.1528095652174" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -294.00995242236024 L 474.5454545454545 -308.2956667080745" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -301.1669979710145 L 525.3246753246754 -301.1669979710145" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -294.02414082815733 L 518.1818181818182 -308.30985511387166" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -301.1458428985507 L 568.961038961039 -301.1458428985507" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -294.0029857556936 L 561.8181818181818 -308.2887000414079" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -301.14631478260867 L 612.5974025974026 -301.14631478260867" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -294.00345763975156 L 605.4545454545455 -308.28917192546584" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -301.147064057971 L 656.2337662337662 -301.147064057971" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -294.00420691511385 L 649.090909090909 -308.28992120082813" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -301.14330492753624 L 699.8701298701299 -301.14330492753624" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -294.00044778467907 L 692.7272727272727 -308.2861620703934" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -301.1715924637681 L 743.5064935064936 -301.1715924637681" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -294.028735320911 L 736.3636363636364 -308.31444960662526" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 343.6363636363636 -300.81628289855075 L 387.27272727272725 -300.89136347826087 L 430.9090909090909 -300.94318782608696 L 474.5454545454545 -300.94503710144926 L 518.1818181818182 -300.95860695652175 L 561.8181818181818 -300.9781997101449 L 605.4545454545455 -300.9791402898551 L 649.090909090909 -300.9892124637681 L 692.7272727272727 -300.9891391304348 L 736.3636363636364 -301.0042234782609" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip53);">
+ <path d="M 337.3863636363636 -295.81628289855075 L 337.3863636363636 -305.81628289855075 L 349.8863636363636 -305.81628289855075 L 349.8863636363636 -295.81628289855075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.81628289855075 L 337.3863636363636 -305.81628289855075 L 349.8863636363636 -305.81628289855075 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip54);">
+ <path d="M 381.02272727272725 -295.89136347826087 L 381.02272727272725 -305.89136347826087 L 393.52272727272725 -305.89136347826087 L 393.52272727272725 -295.89136347826087 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.89136347826087 L 381.02272727272725 -305.89136347826087 L 393.52272727272725 -305.89136347826087 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip55);">
+ <path d="M 424.6590909090909 -295.94318782608696 L 424.6590909090909 -305.94318782608696 L 437.1590909090909 -305.94318782608696 L 437.1590909090909 -295.94318782608696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.94318782608696 L 424.6590909090909 -305.94318782608696 L 437.1590909090909 -305.94318782608696 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip56);">
+ <path d="M 468.2954545454545 -295.94503710144926 L 468.2954545454545 -305.94503710144926 L 480.7954545454545 -305.94503710144926 L 480.7954545454545 -295.94503710144926 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.94503710144926 L 468.2954545454545 -305.94503710144926 L 480.7954545454545 -305.94503710144926 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip57);">
+ <path d="M 511.9318181818182 -295.95860695652175 L 511.9318181818182 -305.95860695652175 L 524.4318181818182 -305.95860695652175 L 524.4318181818182 -295.95860695652175 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.95860695652175 L 511.9318181818182 -305.95860695652175 L 524.4318181818182 -305.95860695652175 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip58);">
+ <path d="M 555.5681818181818 -295.9781997101449 L 555.5681818181818 -305.9781997101449 L 568.0681818181818 -305.9781997101449 L 568.0681818181818 -295.9781997101449 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.9781997101449 L 555.5681818181818 -305.9781997101449 L 568.0681818181818 -305.9781997101449 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip59);">
+ <path d="M 599.2045454545455 -295.9791402898551 L 599.2045454545455 -305.9791402898551 L 611.7045454545455 -305.9791402898551 L 611.7045454545455 -295.9791402898551 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.9791402898551 L 599.2045454545455 -305.9791402898551 L 611.7045454545455 -305.9791402898551 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip60);">
+ <path d="M 642.840909090909 -295.9892124637681 L 642.840909090909 -305.9892124637681 L 655.340909090909 -305.9892124637681 L 655.340909090909 -295.9892124637681 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -295.9892124637681 L 642.840909090909 -305.9892124637681 L 655.340909090909 -305.9892124637681 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip61);">
+ <path d="M 686.4772727272727 -295.9891391304348 L 686.4772727272727 -305.9891391304348 L 698.9772727272727 -305.9891391304348 L 698.9772727272727 -295.9891391304348 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.9891391304348 L 686.4772727272727 -305.9891391304348 L 698.9772727272727 -305.9891391304348 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip62);">
+ <path d="M 730.1136363636364 -296.0042234782609 L 730.1136363636364 -306.0042234782609 L 742.6136363636364 -306.0042234782609 L 742.6136363636364 -296.0042234782609 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.0042234782609 L 730.1136363636364 -306.0042234782609 L 742.6136363636364 -306.0042234782609 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 343.6363636363636 -300.63330985507247 L 387.27272727272725 -300.6028542028985 L 430.9090909090909 -300.5912611594203 L 474.5454545454545 -300.5779431884058 L 518.1818181818182 -300.5727428985507 L 561.8181818181818 -300.57923768115944 L 605.4545454545455 -300.57126985507244 L 649.090909090909 -300.57128260869564 L 692.7272727272727 -300.56368144927535 L 736.3636363636364 -300.5616408695652" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip65);">
+ <path d="M 336.4935064935065 -293.4904527122153 L 336.4935064935065 -307.77616699792964 L 350.7792207792208 -307.77616699792964 L 350.7792207792208 -293.4904527122153 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.63330985507247 L 343.6363636363636 -307.77616699792964 L 350.7792207792208 -300.63330985507247 L 343.6363636363636 -293.4904527122153 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip66);">
+ <path d="M 380.12987012987014 -293.4599970600414 L 380.12987012987014 -307.7457113457557 L 394.4155844155844 -307.7457113457557 L 394.4155844155844 -293.4599970600414 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.6028542028985 L 387.27272727272725 -307.7457113457557 L 394.4155844155844 -300.6028542028985 L 387.27272727272725 -293.4599970600414 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip67);">
+ <path d="M 423.76623376623377 -293.44840401656313 L 423.76623376623377 -307.7341183022774 L 438.05194805194805 -307.7341183022774 L 438.05194805194805 -293.44840401656313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.5912611594203 L 430.9090909090909 -307.7341183022774 L 438.05194805194805 -300.5912611594203 L 430.9090909090909 -293.44840401656313 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip68);">
+ <path d="M 467.4025974025974 -293.43508604554864 L 467.4025974025974 -307.7208003312629 L 481.68831168831167 -307.7208003312629 L 481.68831168831167 -293.43508604554864 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.5779431884058 L 474.5454545454545 -307.7208003312629 L 481.68831168831167 -300.5779431884058 L 474.5454545454545 -293.43508604554864 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip69);">
+ <path d="M 511.038961038961 -293.4298857556936 L 511.038961038961 -307.71560004140787 L 525.3246753246754 -307.71560004140787 L 525.3246753246754 -293.4298857556936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.5727428985507 L 518.1818181818182 -307.71560004140787 L 525.3246753246754 -300.5727428985507 L 518.1818181818182 -293.4298857556936 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip70);">
+ <path d="M 554.6753246753246 -293.4363805383023 L 554.6753246753246 -307.72209482401655 L 568.961038961039 -307.72209482401655 L 568.961038961039 -293.4363805383023 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -300.57923768115944 L 561.8181818181818 -307.72209482401655 L 568.961038961039 -300.57923768115944 L 561.8181818181818 -293.4363805383023 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip71);">
+ <path d="M 598.3116883116883 -293.42841271221533 L 598.3116883116883 -307.7141269979296 L 612.5974025974026 -307.7141269979296 L 612.5974025974026 -293.42841271221533 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -300.57126985507244 L 605.4545454545455 -307.7141269979296 L 612.5974025974026 -300.57126985507244 L 605.4545454545455 -293.42841271221533 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip72);">
+ <path d="M 641.9480519480519 -293.42842546583853 L 641.9480519480519 -307.7141397515528 L 656.2337662337662 -307.7141397515528 L 656.2337662337662 -293.42842546583853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -300.57128260869564 L 649.090909090909 -307.7141397515528 L 656.2337662337662 -300.57128260869564 L 649.090909090909 -293.42842546583853 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip73);">
+ <path d="M 685.5844155844156 -293.42082430641824 L 685.5844155844156 -307.7065385921325 L 699.8701298701299 -307.7065385921325 L 699.8701298701299 -293.42082430641824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -300.56368144927535 L 692.7272727272727 -307.7065385921325 L 699.8701298701299 -300.56368144927535 L 692.7272727272727 -293.42082430641824 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip74);">
+ <path d="M 729.2207792207791 -293.41878372670806 L 729.2207792207791 -307.70449801242233 L 743.5064935064936 -307.70449801242233 L 743.5064935064936 -293.41878372670806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -300.5616408695652 L 736.3636363636364 -307.70449801242233 L 743.5064935064936 -300.5616408695652 L 736.3636363636364 -293.41878372670806 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ binary_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -80.33333333333334 L 314.25 -80.33333333333334 L 308.0 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ thin_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -45.33333333333334 L 315.14285714285717 -45.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -38.190476190476204 L 308.0 -52.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip80);">
+ <path d="M 301.75 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 L 314.25 -20.333333333333314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip81);">
+ <path d="M 300.85714285714283 1.8095238095238528 L 300.85714285714283 -12.476190476190482 L 315.14285714285717 -12.476190476190482 L 315.14285714285717 1.8095238095238528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdf
new file mode 100644
index 0000000000..495036c3fb
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.png
new file mode 100644
index 0000000000..56c841d5ec
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg
new file mode 100644
index 0000000000..ef5e2edde8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg
@@ -0,0 +1,821 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 556" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -320.1915104477612 L 337.3863636363636 -330.1915104477612 L 349.8863636363636 -330.1915104477612 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -344.63561194029853 L 381.02272727272725 -354.63561194029853 L 393.52272727272725 -354.63561194029853 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -362.9274626865672 L 424.6590909090909 -372.9274626865672 L 437.1590909090909 -372.9274626865672 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -388.45337313432833 L 468.2954545454545 -398.45337313432833 L 480.7954545454545 -398.45337313432833 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -411.7497313432836 L 511.9318181818182 -421.7497313432836 L 524.4318181818182 -421.7497313432836 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -433.88895522388054 L 555.5681818181818 -443.88895522388054 L 568.0681818181818 -443.88895522388054 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -453.96707462686567 L 599.2045454545455 -463.96707462686567 L 611.7045454545455 -463.96707462686567 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -476.544328358209 L 642.840909090909 -486.544328358209 L 655.340909090909 -486.544328358209 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -495.07489552238803 L 686.4772727272727 -505.07489552238803 L 698.9772727272727 -505.07489552238803 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -301.5658179104478 L 337.3863636363636 -311.5658179104478 L 349.8863636363636 -311.5658179104478 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -302.18900895522387 L 381.02272727272725 -312.18900895522387 L 393.52272727272725 -312.18900895522387 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -302.5086328358209 L 424.6590909090909 -312.5086328358209 L 437.1590909090909 -312.5086328358209 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -302.77145074626867 L 468.2954545454545 -312.77145074626867 L 480.7954545454545 -312.77145074626867 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -303.1685671641791 L 511.9318181818182 -313.1685671641791 L 524.4318181818182 -313.1685671641791 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -303.28835223880594 L 555.5681818181818 -313.28835223880594 L 568.0681818181818 -313.28835223880594 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -303.60222985074626 L 599.2045454545455 -313.60222985074626 L 611.7045454545455 -313.60222985074626 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -303.69541791044776 L 642.840909090909 -313.69541791044776 L 655.340909090909 -313.69541791044776 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -303.9053373134328 L 686.4772727272727 -313.9053373134328 L 698.9772727272727 -313.9053373134328 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -304.0137611940298 L 730.1136363636364 -314.0137611940298 L 742.6136363636364 -314.0137611940298 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 336.4935064935065 -306.1631194029851 L 343.6363636363636 -313.3059765458422 L 350.7792207792208 -306.1631194029851 L 343.6363636363636 -299.02026226012794 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 380.12987012987014 -306.8463014925373 L 387.27272727272725 -313.98915863539446 L 394.4155844155844 -306.8463014925373 L 387.27272727272725 -299.7034443496802 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 423.76623376623377 -307.3151313432836 L 430.9090909090909 -314.4579884861407 L 438.05194805194805 -307.3151313432836 L 430.9090909090909 -300.17227420042644 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 467.4025974025974 -307.5658656716418 L 474.5454545454545 -314.7087228144989 L 481.68831168831167 -307.5658656716418 L 474.5454545454545 -300.42300852878464 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 511.038961038961 -307.92564776119406 L 518.1818181818182 -315.06850490405117 L 525.3246753246754 -307.92564776119406 L 518.1818181818182 -300.7827906183369 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 554.6753246753246 -308.11113731343283 L 561.8181818181818 -315.25399445629 L 568.961038961039 -308.11113731343283 L 561.8181818181818 -300.96828017057567 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 598.3116883116883 -308.09649253731345 L 605.4545454545455 -315.23934968017056 L 612.5974025974026 -308.09649253731345 L 605.4545454545455 -300.9536353944563 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 641.9480519480519 -308.36098507462685 L 649.090909090909 -315.503842217484 L 656.2337662337662 -308.36098507462685 L 649.090909090909 -301.21812793176974 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 685.5844155844156 -308.4847104477612 L 692.7272727272727 -315.62756759061836 L 699.8701298701299 -308.4847104477612 L 692.7272727272727 -301.3418533049041 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 729.2207792207791 -308.651976119403 L 736.3636363636364 -315.7948332622601 L 743.5064935064936 -308.651976119403 L 736.3636363636364 -301.50911897654584 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 337.3863636363636 -300.5469223880597 L 349.8863636363636 -300.5469223880597 L 343.6363636363636 -310.5469223880597 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 381.02272727272725 -301.1179701492537 L 393.52272727272725 -301.1179701492537 L 387.27272727272725 -311.1179701492537 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 424.6590909090909 -301.54844776119404 L 437.1590909090909 -301.54844776119404 L 430.9090909090909 -311.54844776119404 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 468.2954545454545 -301.5150537313433 L 480.7954545454545 -301.5150537313433 L 474.5454545454545 -311.5150537313433 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 511.9318181818182 -301.89890447761195 L 524.4318181818182 -301.89890447761195 L 518.1818181818182 -311.89890447761195 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 555.5681818181818 -302.0614746268657 L 568.0681818181818 -302.0614746268657 L 561.8181818181818 -312.0614746268657 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 599.2045454545455 -302.1750208955224 L 611.7045454545455 -302.1750208955224 L 605.4545454545455 -312.1750208955224 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 642.840909090909 -302.32084477611943 L 655.340909090909 -302.32084477611943 L 649.090909090909 -312.32084477611943 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 686.4772727272727 -302.40260597014924 L 698.9772727272727 -302.40260597014924 L 692.7272727272727 -312.40260597014924 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 730.1136363636364 -302.5870776119403 L 742.6136363636364 -302.5870776119403 L 736.3636363636364 -312.5870776119403 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 343.6363636363636 -298.2357928358209 L 337.3863636363636 -308.2357928358209 L 349.8863636363636 -308.2357928358209 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 387.27272727272725 -298.6628029850746 L 381.02272727272725 -308.6628029850746 L 393.52272727272725 -308.6628029850746 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 430.9090909090909 -299.02189552238804 L 424.6590909090909 -309.02189552238804 L 437.1590909090909 -309.02189552238804 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 474.5454545454545 -299.2205194029851 L 468.2954545454545 -309.2205194029851 L 480.7954545454545 -309.2205194029851 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 518.1818181818182 -299.41576119402987 L 511.9318181818182 -309.41576119402987 L 524.4318181818182 -309.41576119402987 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 561.8181818181818 -299.51932537313434 L 555.5681818181818 -309.51932537313434 L 568.0681818181818 -309.51932537313434 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 605.4545454545455 -299.6235791044776 L 599.2045454545455 -309.6235791044776 L 611.7045454545455 -309.6235791044776 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 649.090909090909 -299.75291940298507 L 642.840909090909 -309.75291940298507 L 655.340909090909 -309.75291940298507 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 692.7272727272727 -299.8146507462687 L 686.4772727272727 -309.8146507462687 L 698.9772727272727 -309.8146507462687 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 736.3636363636364 -299.8596029850746 L 730.1136363636364 -309.8596029850746 L 742.6136363636364 -309.8596029850746 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 336.4935064935065 -302.0788095522388 L 343.6363636363636 -309.22166669509596 L 350.7792207792208 -302.0788095522388 L 343.6363636363636 -294.9359524093817 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 380.12987012987014 -302.2534402985075 L 387.27272727272725 -309.3962974413646 L 394.4155844155844 -302.2534402985075 L 387.27272727272725 -295.1105831556503 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 423.76623376623377 -302.34449731343284 L 430.9090909090909 -309.48735445628995 L 438.05194805194805 -302.34449731343284 L 430.9090909090909 -295.2016401705757 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 467.4025974025974 -302.4607919402985 L 474.5454545454545 -309.60364908315563 L 481.68831168831167 -302.4607919402985 L 474.5454545454545 -295.31793479744135 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 511.038961038961 -302.4959032835821 L 518.1818181818182 -309.63876042643926 L 525.3246753246754 -302.4959032835821 L 518.1818181818182 -295.3530461407249 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 554.6753246753246 -302.54936656716416 L 561.8181818181818 -309.6922237100213 L 568.961038961039 -302.54936656716416 L 561.8181818181818 -295.40650942430705 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 598.3116883116883 -302.6060182089552 L 605.4545454545455 -309.7488753518124 L 612.5974025974026 -302.6060182089552 L 605.4545454545455 -295.4631610660981 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 641.9480519480519 -302.64897402985076 L 649.090909090909 -309.7918311727079 L 656.2337662337662 -302.64897402985076 L 649.090909090909 -295.5061168869936 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 685.5844155844156 -302.66701402985075 L 692.7272727272727 -309.8098711727079 L 699.8701298701299 -302.66701402985075 L 692.7272727272727 -295.5241568869936 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 729.2207792207791 -302.66857701492535 L 736.3636363636364 -309.8114341577825 L 743.5064935064936 -302.66857701492535 L 736.3636363636364 -295.52571987206824 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 308.0 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.34e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.68e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 4.02e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 5.36e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 6.70e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -325.1915104477612 L 387.27272727272725 -349.63561194029853 L 430.9090909090909 -367.9274626865672 L 474.5454545454545 -393.45337313432833 L 518.1818181818182 -416.7497313432836 L 561.8181818181818 -438.88895522388054 L 605.4545454545455 -458.96707462686567 L 649.090909090909 -481.544328358209 L 692.7272727272727 -500.07489552238803 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -320.1915104477612 L 337.3863636363636 -330.1915104477612 L 349.8863636363636 -330.1915104477612 L 349.8863636363636 -320.1915104477612 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -320.1915104477612 L 337.3863636363636 -330.1915104477612 L 349.8863636363636 -330.1915104477612 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -344.63561194029853 L 381.02272727272725 -354.63561194029853 L 393.52272727272725 -354.63561194029853 L 393.52272727272725 -344.63561194029853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -344.63561194029853 L 381.02272727272725 -354.63561194029853 L 393.52272727272725 -354.63561194029853 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -362.9274626865672 L 424.6590909090909 -372.9274626865672 L 437.1590909090909 -372.9274626865672 L 437.1590909090909 -362.9274626865672 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -362.9274626865672 L 424.6590909090909 -372.9274626865672 L 437.1590909090909 -372.9274626865672 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -388.45337313432833 L 468.2954545454545 -398.45337313432833 L 480.7954545454545 -398.45337313432833 L 480.7954545454545 -388.45337313432833 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -388.45337313432833 L 468.2954545454545 -398.45337313432833 L 480.7954545454545 -398.45337313432833 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -411.7497313432836 L 511.9318181818182 -421.7497313432836 L 524.4318181818182 -421.7497313432836 L 524.4318181818182 -411.7497313432836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -411.7497313432836 L 511.9318181818182 -421.7497313432836 L 524.4318181818182 -421.7497313432836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -433.88895522388054 L 555.5681818181818 -443.88895522388054 L 568.0681818181818 -443.88895522388054 L 568.0681818181818 -433.88895522388054 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -433.88895522388054 L 555.5681818181818 -443.88895522388054 L 568.0681818181818 -443.88895522388054 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -453.96707462686567 L 599.2045454545455 -463.96707462686567 L 611.7045454545455 -463.96707462686567 L 611.7045454545455 -453.96707462686567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -453.96707462686567 L 599.2045454545455 -463.96707462686567 L 611.7045454545455 -463.96707462686567 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -476.544328358209 L 642.840909090909 -486.544328358209 L 655.340909090909 -486.544328358209 L 655.340909090909 -476.544328358209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -476.544328358209 L 642.840909090909 -486.544328358209 L 655.340909090909 -486.544328358209 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -495.07489552238803 L 686.4772727272727 -505.07489552238803 L 698.9772727272727 -505.07489552238803 L 698.9772727272727 -495.07489552238803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -495.07489552238803 L 686.4772727272727 -505.07489552238803 L 698.9772727272727 -505.07489552238803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -306.5658179104478 L 387.27272727272725 -307.18900895522387 L 430.9090909090909 -307.5086328358209 L 474.5454545454545 -307.77145074626867 L 518.1818181818182 -308.1685671641791 L 561.8181818181818 -308.28835223880594 L 605.4545454545455 -308.60222985074626 L 649.090909090909 -308.69541791044776 L 692.7272727272727 -308.9053373134328 L 736.3636363636364 -309.0137611940298" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -301.5658179104478 L 337.3863636363636 -311.5658179104478 L 349.8863636363636 -311.5658179104478 L 349.8863636363636 -301.5658179104478 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -301.5658179104478 L 337.3863636363636 -311.5658179104478 L 349.8863636363636 -311.5658179104478 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -302.18900895522387 L 381.02272727272725 -312.18900895522387 L 393.52272727272725 -312.18900895522387 L 393.52272727272725 -302.18900895522387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -302.18900895522387 L 381.02272727272725 -312.18900895522387 L 393.52272727272725 -312.18900895522387 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -302.5086328358209 L 424.6590909090909 -312.5086328358209 L 437.1590909090909 -312.5086328358209 L 437.1590909090909 -302.5086328358209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -302.5086328358209 L 424.6590909090909 -312.5086328358209 L 437.1590909090909 -312.5086328358209 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -302.77145074626867 L 468.2954545454545 -312.77145074626867 L 480.7954545454545 -312.77145074626867 L 480.7954545454545 -302.77145074626867 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -302.77145074626867 L 468.2954545454545 -312.77145074626867 L 480.7954545454545 -312.77145074626867 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -303.1685671641791 L 511.9318181818182 -313.1685671641791 L 524.4318181818182 -313.1685671641791 L 524.4318181818182 -303.1685671641791 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -303.1685671641791 L 511.9318181818182 -313.1685671641791 L 524.4318181818182 -313.1685671641791 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -303.28835223880594 L 555.5681818181818 -313.28835223880594 L 568.0681818181818 -313.28835223880594 L 568.0681818181818 -303.28835223880594 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -303.28835223880594 L 555.5681818181818 -313.28835223880594 L 568.0681818181818 -313.28835223880594 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -303.60222985074626 L 599.2045454545455 -313.60222985074626 L 611.7045454545455 -313.60222985074626 L 611.7045454545455 -303.60222985074626 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -303.60222985074626 L 599.2045454545455 -313.60222985074626 L 611.7045454545455 -313.60222985074626 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -303.69541791044776 L 642.840909090909 -313.69541791044776 L 655.340909090909 -313.69541791044776 L 655.340909090909 -303.69541791044776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -303.69541791044776 L 642.840909090909 -313.69541791044776 L 655.340909090909 -313.69541791044776 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -303.9053373134328 L 686.4772727272727 -313.9053373134328 L 698.9772727272727 -313.9053373134328 L 698.9772727272727 -303.9053373134328 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -303.9053373134328 L 686.4772727272727 -313.9053373134328 L 698.9772727272727 -313.9053373134328 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -304.0137611940298 L 730.1136363636364 -314.0137611940298 L 742.6136363636364 -314.0137611940298 L 742.6136363636364 -304.0137611940298 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -304.0137611940298 L 730.1136363636364 -314.0137611940298 L 742.6136363636364 -314.0137611940298 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -306.1631194029851 L 387.27272727272725 -306.8463014925373 L 430.9090909090909 -307.3151313432836 L 474.5454545454545 -307.5658656716418 L 518.1818181818182 -307.92564776119406 L 561.8181818181818 -308.11113731343283 L 605.4545454545455 -308.09649253731345 L 649.090909090909 -308.36098507462685 L 692.7272727272727 -308.4847104477612 L 736.3636363636364 -308.651976119403" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 336.4935064935065 -299.02026226012794 L 336.4935064935065 -313.3059765458422 L 350.7792207792208 -313.3059765458422 L 350.7792207792208 -299.02026226012794 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -306.1631194029851 L 343.6363636363636 -313.3059765458422 L 350.7792207792208 -306.1631194029851 L 343.6363636363636 -299.02026226012794 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 380.12987012987014 -299.7034443496802 L 380.12987012987014 -313.98915863539446 L 394.4155844155844 -313.98915863539446 L 394.4155844155844 -299.7034443496802 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -306.8463014925373 L 387.27272727272725 -313.98915863539446 L 394.4155844155844 -306.8463014925373 L 387.27272727272725 -299.7034443496802 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 423.76623376623377 -300.17227420042644 L 423.76623376623377 -314.4579884861407 L 438.05194805194805 -314.4579884861407 L 438.05194805194805 -300.17227420042644 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -307.3151313432836 L 430.9090909090909 -314.4579884861407 L 438.05194805194805 -307.3151313432836 L 430.9090909090909 -300.17227420042644 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 467.4025974025974 -300.42300852878464 L 467.4025974025974 -314.7087228144989 L 481.68831168831167 -314.7087228144989 L 481.68831168831167 -300.42300852878464 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -307.5658656716418 L 474.5454545454545 -314.7087228144989 L 481.68831168831167 -307.5658656716418 L 474.5454545454545 -300.42300852878464 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.038961038961 -300.7827906183369 L 511.038961038961 -315.06850490405117 L 525.3246753246754 -315.06850490405117 L 525.3246753246754 -300.7827906183369 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -307.92564776119406 L 518.1818181818182 -315.06850490405117 L 525.3246753246754 -307.92564776119406 L 518.1818181818182 -300.7827906183369 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 554.6753246753246 -300.96828017057567 L 554.6753246753246 -315.25399445629 L 568.961038961039 -315.25399445629 L 568.961038961039 -300.96828017057567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -308.11113731343283 L 561.8181818181818 -315.25399445629 L 568.961038961039 -308.11113731343283 L 561.8181818181818 -300.96828017057567 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 598.3116883116883 -300.9536353944563 L 598.3116883116883 -315.23934968017056 L 612.5974025974026 -315.23934968017056 L 612.5974025974026 -300.9536353944563 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -308.09649253731345 L 605.4545454545455 -315.23934968017056 L 612.5974025974026 -308.09649253731345 L 605.4545454545455 -300.9536353944563 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 641.9480519480519 -301.21812793176974 L 641.9480519480519 -315.503842217484 L 656.2337662337662 -315.503842217484 L 656.2337662337662 -301.21812793176974 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -308.36098507462685 L 649.090909090909 -315.503842217484 L 656.2337662337662 -308.36098507462685 L 649.090909090909 -301.21812793176974 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 685.5844155844156 -301.3418533049041 L 685.5844155844156 -315.62756759061836 L 699.8701298701299 -315.62756759061836 L 699.8701298701299 -301.3418533049041 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -308.4847104477612 L 692.7272727272727 -315.62756759061836 L 699.8701298701299 -308.4847104477612 L 692.7272727272727 -301.3418533049041 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 729.2207792207791 -301.50911897654584 L 729.2207792207791 -315.7948332622601 L 743.5064935064936 -315.7948332622601 L 743.5064935064936 -301.50911897654584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -308.651976119403 L 736.3636363636364 -315.7948332622601 L 743.5064935064936 -308.651976119403 L 736.3636363636364 -301.50911897654584 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -305.5469223880597 L 387.27272727272725 -306.1179701492537 L 430.9090909090909 -306.54844776119404 L 474.5454545454545 -306.5150537313433 L 518.1818181818182 -306.89890447761195 L 561.8181818181818 -307.0614746268657 L 605.4545454545455 -307.1750208955224 L 649.090909090909 -307.32084477611943 L 692.7272727272727 -307.40260597014924 L 736.3636363636364 -307.5870776119403" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -300.5469223880597 L 337.3863636363636 -310.5469223880597 L 349.8863636363636 -310.5469223880597 L 349.8863636363636 -300.5469223880597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -300.5469223880597 L 349.8863636363636 -300.5469223880597 L 343.6363636363636 -310.5469223880597 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -301.1179701492537 L 381.02272727272725 -311.1179701492537 L 393.52272727272725 -311.1179701492537 L 393.52272727272725 -301.1179701492537 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -301.1179701492537 L 393.52272727272725 -301.1179701492537 L 387.27272727272725 -311.1179701492537 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -301.54844776119404 L 424.6590909090909 -311.54844776119404 L 437.1590909090909 -311.54844776119404 L 437.1590909090909 -301.54844776119404 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -301.54844776119404 L 437.1590909090909 -301.54844776119404 L 430.9090909090909 -311.54844776119404 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -301.5150537313433 L 468.2954545454545 -311.5150537313433 L 480.7954545454545 -311.5150537313433 L 480.7954545454545 -301.5150537313433 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -301.5150537313433 L 480.7954545454545 -301.5150537313433 L 474.5454545454545 -311.5150537313433 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -301.89890447761195 L 511.9318181818182 -311.89890447761195 L 524.4318181818182 -311.89890447761195 L 524.4318181818182 -301.89890447761195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -301.89890447761195 L 524.4318181818182 -301.89890447761195 L 518.1818181818182 -311.89890447761195 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -302.0614746268657 L 555.5681818181818 -312.0614746268657 L 568.0681818181818 -312.0614746268657 L 568.0681818181818 -302.0614746268657 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -302.0614746268657 L 568.0681818181818 -302.0614746268657 L 561.8181818181818 -312.0614746268657 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -302.1750208955224 L 599.2045454545455 -312.1750208955224 L 611.7045454545455 -312.1750208955224 L 611.7045454545455 -302.1750208955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -302.1750208955224 L 611.7045454545455 -302.1750208955224 L 605.4545454545455 -312.1750208955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -302.32084477611943 L 642.840909090909 -312.32084477611943 L 655.340909090909 -312.32084477611943 L 655.340909090909 -302.32084477611943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -302.32084477611943 L 655.340909090909 -302.32084477611943 L 649.090909090909 -312.32084477611943 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -302.40260597014924 L 686.4772727272727 -312.40260597014924 L 698.9772727272727 -312.40260597014924 L 698.9772727272727 -302.40260597014924 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -302.40260597014924 L 698.9772727272727 -302.40260597014924 L 692.7272727272727 -312.40260597014924 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -302.5870776119403 L 730.1136363636364 -312.5870776119403 L 742.6136363636364 -312.5870776119403 L 742.6136363636364 -302.5870776119403 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -302.5870776119403 L 742.6136363636364 -302.5870776119403 L 736.3636363636364 -312.5870776119403 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -303.6021880597015 L 387.27272727272725 -304.10805671641793 L 430.9090909090909 -304.38860597014923 L 474.5454545454545 -304.5305880597015 L 518.1818181818182 -304.7197223880597 L 561.8181818181818 -304.8343850746269 L 605.4545454545455 -304.9249462686567 L 649.090909090909 -305.0168208955224 L 692.7272727272727 -305.1618895522388 L 736.3636363636364 -305.2960895522388" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 336.4935064935065 -303.6021880597015 L 350.7792207792208 -303.6021880597015" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -296.45933091684435 L 343.6363636363636 -310.74504520255863" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -304.10805671641793 L 394.4155844155844 -304.10805671641793" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -296.96519957356077 L 387.27272727272725 -311.25091385927504" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -304.38860597014923 L 438.05194805194805 -304.38860597014923" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -297.2457488272921 L 430.9090909090909 -311.5314631130064" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -304.5305880597015 L 481.68831168831167 -304.5305880597015" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -297.38773091684436 L 474.5454545454545 -311.67344520255864" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -304.7197223880597 L 525.3246753246754 -304.7197223880597" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -297.57686524520255 L 518.1818181818182 -311.86257953091683" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -304.8343850746269 L 568.961038961039 -304.8343850746269" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -297.6915279317697 L 561.8181818181818 -311.977242217484" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -304.9249462686567 L 612.5974025974026 -304.9249462686567" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -297.7820891257996 L 605.4545454545455 -312.06780341151386" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -305.0168208955224 L 656.2337662337662 -305.0168208955224" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -297.87396375266525 L 649.090909090909 -312.1596780383795" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -305.1618895522388 L 699.8701298701299 -305.1618895522388" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -298.0190324093817 L 692.7272727272727 -312.30474669509596" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -305.2960895522388 L 743.5064935064936 -305.2960895522388" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -298.15323240938164 L 736.3636363636364 -312.438946695096" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 343.6363636363636 -303.2357928358209 L 387.27272727272725 -303.6628029850746 L 430.9090909090909 -304.02189552238804 L 474.5454545454545 -304.2205194029851 L 518.1818181818182 -304.41576119402987 L 561.8181818181818 -304.51932537313434 L 605.4545454545455 -304.6235791044776 L 649.090909090909 -304.75291940298507 L 692.7272727272727 -304.8146507462687 L 736.3636363636364 -304.8596029850746" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip53);">
+ <path d="M 337.3863636363636 -298.2357928358209 L 337.3863636363636 -308.2357928358209 L 349.8863636363636 -308.2357928358209 L 349.8863636363636 -298.2357928358209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -298.2357928358209 L 337.3863636363636 -308.2357928358209 L 349.8863636363636 -308.2357928358209 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip54);">
+ <path d="M 381.02272727272725 -298.6628029850746 L 381.02272727272725 -308.6628029850746 L 393.52272727272725 -308.6628029850746 L 393.52272727272725 -298.6628029850746 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -298.6628029850746 L 381.02272727272725 -308.6628029850746 L 393.52272727272725 -308.6628029850746 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip55);">
+ <path d="M 424.6590909090909 -299.02189552238804 L 424.6590909090909 -309.02189552238804 L 437.1590909090909 -309.02189552238804 L 437.1590909090909 -299.02189552238804 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -299.02189552238804 L 424.6590909090909 -309.02189552238804 L 437.1590909090909 -309.02189552238804 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip56);">
+ <path d="M 468.2954545454545 -299.2205194029851 L 468.2954545454545 -309.2205194029851 L 480.7954545454545 -309.2205194029851 L 480.7954545454545 -299.2205194029851 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -299.2205194029851 L 468.2954545454545 -309.2205194029851 L 480.7954545454545 -309.2205194029851 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip57);">
+ <path d="M 511.9318181818182 -299.41576119402987 L 511.9318181818182 -309.41576119402987 L 524.4318181818182 -309.41576119402987 L 524.4318181818182 -299.41576119402987 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -299.41576119402987 L 511.9318181818182 -309.41576119402987 L 524.4318181818182 -309.41576119402987 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip58);">
+ <path d="M 555.5681818181818 -299.51932537313434 L 555.5681818181818 -309.51932537313434 L 568.0681818181818 -309.51932537313434 L 568.0681818181818 -299.51932537313434 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -299.51932537313434 L 555.5681818181818 -309.51932537313434 L 568.0681818181818 -309.51932537313434 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip59);">
+ <path d="M 599.2045454545455 -299.6235791044776 L 599.2045454545455 -309.6235791044776 L 611.7045454545455 -309.6235791044776 L 611.7045454545455 -299.6235791044776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -299.6235791044776 L 599.2045454545455 -309.6235791044776 L 611.7045454545455 -309.6235791044776 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip60);">
+ <path d="M 642.840909090909 -299.75291940298507 L 642.840909090909 -309.75291940298507 L 655.340909090909 -309.75291940298507 L 655.340909090909 -299.75291940298507 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -299.75291940298507 L 642.840909090909 -309.75291940298507 L 655.340909090909 -309.75291940298507 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip61);">
+ <path d="M 686.4772727272727 -299.8146507462687 L 686.4772727272727 -309.8146507462687 L 698.9772727272727 -309.8146507462687 L 698.9772727272727 -299.8146507462687 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -299.8146507462687 L 686.4772727272727 -309.8146507462687 L 698.9772727272727 -309.8146507462687 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip62);">
+ <path d="M 730.1136363636364 -299.8596029850746 L 730.1136363636364 -309.8596029850746 L 742.6136363636364 -309.8596029850746 L 742.6136363636364 -299.8596029850746 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -299.8596029850746 L 730.1136363636364 -309.8596029850746 L 742.6136363636364 -309.8596029850746 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 343.6363636363636 -302.0788095522388 L 387.27272727272725 -302.2534402985075 L 430.9090909090909 -302.34449731343284 L 474.5454545454545 -302.4607919402985 L 518.1818181818182 -302.4959032835821 L 561.8181818181818 -302.54936656716416 L 605.4545454545455 -302.6060182089552 L 649.090909090909 -302.64897402985076 L 692.7272727272727 -302.66701402985075 L 736.3636363636364 -302.66857701492535" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip65);">
+ <path d="M 336.4935064935065 -294.9359524093817 L 336.4935064935065 -309.22166669509596 L 350.7792207792208 -309.22166669509596 L 350.7792207792208 -294.9359524093817 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -302.0788095522388 L 343.6363636363636 -309.22166669509596 L 350.7792207792208 -302.0788095522388 L 343.6363636363636 -294.9359524093817 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip66);">
+ <path d="M 380.12987012987014 -295.1105831556503 L 380.12987012987014 -309.3962974413646 L 394.4155844155844 -309.3962974413646 L 394.4155844155844 -295.1105831556503 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -302.2534402985075 L 387.27272727272725 -309.3962974413646 L 394.4155844155844 -302.2534402985075 L 387.27272727272725 -295.1105831556503 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip67);">
+ <path d="M 423.76623376623377 -295.2016401705757 L 423.76623376623377 -309.48735445628995 L 438.05194805194805 -309.48735445628995 L 438.05194805194805 -295.2016401705757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -302.34449731343284 L 430.9090909090909 -309.48735445628995 L 438.05194805194805 -302.34449731343284 L 430.9090909090909 -295.2016401705757 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip68);">
+ <path d="M 467.4025974025974 -295.31793479744135 L 467.4025974025974 -309.60364908315563 L 481.68831168831167 -309.60364908315563 L 481.68831168831167 -295.31793479744135 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -302.4607919402985 L 474.5454545454545 -309.60364908315563 L 481.68831168831167 -302.4607919402985 L 474.5454545454545 -295.31793479744135 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip69);">
+ <path d="M 511.038961038961 -295.3530461407249 L 511.038961038961 -309.63876042643926 L 525.3246753246754 -309.63876042643926 L 525.3246753246754 -295.3530461407249 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -302.4959032835821 L 518.1818181818182 -309.63876042643926 L 525.3246753246754 -302.4959032835821 L 518.1818181818182 -295.3530461407249 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip70);">
+ <path d="M 554.6753246753246 -295.40650942430705 L 554.6753246753246 -309.6922237100213 L 568.961038961039 -309.6922237100213 L 568.961038961039 -295.40650942430705 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -302.54936656716416 L 561.8181818181818 -309.6922237100213 L 568.961038961039 -302.54936656716416 L 561.8181818181818 -295.40650942430705 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip71);">
+ <path d="M 598.3116883116883 -295.4631610660981 L 598.3116883116883 -309.7488753518124 L 612.5974025974026 -309.7488753518124 L 612.5974025974026 -295.4631610660981 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -302.6060182089552 L 605.4545454545455 -309.7488753518124 L 612.5974025974026 -302.6060182089552 L 605.4545454545455 -295.4631610660981 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip72);">
+ <path d="M 641.9480519480519 -295.5061168869936 L 641.9480519480519 -309.7918311727079 L 656.2337662337662 -309.7918311727079 L 656.2337662337662 -295.5061168869936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -302.64897402985076 L 649.090909090909 -309.7918311727079 L 656.2337662337662 -302.64897402985076 L 649.090909090909 -295.5061168869936 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip73);">
+ <path d="M 685.5844155844156 -295.5241568869936 L 685.5844155844156 -309.8098711727079 L 699.8701298701299 -309.8098711727079 L 699.8701298701299 -295.5241568869936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -302.66701402985075 L 692.7272727272727 -309.8098711727079 L 699.8701298701299 -302.66701402985075 L 692.7272727272727 -295.5241568869936 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip74);">
+ <path d="M 729.2207792207791 -295.52571987206824 L 729.2207792207791 -309.8114341577825 L 743.5064935064936 -309.8114341577825 L 743.5064935064936 -295.52571987206824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -302.66857701492535 L 736.3636363636364 -309.8114341577825 L 743.5064935064936 -302.66857701492535 L 736.3636363636364 -295.52571987206824 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ binary_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip77);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ thin_heap
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 300.85714285714283 -78.1904761904762 L 300.85714285714283 -92.47619047619048 L 315.14285714285717 -92.47619047619048 L 315.14285714285717 -78.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -85.33333333333334 L 308.0 -92.47619047619048 L 315.14285714285717 -85.33333333333334 L 308.0 -78.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -45.33333333333334 L 315.14285714285717 -45.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -38.190476190476204 L 308.0 -52.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip80);">
+ <path d="M 301.75 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 L 314.25 -20.333333333333314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip81);">
+ <path d="M 300.85714285714283 1.8095238095238528 L 300.85714285714283 -12.476190476190482 L 315.14285714285717 -12.476190476190482 L 315.14285714285717 1.8095238095238528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdf
new file mode 100644
index 0000000000..c7ee458b2c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png
new file mode 100644
index 0000000000..3a849d2d74
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg
new file mode 100644
index 0000000000..678bf93b4c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="568pt" height="180pt" viewBox="0.00 0.00 568.00 180.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 176)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-176 565,-176 565,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="180,-76 180,-96 344,-96 344,-76 180,-76"/>
+<text text-anchor="middle" x="262" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::priority_queue_tag</text>
+</g>
+<!-- Node3 -->
+<g id="node5" class="node"><title>Node3</title>
+<a xlink:href="a00187.html" target="_top" xlink:title="Binary-heap (array-based).">
+<polygon fill="white" stroke="black" points="392.5,-152 392.5,-172 547.5,-172 547.5,-152 392.5,-152"/>
+<text text-anchor="middle" x="470" y="-159.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binary_heap_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node3 -->
+<g id="edge4" class="edge"><title>Node1-&gt;Node3</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-101.033C311.786,-113.814 347.263,-131.822 380,-143 390.277,-146.509 401.444,-149.494 412.304,-151.987"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="289.867,-97.859 279.422,-96.0793 286.477,-103.984 289.867,-97.859"/>
+</g>
+<!-- Node4 -->
+<g id="node7" class="node"><title>Node4</title>
+<a xlink:href="a00188.html" target="_top" xlink:title="Binomial-heap.">
+<polygon fill="white" stroke="black" points="387.5,-114 387.5,-134 552.5,-134 552.5,-114 387.5,-114"/>
+<text text-anchor="middle" x="470" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node4 -->
+<g id="edge6" class="edge"><title>Node1-&gt;Node4</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-97.8959C355.381,-103.06 388.126,-109.042 415.132,-113.976"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="327.388,-94.388 316.922,-96.0338 326.13,-101.274 327.388,-94.388"/>
+</g>
+<!-- Node5 -->
+<g id="node9" class="node"><title>Node5</title>
+<a xlink:href="a00349.html" target="_top" xlink:title="Pairing-heap.">
+<polygon fill="white" stroke="black" points="391,-76 391,-96 549,-96 549,-76 391,-76"/>
+<text text-anchor="middle" x="470" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::pairing_heap_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node5 -->
+<g id="edge8" class="edge"><title>Node1-&gt;Node5</title>
+<path fill="none" stroke="midnightblue" d="M354.347,-86C366.497,-86 378.861,-86 390.766,-86"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="354.207,-82.5001 344.207,-86 354.207,-89.5001 354.207,-82.5001"/>
+</g>
+<!-- Node6 -->
+<g id="node11" class="node"><title>Node6</title>
+<a xlink:href="a00357.html" target="_top" xlink:title="Redundant-counter binomial-heap.">
+<polygon fill="white" stroke="black" points="380.5,-38 380.5,-58 559.5,-58 559.5,-38 380.5,-38"/>
+<text text-anchor="middle" x="470" y="-45.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::rc_binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node6 -->
+<g id="edge10" class="edge"><title>Node1-&gt;Node6</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-74.1041C355.381,-68.9399 388.126,-62.9578 415.132,-58.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="326.13,-70.726 316.922,-75.9662 327.388,-77.612 326.13,-70.726"/>
+</g>
+<!-- Node7 -->
+<g id="node13" class="node"><title>Node7</title>
+<a xlink:href="a00373.html" target="_top" xlink:title="Thin heap.">
+<polygon fill="white" stroke="black" points="398,-0 398,-20 542,-20 542,-0 398,-0"/>
+<text text-anchor="middle" x="470" y="-7.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::thin_heap_tag</text>
+</a>
+</g>
+<!-- Node1&#45;&gt;Node7 -->
+<g id="edge12" class="edge"><title>Node1-&gt;Node7</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-70.967C311.786,-58.1857 347.263,-40.1778 380,-29 390.277,-25.4912 401.444,-22.5058 412.304,-20.0134"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="286.477,-68.0163 279.422,-75.9207 289.867,-74.141 286.477,-68.0163"/>
+</g>
+<!-- Node2 -->
+<g id="node2" class="node"><title>Node2</title>
+<a xlink:href="a00193.html" target="_top" xlink:title="Base data structure tag.">
+<polygon fill="white" stroke="black" points="0.5,-76 0.5,-96 143.5,-96 143.5,-76 0.5,-76"/>
+<text text-anchor="middle" x="72" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::container_tag</text>
+</a>
+</g>
+<!-- Node2&#45;&gt;Node1 -->
+<g id="edge2" class="edge"><title>Node2-&gt;Node1</title>
+<path fill="none" stroke="midnightblue" d="M153.696,-86C162.404,-86 171.265,-86 179.978,-86"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="153.56,-82.5001 143.56,-86 153.56,-89.5001 153.56,-82.5001"/>
+</g>
+</g>
+</svg> \ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdf
new file mode 100644
index 0000000000..f16d00884b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.png
new file mode 100644
index 0000000000..5c3073d8f4
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg
new file mode 100644
index 0000000000..5c4679a2e5
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg
@@ -0,0 +1,817 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -531 620 543" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -336.4978054978055 L 337.3863636363636 -346.4978054978055 L 349.8863636363636 -346.4978054978055 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -343.63201663201664 L 381.02272727272725 -353.63201663201664 L 393.52272727272725 -353.63201663201664 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -346.95261195261196 L 424.6590909090909 -356.95261195261196 L 437.1590909090909 -356.95261195261196 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -348.83044583044585 L 468.2954545454545 -358.83044583044585 L 480.7954545454545 -358.83044583044585 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -350.2831072831073 L 511.9318181818182 -360.2831072831073 L 524.4318181818182 -360.2831072831073 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -353.8943668943669 L 555.5681818181818 -363.8943668943669 L 568.0681818181818 -363.8943668943669 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -353.21351021351023 L 599.2045454545455 -363.21351021351023 L 611.7045454545455 -363.21351021351023 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -354.3366333366333 L 642.840909090909 -364.3366333366333 L 655.340909090909 -364.3366333366333 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -355.6548526548527 L 686.4772727272727 -365.6548526548527 L 698.9772727272727 -365.6548526548527 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -356.6922416922417 L 730.1136363636364 -366.6922416922417 L 742.6136363636364 -366.6922416922417 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 336.4935064935065 -334.05933405933405 L 343.6363636363636 -341.2021912021912 L 350.7792207792208 -334.05933405933405 L 343.6363636363636 -326.91647691647694 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 380.12987012987014 -336.6986766986767 L 387.27272727272725 -343.8415338415339 L 394.4155844155844 -336.6986766986767 L 387.27272727272725 -329.55581955581954 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 423.76623376623377 -338.2148302148302 L 430.9090909090909 -345.3576873576874 L 438.05194805194805 -338.2148302148302 L 430.9090909090909 -331.0719730719731 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 467.4025974025974 -340.34419034419034 L 474.5454545454545 -347.4870474870475 L 481.68831168831167 -340.34419034419034 L 474.5454545454545 -333.2013332013332 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.038961038961 -340.6259446259446 L 518.1818181818182 -347.7688017688018 L 525.3246753246754 -340.6259446259446 L 518.1818181818182 -333.4830874830875 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 554.6753246753246 -341.92106392106393 L 561.8181818181818 -349.06392106392104 L 568.961038961039 -341.92106392106393 L 561.8181818181818 -334.77820677820677 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 598.3116883116883 -343.27914727914725 L 605.4545454545455 -350.4220044220044 L 612.5974025974026 -343.27914727914725 L 605.4545454545455 -336.13629013629014 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 641.9480519480519 -345.3048873048873 L 649.090909090909 -352.44774444774447 L 656.2337662337662 -345.3048873048873 L 649.090909090909 -338.1620301620302 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 685.5844155844156 -345.14536514536513 L 692.7272727272727 -352.2882222882223 L 699.8701298701299 -345.14536514536513 L 692.7272727272727 -338.002508002508 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 729.2207792207791 -344.4872124872125 L 736.3636363636364 -351.6300696300696 L 743.5064935064936 -344.4872124872125 L 736.3636363636364 -337.34435534435534 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -303.35897435897436 L 337.3863636363636 -313.35897435897436 L 349.8863636363636 -313.35897435897436 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -313.3333663333663 L 381.02272727272725 -323.3333663333663 L 393.52272727272725 -323.3333663333663 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -295.011000033 L 424.6590909090909 -305.011000033 L 437.1590909090909 -305.011000033 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -295.00825000825 L 468.2954545454545 -305.00825000825 L 480.7954545454545 -305.00825000825 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -317.0 L 511.9318181818182 -327.0 L 524.4318181818182 -327.0 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -295.0055000033 L 555.5681818181818 -305.0055000033 L 568.0681818181818 -305.0055000033 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -295.0047142923143 L 599.2045454545455 -305.0047142923143 L 611.7045454545455 -305.0047142923143 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -377.5000825000825 L 642.840909090909 -387.5000825000825 L 655.340909090909 -387.5000825000825 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -295.00366667326665 L 686.4772727272727 -305.00366667326665 L 698.9772727272727 -305.00366667326665 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 343.6363636363636 -296.22343002343 L 337.3863636363636 -306.22343002343 L 349.8863636363636 -306.22343002343 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 387.27272727272725 -296.4635646635647 L 381.02272727272725 -306.4635646635647 L 393.52272727272725 -306.4635646635647 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 430.9090909090909 -296.5249447249447 L 424.6590909090909 -306.5249447249447 L 437.1590909090909 -306.5249447249447 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 474.5454545454545 -296.5366003366003 L 468.2954545454545 -306.5366003366003 L 480.7954545454545 -306.5366003366003 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 518.1818181818182 -296.6149754149754 L 511.9318181818182 -306.6149754149754 L 524.4318181818182 -306.6149754149754 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 561.8181818181818 -296.81050721050724 L 555.5681818181818 -306.81050721050724 L 568.0681818181818 -306.81050721050724 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 605.4545454545455 -296.6140448140448 L 599.2045454545455 -306.6140448140448 L 611.7045454545455 -306.6140448140448 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 649.090909090909 -296.55030855030856 L 642.840909090909 -306.55030855030856 L 655.340909090909 -306.55030855030856 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 692.7272727272727 -296.6069234069234 L 686.4772727272727 -306.6069234069234 L 698.9772727272727 -306.6069234069234 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 736.3636363636364 -296.66431706431706 L 730.1136363636364 -306.66431706431706 L 742.6136363636364 -306.66431706431706 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 337.3863636363636 -295.2722047322047 L 349.8863636363636 -295.2722047322047 L 343.6363636363636 -305.2722047322047 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 381.02272727272725 -295.1457453057453 L 393.52272727272725 -295.1457453057453 L 387.27272727272725 -305.1457453057453 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 424.6590909090909 -295.011000033 L 437.1590909090909 -295.011000033 L 430.9090909090909 -305.011000033 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 468.2954545454545 -295.21793815793814 L 480.7954545454545 -295.21793815793814 L 474.5454545454545 -305.21793815793814 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 511.9318181818182 -295.0066000066 L 524.4318181818182 -295.0066000066 L 518.1818181818182 -305.0066000066 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 555.5681818181818 -295.0055000033 L 568.0681818181818 -295.0055000033 L 561.8181818181818 -305.0055000033 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 599.2045454545455 -295.0047142923143 L 611.7045454545455 -295.0047142923143 L 605.4545454545455 -305.0047142923143 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 642.840909090909 -295.004125004125 L 655.340909090909 -295.004125004125 L 649.090909090909 -305.004125004125 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 686.4772727272727 -295.00366667326665 L 698.9772727272727 -295.00366667326665 L 692.7272727272727 -305.00366667326665 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 730.1136363636364 -295.0033000033 L 742.6136363636364 -295.0033000033 L 736.3636363636364 -305.0033000033 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 336.4935064935065 -300.033000033 L 343.6363636363636 -307.1758571758572 L 350.7792207792208 -300.033000033 L 343.6363636363636 -292.8901428901429 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 380.12987012987014 -300.0165000165 L 387.27272727272725 -307.15935715935717 L 394.4155844155844 -300.0165000165 L 387.27272727272725 -292.8736428736429 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 423.76623376623377 -300.011000033 L 430.9090909090909 -307.1538571758572 L 438.05194805194805 -300.011000033 L 430.9090909090909 -292.8681428901429 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 467.4025974025974 -300.00825000825 L 474.5454545454545 -307.15110715110717 L 481.68831168831167 -300.00825000825 L 474.5454545454545 -292.8653928653929 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 511.038961038961 -300.0066000066 L 518.1818181818182 -307.14945714945713 L 525.3246753246754 -300.0066000066 L 518.1818181818182 -292.86374286374286 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 554.6753246753246 -300.0055000033 L 561.8181818181818 -307.14835714615714 L 568.961038961039 -300.0055000033 L 561.8181818181818 -292.86264286044286 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 598.3116883116883 -300.0047142923143 L 605.4545454545455 -307.1475714351714 L 612.5974025974026 -300.0047142923143 L 605.4545454545455 -292.86185714945714 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 641.9480519480519 -300.004125004125 L 649.090909090909 -307.14698214698217 L 656.2337662337662 -300.004125004125 L 649.090909090909 -292.86126786126783 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 685.5844155844156 -300.00366667326665 L 692.7272727272727 -307.1465238161238 L 699.8701298701299 -300.00366667326665 L 692.7272727272727 -292.86080953040954 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 729.2207792207791 -300.0033000033 L 736.3636363636364 -307.1461571461571 L 743.5064935064936 -300.0033000033 L 736.3636363636364 -292.86044286044284 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 301.75 -40.33333333333337 L 314.25 -40.33333333333337 L 308.0 -50.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 6.67e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.33e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.00e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 2.67e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -341.4978054978055 L 387.27272727272725 -348.63201663201664 L 430.9090909090909 -351.95261195261196 L 474.5454545454545 -353.83044583044585 L 518.1818181818182 -355.2831072831073 L 561.8181818181818 -358.8943668943669 L 605.4545454545455 -358.21351021351023 L 649.090909090909 -359.3366333366333 L 692.7272727272727 -360.6548526548527 L 736.3636363636364 -361.6922416922417" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -336.4978054978055 L 337.3863636363636 -346.4978054978055 L 349.8863636363636 -346.4978054978055 L 349.8863636363636 -336.4978054978055 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -336.4978054978055 L 337.3863636363636 -346.4978054978055 L 349.8863636363636 -346.4978054978055 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -343.63201663201664 L 381.02272727272725 -353.63201663201664 L 393.52272727272725 -353.63201663201664 L 393.52272727272725 -343.63201663201664 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -343.63201663201664 L 381.02272727272725 -353.63201663201664 L 393.52272727272725 -353.63201663201664 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -346.95261195261196 L 424.6590909090909 -356.95261195261196 L 437.1590909090909 -356.95261195261196 L 437.1590909090909 -346.95261195261196 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -346.95261195261196 L 424.6590909090909 -356.95261195261196 L 437.1590909090909 -356.95261195261196 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -348.83044583044585 L 468.2954545454545 -358.83044583044585 L 480.7954545454545 -358.83044583044585 L 480.7954545454545 -348.83044583044585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -348.83044583044585 L 468.2954545454545 -358.83044583044585 L 480.7954545454545 -358.83044583044585 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -350.2831072831073 L 511.9318181818182 -360.2831072831073 L 524.4318181818182 -360.2831072831073 L 524.4318181818182 -350.2831072831073 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -350.2831072831073 L 511.9318181818182 -360.2831072831073 L 524.4318181818182 -360.2831072831073 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -353.8943668943669 L 555.5681818181818 -363.8943668943669 L 568.0681818181818 -363.8943668943669 L 568.0681818181818 -353.8943668943669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -353.8943668943669 L 555.5681818181818 -363.8943668943669 L 568.0681818181818 -363.8943668943669 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -353.21351021351023 L 599.2045454545455 -363.21351021351023 L 611.7045454545455 -363.21351021351023 L 611.7045454545455 -353.21351021351023 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -353.21351021351023 L 599.2045454545455 -363.21351021351023 L 611.7045454545455 -363.21351021351023 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -354.3366333366333 L 642.840909090909 -364.3366333366333 L 655.340909090909 -364.3366333366333 L 655.340909090909 -354.3366333366333 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -354.3366333366333 L 642.840909090909 -364.3366333366333 L 655.340909090909 -364.3366333366333 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -355.6548526548527 L 686.4772727272727 -365.6548526548527 L 698.9772727272727 -365.6548526548527 L 698.9772727272727 -355.6548526548527 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -355.6548526548527 L 686.4772727272727 -365.6548526548527 L 698.9772727272727 -365.6548526548527 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -356.6922416922417 L 730.1136363636364 -366.6922416922417 L 742.6136363636364 -366.6922416922417 L 742.6136363636364 -356.6922416922417 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -356.6922416922417 L 730.1136363636364 -366.6922416922417 L 742.6136363636364 -366.6922416922417 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -334.05933405933405 L 387.27272727272725 -336.6986766986767 L 430.9090909090909 -338.2148302148302 L 474.5454545454545 -340.34419034419034 L 518.1818181818182 -340.6259446259446 L 561.8181818181818 -341.92106392106393 L 605.4545454545455 -343.27914727914725 L 649.090909090909 -345.3048873048873 L 692.7272727272727 -345.14536514536513 L 736.3636363636364 -344.4872124872125" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 336.4935064935065 -326.91647691647694 L 336.4935064935065 -341.2021912021912 L 350.7792207792208 -341.2021912021912 L 350.7792207792208 -326.91647691647694 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -334.05933405933405 L 343.6363636363636 -341.2021912021912 L 350.7792207792208 -334.05933405933405 L 343.6363636363636 -326.91647691647694 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 380.12987012987014 -329.55581955581954 L 380.12987012987014 -343.8415338415339 L 394.4155844155844 -343.8415338415339 L 394.4155844155844 -329.55581955581954 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -336.6986766986767 L 387.27272727272725 -343.8415338415339 L 394.4155844155844 -336.6986766986767 L 387.27272727272725 -329.55581955581954 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 423.76623376623377 -331.0719730719731 L 423.76623376623377 -345.3576873576874 L 438.05194805194805 -345.3576873576874 L 438.05194805194805 -331.0719730719731 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -338.2148302148302 L 430.9090909090909 -345.3576873576874 L 438.05194805194805 -338.2148302148302 L 430.9090909090909 -331.0719730719731 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 467.4025974025974 -333.2013332013332 L 467.4025974025974 -347.4870474870475 L 481.68831168831167 -347.4870474870475 L 481.68831168831167 -333.2013332013332 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -340.34419034419034 L 474.5454545454545 -347.4870474870475 L 481.68831168831167 -340.34419034419034 L 474.5454545454545 -333.2013332013332 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.038961038961 -333.4830874830875 L 511.038961038961 -347.7688017688018 L 525.3246753246754 -347.7688017688018 L 525.3246753246754 -333.4830874830875 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -340.6259446259446 L 518.1818181818182 -347.7688017688018 L 525.3246753246754 -340.6259446259446 L 518.1818181818182 -333.4830874830875 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 554.6753246753246 -334.77820677820677 L 554.6753246753246 -349.06392106392104 L 568.961038961039 -349.06392106392104 L 568.961038961039 -334.77820677820677 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -341.92106392106393 L 561.8181818181818 -349.06392106392104 L 568.961038961039 -341.92106392106393 L 561.8181818181818 -334.77820677820677 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 598.3116883116883 -336.13629013629014 L 598.3116883116883 -350.4220044220044 L 612.5974025974026 -350.4220044220044 L 612.5974025974026 -336.13629013629014 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -343.27914727914725 L 605.4545454545455 -350.4220044220044 L 612.5974025974026 -343.27914727914725 L 605.4545454545455 -336.13629013629014 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 641.9480519480519 -338.1620301620302 L 641.9480519480519 -352.44774444774447 L 656.2337662337662 -352.44774444774447 L 656.2337662337662 -338.1620301620302 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -345.3048873048873 L 649.090909090909 -352.44774444774447 L 656.2337662337662 -345.3048873048873 L 649.090909090909 -338.1620301620302 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 685.5844155844156 -338.002508002508 L 685.5844155844156 -352.2882222882223 L 699.8701298701299 -352.2882222882223 L 699.8701298701299 -338.002508002508 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -345.14536514536513 L 692.7272727272727 -352.2882222882223 L 699.8701298701299 -345.14536514536513 L 692.7272727272727 -338.002508002508 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 729.2207792207791 -337.34435534435534 L 729.2207792207791 -351.6300696300696 L 743.5064935064936 -351.6300696300696 L 743.5064935064936 -337.34435534435534 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -344.4872124872125 L 736.3636363636364 -351.6300696300696 L 743.5064935064936 -344.4872124872125 L 736.3636363636364 -337.34435534435534 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -308.35897435897436 L 387.27272727272725 -318.3333663333663 L 430.9090909090909 -300.011000033 L 474.5454545454545 -300.00825000825 L 518.1818181818182 -322.0 L 561.8181818181818 -300.0055000033 L 605.4545454545455 -300.0047142923143 L 649.090909090909 -382.5000825000825 L 692.7272727272727 -300.00366667326665 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -303.35897435897436 L 337.3863636363636 -313.35897435897436 L 349.8863636363636 -313.35897435897436 L 349.8863636363636 -303.35897435897436 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -303.35897435897436 L 337.3863636363636 -313.35897435897436 L 349.8863636363636 -313.35897435897436 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -313.3333663333663 L 381.02272727272725 -323.3333663333663 L 393.52272727272725 -323.3333663333663 L 393.52272727272725 -313.3333663333663 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -313.3333663333663 L 381.02272727272725 -323.3333663333663 L 393.52272727272725 -323.3333663333663 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -295.011000033 L 424.6590909090909 -305.011000033 L 437.1590909090909 -305.011000033 L 437.1590909090909 -295.011000033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.011000033 L 424.6590909090909 -305.011000033 L 437.1590909090909 -305.011000033 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -295.00825000825 L 468.2954545454545 -305.00825000825 L 480.7954545454545 -305.00825000825 L 480.7954545454545 -295.00825000825 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.00825000825 L 468.2954545454545 -305.00825000825 L 480.7954545454545 -305.00825000825 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -317.0 L 511.9318181818182 -327.0 L 524.4318181818182 -327.0 L 524.4318181818182 -317.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -317.0 L 511.9318181818182 -327.0 L 524.4318181818182 -327.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -295.0055000033 L 555.5681818181818 -305.0055000033 L 568.0681818181818 -305.0055000033 L 568.0681818181818 -295.0055000033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.0055000033 L 555.5681818181818 -305.0055000033 L 568.0681818181818 -305.0055000033 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -295.0047142923143 L 599.2045454545455 -305.0047142923143 L 611.7045454545455 -305.0047142923143 L 611.7045454545455 -295.0047142923143 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.0047142923143 L 599.2045454545455 -305.0047142923143 L 611.7045454545455 -305.0047142923143 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -377.5000825000825 L 642.840909090909 -387.5000825000825 L 655.340909090909 -387.5000825000825 L 655.340909090909 -377.5000825000825 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -377.5000825000825 L 642.840909090909 -387.5000825000825 L 655.340909090909 -387.5000825000825 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -295.00366667326665 L 686.4772727272727 -305.00366667326665 L 698.9772727272727 -305.00366667326665 L 698.9772727272727 -295.00366667326665 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.00366667326665 L 686.4772727272727 -305.00366667326665 L 698.9772727272727 -305.00366667326665 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -301.22343002343 L 387.27272727272725 -301.4635646635647 L 430.9090909090909 -301.5249447249447 L 474.5454545454545 -301.5366003366003 L 518.1818181818182 -301.6149754149754 L 561.8181818181818 -301.8105072105072 L 605.4545454545455 -301.6140448140448 L 649.090909090909 -301.55030855030856 L 692.7272727272727 -301.6069234069234 L 736.3636363636364 -301.66431706431706" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -296.22343002343 L 337.3863636363636 -306.22343002343 L 349.8863636363636 -306.22343002343 L 349.8863636363636 -296.22343002343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.22343002343 L 337.3863636363636 -306.22343002343 L 349.8863636363636 -306.22343002343 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -296.4635646635647 L 381.02272727272725 -306.4635646635647 L 393.52272727272725 -306.4635646635647 L 393.52272727272725 -296.4635646635647 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -296.4635646635647 L 381.02272727272725 -306.4635646635647 L 393.52272727272725 -306.4635646635647 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -296.5249447249447 L 424.6590909090909 -306.5249447249447 L 437.1590909090909 -306.5249447249447 L 437.1590909090909 -296.5249447249447 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -296.5249447249447 L 424.6590909090909 -306.5249447249447 L 437.1590909090909 -306.5249447249447 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -296.5366003366003 L 468.2954545454545 -306.5366003366003 L 480.7954545454545 -306.5366003366003 L 480.7954545454545 -296.5366003366003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.5366003366003 L 468.2954545454545 -306.5366003366003 L 480.7954545454545 -306.5366003366003 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -296.6149754149754 L 511.9318181818182 -306.6149754149754 L 524.4318181818182 -306.6149754149754 L 524.4318181818182 -296.6149754149754 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.6149754149754 L 511.9318181818182 -306.6149754149754 L 524.4318181818182 -306.6149754149754 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -296.81050721050724 L 555.5681818181818 -306.81050721050724 L 568.0681818181818 -306.81050721050724 L 568.0681818181818 -296.81050721050724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -296.81050721050724 L 555.5681818181818 -306.81050721050724 L 568.0681818181818 -306.81050721050724 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -296.6140448140448 L 599.2045454545455 -306.6140448140448 L 611.7045454545455 -306.6140448140448 L 611.7045454545455 -296.6140448140448 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -296.6140448140448 L 599.2045454545455 -306.6140448140448 L 611.7045454545455 -306.6140448140448 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -296.55030855030856 L 642.840909090909 -306.55030855030856 L 655.340909090909 -306.55030855030856 L 655.340909090909 -296.55030855030856 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -296.55030855030856 L 642.840909090909 -306.55030855030856 L 655.340909090909 -306.55030855030856 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -296.6069234069234 L 686.4772727272727 -306.6069234069234 L 698.9772727272727 -306.6069234069234 L 698.9772727272727 -296.6069234069234 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -296.6069234069234 L 686.4772727272727 -306.6069234069234 L 698.9772727272727 -306.6069234069234 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -296.66431706431706 L 730.1136363636364 -306.66431706431706 L 742.6136363636364 -306.66431706431706 L 742.6136363636364 -296.66431706431706 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.66431706431706 L 730.1136363636364 -306.66431706431706 L 742.6136363636364 -306.66431706431706 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -300.2722047322047 L 387.27272727272725 -300.1457453057453 L 430.9090909090909 -300.011000033 L 474.5454545454545 -300.21793815793814 L 518.1818181818182 -300.0066000066 L 561.8181818181818 -300.0055000033 L 605.4545454545455 -300.0047142923143 L 649.090909090909 -300.004125004125 L 692.7272727272727 -300.00366667326665 L 736.3636363636364 -300.0033000033" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 337.3863636363636 -295.2722047322047 L 337.3863636363636 -305.2722047322047 L 349.8863636363636 -305.2722047322047 L 349.8863636363636 -295.2722047322047 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -295.2722047322047 L 349.8863636363636 -295.2722047322047 L 343.6363636363636 -305.2722047322047 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 381.02272727272725 -295.1457453057453 L 381.02272727272725 -305.1457453057453 L 393.52272727272725 -305.1457453057453 L 393.52272727272725 -295.1457453057453 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -295.1457453057453 L 393.52272727272725 -295.1457453057453 L 387.27272727272725 -305.1457453057453 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 424.6590909090909 -295.011000033 L 424.6590909090909 -305.011000033 L 437.1590909090909 -305.011000033 L 437.1590909090909 -295.011000033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -295.011000033 L 437.1590909090909 -295.011000033 L 430.9090909090909 -305.011000033 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 468.2954545454545 -295.21793815793814 L 468.2954545454545 -305.21793815793814 L 480.7954545454545 -305.21793815793814 L 480.7954545454545 -295.21793815793814 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -295.21793815793814 L 480.7954545454545 -295.21793815793814 L 474.5454545454545 -305.21793815793814 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 511.9318181818182 -295.0066000066 L 511.9318181818182 -305.0066000066 L 524.4318181818182 -305.0066000066 L 524.4318181818182 -295.0066000066 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -295.0066000066 L 524.4318181818182 -295.0066000066 L 518.1818181818182 -305.0066000066 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 555.5681818181818 -295.0055000033 L 555.5681818181818 -305.0055000033 L 568.0681818181818 -305.0055000033 L 568.0681818181818 -295.0055000033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -295.0055000033 L 568.0681818181818 -295.0055000033 L 561.8181818181818 -305.0055000033 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 599.2045454545455 -295.0047142923143 L 599.2045454545455 -305.0047142923143 L 611.7045454545455 -305.0047142923143 L 611.7045454545455 -295.0047142923143 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -295.0047142923143 L 611.7045454545455 -295.0047142923143 L 605.4545454545455 -305.0047142923143 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 642.840909090909 -295.004125004125 L 642.840909090909 -305.004125004125 L 655.340909090909 -305.004125004125 L 655.340909090909 -295.004125004125 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -295.004125004125 L 655.340909090909 -295.004125004125 L 649.090909090909 -305.004125004125 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 686.4772727272727 -295.00366667326665 L 686.4772727272727 -305.00366667326665 L 698.9772727272727 -305.00366667326665 L 698.9772727272727 -295.00366667326665 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -295.00366667326665 L 698.9772727272727 -295.00366667326665 L 692.7272727272727 -305.00366667326665 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 730.1136363636364 -295.0033000033 L 730.1136363636364 -305.0033000033 L 742.6136363636364 -305.0033000033 L 742.6136363636364 -295.0033000033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -295.0033000033 L 742.6136363636364 -295.0033000033 L 736.3636363636364 -305.0033000033 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 343.6363636363636 -300.033000033 L 387.27272727272725 -300.1019285219285 L 430.9090909090909 -300.011000033 L 474.5454545454545 -300.0852503052503 L 518.1818181818182 -300.0066000066 L 561.8181818181818 -300.0055000033 L 605.4545454545455 -300.0047142923143 L 649.090909090909 -300.02217747417745 L 692.7272727272727 -300.00366667326665 L 736.3636363636364 -300.0033000033" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <path d="M 336.4935064935065 -300.033000033 L 350.7792207792208 -300.033000033" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -292.8901428901429 L 343.6363636363636 -307.1758571758572" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -300.1019285219285 L 394.4155844155844 -300.1019285219285" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -292.95907137907136 L 387.27272727272725 -307.24478566478564" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -300.011000033 L 438.05194805194805 -300.011000033" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -292.8681428901429 L 430.9090909090909 -307.1538571758572" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -300.0852503052503 L 481.68831168831167 -300.0852503052503" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -292.94239316239316 L 474.5454545454545 -307.22810744810744" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -300.0066000066 L 525.3246753246754 -300.0066000066" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -292.86374286374286 L 518.1818181818182 -307.14945714945713" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -300.0055000033 L 568.961038961039 -300.0055000033" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -292.86264286044286 L 561.8181818181818 -307.14835714615714" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -300.0047142923143 L 612.5974025974026 -300.0047142923143" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -292.86185714945714 L 605.4545454545455 -307.1475714351714" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -300.02217747417745 L 656.2337662337662 -300.02217747417745" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -292.87932033132034 L 649.090909090909 -307.1650346170346" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -300.00366667326665 L 699.8701298701299 -300.00366667326665" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -292.86080953040954 L 692.7272727272727 -307.1465238161238" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -300.0033000033 L 743.5064935064936 -300.0033000033" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -292.86044286044284 L 736.3636363636364 -307.1461571461571" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 343.6363636363636 -300.033000033 L 387.27272727272725 -300.0165000165 L 430.9090909090909 -300.011000033 L 474.5454545454545 -300.00825000825 L 518.1818181818182 -300.0066000066 L 561.8181818181818 -300.0055000033 L 605.4545454545455 -300.0047142923143 L 649.090909090909 -300.004125004125 L 692.7272727272727 -300.00366667326665 L 736.3636363636364 -300.0033000033" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 336.4935064935065 -292.8901428901429 L 336.4935064935065 -307.1758571758572 L 350.7792207792208 -307.1758571758572 L 350.7792207792208 -292.8901428901429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.033000033 L 343.6363636363636 -307.1758571758572 L 350.7792207792208 -300.033000033 L 343.6363636363636 -292.8901428901429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 380.12987012987014 -292.8736428736429 L 380.12987012987014 -307.15935715935717 L 394.4155844155844 -307.15935715935717 L 394.4155844155844 -292.8736428736429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.0165000165 L 387.27272727272725 -307.15935715935717 L 394.4155844155844 -300.0165000165 L 387.27272727272725 -292.8736428736429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 423.76623376623377 -292.8681428901429 L 423.76623376623377 -307.1538571758572 L 438.05194805194805 -307.1538571758572 L 438.05194805194805 -292.8681428901429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.011000033 L 430.9090909090909 -307.1538571758572 L 438.05194805194805 -300.011000033 L 430.9090909090909 -292.8681428901429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 467.4025974025974 -292.8653928653929 L 467.4025974025974 -307.15110715110717 L 481.68831168831167 -307.15110715110717 L 481.68831168831167 -292.8653928653929 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.00825000825 L 474.5454545454545 -307.15110715110717 L 481.68831168831167 -300.00825000825 L 474.5454545454545 -292.8653928653929 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 511.038961038961 -292.86374286374286 L 511.038961038961 -307.14945714945713 L 525.3246753246754 -307.14945714945713 L 525.3246753246754 -292.86374286374286 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.0066000066 L 518.1818181818182 -307.14945714945713 L 525.3246753246754 -300.0066000066 L 518.1818181818182 -292.86374286374286 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 554.6753246753246 -292.86264286044286 L 554.6753246753246 -307.14835714615714 L 568.961038961039 -307.14835714615714 L 568.961038961039 -292.86264286044286 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -300.0055000033 L 561.8181818181818 -307.14835714615714 L 568.961038961039 -300.0055000033 L 561.8181818181818 -292.86264286044286 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 598.3116883116883 -292.86185714945714 L 598.3116883116883 -307.1475714351714 L 612.5974025974026 -307.1475714351714 L 612.5974025974026 -292.86185714945714 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -300.0047142923143 L 605.4545454545455 -307.1475714351714 L 612.5974025974026 -300.0047142923143 L 605.4545454545455 -292.86185714945714 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 641.9480519480519 -292.86126786126783 L 641.9480519480519 -307.14698214698217 L 656.2337662337662 -307.14698214698217 L 656.2337662337662 -292.86126786126783 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -300.004125004125 L 649.090909090909 -307.14698214698217 L 656.2337662337662 -300.004125004125 L 649.090909090909 -292.86126786126783 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 685.5844155844156 -292.86080953040954 L 685.5844155844156 -307.1465238161238 L 699.8701298701299 -307.1465238161238 L 699.8701298701299 -292.86080953040954 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -300.00366667326665 L 692.7272727272727 -307.1465238161238 L 699.8701298701299 -300.00366667326665 L 692.7272727272727 -292.86080953040954 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 729.2207792207791 -292.86044286044284 L 729.2207792207791 -307.1461571461571 L 743.5064935064936 -307.1461571461571 L 743.5064935064936 -292.86044286044284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -300.0033000033 L 736.3636363636364 -307.1461571461571 L 743.5064935064936 -300.0033000033 L 736.3636363636364 -292.86044286044284 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip77);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ binary_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ thin_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 301.75 -40.33333333333337 L 301.75 -50.33333333333334 L 314.25 -50.33333333333334 L 314.25 -40.33333333333337 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -40.33333333333337 L 314.25 -40.33333333333337 L 308.0 -50.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -25.333333333333314 L 315.14285714285717 -25.333333333333314" style="stroke-width:1;"/>
+ <path d="M 308.0 -18.190476190476147 L 308.0 -32.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 300.85714285714283 1.8095238095238528 L 300.85714285714283 -12.476190476190482 L 315.14285714285717 -12.476190476190482 L 315.14285714285717 1.8095238095238528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ rc_binomial_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdf
new file mode 100644
index 0000000000..29c82ed7f9
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.png
new file mode 100644
index 0000000000..931812d13b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg
new file mode 100644
index 0000000000..ed62f611c3
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg
@@ -0,0 +1,821 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 556" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 321.8181818181818 -310.86099840318315 L 315.5681818181818 -320.86099840318315 L 328.0681818181818 -320.86099840318315 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 343.6363636363636 -330.01238187482005 L 337.3863636363636 -340.01238187482005 L 349.8863636363636 -340.01238187482005 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 365.45454545454544 -350.1980314651449 L 359.20454545454544 -360.1980314651449 L 371.70454545454544 -360.1980314651449 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 387.27272727272725 -372.15871312269314 L 381.02272727272725 -382.15871312269314 L 393.52272727272725 -382.15871312269314 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 409.0909090909091 -394.06128111829537 L 402.8409090909091 -404.06128111829537 L 415.3409090909091 -404.06128111829537 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 430.9090909090909 -416.80571189235883 L 424.6590909090909 -426.80571189235883 L 437.1590909090909 -426.80571189235883 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 452.72727272727275 -440.03285254312715 L 446.47727272727275 -450.03285254312715 L 458.97727272727275 -450.03285254312715 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 474.5454545454545 -463.5610324337059 L 468.2954545454545 -473.5610324337059 L 480.7954545454545 -473.5610324337059 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 496.3636363636364 -490.0048428051622 L 490.1136363636364 -500.0048428051622 L 502.6136363636364 -500.0048428051622 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 518.1818181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 314.67532467532465 -313.21064893589175 L 321.8181818181818 -320.35350607874886 L 328.961038961039 -313.21064893589175 L 321.8181818181818 -306.0677917930346 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 336.4935064935065 -328.6553231590796 L 343.6363636363636 -335.7981803019368 L 350.7792207792208 -328.6553231590796 L 343.6363636363636 -321.51246601622245 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 358.31168831168833 -345.90031674563494 L 365.45454545454544 -353.0431738884921 L 372.5974025974026 -345.90031674563494 L 365.45454545454544 -338.7574596027778 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 380.12987012987014 -361.46383602523497 L 387.27272727272725 -368.6066931680921 L 394.4155844155844 -361.46383602523497 L 387.27272727272725 -354.3209788823778 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 401.94805194805195 -378.8298735635193 L 409.0909090909091 -385.9727307063764 L 416.23376623376623 -378.8298735635193 L 409.0909090909091 -371.68701642066213 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 423.76623376623377 -397.67597706866314 L 430.9090909090909 -404.81883421152025 L 438.05194805194805 -397.67597706866314 L 430.9090909090909 -390.533119925806 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 445.5844155844156 -415.6268160519358 L 452.72727272727275 -422.769673194793 L 459.87012987012986 -415.6268160519358 L 452.72727272727275 -408.4839589090787 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 467.4025974025974 -434.10748409727495 L 474.5454545454545 -441.2503412401321 L 481.68831168831167 -434.10748409727495 L 474.5454545454545 -426.9646269544178 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 489.22077922077926 -452.3593623203581 L 496.3636363636364 -459.5022194632153 L 503.5064935064935 -452.3593623203581 L 496.3636363636364 -445.21650517750095 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 511.038961038961 -470.8007643778959 L 518.1818181818182 -477.943621520753 L 525.3246753246754 -470.8007643778959 L 518.1818181818182 -463.65790723503875 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 321.8181818181818 -295.19323002015653 L 315.5681818181818 -305.19323002015653 L 328.0681818181818 -305.19323002015653 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 343.6363636363636 -295.3478715216879 L 337.3863636363636 -305.3478715216879 L 349.8863636363636 -305.3478715216879 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 365.45454545454544 -295.42060521975867 L 359.20454545454544 -305.42060521975867 L 371.70454545454544 -305.42060521975867 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 387.27272727272725 -295.4688432239994 L 381.02272727272725 -305.4688432239994 L 393.52272727272725 -305.4688432239994 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 409.0909090909091 -295.4188372032146 L 402.8409090909091 -305.4188372032146 L 415.3409090909091 -305.4188372032146 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 430.9090909090909 -295.59743985759536 L 424.6590909090909 -305.59743985759536 L 437.1590909090909 -305.59743985759536 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 452.72727272727275 -295.8236067118662 L 446.47727272727275 -305.8236067118662 L 458.97727272727275 -305.8236067118662 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 474.5454545454545 -296.0907201382163 L 468.2954545454545 -306.0907201382163 L 480.7954545454545 -306.0907201382163 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 496.3636363636364 -295.9695295934661 L 490.1136363636364 -305.9695295934661 L 502.6136363636364 -305.9695295934661 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 518.1818181818182 -296.0470930080364 L 511.9318181818182 -306.0470930080364 L 524.4318181818182 -306.0470930080364 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 321.8181818181818 -295.21830109159447 L 315.5681818181818 -305.21830109159447 L 328.0681818181818 -305.21830109159447 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 343.6363636363636 -295.24091987120755 L 337.3863636363636 -305.24091987120755 L 349.8863636363636 -305.24091987120755 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 365.45454545454544 -295.27278448208165 L 359.20454545454544 -305.27278448208165 L 371.70454545454544 -305.27278448208165 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 387.27272727272725 -295.27917332007013 L 381.02272727272725 -305.27917332007013 L 393.52272727272725 -305.27917332007013 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 409.0909090909091 -295.2803523467972 L 402.8409090909091 -305.2803523467972 L 415.3409090909091 -305.2803523467972 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 430.9090909090909 -295.301039763357 L 424.6590909090909 -305.301039763357 L 437.1590909090909 -305.301039763357 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 452.72727272727275 -295.31042276380197 L 446.47727272727275 -305.31042276380197 L 458.97727272727275 -305.31042276380197 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 474.5454545454545 -295.3170283500432 L 468.2954545454545 -305.3170283500432 L 480.7954545454545 -305.3170283500432 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 496.3636363636364 -295.28411298133557 L 490.1136363636364 -305.28411298133557 L 502.6136363636364 -305.28411298133557 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 518.1818181818182 -295.3279620952331 L 511.9318181818182 -305.3279620952331 L 524.4318181818182 -305.3279620952331 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 314.67532467532465 -300.1630899714667 L 321.8181818181818 -307.3059471143239 L 328.961038961039 -300.1630899714667 L 321.8181818181818 -293.02023282860955 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 336.4935064935065 -300.16635637810526 L 343.6363636363636 -307.30921352096243 L 350.7792207792208 -300.16635637810526 L 343.6363636363636 -293.02349923524815 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 358.31168831168833 -300.18454961911993 L 365.45454545454544 -307.32740676197704 L 372.5974025974026 -300.18454961911993 L 365.45454545454544 -293.04169247626277 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 380.12987012987014 -300.1713866129159 L 387.27272727272725 -307.314243755773 L 394.4155844155844 -300.1713866129159 L 387.27272727272725 -293.02852947005874 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 401.94805194805195 -300.20018952383447 L 409.0909090909091 -307.3430466666916 L 416.23376623376623 -300.20018952383447 L 409.0909090909091 -293.0573323809773 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 423.76623376623377 -300.18787780424594 L 430.9090909090909 -307.3307349471031 L 438.05194805194805 -300.18787780424594 L 430.9090909090909 -293.04502066138883 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 445.5844155844156 -300.19715138347163 L 452.72727272727275 -307.3400085263288 L 459.87012987012986 -300.19715138347163 L 452.72727272727275 -293.05429424061447 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 467.4025974025974 -300.17971780843436 L 474.5454545454545 -307.3225749512915 L 481.68831168831167 -300.17971780843436 L 474.5454545454545 -293.0368606655772 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 489.22077922077926 -300.21577236198004 L 496.3636363636364 -307.3586295048372 L 503.5064935064935 -300.21577236198004 L 496.3636363636364 -293.07291521912293 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 511.038961038961 -300.1964393602262 L 518.1818181818182 -307.3392965030833 L 525.3246753246754 -300.1964393602262 L 518.1818181818182 -293.053582217369 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 315.5681818181818 -295.1218779613099 L 328.0681818181818 -295.1218779613099 L 321.8181818181818 -305.1218779613099 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 337.3863636363636 -295.12402973744145 L 349.8863636363636 -295.12402973744145 L 343.6363636363636 -305.12402973744145 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 359.20454545454544 -295.1222402554907 L 371.70454545454544 -295.1222402554907 L 365.45454545454544 -305.1222402554907 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 381.02272727272725 -295.12790293447813 L 393.52272727272725 -295.12790293447813 L 387.27272727272725 -305.12790293447813 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 402.8409090909091 -295.12224392031624 L 415.3409090909091 -295.12224392031624 L 409.0909090909091 -305.12224392031624 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 424.6590909090909 -295.1332085547499 L 437.1590909090909 -295.1332085547499 L 430.9090909090909 -305.1332085547499 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 446.47727272727275 -295.1205774717939 L 458.97727272727275 -295.1205774717939 L 452.72727272727275 -305.1205774717939 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 468.2954545454545 -295.1359205256407 L 480.7954545454545 -295.1359205256407 L 474.5454545454545 -305.1359205256407 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 490.1136363636364 -295.1614517944556 L 502.6136363636364 -295.1614517944556 L 496.3636363636364 -305.1614517944556 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 511.9318181818182 -295.11264364807204 L 524.4318181818182 -295.11264364807204 L 518.1818181818182 -305.11264364807204 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 300.85714285714283 -45.33333333333334 L 308.0 -52.47619047619048 L 315.14285714285717 -45.33333333333334 L 308.0 -38.190476190476204 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 301.75 -20.333333333333314 L 314.25 -20.333333333333314 L 308.0 -30.333333333333314 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.40e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.68e-04
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.52e-04
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.36e-04
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.20e-04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 321.8181818181818 -315.86099840318315 L 343.6363636363636 -335.01238187482005 L 365.45454545454544 -355.1980314651449 L 387.27272727272725 -377.15871312269314 L 409.0909090909091 -399.06128111829537 L 430.9090909090909 -421.80571189235883 L 452.72727272727275 -445.03285254312715 L 474.5454545454545 -468.5610324337059 L 496.3636363636364 -495.0048428051622 L 518.1818181818182 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 315.5681818181818 -310.86099840318315 L 315.5681818181818 -320.86099840318315 L 328.0681818181818 -320.86099840318315 L 328.0681818181818 -310.86099840318315 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -310.86099840318315 L 315.5681818181818 -320.86099840318315 L 328.0681818181818 -320.86099840318315 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 337.3863636363636 -330.01238187482005 L 337.3863636363636 -340.01238187482005 L 349.8863636363636 -340.01238187482005 L 349.8863636363636 -330.01238187482005 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -330.01238187482005 L 337.3863636363636 -340.01238187482005 L 349.8863636363636 -340.01238187482005 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 359.20454545454544 -350.1980314651449 L 359.20454545454544 -360.1980314651449 L 371.70454545454544 -360.1980314651449 L 371.70454545454544 -350.1980314651449 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -350.1980314651449 L 359.20454545454544 -360.1980314651449 L 371.70454545454544 -360.1980314651449 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 381.02272727272725 -372.15871312269314 L 381.02272727272725 -382.15871312269314 L 393.52272727272725 -382.15871312269314 L 393.52272727272725 -372.15871312269314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -372.15871312269314 L 381.02272727272725 -382.15871312269314 L 393.52272727272725 -382.15871312269314 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 402.8409090909091 -394.06128111829537 L 402.8409090909091 -404.06128111829537 L 415.3409090909091 -404.06128111829537 L 415.3409090909091 -394.06128111829537 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -394.06128111829537 L 402.8409090909091 -404.06128111829537 L 415.3409090909091 -404.06128111829537 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 424.6590909090909 -416.80571189235883 L 424.6590909090909 -426.80571189235883 L 437.1590909090909 -426.80571189235883 L 437.1590909090909 -416.80571189235883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -416.80571189235883 L 424.6590909090909 -426.80571189235883 L 437.1590909090909 -426.80571189235883 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 446.47727272727275 -440.03285254312715 L 446.47727272727275 -450.03285254312715 L 458.97727272727275 -450.03285254312715 L 458.97727272727275 -440.03285254312715 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -440.03285254312715 L 446.47727272727275 -450.03285254312715 L 458.97727272727275 -450.03285254312715 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 468.2954545454545 -463.5610324337059 L 468.2954545454545 -473.5610324337059 L 480.7954545454545 -473.5610324337059 L 480.7954545454545 -463.5610324337059 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -463.5610324337059 L 468.2954545454545 -473.5610324337059 L 480.7954545454545 -473.5610324337059 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 490.1136363636364 -490.0048428051622 L 490.1136363636364 -500.0048428051622 L 502.6136363636364 -500.0048428051622 L 502.6136363636364 -490.0048428051622 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -490.0048428051622 L 490.1136363636364 -500.0048428051622 L 502.6136363636364 -500.0048428051622 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 511.9318181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 L 524.4318181818182 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 321.8181818181818 -313.21064893589175 L 343.6363636363636 -328.6553231590796 L 365.45454545454544 -345.90031674563494 L 387.27272727272725 -361.46383602523497 L 409.0909090909091 -378.8298735635193 L 430.9090909090909 -397.67597706866314 L 452.72727272727275 -415.6268160519358 L 474.5454545454545 -434.10748409727495 L 496.3636363636364 -452.3593623203581 L 518.1818181818182 -470.8007643778959" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 314.67532467532465 -306.0677917930346 L 314.67532467532465 -320.35350607874886 L 328.961038961039 -320.35350607874886 L 328.961038961039 -306.0677917930346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 314.67532467532465 -313.21064893589175 L 321.8181818181818 -320.35350607874886 L 328.961038961039 -313.21064893589175 L 321.8181818181818 -306.0677917930346 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 336.4935064935065 -321.51246601622245 L 336.4935064935065 -335.7981803019368 L 350.7792207792208 -335.7981803019368 L 350.7792207792208 -321.51246601622245 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -328.6553231590796 L 343.6363636363636 -335.7981803019368 L 350.7792207792208 -328.6553231590796 L 343.6363636363636 -321.51246601622245 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 358.31168831168833 -338.7574596027778 L 358.31168831168833 -353.0431738884921 L 372.5974025974026 -353.0431738884921 L 372.5974025974026 -338.7574596027778 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -345.90031674563494 L 365.45454545454544 -353.0431738884921 L 372.5974025974026 -345.90031674563494 L 365.45454545454544 -338.7574596027778 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 380.12987012987014 -354.3209788823778 L 380.12987012987014 -368.6066931680921 L 394.4155844155844 -368.6066931680921 L 394.4155844155844 -354.3209788823778 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -361.46383602523497 L 387.27272727272725 -368.6066931680921 L 394.4155844155844 -361.46383602523497 L 387.27272727272725 -354.3209788823778 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 401.94805194805195 -371.68701642066213 L 401.94805194805195 -385.9727307063764 L 416.23376623376623 -385.9727307063764 L 416.23376623376623 -371.68701642066213 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.94805194805195 -378.8298735635193 L 409.0909090909091 -385.9727307063764 L 416.23376623376623 -378.8298735635193 L 409.0909090909091 -371.68701642066213 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 423.76623376623377 -390.533119925806 L 423.76623376623377 -404.81883421152025 L 438.05194805194805 -404.81883421152025 L 438.05194805194805 -390.533119925806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -397.67597706866314 L 430.9090909090909 -404.81883421152025 L 438.05194805194805 -397.67597706866314 L 430.9090909090909 -390.533119925806 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 445.5844155844156 -408.4839589090787 L 445.5844155844156 -422.769673194793 L 459.87012987012986 -422.769673194793 L 459.87012987012986 -408.4839589090787 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -415.6268160519358 L 452.72727272727275 -422.769673194793 L 459.87012987012986 -415.6268160519358 L 452.72727272727275 -408.4839589090787 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 467.4025974025974 -426.9646269544178 L 467.4025974025974 -441.2503412401321 L 481.68831168831167 -441.2503412401321 L 481.68831168831167 -426.9646269544178 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -434.10748409727495 L 474.5454545454545 -441.2503412401321 L 481.68831168831167 -434.10748409727495 L 474.5454545454545 -426.9646269544178 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 489.22077922077926 -445.21650517750095 L 489.22077922077926 -459.5022194632153 L 503.5064935064935 -459.5022194632153 L 503.5064935064935 -445.21650517750095 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 489.22077922077926 -452.3593623203581 L 496.3636363636364 -459.5022194632153 L 503.5064935064935 -452.3593623203581 L 496.3636363636364 -445.21650517750095 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 511.038961038961 -463.65790723503875 L 511.038961038961 -477.943621520753 L 525.3246753246754 -477.943621520753 L 525.3246753246754 -463.65790723503875 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -470.8007643778959 L 518.1818181818182 -477.943621520753 L 525.3246753246754 -470.8007643778959 L 518.1818181818182 -463.65790723503875 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 321.8181818181818 -300.19323002015653 L 343.6363636363636 -300.3478715216879 L 365.45454545454544 -300.42060521975867 L 387.27272727272725 -300.4688432239994 L 409.0909090909091 -300.4188372032146 L 430.9090909090909 -300.59743985759536 L 452.72727272727275 -300.8236067118662 L 474.5454545454545 -301.0907201382163 L 496.3636363636364 -300.9695295934661 L 518.1818181818182 -301.0470930080364" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 315.5681818181818 -295.19323002015653 L 315.5681818181818 -305.19323002015653 L 328.0681818181818 -305.19323002015653 L 328.0681818181818 -295.19323002015653 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -295.19323002015653 L 315.5681818181818 -305.19323002015653 L 328.0681818181818 -305.19323002015653 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 337.3863636363636 -295.3478715216879 L 337.3863636363636 -305.3478715216879 L 349.8863636363636 -305.3478715216879 L 349.8863636363636 -295.3478715216879 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.3478715216879 L 337.3863636363636 -305.3478715216879 L 349.8863636363636 -305.3478715216879 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 359.20454545454544 -295.42060521975867 L 359.20454545454544 -305.42060521975867 L 371.70454545454544 -305.42060521975867 L 371.70454545454544 -295.42060521975867 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -295.42060521975867 L 359.20454545454544 -305.42060521975867 L 371.70454545454544 -305.42060521975867 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 381.02272727272725 -295.4688432239994 L 381.02272727272725 -305.4688432239994 L 393.52272727272725 -305.4688432239994 L 393.52272727272725 -295.4688432239994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.4688432239994 L 381.02272727272725 -305.4688432239994 L 393.52272727272725 -305.4688432239994 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 402.8409090909091 -295.4188372032146 L 402.8409090909091 -305.4188372032146 L 415.3409090909091 -305.4188372032146 L 415.3409090909091 -295.4188372032146 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -295.4188372032146 L 402.8409090909091 -305.4188372032146 L 415.3409090909091 -305.4188372032146 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 424.6590909090909 -295.59743985759536 L 424.6590909090909 -305.59743985759536 L 437.1590909090909 -305.59743985759536 L 437.1590909090909 -295.59743985759536 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.59743985759536 L 424.6590909090909 -305.59743985759536 L 437.1590909090909 -305.59743985759536 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 446.47727272727275 -295.8236067118662 L 446.47727272727275 -305.8236067118662 L 458.97727272727275 -305.8236067118662 L 458.97727272727275 -295.8236067118662 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -295.8236067118662 L 446.47727272727275 -305.8236067118662 L 458.97727272727275 -305.8236067118662 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 468.2954545454545 -296.0907201382163 L 468.2954545454545 -306.0907201382163 L 480.7954545454545 -306.0907201382163 L 480.7954545454545 -296.0907201382163 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.0907201382163 L 468.2954545454545 -306.0907201382163 L 480.7954545454545 -306.0907201382163 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 490.1136363636364 -295.9695295934661 L 490.1136363636364 -305.9695295934661 L 502.6136363636364 -305.9695295934661 L 502.6136363636364 -295.9695295934661 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -295.9695295934661 L 490.1136363636364 -305.9695295934661 L 502.6136363636364 -305.9695295934661 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 511.9318181818182 -296.0470930080364 L 511.9318181818182 -306.0470930080364 L 524.4318181818182 -306.0470930080364 L 524.4318181818182 -296.0470930080364 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.0470930080364 L 511.9318181818182 -306.0470930080364 L 524.4318181818182 -306.0470930080364 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 321.8181818181818 -300.21830109159447 L 343.6363636363636 -300.24091987120755 L 365.45454545454544 -300.27278448208165 L 387.27272727272725 -300.27917332007013 L 409.0909090909091 -300.2803523467972 L 430.9090909090909 -300.301039763357 L 452.72727272727275 -300.31042276380197 L 474.5454545454545 -300.3170283500432 L 496.3636363636364 -300.28411298133557 L 518.1818181818182 -300.3279620952331" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 315.5681818181818 -295.21830109159447 L 315.5681818181818 -305.21830109159447 L 328.0681818181818 -305.21830109159447 L 328.0681818181818 -295.21830109159447 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -295.21830109159447 L 315.5681818181818 -305.21830109159447 L 328.0681818181818 -305.21830109159447 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 337.3863636363636 -295.24091987120755 L 337.3863636363636 -305.24091987120755 L 349.8863636363636 -305.24091987120755 L 349.8863636363636 -295.24091987120755 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.24091987120755 L 337.3863636363636 -305.24091987120755 L 349.8863636363636 -305.24091987120755 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip41);">
+ <path d="M 359.20454545454544 -295.27278448208165 L 359.20454545454544 -305.27278448208165 L 371.70454545454544 -305.27278448208165 L 371.70454545454544 -295.27278448208165 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -295.27278448208165 L 359.20454545454544 -305.27278448208165 L 371.70454545454544 -305.27278448208165 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip42);">
+ <path d="M 381.02272727272725 -295.27917332007013 L 381.02272727272725 -305.27917332007013 L 393.52272727272725 -305.27917332007013 L 393.52272727272725 -295.27917332007013 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.27917332007013 L 381.02272727272725 -305.27917332007013 L 393.52272727272725 -305.27917332007013 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip43);">
+ <path d="M 402.8409090909091 -295.2803523467972 L 402.8409090909091 -305.2803523467972 L 415.3409090909091 -305.2803523467972 L 415.3409090909091 -295.2803523467972 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -295.2803523467972 L 402.8409090909091 -305.2803523467972 L 415.3409090909091 -305.2803523467972 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip44);">
+ <path d="M 424.6590909090909 -295.301039763357 L 424.6590909090909 -305.301039763357 L 437.1590909090909 -305.301039763357 L 437.1590909090909 -295.301039763357 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.301039763357 L 424.6590909090909 -305.301039763357 L 437.1590909090909 -305.301039763357 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip45);">
+ <path d="M 446.47727272727275 -295.31042276380197 L 446.47727272727275 -305.31042276380197 L 458.97727272727275 -305.31042276380197 L 458.97727272727275 -295.31042276380197 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -295.31042276380197 L 446.47727272727275 -305.31042276380197 L 458.97727272727275 -305.31042276380197 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip46);">
+ <path d="M 468.2954545454545 -295.3170283500432 L 468.2954545454545 -305.3170283500432 L 480.7954545454545 -305.3170283500432 L 480.7954545454545 -295.3170283500432 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.3170283500432 L 468.2954545454545 -305.3170283500432 L 480.7954545454545 -305.3170283500432 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip47);">
+ <path d="M 490.1136363636364 -295.28411298133557 L 490.1136363636364 -305.28411298133557 L 502.6136363636364 -305.28411298133557 L 502.6136363636364 -295.28411298133557 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -295.28411298133557 L 490.1136363636364 -305.28411298133557 L 502.6136363636364 -305.28411298133557 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip48);">
+ <path d="M 511.9318181818182 -295.3279620952331 L 511.9318181818182 -305.3279620952331 L 524.4318181818182 -305.3279620952331 L 524.4318181818182 -295.3279620952331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.3279620952331 L 511.9318181818182 -305.3279620952331 L 524.4318181818182 -305.3279620952331 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 321.8181818181818 -300.1630899714667 L 343.6363636363636 -300.16635637810526 L 365.45454545454544 -300.18454961911993 L 387.27272727272725 -300.1713866129159 L 409.0909090909091 -300.20018952383447 L 430.9090909090909 -300.18787780424594 L 452.72727272727275 -300.19715138347163 L 474.5454545454545 -300.17971780843436 L 496.3636363636364 -300.21577236198004 L 518.1818181818182 -300.1964393602262" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 314.67532467532465 -293.02023282860955 L 314.67532467532465 -307.3059471143239 L 328.961038961039 -307.3059471143239 L 328.961038961039 -293.02023282860955 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 314.67532467532465 -300.1630899714667 L 321.8181818181818 -307.3059471143239 L 328.961038961039 -300.1630899714667 L 321.8181818181818 -293.02023282860955 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 336.4935064935065 -293.02349923524815 L 336.4935064935065 -307.30921352096243 L 350.7792207792208 -307.30921352096243 L 350.7792207792208 -293.02349923524815 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.16635637810526 L 343.6363636363636 -307.30921352096243 L 350.7792207792208 -300.16635637810526 L 343.6363636363636 -293.02349923524815 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 358.31168831168833 -293.04169247626277 L 358.31168831168833 -307.32740676197704 L 372.5974025974026 -307.32740676197704 L 372.5974025974026 -293.04169247626277 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -300.18454961911993 L 365.45454545454544 -307.32740676197704 L 372.5974025974026 -300.18454961911993 L 365.45454545454544 -293.04169247626277 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 380.12987012987014 -293.02852947005874 L 380.12987012987014 -307.314243755773 L 394.4155844155844 -307.314243755773 L 394.4155844155844 -293.02852947005874 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.1713866129159 L 387.27272727272725 -307.314243755773 L 394.4155844155844 -300.1713866129159 L 387.27272727272725 -293.02852947005874 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 401.94805194805195 -293.0573323809773 L 401.94805194805195 -307.3430466666916 L 416.23376623376623 -307.3430466666916 L 416.23376623376623 -293.0573323809773 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.94805194805195 -300.20018952383447 L 409.0909090909091 -307.3430466666916 L 416.23376623376623 -300.20018952383447 L 409.0909090909091 -293.0573323809773 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 423.76623376623377 -293.04502066138883 L 423.76623376623377 -307.3307349471031 L 438.05194805194805 -307.3307349471031 L 438.05194805194805 -293.04502066138883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.18787780424594 L 430.9090909090909 -307.3307349471031 L 438.05194805194805 -300.18787780424594 L 430.9090909090909 -293.04502066138883 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 445.5844155844156 -293.05429424061447 L 445.5844155844156 -307.3400085263288 L 459.87012987012986 -307.3400085263288 L 459.87012987012986 -293.05429424061447 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -300.19715138347163 L 452.72727272727275 -307.3400085263288 L 459.87012987012986 -300.19715138347163 L 452.72727272727275 -293.05429424061447 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 467.4025974025974 -293.0368606655772 L 467.4025974025974 -307.3225749512915 L 481.68831168831167 -307.3225749512915 L 481.68831168831167 -293.0368606655772 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.17971780843436 L 474.5454545454545 -307.3225749512915 L 481.68831168831167 -300.17971780843436 L 474.5454545454545 -293.0368606655772 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 489.22077922077926 -293.07291521912293 L 489.22077922077926 -307.3586295048372 L 503.5064935064935 -307.3586295048372 L 503.5064935064935 -293.07291521912293 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 489.22077922077926 -300.21577236198004 L 496.3636363636364 -307.3586295048372 L 503.5064935064935 -300.21577236198004 L 496.3636363636364 -293.07291521912293 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 511.038961038961 -293.053582217369 L 511.038961038961 -307.3392965030833 L 525.3246753246754 -307.3392965030833 L 525.3246753246754 -293.053582217369 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.1964393602262 L 518.1818181818182 -307.3392965030833 L 525.3246753246754 -300.1964393602262 L 518.1818181818182 -293.053582217369 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 321.8181818181818 -300.1218779613099 L 343.6363636363636 -300.12402973744145 L 365.45454545454544 -300.1222402554907 L 387.27272727272725 -300.12790293447813 L 409.0909090909091 -300.12224392031624 L 430.9090909090909 -300.1332085547499 L 452.72727272727275 -300.1205774717939 L 474.5454545454545 -300.1359205256407 L 496.3636363636364 -300.1614517944556 L 518.1818181818182 -300.11264364807204" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip63);">
+ <path d="M 315.5681818181818 -295.1218779613099 L 315.5681818181818 -305.1218779613099 L 328.0681818181818 -305.1218779613099 L 328.0681818181818 -295.1218779613099 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 315.5681818181818 -295.1218779613099 L 328.0681818181818 -295.1218779613099 L 321.8181818181818 -305.1218779613099 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip64);">
+ <path d="M 337.3863636363636 -295.12402973744145 L 337.3863636363636 -305.12402973744145 L 349.8863636363636 -305.12402973744145 L 349.8863636363636 -295.12402973744145 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -295.12402973744145 L 349.8863636363636 -295.12402973744145 L 343.6363636363636 -305.12402973744145 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 359.20454545454544 -295.1222402554907 L 359.20454545454544 -305.1222402554907 L 371.70454545454544 -305.1222402554907 L 371.70454545454544 -295.1222402554907 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 359.20454545454544 -295.1222402554907 L 371.70454545454544 -295.1222402554907 L 365.45454545454544 -305.1222402554907 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 381.02272727272725 -295.12790293447813 L 381.02272727272725 -305.12790293447813 L 393.52272727272725 -305.12790293447813 L 393.52272727272725 -295.12790293447813 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -295.12790293447813 L 393.52272727272725 -295.12790293447813 L 387.27272727272725 -305.12790293447813 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 402.8409090909091 -295.12224392031624 L 402.8409090909091 -305.12224392031624 L 415.3409090909091 -305.12224392031624 L 415.3409090909091 -295.12224392031624 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 402.8409090909091 -295.12224392031624 L 415.3409090909091 -295.12224392031624 L 409.0909090909091 -305.12224392031624 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 424.6590909090909 -295.1332085547499 L 424.6590909090909 -305.1332085547499 L 437.1590909090909 -305.1332085547499 L 437.1590909090909 -295.1332085547499 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -295.1332085547499 L 437.1590909090909 -295.1332085547499 L 430.9090909090909 -305.1332085547499 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 446.47727272727275 -295.1205774717939 L 446.47727272727275 -305.1205774717939 L 458.97727272727275 -305.1205774717939 L 458.97727272727275 -295.1205774717939 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.47727272727275 -295.1205774717939 L 458.97727272727275 -295.1205774717939 L 452.72727272727275 -305.1205774717939 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 468.2954545454545 -295.1359205256407 L 468.2954545454545 -305.1359205256407 L 480.7954545454545 -305.1359205256407 L 480.7954545454545 -295.1359205256407 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -295.1359205256407 L 480.7954545454545 -295.1359205256407 L 474.5454545454545 -305.1359205256407 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 490.1136363636364 -295.1614517944556 L 490.1136363636364 -305.1614517944556 L 502.6136363636364 -305.1614517944556 L 502.6136363636364 -295.1614517944556 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 490.1136363636364 -295.1614517944556 L 502.6136363636364 -295.1614517944556 L 496.3636363636364 -305.1614517944556 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 511.9318181818182 -295.11264364807204 L 511.9318181818182 -305.11264364807204 L 524.4318181818182 -305.11264364807204 L 524.4318181818182 -295.11264364807204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -295.11264364807204 L 524.4318181818182 -295.11264364807204 L 518.1818181818182 -305.11264364807204 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip73);">
+ <path d="M 321.8181818181818 -300.0736875998011 L 343.6363636363636 -300.0783372163032 L 365.45454545454544 -300.08038585377346 L 387.27272727272725 -300.075962409361 L 409.0909090909091 -300.0780173293893 L 430.9090909090909 -300.0806774691762 L 452.72727272727275 -300.07853197560274 L 474.5454545454545 -300.0749435878642 L 496.3636363636364 -300.0799099500013 L 518.1818181818182 -300.0811162011466" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip74);">
+ <path d="M 314.67532467532465 -300.0736875998011 L 328.961038961039 -300.0736875998011" style="stroke-width:1;"/>
+ <path d="M 321.8181818181818 -292.9308304569439 L 321.8181818181818 -307.2165447426582" style="stroke-width:1;"/>
+ <path d="M 336.4935064935065 -300.0783372163032 L 350.7792207792208 -300.0783372163032" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -292.9354800734461 L 343.6363636363636 -307.2211943591604" style="stroke-width:1;"/>
+ <path d="M 358.31168831168833 -300.08038585377346 L 372.5974025974026 -300.08038585377346" style="stroke-width:1;"/>
+ <path d="M 365.45454545454544 -292.9375287109163 L 365.45454545454544 -307.22324299663063" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -300.075962409361 L 394.4155844155844 -300.075962409361" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -292.93310526650384 L 387.27272727272725 -307.2188195522182" style="stroke-width:1;"/>
+ <path d="M 401.94805194805195 -300.0780173293893 L 416.23376623376623 -300.0780173293893" style="stroke-width:1;"/>
+ <path d="M 409.0909090909091 -292.93516018653213 L 409.0909090909091 -307.2208744722464" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -300.0806774691762 L 438.05194805194805 -300.0806774691762" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -292.93782032631907 L 430.9090909090909 -307.22353461203335" style="stroke-width:1;"/>
+ <path d="M 445.5844155844156 -300.07853197560274 L 459.87012987012986 -300.07853197560274" style="stroke-width:1;"/>
+ <path d="M 452.72727272727275 -292.9356748327456 L 452.72727272727275 -307.22138911845985" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -300.0749435878642 L 481.68831168831167 -300.0749435878642" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -292.93208644500703 L 474.5454545454545 -307.2178007307213" style="stroke-width:1;"/>
+ <path d="M 489.22077922077926 -300.0799099500013 L 503.5064935064935 -300.0799099500013" style="stroke-width:1;"/>
+ <path d="M 496.3636363636364 -292.93705280714414 L 496.3636363636364 -307.2227670928585" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -300.0811162011466 L 525.3246753246754 -300.0811162011466" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -292.9382590582894 L 518.1818181818182 -307.2239733440037" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip77);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ binary_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ thin_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 300.85714285714283 -38.190476190476204 L 300.85714285714283 -52.47619047619048 L 315.14285714285717 -52.47619047619048 L 315.14285714285717 -38.190476190476204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -45.33333333333334 L 308.0 -52.47619047619048 L 315.14285714285717 -45.33333333333334 L 308.0 -38.190476190476204 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 301.75 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 L 314.25 -20.333333333333314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -20.333333333333314 L 314.25 -20.333333333333314 L 308.0 -30.333333333333314 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -5.333333333333314 L 315.14285714285717 -5.333333333333314" style="stroke-width:1;"/>
+ <path d="M 308.0 1.8095238095238528 L 308.0 -12.476190476190482" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdf
new file mode 100644
index 0000000000..a1ad5e9766
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.png
new file mode 100644
index 0000000000..e8e76549e0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg
new file mode 100644
index 0000000000..35ad3eb142
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg
@@ -0,0 +1,821 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 556" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 321.8181818181818 -311.0586161194328 L 315.5681818181818 -321.0586161194328 L 328.0681818181818 -321.0586161194328 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 343.6363636363636 -330.8848683387932 L 337.3863636363636 -340.8848683387932 L 349.8863636363636 -340.8848683387932 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 365.45454545454544 -352.1757233239141 L 359.20454545454544 -362.1757233239141 L 371.70454545454544 -362.1757233239141 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 387.27272727272725 -374.12725999649905 L 381.02272727272725 -384.12725999649905 L 393.52272727272725 -384.12725999649905 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 409.0909090909091 -396.6339493360674 L 402.8409090909091 -406.6339493360674 L 415.3409090909091 -406.6339493360674 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 430.9090909090909 -419.9728675385731 L 424.6590909090909 -429.9728675385731 L 437.1590909090909 -429.9728675385731 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 452.72727272727275 -443.0742204106129 L 446.47727272727275 -453.0742204106129 L 458.97727272727275 -453.0742204106129 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 474.5454545454545 -466.44414714046366 L 468.2954545454545 -476.44414714046366 L 480.7954545454545 -476.44414714046366 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 496.3636363636364 -490.79434344444724 L 490.1136363636364 -500.79434344444724 L 502.6136363636364 -500.79434344444724 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 518.1818181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 314.67532467532465 -313.35602290629924 L 321.8181818181818 -320.49888004915636 L 328.961038961039 -313.35602290629924 L 321.8181818181818 -306.2131657634421 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 336.4935064935065 -328.7058941208832 L 343.6363636363636 -335.8487512637404 L 350.7792207792208 -328.7058941208832 L 343.6363636363636 -321.5630369780261 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 358.31168831168833 -346.0712695991398 L 365.45454545454544 -353.2141267419969 L 372.5974025974026 -346.0712695991398 L 365.45454545454544 -338.9284124562826 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 380.12987012987014 -362.8837930430868 L 387.27272727272725 -370.026650185944 L 394.4155844155844 -362.8837930430868 L 387.27272727272725 -355.7409359002297 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 401.94805194805195 -379.9734927104954 L 409.0909090909091 -387.1163498533525 L 416.23376623376623 -379.9734927104954 L 409.0909090909091 -372.83063556763824 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 423.76623376623377 -399.69891720223063 L 430.9090909090909 -406.84177434508774 L 438.05194805194805 -399.69891720223063 L 430.9090909090909 -392.55606005937346 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 445.5844155844156 -417.3637750381355 L 452.72727272727275 -424.5066321809926 L 459.87012987012986 -417.3637750381355 L 452.72727272727275 -410.2209178952784 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 467.4025974025974 -435.82185100902745 L 474.5454545454545 -442.96470815188457 L 481.68831168831167 -435.82185100902745 L 474.5454545454545 -428.67899386617034 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 489.22077922077926 -454.25341969041483 L 496.3636363636364 -461.396276833272 L 503.5064935064935 -454.25341969041483 L 496.3636363636364 -447.1105625475577 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 511.038961038961 -472.6664832829028 L 518.1818181818182 -479.80934042575996 L 525.3246753246754 -472.6664832829028 L 518.1818181818182 -465.5236261400456 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 321.8181818181818 -295.2079781940034 L 315.5681818181818 -305.2079781940034 L 328.0681818181818 -305.2079781940034 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 343.6363636363636 -295.3457170721949 L 337.3863636363636 -305.3457170721949 L 349.8863636363636 -305.3457170721949 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 365.45454545454544 -295.5782990322339 L 359.20454545454544 -305.5782990322339 L 371.70454545454544 -305.5782990322339 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 387.27272727272725 -295.6368951461652 L 381.02272727272725 -305.6368951461652 L 393.52272727272725 -305.6368951461652 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 409.0909090909091 -295.76336992672987 L 402.8409090909091 -305.76336992672987 L 415.3409090909091 -305.76336992672987 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 430.9090909090909 -295.9598589612143 L 424.6590909090909 -305.9598589612143 L 437.1590909090909 -305.9598589612143 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 452.72727272727275 -296.315516767111 L 446.47727272727275 -306.315516767111 L 458.97727272727275 -306.315516767111 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 474.5454545454545 -296.45873615244193 L 468.2954545454545 -306.45873615244193 L 480.7954545454545 -306.45873615244193 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 496.3636363636364 -296.48188751906775 L 490.1136363636364 -306.48188751906775 L 502.6136363636364 -306.48188751906775 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 518.1818181818182 -296.6671234589512 L 511.9318181818182 -306.6671234589512 L 524.4318181818182 -306.6671234589512 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 314.67532467532465 -300.08423016329493 L 321.8181818181818 -307.22708730615204 L 328.961038961039 -300.08423016329493 L 321.8181818181818 -292.94137302043777 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 336.4935064935065 -300.0888249268549 L 343.6363636363636 -307.231682069712 L 350.7792207792208 -300.0888249268549 L 343.6363636363636 -292.94596778399773 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 358.31168831168833 -300.09821951036537 L 365.45454545454544 -307.2410766532225 L 372.5974025974026 -300.09821951036537 L 365.45454545454544 -292.9553623675082 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 380.12987012987014 -300.08918002450673 L 387.27272727272725 -307.2320371673639 L 394.4155844155844 -300.08918002450673 L 387.27272727272725 -292.9463228816496 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 401.94805194805195 -300.1196469028983 L 409.0909090909091 -307.26250404575546 L 416.23376623376623 -300.1196469028983 L 409.0909090909091 -292.97678976004113 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 423.76623376623377 -300.09892670484385 L 430.9090909090909 -307.24178384770096 L 438.05194805194805 -300.09892670484385 L 430.9090909090909 -292.9560695619867 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 445.5844155844156 -300.11830803470957 L 452.72727272727275 -307.2611651775667 L 459.87012987012986 -300.11830803470957 L 452.72727272727275 -292.9754508918524 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 467.4025974025974 -300.08669734176897 L 474.5454545454545 -307.22955448462614 L 481.68831168831167 -300.08669734176897 L 474.5454545454545 -292.94384019891186 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 489.22077922077926 -300.10155592788016 L 496.3636363636364 -307.2444130707373 L 503.5064935064935 -300.10155592788016 L 496.3636363636364 -292.95869878502305 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 511.038961038961 -300.12103328415316 L 518.1818181818182 -307.26389042701027 L 525.3246753246754 -300.12103328415316 L 518.1818181818182 -292.978176141296 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 315.5681818181818 -295.04626822376156 L 328.0681818181818 -295.04626822376156 L 321.8181818181818 -305.04626822376156 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 337.3863636363636 -295.04270184300685 L 349.8863636363636 -295.04270184300685 L 343.6363636363636 -305.04270184300685 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 359.20454545454544 -295.04346135187177 L 371.70454545454544 -295.04346135187177 L 365.45454545454544 -305.04346135187177 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 381.02272727272725 -295.04446227712623 L 393.52272727272725 -295.04446227712623 L 387.27272727272725 -305.04446227712623 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 402.8409090909091 -295.0436216959664 L 415.3409090909091 -295.0436216959664 L 409.0909090909091 -305.0436216959664 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 424.6590909090909 -295.0465098902198 L 437.1590909090909 -295.0465098902198 L 430.9090909090909 -305.0465098902198 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 446.47727272727275 -295.0449975243192 L 458.97727272727275 -295.0449975243192 L 452.72727272727275 -305.0449975243192 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 468.2954545454545 -295.04351771737225 L 480.7954545454545 -295.04351771737225 L 474.5454545454545 -305.04351771737225 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 490.1136363636364 -295.04399979994497 L 502.6136363636364 -295.04399979994497 L 496.3636363636364 -305.04399979994497 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 511.9318181818182 -295.04344869839207 L 524.4318181818182 -295.04344869839207 L 518.1818181818182 -305.04344869839207 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 321.8181818181818 -295.0294106379254 L 315.5681818181818 -305.0294106379254 L 328.0681818181818 -305.0294106379254 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 343.6363636363636 -295.0278749656155 L 337.3863636363636 -305.0278749656155 L 349.8863636363636 -305.0278749656155 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 365.45454545454544 -295.029226687339 L 359.20454545454544 -305.029226687339 L 371.70454545454544 -305.029226687339 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 387.27272727272725 -295.0295659806447 L 381.02272727272725 -305.0295659806447 L 393.52272727272725 -305.0295659806447 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 409.0909090909091 -295.0301400885243 L 402.8409090909091 -305.0301400885243 L 415.3409090909091 -305.0301400885243 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 430.9090909090909 -295.02974152892045 L 424.6590909090909 -305.02974152892045 L 437.1590909090909 -305.02974152892045 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 452.72727272727275 -295.03020005501514 L 446.47727272727275 -305.03020005501514 L 458.97727272727275 -305.03020005501514 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 474.5454545454545 -295.02901457900924 L 468.2954545454545 -305.02901457900924 L 480.7954545454545 -305.02901457900924 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 496.3636363636364 -295.0321296356498 L 490.1136363636364 -305.0321296356498 L 502.6136363636364 -305.0321296356498 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 518.1818181818182 -295.02952271874767 L 511.9318181818182 -305.02952271874767 L 524.4318181818182 -305.02952271874767 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 300.85714285714283 -65.33333333333334 L 308.0 -72.47619047619048 L 315.14285714285717 -65.33333333333334 L 308.0 -58.190476190476204 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 301.75 -20.333333333333314 L 314.25 -20.333333333333314 L 308.0 -30.333333333333314 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 308.0 -0.3333333333333144 L 301.75 -10.333333333333314 L 314.25 -10.333333333333314 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.80e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.76e-04
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.64e-04
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.52e-04
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.40e-04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 321.8181818181818 -316.0586161194328 L 343.6363636363636 -335.8848683387932 L 365.45454545454544 -357.1757233239141 L 387.27272727272725 -379.12725999649905 L 409.0909090909091 -401.6339493360674 L 430.9090909090909 -424.9728675385731 L 452.72727272727275 -448.0742204106129 L 474.5454545454545 -471.44414714046366 L 496.3636363636364 -495.79434344444724 L 518.1818181818182 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 315.5681818181818 -311.0586161194328 L 315.5681818181818 -321.0586161194328 L 328.0681818181818 -321.0586161194328 L 328.0681818181818 -311.0586161194328 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -311.0586161194328 L 315.5681818181818 -321.0586161194328 L 328.0681818181818 -321.0586161194328 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 337.3863636363636 -330.8848683387932 L 337.3863636363636 -340.8848683387932 L 349.8863636363636 -340.8848683387932 L 349.8863636363636 -330.8848683387932 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -330.8848683387932 L 337.3863636363636 -340.8848683387932 L 349.8863636363636 -340.8848683387932 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 359.20454545454544 -352.1757233239141 L 359.20454545454544 -362.1757233239141 L 371.70454545454544 -362.1757233239141 L 371.70454545454544 -352.1757233239141 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -352.1757233239141 L 359.20454545454544 -362.1757233239141 L 371.70454545454544 -362.1757233239141 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 381.02272727272725 -374.12725999649905 L 381.02272727272725 -384.12725999649905 L 393.52272727272725 -384.12725999649905 L 393.52272727272725 -374.12725999649905 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -374.12725999649905 L 381.02272727272725 -384.12725999649905 L 393.52272727272725 -384.12725999649905 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 402.8409090909091 -396.6339493360674 L 402.8409090909091 -406.6339493360674 L 415.3409090909091 -406.6339493360674 L 415.3409090909091 -396.6339493360674 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -396.6339493360674 L 402.8409090909091 -406.6339493360674 L 415.3409090909091 -406.6339493360674 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 424.6590909090909 -419.9728675385731 L 424.6590909090909 -429.9728675385731 L 437.1590909090909 -429.9728675385731 L 437.1590909090909 -419.9728675385731 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -419.9728675385731 L 424.6590909090909 -429.9728675385731 L 437.1590909090909 -429.9728675385731 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 446.47727272727275 -443.0742204106129 L 446.47727272727275 -453.0742204106129 L 458.97727272727275 -453.0742204106129 L 458.97727272727275 -443.0742204106129 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -443.0742204106129 L 446.47727272727275 -453.0742204106129 L 458.97727272727275 -453.0742204106129 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 468.2954545454545 -466.44414714046366 L 468.2954545454545 -476.44414714046366 L 480.7954545454545 -476.44414714046366 L 480.7954545454545 -466.44414714046366 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -466.44414714046366 L 468.2954545454545 -476.44414714046366 L 480.7954545454545 -476.44414714046366 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 490.1136363636364 -490.79434344444724 L 490.1136363636364 -500.79434344444724 L 502.6136363636364 -500.79434344444724 L 502.6136363636364 -490.79434344444724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -490.79434344444724 L 490.1136363636364 -500.79434344444724 L 502.6136363636364 -500.79434344444724 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 511.9318181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 L 524.4318181818182 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -515.0 L 511.9318181818182 -525.0 L 524.4318181818182 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 321.8181818181818 -313.35602290629924 L 343.6363636363636 -328.7058941208832 L 365.45454545454544 -346.0712695991398 L 387.27272727272725 -362.8837930430868 L 409.0909090909091 -379.9734927104954 L 430.9090909090909 -399.69891720223063 L 452.72727272727275 -417.3637750381355 L 474.5454545454545 -435.82185100902745 L 496.3636363636364 -454.25341969041483 L 518.1818181818182 -472.6664832829028" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 314.67532467532465 -306.2131657634421 L 314.67532467532465 -320.49888004915636 L 328.961038961039 -320.49888004915636 L 328.961038961039 -306.2131657634421 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 314.67532467532465 -313.35602290629924 L 321.8181818181818 -320.49888004915636 L 328.961038961039 -313.35602290629924 L 321.8181818181818 -306.2131657634421 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 336.4935064935065 -321.5630369780261 L 336.4935064935065 -335.8487512637404 L 350.7792207792208 -335.8487512637404 L 350.7792207792208 -321.5630369780261 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -328.7058941208832 L 343.6363636363636 -335.8487512637404 L 350.7792207792208 -328.7058941208832 L 343.6363636363636 -321.5630369780261 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 358.31168831168833 -338.9284124562826 L 358.31168831168833 -353.2141267419969 L 372.5974025974026 -353.2141267419969 L 372.5974025974026 -338.9284124562826 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -346.0712695991398 L 365.45454545454544 -353.2141267419969 L 372.5974025974026 -346.0712695991398 L 365.45454545454544 -338.9284124562826 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 380.12987012987014 -355.7409359002297 L 380.12987012987014 -370.026650185944 L 394.4155844155844 -370.026650185944 L 394.4155844155844 -355.7409359002297 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -362.8837930430868 L 387.27272727272725 -370.026650185944 L 394.4155844155844 -362.8837930430868 L 387.27272727272725 -355.7409359002297 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 401.94805194805195 -372.83063556763824 L 401.94805194805195 -387.1163498533525 L 416.23376623376623 -387.1163498533525 L 416.23376623376623 -372.83063556763824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.94805194805195 -379.9734927104954 L 409.0909090909091 -387.1163498533525 L 416.23376623376623 -379.9734927104954 L 409.0909090909091 -372.83063556763824 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 423.76623376623377 -392.55606005937346 L 423.76623376623377 -406.84177434508774 L 438.05194805194805 -406.84177434508774 L 438.05194805194805 -392.55606005937346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -399.69891720223063 L 430.9090909090909 -406.84177434508774 L 438.05194805194805 -399.69891720223063 L 430.9090909090909 -392.55606005937346 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 445.5844155844156 -410.2209178952784 L 445.5844155844156 -424.5066321809926 L 459.87012987012986 -424.5066321809926 L 459.87012987012986 -410.2209178952784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -417.3637750381355 L 452.72727272727275 -424.5066321809926 L 459.87012987012986 -417.3637750381355 L 452.72727272727275 -410.2209178952784 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 467.4025974025974 -428.67899386617034 L 467.4025974025974 -442.96470815188457 L 481.68831168831167 -442.96470815188457 L 481.68831168831167 -428.67899386617034 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -435.82185100902745 L 474.5454545454545 -442.96470815188457 L 481.68831168831167 -435.82185100902745 L 474.5454545454545 -428.67899386617034 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 489.22077922077926 -447.1105625475577 L 489.22077922077926 -461.396276833272 L 503.5064935064935 -461.396276833272 L 503.5064935064935 -447.1105625475577 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 489.22077922077926 -454.25341969041483 L 496.3636363636364 -461.396276833272 L 503.5064935064935 -454.25341969041483 L 496.3636363636364 -447.1105625475577 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 511.038961038961 -465.5236261400456 L 511.038961038961 -479.80934042575996 L 525.3246753246754 -479.80934042575996 L 525.3246753246754 -465.5236261400456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -472.6664832829028 L 518.1818181818182 -479.80934042575996 L 525.3246753246754 -472.6664832829028 L 518.1818181818182 -465.5236261400456 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 321.8181818181818 -300.2079781940034 L 343.6363636363636 -300.3457170721949 L 365.45454545454544 -300.5782990322339 L 387.27272727272725 -300.6368951461652 L 409.0909090909091 -300.76336992672987 L 430.9090909090909 -300.9598589612143 L 452.72727272727275 -301.315516767111 L 474.5454545454545 -301.45873615244193 L 496.3636363636364 -301.48188751906775 L 518.1818181818182 -301.6671234589512" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 315.5681818181818 -295.2079781940034 L 315.5681818181818 -305.2079781940034 L 328.0681818181818 -305.2079781940034 L 328.0681818181818 -295.2079781940034 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -295.2079781940034 L 315.5681818181818 -305.2079781940034 L 328.0681818181818 -305.2079781940034 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 337.3863636363636 -295.3457170721949 L 337.3863636363636 -305.3457170721949 L 349.8863636363636 -305.3457170721949 L 349.8863636363636 -295.3457170721949 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.3457170721949 L 337.3863636363636 -305.3457170721949 L 349.8863636363636 -305.3457170721949 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 359.20454545454544 -295.5782990322339 L 359.20454545454544 -305.5782990322339 L 371.70454545454544 -305.5782990322339 L 371.70454545454544 -295.5782990322339 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -295.5782990322339 L 359.20454545454544 -305.5782990322339 L 371.70454545454544 -305.5782990322339 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 381.02272727272725 -295.6368951461652 L 381.02272727272725 -305.6368951461652 L 393.52272727272725 -305.6368951461652 L 393.52272727272725 -295.6368951461652 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.6368951461652 L 381.02272727272725 -305.6368951461652 L 393.52272727272725 -305.6368951461652 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 402.8409090909091 -295.76336992672987 L 402.8409090909091 -305.76336992672987 L 415.3409090909091 -305.76336992672987 L 415.3409090909091 -295.76336992672987 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -295.76336992672987 L 402.8409090909091 -305.76336992672987 L 415.3409090909091 -305.76336992672987 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 424.6590909090909 -295.9598589612143 L 424.6590909090909 -305.9598589612143 L 437.1590909090909 -305.9598589612143 L 437.1590909090909 -295.9598589612143 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.9598589612143 L 424.6590909090909 -305.9598589612143 L 437.1590909090909 -305.9598589612143 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 446.47727272727275 -296.315516767111 L 446.47727272727275 -306.315516767111 L 458.97727272727275 -306.315516767111 L 458.97727272727275 -296.315516767111 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -296.315516767111 L 446.47727272727275 -306.315516767111 L 458.97727272727275 -306.315516767111 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 468.2954545454545 -296.45873615244193 L 468.2954545454545 -306.45873615244193 L 480.7954545454545 -306.45873615244193 L 480.7954545454545 -296.45873615244193 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.45873615244193 L 468.2954545454545 -306.45873615244193 L 480.7954545454545 -306.45873615244193 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 490.1136363636364 -296.48188751906775 L 490.1136363636364 -306.48188751906775 L 502.6136363636364 -306.48188751906775 L 502.6136363636364 -296.48188751906775 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -296.48188751906775 L 490.1136363636364 -306.48188751906775 L 502.6136363636364 -306.48188751906775 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 511.9318181818182 -296.6671234589512 L 511.9318181818182 -306.6671234589512 L 524.4318181818182 -306.6671234589512 L 524.4318181818182 -296.6671234589512 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.6671234589512 L 511.9318181818182 -306.6671234589512 L 524.4318181818182 -306.6671234589512 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 321.8181818181818 -300.08423016329493 L 343.6363636363636 -300.0888249268549 L 365.45454545454544 -300.09821951036537 L 387.27272727272725 -300.08918002450673 L 409.0909090909091 -300.1196469028983 L 430.9090909090909 -300.09892670484385 L 452.72727272727275 -300.11830803470957 L 474.5454545454545 -300.08669734176897 L 496.3636363636364 -300.10155592788016 L 518.1818181818182 -300.12103328415316" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 314.67532467532465 -292.94137302043777 L 314.67532467532465 -307.22708730615204 L 328.961038961039 -307.22708730615204 L 328.961038961039 -292.94137302043777 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 314.67532467532465 -300.08423016329493 L 321.8181818181818 -307.22708730615204 L 328.961038961039 -300.08423016329493 L 321.8181818181818 -292.94137302043777 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 336.4935064935065 -292.94596778399773 L 336.4935064935065 -307.231682069712 L 350.7792207792208 -307.231682069712 L 350.7792207792208 -292.94596778399773 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.0888249268549 L 343.6363636363636 -307.231682069712 L 350.7792207792208 -300.0888249268549 L 343.6363636363636 -292.94596778399773 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 358.31168831168833 -292.9553623675082 L 358.31168831168833 -307.2410766532225 L 372.5974025974026 -307.2410766532225 L 372.5974025974026 -292.9553623675082 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 358.31168831168833 -300.09821951036537 L 365.45454545454544 -307.2410766532225 L 372.5974025974026 -300.09821951036537 L 365.45454545454544 -292.9553623675082 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 380.12987012987014 -292.9463228816496 L 380.12987012987014 -307.2320371673639 L 394.4155844155844 -307.2320371673639 L 394.4155844155844 -292.9463228816496 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.08918002450673 L 387.27272727272725 -307.2320371673639 L 394.4155844155844 -300.08918002450673 L 387.27272727272725 -292.9463228816496 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 401.94805194805195 -292.97678976004113 L 401.94805194805195 -307.26250404575546 L 416.23376623376623 -307.26250404575546 L 416.23376623376623 -292.97678976004113 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.94805194805195 -300.1196469028983 L 409.0909090909091 -307.26250404575546 L 416.23376623376623 -300.1196469028983 L 409.0909090909091 -292.97678976004113 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 423.76623376623377 -292.9560695619867 L 423.76623376623377 -307.24178384770096 L 438.05194805194805 -307.24178384770096 L 438.05194805194805 -292.9560695619867 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.09892670484385 L 430.9090909090909 -307.24178384770096 L 438.05194805194805 -300.09892670484385 L 430.9090909090909 -292.9560695619867 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 445.5844155844156 -292.9754508918524 L 445.5844155844156 -307.2611651775667 L 459.87012987012986 -307.2611651775667 L 459.87012987012986 -292.9754508918524 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.5844155844156 -300.11830803470957 L 452.72727272727275 -307.2611651775667 L 459.87012987012986 -300.11830803470957 L 452.72727272727275 -292.9754508918524 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 467.4025974025974 -292.94384019891186 L 467.4025974025974 -307.22955448462614 L 481.68831168831167 -307.22955448462614 L 481.68831168831167 -292.94384019891186 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.08669734176897 L 474.5454545454545 -307.22955448462614 L 481.68831168831167 -300.08669734176897 L 474.5454545454545 -292.94384019891186 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 489.22077922077926 -292.95869878502305 L 489.22077922077926 -307.2444130707373 L 503.5064935064935 -307.2444130707373 L 503.5064935064935 -292.95869878502305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 489.22077922077926 -300.10155592788016 L 496.3636363636364 -307.2444130707373 L 503.5064935064935 -300.10155592788016 L 496.3636363636364 -292.95869878502305 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 511.038961038961 -292.978176141296 L 511.038961038961 -307.26389042701027 L 525.3246753246754 -307.26389042701027 L 525.3246753246754 -292.978176141296 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.12103328415316 L 518.1818181818182 -307.26389042701027 L 525.3246753246754 -300.12103328415316 L 518.1818181818182 -292.978176141296 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 321.8181818181818 -300.0583655505264 L 343.6363636363636 -300.05584835829853 L 365.45454545454544 -300.0547305509015 L 387.27272727272725 -300.05283803045836 L 409.0909090909091 -300.06815024131635 L 430.9090909090909 -300.063946585311 L 452.72727272727275 -300.06464827827654 L 474.5454545454545 -300.0617399784941 L 496.3636363636364 -300.06179499362327 L 518.1818181818182 -300.06126384755805" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 314.67532467532465 -300.0583655505264 L 328.961038961039 -300.0583655505264" style="stroke-width:1;"/>
+ <path d="M 321.8181818181818 -292.9155084076693 L 321.8181818181818 -307.20122269338356" style="stroke-width:1;"/>
+ <path d="M 336.4935064935065 -300.05584835829853 L 350.7792207792208 -300.05584835829853" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -292.91299121544137 L 343.6363636363636 -307.1987055011557" style="stroke-width:1;"/>
+ <path d="M 358.31168831168833 -300.0547305509015 L 372.5974025974026 -300.0547305509015" style="stroke-width:1;"/>
+ <path d="M 365.45454545454544 -292.91187340804436 L 365.45454545454544 -307.19758769375863" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -300.05283803045836 L 394.4155844155844 -300.05283803045836" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -292.90998088760125 L 387.27272727272725 -307.1956951733155" style="stroke-width:1;"/>
+ <path d="M 401.94805194805195 -300.06815024131635 L 416.23376623376623 -300.06815024131635" style="stroke-width:1;"/>
+ <path d="M 409.0909090909091 -292.92529309845924 L 409.0909090909091 -307.2110073841735" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -300.063946585311 L 438.05194805194805 -300.063946585311" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -292.9210894424538 L 430.9090909090909 -307.2068037281681" style="stroke-width:1;"/>
+ <path d="M 445.5844155844156 -300.06464827827654 L 459.87012987012986 -300.06464827827654" style="stroke-width:1;"/>
+ <path d="M 452.72727272727275 -292.92179113541937 L 452.72727272727275 -307.20750542113365" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -300.0617399784941 L 481.68831168831167 -300.0617399784941" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -292.91888283563696 L 474.5454545454545 -307.20459712135124" style="stroke-width:1;"/>
+ <path d="M 489.22077922077926 -300.06179499362327 L 503.5064935064935 -300.06179499362327" style="stroke-width:1;"/>
+ <path d="M 496.3636363636364 -292.9189378507661 L 496.3636363636364 -307.2046521364804" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -300.06126384755805 L 525.3246753246754 -300.06126384755805" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -292.91840670470094 L 518.1818181818182 -307.2041209904152" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 321.8181818181818 -300.04626822376156 L 343.6363636363636 -300.04270184300685 L 365.45454545454544 -300.04346135187177 L 387.27272727272725 -300.04446227712623 L 409.0909090909091 -300.0436216959664 L 430.9090909090909 -300.0465098902198 L 452.72727272727275 -300.0449975243192 L 474.5454545454545 -300.04351771737225 L 496.3636363636364 -300.04399979994497 L 518.1818181818182 -300.04344869839207" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 315.5681818181818 -295.04626822376156 L 315.5681818181818 -305.04626822376156 L 328.0681818181818 -305.04626822376156 L 328.0681818181818 -295.04626822376156 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 315.5681818181818 -295.04626822376156 L 328.0681818181818 -295.04626822376156 L 321.8181818181818 -305.04626822376156 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 337.3863636363636 -295.04270184300685 L 337.3863636363636 -305.04270184300685 L 349.8863636363636 -305.04270184300685 L 349.8863636363636 -295.04270184300685 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -295.04270184300685 L 349.8863636363636 -295.04270184300685 L 343.6363636363636 -305.04270184300685 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 359.20454545454544 -295.04346135187177 L 359.20454545454544 -305.04346135187177 L 371.70454545454544 -305.04346135187177 L 371.70454545454544 -295.04346135187177 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 359.20454545454544 -295.04346135187177 L 371.70454545454544 -295.04346135187177 L 365.45454545454544 -305.04346135187177 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 381.02272727272725 -295.04446227712623 L 381.02272727272725 -305.04446227712623 L 393.52272727272725 -305.04446227712623 L 393.52272727272725 -295.04446227712623 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -295.04446227712623 L 393.52272727272725 -295.04446227712623 L 387.27272727272725 -305.04446227712623 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 402.8409090909091 -295.0436216959664 L 402.8409090909091 -305.0436216959664 L 415.3409090909091 -305.0436216959664 L 415.3409090909091 -295.0436216959664 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 402.8409090909091 -295.0436216959664 L 415.3409090909091 -295.0436216959664 L 409.0909090909091 -305.0436216959664 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 424.6590909090909 -295.0465098902198 L 424.6590909090909 -305.0465098902198 L 437.1590909090909 -305.0465098902198 L 437.1590909090909 -295.0465098902198 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -295.0465098902198 L 437.1590909090909 -295.0465098902198 L 430.9090909090909 -305.0465098902198 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 446.47727272727275 -295.0449975243192 L 446.47727272727275 -305.0449975243192 L 458.97727272727275 -305.0449975243192 L 458.97727272727275 -295.0449975243192 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.47727272727275 -295.0449975243192 L 458.97727272727275 -295.0449975243192 L 452.72727272727275 -305.0449975243192 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 468.2954545454545 -295.04351771737225 L 468.2954545454545 -305.04351771737225 L 480.7954545454545 -305.04351771737225 L 480.7954545454545 -295.04351771737225 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -295.04351771737225 L 480.7954545454545 -295.04351771737225 L 474.5454545454545 -305.04351771737225 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip61);">
+ <path d="M 490.1136363636364 -295.04399979994497 L 490.1136363636364 -305.04399979994497 L 502.6136363636364 -305.04399979994497 L 502.6136363636364 -295.04399979994497 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 490.1136363636364 -295.04399979994497 L 502.6136363636364 -295.04399979994497 L 496.3636363636364 -305.04399979994497 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip62);">
+ <path d="M 511.9318181818182 -295.04344869839207 L 511.9318181818182 -305.04344869839207 L 524.4318181818182 -305.04344869839207 L 524.4318181818182 -295.04344869839207 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -295.04344869839207 L 524.4318181818182 -295.04344869839207 L 518.1818181818182 -305.04344869839207 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 321.8181818181818 -300.0294106379254 L 343.6363636363636 -300.0278749656155 L 365.45454545454544 -300.029226687339 L 387.27272727272725 -300.0295659806447 L 409.0909090909091 -300.0301400885243 L 430.9090909090909 -300.02974152892045 L 452.72727272727275 -300.03020005501514 L 474.5454545454545 -300.02901457900924 L 496.3636363636364 -300.0321296356498 L 518.1818181818182 -300.02952271874767" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip65);">
+ <path d="M 315.5681818181818 -295.0294106379254 L 315.5681818181818 -305.0294106379254 L 328.0681818181818 -305.0294106379254 L 328.0681818181818 -295.0294106379254 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 321.8181818181818 -295.0294106379254 L 315.5681818181818 -305.0294106379254 L 328.0681818181818 -305.0294106379254 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip66);">
+ <path d="M 337.3863636363636 -295.0278749656155 L 337.3863636363636 -305.0278749656155 L 349.8863636363636 -305.0278749656155 L 349.8863636363636 -295.0278749656155 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.0278749656155 L 337.3863636363636 -305.0278749656155 L 349.8863636363636 -305.0278749656155 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip67);">
+ <path d="M 359.20454545454544 -295.029226687339 L 359.20454545454544 -305.029226687339 L 371.70454545454544 -305.029226687339 L 371.70454545454544 -295.029226687339 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 365.45454545454544 -295.029226687339 L 359.20454545454544 -305.029226687339 L 371.70454545454544 -305.029226687339 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip68);">
+ <path d="M 381.02272727272725 -295.0295659806447 L 381.02272727272725 -305.0295659806447 L 393.52272727272725 -305.0295659806447 L 393.52272727272725 -295.0295659806447 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.0295659806447 L 381.02272727272725 -305.0295659806447 L 393.52272727272725 -305.0295659806447 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip69);">
+ <path d="M 402.8409090909091 -295.0301400885243 L 402.8409090909091 -305.0301400885243 L 415.3409090909091 -305.0301400885243 L 415.3409090909091 -295.0301400885243 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 409.0909090909091 -295.0301400885243 L 402.8409090909091 -305.0301400885243 L 415.3409090909091 -305.0301400885243 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip70);">
+ <path d="M 424.6590909090909 -295.02974152892045 L 424.6590909090909 -305.02974152892045 L 437.1590909090909 -305.02974152892045 L 437.1590909090909 -295.02974152892045 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.02974152892045 L 424.6590909090909 -305.02974152892045 L 437.1590909090909 -305.02974152892045 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip71);">
+ <path d="M 446.47727272727275 -295.03020005501514 L 446.47727272727275 -305.03020005501514 L 458.97727272727275 -305.03020005501514 L 458.97727272727275 -295.03020005501514 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 452.72727272727275 -295.03020005501514 L 446.47727272727275 -305.03020005501514 L 458.97727272727275 -305.03020005501514 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip72);">
+ <path d="M 468.2954545454545 -295.02901457900924 L 468.2954545454545 -305.02901457900924 L 480.7954545454545 -305.02901457900924 L 480.7954545454545 -295.02901457900924 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.02901457900924 L 468.2954545454545 -305.02901457900924 L 480.7954545454545 -305.02901457900924 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip73);">
+ <path d="M 490.1136363636364 -295.0321296356498 L 490.1136363636364 -305.0321296356498 L 502.6136363636364 -305.0321296356498 L 502.6136363636364 -295.0321296356498 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 496.3636363636364 -295.0321296356498 L 490.1136363636364 -305.0321296356498 L 502.6136363636364 -305.0321296356498 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip74);">
+ <path d="M 511.9318181818182 -295.02952271874767 L 511.9318181818182 -305.02952271874767 L 524.4318181818182 -305.02952271874767 L 524.4318181818182 -295.02952271874767 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.02952271874767 L 511.9318181818182 -305.02952271874767 L 524.4318181818182 -305.02952271874767 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip77);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ binary_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 300.85714285714283 -58.190476190476204 L 300.85714285714283 -72.47619047619048 L 315.14285714285717 -72.47619047619048 L 315.14285714285717 -58.190476190476204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -65.33333333333334 L 308.0 -72.47619047619048 L 315.14285714285717 -65.33333333333334 L 308.0 -58.190476190476204 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -45.33333333333334 L 315.14285714285717 -45.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -38.190476190476204 L 308.0 -52.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 301.75 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 L 314.25 -20.333333333333314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -20.333333333333314 L 314.25 -20.333333333333314 L 308.0 -30.333333333333314 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip81);">
+ <path d="M 301.75 -0.3333333333333144 L 301.75 -10.333333333333314 L 314.25 -10.333333333333314 L 314.25 -0.3333333333333144 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -0.3333333333333144 L 301.75 -10.333333333333314 L 314.25 -10.333333333333314 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ thin_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdf
new file mode 100644
index 0000000000..a32ebd1d9d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.png
new file mode 100644
index 0000000000..741aa8b94e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg
new file mode 100644
index 0000000000..86aaff031e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg
@@ -0,0 +1,831 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -526 620 538" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 336.4935064935065 -318.0224 L 343.6363636363636 -325.1652571428572 L 350.7792207792208 -318.0224 L 343.6363636363636 -310.87954285714284 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 380.12987012987014 -336.0448 L 387.27272727272725 -343.1876571428571 L 394.4155844155844 -336.0448 L 387.27272727272725 -328.90194285714284 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 423.76623376623377 -372.0896 L 430.9090909090909 -379.23245714285713 L 438.05194805194805 -372.0896 L 430.9090909090909 -364.94674285714285 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 467.4025974025974 -372.0896 L 474.5454545454545 -379.23245714285713 L 481.68831168831167 -372.0896 L 474.5454545454545 -364.94674285714285 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.038961038961 -372.0896 L 518.1818181818182 -379.23245714285713 L 525.3246753246754 -372.0896 L 518.1818181818182 -364.94674285714285 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 554.6753246753246 -444.17920000000004 L 561.8181818181818 -451.32205714285715 L 568.961038961039 -444.17920000000004 L 561.8181818181818 -437.03634285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 598.3116883116883 -444.17920000000004 L 605.4545454545455 -451.32205714285715 L 612.5974025974026 -444.17920000000004 L 605.4545454545455 -437.03634285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 641.9480519480519 -444.17920000000004 L 649.090909090909 -451.32205714285715 L 656.2337662337662 -444.17920000000004 L 649.090909090909 -437.03634285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 685.5844155844156 -444.17920000000004 L 692.7272727272727 -451.32205714285715 L 699.8701298701299 -444.17920000000004 L 692.7272727272727 -437.03634285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 729.2207792207791 -444.17920000000004 L 736.3636363636364 -451.32205714285715 L 743.5064935064936 -444.17920000000004 L 736.3636363636364 -437.03634285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -300.0688 L 337.3863636363636 -310.0688 L 349.8863636363636 -310.0688 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -300.7728 L 381.02272727272725 -310.7728 L 393.52272727272725 -310.7728 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -300.7728 L 424.6590909090909 -310.7728 L 437.1590909090909 -310.7728 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -302.1808 L 468.2954545454545 -312.1808 L 480.7954545454545 -312.1808 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -302.1808 L 511.9318181818182 -312.1808 L 524.4318181818182 -312.1808 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -302.1808 L 555.5681818181818 -312.1808 L 568.0681818181818 -312.1808 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -302.1808 L 599.2045454545455 -312.1808 L 611.7045454545455 -312.1808 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -302.1808 L 642.840909090909 -312.1808 L 655.340909090909 -312.1808 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -304.9968 L 686.4772727272727 -314.9968 L 698.9772727272727 -314.9968 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -304.9968 L 730.1136363636364 -314.9968 L 742.6136363636364 -314.9968 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -296.1968 L 337.3863636363636 -306.1968 L 349.8863636363636 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -296.1968 L 381.02272727272725 -306.1968 L 393.52272727272725 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -296.1968 L 424.6590909090909 -306.1968 L 437.1590909090909 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -296.1968 L 468.2954545454545 -306.1968 L 480.7954545454545 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -296.1968 L 511.9318181818182 -306.1968 L 524.4318181818182 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -296.1968 L 555.5681818181818 -306.1968 L 568.0681818181818 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -296.1968 L 599.2045454545455 -306.1968 L 611.7045454545455 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -296.1968 L 642.840909090909 -306.1968 L 655.340909090909 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -296.1968 L 686.4772727272727 -306.1968 L 698.9772727272727 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -296.1968 L 730.1136363636364 -306.1968 L 742.6136363636364 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 343.6363636363636 -295.352 L 337.3863636363636 -305.352 L 349.8863636363636 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 387.27272727272725 -295.352 L 381.02272727272725 -305.352 L 393.52272727272725 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 430.9090909090909 -295.352 L 424.6590909090909 -305.352 L 437.1590909090909 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 474.5454545454545 -295.352 L 468.2954545454545 -305.352 L 480.7954545454545 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 518.1818181818182 -295.352 L 511.9318181818182 -305.352 L 524.4318181818182 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 561.8181818181818 -295.352 L 555.5681818181818 -305.352 L 568.0681818181818 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 605.4545454545455 -295.352 L 599.2045454545455 -305.352 L 611.7045454545455 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 649.090909090909 -295.352 L 642.840909090909 -305.352 L 655.340909090909 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 692.7272727272727 -295.352 L 686.4772727272727 -305.352 L 698.9772727272727 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 736.3636363636364 -295.352 L 730.1136363636364 -305.352 L 742.6136363636364 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 337.3863636363636 -295.352 L 349.8863636363636 -295.352 L 343.6363636363636 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 381.02272727272725 -295.352 L 393.52272727272725 -295.352 L 387.27272727272725 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 424.6590909090909 -295.352 L 437.1590909090909 -295.352 L 430.9090909090909 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 468.2954545454545 -295.352 L 480.7954545454545 -295.352 L 474.5454545454545 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 511.9318181818182 -295.352 L 524.4318181818182 -295.352 L 518.1818181818182 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 555.5681818181818 -295.352 L 568.0681818181818 -295.352 L 561.8181818181818 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 599.2045454545455 -295.352 L 611.7045454545455 -295.352 L 605.4545454545455 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 642.840909090909 -295.352 L 655.340909090909 -295.352 L 649.090909090909 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 686.4772727272727 -295.352 L 698.9772727272727 -295.352 L 692.7272727272727 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 730.1136363636364 -295.352 L 742.6136363636364 -295.352 L 736.3636363636364 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 336.4935064935065 -300.352 L 343.6363636363636 -307.49485714285714 L 350.7792207792208 -300.352 L 343.6363636363636 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 380.12987012987014 -300.352 L 387.27272727272725 -307.49485714285714 L 394.4155844155844 -300.352 L 387.27272727272725 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 423.76623376623377 -300.352 L 430.9090909090909 -307.49485714285714 L 438.05194805194805 -300.352 L 430.9090909090909 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 467.4025974025974 -300.352 L 474.5454545454545 -307.49485714285714 L 481.68831168831167 -300.352 L 474.5454545454545 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 511.038961038961 -300.352 L 518.1818181818182 -307.49485714285714 L 525.3246753246754 -300.352 L 518.1818181818182 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 554.6753246753246 -300.352 L 561.8181818181818 -307.49485714285714 L 568.961038961039 -300.352 L 561.8181818181818 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 598.3116883116883 -300.352 L 605.4545454545455 -307.49485714285714 L 612.5974025974026 -300.352 L 605.4545454545455 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 641.9480519480519 -300.352 L 649.090909090909 -307.49485714285714 L 656.2337662337662 -300.352 L 649.090909090909 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 685.5844155844156 -300.352 L 692.7272727272727 -307.49485714285714 L 699.8701298701299 -300.352 L 692.7272727272727 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 729.2207792207791 -300.352 L 736.3636363636364 -307.49485714285714 L 743.5064935064936 -300.352 L 736.3636363636364 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 300.85714285714283 -125.33333333333334 L 308.0 -132.47619047619048 L 315.14285714285717 -125.33333333333334 L 308.0 -118.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 301.75 -40.33333333333337 L 314.25 -40.33333333333337 L 308.0 -50.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 300.85714285714283 -25.333333333333314 L 308.0 -32.47619047619048 L 315.14285714285717 -25.333333333333314 L 308.0 -18.190476190476147 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -328.83584 L 288 -328.83584"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-322.83584">
+ 3.28e+03
+ </text>
+ <path d="M 300 -357.67168 L 288 -357.67168"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-351.67168">
+ 6.55e+03
+ </text>
+ <path d="M 300 -386.50752 L 288 -386.50752"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-380.50752">
+ 9.83e+03
+ </text>
+ <path d="M 300 -415.34336 L 288 -415.34336"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-409.34336">
+ 1.31e+04
+ </text>
+ <path d="M 300 -444.17920000000004 L 288 -444.17920000000004"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-438.17920000000004">
+ 1.64e+04
+ </text>
+ <path d="M 300 -473.01504 L 288 -473.01504"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-467.01504">
+ 1.97e+04
+ </text>
+ <path d="M 300 -501.85087999999996 L 288 -501.85087999999996"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-495.85087999999996">
+ 2.29e+04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-354.44)" x="200.0" y="-354.44">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -318.0224 L 387.27272727272725 -336.0448 L 430.9090909090909 -372.0896 L 474.5454545454545 -372.0896 L 518.1818181818182 -372.0896 L 561.8181818181818 -444.17920000000004 L 605.4545454545455 -444.17920000000004 L 649.090909090909 -444.17920000000004 L 692.7272727272727 -444.17920000000004 L 736.3636363636364 -444.17920000000004" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 336.4935064935065 -310.87954285714284 L 336.4935064935065 -325.1652571428572 L 350.7792207792208 -325.1652571428572 L 350.7792207792208 -310.87954285714284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -318.0224 L 343.6363636363636 -325.1652571428572 L 350.7792207792208 -318.0224 L 343.6363636363636 -310.87954285714284 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 380.12987012987014 -328.90194285714284 L 380.12987012987014 -343.1876571428571 L 394.4155844155844 -343.1876571428571 L 394.4155844155844 -328.90194285714284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -336.0448 L 387.27272727272725 -343.1876571428571 L 394.4155844155844 -336.0448 L 387.27272727272725 -328.90194285714284 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 423.76623376623377 -364.94674285714285 L 423.76623376623377 -379.23245714285713 L 438.05194805194805 -379.23245714285713 L 438.05194805194805 -364.94674285714285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -372.0896 L 430.9090909090909 -379.23245714285713 L 438.05194805194805 -372.0896 L 430.9090909090909 -364.94674285714285 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 467.4025974025974 -364.94674285714285 L 467.4025974025974 -379.23245714285713 L 481.68831168831167 -379.23245714285713 L 481.68831168831167 -364.94674285714285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -372.0896 L 474.5454545454545 -379.23245714285713 L 481.68831168831167 -372.0896 L 474.5454545454545 -364.94674285714285 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.038961038961 -364.94674285714285 L 511.038961038961 -379.23245714285713 L 525.3246753246754 -379.23245714285713 L 525.3246753246754 -364.94674285714285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -372.0896 L 518.1818181818182 -379.23245714285713 L 525.3246753246754 -372.0896 L 518.1818181818182 -364.94674285714285 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 554.6753246753246 -437.03634285714287 L 554.6753246753246 -451.32205714285715 L 568.961038961039 -451.32205714285715 L 568.961038961039 -437.03634285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -444.17920000000004 L 561.8181818181818 -451.32205714285715 L 568.961038961039 -444.17920000000004 L 561.8181818181818 -437.03634285714287 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 598.3116883116883 -437.03634285714287 L 598.3116883116883 -451.32205714285715 L 612.5974025974026 -451.32205714285715 L 612.5974025974026 -437.03634285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -444.17920000000004 L 605.4545454545455 -451.32205714285715 L 612.5974025974026 -444.17920000000004 L 605.4545454545455 -437.03634285714287 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 641.9480519480519 -437.03634285714287 L 641.9480519480519 -451.32205714285715 L 656.2337662337662 -451.32205714285715 L 656.2337662337662 -437.03634285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -444.17920000000004 L 649.090909090909 -451.32205714285715 L 656.2337662337662 -444.17920000000004 L 649.090909090909 -437.03634285714287 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 685.5844155844156 -437.03634285714287 L 685.5844155844156 -451.32205714285715 L 699.8701298701299 -451.32205714285715 L 699.8701298701299 -437.03634285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -444.17920000000004 L 692.7272727272727 -451.32205714285715 L 699.8701298701299 -444.17920000000004 L 692.7272727272727 -437.03634285714287 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 729.2207792207791 -437.03634285714287 L 729.2207792207791 -451.32205714285715 L 743.5064935064936 -451.32205714285715 L 743.5064935064936 -437.03634285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -444.17920000000004 L 736.3636363636364 -451.32205714285715 L 743.5064935064936 -444.17920000000004 L 736.3636363636364 -437.03634285714287 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -305.0688 L 387.27272727272725 -305.7728 L 430.9090909090909 -305.7728 L 474.5454545454545 -307.1808 L 518.1818181818182 -307.1808 L 561.8181818181818 -307.1808 L 605.4545454545455 -307.1808 L 649.090909090909 -307.1808 L 692.7272727272727 -309.9968 L 736.3636363636364 -309.9968" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -300.0688 L 337.3863636363636 -310.0688 L 349.8863636363636 -310.0688 L 349.8863636363636 -300.0688 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -300.0688 L 337.3863636363636 -310.0688 L 349.8863636363636 -310.0688 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -300.7728 L 381.02272727272725 -310.7728 L 393.52272727272725 -310.7728 L 393.52272727272725 -300.7728 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -300.7728 L 381.02272727272725 -310.7728 L 393.52272727272725 -310.7728 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -300.7728 L 424.6590909090909 -310.7728 L 437.1590909090909 -310.7728 L 437.1590909090909 -300.7728 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -300.7728 L 424.6590909090909 -310.7728 L 437.1590909090909 -310.7728 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -302.1808 L 468.2954545454545 -312.1808 L 480.7954545454545 -312.1808 L 480.7954545454545 -302.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -302.1808 L 468.2954545454545 -312.1808 L 480.7954545454545 -312.1808 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -302.1808 L 511.9318181818182 -312.1808 L 524.4318181818182 -312.1808 L 524.4318181818182 -302.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -302.1808 L 511.9318181818182 -312.1808 L 524.4318181818182 -312.1808 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -302.1808 L 555.5681818181818 -312.1808 L 568.0681818181818 -312.1808 L 568.0681818181818 -302.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -302.1808 L 555.5681818181818 -312.1808 L 568.0681818181818 -312.1808 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -302.1808 L 599.2045454545455 -312.1808 L 611.7045454545455 -312.1808 L 611.7045454545455 -302.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -302.1808 L 599.2045454545455 -312.1808 L 611.7045454545455 -312.1808 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -302.1808 L 642.840909090909 -312.1808 L 655.340909090909 -312.1808 L 655.340909090909 -302.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -302.1808 L 642.840909090909 -312.1808 L 655.340909090909 -312.1808 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -304.9968 L 686.4772727272727 -314.9968 L 698.9772727272727 -314.9968 L 698.9772727272727 -304.9968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -304.9968 L 686.4772727272727 -314.9968 L 698.9772727272727 -314.9968 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -304.9968 L 730.1136363636364 -314.9968 L 742.6136363636364 -314.9968 L 742.6136363636364 -304.9968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -304.9968 L 730.1136363636364 -314.9968 L 742.6136363636364 -314.9968 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -301.1968 L 387.27272727272725 -301.1968 L 430.9090909090909 -301.1968 L 474.5454545454545 -301.1968 L 518.1818181818182 -301.1968 L 561.8181818181818 -301.1968 L 605.4545454545455 -301.1968 L 649.090909090909 -301.1968 L 692.7272727272727 -301.1968 L 736.3636363636364 -301.1968" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -296.1968 L 337.3863636363636 -306.1968 L 349.8863636363636 -306.1968 L 349.8863636363636 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.1968 L 337.3863636363636 -306.1968 L 349.8863636363636 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -296.1968 L 381.02272727272725 -306.1968 L 393.52272727272725 -306.1968 L 393.52272727272725 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -296.1968 L 381.02272727272725 -306.1968 L 393.52272727272725 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -296.1968 L 424.6590909090909 -306.1968 L 437.1590909090909 -306.1968 L 437.1590909090909 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -296.1968 L 424.6590909090909 -306.1968 L 437.1590909090909 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -296.1968 L 468.2954545454545 -306.1968 L 480.7954545454545 -306.1968 L 480.7954545454545 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.1968 L 468.2954545454545 -306.1968 L 480.7954545454545 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -296.1968 L 511.9318181818182 -306.1968 L 524.4318181818182 -306.1968 L 524.4318181818182 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.1968 L 511.9318181818182 -306.1968 L 524.4318181818182 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -296.1968 L 555.5681818181818 -306.1968 L 568.0681818181818 -306.1968 L 568.0681818181818 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -296.1968 L 555.5681818181818 -306.1968 L 568.0681818181818 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -296.1968 L 599.2045454545455 -306.1968 L 611.7045454545455 -306.1968 L 611.7045454545455 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -296.1968 L 599.2045454545455 -306.1968 L 611.7045454545455 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -296.1968 L 642.840909090909 -306.1968 L 655.340909090909 -306.1968 L 655.340909090909 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -296.1968 L 642.840909090909 -306.1968 L 655.340909090909 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -296.1968 L 686.4772727272727 -306.1968 L 698.9772727272727 -306.1968 L 698.9772727272727 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -296.1968 L 686.4772727272727 -306.1968 L 698.9772727272727 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -296.1968 L 730.1136363636364 -306.1968 L 742.6136363636364 -306.1968 L 742.6136363636364 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.1968 L 730.1136363636364 -306.1968 L 742.6136363636364 -306.1968 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -300.352 L 387.27272727272725 -300.352 L 430.9090909090909 -300.352 L 474.5454545454545 -300.352 L 518.1818181818182 -300.352 L 561.8181818181818 -300.352 L 605.4545454545455 -300.352 L 649.090909090909 -300.352 L 692.7272727272727 -300.352 L 736.3636363636364 -300.352" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -295.352 L 337.3863636363636 -305.352 L 349.8863636363636 -305.352 L 349.8863636363636 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.352 L 337.3863636363636 -305.352 L 349.8863636363636 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -295.352 L 381.02272727272725 -305.352 L 393.52272727272725 -305.352 L 393.52272727272725 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.352 L 381.02272727272725 -305.352 L 393.52272727272725 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -295.352 L 424.6590909090909 -305.352 L 437.1590909090909 -305.352 L 437.1590909090909 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.352 L 424.6590909090909 -305.352 L 437.1590909090909 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -295.352 L 468.2954545454545 -305.352 L 480.7954545454545 -305.352 L 480.7954545454545 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.352 L 468.2954545454545 -305.352 L 480.7954545454545 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -295.352 L 511.9318181818182 -305.352 L 524.4318181818182 -305.352 L 524.4318181818182 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.352 L 511.9318181818182 -305.352 L 524.4318181818182 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -295.352 L 555.5681818181818 -305.352 L 568.0681818181818 -305.352 L 568.0681818181818 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.352 L 555.5681818181818 -305.352 L 568.0681818181818 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -295.352 L 599.2045454545455 -305.352 L 611.7045454545455 -305.352 L 611.7045454545455 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.352 L 599.2045454545455 -305.352 L 611.7045454545455 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -295.352 L 642.840909090909 -305.352 L 655.340909090909 -305.352 L 655.340909090909 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -295.352 L 642.840909090909 -305.352 L 655.340909090909 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -295.352 L 686.4772727272727 -305.352 L 698.9772727272727 -305.352 L 698.9772727272727 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.352 L 686.4772727272727 -305.352 L 698.9772727272727 -305.352 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -295.352 L 730.1136363636364 -305.352 L 742.6136363636364 -305.352 L 742.6136363636364 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -295.352 L 730.1136363636364 -305.352 L 742.6136363636364 -305.352 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -300.352 L 387.27272727272725 -300.352 L 430.9090909090909 -300.352 L 474.5454545454545 -300.352 L 518.1818181818182 -300.352 L 561.8181818181818 -300.352 L 605.4545454545455 -300.352 L 649.090909090909 -300.352 L 692.7272727272727 -300.352 L 736.3636363636364 -300.352" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 337.3863636363636 -295.352 L 337.3863636363636 -305.352 L 349.8863636363636 -305.352 L 349.8863636363636 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -295.352 L 349.8863636363636 -295.352 L 343.6363636363636 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 381.02272727272725 -295.352 L 381.02272727272725 -305.352 L 393.52272727272725 -305.352 L 393.52272727272725 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -295.352 L 393.52272727272725 -295.352 L 387.27272727272725 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 424.6590909090909 -295.352 L 424.6590909090909 -305.352 L 437.1590909090909 -305.352 L 437.1590909090909 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -295.352 L 437.1590909090909 -295.352 L 430.9090909090909 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 468.2954545454545 -295.352 L 468.2954545454545 -305.352 L 480.7954545454545 -305.352 L 480.7954545454545 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -295.352 L 480.7954545454545 -295.352 L 474.5454545454545 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 511.9318181818182 -295.352 L 511.9318181818182 -305.352 L 524.4318181818182 -305.352 L 524.4318181818182 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -295.352 L 524.4318181818182 -295.352 L 518.1818181818182 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 555.5681818181818 -295.352 L 555.5681818181818 -305.352 L 568.0681818181818 -305.352 L 568.0681818181818 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -295.352 L 568.0681818181818 -295.352 L 561.8181818181818 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 599.2045454545455 -295.352 L 599.2045454545455 -305.352 L 611.7045454545455 -305.352 L 611.7045454545455 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -295.352 L 611.7045454545455 -295.352 L 605.4545454545455 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 642.840909090909 -295.352 L 642.840909090909 -305.352 L 655.340909090909 -305.352 L 655.340909090909 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -295.352 L 655.340909090909 -295.352 L 649.090909090909 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 686.4772727272727 -295.352 L 686.4772727272727 -305.352 L 698.9772727272727 -305.352 L 698.9772727272727 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -295.352 L 698.9772727272727 -295.352 L 692.7272727272727 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 730.1136363636364 -295.352 L 730.1136363636364 -305.352 L 742.6136363636364 -305.352 L 742.6136363636364 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -295.352 L 742.6136363636364 -295.352 L 736.3636363636364 -305.352 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 343.6363636363636 -300.352 L 387.27272727272725 -300.352 L 430.9090909090909 -300.352 L 474.5454545454545 -300.352 L 518.1818181818182 -300.352 L 561.8181818181818 -300.352 L 605.4545454545455 -300.352 L 649.090909090909 -300.352 L 692.7272727272727 -300.352 L 736.3636363636364 -300.352" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip63);">
+ <path d="M 336.4935064935065 -293.20914285714287 L 336.4935064935065 -307.49485714285714 L 350.7792207792208 -307.49485714285714 L 350.7792207792208 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.352 L 343.6363636363636 -307.49485714285714 L 350.7792207792208 -300.352 L 343.6363636363636 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip64);">
+ <path d="M 380.12987012987014 -293.20914285714287 L 380.12987012987014 -307.49485714285714 L 394.4155844155844 -307.49485714285714 L 394.4155844155844 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.352 L 387.27272727272725 -307.49485714285714 L 394.4155844155844 -300.352 L 387.27272727272725 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 423.76623376623377 -293.20914285714287 L 423.76623376623377 -307.49485714285714 L 438.05194805194805 -307.49485714285714 L 438.05194805194805 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.352 L 430.9090909090909 -307.49485714285714 L 438.05194805194805 -300.352 L 430.9090909090909 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 467.4025974025974 -293.20914285714287 L 467.4025974025974 -307.49485714285714 L 481.68831168831167 -307.49485714285714 L 481.68831168831167 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.352 L 474.5454545454545 -307.49485714285714 L 481.68831168831167 -300.352 L 474.5454545454545 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 511.038961038961 -293.20914285714287 L 511.038961038961 -307.49485714285714 L 525.3246753246754 -307.49485714285714 L 525.3246753246754 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.352 L 518.1818181818182 -307.49485714285714 L 525.3246753246754 -300.352 L 518.1818181818182 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 554.6753246753246 -293.20914285714287 L 554.6753246753246 -307.49485714285714 L 568.961038961039 -307.49485714285714 L 568.961038961039 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -300.352 L 561.8181818181818 -307.49485714285714 L 568.961038961039 -300.352 L 561.8181818181818 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 598.3116883116883 -293.20914285714287 L 598.3116883116883 -307.49485714285714 L 612.5974025974026 -307.49485714285714 L 612.5974025974026 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -300.352 L 605.4545454545455 -307.49485714285714 L 612.5974025974026 -300.352 L 605.4545454545455 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 641.9480519480519 -293.20914285714287 L 641.9480519480519 -307.49485714285714 L 656.2337662337662 -307.49485714285714 L 656.2337662337662 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -300.352 L 649.090909090909 -307.49485714285714 L 656.2337662337662 -300.352 L 649.090909090909 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 685.5844155844156 -293.20914285714287 L 685.5844155844156 -307.49485714285714 L 699.8701298701299 -307.49485714285714 L 699.8701298701299 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -300.352 L 692.7272727272727 -307.49485714285714 L 699.8701298701299 -300.352 L 692.7272727272727 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 729.2207792207791 -293.20914285714287 L 729.2207792207791 -307.49485714285714 L 743.5064935064936 -307.49485714285714 L 743.5064935064936 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -300.352 L 736.3636363636364 -307.49485714285714 L 743.5064935064936 -300.352 L 736.3636363636364 -293.20914285714287 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip73);">
+ <path d="M 343.6363636363636 -300.2816 L 387.27272727272725 -300.2816 L 430.9090909090909 -300.2816 L 474.5454545454545 -300.2816 L 518.1818181818182 -300.2816 L 561.8181818181818 -300.2816 L 605.4545454545455 -300.2816 L 649.090909090909 -300.2816 L 692.7272727272727 -300.2816 L 736.3636363636364 -300.2816" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip74);">
+ <path d="M 336.4935064935065 -300.2816 L 350.7792207792208 -300.2816" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -293.13874285714286 L 343.6363636363636 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -300.2816 L 394.4155844155844 -300.2816" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -293.13874285714286 L 387.27272727272725 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -300.2816 L 438.05194805194805 -300.2816" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -293.13874285714286 L 430.9090909090909 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -300.2816 L 481.68831168831167 -300.2816" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -293.13874285714286 L 474.5454545454545 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -300.2816 L 525.3246753246754 -300.2816" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -293.13874285714286 L 518.1818181818182 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -300.2816 L 568.961038961039 -300.2816" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -293.13874285714286 L 561.8181818181818 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -300.2816 L 612.5974025974026 -300.2816" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -293.13874285714286 L 605.4545454545455 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -300.2816 L 656.2337662337662 -300.2816" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -293.13874285714286 L 649.090909090909 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -300.2816 L 699.8701298701299 -300.2816" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -293.13874285714286 L 692.7272727272727 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -300.2816 L 743.5064935064936 -300.2816" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -293.13874285714286 L 736.3636363636364 -307.42445714285714" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip76);">
+ <path d="M 300.85714285714283 -118.1904761904762 L 300.85714285714283 -132.47619047619048 L 315.14285714285717 -132.47619047619048 L 315.14285714285717 -118.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -125.33333333333334 L 308.0 -132.47619047619048 L 315.14285714285717 -125.33333333333334 L 308.0 -118.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip77);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ binary_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ thin_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 301.75 -40.33333333333337 L 301.75 -50.33333333333334 L 314.25 -50.33333333333334 L 314.25 -40.33333333333337 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -40.33333333333337 L 314.25 -40.33333333333337 L 308.0 -50.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 300.85714285714283 -18.190476190476147 L 300.85714285714283 -32.47619047619048 L 315.14285714285717 -32.47619047619048 L 315.14285714285717 -18.190476190476147 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -25.333333333333314 L 308.0 -32.47619047619048 L 315.14285714285717 -25.333333333333314 L 308.0 -18.190476190476147 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -5.333333333333314 L 315.14285714285717 -5.333333333333314" style="stroke-width:1;"/>
+ <path d="M 308.0 1.8095238095238528 L 308.0 -12.476190476190482" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdf
new file mode 100644
index 0000000000..6660c32d81
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.png
new file mode 100644
index 0000000000..0107d473ea
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg
new file mode 100644
index 0000000000..a604e0e217
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg
@@ -0,0 +1,821 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 556" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -317.9384517241379 L 337.3863636363636 -327.9384517241379 L 349.8863636363636 -327.9384517241379 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -337.3564482758621 L 381.02272727272725 -347.3564482758621 L 393.52272727272725 -347.3564482758621 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -360.32558620689656 L 424.6590909090909 -370.32558620689656 L 437.1590909090909 -370.32558620689656 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -380.3448275862069 L 468.2954545454545 -390.3448275862069 L 480.7954545454545 -390.3448275862069 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -399.94265517241377 L 511.9318181818182 -409.94265517241377 L 524.4318181818182 -409.94265517241377 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -419.3295862068966 L 555.5681818181818 -429.3295862068966 L 568.0681818181818 -429.3295862068966 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -445.821 L 599.2045454545455 -455.821 L 611.7045454545455 -455.821 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -468.06034482758616 L 642.840909090909 -478.06034482758616 L 655.340909090909 -478.06034482758616 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -489.57217241379306 L 686.4772727272727 -499.57217241379306 L 698.9772727272727 -499.57217241379306 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 336.4935064935065 -300.4020234482759 L 343.6363636363636 -307.544880591133 L 350.7792207792208 -300.4020234482759 L 343.6363636363636 -293.2591663054187 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 380.12987012987014 -300.40573689655173 L 387.27272727272725 -307.54859403940884 L 394.4155844155844 -300.40573689655173 L 387.27272727272725 -293.26287975369456 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 423.76623376623377 -300.4099396551724 L 430.9090909090909 -307.55279679802953 L 438.05194805194805 -300.4099396551724 L 430.9090909090909 -293.26708251231526 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 467.4025974025974 -300.4152272413793 L 474.5454545454545 -307.55808438423645 L 481.68831168831167 -300.4152272413793 L 474.5454545454545 -293.2723700985222 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.038961038961 -300.420055862069 L 518.1818181818182 -307.5629130049261 L 525.3246753246754 -300.420055862069 L 518.1818181818182 -293.2771987192118 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 554.6753246753246 -300.42901896551723 L 561.8181818181818 -307.5718761083744 L 568.961038961039 -300.42901896551723 L 561.8181818181818 -293.2861618226601 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 598.3116883116883 -300.41951344827584 L 605.4545454545455 -307.562370591133 L 612.5974025974026 -300.41951344827584 L 605.4545454545455 -293.2766563054187 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 641.9480519480519 -300.42380344827586 L 649.090909090909 -307.56666059113303 L 656.2337662337662 -300.42380344827586 L 649.090909090909 -293.2809463054187 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 685.5844155844156 -300.4244975862069 L 692.7272727272727 -307.56735472906405 L 699.8701298701299 -300.4244975862069 L 692.7272727272727 -293.2816404433498 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 729.2207792207791 -300.4203934482759 L 736.3636363636364 -307.563250591133 L 743.5064935064936 -300.4203934482759 L 736.3636363636364 -293.2775363054187 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -295.36725889655173 L 337.3863636363636 -305.36725889655173 L 349.8863636363636 -305.36725889655173 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -295.3633933448276 L 381.02272727272725 -305.3633933448276 L 393.52272727272725 -305.3633933448276 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -295.3623316551724 L 424.6590909090909 -305.3623316551724 L 437.1590909090909 -305.3623316551724 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -295.3603998275862 L 468.2954545454545 -305.3603998275862 L 480.7954545454545 -305.3603998275862 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -295.36033572413794 L 511.9318181818182 -305.36033572413794 L 524.4318181818182 -305.36033572413794 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -295.35488465517244 L 555.5681818181818 -305.35488465517244 L 568.0681818181818 -305.35488465517244 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -295.3592880689655 L 599.2045454545455 -305.3592880689655 L 611.7045454545455 -305.3592880689655 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -295.35756220689655 L 642.840909090909 -305.35756220689655 L 655.340909090909 -305.35756220689655 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -295.3571662068966 L 686.4772727272727 -305.3571662068966 L 698.9772727272727 -305.3571662068966 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -295.35909462068963 L 730.1136363636364 -305.35909462068963 L 742.6136363636364 -305.35909462068963 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 337.3863636363636 -295.3173560689655 L 349.8863636363636 -295.3173560689655 L 343.6363636363636 -305.3173560689655 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 381.02272727272725 -295.32901720689654 L 393.52272727272725 -295.32901720689654 L 387.27272727272725 -305.32901720689654 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 424.6590909090909 -295.3282714827586 L 437.1590909090909 -295.3282714827586 L 430.9090909090909 -305.3282714827586 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 468.2954545454545 -295.32696134482757 L 480.7954545454545 -295.32696134482757 L 474.5454545454545 -305.32696134482757 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 511.9318181818182 -295.32857417241377 L 524.4318181818182 -295.32857417241377 L 518.1818181818182 -305.32857417241377 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 555.5681818181818 -295.3304096551724 L 568.0681818181818 -295.3304096551724 L 561.8181818181818 -305.3304096551724 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 599.2045454545455 -295.3297105862069 L 611.7045454545455 -295.3297105862069 L 605.4545454545455 -305.3297105862069 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 642.840909090909 -295.3315858965517 L 655.340909090909 -295.3315858965517 L 649.090909090909 -305.3315858965517 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 686.4772727272727 -295.3270580689655 L 698.9772727272727 -295.3270580689655 L 692.7272727272727 -305.3270580689655 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 730.1136363636364 -295.3244078275862 L 742.6136363636364 -295.3244078275862 L 736.3636363636364 -305.3244078275862 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 336.4935064935065 -300.3406836551724 L 343.6363636363636 -307.48354079802954 L 350.7792207792208 -300.3406836551724 L 343.6363636363636 -293.19782651231526 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 380.12987012987014 -300.32676220689655 L 387.27272727272725 -307.4696193497537 L 394.4155844155844 -300.32676220689655 L 387.27272727272725 -293.18390506403944 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 423.76623376623377 -300.3254733103448 L 430.9090909090909 -307.468330453202 L 438.05194805194805 -300.3254733103448 L 430.9090909090909 -293.1826161674877 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 467.4025974025974 -300.31427265517243 L 474.5454545454545 -307.45712979802954 L 481.68831168831167 -300.31427265517243 L 474.5454545454545 -293.17141551231526 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 511.038961038961 -300.30659996551725 L 518.1818181818182 -307.44945710837436 L 525.3246753246754 -300.30659996551725 L 518.1818181818182 -293.1637428226601 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 554.6753246753246 -300.3092316206897 L 561.8181818181818 -307.4520887635468 L 568.961038961039 -300.3092316206897 L 561.8181818181818 -293.1663744778325 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 598.3116883116883 -300.3078956896552 L 605.4545454545455 -307.4507528325123 L 612.5974025974026 -300.3078956896552 L 605.4545454545455 -293.16503854679803 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 641.9480519480519 -300.3060021724138 L 649.090909090909 -307.4488593152709 L 656.2337662337662 -300.3060021724138 L 649.090909090909 -293.16314502955663 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 685.5844155844156 -300.3007456896552 L 692.7272727272727 -307.44360283251234 L 699.8701298701299 -300.3007456896552 L 692.7272727272727 -293.157888546798 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 729.2207792207791 -300.30063417241377 L 736.3636363636364 -307.44349131527093 L 743.5064935064936 -300.30063417241377 L 736.3636363636364 -293.15777702955666 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 343.6363636363636 -295.23394837931033 L 337.3863636363636 -305.23394837931033 L 349.8863636363636 -305.23394837931033 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 387.27272727272725 -295.2336123103448 L 381.02272727272725 -305.2336123103448 L 393.52272727272725 -305.2336123103448 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 430.9090909090909 -295.2396513103448 L 424.6590909090909 -305.2396513103448 L 437.1590909090909 -305.2396513103448 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 474.5454545454545 -295.234532137931 L 468.2954545454545 -305.234532137931 L 480.7954545454545 -305.234532137931 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 518.1818181818182 -295.2389355517241 L 511.9318181818182 -305.2389355517241 L 524.4318181818182 -305.2389355517241 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 561.8181818181818 -295.2387 L 555.5681818181818 -305.2387 L 568.0681818181818 -305.2387 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 605.4545454545455 -295.23816441379313 L 599.2045454545455 -305.23816441379313 L 611.7045454545455 -305.23816441379313 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 649.090909090909 -295.2389253103448 L 642.840909090909 -305.2389253103448 L 655.340909090909 -305.2389253103448 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 692.7272727272727 -295.23832334482756 L 686.4772727272727 -305.23832334482756 L 698.9772727272727 -305.23832334482756 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 736.3636363636364 -295.2393091724138 L 730.1136363636364 -305.2393091724138 L 742.6136363636364 -305.2393091724138 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 300.85714285714283 -45.33333333333334 L 308.0 -52.47619047619048 L 315.14285714285717 -45.33333333333334 L 308.0 -38.190476190476204 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 308.0 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.16e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.32e-05
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 3.48e-05
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 4.64e-05
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 5.80e-05
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -322.9384517241379 L 387.27272727272725 -342.3564482758621 L 430.9090909090909 -365.32558620689656 L 474.5454545454545 -385.3448275862069 L 518.1818181818182 -404.94265517241377 L 561.8181818181818 -424.3295862068966 L 605.4545454545455 -450.821 L 649.090909090909 -473.06034482758616 L 692.7272727272727 -494.57217241379306 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -317.9384517241379 L 337.3863636363636 -327.9384517241379 L 349.8863636363636 -327.9384517241379 L 349.8863636363636 -317.9384517241379 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -317.9384517241379 L 337.3863636363636 -327.9384517241379 L 349.8863636363636 -327.9384517241379 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -337.3564482758621 L 381.02272727272725 -347.3564482758621 L 393.52272727272725 -347.3564482758621 L 393.52272727272725 -337.3564482758621 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -337.3564482758621 L 381.02272727272725 -347.3564482758621 L 393.52272727272725 -347.3564482758621 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -360.32558620689656 L 424.6590909090909 -370.32558620689656 L 437.1590909090909 -370.32558620689656 L 437.1590909090909 -360.32558620689656 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -360.32558620689656 L 424.6590909090909 -370.32558620689656 L 437.1590909090909 -370.32558620689656 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -380.3448275862069 L 468.2954545454545 -390.3448275862069 L 480.7954545454545 -390.3448275862069 L 480.7954545454545 -380.3448275862069 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -380.3448275862069 L 468.2954545454545 -390.3448275862069 L 480.7954545454545 -390.3448275862069 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -399.94265517241377 L 511.9318181818182 -409.94265517241377 L 524.4318181818182 -409.94265517241377 L 524.4318181818182 -399.94265517241377 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -399.94265517241377 L 511.9318181818182 -409.94265517241377 L 524.4318181818182 -409.94265517241377 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -419.3295862068966 L 555.5681818181818 -429.3295862068966 L 568.0681818181818 -429.3295862068966 L 568.0681818181818 -419.3295862068966 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -419.3295862068966 L 555.5681818181818 -429.3295862068966 L 568.0681818181818 -429.3295862068966 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -445.821 L 599.2045454545455 -455.821 L 611.7045454545455 -455.821 L 611.7045454545455 -445.821 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -445.821 L 599.2045454545455 -455.821 L 611.7045454545455 -455.821 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -468.06034482758616 L 642.840909090909 -478.06034482758616 L 655.340909090909 -478.06034482758616 L 655.340909090909 -468.06034482758616 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -468.06034482758616 L 642.840909090909 -478.06034482758616 L 655.340909090909 -478.06034482758616 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -489.57217241379306 L 686.4772727272727 -499.57217241379306 L 698.9772727272727 -499.57217241379306 L 698.9772727272727 -489.57217241379306 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -489.57217241379306 L 686.4772727272727 -499.57217241379306 L 698.9772727272727 -499.57217241379306 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -300.4020234482759 L 387.27272727272725 -300.40573689655173 L 430.9090909090909 -300.4099396551724 L 474.5454545454545 -300.4152272413793 L 518.1818181818182 -300.420055862069 L 561.8181818181818 -300.42901896551723 L 605.4545454545455 -300.41951344827584 L 649.090909090909 -300.42380344827586 L 692.7272727272727 -300.4244975862069 L 736.3636363636364 -300.4203934482759" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 336.4935064935065 -293.2591663054187 L 336.4935064935065 -307.544880591133 L 350.7792207792208 -307.544880591133 L 350.7792207792208 -293.2591663054187 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.4020234482759 L 343.6363636363636 -307.544880591133 L 350.7792207792208 -300.4020234482759 L 343.6363636363636 -293.2591663054187 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 380.12987012987014 -293.26287975369456 L 380.12987012987014 -307.54859403940884 L 394.4155844155844 -307.54859403940884 L 394.4155844155844 -293.26287975369456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.40573689655173 L 387.27272727272725 -307.54859403940884 L 394.4155844155844 -300.40573689655173 L 387.27272727272725 -293.26287975369456 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 423.76623376623377 -293.26708251231526 L 423.76623376623377 -307.55279679802953 L 438.05194805194805 -307.55279679802953 L 438.05194805194805 -293.26708251231526 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.4099396551724 L 430.9090909090909 -307.55279679802953 L 438.05194805194805 -300.4099396551724 L 430.9090909090909 -293.26708251231526 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 467.4025974025974 -293.2723700985222 L 467.4025974025974 -307.55808438423645 L 481.68831168831167 -307.55808438423645 L 481.68831168831167 -293.2723700985222 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.4152272413793 L 474.5454545454545 -307.55808438423645 L 481.68831168831167 -300.4152272413793 L 474.5454545454545 -293.2723700985222 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.038961038961 -293.2771987192118 L 511.038961038961 -307.5629130049261 L 525.3246753246754 -307.5629130049261 L 525.3246753246754 -293.2771987192118 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.420055862069 L 518.1818181818182 -307.5629130049261 L 525.3246753246754 -300.420055862069 L 518.1818181818182 -293.2771987192118 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 554.6753246753246 -293.2861618226601 L 554.6753246753246 -307.5718761083744 L 568.961038961039 -307.5718761083744 L 568.961038961039 -293.2861618226601 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -300.42901896551723 L 561.8181818181818 -307.5718761083744 L 568.961038961039 -300.42901896551723 L 561.8181818181818 -293.2861618226601 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 598.3116883116883 -293.2766563054187 L 598.3116883116883 -307.562370591133 L 612.5974025974026 -307.562370591133 L 612.5974025974026 -293.2766563054187 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -300.41951344827584 L 605.4545454545455 -307.562370591133 L 612.5974025974026 -300.41951344827584 L 605.4545454545455 -293.2766563054187 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 641.9480519480519 -293.2809463054187 L 641.9480519480519 -307.56666059113303 L 656.2337662337662 -307.56666059113303 L 656.2337662337662 -293.2809463054187 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -300.42380344827586 L 649.090909090909 -307.56666059113303 L 656.2337662337662 -300.42380344827586 L 649.090909090909 -293.2809463054187 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 685.5844155844156 -293.2816404433498 L 685.5844155844156 -307.56735472906405 L 699.8701298701299 -307.56735472906405 L 699.8701298701299 -293.2816404433498 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -300.4244975862069 L 692.7272727272727 -307.56735472906405 L 699.8701298701299 -300.4244975862069 L 692.7272727272727 -293.2816404433498 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 729.2207792207791 -293.2775363054187 L 729.2207792207791 -307.563250591133 L 743.5064935064936 -307.563250591133 L 743.5064935064936 -293.2775363054187 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -300.4203934482759 L 736.3636363636364 -307.563250591133 L 743.5064935064936 -300.4203934482759 L 736.3636363636364 -293.2775363054187 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -300.36725889655173 L 387.27272727272725 -300.3633933448276 L 430.9090909090909 -300.3623316551724 L 474.5454545454545 -300.3603998275862 L 518.1818181818182 -300.36033572413794 L 561.8181818181818 -300.35488465517244 L 605.4545454545455 -300.3592880689655 L 649.090909090909 -300.35756220689655 L 692.7272727272727 -300.3571662068966 L 736.3636363636364 -300.35909462068963" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -295.36725889655173 L 337.3863636363636 -305.36725889655173 L 349.8863636363636 -305.36725889655173 L 349.8863636363636 -295.36725889655173 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.36725889655173 L 337.3863636363636 -305.36725889655173 L 349.8863636363636 -305.36725889655173 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -295.3633933448276 L 381.02272727272725 -305.3633933448276 L 393.52272727272725 -305.3633933448276 L 393.52272727272725 -295.3633933448276 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.3633933448276 L 381.02272727272725 -305.3633933448276 L 393.52272727272725 -305.3633933448276 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -295.3623316551724 L 424.6590909090909 -305.3623316551724 L 437.1590909090909 -305.3623316551724 L 437.1590909090909 -295.3623316551724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.3623316551724 L 424.6590909090909 -305.3623316551724 L 437.1590909090909 -305.3623316551724 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -295.3603998275862 L 468.2954545454545 -305.3603998275862 L 480.7954545454545 -305.3603998275862 L 480.7954545454545 -295.3603998275862 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.3603998275862 L 468.2954545454545 -305.3603998275862 L 480.7954545454545 -305.3603998275862 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -295.36033572413794 L 511.9318181818182 -305.36033572413794 L 524.4318181818182 -305.36033572413794 L 524.4318181818182 -295.36033572413794 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.36033572413794 L 511.9318181818182 -305.36033572413794 L 524.4318181818182 -305.36033572413794 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -295.35488465517244 L 555.5681818181818 -305.35488465517244 L 568.0681818181818 -305.35488465517244 L 568.0681818181818 -295.35488465517244 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.35488465517244 L 555.5681818181818 -305.35488465517244 L 568.0681818181818 -305.35488465517244 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -295.3592880689655 L 599.2045454545455 -305.3592880689655 L 611.7045454545455 -305.3592880689655 L 611.7045454545455 -295.3592880689655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.3592880689655 L 599.2045454545455 -305.3592880689655 L 611.7045454545455 -305.3592880689655 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -295.35756220689655 L 642.840909090909 -305.35756220689655 L 655.340909090909 -305.35756220689655 L 655.340909090909 -295.35756220689655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -295.35756220689655 L 642.840909090909 -305.35756220689655 L 655.340909090909 -305.35756220689655 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -295.3571662068966 L 686.4772727272727 -305.3571662068966 L 698.9772727272727 -305.3571662068966 L 698.9772727272727 -295.3571662068966 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.3571662068966 L 686.4772727272727 -305.3571662068966 L 698.9772727272727 -305.3571662068966 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -295.35909462068963 L 730.1136363636364 -305.35909462068963 L 742.6136363636364 -305.35909462068963 L 742.6136363636364 -295.35909462068963 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -295.35909462068963 L 730.1136363636364 -305.35909462068963 L 742.6136363636364 -305.35909462068963 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -300.3173560689655 L 387.27272727272725 -300.32901720689654 L 430.9090909090909 -300.3282714827586 L 474.5454545454545 -300.32696134482757 L 518.1818181818182 -300.32857417241377 L 561.8181818181818 -300.3304096551724 L 605.4545454545455 -300.3297105862069 L 649.090909090909 -300.3315858965517 L 692.7272727272727 -300.3270580689655 L 736.3636363636364 -300.3244078275862" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -295.3173560689655 L 337.3863636363636 -305.3173560689655 L 349.8863636363636 -305.3173560689655 L 349.8863636363636 -295.3173560689655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -295.3173560689655 L 349.8863636363636 -295.3173560689655 L 343.6363636363636 -305.3173560689655 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -295.32901720689654 L 381.02272727272725 -305.32901720689654 L 393.52272727272725 -305.32901720689654 L 393.52272727272725 -295.32901720689654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -295.32901720689654 L 393.52272727272725 -295.32901720689654 L 387.27272727272725 -305.32901720689654 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -295.3282714827586 L 424.6590909090909 -305.3282714827586 L 437.1590909090909 -305.3282714827586 L 437.1590909090909 -295.3282714827586 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -295.3282714827586 L 437.1590909090909 -295.3282714827586 L 430.9090909090909 -305.3282714827586 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -295.32696134482757 L 468.2954545454545 -305.32696134482757 L 480.7954545454545 -305.32696134482757 L 480.7954545454545 -295.32696134482757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -295.32696134482757 L 480.7954545454545 -295.32696134482757 L 474.5454545454545 -305.32696134482757 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -295.32857417241377 L 511.9318181818182 -305.32857417241377 L 524.4318181818182 -305.32857417241377 L 524.4318181818182 -295.32857417241377 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -295.32857417241377 L 524.4318181818182 -295.32857417241377 L 518.1818181818182 -305.32857417241377 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -295.3304096551724 L 555.5681818181818 -305.3304096551724 L 568.0681818181818 -305.3304096551724 L 568.0681818181818 -295.3304096551724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -295.3304096551724 L 568.0681818181818 -295.3304096551724 L 561.8181818181818 -305.3304096551724 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -295.3297105862069 L 599.2045454545455 -305.3297105862069 L 611.7045454545455 -305.3297105862069 L 611.7045454545455 -295.3297105862069 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -295.3297105862069 L 611.7045454545455 -295.3297105862069 L 605.4545454545455 -305.3297105862069 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -295.3315858965517 L 642.840909090909 -305.3315858965517 L 655.340909090909 -305.3315858965517 L 655.340909090909 -295.3315858965517 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -295.3315858965517 L 655.340909090909 -295.3315858965517 L 649.090909090909 -305.3315858965517 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -295.3270580689655 L 686.4772727272727 -305.3270580689655 L 698.9772727272727 -305.3270580689655 L 698.9772727272727 -295.3270580689655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -295.3270580689655 L 698.9772727272727 -295.3270580689655 L 692.7272727272727 -305.3270580689655 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -295.3244078275862 L 730.1136363636364 -305.3244078275862 L 742.6136363636364 -305.3244078275862 L 742.6136363636364 -295.3244078275862 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -295.3244078275862 L 742.6136363636364 -295.3244078275862 L 736.3636363636364 -305.3244078275862 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -300.3406836551724 L 387.27272727272725 -300.32676220689655 L 430.9090909090909 -300.3254733103448 L 474.5454545454545 -300.31427265517243 L 518.1818181818182 -300.30659996551725 L 561.8181818181818 -300.3092316206897 L 605.4545454545455 -300.3078956896552 L 649.090909090909 -300.3060021724138 L 692.7272727272727 -300.3007456896552 L 736.3636363636364 -300.30063417241377" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip51);">
+ <path d="M 336.4935064935065 -293.19782651231526 L 336.4935064935065 -307.48354079802954 L 350.7792207792208 -307.48354079802954 L 350.7792207792208 -293.19782651231526 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.3406836551724 L 343.6363636363636 -307.48354079802954 L 350.7792207792208 -300.3406836551724 L 343.6363636363636 -293.19782651231526 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip52);">
+ <path d="M 380.12987012987014 -293.18390506403944 L 380.12987012987014 -307.4696193497537 L 394.4155844155844 -307.4696193497537 L 394.4155844155844 -293.18390506403944 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -300.32676220689655 L 387.27272727272725 -307.4696193497537 L 394.4155844155844 -300.32676220689655 L 387.27272727272725 -293.18390506403944 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip53);">
+ <path d="M 423.76623376623377 -293.1826161674877 L 423.76623376623377 -307.468330453202 L 438.05194805194805 -307.468330453202 L 438.05194805194805 -293.1826161674877 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -300.3254733103448 L 430.9090909090909 -307.468330453202 L 438.05194805194805 -300.3254733103448 L 430.9090909090909 -293.1826161674877 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip54);">
+ <path d="M 467.4025974025974 -293.17141551231526 L 467.4025974025974 -307.45712979802954 L 481.68831168831167 -307.45712979802954 L 481.68831168831167 -293.17141551231526 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -300.31427265517243 L 474.5454545454545 -307.45712979802954 L 481.68831168831167 -300.31427265517243 L 474.5454545454545 -293.17141551231526 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip55);">
+ <path d="M 511.038961038961 -293.1637428226601 L 511.038961038961 -307.44945710837436 L 525.3246753246754 -307.44945710837436 L 525.3246753246754 -293.1637428226601 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -300.30659996551725 L 518.1818181818182 -307.44945710837436 L 525.3246753246754 -300.30659996551725 L 518.1818181818182 -293.1637428226601 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip56);">
+ <path d="M 554.6753246753246 -293.1663744778325 L 554.6753246753246 -307.4520887635468 L 568.961038961039 -307.4520887635468 L 568.961038961039 -293.1663744778325 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -300.3092316206897 L 561.8181818181818 -307.4520887635468 L 568.961038961039 -300.3092316206897 L 561.8181818181818 -293.1663744778325 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip57);">
+ <path d="M 598.3116883116883 -293.16503854679803 L 598.3116883116883 -307.4507528325123 L 612.5974025974026 -307.4507528325123 L 612.5974025974026 -293.16503854679803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -300.3078956896552 L 605.4545454545455 -307.4507528325123 L 612.5974025974026 -300.3078956896552 L 605.4545454545455 -293.16503854679803 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip58);">
+ <path d="M 641.9480519480519 -293.16314502955663 L 641.9480519480519 -307.4488593152709 L 656.2337662337662 -307.4488593152709 L 656.2337662337662 -293.16314502955663 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -300.3060021724138 L 649.090909090909 -307.4488593152709 L 656.2337662337662 -300.3060021724138 L 649.090909090909 -293.16314502955663 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip59);">
+ <path d="M 685.5844155844156 -293.157888546798 L 685.5844155844156 -307.44360283251234 L 699.8701298701299 -307.44360283251234 L 699.8701298701299 -293.157888546798 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -300.3007456896552 L 692.7272727272727 -307.44360283251234 L 699.8701298701299 -300.3007456896552 L 692.7272727272727 -293.157888546798 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip60);">
+ <path d="M 729.2207792207791 -293.15777702955666 L 729.2207792207791 -307.44349131527093 L 743.5064935064936 -307.44349131527093 L 743.5064935064936 -293.15777702955666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -300.30063417241377 L 736.3636363636364 -307.44349131527093 L 743.5064935064936 -300.30063417241377 L 736.3636363636364 -293.15777702955666 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 343.6363636363636 -300.23394837931033 L 387.27272727272725 -300.2336123103448 L 430.9090909090909 -300.2396513103448 L 474.5454545454545 -300.234532137931 L 518.1818181818182 -300.2389355517241 L 561.8181818181818 -300.2387 L 605.4545454545455 -300.23816441379313 L 649.090909090909 -300.2389253103448 L 692.7272727272727 -300.23832334482756 L 736.3636363636364 -300.2393091724138" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip63);">
+ <path d="M 337.3863636363636 -295.23394837931033 L 337.3863636363636 -305.23394837931033 L 349.8863636363636 -305.23394837931033 L 349.8863636363636 -295.23394837931033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -295.23394837931033 L 337.3863636363636 -305.23394837931033 L 349.8863636363636 -305.23394837931033 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip64);">
+ <path d="M 381.02272727272725 -295.2336123103448 L 381.02272727272725 -305.2336123103448 L 393.52272727272725 -305.2336123103448 L 393.52272727272725 -295.2336123103448 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -295.2336123103448 L 381.02272727272725 -305.2336123103448 L 393.52272727272725 -305.2336123103448 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip65);">
+ <path d="M 424.6590909090909 -295.2396513103448 L 424.6590909090909 -305.2396513103448 L 437.1590909090909 -305.2396513103448 L 437.1590909090909 -295.2396513103448 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -295.2396513103448 L 424.6590909090909 -305.2396513103448 L 437.1590909090909 -305.2396513103448 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip66);">
+ <path d="M 468.2954545454545 -295.234532137931 L 468.2954545454545 -305.234532137931 L 480.7954545454545 -305.234532137931 L 480.7954545454545 -295.234532137931 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -295.234532137931 L 468.2954545454545 -305.234532137931 L 480.7954545454545 -305.234532137931 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip67);">
+ <path d="M 511.9318181818182 -295.2389355517241 L 511.9318181818182 -305.2389355517241 L 524.4318181818182 -305.2389355517241 L 524.4318181818182 -295.2389355517241 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.2389355517241 L 511.9318181818182 -305.2389355517241 L 524.4318181818182 -305.2389355517241 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip68);">
+ <path d="M 555.5681818181818 -295.2387 L 555.5681818181818 -305.2387 L 568.0681818181818 -305.2387 L 568.0681818181818 -295.2387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -295.2387 L 555.5681818181818 -305.2387 L 568.0681818181818 -305.2387 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip69);">
+ <path d="M 599.2045454545455 -295.23816441379313 L 599.2045454545455 -305.23816441379313 L 611.7045454545455 -305.23816441379313 L 611.7045454545455 -295.23816441379313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -295.23816441379313 L 599.2045454545455 -305.23816441379313 L 611.7045454545455 -305.23816441379313 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip70);">
+ <path d="M 642.840909090909 -295.2389253103448 L 642.840909090909 -305.2389253103448 L 655.340909090909 -305.2389253103448 L 655.340909090909 -295.2389253103448 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -295.2389253103448 L 642.840909090909 -305.2389253103448 L 655.340909090909 -305.2389253103448 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip71);">
+ <path d="M 686.4772727272727 -295.23832334482756 L 686.4772727272727 -305.23832334482756 L 698.9772727272727 -305.23832334482756 L 698.9772727272727 -295.23832334482756 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -295.23832334482756 L 686.4772727272727 -305.23832334482756 L 698.9772727272727 -305.23832334482756 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip72);">
+ <path d="M 730.1136363636364 -295.2393091724138 L 730.1136363636364 -305.2393091724138 L 742.6136363636364 -305.2393091724138 L 742.6136363636364 -295.2393091724138 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -295.2393091724138 L 730.1136363636364 -305.2393091724138 L 742.6136363636364 -305.2393091724138 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip73);">
+ <path d="M 343.6363636363636 -300.2339828965517 L 387.27272727272725 -300.23072803448275 L 430.9090909090909 -300.2317836551724 L 474.5454545454545 -300.2327497586207 L 518.1818181818182 -300.2326879310345 L 561.8181818181818 -300.23229837931035 L 605.4545454545455 -300.2339870689655 L 649.090909090909 -300.2349888275862 L 692.7272727272727 -300.23414220689654 L 736.3636363636364 -300.23535865517243" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip74);">
+ <path d="M 336.4935064935065 -300.2339828965517 L 350.7792207792208 -300.2339828965517" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -293.0911257536946 L 343.6363636363636 -307.3768400394089" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -300.23072803448275 L 394.4155844155844 -300.23072803448275" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -293.08787089162564 L 387.27272727272725 -307.3735851773399" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -300.2317836551724 L 438.05194805194805 -300.2317836551724" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -293.08892651231525 L 430.9090909090909 -307.37464079802953" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -300.2327497586207 L 481.68831168831167 -300.2327497586207" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -293.0898926157636 L 474.5454545454545 -307.37560690147785" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -300.2326879310345 L 525.3246753246754 -300.2326879310345" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -293.0898307881773 L 518.1818181818182 -307.3755450738916" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -300.23229837931035 L 568.961038961039 -300.23229837931035" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -293.0894412364532 L 561.8181818181818 -307.37515552216746" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -300.2339870689655 L 612.5974025974026 -300.2339870689655" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -293.09112992610835 L 605.4545454545455 -307.3768442118227" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -300.2349888275862 L 656.2337662337662 -300.2349888275862" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -293.09213168472905 L 649.090909090909 -307.37784597044333" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -300.23414220689654 L 699.8701298701299 -300.23414220689654" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -293.0912850640394 L 692.7272727272727 -307.3769993497537" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -300.23535865517243 L 743.5064935064936 -300.23535865517243" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -293.09250151231527 L 736.3636363636364 -307.37821579802954" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ binary_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip80);">
+ <path d="M 300.85714285714283 -38.190476190476204 L 300.85714285714283 -52.47619047619048 L 315.14285714285717 -52.47619047619048 L 315.14285714285717 -38.190476190476204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -45.33333333333334 L 308.0 -52.47619047619048 L 315.14285714285717 -45.33333333333334 L 308.0 -38.190476190476204 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip81);">
+ <path d="M 301.75 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 L 314.25 -20.333333333333314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -20.333333333333314 L 301.75 -30.333333333333314 L 314.25 -30.333333333333314 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ thin_heap
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -5.333333333333314 L 315.14285714285717 -5.333333333333314" style="stroke-width:1;"/>
+ <path d="M 308.0 1.8095238095238528 L 308.0 -12.476190476190482" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdf b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdf
new file mode 100644
index 0000000000..f871929b96
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.png b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.png
new file mode 100644
index 0000000000..5da52c3def
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg
new file mode 100644
index 0000000000..0a28468cd0
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg
@@ -0,0 +1,821 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 556" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -318.429676730695 L 337.3863636363636 -328.429676730695 L 349.8863636363636 -328.429676730695 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -337.3795027645908 L 381.02272727272725 -347.3795027645908 L 393.52272727272725 -347.3795027645908 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -359.4003311050035 L 424.6590909090909 -369.4003311050035 L 437.1590909090909 -369.4003311050035 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -379.1360250062465 L 468.2954545454545 -389.1360250062465 L 480.7954545454545 -389.1360250062465 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -398.45627391290304 L 511.9318181818182 -408.45627391290304 L 524.4318181818182 -408.45627391290304 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -420.6846377816645 L 555.5681818181818 -430.6846377816645 L 568.0681818181818 -430.6846377816645 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -445.4655016801709 L 599.2045454545455 -455.4655016801709 L 611.7045454545455 -455.4655016801709 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -466.3880744408354 L 642.840909090909 -476.3880744408354 L 655.340909090909 -476.3880744408354 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -487.5088342826257 L 686.4772727272727 -497.5088342826257 L 698.9772727272727 -497.5088342826257 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 336.4935064935065 -301.3565083039707 L 343.6363636363636 -308.4993654468279 L 350.7792207792208 -301.3565083039707 L 343.6363636363636 -294.21365116111355 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 380.12987012987014 -301.4838790276935 L 387.27272727272725 -308.62673617055066 L 394.4155844155844 -301.4838790276935 L 387.27272727272725 -294.3410218848364 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 423.76623376623377 -301.6225688513138 L 430.9090909090909 -308.7654259941709 L 438.05194805194805 -301.6225688513138 L 430.9090909090909 -294.47971170845665 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 467.4025974025974 -301.6537328349761 L 474.5454545454545 -308.79658997783326 L 481.68831168831167 -301.6537328349761 L 474.5454545454545 -294.510875692119 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.038961038961 -301.77161675445706 L 518.1818181818182 -308.9144738973142 L 525.3246753246754 -301.77161675445706 L 518.1818181818182 -294.62875961159995 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 554.6753246753246 -301.8049832322851 L 561.8181818181818 -308.9478403751423 L 568.961038961039 -301.8049832322851 L 561.8181818181818 -294.662126089428 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 598.3116883116883 -301.8358518050152 L 605.4545454545455 -308.97870894787235 L 612.5974025974026 -301.8358518050152 L 605.4545454545455 -294.69299466215807 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 641.9480519480519 -301.8753246885692 L 649.090909090909 -309.0181818314264 L 656.2337662337662 -301.8753246885692 L 649.090909090909 -294.7324675457121 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 685.5844155844156 -301.9107515641652 L 692.7272727272727 -309.05360870702236 L 699.8701298701299 -301.9107515641652 L 692.7272727272727 -294.76789442130803 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 729.2207792207791 -301.9612144822745 L 736.3636363636364 -309.1040716251316 L 743.5064935064936 -301.9612144822745 L 736.3636363636364 -294.81835733941733 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -296.2791218578594 L 337.3863636363636 -306.2791218578594 L 349.8863636363636 -306.2791218578594 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -296.4747960763717 L 381.02272727272725 -306.4747960763717 L 393.52272727272725 -306.4747960763717 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -296.6057453856914 L 424.6590909090909 -306.6057453856914 L 437.1590909090909 -306.6057453856914 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -296.6537328349761 L 468.2954545454545 -306.6537328349761 L 480.7954545454545 -306.6537328349761 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -296.73358353177537 L 511.9318181818182 -306.73358353177537 L 524.4318181818182 -306.73358353177537 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -296.8049832322851 L 555.5681818181818 -306.8049832322851 L 568.0681818181818 -306.8049832322851 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -296.84000999433994 L 599.2045454545455 -306.84000999433994 L 611.7045454545455 -306.84000999433994 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -296.8692556766321 L 642.840909090909 -306.8692556766321 L 655.340909090909 -306.8692556766321 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -296.90206498700564 L 686.4772727272727 -306.90206498700564 L 698.9772727272727 -306.90206498700564 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -296.9700880283785 L 730.1136363636364 -306.9700880283785 L 742.6136363636364 -306.9700880283785 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 337.3863636363636 -296.2392862545531 L 349.8863636363636 -296.2392862545531 L 343.6363636363636 -306.2392862545531 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 381.02272727272725 -296.3783874098512 L 393.52272727272725 -296.3783874098512 L 387.27272727272725 -306.3783874098512 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 424.6590909090909 -296.48286191663567 L 437.1590909090909 -296.48286191663567 L 430.9090909090909 -306.48286191663567 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 468.2954545454545 -296.5661042300874 L 480.7954545454545 -296.5661042300874 L 474.5454545454545 -306.5661042300874 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 511.9318181818182 -296.6263344058552 L 524.4318181818182 -296.6263344058552 L 518.1818181818182 -306.6263344058552 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 555.5681818181818 -296.6796280337836 L 568.0681818181818 -296.6796280337836 L 561.8181818181818 -306.6796280337836 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 599.2045454545455 -296.7212996721245 L 611.7045454545455 -296.7212996721245 L 605.4545454545455 -306.7212996721245 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 642.840909090909 -296.7335723136387 L 655.340909090909 -296.7335723136387 L 649.090909090909 -306.7335723136387 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 686.4772727272727 -296.76732020811346 L 698.9772727272727 -296.76732020811346 L 692.7272727272727 -306.76732020811346 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 730.1136363636364 -296.80892079825543 L 742.6136363636364 -296.80892079825543 L 736.3636363636364 -306.80892079825543 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 343.6363636363636 -296.1712968675903 L 337.3863636363636 -306.1712968675903 L 349.8863636363636 -306.1712968675903 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 387.27272727272725 -296.32930806193093 L 381.02272727272725 -306.32930806193093 L 393.52272727272725 -306.32930806193093 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 430.9090909090909 -296.40729280866447 L 424.6590909090909 -306.40729280866447 L 437.1590909090909 -306.40729280866447 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 474.5454545454545 -296.45755380031375 L 468.2954545454545 -306.45755380031375 L 480.7954545454545 -306.45755380031375 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 518.1818181818182 -296.4845483765147 L 511.9318181818182 -306.4845483765147 L 524.4318181818182 -306.4845483765147 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 561.8181818181818 -296.54041095773994 L 555.5681818181818 -306.54041095773994 L 568.0681818181818 -306.54041095773994 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 605.4545454545455 -296.57519466016697 L 599.2045454545455 -306.57519466016697 L 611.7045454545455 -306.57519466016697 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 649.090909090909 -296.621211456777 L 642.840909090909 -306.621211456777 L 655.340909090909 -306.621211456777 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 692.7272727272727 -296.65509770827066 L 686.4772727272727 -306.65509770827066 L 698.9772727272727 -306.65509770827066 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 736.3636363636364 -296.6679574322705 L 730.1136363636364 -306.6679574322705 L 742.6136363636364 -306.6679574322705 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 336.4935064935065 -300.9334088007982 L 343.6363636363636 -308.07626594365536 L 350.7792207792208 -300.9334088007982 L 343.6363636363636 -293.790551657941 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 380.12987012987014 -301.01965009611905 L 387.27272727272725 -308.16250723897616 L 394.4155844155844 -301.01965009611905 L 387.27272727272725 -293.8767929532619 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 423.76623376623377 -301.06713646863255 L 430.9090909090909 -308.2099936114897 L 438.05194805194805 -301.06713646863255 L 430.9090909090909 -293.92427932577544 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 467.4025974025974 -301.10713660461 L 474.5454545454545 -308.2499937474671 L 481.68831168831167 -301.10713660461 L 474.5454545454545 -293.9642794617528 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 511.038961038961 -301.1326653442863 L 518.1818181818182 -308.27552248714346 L 525.3246753246754 -301.1326653442863 L 518.1818181818182 -293.9898082014292 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 554.6753246753246 -301.1821074119589 L 561.8181818181818 -308.324964554816 L 568.961038961039 -301.1821074119589 L 561.8181818181818 -294.03925026910173 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 598.3116883116883 -301.2198975750128 L 605.4545454545455 -308.36275471786996 L 612.5974025974026 -301.2198975750128 L 605.4545454545455 -294.0770404321556 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 641.9480519480519 -301.2404080682199 L 649.090909090909 -308.383265211077 L 656.2337662337662 -301.2404080682199 L 649.090909090909 -294.0975509253627 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 685.5844155844156 -301.27266021113894 L 692.7272727272727 -308.41551735399605 L 699.8701298701299 -301.27266021113894 L 692.7272727272727 -294.1298030682818 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 729.2207792207791 -301.28800662210006 L 736.3636363636364 -308.4308637649572 L 743.5064935064936 -301.28800662210006 L 736.3636363636364 -294.14514947924295 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 308.0 -40.33333333333337 L 301.75 -50.33333333333334 L 314.25 -50.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.18e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 2.35e-05
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 3.53e-05
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 4.71e-05
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 5.88e-05
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -323.429676730695 L 387.27272727272725 -342.3795027645908 L 430.9090909090909 -364.4003311050035 L 474.5454545454545 -384.1360250062465 L 518.1818181818182 -403.45627391290304 L 561.8181818181818 -425.6846377816645 L 605.4545454545455 -450.4655016801709 L 649.090909090909 -471.3880744408354 L 692.7272727272727 -492.5088342826257 L 736.3636363636364 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -318.429676730695 L 337.3863636363636 -328.429676730695 L 349.8863636363636 -328.429676730695 L 349.8863636363636 -318.429676730695 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -318.429676730695 L 337.3863636363636 -328.429676730695 L 349.8863636363636 -328.429676730695 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -337.3795027645908 L 381.02272727272725 -347.3795027645908 L 393.52272727272725 -347.3795027645908 L 393.52272727272725 -337.3795027645908 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -337.3795027645908 L 381.02272727272725 -347.3795027645908 L 393.52272727272725 -347.3795027645908 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -359.4003311050035 L 424.6590909090909 -369.4003311050035 L 437.1590909090909 -369.4003311050035 L 437.1590909090909 -359.4003311050035 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -359.4003311050035 L 424.6590909090909 -369.4003311050035 L 437.1590909090909 -369.4003311050035 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -379.1360250062465 L 468.2954545454545 -389.1360250062465 L 480.7954545454545 -389.1360250062465 L 480.7954545454545 -379.1360250062465 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -379.1360250062465 L 468.2954545454545 -389.1360250062465 L 480.7954545454545 -389.1360250062465 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -398.45627391290304 L 511.9318181818182 -408.45627391290304 L 524.4318181818182 -408.45627391290304 L 524.4318181818182 -398.45627391290304 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -398.45627391290304 L 511.9318181818182 -408.45627391290304 L 524.4318181818182 -408.45627391290304 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -420.6846377816645 L 555.5681818181818 -430.6846377816645 L 568.0681818181818 -430.6846377816645 L 568.0681818181818 -420.6846377816645 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -420.6846377816645 L 555.5681818181818 -430.6846377816645 L 568.0681818181818 -430.6846377816645 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -445.4655016801709 L 599.2045454545455 -455.4655016801709 L 611.7045454545455 -455.4655016801709 L 611.7045454545455 -445.4655016801709 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -445.4655016801709 L 599.2045454545455 -455.4655016801709 L 611.7045454545455 -455.4655016801709 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -466.3880744408354 L 642.840909090909 -476.3880744408354 L 655.340909090909 -476.3880744408354 L 655.340909090909 -466.3880744408354 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -466.3880744408354 L 642.840909090909 -476.3880744408354 L 655.340909090909 -476.3880744408354 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -487.5088342826257 L 686.4772727272727 -497.5088342826257 L 698.9772727272727 -497.5088342826257 L 698.9772727272727 -487.5088342826257 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -487.5088342826257 L 686.4772727272727 -497.5088342826257 L 698.9772727272727 -497.5088342826257 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -301.3565083039707 L 387.27272727272725 -301.4838790276935 L 430.9090909090909 -301.6225688513138 L 474.5454545454545 -301.6537328349761 L 518.1818181818182 -301.77161675445706 L 561.8181818181818 -301.8049832322851 L 605.4545454545455 -301.8358518050152 L 649.090909090909 -301.8753246885692 L 692.7272727272727 -301.9107515641652 L 736.3636363636364 -301.9612144822745" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 336.4935064935065 -294.21365116111355 L 336.4935064935065 -308.4993654468279 L 350.7792207792208 -308.4993654468279 L 350.7792207792208 -294.21365116111355 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -301.3565083039707 L 343.6363636363636 -308.4993654468279 L 350.7792207792208 -301.3565083039707 L 343.6363636363636 -294.21365116111355 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 380.12987012987014 -294.3410218848364 L 380.12987012987014 -308.62673617055066 L 394.4155844155844 -308.62673617055066 L 394.4155844155844 -294.3410218848364 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -301.4838790276935 L 387.27272727272725 -308.62673617055066 L 394.4155844155844 -301.4838790276935 L 387.27272727272725 -294.3410218848364 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 423.76623376623377 -294.47971170845665 L 423.76623376623377 -308.7654259941709 L 438.05194805194805 -308.7654259941709 L 438.05194805194805 -294.47971170845665 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -301.6225688513138 L 430.9090909090909 -308.7654259941709 L 438.05194805194805 -301.6225688513138 L 430.9090909090909 -294.47971170845665 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 467.4025974025974 -294.510875692119 L 467.4025974025974 -308.79658997783326 L 481.68831168831167 -308.79658997783326 L 481.68831168831167 -294.510875692119 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -301.6537328349761 L 474.5454545454545 -308.79658997783326 L 481.68831168831167 -301.6537328349761 L 474.5454545454545 -294.510875692119 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.038961038961 -294.62875961159995 L 511.038961038961 -308.9144738973142 L 525.3246753246754 -308.9144738973142 L 525.3246753246754 -294.62875961159995 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -301.77161675445706 L 518.1818181818182 -308.9144738973142 L 525.3246753246754 -301.77161675445706 L 518.1818181818182 -294.62875961159995 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 554.6753246753246 -294.662126089428 L 554.6753246753246 -308.9478403751423 L 568.961038961039 -308.9478403751423 L 568.961038961039 -294.662126089428 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -301.8049832322851 L 561.8181818181818 -308.9478403751423 L 568.961038961039 -301.8049832322851 L 561.8181818181818 -294.662126089428 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 598.3116883116883 -294.69299466215807 L 598.3116883116883 -308.97870894787235 L 612.5974025974026 -308.97870894787235 L 612.5974025974026 -294.69299466215807 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -301.8358518050152 L 605.4545454545455 -308.97870894787235 L 612.5974025974026 -301.8358518050152 L 605.4545454545455 -294.69299466215807 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 641.9480519480519 -294.7324675457121 L 641.9480519480519 -309.0181818314264 L 656.2337662337662 -309.0181818314264 L 656.2337662337662 -294.7324675457121 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -301.8753246885692 L 649.090909090909 -309.0181818314264 L 656.2337662337662 -301.8753246885692 L 649.090909090909 -294.7324675457121 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 685.5844155844156 -294.76789442130803 L 685.5844155844156 -309.05360870702236 L 699.8701298701299 -309.05360870702236 L 699.8701298701299 -294.76789442130803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -301.9107515641652 L 692.7272727272727 -309.05360870702236 L 699.8701298701299 -301.9107515641652 L 692.7272727272727 -294.76789442130803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 729.2207792207791 -294.81835733941733 L 729.2207792207791 -309.1040716251316 L 743.5064935064936 -309.1040716251316 L 743.5064935064936 -294.81835733941733 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -301.9612144822745 L 736.3636363636364 -309.1040716251316 L 743.5064935064936 -301.9612144822745 L 736.3636363636364 -294.81835733941733 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -301.2791218578594 L 387.27272727272725 -301.4747960763717 L 430.9090909090909 -301.6057453856914 L 474.5454545454545 -301.6537328349761 L 518.1818181818182 -301.73358353177537 L 561.8181818181818 -301.8049832322851 L 605.4545454545455 -301.84000999433994 L 649.090909090909 -301.8692556766321 L 692.7272727272727 -301.90206498700564 L 736.3636363636364 -301.9700880283785" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -296.2791218578594 L 337.3863636363636 -306.2791218578594 L 349.8863636363636 -306.2791218578594 L 349.8863636363636 -296.2791218578594 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.2791218578594 L 337.3863636363636 -306.2791218578594 L 349.8863636363636 -306.2791218578594 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -296.4747960763717 L 381.02272727272725 -306.4747960763717 L 393.52272727272725 -306.4747960763717 L 393.52272727272725 -296.4747960763717 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -296.4747960763717 L 381.02272727272725 -306.4747960763717 L 393.52272727272725 -306.4747960763717 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -296.6057453856914 L 424.6590909090909 -306.6057453856914 L 437.1590909090909 -306.6057453856914 L 437.1590909090909 -296.6057453856914 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -296.6057453856914 L 424.6590909090909 -306.6057453856914 L 437.1590909090909 -306.6057453856914 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -296.6537328349761 L 468.2954545454545 -306.6537328349761 L 480.7954545454545 -306.6537328349761 L 480.7954545454545 -296.6537328349761 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.6537328349761 L 468.2954545454545 -306.6537328349761 L 480.7954545454545 -306.6537328349761 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -296.73358353177537 L 511.9318181818182 -306.73358353177537 L 524.4318181818182 -306.73358353177537 L 524.4318181818182 -296.73358353177537 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.73358353177537 L 511.9318181818182 -306.73358353177537 L 524.4318181818182 -306.73358353177537 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -296.8049832322851 L 555.5681818181818 -306.8049832322851 L 568.0681818181818 -306.8049832322851 L 568.0681818181818 -296.8049832322851 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -296.8049832322851 L 555.5681818181818 -306.8049832322851 L 568.0681818181818 -306.8049832322851 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -296.84000999433994 L 599.2045454545455 -306.84000999433994 L 611.7045454545455 -306.84000999433994 L 611.7045454545455 -296.84000999433994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -296.84000999433994 L 599.2045454545455 -306.84000999433994 L 611.7045454545455 -306.84000999433994 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -296.8692556766321 L 642.840909090909 -306.8692556766321 L 655.340909090909 -306.8692556766321 L 655.340909090909 -296.8692556766321 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -296.8692556766321 L 642.840909090909 -306.8692556766321 L 655.340909090909 -306.8692556766321 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -296.90206498700564 L 686.4772727272727 -306.90206498700564 L 698.9772727272727 -306.90206498700564 L 698.9772727272727 -296.90206498700564 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -296.90206498700564 L 686.4772727272727 -306.90206498700564 L 698.9772727272727 -306.90206498700564 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -296.9700880283785 L 730.1136363636364 -306.9700880283785 L 742.6136363636364 -306.9700880283785 L 742.6136363636364 -296.9700880283785 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.9700880283785 L 730.1136363636364 -306.9700880283785 L 742.6136363636364 -306.9700880283785 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -301.2392862545531 L 387.27272727272725 -301.3783874098512 L 430.9090909090909 -301.48286191663567 L 474.5454545454545 -301.5661042300874 L 518.1818181818182 -301.6263344058552 L 561.8181818181818 -301.6796280337836 L 605.4545454545455 -301.7212996721245 L 649.090909090909 -301.7335723136387 L 692.7272727272727 -301.76732020811346 L 736.3636363636364 -301.80892079825543" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 337.3863636363636 -296.2392862545531 L 337.3863636363636 -306.2392862545531 L 349.8863636363636 -306.2392862545531 L 349.8863636363636 -296.2392862545531 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -296.2392862545531 L 349.8863636363636 -296.2392862545531 L 343.6363636363636 -306.2392862545531 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 381.02272727272725 -296.3783874098512 L 381.02272727272725 -306.3783874098512 L 393.52272727272725 -306.3783874098512 L 393.52272727272725 -296.3783874098512 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -296.3783874098512 L 393.52272727272725 -296.3783874098512 L 387.27272727272725 -306.3783874098512 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 424.6590909090909 -296.48286191663567 L 424.6590909090909 -306.48286191663567 L 437.1590909090909 -306.48286191663567 L 437.1590909090909 -296.48286191663567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -296.48286191663567 L 437.1590909090909 -296.48286191663567 L 430.9090909090909 -306.48286191663567 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 468.2954545454545 -296.5661042300874 L 468.2954545454545 -306.5661042300874 L 480.7954545454545 -306.5661042300874 L 480.7954545454545 -296.5661042300874 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -296.5661042300874 L 480.7954545454545 -296.5661042300874 L 474.5454545454545 -306.5661042300874 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 511.9318181818182 -296.6263344058552 L 511.9318181818182 -306.6263344058552 L 524.4318181818182 -306.6263344058552 L 524.4318181818182 -296.6263344058552 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -296.6263344058552 L 524.4318181818182 -296.6263344058552 L 518.1818181818182 -306.6263344058552 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 555.5681818181818 -296.6796280337836 L 555.5681818181818 -306.6796280337836 L 568.0681818181818 -306.6796280337836 L 568.0681818181818 -296.6796280337836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -296.6796280337836 L 568.0681818181818 -296.6796280337836 L 561.8181818181818 -306.6796280337836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 599.2045454545455 -296.7212996721245 L 599.2045454545455 -306.7212996721245 L 611.7045454545455 -306.7212996721245 L 611.7045454545455 -296.7212996721245 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -296.7212996721245 L 611.7045454545455 -296.7212996721245 L 605.4545454545455 -306.7212996721245 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 642.840909090909 -296.7335723136387 L 642.840909090909 -306.7335723136387 L 655.340909090909 -306.7335723136387 L 655.340909090909 -296.7335723136387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -296.7335723136387 L 655.340909090909 -296.7335723136387 L 649.090909090909 -306.7335723136387 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 686.4772727272727 -296.76732020811346 L 686.4772727272727 -306.76732020811346 L 698.9772727272727 -306.76732020811346 L 698.9772727272727 -296.76732020811346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -296.76732020811346 L 698.9772727272727 -296.76732020811346 L 692.7272727272727 -306.76732020811346 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 730.1136363636364 -296.80892079825543 L 730.1136363636364 -306.80892079825543 L 742.6136363636364 -306.80892079825543 L 742.6136363636364 -296.80892079825543 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -296.80892079825543 L 742.6136363636364 -296.80892079825543 L 736.3636363636364 -306.80892079825543 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 343.6363636363636 -301.1712968675903 L 387.27272727272725 -301.32930806193093 L 430.9090909090909 -301.40729280866447 L 474.5454545454545 -301.45755380031375 L 518.1818181818182 -301.4845483765147 L 561.8181818181818 -301.54041095773994 L 605.4545454545455 -301.57519466016697 L 649.090909090909 -301.621211456777 L 692.7272727272727 -301.65509770827066 L 736.3636363636364 -301.6679574322705" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip51);">
+ <path d="M 337.3863636363636 -296.1712968675903 L 337.3863636363636 -306.1712968675903 L 349.8863636363636 -306.1712968675903 L 349.8863636363636 -296.1712968675903 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.1712968675903 L 337.3863636363636 -306.1712968675903 L 349.8863636363636 -306.1712968675903 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip52);">
+ <path d="M 381.02272727272725 -296.32930806193093 L 381.02272727272725 -306.32930806193093 L 393.52272727272725 -306.32930806193093 L 393.52272727272725 -296.32930806193093 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -296.32930806193093 L 381.02272727272725 -306.32930806193093 L 393.52272727272725 -306.32930806193093 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip53);">
+ <path d="M 424.6590909090909 -296.40729280866447 L 424.6590909090909 -306.40729280866447 L 437.1590909090909 -306.40729280866447 L 437.1590909090909 -296.40729280866447 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -296.40729280866447 L 424.6590909090909 -306.40729280866447 L 437.1590909090909 -306.40729280866447 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip54);">
+ <path d="M 468.2954545454545 -296.45755380031375 L 468.2954545454545 -306.45755380031375 L 480.7954545454545 -306.45755380031375 L 480.7954545454545 -296.45755380031375 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.45755380031375 L 468.2954545454545 -306.45755380031375 L 480.7954545454545 -306.45755380031375 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip55);">
+ <path d="M 511.9318181818182 -296.4845483765147 L 511.9318181818182 -306.4845483765147 L 524.4318181818182 -306.4845483765147 L 524.4318181818182 -296.4845483765147 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.4845483765147 L 511.9318181818182 -306.4845483765147 L 524.4318181818182 -306.4845483765147 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip56);">
+ <path d="M 555.5681818181818 -296.54041095773994 L 555.5681818181818 -306.54041095773994 L 568.0681818181818 -306.54041095773994 L 568.0681818181818 -296.54041095773994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -296.54041095773994 L 555.5681818181818 -306.54041095773994 L 568.0681818181818 -306.54041095773994 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip57);">
+ <path d="M 599.2045454545455 -296.57519466016697 L 599.2045454545455 -306.57519466016697 L 611.7045454545455 -306.57519466016697 L 611.7045454545455 -296.57519466016697 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -296.57519466016697 L 599.2045454545455 -306.57519466016697 L 611.7045454545455 -306.57519466016697 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip58);">
+ <path d="M 642.840909090909 -296.621211456777 L 642.840909090909 -306.621211456777 L 655.340909090909 -306.621211456777 L 655.340909090909 -296.621211456777 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -296.621211456777 L 642.840909090909 -306.621211456777 L 655.340909090909 -306.621211456777 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip59);">
+ <path d="M 686.4772727272727 -296.65509770827066 L 686.4772727272727 -306.65509770827066 L 698.9772727272727 -306.65509770827066 L 698.9772727272727 -296.65509770827066 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -296.65509770827066 L 686.4772727272727 -306.65509770827066 L 698.9772727272727 -306.65509770827066 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip60);">
+ <path d="M 730.1136363636364 -296.6679574322705 L 730.1136363636364 -306.6679574322705 L 742.6136363636364 -306.6679574322705 L 742.6136363636364 -296.6679574322705 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.6679574322705 L 730.1136363636364 -306.6679574322705 L 742.6136363636364 -306.6679574322705 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 343.6363636363636 -300.94785402144703 L 387.27272727272725 -301.1340227388231 L 430.9090909090909 -301.22201780284297 L 474.5454545454545 -301.31006895754615 L 518.1818181818182 -301.3515835419737 L 561.8181818181818 -301.39081336589993 L 605.4545454545455 -301.4318680067241 L 649.090909090909 -301.4542033168291 L 692.7272727272727 -301.50028742225913 L 736.3636363636364 -301.5174287350871" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <path d="M 336.4935064935065 -300.94785402144703 L 350.7792207792208 -300.94785402144703" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -293.8049968785899 L 343.6363636363636 -308.0907111643042" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -301.1340227388231 L 394.4155844155844 -301.1340227388231" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -293.9911655959659 L 387.27272727272725 -308.2768798816802" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -301.22201780284297 L 438.05194805194805 -301.22201780284297" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -294.0791606599858 L 430.9090909090909 -308.3648749457001" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -301.31006895754615 L 481.68831168831167 -301.31006895754615" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -294.167211814689 L 474.5454545454545 -308.4529261004033" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -301.3515835419737 L 525.3246753246754 -301.3515835419737" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -294.20872639911653 L 518.1818181818182 -308.4944406848308" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -301.39081336589993 L 568.961038961039 -301.39081336589993" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -294.24795622304276 L 561.8181818181818 -308.53367050875704" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -301.4318680067241 L 612.5974025974026 -301.4318680067241" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -294.28901086386696 L 605.4545454545455 -308.57472514958124" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -301.4542033168291 L 656.2337662337662 -301.4542033168291" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -294.3113461739719 L 649.090909090909 -308.5970604596862" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -301.50028742225913 L 699.8701298701299 -301.50028742225913" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -294.357430279402 L 692.7272727272727 -308.6431445651163" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -301.5174287350871 L 743.5064935064936 -301.5174287350871" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -294.37457159223 L 736.3636363636364 -308.66028587794426" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 343.6363636363636 -300.9334088007982 L 387.27272727272725 -301.01965009611905 L 430.9090909090909 -301.06713646863255 L 474.5454545454545 -301.10713660461 L 518.1818181818182 -301.1326653442863 L 561.8181818181818 -301.1821074119589 L 605.4545454545455 -301.2198975750128 L 649.090909090909 -301.2404080682199 L 692.7272727272727 -301.27266021113894 L 736.3636363636364 -301.28800662210006" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip65);">
+ <path d="M 336.4935064935065 -293.790551657941 L 336.4935064935065 -308.07626594365536 L 350.7792207792208 -308.07626594365536 L 350.7792207792208 -293.790551657941 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 336.4935064935065 -300.9334088007982 L 343.6363636363636 -308.07626594365536 L 350.7792207792208 -300.9334088007982 L 343.6363636363636 -293.790551657941 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip66);">
+ <path d="M 380.12987012987014 -293.8767929532619 L 380.12987012987014 -308.16250723897616 L 394.4155844155844 -308.16250723897616 L 394.4155844155844 -293.8767929532619 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.12987012987014 -301.01965009611905 L 387.27272727272725 -308.16250723897616 L 394.4155844155844 -301.01965009611905 L 387.27272727272725 -293.8767929532619 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip67);">
+ <path d="M 423.76623376623377 -293.92427932577544 L 423.76623376623377 -308.2099936114897 L 438.05194805194805 -308.2099936114897 L 438.05194805194805 -293.92427932577544 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 423.76623376623377 -301.06713646863255 L 430.9090909090909 -308.2099936114897 L 438.05194805194805 -301.06713646863255 L 430.9090909090909 -293.92427932577544 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip68);">
+ <path d="M 467.4025974025974 -293.9642794617528 L 467.4025974025974 -308.2499937474671 L 481.68831168831167 -308.2499937474671 L 481.68831168831167 -293.9642794617528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 467.4025974025974 -301.10713660461 L 474.5454545454545 -308.2499937474671 L 481.68831168831167 -301.10713660461 L 474.5454545454545 -293.9642794617528 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip69);">
+ <path d="M 511.038961038961 -293.9898082014292 L 511.038961038961 -308.27552248714346 L 525.3246753246754 -308.27552248714346 L 525.3246753246754 -293.9898082014292 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.038961038961 -301.1326653442863 L 518.1818181818182 -308.27552248714346 L 525.3246753246754 -301.1326653442863 L 518.1818181818182 -293.9898082014292 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip70);">
+ <path d="M 554.6753246753246 -294.03925026910173 L 554.6753246753246 -308.324964554816 L 568.961038961039 -308.324964554816 L 568.961038961039 -294.03925026910173 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 554.6753246753246 -301.1821074119589 L 561.8181818181818 -308.324964554816 L 568.961038961039 -301.1821074119589 L 561.8181818181818 -294.03925026910173 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip71);">
+ <path d="M 598.3116883116883 -294.0770404321556 L 598.3116883116883 -308.36275471786996 L 612.5974025974026 -308.36275471786996 L 612.5974025974026 -294.0770404321556 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 598.3116883116883 -301.2198975750128 L 605.4545454545455 -308.36275471786996 L 612.5974025974026 -301.2198975750128 L 605.4545454545455 -294.0770404321556 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip72);">
+ <path d="M 641.9480519480519 -294.0975509253627 L 641.9480519480519 -308.383265211077 L 656.2337662337662 -308.383265211077 L 656.2337662337662 -294.0975509253627 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.9480519480519 -301.2404080682199 L 649.090909090909 -308.383265211077 L 656.2337662337662 -301.2404080682199 L 649.090909090909 -294.0975509253627 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip73);">
+ <path d="M 685.5844155844156 -294.1298030682818 L 685.5844155844156 -308.41551735399605 L 699.8701298701299 -308.41551735399605 L 699.8701298701299 -294.1298030682818 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 685.5844155844156 -301.27266021113894 L 692.7272727272727 -308.41551735399605 L 699.8701298701299 -301.27266021113894 L 692.7272727272727 -294.1298030682818 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip74);">
+ <path d="M 729.2207792207791 -294.14514947924295 L 729.2207792207791 -308.4308637649572 L 743.5064935064936 -308.4308637649572 L 743.5064935064936 -294.14514947924295 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 729.2207792207791 -301.28800662210006 L 736.3636363636364 -308.4308637649572 L 743.5064935064936 -301.28800662210006 L 736.3636363636364 -294.14514947924295 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 6 L 290 -136 L 456.72 -136 L 456.72 6 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ binary_heap
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 300.85714285714283 -98.1904761904762 L 300.85714285714283 -112.47619047619048 L 315.14285714285717 -112.47619047619048 L 315.14285714285717 -98.1904761904762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -105.33333333333334 L 308.0 -112.47619047619048 L 315.14285714285717 -105.33333333333334 L 308.0 -98.1904761904762 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip78);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ thin_heap
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip80);">
+ <path d="M 301.75 -40.33333333333337 L 301.75 -50.33333333333334 L 314.25 -50.33333333333334 L 314.25 -40.33333333333337 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -40.33333333333337 L 301.75 -50.33333333333334 L 314.25 -50.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -25.333333333333314 L 316 -25.333333333333314" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -25.333333333333314 L 315.14285714285717 -25.333333333333314" style="stroke-width:1;"/>
+ <path d="M 308.0 -18.190476190476147 L 308.0 -32.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-20.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -5.333333333333314 L 316 -5.333333333333314" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:5,2,5,2;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip81);">
+ <path d="M 300.85714285714283 1.8095238095238528 L 300.85714285714283 -12.476190476190482 L 315.14285714285717 -12.476190476190482 L 315.14285714285717 1.8095238095238528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.85714285714283 -5.333333333333314 L 308.0 -12.476190476190482 L 315.14285714285717 -5.333333333333314 L 308.0 1.8095238095238528 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-0.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png b/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png
new file mode 100644
index 0000000000..4387489151
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.png b/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.png
new file mode 100644
index 0000000000..338e33c15c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png b/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png
new file mode 100644
index 0000000000..33ba84bfe3
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_simple_list.png b/libstdc++-v3/doc/xml/images/pbds_simple_list.png
new file mode 100644
index 0000000000..9a05d3f5e4
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_simple_list.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdf
new file mode 100644
index 0000000000..988ffaf5eb
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_int_find.png b/libstdc++-v3/doc/xml/images/pbds_tree_int_find.png
new file mode 100644
index 0000000000..31bd80c5d8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_int_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg b/libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg
new file mode 100644
index 0000000000..40f97176df
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg
@@ -0,0 +1,501 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 496" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -442.3171620078976 L 349.8863636363636 -442.3171620078976 L 343.6363636363636 -452.3171620078976 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -461.4040047794395 L 393.52272727272725 -461.4040047794395 L 387.27272727272725 -471.4040047794395 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -472.6428834767313 L 437.1590909090909 -472.6428834767313 L 430.9090909090909 -482.6428834767313 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -482.85471569885976 L 480.7954545454545 -482.85471569885976 L 474.5454545454545 -492.85471569885976 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -490.70463419076003 L 524.4318181818182 -490.70463419076003 L 518.1818181818182 -500.70463419076003 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -496.39589838804966 L 568.0681818181818 -496.39589838804966 L 561.8181818181818 -506.39589838804966 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -502.34710013281153 L 611.7045454545455 -502.34710013281153 L 605.4545454545455 -512.3471001328115 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -506.41522047163653 L 655.340909090909 -506.41522047163653 L 649.090909090909 -516.4152204716365 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -511.3413301588853 L 698.9772727272727 -511.3413301588853 L 692.7272727272727 -521.3413301588853 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -339.8071744895194 L 337.3863636363636 -349.8071744895194 L 349.8863636363636 -349.8071744895194 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -349.47098800254076 L 381.02272727272725 -359.47098800254076 L 393.52272727272725 -359.47098800254076 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -354.611888189543 L 424.6590909090909 -364.611888189543 L 437.1590909090909 -364.611888189543 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -356.92533236204696 L 468.2954545454545 -366.925332362047 L 480.7954545454545 -366.925332362047 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -360.18999160488784 L 511.9318181818182 -370.18999160488784 L 524.4318181818182 -370.18999160488784 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -361.73769494205595 L 555.5681818181818 -371.73769494205595 L 568.0681818181818 -371.73769494205595 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -362.9064366968565 L 599.2045454545455 -372.9064366968565 L 611.7045454545455 -372.9064366968565 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -364.3109789411498 L 642.840909090909 -374.3109789411498 L 655.340909090909 -374.3109789411498 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -365.96646841172475 L 686.4772727272727 -375.96646841172475 L 698.9772727272727 -375.96646841172475 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -366.88836721730905 L 730.1136363636364 -376.88836721730905 L 742.6136363636364 -376.88836721730905 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -342.7619608139261 L 337.3863636363636 -352.7619608139261 L 349.8863636363636 -352.7619608139261 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -347.4715210255363 L 381.02272727272725 -357.4715210255363 L 393.52272727272725 -357.4715210255363 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -351.3141015675318 L 424.6590909090909 -361.3141015675318 L 437.1590909090909 -361.3141015675318 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -354.7129315820567 L 468.2954545454545 -364.7129315820567 L 480.7954545454545 -364.7129315820567 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -357.5798668330883 L 511.9318181818182 -367.5798668330883 L 524.4318181818182 -367.5798668330883 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -359.9633768783508 L 555.5681818181818 -369.9633768783508 L 568.0681818181818 -369.9633768783508 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -361.3943037609214 L 599.2045454545455 -371.3943037609214 L 611.7045454545455 -371.3943037609214 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -363.8192474603675 L 642.840909090909 -373.8192474603675 L 655.340909090909 -373.8192474603675 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -365.2301415620239 L 686.4772727272727 -375.2301415620239 L 698.9772727272727 -375.2301415620239 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -366.88836721730905 L 730.1136363636364 -376.88836721730905 L 742.6136363636364 -376.88836721730905 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -54 L 290 -136 L 444.272 -136 L 444.272 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 4.50e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 9.01e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.35e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.80e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 2.25e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -447.3171620078976 L 387.27272727272725 -466.4040047794395 L 430.9090909090909 -477.6428834767313 L 474.5454545454545 -487.85471569885976 L 518.1818181818182 -495.70463419076003 L 561.8181818181818 -501.39589838804966 L 605.4545454545455 -507.34710013281153 L 649.090909090909 -511.41522047163653 L 692.7272727272727 -516.3413301588853 L 736.3636363636364 -520.0" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -442.3171620078976 L 337.3863636363636 -452.3171620078976 L 349.8863636363636 -452.3171620078976 L 349.8863636363636 -442.3171620078976 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -442.3171620078976 L 349.8863636363636 -442.3171620078976 L 343.6363636363636 -452.3171620078976 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -461.4040047794395 L 381.02272727272725 -471.4040047794395 L 393.52272727272725 -471.4040047794395 L 393.52272727272725 -461.4040047794395 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -461.4040047794395 L 393.52272727272725 -461.4040047794395 L 387.27272727272725 -471.4040047794395 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -472.6428834767313 L 424.6590909090909 -482.6428834767313 L 437.1590909090909 -482.6428834767313 L 437.1590909090909 -472.6428834767313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -472.6428834767313 L 437.1590909090909 -472.6428834767313 L 430.9090909090909 -482.6428834767313 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -482.85471569885976 L 468.2954545454545 -492.85471569885976 L 480.7954545454545 -492.85471569885976 L 480.7954545454545 -482.85471569885976 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -482.85471569885976 L 480.7954545454545 -482.85471569885976 L 474.5454545454545 -492.85471569885976 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -490.70463419076003 L 511.9318181818182 -500.70463419076003 L 524.4318181818182 -500.70463419076003 L 524.4318181818182 -490.70463419076003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -490.70463419076003 L 524.4318181818182 -490.70463419076003 L 518.1818181818182 -500.70463419076003 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -496.39589838804966 L 555.5681818181818 -506.39589838804966 L 568.0681818181818 -506.39589838804966 L 568.0681818181818 -496.39589838804966 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -496.39589838804966 L 568.0681818181818 -496.39589838804966 L 561.8181818181818 -506.39589838804966 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -502.34710013281153 L 599.2045454545455 -512.3471001328115 L 611.7045454545455 -512.3471001328115 L 611.7045454545455 -502.34710013281153 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -502.34710013281153 L 611.7045454545455 -502.34710013281153 L 605.4545454545455 -512.3471001328115 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -506.41522047163653 L 642.840909090909 -516.4152204716365 L 655.340909090909 -516.4152204716365 L 655.340909090909 -506.41522047163653 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -506.41522047163653 L 655.340909090909 -506.41522047163653 L 649.090909090909 -516.4152204716365 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -511.3413301588853 L 686.4772727272727 -521.3413301588853 L 698.9772727272727 -521.3413301588853 L 698.9772727272727 -511.3413301588853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -511.3413301588853 L 698.9772727272727 -511.3413301588853 L 692.7272727272727 -521.3413301588853 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -344.8071744895194 L 387.27272727272725 -354.47098800254076 L 430.9090909090909 -359.611888189543 L 474.5454545454545 -361.92533236204696 L 518.1818181818182 -365.18999160488784 L 561.8181818181818 -366.73769494205595 L 605.4545454545455 -367.9064366968565 L 649.090909090909 -369.3109789411498 L 692.7272727272727 -370.96646841172475 L 736.3636363636364 -371.88836721730905" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -339.8071744895194 L 337.3863636363636 -349.8071744895194 L 349.8863636363636 -349.8071744895194 L 349.8863636363636 -339.8071744895194 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -339.8071744895194 L 337.3863636363636 -349.8071744895194 L 349.8863636363636 -349.8071744895194 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -349.47098800254076 L 381.02272727272725 -359.47098800254076 L 393.52272727272725 -359.47098800254076 L 393.52272727272725 -349.47098800254076 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -349.47098800254076 L 381.02272727272725 -359.47098800254076 L 393.52272727272725 -359.47098800254076 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -354.611888189543 L 424.6590909090909 -364.611888189543 L 437.1590909090909 -364.611888189543 L 437.1590909090909 -354.611888189543 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -354.611888189543 L 424.6590909090909 -364.611888189543 L 437.1590909090909 -364.611888189543 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -356.92533236204696 L 468.2954545454545 -366.925332362047 L 480.7954545454545 -366.925332362047 L 480.7954545454545 -356.92533236204696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -356.92533236204696 L 468.2954545454545 -366.925332362047 L 480.7954545454545 -366.925332362047 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -360.18999160488784 L 511.9318181818182 -370.18999160488784 L 524.4318181818182 -370.18999160488784 L 524.4318181818182 -360.18999160488784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -360.18999160488784 L 511.9318181818182 -370.18999160488784 L 524.4318181818182 -370.18999160488784 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -361.73769494205595 L 555.5681818181818 -371.73769494205595 L 568.0681818181818 -371.73769494205595 L 568.0681818181818 -361.73769494205595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -361.73769494205595 L 555.5681818181818 -371.73769494205595 L 568.0681818181818 -371.73769494205595 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -362.9064366968565 L 599.2045454545455 -372.9064366968565 L 611.7045454545455 -372.9064366968565 L 611.7045454545455 -362.9064366968565 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -362.9064366968565 L 599.2045454545455 -372.9064366968565 L 611.7045454545455 -372.9064366968565 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -364.3109789411498 L 642.840909090909 -374.3109789411498 L 655.340909090909 -374.3109789411498 L 655.340909090909 -364.3109789411498 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -364.3109789411498 L 642.840909090909 -374.3109789411498 L 655.340909090909 -374.3109789411498 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -365.96646841172475 L 686.4772727272727 -375.96646841172475 L 698.9772727272727 -375.96646841172475 L 698.9772727272727 -365.96646841172475 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -365.96646841172475 L 686.4772727272727 -375.96646841172475 L 698.9772727272727 -375.96646841172475 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -366.88836721730905 L 730.1136363636364 -376.88836721730905 L 742.6136363636364 -376.88836721730905 L 742.6136363636364 -366.88836721730905 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -366.88836721730905 L 730.1136363636364 -376.88836721730905 L 742.6136363636364 -376.88836721730905 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -347.7619608139261 L 387.27272727272725 -352.4715210255363 L 430.9090909090909 -356.3141015675318 L 474.5454545454545 -359.7129315820567 L 518.1818181818182 -362.5798668330883 L 561.8181818181818 -364.9633768783508 L 605.4545454545455 -366.3943037609214 L 649.090909090909 -368.8192474603675 L 692.7272727272727 -370.2301415620239 L 736.3636363636364 -371.88836721730905" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -342.7619608139261 L 337.3863636363636 -352.7619608139261 L 349.8863636363636 -352.7619608139261 L 349.8863636363636 -342.7619608139261 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -342.7619608139261 L 337.3863636363636 -352.7619608139261 L 349.8863636363636 -352.7619608139261 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -347.4715210255363 L 381.02272727272725 -357.4715210255363 L 393.52272727272725 -357.4715210255363 L 393.52272727272725 -347.4715210255363 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -347.4715210255363 L 381.02272727272725 -357.4715210255363 L 393.52272727272725 -357.4715210255363 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -351.3141015675318 L 424.6590909090909 -361.3141015675318 L 437.1590909090909 -361.3141015675318 L 437.1590909090909 -351.3141015675318 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -351.3141015675318 L 424.6590909090909 -361.3141015675318 L 437.1590909090909 -361.3141015675318 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -354.7129315820567 L 468.2954545454545 -364.7129315820567 L 480.7954545454545 -364.7129315820567 L 480.7954545454545 -354.7129315820567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -354.7129315820567 L 468.2954545454545 -364.7129315820567 L 480.7954545454545 -364.7129315820567 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -357.5798668330883 L 511.9318181818182 -367.5798668330883 L 524.4318181818182 -367.5798668330883 L 524.4318181818182 -357.5798668330883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -357.5798668330883 L 511.9318181818182 -367.5798668330883 L 524.4318181818182 -367.5798668330883 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -359.9633768783508 L 555.5681818181818 -369.9633768783508 L 568.0681818181818 -369.9633768783508 L 568.0681818181818 -359.9633768783508 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -359.9633768783508 L 555.5681818181818 -369.9633768783508 L 568.0681818181818 -369.9633768783508 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -361.3943037609214 L 599.2045454545455 -371.3943037609214 L 611.7045454545455 -371.3943037609214 L 611.7045454545455 -361.3943037609214 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -361.3943037609214 L 599.2045454545455 -371.3943037609214 L 611.7045454545455 -371.3943037609214 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -363.8192474603675 L 642.840909090909 -373.8192474603675 L 655.340909090909 -373.8192474603675 L 655.340909090909 -363.8192474603675 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -363.8192474603675 L 642.840909090909 -373.8192474603675 L 655.340909090909 -373.8192474603675 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -365.2301415620239 L 686.4772727272727 -375.2301415620239 L 698.9772727272727 -375.2301415620239 L 698.9772727272727 -365.2301415620239 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -365.2301415620239 L 686.4772727272727 -375.2301415620239 L 698.9772727272727 -375.2301415620239 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -366.88836721730905 L 730.1136363636364 -376.88836721730905 L 742.6136363636364 -376.88836721730905 L 742.6136363636364 -366.88836721730905 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -366.88836721730905 L 730.1136363636364 -376.88836721730905 L 742.6136363636364 -376.88836721730905 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -339.30177541076085 L 387.27272727272725 -351.60913423739953 L 430.9090909090909 -357.9247371530353 L 474.5454545454545 -361.6438962204228 L 518.1818181818182 -363.8085114888665 L 561.8181818181818 -364.9633768783508 L 605.4545454545455 -366.7334929441081 L 649.090909090909 -367.6362384567208 L 692.7272727272727 -368.9388578205578 L 736.3636363636364 -369.73235138652603" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 338.6363636363636 -334.30177541076085 L 348.6363636363636 -344.30177541076085" style="stroke-width:1;"/>
+ <path d="M 348.6363636363636 -334.30177541076085 L 338.6363636363636 -344.30177541076085" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -332.23177541076086 L 343.6363636363636 -346.37177541076085" style="stroke-width:1;"/>
+ <path d="M 336.56636363636363 -339.30177541076085 L 350.7063636363636 -339.30177541076085" style="stroke-width:1;"/>
+ <path d="M 382.27272727272725 -346.60913423739953 L 392.27272727272725 -356.60913423739953" style="stroke-width:1;"/>
+ <path d="M 392.27272727272725 -346.60913423739953 L 382.27272727272725 -356.60913423739953" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -344.53913423739954 L 387.27272727272725 -358.6791342373996" style="stroke-width:1;"/>
+ <path d="M 380.20272727272726 -351.60913423739953 L 394.34272727272725 -351.60913423739953" style="stroke-width:1;"/>
+ <path d="M 425.9090909090909 -352.9247371530353 L 435.9090909090909 -362.9247371530353" style="stroke-width:1;"/>
+ <path d="M 435.9090909090909 -352.9247371530353 L 425.9090909090909 -362.9247371530353" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -350.85473715303533 L 430.9090909090909 -364.9947371530353" style="stroke-width:1;"/>
+ <path d="M 423.83909090909094 -357.9247371530353 L 437.9790909090909 -357.9247371530353" style="stroke-width:1;"/>
+ <path d="M 469.5454545454545 -356.6438962204228 L 479.5454545454545 -366.6438962204228" style="stroke-width:1;"/>
+ <path d="M 479.5454545454545 -356.6438962204228 L 469.5454545454545 -366.6438962204228" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -354.5738962204228 L 474.5454545454545 -368.7138962204228" style="stroke-width:1;"/>
+ <path d="M 467.47545454545457 -361.6438962204228 L 481.61545454545455 -361.6438962204228" style="stroke-width:1;"/>
+ <path d="M 513.1818181818182 -358.8085114888665 L 523.1818181818182 -368.8085114888665" style="stroke-width:1;"/>
+ <path d="M 523.1818181818182 -358.8085114888665 L 513.1818181818182 -368.8085114888665" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -356.7385114888665 L 518.1818181818182 -370.8785114888665" style="stroke-width:1;"/>
+ <path d="M 511.1118181818182 -363.8085114888665 L 525.2518181818182 -363.8085114888665" style="stroke-width:1;"/>
+ <path d="M 556.8181818181818 -359.9633768783508 L 566.8181818181818 -369.9633768783508" style="stroke-width:1;"/>
+ <path d="M 566.8181818181818 -359.9633768783508 L 556.8181818181818 -369.9633768783508" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -357.8933768783508 L 561.8181818181818 -372.0333768783508" style="stroke-width:1;"/>
+ <path d="M 554.7481818181818 -364.9633768783508 L 568.8881818181818 -364.9633768783508" style="stroke-width:1;"/>
+ <path d="M 600.4545454545455 -361.7334929441081 L 610.4545454545455 -371.7334929441081" style="stroke-width:1;"/>
+ <path d="M 610.4545454545455 -361.7334929441081 L 600.4545454545455 -371.7334929441081" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -359.6634929441081 L 605.4545454545455 -373.8034929441081" style="stroke-width:1;"/>
+ <path d="M 598.3845454545454 -366.7334929441081 L 612.5245454545454 -366.7334929441081" style="stroke-width:1;"/>
+ <path d="M 644.090909090909 -362.6362384567208 L 654.090909090909 -372.6362384567208" style="stroke-width:1;"/>
+ <path d="M 654.090909090909 -362.6362384567208 L 644.090909090909 -372.6362384567208" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -360.5662384567207 L 649.090909090909 -374.7062384567207" style="stroke-width:1;"/>
+ <path d="M 642.0209090909091 -367.6362384567208 L 656.1609090909091 -367.6362384567208" style="stroke-width:1;"/>
+ <path d="M 687.7272727272727 -363.9388578205578 L 697.7272727272727 -373.9388578205578" style="stroke-width:1;"/>
+ <path d="M 697.7272727272727 -363.9388578205578 L 687.7272727272727 -373.9388578205578" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -361.8688578205578 L 692.7272727272727 -376.0088578205578" style="stroke-width:1;"/>
+ <path d="M 685.6572727272728 -368.9388578205578 L 699.7972727272727 -368.9388578205578" style="stroke-width:1;"/>
+ <path d="M 731.3636363636364 -364.73235138652603 L 741.3636363636364 -374.73235138652603" style="stroke-width:1;"/>
+ <path d="M 741.3636363636364 -364.73235138652603 L 731.3636363636364 -374.73235138652603" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -362.66235138652604 L 736.3636363636364 -376.8023513865261" style="stroke-width:1;"/>
+ <path d="M 729.2936363636363 -369.73235138652603 L 743.4336363636364 -369.73235138652603" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -54 L 290 -136 L 444.272 -136 L 444.272 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ splay_tree_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ rb_tree_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip42);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ n_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 303.0 -60.33333333333334 L 313.0 -70.33333333333334" style="stroke-width:1;"/>
+ <path d="M 313.0 -60.33333333333334 L 303.0 -70.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -58.26333333333335 L 308.0 -72.40333333333334" style="stroke-width:1;"/>
+ <path d="M 300.93 -65.33333333333334 L 315.07 -65.33333333333334" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ ov_tree_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png b/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png
new file mode 100644
index 0000000000..bbd91842ba
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png b/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png
new file mode 100644
index 0000000000..b375f5168d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png b/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png
new file mode 100644
index 0000000000..5cae5781a1
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdf
new file mode 100644
index 0000000000..ddbdc70fd7
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.png b/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.png
new file mode 100644
index 0000000000..76177087f3
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg b/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg
new file mode 100644
index 0000000000..eec7c40f42
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg
@@ -0,0 +1,442 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -316.5437748370624 L 337.3863636363636 -326.5437748370624 L 349.8863636363636 -326.5437748370624 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -338.0876439598728 L 381.02272727272725 -348.0876439598728 L 393.52272727272725 -348.0876439598728 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -358.43497979820705 L 424.6590909090909 -368.4349797982071 L 437.1590909090909 -368.4349797982071 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -380.3337876192099 L 468.2954545454545 -390.3337876192099 L 480.7954545454545 -390.3337876192099 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -400.28583045922517 L 511.9318181818182 -410.28583045922517 L 524.4318181818182 -410.28583045922517 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -425.62512522325903 L 555.5681818181818 -435.62512522325903 L 568.0681818181818 -435.62512522325903 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -445.8291467246953 L 599.2045454545455 -455.8291467246953 L 611.7045454545455 -455.8291467246953 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -466.8751399554071 L 642.840909090909 -476.8751399554071 L 655.340909090909 -476.8751399554071 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -491.4285630102011 L 686.4772727272727 -501.4285630102011 L 698.9772727272727 -501.4285630102011 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 337.3863636363636 -298.6778984563923 L 349.8863636363636 -298.6778984563923 L 343.6363636363636 -308.6778984563923 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 381.02272727272725 -301.9311810468504 L 393.52272727272725 -301.9311810468504 L 387.27272727272725 -311.9311810468504 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 424.6590909090909 -305.13826362080846 L 437.1590909090909 -305.13826362080846 L 430.9090909090909 -315.13826362080846 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 468.2954545454545 -311.8510788753853 L 480.7954545454545 -311.8510788753853 L 474.5454545454545 -321.8510788753853 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.9318181818182 -321.61804522073044 L 524.4318181818182 -321.61804522073044 L 518.1818181818182 -331.61804522073044 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 555.5681818181818 -330.3767197773999 L 568.0681818181818 -330.3767197773999 L 561.8181818181818 -340.3767197773999 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.2045454545455 -338.877522813401 L 611.7045454545455 -338.877522813401 L 605.4545454545455 -348.877522813401 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 642.840909090909 -347.380918707471 L 655.340909090909 -347.380918707471 L 649.090909090909 -357.380918707471 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 686.4772727272727 -355.23822151365056 L 698.9772727272727 -355.23822151365056 L 692.7272727272727 -365.23822151365056 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 730.1136363636364 -361.2946665338095 L 742.6136363636364 -361.2946665338095 L 736.3636363636364 -371.2946665338095 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -296.12794983141066 L 337.3863636363636 -306.12794983141066 L 349.8863636363636 -306.12794983141066 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -296.14112626468795 L 381.02272727272725 -306.14112626468795 L 393.52272727272725 -306.14112626468795 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -296.2265114380398 L 424.6590909090909 -306.2265114380398 L 437.1590909090909 -306.2265114380398 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -296.28001388571926 L 468.2954545454545 -306.28001388571926 L 480.7954545454545 -306.28001388571926 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -296.303632465583 L 511.9318181818182 -306.303632465583 L 524.4318181818182 -306.303632465583 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -296.326145545052 L 555.5681818181818 -306.326145545052 L 568.0681818181818 -306.326145545052 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -296.31326611188075 L 599.2045454545455 -306.31326611188075 L 611.7045454545455 -306.31326611188075 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -296.34661733807764 L 642.840909090909 -306.34661733807764 L 655.340909090909 -306.34661733807764 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -296.33220104721465 L 686.4772727272727 -306.33220104721465 L 698.9772727272727 -306.33220104721465 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -296.33794069212166 L 730.1136363636364 -306.33794069212166 L 742.6136363636364 -306.33794069212166 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -74 L 290 -136 L 464.736 -136 L 464.736 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 1.87e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 3.73e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 5.60e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 7.47e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 9.33e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -321.5437748370624 L 387.27272727272725 -343.0876439598728 L 430.9090909090909 -363.43497979820705 L 474.5454545454545 -385.3337876192099 L 518.1818181818182 -405.28583045922517 L 561.8181818181818 -430.62512522325903 L 605.4545454545455 -450.8291467246953 L 649.090909090909 -471.8751399554071 L 692.7272727272727 -496.4285630102011 L 736.3636363636364 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -316.5437748370624 L 337.3863636363636 -326.5437748370624 L 349.8863636363636 -326.5437748370624 L 349.8863636363636 -316.5437748370624 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -316.5437748370624 L 337.3863636363636 -326.5437748370624 L 349.8863636363636 -326.5437748370624 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -338.0876439598728 L 381.02272727272725 -348.0876439598728 L 393.52272727272725 -348.0876439598728 L 393.52272727272725 -338.0876439598728 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -338.0876439598728 L 381.02272727272725 -348.0876439598728 L 393.52272727272725 -348.0876439598728 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -358.43497979820705 L 424.6590909090909 -368.4349797982071 L 437.1590909090909 -368.4349797982071 L 437.1590909090909 -358.43497979820705 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -358.43497979820705 L 424.6590909090909 -368.4349797982071 L 437.1590909090909 -368.4349797982071 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -380.3337876192099 L 468.2954545454545 -390.3337876192099 L 480.7954545454545 -390.3337876192099 L 480.7954545454545 -380.3337876192099 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -380.3337876192099 L 468.2954545454545 -390.3337876192099 L 480.7954545454545 -390.3337876192099 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -400.28583045922517 L 511.9318181818182 -410.28583045922517 L 524.4318181818182 -410.28583045922517 L 524.4318181818182 -400.28583045922517 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -400.28583045922517 L 511.9318181818182 -410.28583045922517 L 524.4318181818182 -410.28583045922517 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -425.62512522325903 L 555.5681818181818 -435.62512522325903 L 568.0681818181818 -435.62512522325903 L 568.0681818181818 -425.62512522325903 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -425.62512522325903 L 555.5681818181818 -435.62512522325903 L 568.0681818181818 -435.62512522325903 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -445.8291467246953 L 599.2045454545455 -455.8291467246953 L 611.7045454545455 -455.8291467246953 L 611.7045454545455 -445.8291467246953 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -445.8291467246953 L 599.2045454545455 -455.8291467246953 L 611.7045454545455 -455.8291467246953 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -466.8751399554071 L 642.840909090909 -476.8751399554071 L 655.340909090909 -476.8751399554071 L 655.340909090909 -466.8751399554071 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -466.8751399554071 L 642.840909090909 -476.8751399554071 L 655.340909090909 -476.8751399554071 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -491.4285630102011 L 686.4772727272727 -501.4285630102011 L 698.9772727272727 -501.4285630102011 L 698.9772727272727 -491.4285630102011 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -491.4285630102011 L 686.4772727272727 -501.4285630102011 L 698.9772727272727 -501.4285630102011 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -303.6778984563923 L 387.27272727272725 -306.9311810468504 L 430.9090909090909 -310.13826362080846 L 474.5454545454545 -316.8510788753853 L 518.1818181818182 -326.61804522073044 L 561.8181818181818 -335.3767197773999 L 605.4545454545455 -343.877522813401 L 649.090909090909 -352.380918707471 L 692.7272727272727 -360.23822151365056 L 736.3636363636364 -366.2946665338095" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -298.6778984563923 L 337.3863636363636 -308.6778984563923 L 349.8863636363636 -308.6778984563923 L 349.8863636363636 -298.6778984563923 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -298.6778984563923 L 349.8863636363636 -298.6778984563923 L 343.6363636363636 -308.6778984563923 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -301.9311810468504 L 381.02272727272725 -311.9311810468504 L 393.52272727272725 -311.9311810468504 L 393.52272727272725 -301.9311810468504 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -301.9311810468504 L 393.52272727272725 -301.9311810468504 L 387.27272727272725 -311.9311810468504 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -305.13826362080846 L 424.6590909090909 -315.13826362080846 L 437.1590909090909 -315.13826362080846 L 437.1590909090909 -305.13826362080846 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -305.13826362080846 L 437.1590909090909 -305.13826362080846 L 430.9090909090909 -315.13826362080846 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -311.8510788753853 L 468.2954545454545 -321.8510788753853 L 480.7954545454545 -321.8510788753853 L 480.7954545454545 -311.8510788753853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -311.8510788753853 L 480.7954545454545 -311.8510788753853 L 474.5454545454545 -321.8510788753853 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -321.61804522073044 L 511.9318181818182 -331.61804522073044 L 524.4318181818182 -331.61804522073044 L 524.4318181818182 -321.61804522073044 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -321.61804522073044 L 524.4318181818182 -321.61804522073044 L 518.1818181818182 -331.61804522073044 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -330.3767197773999 L 555.5681818181818 -340.3767197773999 L 568.0681818181818 -340.3767197773999 L 568.0681818181818 -330.3767197773999 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -330.3767197773999 L 568.0681818181818 -330.3767197773999 L 561.8181818181818 -340.3767197773999 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -338.877522813401 L 599.2045454545455 -348.877522813401 L 611.7045454545455 -348.877522813401 L 611.7045454545455 -338.877522813401 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -338.877522813401 L 611.7045454545455 -338.877522813401 L 605.4545454545455 -348.877522813401 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -347.380918707471 L 642.840909090909 -357.380918707471 L 655.340909090909 -357.380918707471 L 655.340909090909 -347.380918707471 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -347.380918707471 L 655.340909090909 -347.380918707471 L 649.090909090909 -357.380918707471 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -355.23822151365056 L 686.4772727272727 -365.23822151365056 L 698.9772727272727 -365.23822151365056 L 698.9772727272727 -355.23822151365056 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -355.23822151365056 L 698.9772727272727 -355.23822151365056 L 692.7272727272727 -365.23822151365056 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -361.2946665338095 L 730.1136363636364 -371.2946665338095 L 742.6136363636364 -371.2946665338095 L 742.6136363636364 -361.2946665338095 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -361.2946665338095 L 742.6136363636364 -361.2946665338095 L 736.3636363636364 -371.2946665338095 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -301.12794983141066 L 387.27272727272725 -301.14112626468795 L 430.9090909090909 -301.2265114380398 L 474.5454545454545 -301.28001388571926 L 518.1818181818182 -301.303632465583 L 561.8181818181818 -301.326145545052 L 605.4545454545455 -301.31326611188075 L 649.090909090909 -301.34661733807764 L 692.7272727272727 -301.33220104721465 L 736.3636363636364 -301.33794069212166" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -296.12794983141066 L 337.3863636363636 -306.12794983141066 L 349.8863636363636 -306.12794983141066 L 349.8863636363636 -296.12794983141066 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.12794983141066 L 337.3863636363636 -306.12794983141066 L 349.8863636363636 -306.12794983141066 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -296.14112626468795 L 381.02272727272725 -306.14112626468795 L 393.52272727272725 -306.14112626468795 L 393.52272727272725 -296.14112626468795 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -296.14112626468795 L 381.02272727272725 -306.14112626468795 L 393.52272727272725 -306.14112626468795 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -296.2265114380398 L 424.6590909090909 -306.2265114380398 L 437.1590909090909 -306.2265114380398 L 437.1590909090909 -296.2265114380398 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -296.2265114380398 L 424.6590909090909 -306.2265114380398 L 437.1590909090909 -306.2265114380398 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -296.28001388571926 L 468.2954545454545 -306.28001388571926 L 480.7954545454545 -306.28001388571926 L 480.7954545454545 -296.28001388571926 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -296.28001388571926 L 468.2954545454545 -306.28001388571926 L 480.7954545454545 -306.28001388571926 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -296.303632465583 L 511.9318181818182 -306.303632465583 L 524.4318181818182 -306.303632465583 L 524.4318181818182 -296.303632465583 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -296.303632465583 L 511.9318181818182 -306.303632465583 L 524.4318181818182 -306.303632465583 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -296.326145545052 L 555.5681818181818 -306.326145545052 L 568.0681818181818 -306.326145545052 L 568.0681818181818 -296.326145545052 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -296.326145545052 L 555.5681818181818 -306.326145545052 L 568.0681818181818 -306.326145545052 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -296.31326611188075 L 599.2045454545455 -306.31326611188075 L 611.7045454545455 -306.31326611188075 L 611.7045454545455 -296.31326611188075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -296.31326611188075 L 599.2045454545455 -306.31326611188075 L 611.7045454545455 -306.31326611188075 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -296.34661733807764 L 642.840909090909 -306.34661733807764 L 655.340909090909 -306.34661733807764 L 655.340909090909 -296.34661733807764 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -296.34661733807764 L 642.840909090909 -306.34661733807764 L 655.340909090909 -306.34661733807764 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -296.33220104721465 L 686.4772727272727 -306.33220104721465 L 698.9772727272727 -306.33220104721465 L 698.9772727272727 -296.33220104721465 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -296.33220104721465 L 686.4772727272727 -306.33220104721465 L 698.9772727272727 -306.33220104721465 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -296.33794069212166 L 730.1136363636364 -306.33794069212166 L 742.6136363636364 -306.33794069212166 L 742.6136363636364 -296.33794069212166 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -296.33794069212166 L 730.1136363636364 -306.33794069212166 L 742.6136363636364 -306.33794069212166 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -74 L 290 -136 L 464.736 -136 L 464.736 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip38);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_set
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ splay_tree_ost_set
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ rb_tree_ost_set
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdf
new file mode 100644
index 0000000000..54f688dbb9
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_split_join.png b/libstdc++-v3/doc/xml/images/pbds_tree_split_join.png
new file mode 100644
index 0000000000..dcbc2dbe0c
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_split_join.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg b/libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg
new file mode 100644
index 0000000000..3a19f76b7b
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg
@@ -0,0 +1,501 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 496" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 343.6363636363636 -315.8178001679261 L 337.3863636363636 -325.8178001679261 L 349.8863636363636 -325.8178001679261 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 387.27272727272725 -337.6809403862301 L 381.02272727272725 -347.6809403862301 L 393.52272727272725 -347.6809403862301 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 430.9090909090909 -360.25188916876573 L 424.6590909090909 -370.25188916876573 L 437.1590909090909 -370.25188916876573 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 474.5454545454545 -383.1842522623379 L 468.2954545454545 -393.1842522623379 L 480.7954545454545 -393.1842522623379 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 518.1818181818182 -406.11017818826383 L 511.9318181818182 -416.11017818826383 L 524.4318181818182 -416.11017818826383 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 561.8181818181818 -429.3082377087415 L 555.5681818181818 -439.3082377087415 L 568.0681818181818 -439.3082377087415 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 605.4545454545455 -447.03843642130795 L 599.2045454545455 -457.03843642130795 L 611.7045454545455 -457.03843642130795 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 649.090909090909 -470.81957272133593 L 642.840909090909 -480.81957272133593 L 655.340909090909 -480.81957272133593 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 692.7272727272727 -493.63699972012313 L 686.4772727272727 -503.63699972012313 L 698.9772727272727 -503.63699972012313 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 337.3863636363636 -296.3074167366359 L 349.8863636363636 -296.3074167366359 L 343.6363636363636 -306.3074167366359 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 381.02272727272725 -297.5376714245732 L 393.52272727272725 -297.5376714245732 L 387.27272727272725 -307.5376714245732 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 424.6590909090909 -298.76567776844854 L 437.1590909090909 -298.76567776844854 L 430.9090909090909 -308.76567776844854 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 468.2954545454545 -300.2796995988432 L 480.7954545454545 -300.2796995988432 L 474.5454545454545 -310.2796995988432 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 511.9318181818182 -302.20873215785053 L 524.4318181818182 -302.20873215785053 L 518.1818181818182 -312.20873215785053 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 555.5681818181818 -303.84382871536525 L 568.0681818181818 -303.84382871536525 L 561.8181818181818 -313.84382871536525 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.2045454545455 -305.666200205243 L 611.7045454545455 -305.666200205243 L 605.4545454545455 -315.666200205243 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 642.840909090909 -307.39901110178187 L 655.340909090909 -307.39901110178187 L 649.090909090909 -317.39901110178187 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 686.4772727272727 -309.03106633081444 L 698.9772727272727 -309.03106633081444 L 692.7272727272727 -319.03106633081444 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 730.1136363636364 -310.728985912865 L 742.6136363636364 -310.728985912865 L 736.3636363636364 -320.728985912865 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -296.1829088534378 L 337.3863636363636 -306.1829088534378 L 349.8863636363636 -306.1829088534378 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -297.31474018098703 L 381.02272727272725 -307.31474018098703 L 393.52272727272725 -307.31474018098703 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -298.5415430543894 L 424.6590909090909 -308.5415430543894 L 437.1590909090909 -308.5415430543894 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -300.2289206082657 L 468.2954545454545 -310.2289206082657 L 480.7954545454545 -310.2289206082657 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -301.5996268308611 L 511.9318181818182 -311.5996268308611 L 524.4318181818182 -311.5996268308611 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -303.0672357496035 L 555.5681818181818 -313.0672357496035 L 568.0681818181818 -313.0672357496035 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -304.12840750069967 L 599.2045454545455 -314.12840750069967 L 611.7045454545455 -314.12840750069967 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -305.51338744285846 L 642.840909090909 -315.51338744285846 L 655.340909090909 -315.51338744285846 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -306.60322791305157 L 686.4772727272727 -316.60322791305157 L 698.9772727272727 -316.60322791305157 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -308.3463942531953 L 730.1136363636364 -318.3463942531953 L 742.6136363636364 -318.3463942531953 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -54 L 290 -136 L 434.496 -136 L 434.496 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 4.72e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 9.43e-05
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.41e-04
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.89e-04
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 2.36e-04
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -320.8178001679261 L 387.27272727272725 -342.6809403862301 L 430.9090909090909 -365.25188916876573 L 474.5454545454545 -388.1842522623379 L 518.1818181818182 -411.11017818826383 L 561.8181818181818 -434.3082377087415 L 605.4545454545455 -452.03843642130795 L 649.090909090909 -475.81957272133593 L 692.7272727272727 -498.63699972012313 L 736.3636363636364 -520.0" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -315.8178001679261 L 337.3863636363636 -325.8178001679261 L 349.8863636363636 -325.8178001679261 L 349.8863636363636 -315.8178001679261 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -315.8178001679261 L 337.3863636363636 -325.8178001679261 L 349.8863636363636 -325.8178001679261 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -337.6809403862301 L 381.02272727272725 -347.6809403862301 L 393.52272727272725 -347.6809403862301 L 393.52272727272725 -337.6809403862301 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -337.6809403862301 L 381.02272727272725 -347.6809403862301 L 393.52272727272725 -347.6809403862301 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -360.25188916876573 L 424.6590909090909 -370.25188916876573 L 437.1590909090909 -370.25188916876573 L 437.1590909090909 -360.25188916876573 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -360.25188916876573 L 424.6590909090909 -370.25188916876573 L 437.1590909090909 -370.25188916876573 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -383.1842522623379 L 468.2954545454545 -393.1842522623379 L 480.7954545454545 -393.1842522623379 L 480.7954545454545 -383.1842522623379 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -383.1842522623379 L 468.2954545454545 -393.1842522623379 L 480.7954545454545 -393.1842522623379 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -406.11017818826383 L 511.9318181818182 -416.11017818826383 L 524.4318181818182 -416.11017818826383 L 524.4318181818182 -406.11017818826383 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -406.11017818826383 L 511.9318181818182 -416.11017818826383 L 524.4318181818182 -416.11017818826383 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -429.3082377087415 L 555.5681818181818 -439.3082377087415 L 568.0681818181818 -439.3082377087415 L 568.0681818181818 -429.3082377087415 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -429.3082377087415 L 555.5681818181818 -439.3082377087415 L 568.0681818181818 -439.3082377087415 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -447.03843642130795 L 599.2045454545455 -457.03843642130795 L 611.7045454545455 -457.03843642130795 L 611.7045454545455 -447.03843642130795 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -447.03843642130795 L 599.2045454545455 -457.03843642130795 L 611.7045454545455 -457.03843642130795 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -470.81957272133593 L 642.840909090909 -480.81957272133593 L 655.340909090909 -480.81957272133593 L 655.340909090909 -470.81957272133593 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -470.81957272133593 L 642.840909090909 -480.81957272133593 L 655.340909090909 -480.81957272133593 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -493.63699972012313 L 686.4772727272727 -503.63699972012313 L 698.9772727272727 -503.63699972012313 L 698.9772727272727 -493.63699972012313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -493.63699972012313 L 686.4772727272727 -503.63699972012313 L 698.9772727272727 -503.63699972012313 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -301.3074167366359 L 387.27272727272725 -302.5376714245732 L 430.9090909090909 -303.76567776844854 L 474.5454545454545 -305.2796995988432 L 518.1818181818182 -307.20873215785053 L 561.8181818181818 -308.84382871536525 L 605.4545454545455 -310.666200205243 L 649.090909090909 -312.39901110178187 L 692.7272727272727 -314.03106633081444 L 736.3636363636364 -315.728985912865" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -296.3074167366359 L 337.3863636363636 -306.3074167366359 L 349.8863636363636 -306.3074167366359 L 349.8863636363636 -296.3074167366359 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -296.3074167366359 L 349.8863636363636 -296.3074167366359 L 343.6363636363636 -306.3074167366359 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -297.5376714245732 L 381.02272727272725 -307.5376714245732 L 393.52272727272725 -307.5376714245732 L 393.52272727272725 -297.5376714245732 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -297.5376714245732 L 393.52272727272725 -297.5376714245732 L 387.27272727272725 -307.5376714245732 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -298.76567776844854 L 424.6590909090909 -308.76567776844854 L 437.1590909090909 -308.76567776844854 L 437.1590909090909 -298.76567776844854 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -298.76567776844854 L 437.1590909090909 -298.76567776844854 L 430.9090909090909 -308.76567776844854 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -300.2796995988432 L 468.2954545454545 -310.2796995988432 L 480.7954545454545 -310.2796995988432 L 480.7954545454545 -300.2796995988432 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -300.2796995988432 L 480.7954545454545 -300.2796995988432 L 474.5454545454545 -310.2796995988432 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -302.20873215785053 L 511.9318181818182 -312.20873215785053 L 524.4318181818182 -312.20873215785053 L 524.4318181818182 -302.20873215785053 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -302.20873215785053 L 524.4318181818182 -302.20873215785053 L 518.1818181818182 -312.20873215785053 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -303.84382871536525 L 555.5681818181818 -313.84382871536525 L 568.0681818181818 -313.84382871536525 L 568.0681818181818 -303.84382871536525 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -303.84382871536525 L 568.0681818181818 -303.84382871536525 L 561.8181818181818 -313.84382871536525 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -305.666200205243 L 599.2045454545455 -315.666200205243 L 611.7045454545455 -315.666200205243 L 611.7045454545455 -305.666200205243 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -305.666200205243 L 611.7045454545455 -305.666200205243 L 605.4545454545455 -315.666200205243 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -307.39901110178187 L 642.840909090909 -317.39901110178187 L 655.340909090909 -317.39901110178187 L 655.340909090909 -307.39901110178187 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -307.39901110178187 L 655.340909090909 -307.39901110178187 L 649.090909090909 -317.39901110178187 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -309.03106633081444 L 686.4772727272727 -319.03106633081444 L 698.9772727272727 -319.03106633081444 L 698.9772727272727 -309.03106633081444 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -309.03106633081444 L 698.9772727272727 -309.03106633081444 L 692.7272727272727 -319.03106633081444 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -310.728985912865 L 730.1136363636364 -320.728985912865 L 742.6136363636364 -320.728985912865 L 742.6136363636364 -310.728985912865 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -310.728985912865 L 742.6136363636364 -310.728985912865 L 736.3636363636364 -320.728985912865 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -301.1829088534378 L 387.27272727272725 -302.31474018098703 L 430.9090909090909 -303.5415430543894 L 474.5454545454545 -305.2289206082657 L 518.1818181818182 -306.5996268308611 L 561.8181818181818 -308.0672357496035 L 605.4545454545455 -309.12840750069967 L 649.090909090909 -310.51338744285846 L 692.7272727272727 -311.60322791305157 L 736.3636363636364 -313.3463942531953" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -296.1829088534378 L 337.3863636363636 -306.1829088534378 L 349.8863636363636 -306.1829088534378 L 349.8863636363636 -296.1829088534378 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -296.1829088534378 L 337.3863636363636 -306.1829088534378 L 349.8863636363636 -306.1829088534378 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -297.31474018098703 L 381.02272727272725 -307.31474018098703 L 393.52272727272725 -307.31474018098703 L 393.52272727272725 -297.31474018098703 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -297.31474018098703 L 381.02272727272725 -307.31474018098703 L 393.52272727272725 -307.31474018098703 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -298.5415430543894 L 424.6590909090909 -308.5415430543894 L 437.1590909090909 -308.5415430543894 L 437.1590909090909 -298.5415430543894 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -298.5415430543894 L 424.6590909090909 -308.5415430543894 L 437.1590909090909 -308.5415430543894 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -300.2289206082657 L 468.2954545454545 -310.2289206082657 L 480.7954545454545 -310.2289206082657 L 480.7954545454545 -300.2289206082657 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -300.2289206082657 L 468.2954545454545 -310.2289206082657 L 480.7954545454545 -310.2289206082657 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -301.5996268308611 L 511.9318181818182 -311.5996268308611 L 524.4318181818182 -311.5996268308611 L 524.4318181818182 -301.5996268308611 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -301.5996268308611 L 511.9318181818182 -311.5996268308611 L 524.4318181818182 -311.5996268308611 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -303.0672357496035 L 555.5681818181818 -313.0672357496035 L 568.0681818181818 -313.0672357496035 L 568.0681818181818 -303.0672357496035 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -303.0672357496035 L 555.5681818181818 -313.0672357496035 L 568.0681818181818 -313.0672357496035 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -304.12840750069967 L 599.2045454545455 -314.12840750069967 L 611.7045454545455 -314.12840750069967 L 611.7045454545455 -304.12840750069967 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -304.12840750069967 L 599.2045454545455 -314.12840750069967 L 611.7045454545455 -314.12840750069967 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -305.51338744285846 L 642.840909090909 -315.51338744285846 L 655.340909090909 -315.51338744285846 L 655.340909090909 -305.51338744285846 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -305.51338744285846 L 642.840909090909 -315.51338744285846 L 655.340909090909 -315.51338744285846 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -306.60322791305157 L 686.4772727272727 -316.60322791305157 L 698.9772727272727 -316.60322791305157 L 698.9772727272727 -306.60322791305157 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -306.60322791305157 L 686.4772727272727 -316.60322791305157 L 698.9772727272727 -316.60322791305157 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -308.3463942531953 L 730.1136363636364 -318.3463942531953 L 742.6136363636364 -318.3463942531953 L 742.6136363636364 -308.3463942531953 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -308.3463942531953 L 730.1136363636364 -318.3463942531953 L 742.6136363636364 -318.3463942531953 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 343.6363636363636 -300.60568989644554 L 387.27272727272725 -300.95946450228564 L 430.9090909090909 -301.30347980222035 L 474.5454545454545 -301.69613769941225 L 518.1818181818182 -302.10041981528127 L 561.8181818181818 -302.55161862114005 L 605.4545454545455 -302.95075100289205 L 649.090909090909 -303.3317007183506 L 692.7272727272727 -303.64468700438476 L 736.3636363636364 -304.0407407407407" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 338.6363636363636 -295.60568989644554 L 348.6363636363636 -305.60568989644554" style="stroke-width:1;"/>
+ <path d="M 348.6363636363636 -295.60568989644554 L 338.6363636363636 -305.60568989644554" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -293.53568989644555 L 343.6363636363636 -307.6756898964456" style="stroke-width:1;"/>
+ <path d="M 336.56636363636363 -300.60568989644554 L 350.7063636363636 -300.60568989644554" style="stroke-width:1;"/>
+ <path d="M 382.27272727272725 -295.95946450228564 L 392.27272727272725 -305.95946450228564" style="stroke-width:1;"/>
+ <path d="M 392.27272727272725 -295.95946450228564 L 382.27272727272725 -305.95946450228564" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -293.88946450228565 L 387.27272727272725 -308.02946450228563" style="stroke-width:1;"/>
+ <path d="M 380.20272727272726 -300.95946450228564 L 394.34272727272725 -300.95946450228564" style="stroke-width:1;"/>
+ <path d="M 425.9090909090909 -296.30347980222035 L 435.9090909090909 -306.30347980222035" style="stroke-width:1;"/>
+ <path d="M 435.9090909090909 -296.30347980222035 L 425.9090909090909 -306.30347980222035" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -294.23347980222036 L 430.9090909090909 -308.37347980222034" style="stroke-width:1;"/>
+ <path d="M 423.83909090909094 -301.30347980222035 L 437.9790909090909 -301.30347980222035" style="stroke-width:1;"/>
+ <path d="M 469.5454545454545 -296.69613769941225 L 479.5454545454545 -306.69613769941225" style="stroke-width:1;"/>
+ <path d="M 479.5454545454545 -296.69613769941225 L 469.5454545454545 -306.69613769941225" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -294.62613769941225 L 474.5454545454545 -308.76613769941224" style="stroke-width:1;"/>
+ <path d="M 467.47545454545457 -301.69613769941225 L 481.61545454545455 -301.69613769941225" style="stroke-width:1;"/>
+ <path d="M 513.1818181818182 -297.10041981528127 L 523.1818181818182 -307.10041981528127" style="stroke-width:1;"/>
+ <path d="M 523.1818181818182 -297.10041981528127 L 513.1818181818182 -307.10041981528127" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -295.0304198152813 L 518.1818181818182 -309.17041981528126" style="stroke-width:1;"/>
+ <path d="M 511.1118181818182 -302.10041981528127 L 525.2518181818182 -302.10041981528127" style="stroke-width:1;"/>
+ <path d="M 556.8181818181818 -297.55161862114005 L 566.8181818181818 -307.55161862114005" style="stroke-width:1;"/>
+ <path d="M 566.8181818181818 -297.55161862114005 L 556.8181818181818 -307.55161862114005" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -295.48161862114006 L 561.8181818181818 -309.62161862114004" style="stroke-width:1;"/>
+ <path d="M 554.7481818181818 -302.55161862114005 L 568.8881818181818 -302.55161862114005" style="stroke-width:1;"/>
+ <path d="M 600.4545454545455 -297.95075100289205 L 610.4545454545455 -307.95075100289205" style="stroke-width:1;"/>
+ <path d="M 610.4545454545455 -297.95075100289205 L 600.4545454545455 -307.95075100289205" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -295.88075100289205 L 605.4545454545455 -310.02075100289204" style="stroke-width:1;"/>
+ <path d="M 598.3845454545454 -302.95075100289205 L 612.5245454545454 -302.95075100289205" style="stroke-width:1;"/>
+ <path d="M 644.090909090909 -298.3317007183506 L 654.090909090909 -308.3317007183506" style="stroke-width:1;"/>
+ <path d="M 654.090909090909 -298.3317007183506 L 644.090909090909 -308.3317007183506" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -296.2617007183506 L 649.090909090909 -310.4017007183506" style="stroke-width:1;"/>
+ <path d="M 642.0209090909091 -303.3317007183506 L 656.1609090909091 -303.3317007183506" style="stroke-width:1;"/>
+ <path d="M 687.7272727272727 -298.64468700438476 L 697.7272727272727 -308.64468700438476" style="stroke-width:1;"/>
+ <path d="M 697.7272727272727 -298.64468700438476 L 687.7272727272727 -308.64468700438476" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -296.5746870043847 L 692.7272727272727 -310.71468700438476" style="stroke-width:1;"/>
+ <path d="M 685.6572727272728 -303.64468700438476 L 699.7972727272727 -303.64468700438476" style="stroke-width:1;"/>
+ <path d="M 731.3636363636364 -299.0407407407407 L 741.3636363636364 -309.0407407407407" style="stroke-width:1;"/>
+ <path d="M 741.3636363636364 -299.0407407407407 L 731.3636363636364 -309.0407407407407" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -296.9707407407407 L 736.3636363636364 -311.11074074074077" style="stroke-width:1;"/>
+ <path d="M 729.2936363636363 -304.0407407407407 L 743.4336363636364 -304.0407407407407" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -54 L 290 -136 L 434.496 -136 L 434.496 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ n_set
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -100.33333333333334 L 314.25 -100.33333333333334 L 308.0 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ splay_tree_set
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ rb_tree_set
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 303.0 -60.33333333333334 L 313.0 -70.33333333333334" style="stroke-width:1;"/>
+ <path d="M 313.0 -60.33333333333334 L 303.0 -70.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -58.26333333333335 L 308.0 -72.40333333333334" style="stroke-width:1;"/>
+ <path d="M 300.93 -65.33333333333334 L 315.07 -65.33333333333334" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ ov_tree_set
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdf
new file mode 100644
index 0000000000..57d96c54a8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_find.png b/libstdc++-v3/doc/xml/images/pbds_tree_text_find.png
new file mode 100644
index 0000000000..ce4e606f75
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg b/libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg
new file mode 100644
index 0000000000..da5f7cb6ac
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg
@@ -0,0 +1,538 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -466.12785862785864 L 349.8863636363636 -466.12785862785864 L 343.6363636363636 -476.12785862785864 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -480.0696465696466 L 393.52272727272725 -480.0696465696466 L 387.27272727272725 -490.0696465696466 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -488.6995841995842 L 437.1590909090909 -488.6995841995842 L 430.9090909090909 -498.6995841995842 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -496.2307692307692 L 480.7954545454545 -496.2307692307692 L 474.5454545454545 -506.2307692307692 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -499.34615384615387 L 524.4318181818182 -499.34615384615387 L 518.1818181818182 -509.34615384615387 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -503.12525987525987 L 568.0681818181818 -503.12525987525987 L 561.8181818181818 -513.1252598752599 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -506.6304573804574 L 611.7045454545455 -506.6304573804574 L 605.4545454545455 -516.6304573804574 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -511.5628898128898 L 655.340909090909 -511.5628898128898 L 649.090909090909 -521.5628898128898 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -509.18295218295214 L 698.9772727272727 -509.18295218295214 L 692.7272727272727 -519.1829521829521 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -397.05405405405406 L 337.3863636363636 -407.05405405405406 L 349.8863636363636 -407.05405405405406 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -406.1049896049896 L 381.02272727272725 -416.1049896049896 L 393.52272727272725 -416.1049896049896 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -410.38617463617464 L 424.6590909090909 -420.38617463617464 L 437.1590909090909 -420.38617463617464 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -415.27286902286903 L 468.2954545454545 -425.27286902286903 L 480.7954545454545 -425.27286902286903 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -418.66528066528065 L 511.9318181818182 -428.66528066528065 L 524.4318181818182 -428.66528066528065 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -421.54417879417883 L 555.5681818181818 -431.54417879417883 L 568.0681818181818 -431.54417879417883 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -422.0769230769231 L 599.2045454545455 -432.0769230769231 L 611.7045454545455 -432.0769230769231 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -425.10239085239084 L 642.840909090909 -435.10239085239084 L 655.340909090909 -435.10239085239084 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -426.4890852390853 L 686.4772727272727 -436.4890852390853 L 698.9772727272727 -436.4890852390853 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -431.35446985446987 L 730.1136363636364 -441.35446985446987 L 742.6136363636364 -441.35446985446987 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 343.6363636363636 -392.99012474012477 L 337.3863636363636 -402.99012474012477 L 349.8863636363636 -402.99012474012477 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 387.27272727272725 -402.70841995842 L 381.02272727272725 -412.70841995842 L 393.52272727272725 -412.70841995842 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 430.9090909090909 -407.35031185031187 L 424.6590909090909 -417.35031185031187 L 437.1590909090909 -417.35031185031187 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 474.5454545454545 -413.27598752598755 L 468.2954545454545 -423.27598752598755 L 480.7954545454545 -423.27598752598755 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 518.1818181818182 -414.70841995841994 L 511.9318181818182 -424.70841995841994 L 524.4318181818182 -424.70841995841994 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 561.8181818181818 -420.1637214137214 L 555.5681818181818 -430.1637214137214 L 568.0681818181818 -430.1637214137214 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 605.4545454545455 -418.75 L 599.2045454545455 -428.75 L 611.7045454545455 -428.75 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 649.090909090909 -421.5223492723493 L 642.840909090909 -431.5223492723493 L 655.340909090909 -431.5223492723493 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 692.7272727272727 -423.99480249480246 L 686.4772727272727 -433.99480249480246 L 698.9772727272727 -433.99480249480246 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 736.3636363636364 -428.6081081081081 L 730.1136363636364 -438.6081081081081 L 742.6136363636364 -438.6081081081081 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 290 -34 L 290 -136 L 444.272 -136 L 444.272 -34 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.47e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.69e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.54e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.39e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.23e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -471.12785862785864 L 387.27272727272725 -485.0696465696466 L 430.9090909090909 -493.6995841995842 L 474.5454545454545 -501.2307692307692 L 518.1818181818182 -504.34615384615387 L 561.8181818181818 -508.12525987525987 L 605.4545454545455 -511.6304573804574 L 649.090909090909 -516.5628898128898 L 692.7272727272727 -514.1829521829521 L 736.3636363636364 -520.0" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -466.12785862785864 L 337.3863636363636 -476.12785862785864 L 349.8863636363636 -476.12785862785864 L 349.8863636363636 -466.12785862785864 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -466.12785862785864 L 349.8863636363636 -466.12785862785864 L 343.6363636363636 -476.12785862785864 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -480.0696465696466 L 381.02272727272725 -490.0696465696466 L 393.52272727272725 -490.0696465696466 L 393.52272727272725 -480.0696465696466 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -480.0696465696466 L 393.52272727272725 -480.0696465696466 L 387.27272727272725 -490.0696465696466 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -488.6995841995842 L 424.6590909090909 -498.6995841995842 L 437.1590909090909 -498.6995841995842 L 437.1590909090909 -488.6995841995842 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -488.6995841995842 L 437.1590909090909 -488.6995841995842 L 430.9090909090909 -498.6995841995842 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -496.2307692307692 L 468.2954545454545 -506.2307692307692 L 480.7954545454545 -506.2307692307692 L 480.7954545454545 -496.2307692307692 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -496.2307692307692 L 480.7954545454545 -496.2307692307692 L 474.5454545454545 -506.2307692307692 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -499.34615384615387 L 511.9318181818182 -509.34615384615387 L 524.4318181818182 -509.34615384615387 L 524.4318181818182 -499.34615384615387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -499.34615384615387 L 524.4318181818182 -499.34615384615387 L 518.1818181818182 -509.34615384615387 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -503.12525987525987 L 555.5681818181818 -513.1252598752599 L 568.0681818181818 -513.1252598752599 L 568.0681818181818 -503.12525987525987 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -503.12525987525987 L 568.0681818181818 -503.12525987525987 L 561.8181818181818 -513.1252598752599 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -506.6304573804574 L 599.2045454545455 -516.6304573804574 L 611.7045454545455 -516.6304573804574 L 611.7045454545455 -506.6304573804574 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -506.6304573804574 L 611.7045454545455 -506.6304573804574 L 605.4545454545455 -516.6304573804574 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -511.5628898128898 L 642.840909090909 -521.5628898128898 L 655.340909090909 -521.5628898128898 L 655.340909090909 -511.5628898128898 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -511.5628898128898 L 655.340909090909 -511.5628898128898 L 649.090909090909 -521.5628898128898 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -509.18295218295214 L 686.4772727272727 -519.1829521829521 L 698.9772727272727 -519.1829521829521 L 698.9772727272727 -509.18295218295214 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -509.18295218295214 L 698.9772727272727 -509.18295218295214 L 692.7272727272727 -519.1829521829521 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -402.05405405405406 L 387.27272727272725 -411.1049896049896 L 430.9090909090909 -415.38617463617464 L 474.5454545454545 -420.27286902286903 L 518.1818181818182 -423.66528066528065 L 561.8181818181818 -426.54417879417883 L 605.4545454545455 -427.0769230769231 L 649.090909090909 -430.10239085239084 L 692.7272727272727 -431.4890852390853 L 736.3636363636364 -436.35446985446987" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -397.05405405405406 L 337.3863636363636 -407.05405405405406 L 349.8863636363636 -407.05405405405406 L 349.8863636363636 -397.05405405405406 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -397.05405405405406 L 337.3863636363636 -407.05405405405406 L 349.8863636363636 -407.05405405405406 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -406.1049896049896 L 381.02272727272725 -416.1049896049896 L 393.52272727272725 -416.1049896049896 L 393.52272727272725 -406.1049896049896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -406.1049896049896 L 381.02272727272725 -416.1049896049896 L 393.52272727272725 -416.1049896049896 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -410.38617463617464 L 424.6590909090909 -420.38617463617464 L 437.1590909090909 -420.38617463617464 L 437.1590909090909 -410.38617463617464 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -410.38617463617464 L 424.6590909090909 -420.38617463617464 L 437.1590909090909 -420.38617463617464 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -415.27286902286903 L 468.2954545454545 -425.27286902286903 L 480.7954545454545 -425.27286902286903 L 480.7954545454545 -415.27286902286903 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -415.27286902286903 L 468.2954545454545 -425.27286902286903 L 480.7954545454545 -425.27286902286903 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -418.66528066528065 L 511.9318181818182 -428.66528066528065 L 524.4318181818182 -428.66528066528065 L 524.4318181818182 -418.66528066528065 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -418.66528066528065 L 511.9318181818182 -428.66528066528065 L 524.4318181818182 -428.66528066528065 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -421.54417879417883 L 555.5681818181818 -431.54417879417883 L 568.0681818181818 -431.54417879417883 L 568.0681818181818 -421.54417879417883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -421.54417879417883 L 555.5681818181818 -431.54417879417883 L 568.0681818181818 -431.54417879417883 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -422.0769230769231 L 599.2045454545455 -432.0769230769231 L 611.7045454545455 -432.0769230769231 L 611.7045454545455 -422.0769230769231 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -422.0769230769231 L 599.2045454545455 -432.0769230769231 L 611.7045454545455 -432.0769230769231 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -425.10239085239084 L 642.840909090909 -435.10239085239084 L 655.340909090909 -435.10239085239084 L 655.340909090909 -425.10239085239084 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -425.10239085239084 L 642.840909090909 -435.10239085239084 L 655.340909090909 -435.10239085239084 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -426.4890852390853 L 686.4772727272727 -436.4890852390853 L 698.9772727272727 -436.4890852390853 L 698.9772727272727 -426.4890852390853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -426.4890852390853 L 686.4772727272727 -436.4890852390853 L 698.9772727272727 -436.4890852390853 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -431.35446985446987 L 730.1136363636364 -441.35446985446987 L 742.6136363636364 -441.35446985446987 L 742.6136363636364 -431.35446985446987 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -431.35446985446987 L 730.1136363636364 -441.35446985446987 L 742.6136363636364 -441.35446985446987 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -399.8295218295218 L 387.27272727272725 -407.70841995842 L 430.9090909090909 -414.02442827442826 L 474.5454545454545 -418.27598752598755 L 518.1818181818182 -422.03950103950103 L 561.8181818181818 -425.86538461538464 L 605.4545454545455 -428.8918918918919 L 649.090909090909 -430.94490644490645 L 692.7272727272727 -433.43762993762994 L 736.3636363636364 -434.41839916839916" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 338.6363636363636 -394.8295218295218 L 348.6363636363636 -404.8295218295218" style="stroke-width:1;"/>
+ <path d="M 348.6363636363636 -394.8295218295218 L 338.6363636363636 -404.8295218295218" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -392.7595218295218 L 343.6363636363636 -406.8995218295218" style="stroke-width:1;"/>
+ <path d="M 336.56636363636363 -399.8295218295218 L 350.7063636363636 -399.8295218295218" style="stroke-width:1;"/>
+ <path d="M 382.27272727272725 -402.70841995842 L 392.27272727272725 -412.70841995842" style="stroke-width:1;"/>
+ <path d="M 392.27272727272725 -402.70841995842 L 382.27272727272725 -412.70841995842" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -400.63841995841995 L 387.27272727272725 -414.77841995841993" style="stroke-width:1;"/>
+ <path d="M 380.20272727272726 -407.70841995842 L 394.34272727272725 -407.70841995842" style="stroke-width:1;"/>
+ <path d="M 425.9090909090909 -409.02442827442826 L 435.9090909090909 -419.02442827442826" style="stroke-width:1;"/>
+ <path d="M 435.9090909090909 -409.02442827442826 L 425.9090909090909 -419.02442827442826" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -406.95442827442827 L 430.9090909090909 -421.09442827442825" style="stroke-width:1;"/>
+ <path d="M 423.83909090909094 -414.02442827442826 L 437.9790909090909 -414.02442827442826" style="stroke-width:1;"/>
+ <path d="M 469.5454545454545 -413.27598752598755 L 479.5454545454545 -423.27598752598755" style="stroke-width:1;"/>
+ <path d="M 479.5454545454545 -413.27598752598755 L 469.5454545454545 -423.27598752598755" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -411.20598752598755 L 474.5454545454545 -425.34598752598754" style="stroke-width:1;"/>
+ <path d="M 467.47545454545457 -418.27598752598755 L 481.61545454545455 -418.27598752598755" style="stroke-width:1;"/>
+ <path d="M 513.1818181818182 -417.03950103950103 L 523.1818181818182 -427.03950103950103" style="stroke-width:1;"/>
+ <path d="M 523.1818181818182 -417.03950103950103 L 513.1818181818182 -427.03950103950103" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -414.96950103950104 L 518.1818181818182 -429.109501039501" style="stroke-width:1;"/>
+ <path d="M 511.1118181818182 -422.03950103950103 L 525.2518181818182 -422.03950103950103" style="stroke-width:1;"/>
+ <path d="M 556.8181818181818 -420.86538461538464 L 566.8181818181818 -430.86538461538464" style="stroke-width:1;"/>
+ <path d="M 566.8181818181818 -420.86538461538464 L 556.8181818181818 -430.86538461538464" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -418.7953846153846 L 561.8181818181818 -432.9353846153846" style="stroke-width:1;"/>
+ <path d="M 554.7481818181818 -425.86538461538464 L 568.8881818181818 -425.86538461538464" style="stroke-width:1;"/>
+ <path d="M 600.4545454545455 -423.8918918918919 L 610.4545454545455 -433.8918918918919" style="stroke-width:1;"/>
+ <path d="M 610.4545454545455 -423.8918918918919 L 600.4545454545455 -433.8918918918919" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -421.8218918918919 L 605.4545454545455 -435.96189189189187" style="stroke-width:1;"/>
+ <path d="M 598.3845454545454 -428.8918918918919 L 612.5245454545454 -428.8918918918919" style="stroke-width:1;"/>
+ <path d="M 644.090909090909 -425.94490644490645 L 654.090909090909 -435.94490644490645" style="stroke-width:1;"/>
+ <path d="M 654.090909090909 -425.94490644490645 L 644.090909090909 -435.94490644490645" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -423.87490644490646 L 649.090909090909 -438.01490644490644" style="stroke-width:1;"/>
+ <path d="M 642.0209090909091 -430.94490644490645 L 656.1609090909091 -430.94490644490645" style="stroke-width:1;"/>
+ <path d="M 687.7272727272727 -428.43762993762994 L 697.7272727272727 -438.43762993762994" style="stroke-width:1;"/>
+ <path d="M 697.7272727272727 -428.43762993762994 L 687.7272727272727 -438.43762993762994" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -426.36762993762994 L 692.7272727272727 -440.50762993762993" style="stroke-width:1;"/>
+ <path d="M 685.6572727272728 -433.43762993762994 L 699.7972727272727 -433.43762993762994" style="stroke-width:1;"/>
+ <path d="M 731.3636363636364 -429.41839916839916 L 741.3636363636364 -439.41839916839916" style="stroke-width:1;"/>
+ <path d="M 741.3636363636364 -429.41839916839916 L 731.3636363636364 -439.41839916839916" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -427.34839916839917 L 736.3636363636364 -441.48839916839916" style="stroke-width:1;"/>
+ <path d="M 729.2936363636363 -434.41839916839916 L 743.4336363636364 -434.41839916839916" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 343.6363636363636 -397.99012474012477 L 387.27272727272725 -407.70841995842 L 430.9090909090909 -412.35031185031187 L 474.5454545454545 -418.27598752598755 L 518.1818181818182 -419.70841995841994 L 561.8181818181818 -425.1637214137214 L 605.4545454545455 -423.75 L 649.090909090909 -426.5223492723493 L 692.7272727272727 -428.99480249480246 L 736.3636363636364 -433.6081081081081" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 337.3863636363636 -392.99012474012477 L 337.3863636363636 -402.99012474012477 L 349.8863636363636 -402.99012474012477 L 349.8863636363636 -392.99012474012477 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -392.99012474012477 L 337.3863636363636 -402.99012474012477 L 349.8863636363636 -402.99012474012477 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 381.02272727272725 -402.70841995842 L 381.02272727272725 -412.70841995842 L 393.52272727272725 -412.70841995842 L 393.52272727272725 -402.70841995842 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -402.70841995842 L 381.02272727272725 -412.70841995842 L 393.52272727272725 -412.70841995842 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 424.6590909090909 -407.35031185031187 L 424.6590909090909 -417.35031185031187 L 437.1590909090909 -417.35031185031187 L 437.1590909090909 -407.35031185031187 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -407.35031185031187 L 424.6590909090909 -417.35031185031187 L 437.1590909090909 -417.35031185031187 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 468.2954545454545 -413.27598752598755 L 468.2954545454545 -423.27598752598755 L 480.7954545454545 -423.27598752598755 L 480.7954545454545 -413.27598752598755 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -413.27598752598755 L 468.2954545454545 -423.27598752598755 L 480.7954545454545 -423.27598752598755 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 511.9318181818182 -414.70841995841994 L 511.9318181818182 -424.70841995841994 L 524.4318181818182 -424.70841995841994 L 524.4318181818182 -414.70841995841994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -414.70841995841994 L 511.9318181818182 -424.70841995841994 L 524.4318181818182 -424.70841995841994 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 555.5681818181818 -420.1637214137214 L 555.5681818181818 -430.1637214137214 L 568.0681818181818 -430.1637214137214 L 568.0681818181818 -420.1637214137214 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -420.1637214137214 L 555.5681818181818 -430.1637214137214 L 568.0681818181818 -430.1637214137214 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 599.2045454545455 -418.75 L 599.2045454545455 -428.75 L 611.7045454545455 -428.75 L 611.7045454545455 -418.75 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -418.75 L 599.2045454545455 -428.75 L 611.7045454545455 -428.75 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 642.840909090909 -421.5223492723493 L 642.840909090909 -431.5223492723493 L 655.340909090909 -431.5223492723493 L 655.340909090909 -421.5223492723493 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -421.5223492723493 L 642.840909090909 -431.5223492723493 L 655.340909090909 -431.5223492723493 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 686.4772727272727 -423.99480249480246 L 686.4772727272727 -433.99480249480246 L 698.9772727272727 -433.99480249480246 L 698.9772727272727 -423.99480249480246 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -423.99480249480246 L 686.4772727272727 -433.99480249480246 L 698.9772727272727 -433.99480249480246 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 730.1136363636364 -428.6081081081081 L 730.1136363636364 -438.6081081081081 L 742.6136363636364 -438.6081081081081 L 742.6136363636364 -428.6081081081081 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -428.6081081081081 L 730.1136363636364 -438.6081081081081 L 742.6136363636364 -438.6081081081081 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip39);">
+ <path d="M 343.6363636363636 -321.8858627858628 L 387.27272727272725 -324.2423076923077 L 430.9090909090909 -325.9612785862786 L 474.5454545454545 -326.32723492723494 L 518.1818181818182 -327.6058212058212 L 561.8181818181818 -328.43976091476094 L 605.4545454545455 -329.38970893970895 L 649.090909090909 -330.5555613305613 L 692.7272727272727 -331.4942827442827 L 736.3636363636364 -332.79137214137216" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip40);">
+ <path d="M 336.4935064935065 -321.8858627858628 L 350.7792207792208 -321.8858627858628" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -314.74300564300563 L 343.6363636363636 -329.0287199287199" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -324.2423076923077 L 394.4155844155844 -324.2423076923077" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -317.0994505494505 L 387.27272727272725 -331.38516483516486" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -325.9612785862786 L 438.05194805194805 -325.9612785862786" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -318.81842144342147 L 430.9090909090909 -333.10413572913575" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -326.32723492723494 L 481.68831168831167 -326.32723492723494" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -319.1843777843778 L 474.5454545454545 -333.47009207009205" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -327.6058212058212 L 525.3246753246754 -327.6058212058212" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -320.4629640629641 L 518.1818181818182 -334.74867834867837" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -328.43976091476094 L 568.961038961039 -328.43976091476094" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -321.29690377190377 L 561.8181818181818 -335.58261805761805" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -329.38970893970895 L 612.5974025974026 -329.38970893970895" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -322.2468517968518 L 605.4545454545455 -336.53256608256606" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -330.5555613305613 L 656.2337662337662 -330.5555613305613" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -323.4127041877042 L 649.090909090909 -337.6984184734185" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -331.4942827442827 L 699.8701298701299 -331.4942827442827" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -324.3514256014256 L 692.7272727272727 -338.6371398871399" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -332.79137214137216 L 743.5064935064936 -332.79137214137216" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -325.648514998515 L 736.3636363636364 -339.9342292842293" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 290 -34 L 290 -136 L 444.272 -136 L 444.272 -34 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ splay_tree_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip43);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 303.0 -80.33333333333334 L 313.0 -90.33333333333334" style="stroke-width:1;"/>
+ <path d="M 313.0 -80.33333333333334 L 303.0 -90.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -78.26333333333335 L 308.0 -92.40333333333334" style="stroke-width:1;"/>
+ <path d="M 300.93 -85.33333333333334 L 315.07 -85.33333333333334" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ ov_tree_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ rb_tree_map
+ </text>
+ <path d="M 300 -45.33333333333334 L 316 -45.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -45.33333333333334 L 315.14285714285717 -45.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -38.190476190476204 L 308.0 -52.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-40.0">
+ pat_trie_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdf
new file mode 100644
index 0000000000..912708c451
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.png b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.png
new file mode 100644
index 0000000000..4ec35d4b70
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg
new file mode 100644
index 0000000000..0cbf5dfbdb
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg
@@ -0,0 +1,442 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 476" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 337.3863636363636 -456.2759118293427 L 349.8863636363636 -456.2759118293427 L 343.6363636363636 -466.2759118293427 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 381.02272727272725 -476.2113787873962 L 393.52272727272725 -476.2113787873962 L 387.27272727272725 -486.2113787873962 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 424.6590909090909 -484.0500608825396 L 437.1590909090909 -484.0500608825396 L 430.9090909090909 -494.0500608825396 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 468.2954545454545 -497.8495478522061 L 480.7954545454545 -497.8495478522061 L 474.5454545454545 -507.8495478522061 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.9318181818182 -494.7573028422468 L 524.4318181818182 -494.7573028422468 L 518.1818181818182 -504.7573028422468 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 555.5681818181818 -500.76338374619945 L 568.0681818181818 -500.76338374619945 L 561.8181818181818 -510.76338374619945 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 599.2045454545455 -501.67213833688993 L 611.7045454545455 -501.67213833688993 L 605.4545454545455 -511.67213833688993 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 642.840909090909 -504.6113072473497 L 655.340909090909 -504.6113072473497 L 649.090909090909 -514.6113072473497 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 686.4772727272727 -508.88881402772915 L 698.9772727272727 -508.88881402772915 L 692.7272727272727 -518.8888140277292 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 343.6363636363636 -435.0759500493675 L 337.3863636363636 -445.0759500493675 L 349.8863636363636 -445.0759500493675 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 387.27272727272725 -441.97407653314974 L 381.02272727272725 -451.97407653314974 L 393.52272727272725 -451.97407653314974 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 430.9090909090909 -446.33243336608166 L 424.6590909090909 -456.33243336608166 L 437.1590909090909 -456.33243336608166 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 474.5454545454545 -449.28399928459953 L 468.2954545454545 -459.28399928459953 L 480.7954545454545 -459.28399928459953 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 518.1818181818182 -452.6969495030172 L 511.9318181818182 -462.6969495030172 L 524.4318181818182 -462.6969495030172 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 561.8181818181818 -452.33528026793215 L 555.5681818181818 -462.33528026793215 L 568.0681818181818 -462.33528026793215 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 605.4545454545455 -453.19067382393797 L 599.2045454545455 -463.19067382393797 L 611.7045454545455 -463.19067382393797 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.090909090909 -454.40288561187566 L 642.840909090909 -464.40288561187566 L 655.340909090909 -464.40288561187566 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 692.7272727272727 -457.3361255184816 L 686.4772727272727 -467.3361255184816 L 698.9772727272727 -467.3361255184816 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 736.3636363636364 -462.6889379978097 L 730.1136363636364 -472.6889379978097 L 742.6136363636364 -472.6889379978097 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 343.6363636363636 -418.16804805923124 L 337.3863636363636 -428.16804805923124 L 349.8863636363636 -428.16804805923124 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 387.27272727272725 -425.19337862569614 L 381.02272727272725 -435.19337862569614 L 393.52272727272725 -435.19337862569614 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 430.9090909090909 -427.74015528110095 L 424.6590909090909 -437.74015528110095 L 437.1590909090909 -437.74015528110095 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 474.5454545454545 -432.0182010618307 L 468.2954545454545 -442.0182010618307 L 480.7954545454545 -442.0182010618307 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 518.1818181818182 -435.5766813748429 L 511.9318181818182 -445.5766813748429 L 524.4318181818182 -445.5766813748429 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 561.8181818181818 -439.89245718009715 L 555.5681818181818 -449.89245718009715 L 568.0681818181818 -449.89245718009715 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 605.4545454545455 -437.68363374436194 L 599.2045454545455 -447.68363374436194 L 611.7045454545455 -447.68363374436194 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 649.090909090909 -439.59492898670385 L 642.840909090909 -449.59492898670385 L 655.340909090909 -449.59492898670385 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 692.7272727272727 -440.9365008587256 L 686.4772727272727 -450.9365008587256 L 698.9772727272727 -450.9365008587256 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 736.3636363636364 -443.992093844861 L 730.1136363636364 -453.992093844861 L 742.6136363636364 -453.992093844861 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -74 L 290 -136 L 444.272 -136 L 444.272 -74 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.16e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.63e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.45e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.27e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.08e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -461.2759118293427 L 387.27272727272725 -481.2113787873962 L 430.9090909090909 -489.0500608825396 L 474.5454545454545 -502.8495478522061 L 518.1818181818182 -499.7573028422468 L 561.8181818181818 -505.76338374619945 L 605.4545454545455 -506.67213833688993 L 649.090909090909 -509.6113072473497 L 692.7272727272727 -513.8888140277292 L 736.3636363636364 -520.0" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 337.3863636363636 -456.2759118293427 L 337.3863636363636 -466.2759118293427 L 349.8863636363636 -466.2759118293427 L 349.8863636363636 -456.2759118293427 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -456.2759118293427 L 349.8863636363636 -456.2759118293427 L 343.6363636363636 -466.2759118293427 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 381.02272727272725 -476.2113787873962 L 381.02272727272725 -486.2113787873962 L 393.52272727272725 -486.2113787873962 L 393.52272727272725 -476.2113787873962 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -476.2113787873962 L 393.52272727272725 -476.2113787873962 L 387.27272727272725 -486.2113787873962 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 424.6590909090909 -484.0500608825396 L 424.6590909090909 -494.0500608825396 L 437.1590909090909 -494.0500608825396 L 437.1590909090909 -484.0500608825396 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -484.0500608825396 L 437.1590909090909 -484.0500608825396 L 430.9090909090909 -494.0500608825396 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 468.2954545454545 -497.8495478522061 L 468.2954545454545 -507.8495478522061 L 480.7954545454545 -507.8495478522061 L 480.7954545454545 -497.8495478522061 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -497.8495478522061 L 480.7954545454545 -497.8495478522061 L 474.5454545454545 -507.8495478522061 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 511.9318181818182 -494.7573028422468 L 511.9318181818182 -504.7573028422468 L 524.4318181818182 -504.7573028422468 L 524.4318181818182 -494.7573028422468 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -494.7573028422468 L 524.4318181818182 -494.7573028422468 L 518.1818181818182 -504.7573028422468 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 555.5681818181818 -500.76338374619945 L 555.5681818181818 -510.76338374619945 L 568.0681818181818 -510.76338374619945 L 568.0681818181818 -500.76338374619945 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -500.76338374619945 L 568.0681818181818 -500.76338374619945 L 561.8181818181818 -510.76338374619945 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 599.2045454545455 -501.67213833688993 L 599.2045454545455 -511.67213833688993 L 611.7045454545455 -511.67213833688993 L 611.7045454545455 -501.67213833688993 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -501.67213833688993 L 611.7045454545455 -501.67213833688993 L 605.4545454545455 -511.67213833688993 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 642.840909090909 -504.6113072473497 L 642.840909090909 -514.6113072473497 L 655.340909090909 -514.6113072473497 L 655.340909090909 -504.6113072473497 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -504.6113072473497 L 655.340909090909 -504.6113072473497 L 649.090909090909 -514.6113072473497 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 686.4772727272727 -508.88881402772915 L 686.4772727272727 -518.8888140277292 L 698.9772727272727 -518.8888140277292 L 698.9772727272727 -508.88881402772915 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -508.88881402772915 L 698.9772727272727 -508.88881402772915 L 692.7272727272727 -518.8888140277292 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 730.1136363636364 -515.0 L 730.1136363636364 -525.0 L 742.6136363636364 -525.0 L 742.6136363636364 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -515.0 L 742.6136363636364 -515.0 L 736.3636363636364 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 343.6363636363636 -440.0759500493675 L 387.27272727272725 -446.97407653314974 L 430.9090909090909 -451.33243336608166 L 474.5454545454545 -454.28399928459953 L 518.1818181818182 -457.6969495030172 L 561.8181818181818 -457.33528026793215 L 605.4545454545455 -458.19067382393797 L 649.090909090909 -459.40288561187566 L 692.7272727272727 -462.3361255184816 L 736.3636363636364 -467.6889379978097" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip15);">
+ <path d="M 337.3863636363636 -435.0759500493675 L 337.3863636363636 -445.0759500493675 L 349.8863636363636 -445.0759500493675 L 349.8863636363636 -435.0759500493675 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -435.0759500493675 L 337.3863636363636 -445.0759500493675 L 349.8863636363636 -445.0759500493675 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 381.02272727272725 -441.97407653314974 L 381.02272727272725 -451.97407653314974 L 393.52272727272725 -451.97407653314974 L 393.52272727272725 -441.97407653314974 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -441.97407653314974 L 381.02272727272725 -451.97407653314974 L 393.52272727272725 -451.97407653314974 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip17);">
+ <path d="M 424.6590909090909 -446.33243336608166 L 424.6590909090909 -456.33243336608166 L 437.1590909090909 -456.33243336608166 L 437.1590909090909 -446.33243336608166 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -446.33243336608166 L 424.6590909090909 -456.33243336608166 L 437.1590909090909 -456.33243336608166 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip18);">
+ <path d="M 468.2954545454545 -449.28399928459953 L 468.2954545454545 -459.28399928459953 L 480.7954545454545 -459.28399928459953 L 480.7954545454545 -449.28399928459953 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -449.28399928459953 L 468.2954545454545 -459.28399928459953 L 480.7954545454545 -459.28399928459953 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip19);">
+ <path d="M 511.9318181818182 -452.6969495030172 L 511.9318181818182 -462.6969495030172 L 524.4318181818182 -462.6969495030172 L 524.4318181818182 -452.6969495030172 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -452.6969495030172 L 511.9318181818182 -462.6969495030172 L 524.4318181818182 -462.6969495030172 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip20);">
+ <path d="M 555.5681818181818 -452.33528026793215 L 555.5681818181818 -462.33528026793215 L 568.0681818181818 -462.33528026793215 L 568.0681818181818 -452.33528026793215 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -452.33528026793215 L 555.5681818181818 -462.33528026793215 L 568.0681818181818 -462.33528026793215 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip21);">
+ <path d="M 599.2045454545455 -453.19067382393797 L 599.2045454545455 -463.19067382393797 L 611.7045454545455 -463.19067382393797 L 611.7045454545455 -453.19067382393797 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -453.19067382393797 L 599.2045454545455 -463.19067382393797 L 611.7045454545455 -463.19067382393797 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip22);">
+ <path d="M 642.840909090909 -454.40288561187566 L 642.840909090909 -464.40288561187566 L 655.340909090909 -464.40288561187566 L 655.340909090909 -454.40288561187566 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -454.40288561187566 L 642.840909090909 -464.40288561187566 L 655.340909090909 -464.40288561187566 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip23);">
+ <path d="M 686.4772727272727 -457.3361255184816 L 686.4772727272727 -467.3361255184816 L 698.9772727272727 -467.3361255184816 L 698.9772727272727 -457.3361255184816 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -457.3361255184816 L 686.4772727272727 -467.3361255184816 L 698.9772727272727 -467.3361255184816 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip24);">
+ <path d="M 730.1136363636364 -462.6889379978097 L 730.1136363636364 -472.6889379978097 L 742.6136363636364 -472.6889379978097 L 742.6136363636364 -462.6889379978097 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -462.6889379978097 L 730.1136363636364 -472.6889379978097 L 742.6136363636364 -472.6889379978097 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 343.6363636363636 -423.16804805923124 L 387.27272727272725 -430.19337862569614 L 430.9090909090909 -432.74015528110095 L 474.5454545454545 -437.0182010618307 L 518.1818181818182 -440.5766813748429 L 561.8181818181818 -444.89245718009715 L 605.4545454545455 -442.68363374436194 L 649.090909090909 -444.59492898670385 L 692.7272727272727 -445.9365008587256 L 736.3636363636364 -448.992093844861" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 337.3863636363636 -418.16804805923124 L 337.3863636363636 -428.16804805923124 L 349.8863636363636 -428.16804805923124 L 349.8863636363636 -418.16804805923124 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -418.16804805923124 L 337.3863636363636 -428.16804805923124 L 349.8863636363636 -428.16804805923124 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 381.02272727272725 -425.19337862569614 L 381.02272727272725 -435.19337862569614 L 393.52272727272725 -435.19337862569614 L 393.52272727272725 -425.19337862569614 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -425.19337862569614 L 381.02272727272725 -435.19337862569614 L 393.52272727272725 -435.19337862569614 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 424.6590909090909 -427.74015528110095 L 424.6590909090909 -437.74015528110095 L 437.1590909090909 -437.74015528110095 L 437.1590909090909 -427.74015528110095 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -427.74015528110095 L 424.6590909090909 -437.74015528110095 L 437.1590909090909 -437.74015528110095 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 468.2954545454545 -432.0182010618307 L 468.2954545454545 -442.0182010618307 L 480.7954545454545 -442.0182010618307 L 480.7954545454545 -432.0182010618307 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -432.0182010618307 L 468.2954545454545 -442.0182010618307 L 480.7954545454545 -442.0182010618307 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 511.9318181818182 -435.5766813748429 L 511.9318181818182 -445.5766813748429 L 524.4318181818182 -445.5766813748429 L 524.4318181818182 -435.5766813748429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -435.5766813748429 L 511.9318181818182 -445.5766813748429 L 524.4318181818182 -445.5766813748429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 555.5681818181818 -439.89245718009715 L 555.5681818181818 -449.89245718009715 L 568.0681818181818 -449.89245718009715 L 568.0681818181818 -439.89245718009715 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -439.89245718009715 L 555.5681818181818 -449.89245718009715 L 568.0681818181818 -449.89245718009715 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 599.2045454545455 -437.68363374436194 L 599.2045454545455 -447.68363374436194 L 611.7045454545455 -447.68363374436194 L 611.7045454545455 -437.68363374436194 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -437.68363374436194 L 599.2045454545455 -447.68363374436194 L 611.7045454545455 -447.68363374436194 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 642.840909090909 -439.59492898670385 L 642.840909090909 -449.59492898670385 L 655.340909090909 -449.59492898670385 L 655.340909090909 -439.59492898670385 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -439.59492898670385 L 642.840909090909 -449.59492898670385 L 655.340909090909 -449.59492898670385 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 686.4772727272727 -440.9365008587256 L 686.4772727272727 -450.9365008587256 L 698.9772727272727 -450.9365008587256 L 698.9772727272727 -440.9365008587256 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -440.9365008587256 L 686.4772727272727 -450.9365008587256 L 698.9772727272727 -450.9365008587256 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 730.1136363636364 -443.992093844861 L 730.1136363636364 -453.992093844861 L 742.6136363636364 -453.992093844861 L 742.6136363636364 -443.992093844861 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -443.992093844861 L 730.1136363636364 -453.992093844861 L 742.6136363636364 -453.992093844861 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -74 L 290 -136 L 444.272 -136 L 444.272 -74 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 301.75 -120.33333333333334 L 301.75 -130.33333333333334 L 314.25 -130.33333333333334 L 314.25 -120.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -120.33333333333334 L 314.25 -120.33333333333334 L 308.0 -130.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ splay_tree_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip39);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ rb_tree_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdf
new file mode 100644
index 0000000000..672504cd05
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.png b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.png
new file mode 100644
index 0000000000..3420298ce4
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg
new file mode 100644
index 0000000000..a202fb38f6
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg
@@ -0,0 +1,251 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 456" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 343.6363636363636 -425.64688394752534 L 337.3863636363636 -435.64688394752534 L 349.8863636363636 -435.64688394752534 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 387.27272727272725 -432.0806702603394 L 381.02272727272725 -442.0806702603394 L 393.52272727272725 -442.0806702603394 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 430.9090909090909 -436.1456488605437 L 424.6590909090909 -446.1456488605437 L 437.1590909090909 -446.1456488605437 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 474.5454545454545 -438.8985332056734 L 468.2954545454545 -448.8985332056734 L 480.7954545454545 -448.8985332056734 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 518.1818181818182 -442.08174424901915 L 511.9318181818182 -452.08174424901915 L 524.4318181818182 -452.08174424901915 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 561.8181818181818 -441.7444204003007 L 555.5681818181818 -451.7444204003007 L 568.0681818181818 -451.7444204003007 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 605.4545454545455 -442.5422340335587 L 599.2045454545455 -452.5422340335587 L 611.7045454545455 -452.5422340335587 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 649.090909090909 -443.6728470525866 L 642.840909090909 -453.6728470525866 L 655.340909090909 -453.6728470525866 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 692.7272727272727 -446.40863898213297 L 686.4772727272727 -456.40863898213297 L 698.9772727272727 -456.40863898213297 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 736.3636363636364 -451.40113248678654 L 730.1136363636364 -461.40113248678654 L 742.6136363636364 -461.40113248678654 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -94 L 290 -136 L 423.824 -136 L 423.824 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 8.75e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 1.75e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 2.63e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 3.50e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 4.38e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -520.0 L 387.27272727272725 -514.0880350805835 L 430.9090909090909 -489.1949426558598 L 474.5454545454545 -489.1949426558598 L 518.1818181818182 -500.2024582915354 L 561.8181818181818 -517.349167430265 L 605.4545454545455 -479.8132173730237 L 649.090909090909 -472.50118253008884 L 692.7272727272727 -479.98564968317334 L 736.3636363636364 -486.29928636879856" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 336.4935064935065 -520.0 L 350.7792207792208 -520.0" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -512.8571428571429 L 343.6363636363636 -527.1428571428571" style="stroke-width:1;"/>
+ <path d="M 380.12987012987014 -514.0880350805835 L 394.4155844155844 -514.0880350805835" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -506.94517793772627 L 387.27272727272725 -521.2308922234406" style="stroke-width:1;"/>
+ <path d="M 423.76623376623377 -489.1949426558598 L 438.05194805194805 -489.1949426558598" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -482.0520855130026 L 430.9090909090909 -496.3377997987169" style="stroke-width:1;"/>
+ <path d="M 467.4025974025974 -489.1949426558598 L 481.68831168831167 -489.1949426558598" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -482.0520855130026 L 474.5454545454545 -496.3377997987169" style="stroke-width:1;"/>
+ <path d="M 511.038961038961 -500.2024582915354 L 525.3246753246754 -500.2024582915354" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -493.0596011486782 L 518.1818181818182 -507.34531543439255" style="stroke-width:1;"/>
+ <path d="M 554.6753246753246 -517.349167430265 L 568.961038961039 -517.349167430265" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -510.20631028740786 L 561.8181818181818 -524.4920245731221" style="stroke-width:1;"/>
+ <path d="M 598.3116883116883 -479.8132173730237 L 612.5974025974026 -479.8132173730237" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -472.6703602301666 L 605.4545454545455 -486.9560745158808" style="stroke-width:1;"/>
+ <path d="M 641.9480519480519 -472.50118253008884 L 656.2337662337662 -472.50118253008884" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -465.35832538723173 L 649.090909090909 -479.64403967294595" style="stroke-width:1;"/>
+ <path d="M 685.5844155844156 -479.98564968317334 L 699.8701298701299 -479.98564968317334" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -472.84279254031617 L 692.7272727272727 -487.1285068260305" style="stroke-width:1;"/>
+ <path d="M 729.2207792207791 -486.29928636879856 L 743.5064935064936 -486.29928636879856" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -479.15642922594145 L 736.3636363636364 -493.4421435116557" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 343.6363636363636 -430.64688394752534 L 387.27272727272725 -437.0806702603394 L 430.9090909090909 -441.1456488605437 L 474.5454545454545 -443.8985332056734 L 518.1818181818182 -447.08174424901915 L 561.8181818181818 -446.7444204003007 L 605.4545454545455 -447.5422340335587 L 649.090909090909 -448.6728470525866 L 692.7272727272727 -451.40863898213297 L 736.3636363636364 -456.40113248678654" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 337.3863636363636 -425.64688394752534 L 337.3863636363636 -435.64688394752534 L 349.8863636363636 -435.64688394752534 L 349.8863636363636 -425.64688394752534 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -425.64688394752534 L 337.3863636363636 -435.64688394752534 L 349.8863636363636 -435.64688394752534 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 381.02272727272725 -432.0806702603394 L 381.02272727272725 -442.0806702603394 L 393.52272727272725 -442.0806702603394 L 393.52272727272725 -432.0806702603394 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -432.0806702603394 L 381.02272727272725 -442.0806702603394 L 393.52272727272725 -442.0806702603394 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 424.6590909090909 -436.1456488605437 L 424.6590909090909 -446.1456488605437 L 437.1590909090909 -446.1456488605437 L 437.1590909090909 -436.1456488605437 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -436.1456488605437 L 424.6590909090909 -446.1456488605437 L 437.1590909090909 -446.1456488605437 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 468.2954545454545 -438.8985332056734 L 468.2954545454545 -448.8985332056734 L 480.7954545454545 -448.8985332056734 L 480.7954545454545 -438.8985332056734 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -438.8985332056734 L 468.2954545454545 -448.8985332056734 L 480.7954545454545 -448.8985332056734 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 511.9318181818182 -442.08174424901915 L 511.9318181818182 -452.08174424901915 L 524.4318181818182 -452.08174424901915 L 524.4318181818182 -442.08174424901915 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -442.08174424901915 L 511.9318181818182 -452.08174424901915 L 524.4318181818182 -452.08174424901915 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 555.5681818181818 -441.7444204003007 L 555.5681818181818 -451.7444204003007 L 568.0681818181818 -451.7444204003007 L 568.0681818181818 -441.7444204003007 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -441.7444204003007 L 555.5681818181818 -451.7444204003007 L 568.0681818181818 -451.7444204003007 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 599.2045454545455 -442.5422340335587 L 599.2045454545455 -452.5422340335587 L 611.7045454545455 -452.5422340335587 L 611.7045454545455 -442.5422340335587 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -442.5422340335587 L 599.2045454545455 -452.5422340335587 L 611.7045454545455 -452.5422340335587 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 642.840909090909 -443.6728470525866 L 642.840909090909 -453.6728470525866 L 655.340909090909 -453.6728470525866 L 655.340909090909 -443.6728470525866 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -443.6728470525866 L 642.840909090909 -453.6728470525866 L 655.340909090909 -453.6728470525866 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 686.4772727272727 -446.40863898213297 L 686.4772727272727 -456.40863898213297 L 698.9772727272727 -456.40863898213297 L 698.9772727272727 -446.40863898213297 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -446.40863898213297 L 686.4772727272727 -456.40863898213297 L 698.9772727272727 -456.40863898213297 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip14);">
+ <path d="M 730.1136363636364 -451.40113248678654 L 730.1136363636364 -461.40113248678654 L 742.6136363636364 -461.40113248678654 L 742.6136363636364 -451.40113248678654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -451.40113248678654 L 730.1136363636364 -461.40113248678654 L 742.6136363636364 -461.40113248678654 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -94 L 290 -136 L 423.824 -136 L 423.824 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 300.85714285714283 -125.33333333333334 L 315.14285714285717 -125.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -118.1904761904762 L 308.0 -132.47619047619048" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ pat_trie_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_map
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdf
new file mode 100644
index 0000000000..aceb552da7
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.png b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.png
new file mode 100644
index 0000000000..cdb367ef60
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg
new file mode 100644
index 0000000000..72e9931d7f
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg
@@ -0,0 +1,273 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 456" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 343.6363636363636 -318.3814890850053 L 337.3863636363636 -328.3814890850053 L 349.8863636363636 -328.3814890850053 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 387.27272727272725 -319.53292492413897 L 381.02272727272725 -329.53292492413897 L 393.52272727272725 -329.53292492413897 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 430.9090909090909 -320.26042220459175 L 424.6590909090909 -330.26042220459175 L 437.1590909090909 -330.26042220459175 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 474.5454545454545 -320.7530978300876 L 468.2954545454545 -330.7530978300876 L 480.7954545454545 -330.7530978300876 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 518.1818181818182 -321.32278776081074 L 511.9318181818182 -331.32278776081074 L 524.4318181818182 -331.32278776081074 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 561.8181818181818 -321.2624179023908 L 555.5681818181818 -331.2624179023908 L 568.0681818181818 -331.2624179023908 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 605.4545454545455 -321.40520026500246 L 599.2045454545455 -331.40520026500246 L 611.7045454545455 -331.40520026500246 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 649.090909090909 -321.60754275618956 L 642.840909090909 -331.60754275618956 L 655.340909090909 -331.60754275618956 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 692.7272727272727 -322.09715940227215 L 686.4772727272727 -332.09715940227215 L 698.9772727272727 -332.09715940227215 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 736.3636363636364 -322.99065130088417 L 730.1136363636364 -332.99065130088417 L 742.6136363636364 -332.99065130088417 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -94 L 290 -136 L 423.824 -136 L 423.824 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 4.89e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 9.78e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.47e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.96e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 2.45e-06
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -376.7025592370546 L 387.27272727272725 -395.3016039194196 L 430.9090909090909 -413.47554043332815 L 474.5454545454545 -435.62794958409336 L 518.1818181818182 -456.46949608630575 L 561.8181818181818 -470.7081455550739 L 605.4545454545455 -477.6412324251818 L 649.090909090909 -493.6855794475843 L 692.7272727272727 -502.831028193321 L 736.3636363636364 -520.0" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 338.6363636363636 -371.7025592370546 L 348.6363636363636 -381.7025592370546" style="stroke-width:1;"/>
+ <path d="M 348.6363636363636 -371.7025592370546 L 338.6363636363636 -381.7025592370546" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -369.6325592370546 L 343.6363636363636 -383.77255923705457" style="stroke-width:1;"/>
+ <path d="M 336.56636363636363 -376.7025592370546 L 350.7063636363636 -376.7025592370546" style="stroke-width:1;"/>
+ <path d="M 382.27272727272725 -390.3016039194196 L 392.27272727272725 -400.3016039194196" style="stroke-width:1;"/>
+ <path d="M 392.27272727272725 -390.3016039194196 L 382.27272727272725 -400.3016039194196" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -388.2316039194196 L 387.27272727272725 -402.3716039194196" style="stroke-width:1;"/>
+ <path d="M 380.20272727272726 -395.3016039194196 L 394.34272727272725 -395.3016039194196" style="stroke-width:1;"/>
+ <path d="M 425.9090909090909 -408.47554043332815 L 435.9090909090909 -418.47554043332815" style="stroke-width:1;"/>
+ <path d="M 435.9090909090909 -408.47554043332815 L 425.9090909090909 -418.47554043332815" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -406.40554043332816 L 430.9090909090909 -420.54554043332814" style="stroke-width:1;"/>
+ <path d="M 423.83909090909094 -413.47554043332815 L 437.9790909090909 -413.47554043332815" style="stroke-width:1;"/>
+ <path d="M 469.5454545454545 -430.62794958409336 L 479.5454545454545 -440.62794958409336" style="stroke-width:1;"/>
+ <path d="M 479.5454545454545 -430.62794958409336 L 469.5454545454545 -440.62794958409336" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -428.5579495840933 L 474.5454545454545 -442.6979495840933" style="stroke-width:1;"/>
+ <path d="M 467.47545454545457 -435.62794958409336 L 481.61545454545455 -435.62794958409336" style="stroke-width:1;"/>
+ <path d="M 513.1818181818182 -451.46949608630575 L 523.1818181818182 -461.46949608630575" style="stroke-width:1;"/>
+ <path d="M 523.1818181818182 -451.46949608630575 L 513.1818181818182 -461.46949608630575" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -449.39949608630576 L 518.1818181818182 -463.53949608630575" style="stroke-width:1;"/>
+ <path d="M 511.1118181818182 -456.46949608630575 L 525.2518181818182 -456.46949608630575" style="stroke-width:1;"/>
+ <path d="M 556.8181818181818 -465.7081455550739 L 566.8181818181818 -475.7081455550739" style="stroke-width:1;"/>
+ <path d="M 566.8181818181818 -465.7081455550739 L 556.8181818181818 -475.7081455550739" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -463.6381455550739 L 561.8181818181818 -477.7781455550739" style="stroke-width:1;"/>
+ <path d="M 554.7481818181818 -470.7081455550739 L 568.8881818181818 -470.7081455550739" style="stroke-width:1;"/>
+ <path d="M 600.4545454545455 -472.6412324251818 L 610.4545454545455 -482.6412324251818" style="stroke-width:1;"/>
+ <path d="M 610.4545454545455 -472.6412324251818 L 600.4545454545455 -482.6412324251818" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -470.57123242518173 L 605.4545454545455 -484.7112324251817" style="stroke-width:1;"/>
+ <path d="M 598.3845454545454 -477.6412324251818 L 612.5245454545454 -477.6412324251818" style="stroke-width:1;"/>
+ <path d="M 644.090909090909 -488.6855794475843 L 654.090909090909 -498.6855794475843" style="stroke-width:1;"/>
+ <path d="M 654.090909090909 -488.6855794475843 L 644.090909090909 -498.6855794475843" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -486.6155794475843 L 649.090909090909 -500.7555794475843" style="stroke-width:1;"/>
+ <path d="M 642.0209090909091 -493.6855794475843 L 656.1609090909091 -493.6855794475843" style="stroke-width:1;"/>
+ <path d="M 687.7272727272727 -497.831028193321 L 697.7272727272727 -507.831028193321" style="stroke-width:1;"/>
+ <path d="M 697.7272727272727 -497.831028193321 L 687.7272727272727 -507.831028193321" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -495.76102819332095 L 692.7272727272727 -509.90102819332094" style="stroke-width:1;"/>
+ <path d="M 685.6572727272728 -502.831028193321 L 699.7972727272727 -502.831028193321" style="stroke-width:1;"/>
+ <path d="M 731.3636363636364 -515.0 L 741.3636363636364 -525.0" style="stroke-width:1;"/>
+ <path d="M 741.3636363636364 -515.0 L 731.3636363636364 -525.0" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -512.9300000000001 L 736.3636363636364 -527.0699999999999" style="stroke-width:1;"/>
+ <path d="M 729.2936363636363 -520.0 L 743.4336363636364 -520.0" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 343.6363636363636 -323.3814890850053 L 387.27272727272725 -324.53292492413897 L 430.9090909090909 -325.26042220459175 L 474.5454545454545 -325.7530978300876 L 518.1818181818182 -326.32278776081074 L 561.8181818181818 -326.2624179023908 L 605.4545454545455 -326.40520026500246 L 649.090909090909 -326.60754275618956 L 692.7272727272727 -327.09715940227215 L 736.3636363636364 -327.99065130088417" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 337.3863636363636 -318.3814890850053 L 337.3863636363636 -328.3814890850053 L 349.8863636363636 -328.3814890850053 L 349.8863636363636 -318.3814890850053 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -318.3814890850053 L 337.3863636363636 -328.3814890850053 L 349.8863636363636 -328.3814890850053 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 381.02272727272725 -319.53292492413897 L 381.02272727272725 -329.53292492413897 L 393.52272727272725 -329.53292492413897 L 393.52272727272725 -319.53292492413897 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -319.53292492413897 L 381.02272727272725 -329.53292492413897 L 393.52272727272725 -329.53292492413897 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 424.6590909090909 -320.26042220459175 L 424.6590909090909 -330.26042220459175 L 437.1590909090909 -330.26042220459175 L 437.1590909090909 -320.26042220459175 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -320.26042220459175 L 424.6590909090909 -330.26042220459175 L 437.1590909090909 -330.26042220459175 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 468.2954545454545 -320.7530978300876 L 468.2954545454545 -330.7530978300876 L 480.7954545454545 -330.7530978300876 L 480.7954545454545 -320.7530978300876 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -320.7530978300876 L 468.2954545454545 -330.7530978300876 L 480.7954545454545 -330.7530978300876 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 511.9318181818182 -321.32278776081074 L 511.9318181818182 -331.32278776081074 L 524.4318181818182 -331.32278776081074 L 524.4318181818182 -321.32278776081074 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -321.32278776081074 L 511.9318181818182 -331.32278776081074 L 524.4318181818182 -331.32278776081074 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 555.5681818181818 -321.2624179023908 L 555.5681818181818 -331.2624179023908 L 568.0681818181818 -331.2624179023908 L 568.0681818181818 -321.2624179023908 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -321.2624179023908 L 555.5681818181818 -331.2624179023908 L 568.0681818181818 -331.2624179023908 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 599.2045454545455 -321.40520026500246 L 599.2045454545455 -331.40520026500246 L 611.7045454545455 -331.40520026500246 L 611.7045454545455 -321.40520026500246 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -321.40520026500246 L 599.2045454545455 -331.40520026500246 L 611.7045454545455 -331.40520026500246 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 642.840909090909 -321.60754275618956 L 642.840909090909 -331.60754275618956 L 655.340909090909 -331.60754275618956 L 655.340909090909 -321.60754275618956 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -321.60754275618956 L 642.840909090909 -331.60754275618956 L 655.340909090909 -331.60754275618956 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 686.4772727272727 -322.09715940227215 L 686.4772727272727 -332.09715940227215 L 698.9772727272727 -332.09715940227215 L 698.9772727272727 -322.09715940227215 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -322.09715940227215 L 686.4772727272727 -332.09715940227215 L 698.9772727272727 -332.09715940227215 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip14);">
+ <path d="M 730.1136363636364 -322.99065130088417 L 730.1136363636364 -332.99065130088417 L 742.6136363636364 -332.99065130088417 L 742.6136363636364 -322.99065130088417 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -322.99065130088417 L 730.1136363636364 -332.99065130088417 L 742.6136363636364 -332.99065130088417 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -94 L 290 -136 L 423.824 -136 L 423.824 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 303.0 -120.33333333333334 L 313.0 -130.33333333333334" style="stroke-width:1;"/>
+ <path d="M 313.0 -120.33333333333334 L 303.0 -130.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -118.26333333333335 L 308.0 -132.40333333333334" style="stroke-width:1;"/>
+ <path d="M 300.93 -125.33333333333334 L 315.07 -125.33333333333334" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ ov_tree_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip16);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_map
+ </text>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdf b/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdf
new file mode 100644
index 0000000000..01a8f24786
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdf
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.png b/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.png
new file mode 100644
index 0000000000..acc4a6f274
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg b/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
new file mode 100644
index 0000000000..9c5e44adaf
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
@@ -0,0 +1,501 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="178 -544 620 496" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 343.6363636363636 -457.25444226151495 L 337.3863636363636 -467.25444226151495 L 349.8863636363636 -467.25444226151495 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 387.27272727272725 -471.6905915738922 L 381.02272727272725 -481.6905915738922 L 393.52272727272725 -481.6905915738922 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 430.9090909090909 -478.1479589609256 L 424.6590909090909 -488.1479589609256 L 437.1590909090909 -488.1479589609256 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 474.5454545454545 -485.3160881903515 L 468.2954545454545 -495.3160881903515 L 480.7954545454545 -495.3160881903515 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 518.1818181818182 -488.81130757476535 L 511.9318181818182 -498.81130757476535 L 524.4318181818182 -498.81130757476535 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 561.8181818181818 -494.11704867932764 L 555.5681818181818 -504.11704867932764 L 568.0681818181818 -504.11704867932764 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 605.4545454545455 -496.24549225060025 L 599.2045454545455 -506.24549225060025 L 611.7045454545455 -506.24549225060025 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 649.090909090909 -495.10154987993883 L 642.840909090909 -505.10154987993883 L 655.340909090909 -505.10154987993883 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 692.7272727272727 -508.47251691770356 L 686.4772727272727 -518.4725169177036 L 698.9772727272727 -518.4725169177036 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 736.3636363636364 -509.5425016371971 L 730.1136363636364 -519.5425016371971 L 742.6136363636364 -519.5425016371971 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 343.6363636363636 -458.6317834533944 L 337.3863636363636 -468.6317834533944 L 349.8863636363636 -468.6317834533944 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 387.27272727272725 -472.8114822091246 L 381.02272727272725 -482.8114822091246 L 393.52272727272725 -482.8114822091246 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 430.9090909090909 -480.7537655533726 L 424.6590909090909 -490.7537655533726 L 437.1590909090909 -490.7537655533726 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 474.5454545454545 -485.5734992359746 L 468.2954545454545 -495.5734992359746 L 480.7954545454545 -495.5734992359746 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 518.1818181818182 -295.0 L 511.9318181818182 -305.0 L 524.4318181818182 -305.0 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 561.8181818181818 -503.84776249727133 L 555.5681818181818 -513.8477624972713 L 568.0681818181818 -513.8477624972713 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 605.4545454545455 -498.3662519100633 L 599.2045454545455 -508.3662519100633 L 611.7045454545455 -508.3662519100633 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 649.090909090909 -502.22837808338795 L 642.840909090909 -512.228378083388 L 655.340909090909 -512.228378083388 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 692.7272727272727 -505.8071600087317 L 686.4772727272727 -515.8071600087317 L 698.9772727272727 -515.8071600087317 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 736.3636363636364 -513.6908535254311 L 730.1136363636364 -523.6908535254311 L 742.6136363636364 -523.6908535254311 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 337.3863636363636 -341.5207072691552 L 349.8863636363636 -341.5207072691552 L 343.6363636363636 -351.5207072691552 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 381.02272727272725 -342.44777122898927 L 393.52272727272725 -342.44777122898927 L 387.27272727272725 -352.44777122898927 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 424.6590909090909 -342.3242523466492 L 437.1590909090909 -342.3242523466492 L 430.9090909090909 -352.3242523466492 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 468.2954545454545 -345.4922331368697 L 480.7954545454545 -345.4922331368697 L 474.5454545454545 -355.4922331368697 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 511.9318181818182 -346.01502728661865 L 524.4318181818182 -346.01502728661865 L 518.1818181818182 -356.01502728661865 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 555.5681818181818 -345.949617987339 L 568.0681818181818 -345.949617987339 L 561.8181818181818 -355.949617987339 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 599.2045454545455 -346.4659768609474 L 611.7045454545455 -346.4659768609474 L 605.4545454545455 -356.4659768609474 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 642.840909090909 -347.9708709888671 L 655.340909090909 -347.9708709888671 L 649.090909090909 -357.9708709888671 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 686.4772727272727 -364.6439030779306 L 698.9772727272727 -364.6439030779306 L 692.7272727272727 -374.6439030779306 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 730.1136363636364 -352.654695481336 L 742.6136363636364 -352.654695481336 L 736.3636363636364 -362.654695481336 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -54 L 290 -136 L 444.272 -136 L 444.272 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:8;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,300,-288)" x="300.0" y="-288.0">
+ 0
+ </text>
+ <path d="M 343.6363636363636 -300 L 343.6363636363636 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,343.636,-288)" x="343.6363636363636" y="-288.0">
+ 200
+ </text>
+ <path d="M 387.27272727272725 -300 L 387.27272727272725 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,387.273,-288)" x="387.27272727272725" y="-288.0">
+ 400
+ </text>
+ <path d="M 430.9090909090909 -300 L 430.9090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,430.909,-288)" x="430.9090909090909" y="-288.0">
+ 600
+ </text>
+ <path d="M 474.5454545454545 -300 L 474.5454545454545 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,474.545,-288)" x="474.5454545454545" y="-288.0">
+ 800
+ </text>
+ <path d="M 518.1818181818182 -300 L 518.1818181818182 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,518.182,-288)" x="518.1818181818182" y="-288.0">
+ 1000
+ </text>
+ <path d="M 561.8181818181818 -300 L 561.8181818181818 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,561.818,-288)" x="561.8181818181818" y="-288.0">
+ 1200
+ </text>
+ <path d="M 605.4545454545455 -300 L 605.4545454545455 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,605.455,-288)" x="605.4545454545455" y="-288.0">
+ 1400
+ </text>
+ <path d="M 649.090909090909 -300 L 649.090909090909 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,649.091,-288)" x="649.090909090909" y="-288.0">
+ 1600
+ </text>
+ <path d="M 692.7272727272727 -300 L 692.7272727272727 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,692.727,-288)" x="692.7272727272727" y="-288.0">
+ 1800
+ </text>
+ <path d="M 736.3636363636364 -300 L 736.3636363636364 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,736.364,-288)" x="736.3636363636364" y="-288.0">
+ 2000
+ </text>
+ <path d="M 780.0 -300 L 780.0 -288"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" transform="rotate(90,780,-288)" x="780.0" y="-288.0">
+ 2200
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="524.44" y="-220.0">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-294.0">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-338.0">
+ 4.58e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-382.0">
+ 9.16e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-426.0">
+ 1.37e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-470.0">
+ 1.83e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:12;font-style:italic;stroke:none;fill:rgb(0,0,0);" x="238.0" y="-514.0">
+ 2.29e-07
+ </text>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,200,-340.648)" x="200.0" y="-340.648">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 343.6363636363636 -465.1580004365859 L 387.27272727272725 -478.9583060467147 L 430.9090909090909 -489.1817507094521 L 474.5454545454545 -495.6640908098668 L 518.1818181818182 -501.2483737175289 L 561.8181818181818 -506.5569962890198 L 605.4545454545455 -514.3311940624318 L 649.090909090909 -515.5855926653569 L 692.7272727272727 -518.9146474568871 L 736.3636363636364 -520.0" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 338.6363636363636 -460.1580004365859 L 348.6363636363636 -470.1580004365859" style="stroke-width:1;"/>
+ <path d="M 348.6363636363636 -460.1580004365859 L 338.6363636363636 -470.1580004365859" style="stroke-width:1;"/>
+ <path d="M 343.6363636363636 -458.08800043658596 L 343.6363636363636 -472.22800043658594" style="stroke-width:1;"/>
+ <path d="M 336.56636363636363 -465.1580004365859 L 350.7063636363636 -465.1580004365859" style="stroke-width:1;"/>
+ <path d="M 382.27272727272725 -473.9583060467147 L 392.27272727272725 -483.9583060467147" style="stroke-width:1;"/>
+ <path d="M 392.27272727272725 -473.9583060467147 L 382.27272727272725 -483.9583060467147" style="stroke-width:1;"/>
+ <path d="M 387.27272727272725 -471.88830604671466 L 387.27272727272725 -486.02830604671465" style="stroke-width:1;"/>
+ <path d="M 380.20272727272726 -478.9583060467147 L 394.34272727272725 -478.9583060467147" style="stroke-width:1;"/>
+ <path d="M 425.9090909090909 -484.1817507094521 L 435.9090909090909 -494.1817507094521" style="stroke-width:1;"/>
+ <path d="M 435.9090909090909 -484.1817507094521 L 425.9090909090909 -494.1817507094521" style="stroke-width:1;"/>
+ <path d="M 430.9090909090909 -482.11175070945205 L 430.9090909090909 -496.25175070945204" style="stroke-width:1;"/>
+ <path d="M 423.83909090909094 -489.1817507094521 L 437.9790909090909 -489.1817507094521" style="stroke-width:1;"/>
+ <path d="M 469.5454545454545 -490.6640908098668 L 479.5454545454545 -500.6640908098668" style="stroke-width:1;"/>
+ <path d="M 479.5454545454545 -490.6640908098668 L 469.5454545454545 -500.6640908098668" style="stroke-width:1;"/>
+ <path d="M 474.5454545454545 -488.5940908098668 L 474.5454545454545 -502.7340908098668" style="stroke-width:1;"/>
+ <path d="M 467.47545454545457 -495.6640908098668 L 481.61545454545455 -495.6640908098668" style="stroke-width:1;"/>
+ <path d="M 513.1818181818182 -496.2483737175289 L 523.1818181818182 -506.2483737175289" style="stroke-width:1;"/>
+ <path d="M 523.1818181818182 -496.2483737175289 L 513.1818181818182 -506.2483737175289" style="stroke-width:1;"/>
+ <path d="M 518.1818181818182 -494.17837371752887 L 518.1818181818182 -508.31837371752886" style="stroke-width:1;"/>
+ <path d="M 511.1118181818182 -501.2483737175289 L 525.2518181818182 -501.2483737175289" style="stroke-width:1;"/>
+ <path d="M 556.8181818181818 -501.5569962890198 L 566.8181818181818 -511.5569962890198" style="stroke-width:1;"/>
+ <path d="M 566.8181818181818 -501.5569962890198 L 556.8181818181818 -511.5569962890198" style="stroke-width:1;"/>
+ <path d="M 561.8181818181818 -499.4869962890199 L 561.8181818181818 -513.6269962890199" style="stroke-width:1;"/>
+ <path d="M 554.7481818181818 -506.5569962890198 L 568.8881818181818 -506.5569962890198" style="stroke-width:1;"/>
+ <path d="M 600.4545454545455 -509.3311940624318 L 610.4545454545455 -519.3311940624318" style="stroke-width:1;"/>
+ <path d="M 610.4545454545455 -509.3311940624318 L 600.4545454545455 -519.3311940624318" style="stroke-width:1;"/>
+ <path d="M 605.4545454545455 -507.2611940624318 L 605.4545454545455 -521.4011940624318" style="stroke-width:1;"/>
+ <path d="M 598.3845454545454 -514.3311940624318 L 612.5245454545454 -514.3311940624318" style="stroke-width:1;"/>
+ <path d="M 644.090909090909 -510.5855926653569 L 654.090909090909 -520.5855926653569" style="stroke-width:1;"/>
+ <path d="M 654.090909090909 -510.5855926653569 L 644.090909090909 -520.5855926653569" style="stroke-width:1;"/>
+ <path d="M 649.090909090909 -508.51559266535696 L 649.090909090909 -522.655592665357" style="stroke-width:1;"/>
+ <path d="M 642.0209090909091 -515.5855926653569 L 656.1609090909091 -515.5855926653569" style="stroke-width:1;"/>
+ <path d="M 687.7272727272727 -513.9146474568871 L 697.7272727272727 -523.9146474568871" style="stroke-width:1;"/>
+ <path d="M 697.7272727272727 -513.9146474568871 L 687.7272727272727 -523.9146474568871" style="stroke-width:1;"/>
+ <path d="M 692.7272727272727 -511.8446474568871 L 692.7272727272727 -525.9846474568872" style="stroke-width:1;"/>
+ <path d="M 685.6572727272728 -518.9146474568871 L 699.7972727272727 -518.9146474568871" style="stroke-width:1;"/>
+ <path d="M 731.3636363636364 -515.0 L 741.3636363636364 -525.0" style="stroke-width:1;"/>
+ <path d="M 741.3636363636364 -515.0 L 731.3636363636364 -525.0" style="stroke-width:1;"/>
+ <path d="M 736.3636363636364 -512.9300000000001 L 736.3636363636364 -527.0699999999999" style="stroke-width:1;"/>
+ <path d="M 729.2936363636363 -520.0 L 743.4336363636364 -520.0" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 343.6363636363636 -462.25444226151495 L 387.27272727272725 -476.6905915738922 L 430.9090909090909 -483.1479589609256 L 474.5454545454545 -490.3160881903515 L 518.1818181818182 -493.81130757476535 L 561.8181818181818 -499.11704867932764 L 605.4545454545455 -501.24549225060025 L 649.090909090909 -500.10154987993883 L 692.7272727272727 -513.4725169177036 L 736.3636363636364 -514.5425016371971" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip5);">
+ <path d="M 337.3863636363636 -457.25444226151495 L 337.3863636363636 -467.25444226151495 L 349.8863636363636 -467.25444226151495 L 349.8863636363636 -457.25444226151495 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -457.25444226151495 L 337.3863636363636 -467.25444226151495 L 349.8863636363636 -467.25444226151495 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip6);">
+ <path d="M 381.02272727272725 -471.6905915738922 L 381.02272727272725 -481.6905915738922 L 393.52272727272725 -481.6905915738922 L 393.52272727272725 -471.6905915738922 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -471.6905915738922 L 381.02272727272725 -481.6905915738922 L 393.52272727272725 -481.6905915738922 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip7);">
+ <path d="M 424.6590909090909 -478.1479589609256 L 424.6590909090909 -488.1479589609256 L 437.1590909090909 -488.1479589609256 L 437.1590909090909 -478.1479589609256 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -478.1479589609256 L 424.6590909090909 -488.1479589609256 L 437.1590909090909 -488.1479589609256 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip8);">
+ <path d="M 468.2954545454545 -485.3160881903515 L 468.2954545454545 -495.3160881903515 L 480.7954545454545 -495.3160881903515 L 480.7954545454545 -485.3160881903515 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -485.3160881903515 L 468.2954545454545 -495.3160881903515 L 480.7954545454545 -495.3160881903515 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip9);">
+ <path d="M 511.9318181818182 -488.81130757476535 L 511.9318181818182 -498.81130757476535 L 524.4318181818182 -498.81130757476535 L 524.4318181818182 -488.81130757476535 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -488.81130757476535 L 511.9318181818182 -498.81130757476535 L 524.4318181818182 -498.81130757476535 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip10);">
+ <path d="M 555.5681818181818 -494.11704867932764 L 555.5681818181818 -504.11704867932764 L 568.0681818181818 -504.11704867932764 L 568.0681818181818 -494.11704867932764 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -494.11704867932764 L 555.5681818181818 -504.11704867932764 L 568.0681818181818 -504.11704867932764 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip11);">
+ <path d="M 599.2045454545455 -496.24549225060025 L 599.2045454545455 -506.24549225060025 L 611.7045454545455 -506.24549225060025 L 611.7045454545455 -496.24549225060025 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -496.24549225060025 L 599.2045454545455 -506.24549225060025 L 611.7045454545455 -506.24549225060025 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip12);">
+ <path d="M 642.840909090909 -495.10154987993883 L 642.840909090909 -505.10154987993883 L 655.340909090909 -505.10154987993883 L 655.340909090909 -495.10154987993883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -495.10154987993883 L 642.840909090909 -505.10154987993883 L 655.340909090909 -505.10154987993883 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip13);">
+ <path d="M 686.4772727272727 -508.47251691770356 L 686.4772727272727 -518.4725169177036 L 698.9772727272727 -518.4725169177036 L 698.9772727272727 -508.47251691770356 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -508.47251691770356 L 686.4772727272727 -518.4725169177036 L 698.9772727272727 -518.4725169177036 Z"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip14);">
+ <path d="M 730.1136363636364 -509.5425016371971 L 730.1136363636364 -519.5425016371971 L 742.6136363636364 -519.5425016371971 L 742.6136363636364 -509.5425016371971 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -509.5425016371971 L 730.1136363636364 -519.5425016371971 L 742.6136363636364 -519.5425016371971 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip15);">
+ <path d="M 343.6363636363636 -463.6317834533944 L 387.27272727272725 -477.8114822091246 L 430.9090909090909 -485.7537655533726 L 474.5454545454545 -490.5734992359746 L 518.1818181818182 -300.0 L 561.8181818181818 -508.84776249727133 L 605.4545454545455 -503.3662519100633 L 649.090909090909 -507.22837808338795 L 692.7272727272727 -510.8071600087317 L 736.3636363636364 -518.6908535254311" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip16);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 337.3863636363636 -458.6317834533944 L 337.3863636363636 -468.6317834533944 L 349.8863636363636 -468.6317834533944 L 349.8863636363636 -458.6317834533944 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.6363636363636 -458.6317834533944 L 337.3863636363636 -468.6317834533944 L 349.8863636363636 -468.6317834533944 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 381.02272727272725 -472.8114822091246 L 381.02272727272725 -482.8114822091246 L 393.52272727272725 -482.8114822091246 L 393.52272727272725 -472.8114822091246 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 387.27272727272725 -472.8114822091246 L 381.02272727272725 -482.8114822091246 L 393.52272727272725 -482.8114822091246 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 424.6590909090909 -480.7537655533726 L 424.6590909090909 -490.7537655533726 L 437.1590909090909 -490.7537655533726 L 437.1590909090909 -480.7537655533726 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 430.9090909090909 -480.7537655533726 L 424.6590909090909 -490.7537655533726 L 437.1590909090909 -490.7537655533726 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 468.2954545454545 -485.5734992359746 L 468.2954545454545 -495.5734992359746 L 480.7954545454545 -495.5734992359746 L 480.7954545454545 -485.5734992359746 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 474.5454545454545 -485.5734992359746 L 468.2954545454545 -495.5734992359746 L 480.7954545454545 -495.5734992359746 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 511.9318181818182 -295.0 L 511.9318181818182 -305.0 L 524.4318181818182 -305.0 L 524.4318181818182 -295.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 518.1818181818182 -295.0 L 511.9318181818182 -305.0 L 524.4318181818182 -305.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 555.5681818181818 -503.84776249727133 L 555.5681818181818 -513.8477624972713 L 568.0681818181818 -513.8477624972713 L 568.0681818181818 -503.84776249727133 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.8181818181818 -503.84776249727133 L 555.5681818181818 -513.8477624972713 L 568.0681818181818 -513.8477624972713 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 599.2045454545455 -498.3662519100633 L 599.2045454545455 -508.3662519100633 L 611.7045454545455 -508.3662519100633 L 611.7045454545455 -498.3662519100633 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 605.4545454545455 -498.3662519100633 L 599.2045454545455 -508.3662519100633 L 611.7045454545455 -508.3662519100633 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 642.840909090909 -502.22837808338795 L 642.840909090909 -512.228378083388 L 655.340909090909 -512.228378083388 L 655.340909090909 -502.22837808338795 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.090909090909 -502.22837808338795 L 642.840909090909 -512.228378083388 L 655.340909090909 -512.228378083388 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip25);">
+ <path d="M 686.4772727272727 -505.8071600087317 L 686.4772727272727 -515.8071600087317 L 698.9772727272727 -515.8071600087317 L 698.9772727272727 -505.8071600087317 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 692.7272727272727 -505.8071600087317 L 686.4772727272727 -515.8071600087317 L 698.9772727272727 -515.8071600087317 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip26);">
+ <path d="M 730.1136363636364 -513.6908535254311 L 730.1136363636364 -523.6908535254311 L 742.6136363636364 -523.6908535254311 L 742.6136363636364 -513.6908535254311 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 736.3636363636364 -513.6908535254311 L 730.1136363636364 -523.6908535254311 L 742.6136363636364 -523.6908535254311 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 343.6363636363636 -346.5207072691552 L 387.27272727272725 -347.44777122898927 L 430.9090909090909 -347.3242523466492 L 474.5454545454545 -350.4922331368697 L 518.1818181818182 -351.01502728661865 L 561.8181818181818 -350.949617987339 L 605.4545454545455 -351.4659768609474 L 649.090909090909 -352.9708709888671 L 692.7272727272727 -369.6439030779306 L 736.3636363636364 -357.654695481336" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 337.3863636363636 -341.5207072691552 L 337.3863636363636 -351.5207072691552 L 349.8863636363636 -351.5207072691552 L 349.8863636363636 -341.5207072691552 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 337.3863636363636 -341.5207072691552 L 349.8863636363636 -341.5207072691552 L 343.6363636363636 -351.5207072691552 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 381.02272727272725 -342.44777122898927 L 381.02272727272725 -352.44777122898927 L 393.52272727272725 -352.44777122898927 L 393.52272727272725 -342.44777122898927 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 381.02272727272725 -342.44777122898927 L 393.52272727272725 -342.44777122898927 L 387.27272727272725 -352.44777122898927 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 424.6590909090909 -342.3242523466492 L 424.6590909090909 -352.3242523466492 L 437.1590909090909 -352.3242523466492 L 437.1590909090909 -342.3242523466492 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 424.6590909090909 -342.3242523466492 L 437.1590909090909 -342.3242523466492 L 430.9090909090909 -352.3242523466492 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 468.2954545454545 -345.4922331368697 L 468.2954545454545 -355.4922331368697 L 480.7954545454545 -355.4922331368697 L 480.7954545454545 -345.4922331368697 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 468.2954545454545 -345.4922331368697 L 480.7954545454545 -345.4922331368697 L 474.5454545454545 -355.4922331368697 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 511.9318181818182 -346.01502728661865 L 511.9318181818182 -356.01502728661865 L 524.4318181818182 -356.01502728661865 L 524.4318181818182 -346.01502728661865 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.9318181818182 -346.01502728661865 L 524.4318181818182 -346.01502728661865 L 518.1818181818182 -356.01502728661865 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 555.5681818181818 -345.949617987339 L 555.5681818181818 -355.949617987339 L 568.0681818181818 -355.949617987339 L 568.0681818181818 -345.949617987339 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 555.5681818181818 -345.949617987339 L 568.0681818181818 -345.949617987339 L 561.8181818181818 -355.949617987339 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 599.2045454545455 -346.4659768609474 L 599.2045454545455 -356.4659768609474 L 611.7045454545455 -356.4659768609474 L 611.7045454545455 -346.4659768609474 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.2045454545455 -346.4659768609474 L 611.7045454545455 -346.4659768609474 L 605.4545454545455 -356.4659768609474 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 642.840909090909 -347.9708709888671 L 642.840909090909 -357.9708709888671 L 655.340909090909 -357.9708709888671 L 655.340909090909 -347.9708709888671 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 642.840909090909 -347.9708709888671 L 655.340909090909 -347.9708709888671 L 649.090909090909 -357.9708709888671 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 686.4772727272727 -364.6439030779306 L 686.4772727272727 -374.6439030779306 L 698.9772727272727 -374.6439030779306 L 698.9772727272727 -364.6439030779306 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 686.4772727272727 -364.6439030779306 L 698.9772727272727 -364.6439030779306 L 692.7272727272727 -374.6439030779306 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 730.1136363636364 -352.654695481336 L 730.1136363636364 -362.654695481336 L 742.6136363636364 -362.654695481336 L 742.6136363636364 -352.654695481336 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 730.1136363636364 -352.654695481336 L 742.6136363636364 -352.654695481336 L 736.3636363636364 -362.654695481336 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -54 L 290 -136 L 444.272 -136 L 444.272 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -125.33333333333334 L 316 -125.33333333333334" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 303.0 -120.33333333333334 L 313.0 -130.33333333333334" style="stroke-width:1;"/>
+ <path d="M 313.0 -120.33333333333334 L 303.0 -130.33333333333334" style="stroke-width:1;"/>
+ <path d="M 308.0 -118.26333333333335 L 308.0 -132.40333333333334" style="stroke-width:1;"/>
+ <path d="M 300.93 -125.33333333333334 L 315.07 -125.33333333333334" style="stroke-width:1;"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-120.0">
+ ov_tree_map
+ </text>
+ <path d="M 300 -105.33333333333334 L 316 -105.33333333333334" style="stroke:rgb(126,126,126);stroke-width:0.4;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(0,0,0);clip-path:url(#clip40);">
+ <path d="M 301.75 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 L 314.25 -100.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -100.33333333333334 L 301.75 -110.33333333333334 L 314.25 -110.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-100.0">
+ n_map
+ </text>
+ <path d="M 300 -85.33333333333334 L 316 -85.33333333333334" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 301.75 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 L 314.25 -80.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 308.0 -80.33333333333334 L 301.75 -90.33333333333334 L 314.25 -90.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-80.0">
+ rb_tree_map
+ </text>
+ <path d="M 300 -65.33333333333334 L 316 -65.33333333333334" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 301.75 -60.33333333333334 L 301.75 -70.33333333333334 L 314.25 -70.33333333333334 L 314.25 -60.33333333333334 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 301.75 -60.33333333333334 L 314.25 -60.33333333333334 L 308.0 -70.33333333333334 Z"/>
+ <text style="font-size:16;stroke:none;fill:rgb(0,0,0);" x="316.0" y="-60.0">
+ splay_tree_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png b/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
new file mode 100644
index 0000000000..4376929ec2
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png b/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
new file mode 100644
index 0000000000..880a50edf8
--- /dev/null
+++ b/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
Binary files differ
diff --git a/libstdc++-v3/doc/xml/manual/abi.xml b/libstdc++-v3/doc/xml/manual/abi.xml
index 6e7d46bfad..3fb5fa8de3 100644
--- a/libstdc++-v3/doc/xml/manual/abi.xml
+++ b/libstdc++-v3/doc/xml/manual/abi.xml
@@ -54,7 +54,7 @@
virtual functions, etc. These details are defined as the compiler
Application Binary Interface, or ABI. The GNU C++ compiler uses an
industry-standard C++ ABI starting with version 3. Details can be
- found in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.codesourcery.com/public/cxx-abi/abi.html">ABI
+ found in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mentorembedded.github.com/cxx-abi/abi.html">ABI
specification</link>.
</para>
@@ -164,28 +164,14 @@ compatible.
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.0.1: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.0.2: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.0.3: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.0.4: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.1.0: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.1.1: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.2.0: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.2.1: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.2.2: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.2.3: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.3.0: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.3.1: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.3.2: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.3.3: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1</para></listitem>
+ <listitem><para>GCC 3.x: libgcc_s.so.1</para></listitem>
+ <listitem><para>GCC 4.x: libgcc_s.so.1</para></listitem>
</itemizedlist>
<para>For m68k-linux the versions differ as follows: </para>
<itemizedlist>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1
+ <listitem><para>GCC 3.4, GCC 4.x: libgcc_s.so.1
when configuring <code>--with-sjlj-exceptions</code>, or
libgcc_s.so.2 </para> </listitem>
</itemizedlist>
@@ -193,10 +179,10 @@ compatible.
<para>For hppa-linux the versions differ as follows: </para>
<itemizedlist>
- <listitem><para>gcc-3.4.x, gcc-4.[0-1].x: either libgcc_s.so.1
+ <listitem><para>GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1
when configuring <code>--with-sjlj-exceptions</code>, or
libgcc_s.so.2 </para> </listitem>
- <listitem><para>gcc-4.[2-5].x: either libgcc_s.so.3 when configuring
+ <listitem><para>GCC 4.[2-7]: either libgcc_s.so.3 when configuring
<code>--with-sjlj-exceptions</code>) or libgcc_s.so.4
</para> </listitem>
</itemizedlist>
@@ -213,19 +199,22 @@ compatible.
<para>This corresponds to the mapfile: gcc/libgcc-std.ver</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: GCC_3.0</para></listitem>
- <listitem><para>gcc-3.3.0: GCC_3.3</para></listitem>
- <listitem><para>gcc-3.3.1: GCC_3.3.1</para></listitem>
- <listitem><para>gcc-3.3.2: GCC_3.3.2</para></listitem>
- <listitem><para>gcc-3.3.4: GCC_3.3.4</para></listitem>
- <listitem><para>gcc-3.4.0: GCC_3.4</para></listitem>
- <listitem><para>gcc-3.4.2: GCC_3.4.2</para></listitem>
- <listitem><para>gcc-3.4.4: GCC_3.4.4</para></listitem>
- <listitem><para>gcc-4.0.0: GCC_4.0.0</para></listitem>
- <listitem><para>gcc-4.1.0: GCC_4.1.0</para></listitem>
- <listitem><para>gcc-4.2.0: GCC_4.2.0</para></listitem>
- <listitem><para>gcc-4.3.0: GCC_4.3.0</para></listitem>
- <listitem><para>gcc-4.4.0: GCC_4.4.0</para></listitem>
+ <listitem><para>GCC 3.0.0: GCC_3.0</para></listitem>
+ <listitem><para>GCC 3.3.0: GCC_3.3</para></listitem>
+ <listitem><para>GCC 3.3.1: GCC_3.3.1</para></listitem>
+ <listitem><para>GCC 3.3.2: GCC_3.3.2</para></listitem>
+ <listitem><para>GCC 3.3.4: GCC_3.3.4</para></listitem>
+ <listitem><para>GCC 3.4.0: GCC_3.4</para></listitem>
+ <listitem><para>GCC 3.4.2: GCC_3.4.2</para></listitem>
+ <listitem><para>GCC 3.4.4: GCC_3.4.4</para></listitem>
+ <listitem><para>GCC 4.0.0: GCC_4.0.0</para></listitem>
+ <listitem><para>GCC 4.1.0: GCC_4.1.0</para></listitem>
+ <listitem><para>GCC 4.2.0: GCC_4.2.0</para></listitem>
+ <listitem><para>GCC 4.3.0: GCC_4.3.0</para></listitem>
+ <listitem><para>GCC 4.4.0: GCC_4.4.0</para></listitem>
+ <listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
+ <listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
+ <listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
</itemizedlist>
</listitem>
@@ -241,54 +230,48 @@ compatible.
<constant>DT_SONAME</constant>s are forward-compatibile: in
the table below, releases incompatible with the previous
one are explicitly noted.
+ If a particular release is not listed, its libstdc++.so binary
+ has the same filename and <constant>DT_SONAME</constant> as the
+ preceding release.
</para>
<para>It is versioned as follows:
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: libstdc++.so.3.0.0</para></listitem>
- <listitem><para>gcc-3.0.1: libstdc++.so.3.0.1</para></listitem>
- <listitem><para>gcc-3.0.2: libstdc++.so.3.0.2</para></listitem>
- <listitem><para>gcc-3.0.3: libstdc++.so.3.0.2 (See Note 1)</para></listitem>
- <listitem><para>gcc-3.0.4: libstdc++.so.3.0.4</para></listitem>
- <listitem><para>gcc-3.1.0: libstdc++.so.4.0.0 <emphasis>(Incompatible with previous)</emphasis></para></listitem>
- <listitem><para>gcc-3.1.1: libstdc++.so.4.0.1</para></listitem>
- <listitem><para>gcc-3.2.0: libstdc++.so.5.0.0 <emphasis>(Incompatible with previous)</emphasis></para></listitem>
- <listitem><para>gcc-3.2.1: libstdc++.so.5.0.1</para></listitem>
- <listitem><para>gcc-3.2.2: libstdc++.so.5.0.2</para></listitem>
- <listitem><para>gcc-3.2.3: libstdc++.so.5.0.3 (See Note 2)</para></listitem>
- <listitem><para>gcc-3.3.0: libstdc++.so.5.0.4</para></listitem>
- <listitem><para>gcc-3.3.1: libstdc++.so.5.0.5</para></listitem>
- <listitem><para>gcc-3.3.2: libstdc++.so.5.0.5</para></listitem>
- <listitem><para>gcc-3.3.3: libstdc++.so.5.0.5</para></listitem>
- <listitem><para>gcc-3.4.0: libstdc++.so.6.0.0 <emphasis>(Incompatible with previous)</emphasis></para></listitem>
- <listitem><para>gcc-3.4.1: libstdc++.so.6.0.1</para></listitem>
- <listitem><para>gcc-3.4.2: libstdc++.so.6.0.2</para></listitem>
- <listitem><para>gcc-3.4.3: libstdc++.so.6.0.3</para></listitem>
- <listitem><para>gcc-3.4.4: libstdc++.so.6.0.3</para></listitem>
- <listitem><para>gcc-3.4.5: libstdc++.so.6.0.3</para></listitem>
- <listitem><para>gcc-3.4.6: libstdc++.so.6.0.3</para></listitem>
- <listitem><para>gcc-4.0.0: libstdc++.so.6.0.4</para></listitem>
- <listitem><para>gcc-4.0.1: libstdc++.so.6.0.5</para></listitem>
- <listitem><para>gcc-4.0.2: libstdc++.so.6.0.6</para></listitem>
- <listitem><para>gcc-4.0.3: libstdc++.so.6.0.7</para></listitem>
- <listitem><para>gcc-4.1.0: libstdc++.so.6.0.7</para></listitem>
- <listitem><para>gcc-4.1.1: libstdc++.so.6.0.8</para></listitem>
- <listitem><para>gcc-4.1.2: libstdc++.so.6.0.8</para></listitem>
- <listitem><para>gcc-4.2.0: libstdc++.so.6.0.9</para></listitem>
- <listitem><para>gcc-4.2.1: libstdc++.so.6.0.9 (See Note 3)</para></listitem>
- <listitem><para>gcc-4.2.2: libstdc++.so.6.0.9</para></listitem>
- <listitem><para>gcc-4.2.3: libstdc++.so.6.0.9</para></listitem>
- <listitem><para>gcc-4.2.4: libstdc++.so.6.0.9</para></listitem>
- <listitem><para>gcc-4.3.0: libstdc++.so.6.0.10</para></listitem>
- <listitem><para>gcc-4.3.1: libstdc++.so.6.0.10</para></listitem>
- <listitem><para>gcc-4.3.2: libstdc++.so.6.0.10</para></listitem>
- <listitem><para>gcc-4.3.3: libstdc++.so.6.0.10</para></listitem>
- <listitem><para>gcc-4.3.4: libstdc++.so.6.0.10</para></listitem>
- <listitem><para>gcc-4.4.0: libstdc++.so.6.0.11</para></listitem>
- <listitem><para>gcc-4.4.1: libstdc++.so.6.0.12</para></listitem>
- <listitem><para>gcc-4.4.2: libstdc++.so.6.0.13</para></listitem>
- <listitem><para>gcc-4.5.0: libstdc++.so.6.0.14</para></listitem>
+ <listitem><para>GCC 3.0.0: libstdc++.so.3.0.0</para></listitem>
+ <listitem><para>GCC 3.0.1: libstdc++.so.3.0.1</para></listitem>
+ <listitem><para>GCC 3.0.2: libstdc++.so.3.0.2</para></listitem>
+ <listitem><para>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</para></listitem>
+ <listitem><para>GCC 3.0.4: libstdc++.so.3.0.4</para></listitem>
+ <listitem><para>GCC 3.1.0: libstdc++.so.4.0.0 <emphasis>(Incompatible with previous)</emphasis></para></listitem>
+ <listitem><para>GCC 3.1.1: libstdc++.so.4.0.1</para></listitem>
+ <listitem><para>GCC 3.2.0: libstdc++.so.5.0.0 <emphasis>(Incompatible with previous)</emphasis></para></listitem>
+ <listitem><para>GCC 3.2.1: libstdc++.so.5.0.1</para></listitem>
+ <listitem><para>GCC 3.2.2: libstdc++.so.5.0.2</para></listitem>
+ <listitem><para>GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)</para></listitem>
+ <listitem><para>GCC 3.3.0: libstdc++.so.5.0.4</para></listitem>
+ <listitem><para>GCC 3.3.1: libstdc++.so.5.0.5</para></listitem>
+ <listitem><para>GCC 3.4.0: libstdc++.so.6.0.0 <emphasis>(Incompatible with previous)</emphasis></para></listitem>
+ <listitem><para>GCC 3.4.1: libstdc++.so.6.0.1</para></listitem>
+ <listitem><para>GCC 3.4.2: libstdc++.so.6.0.2</para></listitem>
+ <listitem><para>GCC 3.4.3: libstdc++.so.6.0.3</para></listitem>
+ <listitem><para>GCC 4.0.0: libstdc++.so.6.0.4</para></listitem>
+ <listitem><para>GCC 4.0.1: libstdc++.so.6.0.5</para></listitem>
+ <listitem><para>GCC 4.0.2: libstdc++.so.6.0.6</para></listitem>
+ <listitem><para>GCC 4.0.3: libstdc++.so.6.0.7</para></listitem>
+ <listitem><para>GCC 4.1.0: libstdc++.so.6.0.7</para></listitem>
+ <listitem><para>GCC 4.1.1: libstdc++.so.6.0.8</para></listitem>
+ <listitem><para>GCC 4.2.0: libstdc++.so.6.0.9</para></listitem>
+ <listitem><para>GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)</para></listitem>
+ <listitem><para>GCC 4.2.2: libstdc++.so.6.0.9</para></listitem>
+ <listitem><para>GCC 4.3.0: libstdc++.so.6.0.10</para></listitem>
+ <listitem><para>GCC 4.4.0: libstdc++.so.6.0.11</para></listitem>
+ <listitem><para>GCC 4.4.1: libstdc++.so.6.0.12</para></listitem>
+ <listitem><para>GCC 4.4.2: libstdc++.so.6.0.13</para></listitem>
+ <listitem><para>GCC 4.5.0: libstdc++.so.6.0.14</para></listitem>
+ <listitem><para>GCC 4.6.0: libstdc++.so.6.0.15</para></listitem>
+ <listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
+ <listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
</itemizedlist>
<para>
Note 1: Error should be libstdc++.so.3.0.3.
@@ -312,49 +295,52 @@ compatible.
will use the maximum version definition. Thus, for release series
with the same label, but incremented version definitions, the later
release has both versions. (An example of this would be the
- gcc-3.2.1 release, which has GLIBCPP_3.2.1 for new symbols and
- GLIBCPP_3.2 for symbols that were introduced in the gcc-3.2.0
+ GCC 3.2.1 release, which has GLIBCPP_3.2.1 for new symbols and
+ GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0
release.) If a particular release is not listed, it has the same
version labels as the preceding release.
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: (Error, not versioned)</para></listitem>
- <listitem><para>gcc-3.0.1: (Error, not versioned)</para></listitem>
- <listitem><para>gcc-3.0.2: (Error, not versioned)</para></listitem>
- <listitem><para>gcc-3.0.3: (Error, not versioned)</para></listitem>
- <listitem><para>gcc-3.0.4: (Error, not versioned)</para></listitem>
- <listitem><para>gcc-3.1.0: GLIBCPP_3.1, CXXABI_1</para></listitem>
- <listitem><para>gcc-3.1.1: GLIBCPP_3.1, CXXABI_1</para></listitem>
- <listitem><para>gcc-3.2.0: GLIBCPP_3.2, CXXABI_1.2</para></listitem>
- <listitem><para>gcc-3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</para></listitem>
- <listitem><para>gcc-3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</para></listitem>
- <listitem><para>gcc-3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</para></listitem>
- <listitem><para>gcc-3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</para></listitem>
- <listitem><para>gcc-3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</para></listitem>
- <listitem><para>gcc-3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</para></listitem>
- <listitem><para>gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</para></listitem>
- <listitem><para>gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3</para></listitem>
- <listitem><para>gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</para></listitem>
- <listitem><para>gcc-3.4.2: GLIBCXX_3.4.2</para></listitem>
- <listitem><para>gcc-3.4.3: GLIBCXX_3.4.3</para></listitem>
- <listitem><para>gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</para></listitem>
- <listitem><para>gcc-4.0.1: GLIBCXX_3.4.5</para></listitem>
- <listitem><para>gcc-4.0.2: GLIBCXX_3.4.6</para></listitem>
- <listitem><para>gcc-4.0.3: GLIBCXX_3.4.7</para></listitem>
- <listitem><para>gcc-4.1.1: GLIBCXX_3.4.8</para></listitem>
- <listitem><para>gcc-4.2.0: GLIBCXX_3.4.9</para></listitem>
- <listitem><para>gcc-4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</para></listitem>
- <listitem><para>gcc-4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</para></listitem>
- <listitem><para>gcc-4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</para></listitem>
- <listitem><para>gcc-4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</para></listitem>
- <listitem><para>gcc-4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</para></listitem>
+ <listitem><para>GCC 3.0.0: (Error, not versioned)</para></listitem>
+ <listitem><para>GCC 3.0.1: (Error, not versioned)</para></listitem>
+ <listitem><para>GCC 3.0.2: (Error, not versioned)</para></listitem>
+ <listitem><para>GCC 3.0.3: (Error, not versioned)</para></listitem>
+ <listitem><para>GCC 3.0.4: (Error, not versioned)</para></listitem>
+ <listitem><para>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</para></listitem>
+ <listitem><para>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</para></listitem>
+ <listitem><para>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</para></listitem>
+ <listitem><para>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</para></listitem>
+ <listitem><para>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</para></listitem>
+ <listitem><para>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</para></listitem>
+ <listitem><para>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</para></listitem>
+ <listitem><para>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</para></listitem>
+ <listitem><para>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</para></listitem>
+ <listitem><para>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</para></listitem>
+ <listitem><para>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</para></listitem>
+ <listitem><para>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</para></listitem>
+ <listitem><para>GCC 3.4.2: GLIBCXX_3.4.2</para></listitem>
+ <listitem><para>GCC 3.4.3: GLIBCXX_3.4.3</para></listitem>
+ <listitem><para>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</para></listitem>
+ <listitem><para>GCC 4.0.1: GLIBCXX_3.4.5</para></listitem>
+ <listitem><para>GCC 4.0.2: GLIBCXX_3.4.6</para></listitem>
+ <listitem><para>GCC 4.0.3: GLIBCXX_3.4.7</para></listitem>
+ <listitem><para>GCC 4.1.1: GLIBCXX_3.4.8</para></listitem>
+ <listitem><para>GCC 4.2.0: GLIBCXX_3.4.9</para></listitem>
+ <listitem><para>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</para></listitem>
+ <listitem><para>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</para></listitem>
+ <listitem><para>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</para></listitem>
+ <listitem><para>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</para></listitem>
+ <listitem><para>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</para></listitem>
+ <listitem><para>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</para></listitem>
+ <listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
+ <listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Incremental bumping of a compiler pre-defined macro,
__GXX_ABI_VERSION. This macro is defined as the version of the
- compiler v3 ABI, with g++ 3.0.x being version 100. This macro will
+ compiler v3 ABI, with g++ 3.0 being version 100. This macro will
be automatically defined whenever g++ is used (the curious can
test this by invoking g++ with the '-v' flag.)
</para>
@@ -370,13 +356,13 @@ compatible.
It is versioned as follows, where 'n' is given by '-fabi-version=n':
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.x: 100</para></listitem>
- <listitem><para>gcc-3.1.x: 100 (Error, should be 101)</para></listitem>
- <listitem><para>gcc-3.2.x: 102</para></listitem>
- <listitem><para>gcc-3.3.x: 102</para></listitem>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: 102 (when n=1)</para></listitem>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: 1000 + n (when n&gt;1) </para></listitem>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: 999999 (when n=0)</para></listitem>
+ <listitem><para>GCC 3.0: 100</para></listitem>
+ <listitem><para>GCC 3.1: 100 (Error, should be 101)</para></listitem>
+ <listitem><para>GCC 3.2: 102</para></listitem>
+ <listitem><para>GCC 3.3: 102</para></listitem>
+ <listitem><para>GCC 3.4, GCC 4.x: 102 (when n=1)</para></listitem>
+ <listitem><para>GCC 3.4, GCC 4.x: 1000 + n (when n&gt;1) </para></listitem>
+ <listitem><para>GCC 3.4, GCC 4.x: 999999 (when n=0)</para></listitem>
</itemizedlist>
<para/>
</listitem>
@@ -389,11 +375,11 @@ compatible.
It is versioned as follows:
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.x: (Error, not versioned) </para></listitem>
- <listitem><para>gcc-3.1.x: (Error, not versioned) </para></listitem>
- <listitem><para>gcc-3.2.x: <code>-fabi-version=1</code></para></listitem>
- <listitem><para>gcc-3.3.x: <code>-fabi-version=1</code></para></listitem>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: <code>-fabi-version=2</code> <emphasis>(Incompatible with previous)</emphasis></para></listitem>
+ <listitem><para>GCC 3.0: (Error, not versioned) </para></listitem>
+ <listitem><para>GCC 3.1: (Error, not versioned) </para></listitem>
+ <listitem><para>GCC 3.2: <code>-fabi-version=1</code></para></listitem>
+ <listitem><para>GCC 3.3: <code>-fabi-version=1</code></para></listitem>
+ <listitem><para>GCC 3.4, GCC 4.x: <code>-fabi-version=2</code> <emphasis>(Incompatible with previous)</emphasis></para></listitem>
</itemizedlist>
<para/>
</listitem>
@@ -409,55 +395,75 @@ compatible.
<para>
This macro is defined in the file "c++config" in the
- "libstdc++-v3/include/bits" directory. (Up to gcc-4.1.0, it was
- changed every night by an automated script. Since gcc-4.1.0, it is
+ "libstdc++-v3/include/bits" directory. (Up to GCC 4.1.0, it was
+ changed every night by an automated script. Since GCC 4.1.0, it is
the same value as gcc/DATESTAMP.)
</para>
<para>
It is versioned as follows:
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: 20010615</para></listitem>
- <listitem><para>gcc-3.0.1: 20010819</para></listitem>
- <listitem><para>gcc-3.0.2: 20011023</para></listitem>
- <listitem><para>gcc-3.0.3: 20011220</para></listitem>
- <listitem><para>gcc-3.0.4: 20020220</para></listitem>
- <listitem><para>gcc-3.1.0: 20020514</para></listitem>
- <listitem><para>gcc-3.1.1: 20020725</para></listitem>
- <listitem><para>gcc-3.2.0: 20020814</para></listitem>
- <listitem><para>gcc-3.2.1: 20021119</para></listitem>
- <listitem><para>gcc-3.2.2: 20030205</para></listitem>
- <listitem><para>gcc-3.2.3: 20030422</para></listitem>
- <listitem><para>gcc-3.3.0: 20030513</para></listitem>
- <listitem><para>gcc-3.3.1: 20030804</para></listitem>
- <listitem><para>gcc-3.3.2: 20031016</para></listitem>
- <listitem><para>gcc-3.3.3: 20040214</para></listitem>
- <listitem><para>gcc-3.4.0: 20040419</para></listitem>
- <listitem><para>gcc-3.4.1: 20040701</para></listitem>
- <listitem><para>gcc-3.4.2: 20040906</para></listitem>
- <listitem><para>gcc-3.4.3: 20041105</para></listitem>
- <listitem><para>gcc-3.4.4: 20050519</para></listitem>
- <listitem><para>gcc-3.4.5: 20051201</para></listitem>
- <listitem><para>gcc-3.4.6: 20060306</para></listitem>
- <listitem><para>gcc-4.0.0: 20050421</para></listitem>
- <listitem><para>gcc-4.0.1: 20050707</para></listitem>
- <listitem><para>gcc-4.0.2: 20050921</para></listitem>
- <listitem><para>gcc-4.0.3: 20060309</para></listitem>
- <listitem><para>gcc-4.1.0: 20060228</para></listitem>
- <listitem><para>gcc-4.1.1: 20060524</para></listitem>
- <listitem><para>gcc-4.1.2: 20070214</para></listitem>
- <listitem><para>gcc-4.2.0: 20070514</para></listitem>
- <listitem><para>gcc-4.2.1: 20070719</para></listitem>
- <listitem><para>gcc-4.2.2: 20071007</para></listitem>
- <listitem><para>gcc-4.2.3: 20080201</para></listitem>
- <listitem><para>gcc-4.2.4: 20080519</para></listitem>
- <listitem><para>gcc-4.3.0: 20080306</para></listitem>
- <listitem><para>gcc-4.3.1: 20080606</para></listitem>
- <listitem><para>gcc-4.3.2: 20080827</para></listitem>
- <listitem><para>gcc-4.3.3: 20090124</para></listitem>
- <listitem><para>gcc-4.4.0: 20090421</para></listitem>
- <listitem><para>gcc-4.4.1: 20090722</para></listitem>
- <listitem><para>gcc-4.4.2: 20091015</para></listitem>
+ <listitem><para>GCC 3.0.0: 20010615</para></listitem>
+ <listitem><para>GCC 3.0.1: 20010819</para></listitem>
+ <listitem><para>GCC 3.0.2: 20011023</para></listitem>
+ <listitem><para>GCC 3.0.3: 20011220</para></listitem>
+ <listitem><para>GCC 3.0.4: 20020220</para></listitem>
+ <listitem><para>GCC 3.1.0: 20020514</para></listitem>
+ <listitem><para>GCC 3.1.1: 20020725</para></listitem>
+ <listitem><para>GCC 3.2.0: 20020814</para></listitem>
+ <listitem><para>GCC 3.2.1: 20021119</para></listitem>
+ <listitem><para>GCC 3.2.2: 20030205</para></listitem>
+ <listitem><para>GCC 3.2.3: 20030422</para></listitem>
+ <listitem><para>GCC 3.3.0: 20030513</para></listitem>
+ <listitem><para>GCC 3.3.1: 20030804</para></listitem>
+ <listitem><para>GCC 3.3.2: 20031016</para></listitem>
+ <listitem><para>GCC 3.3.3: 20040214</para></listitem>
+ <listitem><para>GCC 3.4.0: 20040419</para></listitem>
+ <listitem><para>GCC 3.4.1: 20040701</para></listitem>
+ <listitem><para>GCC 3.4.2: 20040906</para></listitem>
+ <listitem><para>GCC 3.4.3: 20041105</para></listitem>
+ <listitem><para>GCC 3.4.4: 20050519</para></listitem>
+ <listitem><para>GCC 3.4.5: 20051201</para></listitem>
+ <listitem><para>GCC 3.4.6: 20060306</para></listitem>
+ <listitem><para>GCC 4.0.0: 20050421</para></listitem>
+ <listitem><para>GCC 4.0.1: 20050707</para></listitem>
+ <listitem><para>GCC 4.0.2: 20050921</para></listitem>
+ <listitem><para>GCC 4.0.3: 20060309</para></listitem>
+ <listitem><para>GCC 4.1.0: 20060228</para></listitem>
+ <listitem><para>GCC 4.1.1: 20060524</para></listitem>
+ <listitem><para>GCC 4.1.2: 20070214</para></listitem>
+ <listitem><para>GCC 4.2.0: 20070514</para></listitem>
+ <listitem><para>GCC 4.2.1: 20070719</para></listitem>
+ <listitem><para>GCC 4.2.2: 20071007</para></listitem>
+ <listitem><para>GCC 4.2.3: 20080201</para></listitem>
+ <listitem><para>GCC 4.2.4: 20080519</para></listitem>
+ <listitem><para>GCC 4.3.0: 20080306</para></listitem>
+ <listitem><para>GCC 4.3.1: 20080606</para></listitem>
+ <listitem><para>GCC 4.3.2: 20080827</para></listitem>
+ <listitem><para>GCC 4.3.3: 20090124</para></listitem>
+ <listitem><para>GCC 4.3.4: 20090804</para></listitem>
+ <listitem><para>GCC 4.3.5: 20100522</para></listitem>
+ <listitem><para>GCC 4.3.6: 20110627</para></listitem>
+ <listitem><para>GCC 4.4.0: 20090421</para></listitem>
+ <listitem><para>GCC 4.4.1: 20090722</para></listitem>
+ <listitem><para>GCC 4.4.2: 20091015</para></listitem>
+ <listitem><para>GCC 4.4.3: 20100121</para></listitem>
+ <listitem><para>GCC 4.4.4: 20100429</para></listitem>
+ <listitem><para>GCC 4.4.5: 20101001</para></listitem>
+ <listitem><para>GCC 4.4.6: 20110416</para></listitem>
+ <listitem><para>GCC 4.4.7: 20120313</para></listitem>
+ <listitem><para>GCC 4.5.0: 20100414</para></listitem>
+ <listitem><para>GCC 4.5.1: 20100731</para></listitem>
+ <listitem><para>GCC 4.5.2: 20101216</para></listitem>
+ <listitem><para>GCC 4.5.3: 20110428</para></listitem>
+ <listitem><para>GCC 4.5.4: 20120702</para></listitem>
+ <listitem><para>GCC 4.6.0: 20110325</para></listitem>
+ <listitem><para>GCC 4.6.1: 20110627</para></listitem>
+ <listitem><para>GCC 4.6.2: 20111026</para></listitem>
+ <listitem><para>GCC 4.6.3: 20120301</para></listitem>
+ <listitem><para>GCC 4.7.0: 20120322</para></listitem>
+ <listitem><para>GCC 4.7.1: 20120614</para></listitem>
+ <listitem><para>GCC 4.7.2: 20120920</para></listitem>
</itemizedlist>
<para/>
</listitem>
@@ -467,7 +473,7 @@ compatible.
Incremental bumping of a library pre-defined macro,
_GLIBCPP_VERSION. This macro is defined as the released version of
the library, as a string literal. This is only implemented in
- gcc-3.1.0 releases and higher, and is deprecated in 3.4 (where it
+ GCC 3.1.0 releases and higher, and is deprecated in 3.4 (where it
is called _GLIBCXX_VERSION).
</para>
@@ -482,23 +488,23 @@ compatible.
It is versioned as follows:
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: "3.0.0"</para></listitem>
- <listitem><para>gcc-3.0.1: "3.0.0" (Error, should be "3.0.1")</para></listitem>
- <listitem><para>gcc-3.0.2: "3.0.0" (Error, should be "3.0.2")</para></listitem>
- <listitem><para>gcc-3.0.3: "3.0.0" (Error, should be "3.0.3")</para></listitem>
- <listitem><para>gcc-3.0.4: "3.0.0" (Error, should be "3.0.4")</para></listitem>
- <listitem><para>gcc-3.1.0: "3.1.0"</para></listitem>
- <listitem><para>gcc-3.1.1: "3.1.1"</para></listitem>
- <listitem><para>gcc-3.2.0: "3.2"</para></listitem>
- <listitem><para>gcc-3.2.1: "3.2.1"</para></listitem>
- <listitem><para>gcc-3.2.2: "3.2.2"</para></listitem>
- <listitem><para>gcc-3.2.3: "3.2.3"</para></listitem>
- <listitem><para>gcc-3.3.0: "3.3"</para></listitem>
- <listitem><para>gcc-3.3.1: "3.3.1"</para></listitem>
- <listitem><para>gcc-3.3.2: "3.3.2"</para></listitem>
- <listitem><para>gcc-3.3.3: "3.3.3"</para></listitem>
- <listitem><para>gcc-3.4.x: "version-unused"</para></listitem>
- <listitem><para>gcc-4.[0-5].x: "version-unused"</para></listitem>
+ <listitem><para>GCC 3.0.0: "3.0.0"</para></listitem>
+ <listitem><para>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</para></listitem>
+ <listitem><para>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</para></listitem>
+ <listitem><para>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</para></listitem>
+ <listitem><para>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</para></listitem>
+ <listitem><para>GCC 3.1.0: "3.1.0"</para></listitem>
+ <listitem><para>GCC 3.1.1: "3.1.1"</para></listitem>
+ <listitem><para>GCC 3.2.0: "3.2"</para></listitem>
+ <listitem><para>GCC 3.2.1: "3.2.1"</para></listitem>
+ <listitem><para>GCC 3.2.2: "3.2.2"</para></listitem>
+ <listitem><para>GCC 3.2.3: "3.2.3"</para></listitem>
+ <listitem><para>GCC 3.3.0: "3.3"</para></listitem>
+ <listitem><para>GCC 3.3.1: "3.3.1"</para></listitem>
+ <listitem><para>GCC 3.3.2: "3.3.2"</para></listitem>
+ <listitem><para>GCC 3.3.3: "3.3.3"</para></listitem>
+ <listitem><para>GCC 3.4: "version-unused"</para></listitem>
+ <listitem><para>GCC 4.x: "version-unused"</para></listitem>
</itemizedlist>
<para/>
</listitem>
@@ -506,62 +512,38 @@ compatible.
<listitem>
<para>
Matching each specific C++ compiler release to a specific set of
- C++ include files. This is only implemented in gcc-3.1.1 releases
+ C++ include files. This is only implemented in GCC 3.1.1 releases
and higher.
</para>
<para>
- All C++ includes are installed in include/c++, then nest in a
+ All C++ includes are installed in
+ <filename class="directory">include/c++</filename>, then nest in a
directory hierarchy corresponding to the C++ compiler's released
version. This version corresponds to the variable "gcc_version" in
"libstdc++-v3/acinclude.m4," and more details can be found in that
- file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
+ file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before GCC 3.4.0).
</para>
<para>
C++ includes are versioned as follows:
</para>
<itemizedlist>
- <listitem><para>gcc-3.0.0: include/g++-v3</para></listitem>
- <listitem><para>gcc-3.0.1: include/g++-v3</para></listitem>
- <listitem><para>gcc-3.0.2: include/g++-v3</para></listitem>
- <listitem><para>gcc-3.0.3: include/g++-v3</para></listitem>
- <listitem><para>gcc-3.0.4: include/g++-v3</para></listitem>
- <listitem><para>gcc-3.1.0: include/g++-v3</para></listitem>
- <listitem><para>gcc-3.1.1: include/c++/3.1.1</para></listitem>
- <listitem><para>gcc-3.2.0: include/c++/3.2</para></listitem>
- <listitem><para>gcc-3.2.1: include/c++/3.2.1</para></listitem>
- <listitem><para>gcc-3.2.2: include/c++/3.2.2</para></listitem>
- <listitem><para>gcc-3.2.3: include/c++/3.2.3</para></listitem>
- <listitem><para>gcc-3.3.0: include/c++/3.3</para></listitem>
- <listitem><para>gcc-3.3.1: include/c++/3.3.1</para></listitem>
- <listitem><para>gcc-3.3.2: include/c++/3.3.2</para></listitem>
- <listitem><para>gcc-3.3.3: include/c++/3.3.3</para></listitem>
- <listitem><para>gcc-3.4.0: include/c++/3.4.0</para></listitem>
- <listitem><para>gcc-3.4.1: include/c++/3.4.1</para></listitem>
- <listitem><para>gcc-3.4.2: include/c++/3.4.2</para></listitem>
- <listitem><para>gcc-3.4.3: include/c++/3.4.3</para></listitem>
- <listitem><para>gcc-3.4.4: include/c++/3.4.4</para></listitem>
- <listitem><para>gcc-3.4.5: include/c++/3.4.5</para></listitem>
- <listitem><para>gcc-3.4.6: include/c++/3.4.6</para></listitem>
- <listitem><para>gcc-4.0.0: include/c++/4.0.0</para></listitem>
- <listitem><para>gcc-4.0.1: include/c++/4.0.1</para></listitem>
- <listitem><para>gcc-4.0.2: include/c++/4.0.2</para></listitem>
- <listitem><para>gcc-4.0.3: include/c++/4.0.3</para></listitem>
- <listitem><para>gcc-4.1.0: include/c++/4.1.0</para></listitem>
- <listitem><para>gcc-4.1.1: include/c++/4.1.1</para></listitem>
- <listitem><para>gcc-4.1.2: include/c++/4.1.2</para></listitem>
- <listitem><para>gcc-4.2.0: include/c++/4.2.0</para></listitem>
- <listitem><para>gcc-4.2.1: include/c++/4.2.1</para></listitem>
- <listitem><para>gcc-4.2.2: include/c++/4.2.2</para></listitem>
- <listitem><para>gcc-4.2.3: include/c++/4.2.3</para></listitem>
- <listitem><para>gcc-4.2.4: include/c++/4.2.4</para></listitem>
- <listitem><para>gcc-4.3.0: include/c++/4.3.0</para></listitem>
- <listitem><para>gcc-4.3.1: include/c++/4.3.1</para></listitem>
- <listitem><para>gcc-4.3.3: include/c++/4.3.3</para></listitem>
- <listitem><para>gcc-4.3.4: include/c++/4.3.4</para></listitem>
- <listitem><para>gcc-4.4.0: include/c++/4.4.0</para></listitem>
- <listitem><para>gcc-4.4.1: include/c++/4.4.1</para></listitem>
- <listitem><para>gcc-4.4.2: include/c++/4.4.2</para></listitem>
- <listitem><para>gcc-4.5.0: include/c++/4.5.0</para></listitem>
+ <listitem><para>GCC 3.0.0: include/g++-v3</para></listitem>
+ <listitem><para>GCC 3.0.1: include/g++-v3</para></listitem>
+ <listitem><para>GCC 3.0.2: include/g++-v3</para></listitem>
+ <listitem><para>GCC 3.0.3: include/g++-v3</para></listitem>
+ <listitem><para>GCC 3.0.4: include/g++-v3</para></listitem>
+ <listitem><para>GCC 3.1.0: include/g++-v3</para></listitem>
+ <listitem><para>GCC 3.1.1: include/c++/3.1.1</para></listitem>
+ <listitem><para>GCC 3.2.0: include/c++/3.2</para></listitem>
+ <listitem><para>GCC 3.2.1: include/c++/3.2.1</para></listitem>
+ <listitem><para>GCC 3.2.2: include/c++/3.2.2</para></listitem>
+ <listitem><para>GCC 3.2.3: include/c++/3.2.3</para></listitem>
+ <listitem><para>GCC 3.3.0: include/c++/3.3</para></listitem>
+ <listitem><para>GCC 3.3.1: include/c++/3.3.1</para></listitem>
+ <listitem><para>GCC 3.3.2: include/c++/3.3.2</para></listitem>
+ <listitem><para>GCC 3.3.3: include/c++/3.3.3</para></listitem>
+ <listitem><para>GCC 3.4.x: include/c++/3.4.x</para></listitem>
+ <listitem><para>GCC 4.x.y: include/c++/4.x.y</para></listitem>
</itemizedlist>
<para/>
</listitem>
@@ -596,8 +578,8 @@ compatible.
</para>
<para>
- Most modern Linux and BSD versions, particularly ones using
- gcc-3.1.x tools and more recent vintages, will meet the
+ Most modern GNU/Linux and BSD versions, particularly ones using
+ GCC 3.1 and later, will meet the
requirements above, as does Solaris 2.5 and up.
</para>
</section>
@@ -755,7 +737,7 @@ class that would otherwise have implicit versions. This will change
the way the compiler deals with this class in by-value return
statements or parameters: instead of passing instances of this
class in registers, the compiler will be forced to use memory. See the
-section on <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.codesourcery.com/public/cxx-abi/abi.html#calls">Function
+section on <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mentorembedded.github.com/cxx-abi/abi.html#calls">Function
Calling Conventions and APIs</link>
of the C++ ABI documentation for further details.
</para></listitem>
@@ -989,8 +971,8 @@ us. We'd like to know about them!
<para>
A "C" application, dynamically linked to two shared libraries, liba,
libb. The dependent library liba is a C++ shared library compiled with
-gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
-libb is a C++ shared library compiled with gcc-3.4.x, and also uses io,
+GCC 3.3, and uses io, exceptions, locale, etc. The dependent library
+libb is a C++ shared library compiled with GCC 3.4, and also uses io,
exceptions, locale, etc.
</para>
@@ -1101,54 +1083,60 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
<bibliography xml:id="abi.biblio"><info><title>Bibliography</title></info>
+ <biblioentry xml:id="biblio.abicheck">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://abicheck.sourceforge.net">
+ ABIcheck
+ </link>
+ </title>
+ </biblioentry>
+
+ <biblioentry xml:id="biblio.cxxabi">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.codesourcery.com/cxx-abi/">
+ C++ ABI Summary
+ </link>
+ </title>
+ </biblioentry>
- <biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://abicheck.sourceforge.net/" class="uri">
- </biblioid>
- <citetitle>
- ABIcheck, a vague idea of checking ABI compatibility
- </citetitle>
- </biblioentry>
-
- <biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.codesourcery.com/public/cxx-abi/" class="uri">
- </biblioid>
- <citetitle>
- C++ ABI Reference
- </citetitle>
- </biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm">
Intel Compilers for Linux Compatibility with the GNU Compilers
- </citetitle>
+ </link>
+ </title>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html">
Linker and Libraries Guide (document 819-0690)
- </citetitle>
+ </link>
+ </title>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html">
Sun Studio 11: C++ Migration Guide (document 819-3689)
- </citetitle>
+ </link>
+ </title>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://people.redhat.com/drepper/dsohowto.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.akkadia.org/drepper/dsohowto.pdf">
How to Write Shared Libraries
- </citetitle>
+ </link>
+ </title>
<author>
<personname>
@@ -1158,19 +1146,22 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.arm.com/miscPDFs/8033.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.arm.com/miscPDFs/8033.pdf">
C++ ABI for the ARM Architecture
- </citetitle>
+ </link>
+ </title>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html">
Dynamic Shared Objects: Survey and Issues
- </citetitle>
+ </link>
+ </title>
+
<subtitle>
ISO C++ J16/06-0046
</subtitle>
@@ -1178,11 +1169,12 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html">
Versioning With Namespaces
- </citetitle>
+ </link>
+ </title>
<subtitle>
ISO C++ J16/06-0083
</subtitle>
@@ -1190,12 +1182,13 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf">
Binary Compatibility of Shared Libraries Implemented in C++
on GNU/Linux Systems
- </citetitle>
+ </link>
+ </title>
<subtitle>
SYRCoSE 2009
diff --git a/libstdc++-v3/doc/xml/manual/algorithms.xml b/libstdc++-v3/doc/xml/manual/algorithms.xml
index 831fe5fe60..94672ed419 100644
--- a/libstdc++-v3/doc/xml/manual/algorithms.xml
+++ b/libstdc++-v3/doc/xml/manual/algorithms.xml
@@ -22,7 +22,7 @@
<para>
- The neatest accomplishment of the algorithms sect1 is that all the
+ The neatest accomplishment of the algorithms section is that all the
work is done via iterators, not containers directly. This means two
important things:
</para>
@@ -53,14 +53,14 @@
<emphasis>N</emphasis> as a size in the examples is to keep things
easy to read but probably won't be valid code. You can use wrappers
such as those described in
- the <link linkend="std.containers">containers sect1</link> to keep
+ the <link linkend="std.containers">containers section</link> to keep
real code readable.
</para>
<para>
The single thing that trips people up the most is the definition
of <emphasis>range</emphasis> used with iterators; the famous
"past-the-end" rule that everybody loves to hate. The
- <link linkend="std.iterators">iterators sect1</link> of this
+ <link linkend="std.iterators">iterators section</link> of this
document has a complete explanation of this simple rule that seems
to cause so much confusion. Once you
get <emphasis>range</emphasis> into your head (it's not that hard,
diff --git a/libstdc++-v3/doc/xml/manual/allocator.xml b/libstdc++-v3/doc/xml/manual/allocator.xml
index b73554eb90..978ba0bc13 100644
--- a/libstdc++-v3/doc/xml/manual/allocator.xml
+++ b/libstdc++-v3/doc/xml/manual/allocator.xml
@@ -504,11 +504,12 @@
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.drdobbs.com/cpp/184403759" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759">
The Standard Librarian: What Are Allocators Good For?
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>Matt</firstname><surname>Austern</surname></personname></author>
<publisher>
@@ -519,21 +520,23 @@
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cs.umass.edu/~emery/hoard/" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cs.umass.edu/~emery/hoard">
The Hoard Memory Allocator
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>Emery</firstname><surname>Berger</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf">
Reconsidering Custom Memory Allocation
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>Emery</firstname><surname>Berger</surname></personname></author>
<author><personname><firstname>Ben</firstname><surname>Zorn</surname></personname></author>
@@ -546,11 +549,13 @@
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html">
Allocator Types
- </citetitle>
+ </link>
+ </title>
+
<author><personname><firstname>Klaus</firstname><surname>Kreft</surname></personname></author>
<author><personname><firstname>Angelika</firstname><surname>Langer</surname></personname></author>
diff --git a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
index 49cbcab9ba..d3486e110d 100644
--- a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
+++ b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
@@ -45,10 +45,10 @@
two meeting commitment for voting rights, may get a copy of
the standard from their respective national standards
organization. In the USA, this national standards
- organization is ANSI and their web-site is right
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.ansi.org">here.</link>
- (And if you've already registered with them, clicking this link will take you to directly to the place where you can
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</link>.)
+ organization is
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.ansi.org">ANSI</link>.
+ (And if you've already registered with them you can
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2003">buy the standard on-line</link>.)
</para>
</listitem>
@@ -56,24 +56,23 @@
<para>
The library working group bugs, and known defects, can
be obtained here:
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21 </link>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21</link>
</para>
</listitem>
<listitem>
<para>
The newsgroup dedicated to standardization issues is
- comp.std.c++: this FAQ for this group is quite useful and
- can be
- found <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.comeaucomputing.com/csc/faq.html">
- here </link>.
+ comp.std.c++: the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.comeaucomputing.com/csc/faq.html">FAQ</link>
+ for this group is quite useful.
</para>
</listitem>
<listitem>
<para>
Peruse
- the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/standards">GNU
+ the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/standards/">GNU
Coding Standards</link>, and chuckle when you hit the part
about <quote>Using Languages Other Than C</quote>.
</para>
@@ -83,15 +82,15 @@
<para>
Be familiar with the extensions that preceded these
general GNU rules. These style issues for libstdc++ can be
- found <link linkend="contrib.coding_style">here</link>.
+ found in <link linkend="contrib.coding_style">Coding Style</link>.
</para>
</listitem>
<listitem>
<para>
And last but certainly not least, read the
- library-specific information
- found <link linkend="appendix.porting"> here</link>.
+ library-specific information found in
+ <link linkend="appendix.porting">Porting and Maintenance</link>.
</para>
</listitem>
</itemizedlist>
@@ -271,7 +270,7 @@ It has subdirectories:
Files that are used in constructing the library, but are not
installed.
- testsuites/[backward, demangle, ext, performance, thread, 17_* to 27_*]
+ testsuites/[backward, demangle, ext, performance, thread, 17_* to 30_*]
Test programs are here, and may be used to begin to exercise the
library. Support for "make check" and "make check-install" is
complete, and runs through all the subdirectories here when this
diff --git a/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml b/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
index 1f7348a0e9..f25d3cf518 100644
--- a/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
+++ b/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
@@ -42,24 +42,24 @@ Committee couldn't include everything, and so a lot of those
<para>Portability notes and known implementation limitations are as follows.</para>
-<section><info><title>No <code>ios_base</code></title></info>
+<section xml:id="backwards.first.ios_base"><info><title>No <code>ios_base</code></title></info>
<para> At least some older implementations don't have <code>std::ios_base</code>, so you should use <code>std::ios::badbit</code>, <code>std::ios::failbit</code> and <code>std::ios::eofbit</code> and <code>std::ios::goodbit</code>.
</para>
</section>
-<section><info><title>No <code>cout</code> in <code>ostream.h</code>, no <code>cin</code> in <code>istream.h</code></title></info>
+<section xml:id="backwards.first.cout_cin"><info><title>No <code>cout</code> in <filename class="headerfile">&lt;ostream.h&gt;</filename>, no <code>cin</code> in <filename class="headerfile">&lt;istream.h&gt;</filename></title></info>
<para>
In earlier versions of the standard,
- <filename class="headerfile">fstream.h</filename>,
- <filename class="headerfile">ostream.h</filename>
- and <filename class="headerfile">istream.h</filename>
+ <filename class="headerfile">&lt;fstream.h&gt;</filename>,
+ <filename class="headerfile">&lt;ostream.h&gt;</filename>
+ and <filename class="headerfile">&lt;istream.h&gt;</filename>
used to define
<code>cout</code>, <code>cin</code> and so on. ISO C++ specifies that one needs to include
- <filename class="headerfile">iostream</filename>
+ <filename class="headerfile">&lt;iostream&gt;</filename>
explicitly to get the required definitions.
</para>
<para> Some include adjustment may be required.</para>
@@ -96,7 +96,7 @@ considered replaced and rewritten.
Portability notes and known implementation limitations are as follows.
</para>
-<section><info><title>Namespace <code>std::</code> not supported</title></info>
+<section xml:id="backwards.second.std"><info><title>Namespace <code>std::</code> not supported</title></info>
<para>
@@ -114,7 +114,7 @@ considered replaced and rewritten.
First, see if the compiler has a flag for this. Namespace
back-portability-issues are generally not a problem for g++
compilers that do not have libstdc++ in <code>std::</code>, as the
- compilers use <code>-fno-honor-std</code> (ignore
+ compilers use <option>-fno-honor-std</option> (ignore
<code>std::</code>, <code>:: = std::</code>) by default. That is,
the responsibility for enabling or disabling <code>std::</code> is
on the user; the maintainer does not have to care about it. This
@@ -182,7 +182,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
</programlisting>
</section>
-<section><info><title>Illegal iterator usage</title></info>
+<section xml:id="backwards.second.iterators"><info><title>Illegal iterator usage</title></info>
<para>
The following illustrate implementation-allowed illegal iterator
@@ -212,12 +212,12 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
</itemizedlist>
</section>
-<section><info><title><code>isspace</code> from <filename class="headerfile">cctype</filename> is a macro
+<section xml:id="backwards.second.isspace"><info><title><code>isspace</code> from <filename class="headerfile">&lt;cctype&gt;</filename> is a macro
</title></info>
<para>
- Glibc 2.0.x and 2.1.x define <filename class="headerfile">ctype.h</filename> functionality as macros
+ Glibc 2.0.x and 2.1.x define <filename class="headerfile">&lt;ctype.h&gt;</filename> functionality as macros
(isspace, isalpha etc.).
</para>
@@ -242,7 +242,7 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
<para>
A solution is to modify a header-file so that the compiler tells
- <filename class="headerfile">ctype.h</filename> to define functions
+ <filename class="headerfile">&lt;ctype.h&gt;</filename> to define functions
instead of macros:
</para>
@@ -254,20 +254,21 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
</programlisting>
<para>
- Then, include <filename class="headerfile">ctype.h</filename>
+ Then, include <filename class="headerfile">&lt;ctype.h&gt;</filename>
</para>
<para>
Another problem arises if you put a <code>using namespace
- std;</code> declaration at the top, and include <filename class="headerfile">ctype.h</filename>. This will result in
- ambiguities between the definitions in the global namespace
- (<filename class="headerfile">ctype.h</filename>) and the
+ std;</code> declaration at the top, and include
+ <filename class="headerfile">&lt;ctype.h&gt;</filename>. This will
+ result in ambiguities between the definitions in the global namespace
+ (<filename class="headerfile">&lt;ctype.h&gt;</filename>) and the
definitions in namespace <code>std::</code>
(<code>&lt;cctype&gt;</code>).
</para>
</section>
-<section><info><title>No <code>vector::at</code>, <code>deque::at</code>, <code>string::at</code></title></info>
+<section xml:id="backwards.second.at"><info><title>No <code>vector::at</code>, <code>deque::at</code>, <code>string::at</code></title></info>
<para>
@@ -304,7 +305,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
</section>
-<section><info><title>No <code>std::char_traits&lt;char&gt;::eof</code></title></info>
+<section xml:id="backwards.second.eof"><info><title>No <code>std::char_traits&lt;char&gt;::eof</code></title></info>
<para>
@@ -321,7 +322,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
</section>
-<section><info><title>No <code>string::clear</code></title></info>
+<section xml:id="backwards.second.stringclear"><info><title>No <code>string::clear</code></title></info>
<para>
@@ -351,7 +352,7 @@ erase(size_type __pos = 0, size_type __n = npos)
</para>
</section>
-<section><info><title>
+<section xml:id="backwards.second.ostreamform_istreamscan"><info><title>
Removal of <code>ostream::form</code> and <code>istream::scan</code>
extensions
</title></info>
@@ -362,14 +363,14 @@ erase(size_type __pos = 0, size_type __n = npos)
</para>
</section>
-<section><info><title>No <code>basic_stringbuf</code>, <code>basic_stringstream</code></title></info>
+<section xml:id="backwards.second.stringstreams"><info><title>No <code>basic_stringbuf</code>, <code>basic_stringstream</code></title></info>
<para>
Although the ISO standard <code>i/ostringstream</code>-classes are
- provided, (<filename class="headerfile">sstream</filename>), for
+ provided, (<filename class="headerfile">&lt;sstream&gt;</filename>), for
compatibility with older implementations the pre-ISO
- <code>i/ostrstream</code> (<filename class="headerfile">strstream</filename>) interface is also provided,
+ <code>i/ostrstream</code> (<filename class="headerfile">&lt;strstream&gt;</filename>) interface is also provided,
with these caveats:
</para>
@@ -490,7 +491,7 @@ particular <quote>info iostream</quote>.
</para>
</section>
-<section><info><title>Little or no wide character support</title></info>
+<section xml:id="backwards.second.wchar"><info><title>Little or no wide character support</title></info>
<para>
Classes <classname>wstring</classname> and
@@ -499,7 +500,7 @@ particular <quote>info iostream</quote>.
</para>
</section>
-<section><info><title>No templatized iostreams</title></info>
+<section xml:id="backwards.second.iostream_templates"><info><title>No templatized iostreams</title></info>
<para>
Classes <classname>wfilebuf</classname> and
@@ -507,7 +508,7 @@ particular <quote>info iostream</quote>.
</para>
</section>
-<section><info><title>Thread safety issues</title></info>
+<section xml:id="backwards.second.thread_safety"><info><title>Thread safety issues</title></info>
<para>
@@ -601,11 +602,12 @@ libstdc++-v3.
<para>Portability notes and known implementation limitations are as follows.</para>
-<section><info><title>Pre-ISO headers moved to backwards or removed</title></info>
+<section xml:id="backwards.third.headers"><info><title>Pre-ISO headers moved to backwards or removed</title></info>
<para> The pre-ISO C++ headers
- (<code>iostream.h</code>, <code>defalloc.h</code> etc.) are
+ (<filename class="headerfile">&lt;iostream.h&gt;</filename>,
+ <filename class="headerfile">&lt;defalloc.h&gt;</filename> etc.) are
available, unlike previous libstdc++ versions, but inclusion
generates a warning that you are using deprecated headers.
</para>
@@ -681,28 +683,30 @@ AC_DEFUN([AC_HEADER_PRE_STDCXX], [
</programlisting>
<para>Porting between pre-ISO headers and ISO headers is simple: headers
-like <filename class="headerfile">vector.h</filename> can be replaced with <filename class="headerfile">vector</filename> and a using
+like <filename class="headerfile">&lt;vector.h&gt;</filename> can be replaced with <filename class="headerfile">&lt;vector&gt;</filename> and a using
directive <code>using namespace std;</code> can be put at the global
scope. This should be enough to get this code compiling, assuming the
other usage is correct.
</para>
</section>
-<section><info><title>Extension headers hash_map, hash_set moved to ext or backwards</title></info>
+<section xml:id="backwards.third.hash"><info><title>Extension headers hash_map, hash_set moved to ext or backwards</title></info>
<para>At this time most of the features of the SGI STL extension have been
replaced by standardized libraries.
- In particular, the unordered_map and unordered_set containers of TR1
- are suitable replacement for the non-standard hash_map and hash_set
+ In particular, the <classname>unordered_map</classname> and
+ <classname>unordered_set</classname> containers of TR1 and C++ 2011
+ are suitable replacements for the non-standard
+ <classname>hash_map</classname> and <classname>hash_set</classname>
containers in the SGI STL.
</para>
-<para> Header files <filename class="headerfile">hash_map</filename> and <filename class="headerfile">hash_set</filename> moved
-to <filename class="headerfile">ext/hash_map</filename> and <filename class="headerfile">ext/hash_set</filename>,
+<para> Header files <filename class="headerfile">&lt;hash_map&gt;</filename> and <filename class="headerfile">&lt;hash_set&gt;</filename> moved
+to <filename class="headerfile">&lt;ext/hash_map&gt;</filename> and <filename class="headerfile">&lt;ext/hash_set&gt;</filename>,
respectively. At the same time, all types in these files are enclosed
-in <code>namespace __gnu_cxx</code>. Later versions move deprecate
-these files, and suggest using TR1's <filename class="headerfile">unordered_map</filename>
-and <filename class="headerfile">unordered_set</filename> instead.
+in <code>namespace __gnu_cxx</code>. Later versions deprecate
+these files, and suggest using TR1's <filename class="headerfile">&lt;unordered_map&gt;</filename>
+and <filename class="headerfile">&lt;unordered_set&gt;</filename> instead.
</para>
<para>The extensions are no longer in the global or <code>std</code>
@@ -778,7 +782,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
</programlisting>
</section>
-<section><info><title>No <code>ios::nocreate/ios::noreplace</code>.
+<section xml:id="backwards.third.nocreate_noreplace"><info><title>No <code>ios::nocreate/ios::noreplace</code>.
</title></info>
@@ -797,7 +801,7 @@ and <code>trunc</code> (except for <code>app</code> ?).
</para>
</section>
-<section><info><title>
+<section xml:id="backwards.third.streamattach"><info><title>
No <code>stream::attach(int fd)</code>
</title></info>
@@ -819,7 +823,7 @@ No <code>stream::attach(int fd)</code>
<para>
An extension is available that implements this.
- <filename class="headerfile">ext/stdio_filebuf.h</filename> contains a derived class called
+ <filename class="headerfile">&lt;ext/stdio_filebuf.h&gt;</filename> contains a derived class called
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code>__gnu_cxx::stdio_filebuf</code></link>.
This class can be constructed from a C <code>FILE*</code> or a file
descriptor, and provides the <code>fd()</code> function.
@@ -832,7 +836,7 @@ No <code>stream::attach(int fd)</code>
</para>
</section>
-<section><info><title>
+<section xml:id="backwards.third.support_cxx98"><info><title>
Support for C++98 dialect.
</title></info>
@@ -908,7 +912,7 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [
</programlisting>
</section>
-<section><info><title>
+<section xml:id="backwards.third.support_tr1"><info><title>
Support for C++TR1 dialect.
</title></info>
@@ -1000,26 +1004,26 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
</section>
-<section><info><title>
-Support for C++0x dialect.
+<section xml:id="backwards.third.support_cxx11"><info><title>
+Support for C++11 dialect.
</title></info>
-<para>Check for baseline language coverage in the compiler for the C++0xstandard.
+<para>Check for baseline language coverage in the compiler for the C++11 standard.
</para>
<programlisting>
-# AC_COMPILE_STDCXX_OX
-AC_DEFUN([AC_COMPILE_STDCXX_0X], [
- AC_CACHE_CHECK(if g++ supports C++0x features without additional flags,
- ac_cv_cxx_compile_cxx0x_native,
+# AC_COMPILE_STDCXX_11
+AC_DEFUN([AC_COMPILE_STDCXX_11], [
+ AC_CACHE_CHECK(if g++ supports C++11 features without additional flags,
+ ac_cv_cxx_compile_cxx11_native,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check final
{
- static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
+ static constexpr T value{ __cplusplus };
};
typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
@@ -1028,23 +1032,25 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
decltype(a) b;
typedef check&lt;int&gt; check_type;
- check_type c;
- check_type&amp;&amp; cr = c;],,
- ac_cv_cxx_compile_cxx0x_native=yes, ac_cv_cxx_compile_cxx0x_native=no)
+ check_type c{};
+ check_type&amp;&amp; cr = static_cast&lt;check_type&amp;&amp;&gt;(c);
+
+ static_assert(check_type::value == 201103L, "C++11 compiler");],,
+ ac_cv_cxx_compile_cxx11_native=yes, ac_cv_cxx_compile_cxx11_native=no)
AC_LANG_RESTORE
])
- AC_CACHE_CHECK(if g++ supports C++0x features with -std=c++0x,
- ac_cv_cxx_compile_cxx0x_cxx,
+ AC_CACHE_CHECK(if g++ supports C++11 features with -std=c++11,
+ ac_cv_cxx_compile_cxx11_cxx,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=c++0x"
+ CXXFLAGS="$CXXFLAGS -std=c++11"
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check final
{
- static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
+ static constexpr T value{ __cplusplus };
};
typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
@@ -1053,24 +1059,26 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
decltype(a) b;
typedef check&lt;int&gt; check_type;
- check_type c;
- check_type&amp;&amp; cr = c;],,
- ac_cv_cxx_compile_cxx0x_cxx=yes, ac_cv_cxx_compile_cxx0x_cxx=no)
+ check_type c{};
+ check_type&amp;&amp; cr = static_cast&lt;check_type&amp;&amp;&gt;(c);
+
+ static_assert(check_type::value == 201103L, "C++11 compiler");],,
+ ac_cv_cxx_compile_cxx11_cxx=yes, ac_cv_cxx_compile_cxx11_cxx=no)
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
])
- AC_CACHE_CHECK(if g++ supports C++0x features with -std=gnu++0x,
- ac_cv_cxx_compile_cxx0x_gxx,
+ AC_CACHE_CHECK(if g++ supports C++11 features with -std=gnu++11,
+ ac_cv_cxx_compile_cxx11_gxx,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check final
{
- static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
+ static constexpr T value{ __cplusplus };
};
typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
@@ -1079,35 +1087,39 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
decltype(a) b;
typedef check&lt;int&gt; check_type;
- check_type c;
- check_type&amp;&amp; cr = c;],,
- ac_cv_cxx_compile_cxx0x_gxx=yes, ac_cv_cxx_compile_cxx0x_gxx=no)
+ check_type c{};
+ check_type&amp;&amp; cr = static_cast&lt;check_type&amp;&amp;&gt;(c);
+
+ static_assert(check_type::value == 201103L, "C++11 compiler");],,
+ ac_cv_cxx_compile_cxx11_gxx=yes, ac_cv_cxx_compile_cxx11_gxx=no)
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
])
- if test "$ac_cv_cxx_compile_cxx0x_native" = yes ||
- test "$ac_cv_cxx_compile_cxx0x_cxx" = yes ||
- test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then
- AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ])
+ if test "$ac_cv_cxx_compile_cxx11_native" = yes ||
+ test "$ac_cv_cxx_compile_cxx11_cxx" = yes ||
+ test "$ac_cv_cxx_compile_cxx11_gxx" = yes; then
+ AC_DEFINE(HAVE_STDCXX_11,,[Define if g++ supports C++11 features. ])
fi
])
</programlisting>
-<para>Check for library coverage of the C++0xstandard.
+<para>Check for library coverage of the C++2011 standard.
+ (Some library headers are commented out in this check, they are
+ not currently provided by libstdc++).
</para>
<programlisting>
-# AC_HEADER_STDCXX_0X
-AC_DEFUN([AC_HEADER_STDCXX_0X], [
- AC_CACHE_CHECK(for ISO C++ 0x include files,
- ac_cv_cxx_stdcxx_0x,
- [AC_REQUIRE([AC_COMPILE_STDCXX_0X])
+# AC_HEADER_STDCXX_11
+AC_DEFUN([AC_HEADER_STDCXX_11], [
+ AC_CACHE_CHECK(for ISO C++11 include files,
+ ac_cv_cxx_stdcxx_11,
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([
#include &lt;cassert&gt;
@@ -1123,6 +1135,7 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;cmath&gt;
#include &lt;csetjmp&gt;
#include &lt;csignal&gt;
+ #include &lt;cstdalign&gt;
#include &lt;cstdarg&gt;
#include &lt;cstdbool&gt;
#include &lt;cstddef&gt;
@@ -1132,17 +1145,25 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;cstring&gt;
#include &lt;ctgmath&gt;
#include &lt;ctime&gt;
+ // #include &lt;cuchar&gt;
#include &lt;cwchar&gt;
#include &lt;cwctype&gt;
#include &lt;algorithm&gt;
#include &lt;array&gt;
+ #include &lt;atomic&gt;
#include &lt;bitset&gt;
+ #include &lt;chrono&gt;
+ // #include &lt;codecvt&gt;
#include &lt;complex&gt;
+ #include &lt;condition_variable&gt;
#include &lt;deque&gt;
#include &lt;exception&gt;
+ #include &lt;forward_list&gt;
#include &lt;fstream&gt;
#include &lt;functional&gt;
+ #include &lt;future&gt;
+ #include &lt;initializer_list&gt;
#include &lt;iomanip&gt;
#include &lt;ios&gt;
#include &lt;iosfwd&gt;
@@ -1154,19 +1175,25 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;locale&gt;
#include &lt;map&gt;
#include &lt;memory&gt;
+ #include &lt;mutex&gt;
#include &lt;new&gt;
#include &lt;numeric&gt;
#include &lt;ostream&gt;
#include &lt;queue&gt;
#include &lt;random&gt;
+ #include &lt;ratio&gt;
#include &lt;regex&gt;
+ #include &lt;scoped_allocator&gt;
#include &lt;set&gt;
#include &lt;sstream&gt;
#include &lt;stack&gt;
#include &lt;stdexcept&gt;
#include &lt;streambuf&gt;
#include &lt;string&gt;
+ #include &lt;system_error&gt;
+ #include &lt;thread&gt;
#include &lt;tuple&gt;
+ #include &lt;typeindex&gt;
#include &lt;typeinfo&gt;
#include &lt;type_traits&gt;
#include &lt;unordered_map&gt;
@@ -1175,17 +1202,18 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
#include &lt;valarray&gt;
#include &lt;vector&gt;
],,
- ac_cv_cxx_stdcxx_0x=yes, ac_cv_cxx_stdcxx_0x=no)
+ ac_cv_cxx_stdcxx_11=yes, ac_cv_cxx_stdcxx_11=no)
AC_LANG_RESTORE
CXXFLAGS="$ac_save_CXXFLAGS"
])
- if test "$ac_cv_cxx_stdcxx_0x" = yes; then
- AC_DEFINE(STDCXX_0X_HEADERS,,[Define if ISO C++ 0x header files are present. ])
+ if test "$ac_cv_cxx_stdcxx_11" = yes; then
+ AC_DEFINE(STDCXX_11_HEADERS,,[Define if ISO C++11 header files are present. ])
fi
])
</programlisting>
-<para>As is the case for TR1 support, these autoconf macros can be made for a finer-grained, per-header-file check. For &lt;unordered_map&gt;
+<para>As is the case for TR1 support, these autoconf macros can be made for a finer-grained, per-header-file check. For
+<filename class="headerfile">&lt;unordered_map&gt;</filename>
</para>
<programlisting>
@@ -1193,11 +1221,11 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
AC_DEFUN([AC_HEADER_UNORDERED_MAP], [
AC_CACHE_CHECK(for unordered_map,
ac_cv_cxx_unordered_map,
- [AC_REQUIRE([AC_COMPILE_STDCXX_0X])
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([#include &lt;unordered_map&gt;], [using std::unordered_map;],
ac_cv_cxx_unordered_map=yes, ac_cv_cxx_unordered_map=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -1214,11 +1242,11 @@ AC_DEFUN([AC_HEADER_UNORDERED_MAP], [
AC_DEFUN([AC_HEADER_UNORDERED_SET], [
AC_CACHE_CHECK(for unordered_set,
ac_cv_cxx_unordered_set,
- [AC_REQUIRE([AC_COMPILE_STDCXX_0X])
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++11"
AC_TRY_COMPILE([#include &lt;unordered_set&gt;], [using std::unordered_set;],
ac_cv_cxx_unordered_set=yes, ac_cv_cxx_unordered_set=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -1229,15 +1257,26 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
fi
])
</programlisting>
+
+<para>
+ Some C++11 features first appeared in GCC 4.3 and could be enabled by
+ <option>-std=c++0x</option> and <option>-std=gnu++0x</option> for GCC
+ releases which pre-date the 2011 standard. Those C++11 features and GCC's
+ support for them were still changing until the 2011 standard was finished,
+ but the autoconf checks above could be extended to test for incomplete
+ C++11 support with <option>-std=c++0x</option> and
+ <option>-std=gnu++0x</option>.
+</para>
+
</section>
-<section><info><title>
- Container::iterator_type is not necessarily Container::value_type*
+<section xml:id="backwards.third.iterator_type"><info><title>
+ <code>Container::iterator_type</code> is not necessarily <code>Container::value_type*</code>
</title></info>
<para>
- This is a change in behavior from the previous version. Now, most
+ This is a change in behavior from older versions. Now, most
<type>iterator_type</type> typedefs in container classes are POD
objects, not <type>value_type</type> pointers.
</para>
@@ -1249,31 +1288,33 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.kegel.com/gcc/gcc4.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.kegel.com/gcc/gcc4.html">
Migrating to GCC 4.1
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>Dan</firstname><surname>Kegel</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html">
Building the Whole Debian Archive with GCC 4.1: A Summary
- </citetitle>
-
+ </link>
+ </title>
<author><personname><firstname>Martin</firstname><surname>Michlmayr</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html">
Migration guide for GCC-3.2
- </citetitle>
+ </link>
+ </title>
</biblioentry>
diff --git a/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml b/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
index 19b190661f..ab6d63b16c 100644
--- a/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
+++ b/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
@@ -1,8 +1,8 @@
-<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="manual.ext.allocator.bitmap" xreflabel="bitmap_allocator">
<?dbhtml filename="bitmap_allocator.html"?>
-<info><title>bitmap_allocator</title>
+<info><title>The bitmap_allocator</title>
<keywordset>
<keyword>
ISO C++
@@ -23,7 +23,7 @@
<para>
As this name suggests, this allocator uses a bit-map to keep track
- of the used and unused memory locations for it's book-keeping
+ of the used and unused memory locations for its book-keeping
purposes.
</para>
<para>
@@ -84,7 +84,7 @@
free list if it exists.
</para>
<para>
- Suppose the free list size has reached it's threshold, then the
+ Suppose the free list size has reached its threshold, then the
largest block from among those in the list and the new block will
be selected and given back to the OS. This is done because it
reduces external fragmentation, and allows the OS to use the
@@ -509,7 +509,7 @@ Block a bitmap as well?
<orderedlist>
<listitem><para>Constant time access for the bitmap themselves, since no kind of
-look up will be needed to find the correct bitmap list or it's
+look up will be needed to find the correct bitmap list or its
equivalent.</para></listitem>
<listitem><para>And also this would preserve the cache as far as possible.</para></listitem>
</orderedlist>
@@ -558,4 +558,4 @@ equivalent.</para></listitem>
</section>
-</section>
+</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/build_hacking.xml b/libstdc++-v3/doc/xml/manual/build_hacking.xml
index 945ef49968..dde72729f2 100644
--- a/libstdc++-v3/doc/xml/manual/build_hacking.xml
+++ b/libstdc++-v3/doc/xml/manual/build_hacking.xml
@@ -8,7 +8,13 @@
C++
</keyword>
<keyword>
- BUILD_HACKING
+ build
+ </keyword>
+ <keyword>
+ configure
+ </keyword>
+ <keyword>
+ hacking
</keyword>
<keyword>
version
@@ -38,17 +44,60 @@
</para>
</section>
-<section xml:id="build_hacking.map"><info><title>Overview: What Comes from Where</title></info>
+<section xml:id="build_hacking.overview">
+<info><title>Overview</title></info>
+
+<section xml:id="build_hacking.overview.basic">
+<info><title>General Process</title></info>
+
+<para>
+ The configure process begins the act of building libstdc++, and is
+ started via:
+</para>
+
+<screen>
+<computeroutput>
+configure
+</computeroutput>
+</screen>
+
+<para>
+The <filename>configure</filename> file is a script generated (via
+<command>autoconf</command>) from the file
+<filename>configure.ac</filename>.
+</para>
+
+
+<para>
+ After the configure process is complete,
+</para>
+
+<screen>
+<computeroutput>
+make all
+</computeroutput>
+</screen>
+
+<para>
+in the build directory starts the build process. The <literal>all</literal> target comes from the <filename>Makefile</filename> file, which is generated via <command>configure</command> from the <filename>Makefile.in</filename> file, which is in turn generated (via
+<command>automake</command>) from the file
+<filename>Makefile.am</filename>.
+</para>
+
+</section>
+
+
+<section xml:id="build_hacking.overview.map"><info><title>What Comes from Where</title></info>
<figure>
<title>Configure and Build File Dependencies</title>
<mediaobject>
<imageobject>
- <imagedata align="center" format="PDF" fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/confdeps.pdf"/>
+ <imagedata align="center" format="PDF" scale="75" fileref="../images/confdeps.pdf"/>
</imageobject>
<imageobject>
- <imagedata align="center" format="PNG" fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/confdeps.png"/>
+ <imagedata align="center" format="PNG" scale="100" fileref="../images/confdeps.png"/>
</imageobject>
<textobject>
<phrase>Dependency Graph for Configure and Build Files</phrase>
@@ -57,19 +106,19 @@
</figure>
<para>
- Regenerate all generated files by using the command sequence
- <code>"autoreconf"</code> at the top level of the libstdc++ source
- directory. The following will also work, but is much more complex:
- <code>"aclocal-1.11 &amp;&amp; autoconf-2.64 &amp;&amp;
- autoheader-2.64 &amp;&amp; automake-1.11"</code> The version
- numbers may be absent entirely or otherwise vary depending on
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">the
- current requirements</link> and your vendor's choice of
- installation names.
+ Regenerate all generated files by using the command
+ <code>autoreconf</code> at the top level of the libstdc++ source
+ directory.
</para>
</section>
-<section xml:id="build_hacking.scripts"><info><title>Storing Information in non-AC files (like configure.host)</title></info>
+</section> <!-- overview -->
+
+
+<section xml:id="build_hacking.configure">
+<info><title>Configure</title></info>
+
+<section xml:id="build_hacking.configure.scripts"><info><title>Storing Information in non-AC files (like configure.host)</title></info>
<para>
@@ -101,7 +150,7 @@
</para>
</section>
-<section xml:id="build_hacking.conventions"><info><title>Coding and Commenting Conventions</title></info>
+<section xml:id="build_hacking.configure.conventions"><info><title>Coding and Commenting Conventions</title></info>
<para>
@@ -126,7 +175,7 @@
</para>
</section>
-<section xml:id="build_hacking.acinclude"><info><title>The acinclude.m4 layout</title></info>
+<section xml:id="build_hacking.configure.acinclude"><info><title>The acinclude.m4 layout</title></info>
<para>
The nice thing about acinclude.m4/aclocal.m4 is that macros aren't
@@ -217,19 +266,19 @@
</section>
-<section xml:id="build_hacking.enable"><info><title><constant>GLIBCXX_ENABLE</constant>, the <literal>--enable</literal> maker</title></info>
+<section xml:id="build_hacking.configure.enable"><info><title><constant>GLIBCXX_ENABLE</constant>, the <literal>--enable</literal> maker</title></info>
<para>
- All the GLIBCXX_ENABLE_FOO macros use a common helper,
- GLIBCXX_ENABLE. (You don't have to use it, but it's easy.) The
- helper does two things for us:
+ All the <literal>GLIBCXX_ENABLE_FOO</literal> macros use a common
+ helper, <literal>GLIBCXX_ENABLE</literal>. (You don't have to use
+ it, but it's easy.) The helper does two things for us:
</para>
<orderedlist>
<listitem>
<para>
- Builds the call to the AC_ARG_ENABLE macro, with --help text
+ Builds the call to the <literal>AC_ARG_ENABLE</literal> macro, with --help text
properly quoted and aligned. (Death to changequote!)
</para>
</listitem>
@@ -237,7 +286,7 @@
<para>
Checks the result against a list of allowed possibilities, and
signals a fatal error if there's no match. This means that the
- rest of the GLIBCXX_ENABLE_FOO macro doesn't need to test for
+ rest of the <literal>GLIBCXX_ENABLE_FOO</literal> macro doesn't need to test for
strange arguments, nor do we need to protect against
empty/whitespace strings with the <code>"x$foo" = "xbar"</code>
idiom.
@@ -284,13 +333,13 @@
not pass --enable/--disable. It should be one of the permitted
values passed later. Examples: <code>[yes]</code>, or
<code>[bar]</code>, or <code>[$1]</code> (which passes the
- argument given to the GLIBCXX_ENABLE_FOO macro as the
- default).
+ argument given to the <literal>GLIBCXX_ENABLE_FOO</literal> macro
+ as the default).
</para>
<para>
For cases where we need to probe for particular models of things,
it is useful to have an undocumented "auto" value here (see
- GLIBCXX_ENABLE_CLOCALE for an example).
+ <literal>GLIBCXX_ENABLE_CLOCALE</literal> for an example).
</para>
</listitem>
<listitem>
@@ -351,5 +400,86 @@
</para>
</section>
+</section> <!-- configure -->
+
+<section xml:id="build_hacking.make"><info><title>Make</title></info>
+
+ <para>
+ The build process has to make all of object files needed for
+ static or shared libraries, but first it has to generate some
+ include files. The general order is as follows:
+ </para>
+
+<orderedlist>
+ <listitem>
+ <para>
+ make include files, make pre-compiled headers
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ make libsupc++
+ </para>
+ <para>
+ Generates a libtool convenience library,
+ <filename>libsupc++convenience</filename> with language-support
+ routines. Also generates a freestanding static library,
+ <filename>libsupc++.a</filename>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ make src
+ </para>
+ <para>
+ Generates two convenience libraries, one for C++98 and one for
+ C++11, various compability files for shared and static
+ libraries, and then collects all the generated bits and creates
+ the final libstdc++ libraries.
+ </para>
+<orderedlist>
+ <listitem>
+ <para>
+ make src/c++98
+ </para>
+ <para>
+ Generates a libtool convenience library,
+ <filename>libc++98convenience</filename> with language-support
+ routines. Uses the <literal>-std=gnu++98</literal> dialect.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ make src/c++11
+ </para>
+ <para>
+ Generates a libtool convenience library,
+ <filename>libc++11convenience</filename> with language-support
+ routines. Uses the <literal>-std=gnu++11</literal> dialect.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ make src
+ </para>
+ <para>
+ Generates needed compatibility objects for shared and static
+ libraries. Shared-only code is seggregated at compile-time via
+ the macro <literal>_GLIBCXX_SHARED</literal>.
+ </para>
+
+ <para>
+ Then, collects all the generated convenience libraries, adds in
+ any required compatibility objects, and creates the final shared
+ and static libraries: <filename>libstdc++.so</filename> and
+ <filename>libstdc++.a</filename>.
+ </para>
+
+ </listitem>
+</orderedlist>
+ </listitem>
+</orderedlist>
+
+</section> <!-- make -->
</section>
diff --git a/libstdc++-v3/doc/xml/manual/codecvt.xml b/libstdc++-v3/doc/xml/manual/codecvt.xml
index 39a95aace0..f7d7e48626 100644
--- a/libstdc++-v3/doc/xml/manual/codecvt.xml
+++ b/libstdc++-v3/doc/xml/manual/codecvt.xml
@@ -586,11 +586,13 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin/" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.opengroup.org/austin">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
+ </link>
+ </title>
+
<copyright>
<year>2008</year>
<holder>
@@ -639,32 +641,36 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.lysator.liu.se/c/na1.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.lysator.liu.se/c/na1.html">
A brief description of Normative Addendum 1
- </citetitle>
+ </link>
+ </title>
<author><personname><surname>Feather</surname><firstname>Clive</firstname></personname></author>
<pagenums>Extended Character Sets</pagenums>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tldp.org/HOWTO/Unicode-HOWTO.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://tldp.org/HOWTO/Unicode-HOWTO.html">
The Unicode HOWTO
- </citetitle>
+ </link>
+ </title>
<author><personname><surname>Haible</surname><firstname>Bruno</firstname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
UTF-8 and Unicode FAQ for Unix/Linux
- </citetitle>
+ </link>
+ </title>
+
<author><personname><surname>Khun</surname><firstname>Markus</firstname></personname></author>
</biblioentry>
diff --git a/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml b/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
index 9092c8def6..e36d3aa994 100644
--- a/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
+++ b/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
@@ -21,7 +21,8 @@
<section xml:id="manual.ext.concurrency.design.threads" xreflabel="Threads API"><info><title>Interface to Locks and Mutexes</title></info>
-<para>The file &lt;ext/concurrence.h&gt; contains all the higher-level
+<para>The file <filename class="headerfile">&lt;ext/concurrence.h&gt;</filename>
+contains all the higher-level
constructs for playing with threads. In contrast to the atomics layer,
the concurrence layer consists largely of types. All types are defined within <code>namespace __gnu_cxx</code>.
</para>
@@ -65,14 +66,14 @@ host environment and the current compilation flags.
interface: <code>__mutex</code>, and <code>__scoped_lock</code>.
</para>
-<para>
-</para>
-
<para>The scoped lock idiom is well-discussed within the C++
community. This version takes a <code>__mutex</code> reference, and
-locks it during construction of <code>__scoped_locke</code> and
+locks it during construction of <code>__scoped_lock</code> and
unlocks it during destruction. This is an efficient way of locking
critical sections, while retaining exception-safety.
+These types have been superseded in the ISO C++ 2011 standard by the
+mutex and lock types defined in the header
+<filename class="headerfile">&lt;mutex&gt;</filename>.
</para>
</section>
@@ -210,11 +211,19 @@ usage vary depending on the target hardware and the flags used during
compile.
</para>
+
+
+<para>
+<remark>
+Incomplete/inconsistent. This is only C++11.
+</remark>
+</para>
+
<para>
If builtins are possible for bool-sized integral types,
-<code>_GLIBCXX_ATOMIC_BUILTINS_1</code> will be defined.
+<code>ATOMIC_BOOL_LOCK_FREE</code> will be defined.
If builtins are possible for int-sized integral types,
-<code>_GLIBCXX_ATOMIC_BUILTINS_4</code> will be defined.
+<code>ATOMIC_INT_LOCK_FREE</code> will be defined.
</para>
diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml
index 6b1efa8006..727d886d31 100644
--- a/libstdc++-v3/doc/xml/manual/configure.xml
+++ b/libstdc++-v3/doc/xml/manual/configure.xml
@@ -161,6 +161,13 @@
</para>
</listitem></varlistentry>
+ <varlistentry><term><code>--enable-libstdcxx-threads</code></term>
+ <listitem><para>Enable C++11 threads support. If not explicitly specified,
+ the configure process enables it if possible. It defaults to 'off'
+ on Solaris 8 and 9, where it would break symbol versioning. This
+ option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
<varlistentry><term><code>--enable-libstdcxx-time</code></term>
<listitem><para>This is an abbreviated form of
@@ -172,7 +179,7 @@
<listitem><para>Enables link-type checks for the availability of the
clock_gettime clocks, used in the implementation of [time.clock],
and of the nanosleep and sched_yield functions, used in the
- implementation of [thread.thread.this] of the current C++0x draft.
+ implementation of [thread.thread.this] of the 2011 ISO C++ standard.
The choice OPTION=yes checks for the availability of the facilities
in libc and libposix4. In case of need the latter is also linked
to libstdc++ as part of the build process. OPTION=rt also searches
@@ -315,12 +322,15 @@
</listitem></varlistentry>
- <varlistentry><term><code>--enable-visibility</code></term>
- <listitem><para> In 4.2 and later, enables or disables visibility attributes.
- If enabled (as by default), and the compiler seems capable of
- passing the simple sanity checks thrown at it, adjusts items
- in namespace std, namespace std::tr1, and namespace __gnu_cxx
- so that -fvisibility options work.
+ <varlistentry><term><code>--enable-libstdcxx-visibility</code></term>
+ <listitem><para> In 4.2 and later, enables or disables visibility
+ attributes. If enabled (as by default), and the compiler seems
+ capable of passing the simple sanity checks thrown at it, adjusts
+ items in namespace std, namespace std::tr1, namespace std::tr2,
+ and namespace __gnu_cxx to have <code>visibility ("default")</code>
+ so that -fvisibility options can be used without affecting the
+ normal external-visibility of namespace std entities.
+ Prior to 4.7 this option was spelled <code>--enable-visibility</code>.
</para>
</listitem></varlistentry>
diff --git a/libstdc++-v3/doc/xml/manual/ctype.xml b/libstdc++-v3/doc/xml/manual/ctype.xml
index afca9be547..d6f2407a6e 100644
--- a/libstdc++-v3/doc/xml/manual/ctype.xml
+++ b/libstdc++-v3/doc/xml/manual/ctype.xml
@@ -166,11 +166,12 @@ characters.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.unix.org/version3/ieee_std.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.unix.org/version3/ieee_std.html">
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
- </citetitle>
+ </link>
+ </title>
<copyright>
<year>1999</year>
diff --git a/libstdc++-v3/doc/xml/manual/debug.xml b/libstdc++-v3/doc/xml/manual/debug.xml
index 05994ec17a..de13976012 100644
--- a/libstdc++-v3/doc/xml/manual/debug.xml
+++ b/libstdc++-v3/doc/xml/manual/debug.xml
@@ -207,14 +207,24 @@
redefining them will only affect inline functions and template
instantiations which are compiled in user code. This allows annotation
of templates such as <code>shared_ptr</code>, but not code which is
- only instantiated in the library.
- In order to annotate <code>basic_string</code> reference counting it
- is necessary to disable extern templates (by defining
- <code>_GLIBCXX_EXTERN_TEMPLATE=-1</code>) or to rebuild the
- <code>.so</code> file.
+ only instantiated in the library. Code which is only instantiated in
+ the library needs to be recompiled with the annotation macros defined.
+ That can be done by rebuilding the entire
+ <filename class="libraryfile">libstdc++.so</filename> file but a simpler
+ alternative exists for ELF platforms such as GNU/Linux, because ELF
+ symbol interposition allows symbols defined in the shared library to be
+ overridden by symbols with the same name that appear earlier in the
+ runtime search path. This means you only need to recompile the functions
+ that are affected by the annotation macros, which can be done by
+ recompiling individual files.
+ Annotating <code>std::string</code> and <code>std::wstring</code>
+ reference counting can be done by disabling extern templates (by defining
+ <code>_GLIBCXX_EXTERN_TEMPLATE=-1</code>) or by rebuilding the
+ <filename>src/string-inst.cc</filename> file.
Annotating the remaining atomic operations (at the time of writing these
- are in <code>ios_base::Init::~Init</code>, <code>locale::_Impl</code> and
- <code>locale::facet</code>) requires rebuilding the <code>.so</code> file.
+ are in <code>ios_base::Init::~Init</code>, <code>locale::_Impl</code>,
+ <code>locale::facet</code> and <code>thread::_M_start_thread</code>)
+ requires rebuilding the relevant source files.
</para>
<para>
@@ -227,7 +237,7 @@
xlink:href="http://valgrind.org/docs/manual/hg-manual.html">
Helgrind</link>, and
<link xmlns:xlink="http://www.w3.org/1999/xlink"
- xlink:href="http://code.google.com/p/data-race-test">
+ xlink:href="http://code.google.com/p/data-race-test/">
ThreadSanitizer</link>.
</para>
diff --git a/libstdc++-v3/doc/xml/manual/debug_mode.xml b/libstdc++-v3/doc/xml/manual/debug_mode.xml
index c58bde3406..442cd12b1f 100644
--- a/libstdc++-v3/doc/xml/manual/debug_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/debug_mode.xml
@@ -267,12 +267,12 @@ which always works correctly.
</tgroup>
</table>
-<para>In addition, when compiling in C++0x mode, these additional
+<para>In addition, when compiling in C++11 mode, these additional
containers have additional debug capability.
</para>
<table frame="all">
-<title>Debugging Containers C++0x</title>
+<title>Debugging Containers C++11</title>
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@@ -588,7 +588,7 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
<para>Achieving link- and run-time coexistence is not a trivial
implementation task. To achieve this goal we required a small
- extension to the GNU C++ compiler (since incorporated into the C++0x language specification, described in the GCC Manual for the C++ language as
+ extension to the GNU C++ compiler (since incorporated into the C++11 language specification, described in the GCC Manual for the C++ language as
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association">namespace
association</link>), and a complex organization of debug- and
release-modes. The end result is that we have achieved per-use
@@ -630,7 +630,7 @@ namespace std
defined in the namespace <code>__cxx1998</code>) and also the
debug-mode container. The debug-mode container is defined within the
namespace <code>__debug</code>, which is associated with namespace
-<code>std</code> via the C++0x namespace association language feature. This
+<code>std</code> via the C++11 namespace association language feature. This
method allows the debug and release versions of the same component to
coexist at compile-time and link-time without causing an unreasonable
maintenance burden, while minimizing confusion. Again, this boils down
@@ -859,7 +859,7 @@ test02()
supports debugging for programs using libstdc++. The existing
implementations include:</para>
<itemizedlist>
- <listitem><para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html">SafeSTL</link>:
+ <listitem><para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cs.sjsu.edu/faculty/horstman/safestl.html">SafeSTL</link>:
SafeSTL was the original debugging version of the Standard Template
Library (STL), implemented by Cay S. Horstmann on top of the
Hewlett-Packard STL. Though it inspired much work in this area, it
diff --git a/libstdc++-v3/doc/xml/manual/diagnostics.xml b/libstdc++-v3/doc/xml/manual/diagnostics.xml
index 1a6a3f17dc..fd21442b99 100644
--- a/libstdc++-v3/doc/xml/manual/diagnostics.xml
+++ b/libstdc++-v3/doc/xml/manual/diagnostics.xml
@@ -117,7 +117,7 @@
<para>
Please note that the checks are based on the requirements in the original
- C++ standard, some of which have changed in the upcoming C++0x revision.
+ C++ standard, some of which have changed in the new C++11 revision.
Additionally, some correct code might be rejected by the concept checks,
for example template argument types may need to be complete when used in
a template definition, rather than at the point of instantiation.
diff --git a/libstdc++-v3/doc/xml/manual/documentation_hacking.xml b/libstdc++-v3/doc/xml/manual/documentation_hacking.xml
index 7b2ed7c09b..59f8445473 100644
--- a/libstdc++-v3/doc/xml/manual/documentation_hacking.xml
+++ b/libstdc++-v3/doc/xml/manual/documentation_hacking.xml
@@ -102,14 +102,10 @@
in the following directories:
</para>
<para>
- <filename class="directory">
- doc/libstdc++/libstdc++-api.html
- </filename>
+ <filename>doc/libstdc++/libstdc++-api.html</filename>
</para>
<para>
- <filename class="directory">
- doc/libstdc++/libstdc++-manual.html
- </filename>
+ <filename>doc/libstdc++/libstdc++-manual.html</filename>
</para>
</listitem>
</varlistentry>
@@ -242,7 +238,7 @@
<row>
<entry>doxygen</entry>
- <entry>1.7.0</entry>
+ <entry>1.7.6.1</entry>
<entry>all</entry>
</row>
@@ -280,6 +276,16 @@
output, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.tug.org/applications/pdftex/">
pdflatex</link> is required.
</para>
+
+ <para>
+ Be warned the PDF file generated via doxygen is extremely
+ large. At last count, the PDF file is over three thousand
+ pages. Generating this document taxes the underlying TeX
+ formatting system, and will require the expansion of TeX's memory
+ capacity. Specifically, the <literal>pool_size</literal>
+ variable in the configuration file <filename>texmf.cnf</filename> may
+ need to be increased by a minimum factor of two.
+ </para>
</section>
<section xml:id="doxygen.rules"><info><title>Generating the Doxygen Files</title></info>
@@ -336,6 +342,76 @@
</section>
+ <section xml:id="doxygen.debug">
+ <info><title>Debugging Generation</title></info>
+
+ <para>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+ to fix some common issues that may appear quite cryptic.
+ </para>
+
+ <para>
+ First, if using a rule like <code>make pdf</code>, try to
+ narrow down the scope of the error to either docbook
+ (<code>make doc-pdf-docbook</code>) or doxygen (<code>make
+ doc-pdf-doxygen</code>).
+ </para>
+ <para>
+ Working on the doxygen path only, closely examine the
+ contents of the following build directory:
+ <filename>build/target/libstdc++-v3/doc/doxygen/latex</filename>.
+ Pay attention to three files enclosed within, annotated as follows.
+ </para>
+<itemizedlist>
+
+<listitem>
+ <para>
+ <emphasis>refman.tex</emphasis>
+ </para>
+
+ <para>
+ The actual latex file, or partial latex file. This is generated
+ via <command>doxygen</command>, and is the LaTeX version of the
+ Doxygen XML file <filename>libstdc++-api.xml</filename>. Go to a specific
+ line, and look at the genrated LaTeX, and try to deduce what
+ markup in <filename>libstdc++-api.xml</filename> is causing it.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ <emphasis>refman.out</emphasis>
+ </para>
+
+ <para>
+ A log of the compilation of the converted LaTeX form to pdf. This
+ is a linear list, from the beginning of the
+ <filename>refman.tex</filename> file: the last entry of this file
+ should be the end of the LaTeX file. If it is truncated, then you
+ know that the last entry is the last part of the generated LaTeX
+ source file that is valid. Often this file contains an error with
+ a specific line number of <filename>refman.tex</filename> that is
+ incorrect, or will have clues at the end of the file with the dump
+ of the memory usage of LaTeX.
+ </para>
+</listitem>
+</itemizedlist>
+
+ <para>
+ If the error at hand is not obvious after examination, a
+ fall-back strategy is to start commenting out the doxygen
+ input sources, which can be found in
+ <filename>doc/doxygen/user.cfg.in</filename>, look for the
+ <literal>INPUT</literal> tag. Start by commenting out whole
+ directories of header files, until the offending header is
+ identified. Then, read the latex log files to try and find
+ surround text, and look for that in the offending header.
+ </para>
+
+ </section>
+
<section xml:id="doxygen.markup"><info><title>Markup</title></info>
@@ -367,9 +443,8 @@
<para>
Some commentary to accompany
- the first list in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/docblocks.html">Special
- Documentation Blocks</link> section of
- the Doxygen manual:
+ the first list in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html">Special
+ Documentation Blocks</link> section of the Doxygen manual:
</para>
<orderedlist inheritnum="ignore" continuation="restarts">
@@ -611,6 +686,12 @@
<entry>info output</entry>
</row>
+ <row>
+ <entry>epub3 stylesheets</entry>
+ <entry>b3</entry>
+ <entry>epub output</entry>
+ </row>
+
</tbody>
</tgroup>
</table>
@@ -648,7 +729,7 @@
</para>
<para>
- For processing XML, an XML processor and some style
+ For processing XML, an XSLT processor and some style
sheets are necessary. Defaults are <command>xsltproc</command>
provided by <filename>libxslt</filename>.
</para>
@@ -675,6 +756,10 @@
For Texinfo output, something that transforms valid Docbook
XML to Texinfo is required. The default choice is <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docbook2x.sourceforge.net/">docbook2X</link>.
</para>
+
+ <para>
+ For epub output, the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceforge.net/projects/docbook/files/epub3/">stylesheets</link> for EPUB3 are required. These stylesheets are still in development. To validate the created file, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://code.google.com/p/epubcheck/">epubcheck</link> is necessary.
+ </para>
</section>
<section xml:id="docbook.rules"><info><title>Generating the DocBook Files</title></info>
@@ -711,7 +796,7 @@
<para>
If the Docbook stylesheets are installed in a custom location,
one can use the variable <literal>XSL_STYLE_DIR</literal> to
- over-ride the Makefile defaults. As so:
+ override the Makefile defaults. For example:
</para>
<screen>
@@ -722,6 +807,95 @@ make <literal>XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</literal>
</section>
+ <section xml:id="docbook.debug">
+ <info><title>Debugging Generation</title></info>
+
+ <para>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+ to fix some common issues that may appear quite cryptic.
+ </para>
+
+ <para>
+ First, if using a rule like <code>make pdf</code>, try to
+ narrow down the scope of the error to either docbook
+ (<code>make doc-pdf-docbook</code>) or doxygen (<code>make
+ doc-pdf-doxygen</code>).
+ </para>
+
+ <para>
+ Working on the docbook path only, closely examine the
+ contents of the following build directory:
+ <filename>build/target/libstdc++-v3/doc/docbook/latex</filename>.
+ Pay attention to three files enclosed within, annotated as follows.
+ </para>
+
+<itemizedlist>
+
+<listitem>
+ <para>
+ <emphasis>spine.tex</emphasis>
+ </para>
+
+ <para>
+ The actual latex file, or partial latex file. This is generated
+ via <command>dblatex</command>, and is the LaTeX version of the
+ DocBook XML file <filename>spine.xml</filename>. Go to a specific
+ line, and look at the genrated LaTeX, and try to deduce what
+ markup in <filename>spine.xml</filename> is causing it.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ <emphasis>spine.out</emphasis>
+ </para>
+
+ <para>
+ A log of the conversion from the XML form to the LaTeX form. This
+ is a linear list, from the beginning of the
+ <filename>spine.xml</filename> file: the last entry of this file
+ should be the end of the DocBook file. If it is truncated, then
+ you know that the last entry is the last part of the XML source
+ file that is valid. The error is after this point.
+ </para>
+</listitem>
+
+
+<listitem>
+ <para>
+ <emphasis>spine.log</emphasis>
+ </para>
+
+ <para>
+ A log of the compilation of the converted LaTeX form to pdf. This
+ is a linear list, from the beginning of the
+ <filename>spine.tex</filename> file: the last entry of this file
+ should be the end of the LaTeX file. If it is truncated, then you
+ know that the last entry is the last part of the generated LaTeX
+ source file that is valid. Often this file contains an error with
+ a specific line number of <filename>spine.tex</filename> that is
+ incorrect.
+ </para>
+</listitem>
+
+</itemizedlist>
+
+ <para>
+ If the error at hand is not obvious after examination, or if one
+ encounters the inscruitable <quote>Incomplete
+ \ifmmode</quote> error, a fall-back strategy is to start
+ commenting out parts of the XML document (regardless of what
+ this does to over-all document validity). Start by
+ commenting out each of the largest parts of the
+ <filename>spine.xml</filename> file, section by section,
+ until the offending section is identified.
+ </para>
+
+
+ </section>
+
<section xml:id="docbook.validation"><info><title>Editing and Validation</title></info>
<para>
diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml
index 08876deb18..145c11f28c 100644
--- a/libstdc++-v3/doc/xml/manual/evolution.xml
+++ b/libstdc++-v3/doc/xml/manual/evolution.xml
@@ -399,7 +399,7 @@ Backward include edit.
</para>
</listitem>
<listitem>
- <para>Added in C++0x</para>
+ <para>Added in C++11</para>
<para>
<filename class="headerfile">auto_ptr.h</filename> and <filename class="headerfile">binders.h</filename>
</para>
diff --git a/libstdc++-v3/doc/xml/manual/extensions.xml b/libstdc++-v3/doc/xml/manual/extensions.xml
index b93c61f1be..804cc7f0bf 100644
--- a/libstdc++-v3/doc/xml/manual/extensions.xml
+++ b/libstdc++-v3/doc/xml/manual/extensions.xml
@@ -1,4 +1,4 @@
-<part xmlns="http://docbook.org/ns/docbook" version="5.0"
+<part xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="manual.ext" xreflabel="Extensions">
<?dbhtml filename="extensions.html"?>
@@ -17,13 +17,12 @@
</info>
-
<preface><info><title/></info>
-
<para>
- Here we will make an attempt at describing the non-Standard extensions to
- the library. Some of these are from SGI's STL, some of these are GNU's,
- and some just seemed to appear on the doorstep.
+ Here we will make an attempt at describing the non-Standard
+ extensions to the library. Some of these are from older versions of
+ standard library components, namely SGI's STL, and some of these are
+ GNU's.
</para>
<para><emphasis>Before</emphasis> you leap in and use any of these
extensions, be aware of two things:
@@ -53,7 +52,7 @@ extensions, be aware of two things:
<!-- Chapter 01 : Compile Time Checks -->
<chapter xml:id="manual.ext.compile_checks" xreflabel="Compile Time Checks"><info><title>Compile Time Checks</title></info>
<?dbhtml filename="ext_compile_checks.html"?>
-
+
<para>
Also known as concept checking.
</para>
@@ -100,59 +99,57 @@ extensions, be aware of two things:
</chapter>
<!-- Chapter 02 : Debug Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="debug_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="debug_mode.xml">
</xi:include>
<!-- Chapter 03 : Parallel Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="parallel_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="parallel_mode.xml">
</xi:include>
<!-- Chapter 04 : Profile Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="profile_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="profile_mode.xml">
</xi:include>
-<!-- Chapter 05 : Allocators -->
-<chapter xml:id="manual.ext.allocator" xreflabel="Allocators"><info><title>Allocators</title></info>
-<?dbhtml filename="ext_allocators.html"?>
-
-
- <!-- Section 01 : __mt_alloc -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="mt_allocator.xml">
- </xi:include>
+<!-- XXX -->
+<!-- Allocators -->
+<!-- Chapter 05 : __mt_alloc -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="mt_allocator.xml">
+</xi:include>
- <!-- Section 02 : bitmap_allocator -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="bitmap_allocator.xml">
- </xi:include>
+<!-- Chapter 06 : bitmap_allocator -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="bitmap_allocator.xml">
+</xi:include>
-</chapter>
+<!-- Containers -->
+<!-- Chapter 07 : Policy-Based Data Structures -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="policy_data_structures.xml">
+</xi:include>
-<!-- Chapter 06 : Containers -->
-<chapter xml:id="manual.ext.containers" xreflabel="Containers"><info><title>Containers</title></info>
+<!-- Chapter 08 : HP/SGI -->
+<chapter xml:id="manual.ext.containers" xreflabel="Containers">
+ <info><title>HP/SGI Extensions</title></info>
<?dbhtml filename="ext_containers.html"?>
-
- <para>
- </para>
- <section xml:id="manual.ext.containers.pbds" xreflabel="Policy Based Data Structures"><info><title>Policy Based Data Structures</title></info>
-
- <para>
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html">More details here</link>.
- </para>
- </section>
- <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext"><info><title>HP/SGI</title></info>
-
- <para>
+ <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext">
+ <info><title>Backwards Compatibility</title></info>
+
+ <para>A few extensions and nods to backwards-compatibility have
+ been made with containers. Those dealing with older SGI-style
+ allocators are dealt with elsewhere. The remaining ones all deal
+ with bits:
+ </para>
+ <para>The old pre-standard <code>bit_vector</code> class is
+ present for backwards compatibility. It is simply a typedef for
+ the <code>vector&lt;bool&gt;</code> specialization.
</para>
-<para>A few extensions and nods to backwards-compatibility have been made with
- containers. Those dealing with older SGI-style allocators are dealt with
- elsewhere. The remaining ones all deal with bits:
-</para>
-<para>The old pre-standard <code>bit_vector</code> class is present for
- backwards compatibility. It is simply a typedef for the
- <code>vector&lt;bool&gt;</code> specialization.
-</para>
<para>The <code>bitset</code> class has a number of extensions, described in the
rest of this item. First, we'll mention that this implementation of
<code>bitset&lt;N&gt;</code> is specialized for cases where N number of
@@ -163,7 +160,7 @@ extensions, be aware of two things:
<para>There are
versions of single-bit test, set, reset, and flip member functions which
do no range-checking. If we call them member functions of an instantiation
- of "bitset&lt;N&gt;," then their names and signatures are:
+ of <code>bitset&lt;N&gt;</code>, then their names and signatures are:
</para>
<programlisting>
bitset&lt;N&gt;&amp; _Unchecked_set (size_t pos);
@@ -176,14 +173,10 @@ extensions, be aware of two things:
no present plans to do so (and there doesn't seem to be any immediate
reason to).
</para>
-<para>The semantics of member function <code>operator[]</code> are not specified
- in the C++ standard. A long-standing defect report calls for sensible
- obvious semantics, which are already implemented here: <code>op[]</code>
- on a const bitset returns a bool, and for a non-const bitset returns a
- <code>reference</code> (a nested type). However, this implementation does
- no range-checking on the index argument, which is in keeping with other
- containers' <code>op[]</code> requirements. The defect report's proposed
- resolution calls for range-checking to be done. We'll just wait and see...
+<para>The member function <code>operator[]</code> on a const bitset returns
+ a bool, and for a non-const bitset returns a <code>reference</code> (a
+ nested type). No range-checking is done on the index argument, in keeping
+ with other containers' <code>operator[]</code> requirements.
</para>
<para>Finally, two additional searching functions have been added. They return
the index of the first "on" bit, and the index of the first
@@ -197,14 +190,14 @@ extensions, be aware of two things:
</section>
- <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated HP/SGI</title></info>
-
+ <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated</title></info>
+
<para>
The SGI hashing classes <classname>hash_set</classname> and
<classname>hash_set</classname> have been deprecated by the
unordered_set, unordered_multiset, unordered_map,
- unordered_multimap containers in TR1 and the upcoming C++0x, and
+ unordered_multimap containers in TR1 and C++11, and
may be removed in future releases.
</para>
@@ -217,16 +210,20 @@ extensions, be aware of two things:
&lt;rb_tree&gt;
</programlisting>
<para>are all here;
- <code>&lt;hash_map&gt;</code> and <code>&lt;hash_set&gt;</code>
+ <filename class="headerfile">&lt;backwards/hash_map&gt;</filename> and
+ <filename class="headerfile">&lt;backwards/hash_set&gt;</filename>
are deprecated but available as backwards-compatible extensions,
- as discussed further below. <code>&lt;rope&gt;</code> is the
- SGI specialization for large strings ("rope,"
- "large strings," get it? Love that geeky humor.)
- <code>&lt;slist&gt;</code> is a singly-linked list, for when the
- doubly-linked <code>list&lt;&gt;</code> is too much space
- overhead, and <code>&lt;rb_tree&gt;</code> exposes the red-black
- tree classes used in the implementation of the standard maps and
- sets.
+ as discussed further below.
+ <filename class="headerfile">&lt;ext/rope&gt;</filename> is the SGI
+ specialization for large strings ("rope," "large strings," get it? Love
+ that geeky humor.)
+ <filename class="headerfile">&lt;ext/slist&gt;</filename> (superseded in
+ C++11 by <filename class="headerfile">&lt;forward_list&gt;</filename>)
+ is a singly-linked list, for when the doubly-linked <code>list&lt;&gt;</code>
+ is too much space overhead, and
+ <filename class="headerfile">&lt;ext/rb_tree&gt;</filename> exposes the
+ red-black tree classes used in the implementation of the standard maps
+ and sets.
</para>
<para>Each of the associative containers map, multimap, set, and multiset
have a counterpart which uses a
@@ -259,44 +256,52 @@ extensions, be aware of two things:
</para>
</blockquote>
+ <para>
+ The deprecated hash tables are superseded by the standard unordered
+ associative containers defined in the ISO C++ 2011 standard in the
+ headers <filename class="headerfile">&lt;unordered_map&gt;</filename>
+ and <filename class="headerfile">&lt;unordered_set&gt;</filename>.
+ </para>
+
</section>
</chapter>
-<!-- Chapter 07 : Utilities -->
+<!-- Chapter 09 : Utilities -->
<chapter xml:id="manual.ext.util" xreflabel="Utilities"><info><title>Utilities</title></info>
<?dbhtml filename="ext_utilities.html"?>
-
+
<para>
- The &lt;functional&gt; header contains many additional functors
+ The <filename class="headerfile">&lt;functional&gt;</filename> header
+ contains many additional functors
and helper functions, extending section 20.3. They are
implemented in the file stl_function.h:
</para>
<itemizedlist>
<listitem>
- <para><code>identity_element</code> for addition and multiplication. *
+ <para><code>identity_element</code> for addition and multiplication.
</para>
</listitem>
<listitem>
<para>The functor <code>identity</code>, whose <code>operator()</code>
- returns the argument unchanged. *
+ returns the argument unchanged.
</para>
</listitem>
<listitem>
<para>Composition functors <code>unary_function</code> and
<code>binary_function</code>, and their helpers <code>compose1</code>
- and <code>compose2</code>. *
+ and <code>compose2</code>.
</para>
</listitem>
<listitem>
- <para><code>select1st</code> and <code>select2nd</code>, to strip pairs. *
+ <para><code>select1st</code> and <code>select2nd</code>, to strip pairs.
</para>
</listitem>
- <listitem><para><code>project1st</code> and <code>project2nd</code>. * </para></listitem>
+ <listitem><para><code>project1st</code> and <code>project2nd</code>. </para></listitem>
<listitem><para>A set of functors/functions which always return the same result. They
are <code>constant_void_fun</code>, <code>constant_binary_fun</code>,
<code>constant_unary_fun</code>, <code>constant0</code>,
- <code>constant1</code>, and <code>constant2</code>. * </para></listitem>
- <listitem><para>The class <code>subtractive_rng</code>. * </para></listitem>
+ <code>constant1</code>, and <code>constant2</code>. </para></listitem>
+ <listitem><para>The class <code>subtractive_rng</code>. </para></listitem>
<listitem><para>mem_fun adaptor helpers <code>mem_fun1</code> and
<code>mem_fun1_ref</code> are provided for backwards compatibility. </para></listitem>
</itemizedlist>
@@ -323,19 +328,19 @@ you can also use
get_temporary_buffer(5, (int*)0);
</programlisting>
<para>
- A class <code>temporary_buffer</code> is given in stl_tempbuf.h. *
+ A class <code>temporary_buffer</code> is given in stl_tempbuf.h.
</para>
<para>
The specialized algorithms of section 20.4.4 are extended with
- <code>uninitialized_copy_n</code>. *
+ <code>uninitialized_copy_n</code>.
</para>
</chapter>
-<!-- Chapter 08 : Algorithms -->
+<!-- Chapter 10 : Algorithms -->
<chapter xml:id="manual.ext.algorithms" xreflabel="Algorithms"><info><title>Algorithms</title></info>
<?dbhtml filename="ext_algorithms.html"?>
-
+
<para>25.1.6 (count, count_if) is extended with two more versions of count
and count_if. The standard versions return their results. The
additional signatures return void, but take a final parameter by
@@ -370,35 +375,40 @@ get_temporary_buffer(5, (int*)0);
</chapter>
-<!-- Chapter 09 : Numerics -->
+<!-- Chapter 11 : Numerics -->
<chapter xml:id="manual.ext.numerics" xreflabel="Numerics"><info><title>Numerics</title></info>
<?dbhtml filename="ext_numerics.html"?>
-
-<para>26.4, the generalized numeric operations such as accumulate, are extended
- with the following functions:
+
+<para>26.4, the generalized numeric operations such as <code>accumulate</code>,
+ are extended with the following functions:
</para>
<programlisting>
power (x, n);
- power (x, n, moniod_operation);</programlisting>
-<para>Returns, in FORTRAN syntax, "x ** n" where n&gt;=0. In the
- case of n == 0, returns the identity element for the
+ power (x, n, monoid_operation);</programlisting>
+<para>Returns, in FORTRAN syntax, "<code>x ** n</code>" where
+ <code>n &gt;= 0</code>. In the
+ case of <code>n == 0</code>, returns the identity element for the
monoid operation. The two-argument signature uses multiplication (for
a true "power" implementation), but addition is supported as well.
The operation functor must be associative.
</para>
<para>The <code>iota</code> function wins the award for Extension With the
- Coolest Name. It "assigns sequentially increasing values to a range.
- That is, it assigns value to *first, value + 1 to *(first + 1) and so
- on." Quoted from SGI documentation.
+ Coolest Name (the name comes from Ken Iverson's APL language.) As
+ described in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/iota.html">SGI
+ documentation</link>, it "assigns sequentially increasing values to a range.
+ That is, it assigns <code>value</code> to <code>*first</code>,
+ <code>value + 1</code> to<code> *(first + 1)</code> and so on."
</para>
<programlisting>
void iota(_ForwardIter first, _ForwardIter last, _Tp value);</programlisting>
+<para>The <code>iota</code> function is included in the ISO C++ 2011 standard.
+</para>
</chapter>
-<!-- Chapter 10 : Iterators -->
+<!-- Chapter 12 : Iterators -->
<chapter xml:id="manual.ext.iterators" xreflabel="Iterators"><info><title>Iterators</title></info>
<?dbhtml filename="ext_iterators.html"?>
-
+
<para>24.3.2 describes <code>struct iterator</code>, which didn't exist in the
original HP STL implementation (the language wasn't rich enough at the
time). For backwards compatibility, base classes are provided which
@@ -419,10 +429,10 @@ get_temporary_buffer(5, (int*)0);
</chapter>
-<!-- Chapter 11 : IO -->
+<!-- Chapter 13 : IO -->
<chapter xml:id="manual.ext.io" xreflabel="IO"><info><title>Input and Output</title></info>
<?dbhtml filename="ext_io.html"?>
-
+
<para>
Extensions allowing <code>filebuf</code>s to be constructed from
@@ -430,7 +440,7 @@ get_temporary_buffer(5, (int*)0);
</para>
<section xml:id="manual.ext.io.filebuf_derived" xreflabel="Derived filebufs"><info><title>Derived filebufs</title></info>
-
+
<para>The v2 library included non-standard extensions to construct
<code>std::filebuf</code>s from C stdio types such as
@@ -478,21 +488,14 @@ get_temporary_buffer(5, (int*)0);
descriptor, and provides the <code>fd()</code> function.
</para></listitem>
</itemizedlist>
- <para>If you want to access a <code>filebuf</code>'s file descriptor to
- implement file locking (e.g. using the <code>fcntl()</code> system
- call) then you might be interested in Henry Suter's RWLock class.
- <!-- url="http://suter.home.cern.ch/suter/RWLock.html" -->
- </para>
- <para>
- </para>
</section>
</chapter>
-<!-- Chapter 12 : Demangling -->
+<!-- Chapter 14 : Demangling -->
<chapter xml:id="manual.ext.demangle" xreflabel="Demangling"><info><title>Demangling</title></info>
<?dbhtml filename="ext_demangling.html"?>
-
+
<para>
Transforming C++ ABI identifiers (like RTTI symbols) into the
original C++ source identifiers is called
@@ -574,7 +577,7 @@ int main()
</para>
</chapter>
-<!-- Chapter 13 : Concurrency -->
+<!-- Chapter 15 : Concurrency -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="concurrency_extensions.xml">
</xi:include>
diff --git a/libstdc++-v3/doc/xml/manual/internals.xml b/libstdc++-v3/doc/xml/manual/internals.xml
index 72af0b835c..c01735eb4f 100644
--- a/libstdc++-v3/doc/xml/manual/internals.xml
+++ b/libstdc++-v3/doc/xml/manual/internals.xml
@@ -254,11 +254,8 @@ not have to include <code>&lt;ctype.h&gt;</code> in this header; it will always
included before <code>ctype_base.h</code> is included.
</para>
- <para>The next file to write is <code>ctype_noninline.h</code>, which also does
-not require include guards. This file defines a few member functions
-that will be included in <code>include/bits/locale_facets.h</code>. The first
-function that must be written is the <code>ctype&lt;char&gt;::ctype</code>
-constructor. Here is the IRIX example:
+ <para>The next file to write is <code>ctype_configure_char.cc</code>.
+The first function that must be written is the <code>ctype&lt;char&gt;::ctype</code> constructor. Here is the IRIX example:
</para>
<programlisting>
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index 36e07b4370..7621de9c2b 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -29,8 +29,8 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxx1998.xml">
</xi:include>
- <!-- Section 01.2 : Status C++ 200x -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxx200x.xml">
+ <!-- Section 01.2 : Status C++ 2011 -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxx2011.xml">
</xi:include>
<!-- Section 01.3 : Status C++ TR1 -->
@@ -577,7 +577,7 @@ requirements of the license of GCC.
<emphasis>std::complex over-encapsulated</emphasis>
</term>
<listitem><para>Add the <code>real(T)</code> and <code>imag(T)</code>
- members; in C++0x mode, also adjust the existing
+ members; in C++11 mode, also adjust the existing
<code>real()</code> and <code>imag()</code> members and
free functions.
</para></listitem></varlistentry>
@@ -709,7 +709,7 @@ requirements of the license of GCC.
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#550">550</link>:
<emphasis>What should the return type of pow(float,int) be?</emphasis>
</term>
- <listitem><para>In C++0x mode, remove the pow(float,int), etc., signatures.
+ <listitem><para>In C++11 mode, remove the pow(float,int), etc., signatures.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#586">586</link>:
@@ -739,7 +739,7 @@ requirements of the license of GCC.
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#691">691</link>:
<emphasis>const_local_iterator cbegin, cend missing from TR1</emphasis>
</term>
- <listitem><para>In C++0x mode add cbegin(size_type) and cend(size_type)
+ <listitem><para>In C++11 mode add cbegin(size_type) and cend(size_type)
to the unordered containers.
</para></listitem></varlistentry>
@@ -764,7 +764,7 @@ requirements of the license of GCC.
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#761">761</link>:
<emphasis>unordered_map needs an at() member function</emphasis>
</term>
- <listitem><para>In C++0x mode, add at() and at() const.
+ <listitem><para>In C++11 mode, add at() and at() const.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#775">775</link>:
@@ -776,13 +776,13 @@ requirements of the license of GCC.
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#776">776</link>:
<emphasis>Undescribed assign function of std::array</emphasis>
</term>
- <listitem><para>In C++0x mode, remove assign, add fill.
+ <listitem><para>In C++11 mode, remove assign, add fill.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#781">781</link>:
<emphasis>std::complex should add missing C99 functions</emphasis>
</term>
- <listitem><para>In C++0x mode, add std::proj.
+ <listitem><para>In C++11 mode, add std::proj.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#809">809</link>:
@@ -794,7 +794,7 @@ requirements of the license of GCC.
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#844">844</link>:
<emphasis>complex pow return type is ambiguous</emphasis>
</term>
- <listitem><para>In C++0x mode, remove the pow(complex&lt;T&gt;, int) signature.
+ <listitem><para>In C++11 mode, remove the pow(complex&lt;T&gt;, int) signature.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#853">853</link>:
diff --git a/libstdc++-v3/doc/xml/manual/iterators.xml b/libstdc++-v3/doc/xml/manual/iterators.xml
index bcfa30cd5f..11dc3ae885 100644
--- a/libstdc++-v3/doc/xml/manual/iterators.xml
+++ b/libstdc++-v3/doc/xml/manual/iterators.xml
@@ -41,7 +41,7 @@ classes.
that <emphasis>pointers</emphasis> are
<emphasis>iterators</emphasis>, and that pointers can be used
whenever an iterator would be. All those functions in the
- Algorithms sect1 of the Standard will work just as well on plain
+ Algorithms section of the Standard will work just as well on plain
arrays and their pointers.
</para>
<para>
diff --git a/libstdc++-v3/doc/xml/manual/locale.xml b/libstdc++-v3/doc/xml/manual/locale.xml
index 4dabea41f4..9e3197647d 100644
--- a/libstdc++-v3/doc/xml/manual/locale.xml
+++ b/libstdc++-v3/doc/xml/manual/locale.xml
@@ -562,11 +562,12 @@ global locale" (emphasis Paolo), that is:
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin/" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.opengroup.org/austin/">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
+ </link>
+ </title>
<copyright>
<year>2008</year>
<holder>
diff --git a/libstdc++-v3/doc/xml/manual/messages.xml b/libstdc++-v3/doc/xml/manual/messages.xml
index 753b965e65..ff96ee21b6 100644
--- a/libstdc++-v3/doc/xml/manual/messages.xml
+++ b/libstdc++-v3/doc/xml/manual/messages.xml
@@ -119,8 +119,9 @@ A couple of notes on the standard.
<para>
First, why is <code>messages_base::catalog</code> specified as a typedef
to int? This makes sense for implementations that use
-<code>catopen</code>, but not for others. Fortunately, it's not heavily
-used and so only a minor irritant.
+<code>catopen</code> and define <code>nl_catd</code> as int, but not for
+others. Fortunately, it's not heavily used and so only a minor irritant.
+This has been reported as a possible defect in the standard (LWG 2028).
</para>
<para>
@@ -489,12 +490,13 @@ void test01()
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin/" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.opengroup.org/austin">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
- <copyright>
+ </link>
+ </title>
+ <copyright>
<year>2008</year>
<holder>
The Open Group/The Institute of Electrical and Electronics
@@ -541,24 +543,28 @@ void test01()
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://java.sun.com/reference/api/index.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.oracle.com/technetwork/java/api/index.html">
API Specifications, Java Platform
- </citetitle>
+ </link>
+ </title>
<pagenums>java.util.Properties, java.text.MessageFormat,
java.util.Locale, java.util.ResourceBundle
</pagenums>
</biblioentry>
+
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/gettext/" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.gnu.org/software/gettext">
GNU gettext tools, version 0.10.38, Native Language Support
Library and Tools.
- </citetitle>
+ </link>
+ </title>
+
</biblioentry>
</bibliography>
diff --git a/libstdc++-v3/doc/xml/manual/mt_allocator.xml b/libstdc++-v3/doc/xml/manual/mt_allocator.xml
index b31b593bc2..8d4d127e6c 100644
--- a/libstdc++-v3/doc/xml/manual/mt_allocator.xml
+++ b/libstdc++-v3/doc/xml/manual/mt_allocator.xml
@@ -1,8 +1,8 @@
-<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="manual.ext.allocator.mt" xreflabel="mt allocator">
<?dbhtml filename="mt_allocator.html"?>
-<info><title>mt_allocator</title>
+<info><title>The mt_allocator</title>
<keywordset>
<keyword>
ISO C++
@@ -552,4 +552,4 @@ and forth" between freelists.
</section>
-</section>
+</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/parallel_mode.xml b/libstdc++-v3/doc/xml/manual/parallel_mode.xml
index ec0faf9c71..af71923d82 100644
--- a/libstdc++-v3/doc/xml/manual/parallel_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/parallel_mode.xml
@@ -109,8 +109,8 @@ It might work with other compilers, though.</para>
and runtime support, in particular support for OpenMP. Adding this support is
not difficult: just compile your application with the compiler
flag <literal>-fopenmp</literal>. This will link
- in <code>libgomp</code>, the GNU
- OpenMP <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libgomp">implementation</link>,
+ in <code>libgomp</code>, the
+ OpenMP <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libgomp/">GNU implementation</link>,
whose presence is mandatory.
</para>
diff --git a/libstdc++-v3/doc/xml/manual/policy_data_structures.xml b/libstdc++-v3/doc/xml/manual/policy_data_structures.xml
new file mode 100644
index 0000000000..c57fbb0e9d
--- /dev/null
+++ b/libstdc++-v3/doc/xml/manual/policy_data_structures.xml
@@ -0,0 +1,5129 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.containers.pbds" xreflabel="pbds">
+ <info>
+ <title>Policy-Based Data Structures</title>
+ <keywordset>
+ <keyword>
+ ISO C++
+ </keyword>
+ <keyword>
+ policy
+ </keyword>
+ <keyword>
+ container
+ </keyword>
+ <keyword>
+ data
+ </keyword>
+ <keyword>
+ structure
+ </keyword>
+ <keyword>
+ associated
+ </keyword>
+ <keyword>
+ tree
+ </keyword>
+ <keyword>
+ trie
+ </keyword>
+ <keyword>
+ hash
+ </keyword>
+ <keyword>
+ metaprogramming
+ </keyword>
+ </keywordset>
+ </info>
+ <?dbhtml filename="policy_data_structures.html"?>
+
+ <!-- 2006-04-01 Ami Tavory -->
+ <!-- 2011-05-25 Benjamin Kosnik -->
+
+ <!-- S01: intro -->
+ <section xml:id="pbds.intro">
+ <info><title>Intro</title></info>
+
+ <para>
+ This is a library of policy-based elementary data structures:
+ associative containers and priority queues. It is designed for
+ high-performance, flexibility, semantic safety, and conformance to
+ the corresponding containers in <literal>std</literal> and
+ <literal>std::tr1</literal> (except for some points where it differs
+ by design).
+ </para>
+ <para>
+ </para>
+
+ <section xml:id="pbds.intro.issues">
+ <info><title>Performance Issues</title></info>
+ <para>
+ </para>
+
+ <para>
+ An attempt is made to categorize the wide variety of possible
+ container designs in terms of performance-impacting factors. These
+ performance factors are translated into design policies and
+ incorporated into container design.
+ </para>
+
+ <para>
+ There is tension between unravelling factors into a coherent set of
+ policies. Every attempt is made to make a minimal set of
+ factors. However, in many cases multiple factors make for long
+ template names. Every attempt is made to alias and use typedefs in
+ the source files, but the generated names for external symbols can
+ be large for binary files or debuggers.
+ </para>
+
+ <para>
+ In many cases, the longer names allow capabilities and behaviours
+ controlled by macros to also be unamibiguously emitted as distinct
+ generated names.
+ </para>
+
+ <para>
+ Specific issues found while unraveling performance factors in the
+ design of associative containers and priority queues follow.
+ </para>
+
+ <section xml:id="pbds.intro.issues.associative">
+ <info><title>Associative</title></info>
+
+ <para>
+ Associative containers depend on their composite policies to a very
+ large extent. Implicitly hard-wiring policies can hamper their
+ performance and limit their functionality. An efficient hash-based
+ container, for example, requires policies for testing key
+ equivalence, hashing keys, translating hash values into positions
+ within the hash table, and determining when and how to resize the
+ table internally. A tree-based container can efficiently support
+ order statistics, i.e. the ability to query what is the order of
+ each key within the sequence of keys in the container, but only if
+ the container is supplied with a policy to internally update
+ meta-data. There are many other such examples.
+ </para>
+
+ <para>
+ Ideally, all associative containers would share the same
+ interface. Unfortunately, underlying data structures and mapping
+ semantics differentiate between different containers. For example,
+ suppose one writes a generic function manipulating an associative
+ container.
+ </para>
+
+ <programlisting>
+ template&lt;typename Cntnr&gt;
+ void
+ some_op_sequence(Cntnr&amp; r_cnt)
+ {
+ ...
+ }
+ </programlisting>
+
+ <para>
+ Given this, then what can one assume about the instantiating
+ container? The answer varies according to its underlying data
+ structure. If the underlying data structure of
+ <literal>Cntnr</literal> is based on a tree or trie, then the order
+ of elements is well defined; otherwise, it is not, in general. If
+ the underlying data structure of <literal>Cntnr</literal> is based
+ on a collision-chaining hash table, then modifying
+ r_<literal>Cntnr</literal> will not invalidate its iterators' order;
+ if the underlying data structure is a probing hash table, then this
+ is not the case. If the underlying data structure is based on a tree
+ or trie, then a reference to the container can efficiently be split;
+ otherwise, it cannot, in general. If the underlying data structure
+ is a red-black tree, then splitting a reference to the container is
+ exception-free; if it is an ordered-vector tree, exceptions can be
+ thrown.
+ </para>
+
+ </section>
+
+ <section xml:id="pbds.intro.issues.priority_queue">
+ <info><title>Priority Que</title></info>
+
+ <para>
+ Priority queues are useful when one needs to efficiently access a
+ minimum (or maximum) value as the set of values changes.
+ </para>
+
+ <para>
+ Most useful data structures for priority queues have a relatively
+ simple structure, as they are geared toward relatively simple
+ requirements. Unfortunately, these structures do not support access
+ to an arbitrary value, which turns out to be necessary in many
+ algorithms. Say, decreasing an arbitrary value in a graph
+ algorithm. Therefore, some extra mechanism is necessary and must be
+ invented for accessing arbitrary values. There are at least two
+ alternatives: embedding an associative container in a priority
+ queue, or allowing cross-referencing through iterators. The first
+ solution adds significant overhead; the second solution requires a
+ precise definition of iterator invalidation. Which is the next
+ point...
+ </para>
+
+ <para>
+ Priority queues, like hash-based containers, store values in an
+ order that is meaningless and undefined externally. For example, a
+ <code>push</code> operation can internally reorganize the
+ values. Because of this characteristic, describing a priority
+ queues' iterator is difficult: on one hand, the values to which
+ iterators point can remain valid, but on the other, the logical
+ order of iterators can change unpredictably.
+ </para>
+
+ <para>
+ Roughly speaking, any element that is both inserted to a priority
+ queue (e.g. through <code>push</code>) and removed
+ from it (e.g., through <code>pop</code>), incurs a
+ logarithmic overhead (in the amortized sense). Different underlying
+ data structures place the actual cost differently: some are
+ optimized for amortized complexity, whereas others guarantee that
+ specific operations only have a constant cost. One underlying data
+ structure might be chosen if modifying a value is frequent
+ (Dijkstra's shortest-path algorithm), whereas a different one might
+ be chosen otherwise. Unfortunately, an array-based binary heap - an
+ underlying data structure that optimizes (in the amortized sense)
+ <code>push</code> and <code>pop</code> operations, differs from the
+ others in terms of its invalidation guarantees. Other design
+ decisions also impact the cost and placement of the overhead, at the
+ expense of more difference in the the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+ </para>
+ </section>
+ </section>
+
+ <section xml:id="pbds.intro.motivation">
+ <info><title>Goals</title></info>
+
+ <para>
+ Many fine associative-container libraries were already written,
+ most notably, the C++ standard's associative containers. Why
+ then write another library? This section shows some possible
+ advantages of this library, when considering the challenges in
+ the introduction. Many of these points stem from the fact that
+ the ISO C++ process introduced associative-containers in a
+ two-step process (first standardizing tree-based containers,
+ only then adding hash-based containers, which are fundamentally
+ different), did not standardize priority queues as containers,
+ and (in our opinion) overloads the iterator concept.
+ </para>
+
+ <section xml:id="pbds.intro.motivation.associative">
+ <info><title>Associative</title></info>
+ <para>
+ </para>
+
+ <section xml:id="motivation.associative.policy">
+ <info><title>Policy Choices</title></info>
+ <para>
+ Associative containers require a relatively large number of
+ policies to function efficiently in various settings. In some
+ cases this is needed for making their common operations more
+ efficient, and in other cases this allows them to support a
+ larger set of operations
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Hash-based containers, for example, support look-up and
+ insertion methods (<function>find</function> and
+ <function>insert</function>). In order to locate elements
+ quickly, they are supplied a hash functor, which instruct
+ how to transform a key object into some size type; a hash
+ functor might transform <constant>"hello"</constant>
+ into <constant>1123002298</constant>. A hash table, though,
+ requires transforming each key object into some size-type
+ type in some specific domain; a hash table with a 128-long
+ table might transform <constant>"hello"</constant> into
+ position <constant>63</constant>. The policy by which the
+ hash value is transformed into a position within the table
+ can dramatically affect performance. Hash-based containers
+ also do not resize naturally (as opposed to tree-based
+ containers, for example). The appropriate resize policy is
+ unfortunately intertwined with the policy that transforms
+ hash value into a position within the table.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Tree-based containers, for example, also support look-up and
+ insertion methods, and are primarily useful when maintaining
+ order between elements is important. In some cases, though,
+ one can utilize their balancing algorithms for completely
+ different purposes.
+ </para>
+
+ <para>
+ Figure A shows a tree whose each node contains two entries:
+ a floating-point key, and some size-type
+ <emphasis>metadata</emphasis> (in bold beneath it) that is
+ the number of nodes in the sub-tree. (The root has key 0.99,
+ and has 5 nodes (including itself) in its sub-tree.) A
+ container based on this data structure can obviously answer
+ efficiently whether 0.3 is in the container object, but it
+ can also answer what is the order of 0.3 among all those in
+ the container object: see <xref linkend="biblio.clrs2001"/>.
+
+ </para>
+
+ <para>
+ As another example, Figure B shows a tree whose each node
+ contains two entries: a half-open geometric line interval,
+ and a number <emphasis>metadata</emphasis> (in bold beneath
+ it) that is the largest endpoint of all intervals in its
+ sub-tree. (The root describes the interval <constant>[20,
+ 36)</constant>, and the largest endpoint in its sub-tree is
+ 99.) A container based on this data structure can obviously
+ answer efficiently whether <constant>[3, 41)</constant> is
+ in the container object, but it can also answer efficiently
+ whether the container object has intervals that intersect
+ <constant>[3, 41)</constant>. These types of queries are
+ very useful in geometric algorithms and lease-management
+ algorithms.
+ </para>
+
+ <para>
+ It is important to note, however, that as the trees are
+ modified, their internal structure changes. To maintain
+ these invariants, one must supply some policy that is aware
+ of these changes. Without this, it would be better to use a
+ linked list (in itself very efficient for these purposes).
+ </para>
+
+ </listitem>
+ </orderedlist>
+
+ <figure>
+ <title>Node Invariants</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_node_invariants.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Node Invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="motivation.associative.underlying">
+ <info><title>Underlying Data Structures</title></info>
+ <para>
+ The standard C++ library contains associative containers based on
+ red-black trees and collision-chaining hash tables. These are
+ very useful, but they are not ideal for all types of
+ settings.
+ </para>
+
+ <para>
+ The figure below shows the different underlying data structures
+ currently supported in this library.
+ </para>
+
+ <figure>
+ <title>Underlying Associative Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_different_underlying_dss_1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Underlying Associative Data Structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ A shows a collision-chaining hash-table, B shows a probing
+ hash-table, C shows a red-black tree, D shows a splay tree, E shows
+ a tree based on an ordered vector(implicit in the order of the
+ elements), F shows a PATRICIA trie, and G shows a list-based
+ container with update policies.
+ </para>
+
+ <para>
+ Each of these data structures has some performance benefits, in
+ terms of speed, size or both. For now, note that vector-based trees
+ and probing hash tables manipulate memory more efficiently than
+ red-black trees and collision-chaining hash tables, and that
+ list-based associative containers are very useful for constructing
+ "multimaps".
+ </para>
+
+ <para>
+ Now consider a function manipulating a generic associative
+ container,
+ </para>
+ <programlisting>
+ template&lt;class Cntnr&gt;
+ int
+ some_op_sequence(Cntnr &amp;r_cnt)
+ {
+ ...
+ }
+ </programlisting>
+
+ <para>
+ Ideally, the underlying data structure
+ of <classname>Cntnr</classname> would not affect what can be
+ done with <varname>r_cnt</varname>. Unfortunately, this is not
+ the case.
+ </para>
+
+ <para>
+ For example, if <classname>Cntnr</classname>
+ is <classname>std::map</classname>, then the function can
+ use
+ </para>
+ <programlisting>
+ std::for_each(r_cnt.find(foo), r_cnt.find(bar), foobar)
+ </programlisting>
+ <para>
+ in order to apply <classname>foobar</classname> to all
+ elements between <classname>foo</classname> and
+ <classname>bar</classname>. If
+ <classname>Cntnr</classname> is a hash-based container,
+ then this call's results are undefined.
+ </para>
+
+ <para>
+ Also, if <classname>Cntnr</classname> is tree-based, the type
+ and object of the comparison functor can be
+ accessed. If <classname>Cntnr</classname> is hash based, these
+ queries are nonsensical.
+ </para>
+
+ <para>
+ There are various other differences based on the container's
+ underlying data structure. For one, they can be constructed by,
+ and queried for, different policies. Furthermore:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Containers based on C, D, E and F store elements in a
+ meaningful order; the others store elements in a meaningless
+ (and probably time-varying) order. By implication, only
+ containers based on C, D, E and F can
+ support <function>erase</function> operations taking an
+ iterator and returning an iterator to the following element
+ without performance loss.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Containers based on C, D, E, and F can be split and joined
+ efficiently, while the others cannot. Containers based on C
+ and D, furthermore, can guarantee that this is exception-free;
+ containers based on E cannot guarantee this.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Containers based on all but E can guarantee that
+ erasing an element is exception free; containers based on E
+ cannot guarantee this. Containers based on all but B and E
+ can guarantee that modifying an object of their type does
+ not invalidate iterators or references to their elements,
+ while containers based on B and E cannot. Containers based
+ on C, D, and E can furthermore make a stronger guarantee,
+ namely that modifying an object of their type does not
+ affect the order of iterators.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ A unified tag and traits system (as used for the C++ standard
+ library iterators, for example) can ease generic manipulation of
+ associative containers based on different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="motivation.associative.iterators">
+ <info><title>Iterators</title></info>
+ <para>
+ Iterators are centric to the design of the standard library
+ containers, because of the container/algorithm/iterator
+ decomposition that allows an algorithm to operate on a range
+ through iterators of some sequence. Iterators, then, are useful
+ because they allow going over a
+ specific <emphasis>sequence</emphasis>. The standard library
+ also uses iterators for accessing a
+ specific <emphasis>element</emphasis>: when an associative
+ container returns one through <function>find</function>. The
+ standard library consistently uses the same types of iterators
+ for both purposes: going over a range, and accessing a specific
+ found element. Before the introduction of hash-based containers
+ to the standard library, this made sense (with the exception of
+ priority queues, which are discussed later).
+ </para>
+
+ <para>
+ Using the standard associative containers together with
+ non-order-preserving associative containers (and also because of
+ priority-queues container), there is a possible need for
+ different types of iterators for self-organizing containers:
+ the iterator concept seems overloaded to mean two different
+ things (in some cases). <remark> XXX
+ "ds_gen.html#find_range">Design::Associative
+ Containers::Data-Structure Genericity::Point-Type and Range-Type
+ Methods</remark>.
+ </para>
+
+ <section xml:id="associative.iterators.using">
+ <info>
+ <title>Using Point Iterators for Range Operations</title>
+ </info>
+ <para>
+ Suppose <classname>cntnr</classname> is some associative
+ container, and say <varname>c</varname> is an object of
+ type <classname>cntnr</classname>. Then what will be the outcome
+ of
+ </para>
+
+ <programlisting>
+ std::for_each(c.find(1), c.find(5), foo);
+ </programlisting>
+
+ <para>
+ If <classname>cntnr</classname> is a tree-based container
+ object, then an in-order walk will
+ apply <classname>foo</classname> to the relevant elements,
+ as in the graphic below, label A. If <varname>c</varname> is
+ a hash-based container, then the order of elements between any
+ two elements is undefined (and probably time-varying); there is
+ no guarantee that the elements traversed will coincide with the
+ <emphasis>logical</emphasis> elements between 1 and 5, as in
+ label B.
+ </para>
+
+ <figure>
+ <title>Range Iteration in Different Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_point_iterators_range_ops_1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Node Invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ In our opinion, this problem is not caused just because
+ red-black trees are order preserving while
+ collision-chaining hash tables are (generally) not - it
+ is more fundamental. Most of the standard's containers
+ order sequences in a well-defined manner that is
+ determined by their <emphasis>interface</emphasis>:
+ calling <function>insert</function> on a tree-based
+ container modifies its sequence in a predictable way, as
+ does calling <function>push_back</function> on a list or
+ a vector. Conversely, collision-chaining hash tables,
+ probing hash tables, priority queues, and list-based
+ containers (which are very useful for "multimaps") are
+ self-organizing data structures; the effect of each
+ operation modifies their sequences in a manner that is
+ (practically) determined by their
+ <emphasis>implementation</emphasis>.
+ </para>
+
+ <para>
+ Consequently, applying an algorithm to a sequence obtained from most
+ containers may or may not make sense, but applying it to a
+ sub-sequence of a self-organizing container does not.
+ </para>
+ </section>
+
+ <section xml:id="associative.iterators.cost">
+ <info>
+ <title>Cost to Point Iterators to Enable Range Operations</title>
+ </info>
+ <para>
+ Suppose <varname>c</varname> is some collision-chaining
+ hash-based container object, and one calls
+ </para>
+ <programlisting>c.find(3)</programlisting>
+ <para>
+ Then what composes the returned iterator?
+ </para>
+
+ <para>
+ In the graphic below, label A shows the simplest (and
+ most efficient) implementation of a collision-chaining
+ hash table. The little box marked
+ <classname>point_iterator</classname> shows an object
+ that contains a pointer to the element's node. Note that
+ this "iterator" has no way to move to the next element (
+ it cannot support
+ <function>operator++</function>). Conversely, the little
+ box marked <classname>iterator</classname> stores both a
+ pointer to the element, as well as some other
+ information (the bucket number of the element). the
+ second iterator, then, is "heavier" than the first one-
+ it requires more time and space. If we were to use a
+ different container to cross-reference into this
+ hash-table using these iterators - it would take much
+ more space. As noted above, nothing much can be done by
+ incrementing these iterators, so why is this extra
+ information needed?
+ </para>
+
+ <para>
+ Alternatively, one might create a collision-chaining hash-table
+ where the lists might be linked, forming a monolithic total-element
+ list, as in the graphic below, label B. Here the iterators are as
+ light as can be, but the hash-table's operations are more
+ complicated.
+ </para>
+
+ <figure>
+ <title>Point Iteration in Hash Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_point_iterators_range_ops_2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Point Iteration in Hash Data Structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ It should be noted that containers based on collision-chaining
+ hash-tables are not the only ones with this type of behavior;
+ many other self-organizing data structures display it as well.
+ </para>
+ </section>
+
+ <section xml:id="associative.iterators.invalidation">
+ <info><title>Invalidation Guarantees</title></info>
+ <para>Consider the following snippet:</para>
+ <programlisting>
+ it = c.find(3);
+ c.erase(5);
+ </programlisting>
+
+ <para>
+ Following the call to <classname>erase</classname>, what is the
+ validity of <classname>it</classname>: can it be de-referenced?
+ can it be incremented?
+ </para>
+
+ <para>
+ The answer depends on the underlying data structure of the
+ container. The graphic below shows three cases: A1 and A2 show
+ a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
+ show a collision-chaining hash table.
+ </para>
+
+ <figure>
+ <title>Effect of erase in different underlying data structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_invalidation_guarantee_erase.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Effect of erase in different underlying data structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
+ be de-referenced and incremented. The sequence of iterators
+ changed, but in a way that is well-defined by the interface.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Erasing 5 from B1 yields B2. Clearly, an iterator to 3 is
+ not valid at all - it cannot be de-referenced or
+ incremented; the order of iterators changed in a way that is
+ (practically) determined by the implementation and not by
+ the interface.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Erasing 5 from C1 yields C2. Here the situation is more
+ complicated. On the one hand, there is no problem in
+ de-referencing <classname>it</classname>. On the other hand,
+ the order of iterators changed in a way that is
+ (practically) determined by the implementation and not by
+ the interface.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ So in the standard library containers, it is not always possible
+ to express whether <varname>it</varname> is valid or not. This
+ is true also for <function>insert</function>. Again, the
+ iterator concept seems overloaded.
+ </para>
+ </section>
+ </section> <!--iterators-->
+
+
+ <section xml:id="motivation.associative.functions">
+ <info><title>Functional</title></info>
+ <para>
+ </para>
+
+ <para>
+ The design of the functional overlay to the underlying data
+ structures differs slightly from some of the conventions used in
+ the C++ standard. A strict public interface of methods that
+ comprise only operations which depend on the class's internal
+ structure; other operations are best designed as external
+ functions. (See <xref linkend="biblio.meyers02both"/>).With this
+ rubric, the standard associative containers lack some useful
+ methods, and provide other methods which would be better
+ removed.
+ </para>
+
+ <section xml:id="motivation.associative.functions.erase">
+ <info><title><function>erase</function></title></info>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Order-preserving standard associative containers provide the
+ method
+ </para>
+ <programlisting>
+ iterator
+ erase(iterator it)
+ </programlisting>
+
+ <para>
+ which takes an iterator, erases the corresponding
+ element, and returns an iterator to the following
+ element. Also standardd hash-based associative
+ containers provide this method. This seemingly
+ increasesgenericity between associative containers,
+ since it is possible to use
+ </para>
+ <programlisting>
+ typename C::iterator it = c.begin();
+ typename C::iterator e_it = c.end();
+
+ while(it != e_it)
+ it = pred(*it)? c.erase(it) : ++it;
+ </programlisting>
+
+ <para>
+ in order to erase from a container object <varname>
+ c</varname> all element which match a
+ predicate <classname>pred</classname>. However, in a
+ different sense this actually decreases genericity: an
+ integral implication of this method is that tree-based
+ associative containers' memory use is linear in the total
+ number of elements they store, while hash-based
+ containers' memory use is unbounded in the total number of
+ elements they store. Assume a hash-based container is
+ allowed to decrease its size when an element is
+ erased. Then the elements might be rehashed, which means
+ that there is no "next" element - it is simply
+ undefined. Consequently, it is possible to infer from the
+ fact that the standard library's hash-based containers
+ provide this method that they cannot downsize when
+ elements are erased. As a consequence, different code is
+ needed to manipulate different containers, assuming that
+ memory should be conserved. Therefor, this library's
+ non-order preserving associative containers omit this
+ method.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ All associative containers include a conditional-erase method
+ </para>
+ <programlisting>
+ template&lt;
+ class Pred&gt;
+ size_type
+ erase_if
+ (Pred pred)
+ </programlisting>
+ <para>
+ which erases all elements matching a predicate. This is probably the
+ only way to ensure linear-time multiple-item erase which can
+ actually downsize a container.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The standard associative containers provide methods for
+ multiple-item erase of the form
+ </para>
+ <programlisting>
+ size_type
+ erase(It b, It e)
+ </programlisting>
+ <para>
+ erasing a range of elements given by a pair of
+ iterators. For tree-based or trie-based containers, this can
+ implemented more efficiently as a (small) sequence of split
+ and join operations. For other, unordered, containers, this
+ method isn't much better than an external loop. Moreover,
+ if <varname>c</varname> is a hash-based container,
+ then
+ </para>
+ <programlisting>
+ c.erase(c.find(2), c.find(5))
+ </programlisting>
+ <para>
+ is almost certain to do something
+ different than erasing all elements whose keys are between 2
+ and 5, and is likely to produce other undefined behavior.
+ </para>
+ </listitem>
+ </orderedlist>
+ </section> <!-- erase -->
+
+ <section xml:id="motivation.associative.functions.split">
+ <info>
+ <title>
+ <function>split</function> and <function>join</function>
+ </title>
+ </info>
+ <para>
+ It is well-known that tree-based and trie-based container
+ objects can be efficiently split or joined (See
+ <xref linkend="biblio.clrs2001"/>). Externally splitting or
+ joining trees is super-linear, and, furthermore, can throw
+ exceptions. Split and join methods, consequently, seem good
+ choices for tree-based container methods, especially, since as
+ noted just before, they are efficient replacements for erasing
+ sub-sequences.
+ </para>
+
+ </section> <!-- split -->
+
+ <section xml:id="motivation.associative.functions.insert">
+ <info>
+ <title>
+ <function>insert</function>
+ </title>
+ </info>
+ <para>
+ The standard associative containers provide methods of the form
+ </para>
+ <programlisting>
+ template&lt;class It&gt;
+ size_type
+ insert(It b, It e);
+ </programlisting>
+
+ <para>
+ for inserting a range of elements given by a pair of
+ iterators. At best, this can be implemented as an external loop,
+ or, even more efficiently, as a join operation (for the case of
+ tree-based or trie-based containers). Moreover, these methods seem
+ similar to constructors taking a range given by a pair of
+ iterators; the constructors, however, are transactional, whereas
+ the insert methods are not; this is possibly confusing.
+ </para>
+
+ </section> <!-- insert -->
+
+ <section xml:id="motivation.associative.functions.compare">
+ <info>
+ <title>
+ <function>operator==</function> and <function>operator&lt;=</function>
+ </title>
+ </info>
+
+ <para>
+ Associative containers are parametrized by policies allowing to
+ test key equivalence: a hash-based container can do this through
+ its equivalence functor, and a tree-based container can do this
+ through its comparison functor. In addition, some standard
+ associative containers have global function operators, like
+ <function>operator==</function> and <function>operator&lt;=</function>,
+ that allow comparing entire associative containers.
+ </para>
+
+ <para>
+ In our opinion, these functions are better left out. To begin
+ with, they do not significantly improve over an external
+ loop. More importantly, however, they are possibly misleading -
+ <function>operator==</function>, for example, usually checks for
+ equivalence, or interchangeability, but the associative
+ container cannot check for values' equivalence, only keys'
+ equivalence; also, are two containers considered equivalent if
+ they store the same values in different order? this is an
+ arbitrary decision.
+ </para>
+ </section> <!-- compare -->
+
+ </section> <!-- functional -->
+
+ </section> <!--associative-->
+
+ <section xml:id="pbds.intro.motivation.priority_queue">
+ <info><title>Priority Queues</title></info>
+
+ <section xml:id="motivation.priority_queue.policy">
+ <info><title>Policy Choices</title></info>
+
+ <para>
+ Priority queues are containers that allow efficiently inserting
+ values and accessing the maximal value (in the sense of the
+ container's comparison functor). Their interface
+ supports <function>push</function>
+ and <function>pop</function>. The standard
+ container <classname>std::priorityqueue</classname> indeed support
+ these methods, but little else. For algorithmic and
+ software-engineering purposes, other methods are needed:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Many graph algorithms (see
+ <xref linkend="biblio.clrs2001"/>) require increasing a
+ value in a priority queue (again, in the sense of the
+ container's comparison functor), or joining two
+ priority-queue objects.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The return type of <classname>priority_queue</classname>'s
+ <function>push</function> method is a point-type iterator, which can
+ be used for modifying or erasing arbitrary values. For
+ example:</para>
+ <programlisting>
+ priority_queue&lt;int&gt; p;
+ priority_queue&lt;int&gt;::point_iterator it = p.push(3);
+ p.modify(it, 4);
+ </programlisting>
+
+ <para>These types of cross-referencing operations are necessary
+ for making priority queues useful for different applications,
+ especially graph applications.</para>
+
+ </listitem>
+ <listitem>
+ <para>
+ It is sometimes necessary to erase an arbitrary value in a
+ priority queue. For example, consider
+ the <function>select</function> function for monitoring
+ file descriptors:
+ </para>
+
+ <programlisting>
+ int
+ select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds,
+ struct timeval *timeout);
+ </programlisting>
+ <para>
+ then, as the select documentation states:
+ </para>
+ <para>
+ <quote>
+ The nfds argument specifies the range of file
+ descriptors to be tested. The select() function tests file
+ descriptors in the range of 0 to nfds-1.</quote>
+ </para>
+
+ <para>
+ It stands to reason, therefore, that we might wish to
+ maintain a minimal value for <varname>nfds</varname>, and
+ priority queues immediately come to mind. Note, though, that
+ when a socket is closed, the minimal file description might
+ change; in the absence of an efficient means to erase an
+ arbitrary value from a priority queue, we might as well
+ avoid its use altogether.
+ </para>
+
+ <para>
+ The standard containers typically support iterators. It is
+ somewhat unusual
+ for <classname>std::priority_queue</classname> to omit them
+ (See <xref linkend="biblio.meyers01stl"/>). One might
+ ask why do priority queues need to support iterators, since
+ they are self-organizing containers with a different purpose
+ than abstracting sequences. There are several reasons:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Iterators (even in self-organizing containers) are
+ useful for many purposes: cross-referencing
+ containers, serialization, and debugging code that uses
+ these containers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The standard library's hash-based containers support
+ iterators, even though they too are self-organizing
+ containers with a different purpose than abstracting
+ sequences.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ In standard-library-like containers, it is natural to specify the
+ interface of operations for modifying a value or erasing
+ a value (discussed previously) in terms of a iterators.
+ It should be noted that the standard
+ containers also use iterators for accessing and
+ manipulating a specific value. In hash-based
+ containers, one checks the existence of a key by
+ comparing the iterator returned by <function>find</function> to the
+ iterator returned by <function>end</function>, and not by comparing a
+ pointer returned by <function>find</function> to <type>NULL</type>.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="motivation.priority_queue.underlying">
+ <info><title>Underlying Data Structures</title></info>
+
+ <para>
+ There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the figure below with labels A1 and A2, B, and C.
+ </para>
+
+ <figure>
+ <title>Underlying Priority Queue Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_different_underlying_dss_2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Underlying Priority Queue Data Structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ No single implementation can completely replace any of the
+ others. Some have better <function>push</function>
+ and <function>pop</function> amortized performance, some have
+ better bounded (worst case) response time than others, some
+ optimize a single method at the expense of others, etc. In
+ general the "best" implementation is dictated by the specific
+ problem.
+ </para>
+
+ <para>
+ As with associative containers, the more implementations
+ co-exist, the more necessary a traits mechanism is for handling
+ generic containers safely and efficiently. This is especially
+ important for priority queues, since the invalidation guarantees
+ of one of the most useful data structures - binary heaps - is
+ markedly different than those of most of the others.
+ </para>
+
+ </section>
+
+ <section xml:id="motivation.priority_queue.binary_heap">
+ <info><title>Binary Heaps</title></info>
+
+
+ <para>
+ Binary heaps are one of the most useful underlying
+ data structures for priority queues. They are very efficient in
+ terms of memory (since they don't require per-value structure
+ metadata), and have the best amortized <function>push</function> and
+ <function>pop</function> performance for primitive types like
+ <type>int</type>.
+ </para>
+
+ <para>
+ The standard library's <classname>priority_queue</classname>
+ implements this data structure as an adapter over a sequence,
+ typically
+ <classname>std::vector</classname>
+ or <classname>std::deque</classname>, which correspond to labels
+ A1 and A2 respectively in the graphic above.
+ </para>
+
+ <para>
+ This is indeed an elegant example of the adapter concept and
+ the algorithm/container/iterator decomposition. (See <xref linkend="biblio.nelson96stlpq"/>). There are
+ several reasons why a binary-heap priority queue
+ may be better implemented as a container instead of a
+ sequence adapter:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>std::priority_queue</classname> cannot erase values
+ from its adapted sequence (irrespective of the sequence
+ type). This means that the memory use of
+ an <classname>std::priority_queue</classname> object is always
+ proportional to the maximal number of values it ever contained,
+ and not to the number of values that it currently
+ contains. (See <filename>performance/priority_queue_text_pop_mem_usage.cc</filename>.)
+ This implementation of binary heaps acts very differently than
+ other underlying data structures (See also pairing heaps).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Some combinations of adapted sequences and value types
+ are very inefficient or just don't make sense. If one uses
+ <classname>std::priority_queue&lt;std::vector&lt;std::string&gt;
+ &gt; &gt;</classname>, for example, then not only will each
+ operation perform a logarithmic number of
+ <classname>std::string</classname> assignments, but, furthermore, any
+ operation (including <function>pop</function>) can render the container
+ useless due to exceptions. Conversely, if one uses
+ <classname>std::priority_queue&lt;std::deque&lt;int&gt; &gt;
+ &gt;</classname>, then each operation uses incurs a logarithmic
+ number of indirect accesses (through pointers) unnecessarily.
+ It might be better to let the container make a conservative
+ deduction whether to use the structure in the graphic above, labels A1 or A2.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ There does not seem to be a systematic way to determine
+ what exactly can be done with the priority queue.
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ If <classname>p</classname> is a priority queue adapting an
+ <classname>std::vector</classname>, then it is possible to iterate over
+ all values by using <function>&amp;p.top()</function> and
+ <function>&amp;p.top() + p.size()</function>, but this will not work
+ if <varname>p</varname> is adapting an <classname>std::deque</classname>; in any
+ case, one cannot use <classname>p.begin()</classname> and
+ <classname>p.end()</classname>. If a different sequence is adapted, it
+ is even more difficult to determine what can be
+ done.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ If <varname>p</varname> is a priority queue adapting an
+ <classname>std::deque</classname>, then the reference return by
+ </para>
+ <programlisting>
+ p.top()
+ </programlisting>
+ <para>
+ will remain valid until it is popped,
+ but if <varname>p</varname> adapts an <classname>std::vector</classname>, the
+ next <function>push</function> will invalidate it. If a different
+ sequence is adapted, it is even more difficult to
+ determine what can be done.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ Sequence-based binary heaps can still implement
+ linear-time <function>erase</function> and <function>modify</function> operations.
+ This means that if one needs to erase a small
+ (say logarithmic) number of values, then one might still
+ choose this underlying data structure. Using
+ <classname>std::priority_queue</classname>, however, this will generally
+ change the order of growth of the entire sequence of
+ operations.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ </section>
+ </section>
+ </section> <!-- goals/motivation -->
+ </section> <!-- intro -->
+
+ <!-- S02: Using -->
+ <section xml:id="containers.pbds.using">
+ <info><title>Using</title></info>
+ <?dbhtml filename="policy_data_structures_using.html"?>
+
+ <section xml:id="pbds.using.prereq">
+ <info><title>Prerequisites</title></info>
+
+ <para>The library contains only header files, and does not require any
+ other libraries except the standard C++ library . All classes are
+ defined in namespace <code>__gnu_pbds</code>. The library internally
+ uses macros beginning with <code>PB_DS</code>, but
+ <code>#undef</code>s anything it <code>#define</code>s (except for
+ header guards). Compiling the library in an environment where macros
+ beginning in <code>PB_DS</code> are defined, may yield unpredictable
+ results in compilation, execution, or both.</para>
+
+ <para>
+ Further dependencies are necessary to create the visual output
+ for the performance tests. To create these graphs, an
+ additional package is needed: <command>pychart</command>.
+ </para>
+ </section>
+
+ <section xml:id="pbds.using.organization">
+ <info><title>Organization</title></info>
+
+ <para>
+ The various data structures are organized as follows.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Branch-Based
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>basic_branch</classname>
+ is an abstract base class for branched-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>tree</classname>
+ is a concrete base class for tree-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>trie</classname>
+ is a concrete base class trie-based
+ associative-containers
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ Hash-Based
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>basic_hash_table</classname>
+ is an abstract base class for hash-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>cc_hash_table</classname>
+ is a concrete collision-chaining hash-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>gp_hash_table</classname>
+ is a concrete (general) probing hash-based
+ associative-containers
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ List-Based
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>list_update</classname>
+ list-based update-policy associative container
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+ Heap-Based
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>priority_queue</classname>
+ A priority queue.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The hierarchy is composed naturally so that commonality is
+ captured by base classes. Thus <function>operator[]</function>
+ is defined at the base of any hierarchy, since all derived
+ containers support it. Conversely <function>split</function> is
+ defined in <classname>basic_branch</classname>, since only
+ tree-like containers support it.
+ </para>
+
+ <para>
+ In addition, there are the following diagnostics classes,
+ used to report errors specific to this library's data
+ structures.
+ </para>
+
+ <figure>
+ <title>Exception Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_exception_hierarchy.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_exception_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Exception Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="pbds.using.tutorial">
+ <info><title>Tutorial</title></info>
+
+ <section xml:id="pbds.using.tutorial.basic">
+ <info><title>Basic Use</title></info>
+
+ <para>
+ For the most part, the policy-based containers containers in
+ namespace <literal>__gnu_pbds</literal> have the same interface as
+ the equivalent containers in the standard C++ library, except for
+ the names used for the container classes themselves. For example,
+ this shows basic operations on a collision-chaining hash-based
+ container:
+ </para>
+ <programlisting>
+ #include &lt;ext/pb_ds/assoc_container.h&gt;
+
+ int main()
+ {
+ __gnu_pbds::cc_hash_table&lt;int, char&gt; c;
+ c[2] = 'b';
+ assert(c.find(1) == c.end());
+ };
+ </programlisting>
+
+ <para>
+ The container is called
+ <classname>__gnu_pbds::cc_hash_table</classname> instead of
+ <classname>std::unordered_map</classname>, since <quote>unordered
+ map</quote> does not necessarily mean a hash-based map as implied by
+ the C++ library (C++11 or TR1). For example, list-based associative
+ containers, which are very useful for the construction of
+ "multimaps," are also unordered.
+ </para>
+
+ <para>This snippet shows a red-black tree based container:</para>
+
+ <programlisting>
+ #include &lt;ext/pb_ds/assoc_container.h&gt;
+
+ int main()
+ {
+ __gnu_pbds::tree&lt;int, char&gt; c;
+ c[2] = 'b';
+ assert(c.find(2) != c.end());
+ };
+ </programlisting>
+
+ <para>The container is called <classname>tree</classname> instead of
+ <classname>map</classname> since the underlying data structures are
+ being named with specificity.
+ </para>
+
+ <para>
+ The member function naming convention is to strive to be the same as
+ the equivalent member functions in other C++ standard library
+ containers. The familiar methods are unchanged:
+ <function>begin</function>, <function>end</function>,
+ <function>size</function>, <function>empty</function>, and
+ <function>clear</function>.
+ </para>
+
+ <para>
+ This isn't to say that things are exactly as one would expect, given
+ the container requirments and interfaces in the C++ standard.
+ </para>
+
+ <para>
+ The names of containers' policies and policy accessors are
+ different then the usual. For example, if <type>hash_type</type> is
+ some type of hash-based container, then</para>
+
+ <programlisting>
+ hash_type::hash_fn
+ </programlisting>
+
+ <para>
+ gives the type of its hash functor, and if <varname>obj</varname> is
+ some hash-based container object, then
+ </para>
+
+ <programlisting>
+ obj.get_hash_fn()
+ </programlisting>
+
+ <para>will return a reference to its hash-functor object.</para>
+
+
+ <para>
+ Similarly, if <type>tree_type</type> is some type of tree-based
+ container, then
+ </para>
+
+ <programlisting>
+ tree_type::cmp_fn
+ </programlisting>
+
+ <para>
+ gives the type of its comparison functor, and if
+ <varname>obj</varname> is some tree-based container object,
+ then
+ </para>
+
+ <programlisting>
+ obj.get_cmp_fn()
+ </programlisting>
+
+ <para>will return a reference to its comparison-functor object.</para>
+
+ <para>
+ It would be nice to give names consistent with those in the existing
+ C++ standard (inclusive of TR1). Unfortunately, these standard
+ containers don't consistently name types and methods. For example,
+ <classname>std::tr1::unordered_map</classname> uses
+ <type>hasher</type> for the hash functor, but
+ <classname>std::map</classname> uses <type>key_compare</type> for
+ the comparison functor. Also, we could not find an accessor for
+ <classname>std::tr1::unordered_map</classname>'s hash functor, but
+ <classname>std::map</classname> uses <classname>compare</classname>
+ for accessing the comparison functor.
+ </para>
+
+ <para>
+ Instead, <literal>__gnu_pbds</literal> attempts to be internally
+ consistent, and uses standard-derived terminology if possible.
+ </para>
+
+ <para>
+ Another source of difference is in scope:
+ <literal>__gnu_pbds</literal> contains more types of associative
+ containers than the standard C++ library, and more opportunities
+ to configure these new containers, since different types of
+ associative containers are useful in different settings.
+ </para>
+
+ <para>
+ Namespace <literal>__gnu_pbds</literal> contains different classes for
+ hash-based containers, tree-based containers, trie-based containers,
+ and list-based containers.
+ </para>
+
+ <para>
+ Since associative containers share parts of their interface, they
+ are organized as a class hierarchy.
+ </para>
+
+ <para>Each type or method is defined in the most-common ancestor
+ in which it makes sense.
+ </para>
+
+ <para>For example, all associative containers support iteration
+ expressed in the following form:
+ </para>
+
+ <programlisting>
+ const_iterator
+ begin() const;
+
+ iterator
+ begin();
+
+ const_iterator
+ end() const;
+
+ iterator
+ end();
+ </programlisting>
+
+ <para>
+ But not all containers contain or use hash functors. Yet, both
+ collision-chaining and (general) probing hash-based associative
+ containers have a hash functor, so
+ <classname>basic_hash_table</classname> contains the interface:
+ </para>
+
+ <programlisting>
+ const hash_fn&amp;
+ get_hash_fn() const;
+
+ hash_fn&amp;
+ get_hash_fn();
+ </programlisting>
+
+ <para>
+ so all hash-based associative containers inherit the same
+ hash-functor accessor methods.
+ </para>
+
+ </section> <!--basic use -->
+
+ <section xml:id="pbds.using.tutorial.configuring">
+ <info>
+ <title>
+ Configuring via Template Parameters
+ </title>
+ </info>
+
+ <para>
+ In general, each of this library's containers is
+ parametrized by more policies than those of the standard library. For
+ example, the standard hash-based container is parametrized as
+ follows:
+ </para>
+ <programlisting>
+ template&lt;typename Key, typename Mapped, typename Hash,
+ typename Pred, typename Allocator, bool Cache_Hashe_Code&gt;
+ class unordered_map;
+ </programlisting>
+
+ <para>
+ and so can be configured by key type, mapped type, a functor
+ that translates keys to unsigned integral types, an equivalence
+ predicate, an allocator, and an indicator whether to store hash
+ values with each entry. this library's collision-chaining
+ hash-based container is parametrized as
+ </para>
+ <programlisting>
+ template&lt;typename Key, typename Mapped, typename Hash_Fn,
+ typename Eq_Fn, typename Comb_Hash_Fn,
+ typename Resize_Policy, bool Store_Hash
+ typename Allocator&gt;
+ class cc_hash_table;
+ </programlisting>
+
+ <para>
+ and so can be configured by the first four types of
+ <classname>std::tr1::unordered_map</classname>, then a
+ policy for translating the key-hash result into a position
+ within the table, then a policy by which the table resizes,
+ an indicator whether to store hash values with each entry,
+ and an allocator (which is typically the last template
+ parameter in standard containers).
+ </para>
+
+ <para>
+ Nearly all policy parameters have default values, so this
+ need not be considered for casual use. It is important to
+ note, however, that hash-based containers' policies can
+ dramatically alter their performance in different settings,
+ and that tree-based containers' policies can make them
+ useful for other purposes than just look-up.
+ </para>
+
+
+ <para>As opposed to associative containers, priority queues have
+ relatively few configuration options. The priority queue is
+ parametrized as follows:</para>
+ <programlisting>
+ template&lt;typename Value_Type, typename Cmp_Fn,typename Tag,
+ typename Allocator&gt;
+ class priority_queue;
+ </programlisting>
+
+ <para>The <classname>Value_Type</classname>, <classname>Cmp_Fn</classname>, and
+ <classname>Allocator</classname> parameters are the container's value type,
+ comparison-functor type, and allocator type, respectively;
+ these are very similar to the standard's priority queue. The
+ <classname>Tag</classname> parameter is different: there are a number of
+ pre-defined tag types corresponding to binary heaps, binomial
+ heaps, etc., and <classname>Tag</classname> should be instantiated
+ by one of them.</para>
+
+ <para>Note that as opposed to the
+ <classname>std::priority_queue</classname>,
+ <classname>__gnu_pbds::priority_queue</classname> is not a
+ sequence-adapter; it is a regular container.</para>
+
+ </section>
+
+ <section xml:id="pbds.using.tutorial.traits">
+ <info>
+ <title>
+ Querying Container Attributes
+ </title>
+ </info>
+ <para></para>
+
+ <para>A containers underlying data structure
+ affect their performance; Unfortunately, they can also affect
+ their interface. When manipulating generically associative
+ containers, it is often useful to be able to statically
+ determine what they can support and what the cannot.
+ </para>
+
+ <para>Happily, the standard provides a good solution to a similar
+ problem - that of the different behavior of iterators. If
+ <classname>It</classname> is an iterator, then
+ </para>
+ <programlisting>
+ typename std::iterator_traits&lt;It&gt;::iterator_category
+ </programlisting>
+
+ <para>is one of a small number of pre-defined tag classes, and
+ </para>
+ <programlisting>
+ typename std::iterator_traits&lt;It&gt;::value_type
+ </programlisting>
+
+ <para>is the value type to which the iterator "points".</para>
+
+ <para>
+ Similarly, in this library, if <type>C</type> is a
+ container, then <classname>container_traits</classname> is a
+ trait class that stores information about the kind of
+ container that is implemented.
+ </para>
+ <programlisting>
+ typename container_traits&lt;C&gt;::container_category
+ </programlisting>
+ <para>
+ is one of a small number of predefined tag structures that
+ uniquely identifies the type of underlying data structure.
+ </para>
+
+ <para>In most cases, however, the exact underlying data
+ structure is not really important, but what is important is
+ one of its other attributes: whether it guarantees storing
+ elements by key order, for example. For this one can
+ use</para>
+ <programlisting>
+ typename container_traits&lt;C&gt;::order_preserving
+ </programlisting>
+ <para>
+ Also,
+ </para>
+ <programlisting>
+ typename container_traits&lt;C&gt;::invalidation_guarantee
+ </programlisting>
+
+ <para>is the container's invalidation guarantee. Invalidation
+ guarantees are especially important regarding priority queues,
+ since in this library's design, iterators are practically the
+ only way to manipulate them.</para>
+ </section>
+
+ <section xml:id="pbds.using.tutorial.point_range_iteration">
+ <info>
+ <title>
+ Point and Range Iteration
+ </title>
+ </info>
+ <para></para>
+
+ <para>This library differentiates between two types of methods
+ and iterators: point-type, and range-type. For example,
+ <function>find</function> and <function>insert</function> are point-type methods, since
+ they each deal with a specific element; their returned
+ iterators are point-type iterators. <function>begin</function> and
+ <function>end</function> are range-type methods, since they are not used to
+ find a specific element, but rather to go over all elements in
+ a container object; their returned iterators are range-type
+ iterators.
+ </para>
+
+ <para>Most containers store elements in an order that is
+ determined by their interface. Correspondingly, it is fine that
+ their point-type iterators are synonymous with their range-type
+ iterators. For example, in the following snippet
+ </para>
+ <programlisting>
+ std::for_each(c.find(1), c.find(5), foo);
+ </programlisting>
+ <para>
+ two point-type iterators (returned by <function>find</function>) are used
+ for a range-type purpose - going over all elements whose key is
+ between 1 and 5.
+ </para>
+
+ <para>
+ Conversely, the above snippet makes no sense for
+ self-organizing containers - ones that order (and reorder)
+ their elements by implementation. It would be nice to have a
+ uniform iterator system that would allow the above snippet to
+ compile only if it made sense.
+ </para>
+
+ <para>
+ This could trivially be done by specializing
+ <function>std::for_each</function> for the case of iterators returned by
+ <classname>std::tr1::unordered_map</classname>, but this would only solve the
+ problem for one algorithm and one container. Fundamentally, the
+ problem is that one can loop using a self-organizing
+ container's point-type iterators.
+ </para>
+
+ <para>
+ This library's containers define two families of
+ iterators: <type>point_const_iterator</type> and
+ <type>point_iterator</type> are the iterator types returned by
+ point-type methods; <type>const_iterator</type> and
+ <type>iterator</type> are the iterator types returned by range-type
+ methods.
+ </para>
+ <programlisting>
+ class &lt;- some container -&gt;
+ {
+ public:
+ ...
+
+ typedef &lt;- something -&gt; const_iterator;
+
+ typedef &lt;- something -&gt; iterator;
+
+ typedef &lt;- something -&gt; point_const_iterator;
+
+ typedef &lt;- something -&gt; point_iterator;
+
+ ...
+
+ public:
+ ...
+
+ const_iterator begin () const;
+
+ iterator begin();
+
+ point_const_iterator find(...) const;
+
+ point_iterator find(...);
+ };
+ </programlisting>
+
+ <para>For
+ containers whose interface defines sequence order , it
+ is very simple: point-type and range-type iterators are exactly
+ the same, which means that the above snippet will compile if it
+ is used for an order-preserving associative container.
+ </para>
+
+ <para>
+ For self-organizing containers, however, (hash-based
+ containers as a special example), the preceding snippet will
+ not compile, because their point-type iterators do not support
+ <function>operator++</function>.
+ </para>
+
+ <para>In any case, both for order-preserving and self-organizing
+ containers, the following snippet will compile:
+ </para>
+ <programlisting>
+ typename Cntnr::point_iterator it = c.find(2);
+ </programlisting>
+
+ <para>
+ because a range-type iterator can always be converted to a
+ point-type iterator.
+ </para>
+
+ <para>Distingushing between iterator types also
+ raises the point that a container's iterators might have
+ different invalidation rules concerning their de-referencing
+ abilities and movement abilities. This now corresponds exactly
+ to the question of whether point-type and range-type iterators
+ are valid. As explained above, <classname>container_traits</classname> allows
+ querying a container for its data structure attributes. The
+ iterator-invalidation guarantees are certainly a property of
+ the underlying data structure, and so
+ </para>
+ <programlisting>
+ container_traits&lt;C&gt;::invalidation_guarantee
+ </programlisting>
+
+ <para>
+ gives one of three pre-determined types that answer this
+ query.
+ </para>
+
+ </section>
+ </section> <!-- tutorial -->
+
+ <section xml:id="pbds.using.examples">
+ <info><title>Examples</title></info>
+ <para>
+ Additional code examples are provided in the source
+ distribution, as part of the regression and performance
+ testsuite.
+ </para>
+
+ <section xml:id="pbds.using.examples.basic">
+ <info><title>Intermediate Use</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Basic use of maps:
+ <filename>basic_map.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of sets:
+ <filename>basic_set.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Conditionally erasing values from an associative container object:
+ <filename>erase_if.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of multimaps:
+ <filename>basic_multimap.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of multisets:
+ <filename>basic_multiset.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of priority queues:
+ <filename>basic_priority_queue.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Splitting and joining priority queues:
+ <filename>priority_queue_split_join.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Conditionally erasing values from a priority queue:
+ <filename>priority_queue_erase_if.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.query">
+ <info><title>Querying with <classname>container_traits</classname> </title></info>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using <classname>container_traits</classname> to query
+ about underlying data structure behavior:
+ <filename>assoc_container_traits.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A non-compiling example showing wrong use of finding keys in
+ hash-based containers: <filename>hash_find_neg.cc</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Using <classname>container_traits</classname>
+ to query about underlying data structure behavior:
+ <filename>priority_queue_container_traits.cc</filename>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container">
+ <info><title>By Container Method</title></info>
+ <para></para>
+
+ <section xml:id="pbds.using.examples.container.hash">
+ <info><title>Hash-Based</title></info>
+
+ <section xml:id="pbds.using.examples.container.hash.resize">
+ <info><title>size Related</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Setting the initial size of a hash-based container
+ object:
+ <filename>hash_initial_size.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A non-compiling example showing how not to resize a
+ hash-based container object:
+ <filename>hash_resize_neg.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Resizing the size of a hash-based container object:
+ <filename>hash_resize.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Showing an illegal resize of a hash-based container
+ object:
+ <filename>hash_illegal_resize.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Changing the load factors of a hash-based container
+ object: <filename>hash_load_set_change.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section xml:id="pbds.using.examples.container.hash.hashor">
+ <info><title>Hashing Function Related</title></info>
+ <para></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using a modulo range-hashing function for the case of an
+ unknown skewed key distribution:
+ <filename>hash_mod.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Writing a range-hashing functor for the case of a known
+ skewed key distribution:
+ <filename>shift_mask.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Storing the hash value along with each key:
+ <filename>store_hash.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Writing a ranged-hash functor:
+ <filename>ranged_hash.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.branch">
+ <info><title>Branch-Based</title></info>
+
+
+ <section xml:id="pbds.using.examples.container.branch.split">
+ <info><title>split or join Related</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Joining two tree-based container objects:
+ <filename>tree_join.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Splitting a PATRICIA trie container object:
+ <filename>trie_split.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Order statistics while joining two tree-based container
+ objects:
+ <filename>tree_order_statistics_join.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.branch.invariants">
+ <info><title>Node Invariants</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using trees for order statistics:
+ <filename>tree_order_statistics.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Augmenting trees to support operations on line
+ intervals:
+ <filename>tree_intervals.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.branch.trie">
+ <info><title>trie</title></info>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using a PATRICIA trie for DNA strings:
+ <filename>trie_dna.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Using a PATRICIA
+ trie for finding all entries whose key matches a given prefix:
+ <filename>trie_prefix_search.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.priority_queue">
+ <info><title>Priority Queues</title></info>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Cross referencing an associative container and a priority
+ queue: <filename>priority_queue_xref.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Cross referencing a vector and a priority queue using a
+ very simple version of Dijkstra's shortest path
+ algorithm:
+ <filename>priority_queue_dijkstra.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+
+ </section>
+
+ </section>
+
+ </section> <!-- using -->
+
+ <!-- S03: Design -->
+
+
+<section xml:id="containers.pbds.design">
+ <info><title>Design</title></info>
+ <?dbhtml filename="policy_data_structures_design.html"?>
+ <para></para>
+
+ <section xml:id="pbds.design.concepts">
+ <info><title>Concepts</title></info>
+
+ <section xml:id="pbds.design.concepts.null_type">
+ <info><title>Null Policy Classes</title></info>
+
+ <para>
+ Associative containers are typically parametrized by various
+ policies. For example, a hash-based associative container is
+ parametrized by a hash-functor, transforming each key into an
+ non-negative numerical type. Each such value is then further mapped
+ into a position within the table. The mapping of a key into a
+ position within the table is therefore a two-step process.
+ </para>
+
+ <para>
+ In some cases, instantiations are redundant. For example, when the
+ keys are integers, it is possible to use a redundant hash policy,
+ which transforms each key into its value.
+ </para>
+
+ <para>
+ In some other cases, these policies are irrelevant. For example, a
+ hash-based associative container might transform keys into positions
+ within a table by a different method than the two-step method
+ described above. In such a case, the hash functor is simply
+ irrelevant.
+ </para>
+
+ <para>
+ When a policy is either redundant or irrelevant, it can be replaced
+ by <classname>null_type</classname>.
+ </para>
+
+ <para>
+ For example, a <emphasis>set</emphasis> is an associative
+ container with one of its template parameters (the one for the
+ mapped type) replaced with <classname>null_type</classname>. Other
+ places simplifications are made possible with this technique
+ include node updates in tree and trie data structures, and hash
+ and probe functions for hash data structures.
+ </para>
+ </section>
+
+ <section xml:id="pbds.design.concepts.associative_semantics">
+ <info><title>Map and Set Semantics</title></info>
+
+ <section xml:id="concepts.associative_semantics.set_vs_map">
+ <info>
+ <title>
+ Distinguishing Between Maps and Sets
+ </title>
+ </info>
+
+ <para>
+ Anyone familiar with the standard knows that there are four kinds
+ of associative containers: maps, sets, multimaps, and
+ multisets. The map datatype associates each key to
+ some data.
+ </para>
+
+ <para>
+ Sets are associative containers that simply store keys -
+ they do not map them to anything. In the standard, each map class
+ has a corresponding set class. E.g.,
+ <classname>std::map&lt;int, char&gt;</classname> maps each
+ <classname>int</classname> to a <classname>char</classname>, but
+ <classname>std::set&lt;int, char&gt;</classname> simply stores
+ <classname>int</classname>s. In this library, however, there are no
+ distinct classes for maps and sets. Instead, an associative
+ container's <classname>Mapped</classname> template parameter is a policy: if
+ it is instantiated by <classname>null_type</classname>, then it
+ is a "set"; otherwise, it is a "map". E.g.,
+ </para>
+ <programlisting>
+ cc_hash_table&lt;int, char&gt;
+ </programlisting>
+ <para>
+ is a "map" mapping each <type>int</type> value to a <type>
+ char</type>, but
+ </para>
+ <programlisting>
+ cc_hash_table&lt;int, null_type&gt;
+ </programlisting>
+ <para>
+ is a type that uniquely stores <type>int</type> values.
+ </para>
+ <para>Once the <classname>Mapped</classname> template parameter is instantiated
+ by <classname>null_type</classname>, then
+ the "set" acts very similarly to the standard's sets - it does not
+ map each key to a distinct <classname>null_type</classname> object. Also,
+ , the container's <type>value_type</type> is essentially
+ its <type>key_type</type> - just as with the standard's sets
+ .</para>
+
+ <para>
+ The standard's multimaps and multisets allow, respectively,
+ non-uniquely mapping keys and non-uniquely storing keys. As
+ discussed, the
+ reasons why this might be necessary are 1) that a key might be
+ decomposed into a primary key and a secondary key, 2) that a
+ key might appear more than once, or 3) any arbitrary
+ combination of 1)s and 2)s. Correspondingly,
+ one should use 1) "maps" mapping primary keys to secondary
+ keys, 2) "maps" mapping keys to size types, or 3) any arbitrary
+ combination of 1)s and 2)s. Thus, for example, an
+ <classname>std::multiset&lt;int&gt;</classname> might be used to store
+ multiple instances of integers, but using this library's
+ containers, one might use
+ </para>
+ <programlisting>
+ tree&lt;int, size_t&gt;
+ </programlisting>
+
+ <para>
+ i.e., a <classname>map</classname> of <type>int</type>s to
+ <type>size_t</type>s.
+ </para>
+ <para>
+ These "multimaps" and "multisets" might be confusing to
+ anyone familiar with the standard's <classname>std::multimap</classname> and
+ <classname>std::multiset</classname>, because there is no clear
+ correspondence between the two. For example, in some cases
+ where one uses <classname>std::multiset</classname> in the standard, one might use
+ in this library a "multimap" of "multisets" - i.e., a
+ container that maps primary keys each to an associative
+ container that maps each secondary key to the number of times
+ it occurs.
+ </para>
+
+ <para>
+ When one uses a "multimap," one should choose with care the
+ type of container used for secondary keys.
+ </para>
+ </section> <!-- map vs set -->
+
+
+ <section xml:id="concepts.associative_semantics.multi">
+ <info><title>Alternatives to <classname>std::multiset</classname> and <classname>std::multimap</classname></title></info>
+
+ <para>
+ Brace onself: this library does not contain containers like
+ <classname>std::multimap</classname> or
+ <classname>std::multiset</classname>. Instead, these data
+ structures can be synthesized via manipulation of the
+ <classname>Mapped</classname> template parameter.
+ </para>
+ <para>
+ One maps the unique part of a key - the primary key, into an
+ associative-container of the (originally) non-unique parts of
+ the key - the secondary key. A primary associative-container
+ is an associative container of primary keys; a secondary
+ associative-container is an associative container of
+ secondary keys.
+ </para>
+
+ <para>
+ Stepping back a bit, and starting in from the beginning.
+ </para>
+
+
+ <para>
+ Maps (or sets) allow mapping (or storing) unique-key values.
+ The standard library also supplies associative containers which
+ map (or store) multiple values with equivalent keys:
+ <classname>std::multimap</classname>, <classname>std::multiset</classname>,
+ <classname>std::tr1::unordered_multimap</classname>, and
+ <classname>unordered_multiset</classname>. We first discuss how these might
+ be used, then why we think it is best to avoid them.
+ </para>
+
+ <para>
+ Suppose one builds a simple bank-account application that
+ records for each client (identified by an <classname>std::string</classname>)
+ and account-id (marked by an <type>unsigned long</type>) -
+ the balance in the account (described by a
+ <type>float</type>). Suppose further that ordering this
+ information is not useful, so a hash-based container is
+ preferable to a tree based container. Then one can use
+ </para>
+
+ <programlisting>
+ std::tr1::unordered_map&lt;std::pair&lt;std::string, unsigned long&gt;, float, ...&gt;
+ </programlisting>
+
+ <para>
+ which hashes every combination of client and account-id. This
+ might work well, except for the fact that it is now impossible
+ to efficiently list all of the accounts of a specific client
+ (this would practically require iterating over all
+ entries). Instead, one can use
+ </para>
+
+ <programlisting>
+ std::tr1::unordered_multimap&lt;std::pair&lt;std::string, unsigned long&gt;, float, ...&gt;
+ </programlisting>
+
+ <para>
+ which hashes every client, and decides equivalence based on
+ client only. This will ensure that all accounts belonging to a
+ specific user are stored consecutively.
+ </para>
+
+ <para>
+ Also, suppose one wants an integers' priority queue
+ (a container that supports <function>push</function>,
+ <function>pop</function>, and <function>top</function> operations, the last of which
+ returns the largest <type>int</type>) that also supports
+ operations such as <function>find</function> and <function>lower_bound</function>. A
+ reasonable solution is to build an adapter over
+ <classname>std::set&lt;int&gt;</classname>. In this adapter,
+ <function>push</function> will just call the tree-based
+ associative container's <function>insert</function> method; <function>pop</function>
+ will call its <function>end</function> method, and use it to return the
+ preceding element (which must be the largest). Then this might
+ work well, except that the container object cannot hold
+ multiple instances of the same integer (<function>push(4)</function>,
+ will be a no-op if <constant>4</constant> is already in the
+ container object). If multiple keys are necessary, then one
+ might build the adapter over an
+ <classname>std::multiset&lt;int&gt;</classname>.
+ </para>
+
+ <para>
+ The standard library's non-unique-mapping containers are useful
+ when (1) a key can be decomposed in to a primary key and a
+ secondary key, (2) a key is needed multiple times, or (3) any
+ combination of (1) and (2).
+ </para>
+
+ <para>
+ The graphic below shows how the standard library's container
+ design works internally; in this figure nodes shaded equally
+ represent equivalent-key values. Equivalent keys are stored
+ consecutively using the properties of the underlying data
+ structure: binary search trees (label A) store equivalent-key
+ values consecutively (in the sense of an in-order walk)
+ naturally; collision-chaining hash tables (label B) store
+ equivalent-key values in the same bucket, the bucket can be
+ arranged so that equivalent-key values are consecutive.
+ </para>
+
+ <figure>
+ <title>Non-unique Mapping Standard Containers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_embedded_lists_1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Non-unique Mapping Standard Containers</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ Put differently, the standards' non-unique mapping
+ associative-containers are associative containers that map
+ primary keys to linked lists that are embedded into the
+ container. The graphic below shows again the two
+ containers from the first graphic above, this time with
+ the embedded linked lists of the grayed nodes marked
+ explicitly.
+ </para>
+
+ <figure xml:id="fig.pbds_embedded_lists_2">
+ <title>
+ Effect of embedded lists in
+ <classname>std::multimap</classname>
+ </title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_embedded_lists_2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>
+ Effect of embedded lists in
+ <classname>std::multimap</classname>
+ </phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ These embedded linked lists have several disadvantages.
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ The underlying data structure embeds the linked lists
+ according to its own consideration, which means that the
+ search path for a value might include several different
+ equivalent-key values. For example, the search path for the
+ the black node in either of the first graphic, labels A or B,
+ includes more than a single gray node.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The links of the linked lists are the underlying data
+ structures' nodes, which typically are quite structured. In
+ the case of tree-based containers (the grapic above, label
+ B), each "link" is actually a node with three pointers (one
+ to a parent and two to children), and a
+ relatively-complicated iteration algorithm. The linked
+ lists, therefore, can take up quite a lot of memory, and
+ iterating over all values equal to a given key (through the
+ return value of the standard
+ library's <function>equal_range</function>) can be
+ expensive.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The primary key is stored multiply; this uses more memory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Finally, the interface of this design excludes several
+ useful underlying data structures. Of all the unordered
+ self-organizing data structures, practically only
+ collision-chaining hash tables can (efficiently) guarantee
+ that equivalent-key values are stored consecutively.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ The above reasons hold even when the ratio of secondary keys to
+ primary keys (or average number of identical keys) is small, but
+ when it is large, there are more severe problems:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ The underlying data structures order the links inside each
+ embedded linked-lists according to their internal
+ considerations, which effectively means that each of the
+ links is unordered. Irrespective of the underlying data
+ structure, searching for a specific value can degrade to
+ linear complexity.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Similarly to the above point, it is impossible to apply
+ to the secondary keys considerations that apply to primary
+ keys. For example, it is not possible to maintain secondary
+ keys by sorted order.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ While the interface "understands" that all equivalent-key
+ values constitute a distinct list (through
+ <function>equal_range</function>), the underlying data
+ structure typically does not. This means that operations such
+ as erasing from a tree-based container all values whose keys
+ are equivalent to a a given key can be super-linear in the
+ size of the tree; this is also true also for several other
+ operations that target a specific list.
+ </para>
+ </listitem>
+
+ </orderedlist>
+
+ <para>
+ In this library, all associative containers map
+ (or store) unique-key values. One can (1) map primary keys to
+ secondary associative-containers (containers of
+ secondary keys) or non-associative containers (2) map identical
+ keys to a size-type representing the number of times they
+ occur, or (3) any combination of (1) and (2). Instead of
+ allowing multiple equivalent-key values, this library
+ supplies associative containers based on underlying
+ data structures that are suitable as secondary
+ associative-containers.
+ </para>
+
+ <para>
+ In the figure below, labels A and B show the equivalent
+ underlying data structures in this library, as mapped to the
+ first graphic above. Labels A and B, respectively. Each shaded
+ box represents some size-type or secondary
+ associative-container.
+ </para>
+
+ <figure>
+ <title>Non-unique Mapping Containers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_embedded_lists_3.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Non-unique Mapping Containers</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ In the first example above, then, one would use an associative
+ container mapping each user to an associative container which
+ maps each application id to a start time (see
+ <filename>example/basic_multimap.cc</filename>); in the second
+ example, one would use an associative container mapping
+ each <classname>int</classname> to some size-type indicating the
+ number of times it logically occurs
+ (see <filename>example/basic_multiset.cc</filename>.
+ </para>
+
+ <para>
+ See the discussion in list-based container types for containers
+ especially suited as secondary associative-containers.
+ </para>
+ </section>
+
+ </section> <!-- map and set semantics -->
+
+ <section xml:id="pbds.design.concepts.iterator_semantics">
+ <info><title>Iterator Semantics</title></info>
+
+ <section xml:id="concepts.iterator_semantics.point_and_range">
+ <info><title>Point and Range Iterators</title></info>
+
+ <para>
+ Iterator concepts are bifurcated in this design, and are
+ comprised of point-type and range-type iteration.
+ </para>
+
+ <para>
+ A point-type iterator is an iterator that refers to a specific
+ element as returned through an
+ associative-container's <function>find</function> method.
+ </para>
+
+ <para>
+ A range-type iterator is an iterator that is used to go over a
+ sequence of elements, as returned by a container's
+ <function>find</function> method.
+ </para>
+
+ <para>
+ A point-type method is a method that
+ returns a point-type iterator; a range-type method is a method
+ that returns a range-type iterator.
+ </para>
+
+ <para>For most containers, these types are synonymous; for
+ self-organizing containers, such as hash-based containers or
+ priority queues, these are inherently different (in any
+ implementation, including that of C++ standard library
+ components), but in this design, it is made explicit. They are
+ distinct types.
+ </para>
+ </section>
+
+
+ <section xml:id="concepts.iterator_semantics.both">
+ <info><title>Distinguishing Point and Range Iterators</title></info>
+
+ <para>When using this library, is necessary to differentiate
+ between two types of methods and iterators: point-type methods and
+ iterators, and range-type methods and iterators. Each associative
+ container's interface includes the methods:</para>
+ <programlisting>
+ point_const_iterator
+ find(const_key_reference r_key) const;
+
+ point_iterator
+ find(const_key_reference r_key);
+
+ std::pair&lt;point_iterator,bool&gt;
+ insert(const_reference r_val);
+ </programlisting>
+
+ <para>The relationship between these iterator types varies between
+ container types. The figure below
+ shows the most general invariant between point-type and
+ range-type iterators: In <emphasis>A</emphasis> <literal>iterator</literal>, can
+ always be converted to <literal>point_iterator</literal>. In <emphasis>B</emphasis>
+ shows invariants for order-preserving containers: point-type
+ iterators are synonymous with range-type iterators.
+ Orthogonally, <emphasis>C</emphasis>shows invariants for "set"
+ containers: iterators are synonymous with const iterators.</para>
+
+ <figure>
+ <title>Point Iterator Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_point_iterator_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Point Iterator Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>Note that point-type iterators in self-organizing containers
+ (hash-based associative containers) lack movement
+ operators, such as <literal>operator++</literal> - in fact, this
+ is the reason why this library differentiates from the standard C++ librarys
+ design on this point.</para>
+
+ <para>Typically, one can determine an iterator's movement
+ capabilities using
+ <literal>std::iterator_traits&lt;It&gt;iterator_category</literal>,
+ which is a <literal>struct</literal> indicating the iterator's
+ movement capabilities. Unfortunately, none of the standard predefined
+ categories reflect a pointer's <emphasis>not</emphasis> having any
+ movement capabilities whatsoever. Consequently,
+ <literal>pb_ds</literal> adds a type
+ <literal>trivial_iterator_tag</literal> (whose name is taken from
+ a concept in C++ standardese, which is the category of iterators
+ with no movement capabilities.) All other standard C++ library
+ tags, such as <literal>forward_iterator_tag</literal> retain their
+ common use.</para>
+
+ </section>
+
+ <section xml:id="pbds.design.concepts.invalidation">
+ <info><title>Invalidation Guarantees</title></info>
+ <para>
+ If one manipulates a container object, then iterators previously
+ obtained from it can be invalidated. In some cases a
+ previously-obtained iterator cannot be de-referenced; in other cases,
+ the iterator's next or previous element might have changed
+ unpredictably. This corresponds exactly to the question whether a
+ point-type or range-type iterator (see previous concept) is valid or
+ not. In this design, one can query a container (in compile time) about
+ its invalidation guarantees.
+ </para>
+
+
+ <para>
+ Given three different types of associative containers, a modifying
+ operation (in that example, <function>erase</function>) invalidated
+ iterators in three different ways: the iterator of one container
+ remained completely valid - it could be de-referenced and
+ incremented; the iterator of a different container could not even be
+ de-referenced; the iterator of the third container could be
+ de-referenced, but its "next" iterator changed unpredictably.
+ </para>
+
+ <para>
+ Distinguishing between find and range types allows fine-grained
+ invalidation guarantees, because these questions correspond exactly
+ to the question of whether point-type iterators and range-type
+ iterators are valid. The graphic below shows tags corresponding to
+ different types of invalidation guarantees.
+ </para>
+
+ <figure>
+ <title>Invalidation Guarantee Tags Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_invalidation_tag_hierarchy.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_invalidation_tag_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Invalidation Guarantee Tags Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>basic_invalidation_guarantee</classname>
+ corresponds to a basic guarantee that a point-type iterator,
+ a found pointer, or a found reference, remains valid as long
+ as the container object is not modified.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>point_invalidation_guarantee</classname>
+ corresponds to a guarantee that a point-type iterator, a
+ found pointer, or a found reference, remains valid even if
+ the container object is modified.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>range_invalidation_guarantee</classname>
+ corresponds to a guarantee that a range-type iterator remains
+ valid even if the container object is modified.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>To find the invalidation guarantee of a
+ container, one can use</para>
+ <programlisting>
+ typename container_traits&lt;Cntnr&gt;::invalidation_guarantee
+ </programlisting>
+
+ <para>Note that this hierarchy corresponds to the logic it
+ represents: if a container has range-invalidation guarantees,
+ then it must also have find invalidation guarantees;
+ correspondingly, its invalidation guarantee (in this case
+ <classname>range_invalidation_guarantee</classname>)
+ can be cast to its base class (in this case <classname>point_invalidation_guarantee</classname>).
+ This means that this this hierarchy can be used easily using
+ standard metaprogramming techniques, by specializing on the
+ type of <literal>invalidation_guarantee</literal>.</para>
+
+ <para>
+ These types of problems were addressed, in a more general
+ setting, in <xref linkend="biblio.meyers96more"/> - Item 2. In
+ our opinion, an invalidation-guarantee hierarchy would solve
+ these problems in all container types - not just associative
+ containers.
+ </para>
+
+ </section>
+ </section> <!-- iterator semantics -->
+
+ <section xml:id="pbds.design.concepts.genericity">
+ <info><title>Genericity</title></info>
+
+ <para>
+ The design attempts to address the following problem of
+ data-structure genericity. When writing a function manipulating
+ a generic container object, what is the behavior of the object?
+ Suppose one writes
+ </para>
+ <programlisting>
+ template&lt;typename Cntnr&gt;
+ void
+ some_op_sequence(Cntnr &amp;r_container)
+ {
+ ...
+ }
+ </programlisting>
+
+ <para>
+ then one needs to address the following questions in the body
+ of <function>some_op_sequence</function>:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Which types and methods does <literal>Cntnr</literal> support?
+ Containers based on hash tables can be queries for the
+ hash-functor type and object; this is meaningless for tree-based
+ containers. Containers based on trees can be split, joined, or
+ can erase iterators and return the following iterator; this
+ cannot be done by hash-based containers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ What are the exception and invalidation guarantees
+ of <literal>Cntnr</literal>? A container based on a probing
+ hash-table invalidates all iterators when it is modified; this
+ is not the case for containers based on node-based
+ trees. Containers based on a node-based tree can be split or
+ joined without exceptions; this is not the case for containers
+ based on vector-based trees.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ How does the container maintain its elements? Tree-based and
+ Trie-based containers store elements by key order; others,
+ typically, do not. A container based on a splay trees or lists
+ with update policies "cache" "frequently accessed" elements;
+ containers based on most other underlying data structures do
+ not.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ How does one query a container about characteristics and
+ capabilities? What is the relationship between two different
+ data structures, if anything?
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The remainder of this section explains these issues in
+ detail.</para>
+
+
+ <section xml:id="concepts.genericity.tag">
+ <info><title>Tag</title></info>
+ <para>
+ Tags are very useful for manipulating generic types. For example, if
+ <literal>It</literal> is an iterator class, then <literal>typename
+ It::iterator_category</literal> or <literal>typename
+ std::iterator_traits&lt;It&gt;::iterator_category</literal> will
+ yield its category, and <literal>typename
+ std::iterator_traits&lt;It&gt;::value_type</literal> will yield its
+ value type.
+ </para>
+
+ <para>
+ This library contains a container tag hierarchy corresponding to the
+ diagram below.
+ </para>
+
+ <figure>
+ <title>Container Tag Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_container_tag_hierarchy.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_container_tag_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Container Tag Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ Given any container <type>Cntnr</type>, the tag of
+ the underlying data structure can be found via <literal>typename
+ Cntnr::container_category</literal>.
+ </para>
+
+ </section> <!-- tag -->
+
+ <section xml:id="concepts.genericity.traits">
+ <info><title>Traits</title></info>
+ <para></para>
+
+ <para>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <literal>Cntnr</literal>, then <literal>&lt;Cntnr&gt;</literal>
+ is a traits class identifying the properties of the
+ container.</para>
+
+ <para>To find if a container can throw when a key is erased (which
+ is true for vector-based trees, for example), one can
+ use
+ </para>
+ <programlisting>container_traits&lt;Cntnr&gt;::erase_can_throw</programlisting>
+
+ <para>
+ Some of the definitions in <classname>container_traits</classname>
+ are dependent on other
+ definitions. If <classname>container_traits&lt;Cntnr&gt;::order_preserving</classname>
+ is <constant>true</constant> (which is the case for containers
+ based on trees and tries), then the container can be split or
+ joined; in this
+ case, <classname>container_traits&lt;Cntnr&gt;::split_join_can_throw</classname>
+ indicates whether splits or joins can throw exceptions (which is
+ true for vector-based trees);
+ otherwise <classname>container_traits&lt;Cntnr&gt;::split_join_can_throw</classname>
+ will yield a compilation error. (This is somewhat similar to a
+ compile-time version of the COM model).
+ </para>
+
+ </section> <!-- traits -->
+
+ </section> <!-- genericity -->
+ </section> <!-- concepts -->
+
+ <section xml:id="pbds.design.container">
+ <info><title>By Container</title></info>
+
+ <!-- hash -->
+ <section xml:id="pbds.design.container.hash">
+ <info><title>hash</title></info>
+
+ <!--
+
+// hash policies
+/// general terms / background
+/// range hashing policies
+/// ranged-hash policies
+/// implementation
+
+// resize policies
+/// general
+/// size policies
+/// trigger policies
+/// implementation
+
+// policy interactions
+/// probe/size/trigger
+/// hash/trigger
+/// eq/hash/storing hash values
+/// size/load-check trigger
+ -->
+ <section xml:id="container.hash.interface">
+ <info><title>Interface</title></info>
+
+
+
+ <para>
+ The collision-chaining hash-based container has the
+ following declaration.</para>
+ <programlisting>
+ template&lt;
+ typename Key,
+ typename Mapped,
+ typename Hash_Fn = std::hash&lt;Key&gt;,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+ typename Comb_Hash_Fn = direct_mask_range_hashing&lt;&gt;
+ typename Resize_Policy = default explained below.
+ bool Store_Hash = false,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class cc_hash_table;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem><para><classname>Key</classname> is the key type.</para></listitem>
+
+ <listitem><para><classname>Mapped</classname> is the mapped-policy.</para></listitem>
+
+ <listitem><para><classname>Hash_Fn</classname> is a key hashing functor.</para></listitem>
+
+ <listitem><para><classname>Eq_Fn</classname> is a key equivalence functor.</para></listitem>
+
+ <listitem><para><classname>Comb_Hash_Fn</classname> is a range-hashing_functor;
+ it describes how to translate hash values into positions
+ within the table. </para></listitem>
+
+ <listitem><para><classname>Resize_Policy</classname> describes how a container object
+ should change its internal size. </para></listitem>
+
+ <listitem><para><classname>Store_Hash</classname> indicates whether the hash value
+ should be stored with each entry. </para></listitem>
+
+ <listitem><para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The probing hash-based container has the following
+ declaration.</para>
+ <programlisting>
+ template&lt;
+ typename Key,
+ typename Mapped,
+ typename Hash_Fn = std::hash&lt;Key&gt;,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+ typename Comb_Probe_Fn = direct_mask_range_hashing&lt;&gt;
+ typename Probe_Fn = default explained below.
+ typename Resize_Policy = default explained below.
+ bool Store_Hash = false,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class gp_hash_table;
+ </programlisting>
+
+ <para>The parameters are identical to those of the
+ collision-chaining container, except for the following.</para>
+
+ <orderedlist>
+ <listitem><para><classname>Comb_Probe_Fn</classname> describes how to transform a probe
+ sequence into a sequence of positions within the table.</para></listitem>
+
+ <listitem><para><classname>Probe_Fn</classname> describes a probe sequence policy.</para></listitem>
+ </orderedlist>
+
+ <para>Some of the default template values depend on the values of
+ other parameters, and are explained below.</para>
+
+ </section>
+ <section xml:id="container.hash.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.hash.details.hash_policies">
+ <info><title>Hash Policies</title></info>
+
+ <section xml:id="details.hash_policies.general">
+ <info><title>General</title></info>
+
+ <para>Following is an explanation of some functions which hashing
+ involves. The graphic below illustrates the discussion.</para>
+
+ <figure>
+ <title>Hash functions, ranged-hash functions, and
+ range-hashing functions</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_ranged_hash_range_hashing_fns.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Hash functions, ranged-hash functions, and
+ range-hashing functions</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Let U be a domain (e.g., the integers, or the
+ strings of 3 characters). A hash-table algorithm needs to map
+ elements of U "uniformly" into the range [0,..., m -
+ 1] (where m is a non-negative integral value, and
+ is, in general, time varying). I.e., the algorithm needs
+ a ranged-hash function</para>
+
+ <para>
+ f : U × Z<subscript>+</subscript> → Z<subscript>+</subscript>
+ </para>
+
+ <para>such that for any u in U ,</para>
+
+ <para>0 ≤ f(u, m) ≤ m - 1</para>
+
+ <para>and which has "good uniformity" properties (say
+ <xref linkend="biblio.knuth98sorting"/>.)
+ One
+ common solution is to use the composition of the hash
+ function</para>
+
+ <para>h : U → Z<subscript>+</subscript> ,</para>
+
+ <para>which maps elements of U into the non-negative
+ integrals, and</para>
+
+ <para>g : Z<subscript>+</subscript> × Z<subscript>+</subscript> →
+ Z<subscript>+</subscript>,</para>
+
+ <para>which maps a non-negative hash value, and a non-negative
+ range upper-bound into a non-negative integral in the range
+ between 0 (inclusive) and the range upper bound (exclusive),
+ i.e., for any r in Z<subscript>+</subscript>,</para>
+
+ <para>0 ≤ g(r, m) ≤ m - 1</para>
+
+
+ <para>The resulting ranged-hash function, is</para>
+
+ <!-- ranged_hash_composed_of_hash_and_range_hashing -->
+ <equation>
+ <title>Ranged Hash Function</title>
+ <mathphrase>
+ f(u , m) = g(h(u), m)
+ </mathphrase>
+ </equation>
+
+ <para>From the above, it is obvious that given g and
+ h, f can always be composed (however the converse
+ is not true). The standard's hash-based containers allow specifying
+ a hash function, and use a hard-wired range-hashing function;
+ the ranged-hash function is implicitly composed.</para>
+
+ <para>The above describes the case where a key is to be mapped
+ into a single position within a hash table, e.g.,
+ in a collision-chaining table. In other cases, a key is to be
+ mapped into a sequence of positions within a table,
+ e.g., in a probing table. Similar terms apply in this
+ case: the table requires a ranged probe function,
+ mapping a key into a sequence of positions withing the table.
+ This is typically achieved by composing a hash function
+ mapping the key into a non-negative integral type, a
+ probe function transforming the hash value into a
+ sequence of hash values, and a range-hashing function
+ transforming the sequence of hash values into a sequence of
+ positions.</para>
+
+ </section>
+
+ <section xml:id="details.hash_policies.range">
+ <info><title>Range Hashing</title></info>
+
+ <para>Some common choices for range-hashing functions are the
+ division, multiplication, and middle-square methods (<xref linkend="biblio.knuth98sorting"/>), defined
+ as</para>
+
+ <equation>
+ <title>Range-Hashing, Division Method</title>
+ <mathphrase>
+ g(r, m) = r mod m
+ </mathphrase>
+ </equation>
+
+
+
+ <para>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</para>
+
+ <para>and</para>
+
+ <para>g(r, m) = ⌈ u/v ( r<superscript>2</superscript> mod v ) ⌉</para>
+
+ <para>respectively, for some positive integrals u and
+ v (typically powers of 2), and some a. Each of
+ these range-hashing functions works best for some different
+ setting.</para>
+
+ <para>The division method (see above) is a
+ very common choice. However, even this single method can be
+ implemented in two very different ways. It is possible to
+ implement using the low
+ level % (modulo) operation (for any m), or the
+ low level &amp; (bit-mask) operation (for the case where
+ m is a power of 2), i.e.,</para>
+
+ <equation>
+ <title>Division via Prime Modulo</title>
+ <mathphrase>
+ g(r, m) = r % m
+ </mathphrase>
+ </equation>
+
+ <para>and</para>
+
+ <equation>
+ <title>Division via Bit Mask</title>
+ <mathphrase>
+ g(r, m) = r &amp; m - 1, (with m =
+ 2<superscript>k</superscript> for some k)
+ </mathphrase>
+ </equation>
+
+
+ <para>respectively.</para>
+
+ <para>The % (modulo) implementation has the advantage that for
+ m a prime far from a power of 2, g(r, m) is
+ affected by all the bits of r (minimizing the chance of
+ collision). It has the disadvantage of using the costly modulo
+ operation. This method is hard-wired into SGI's implementation
+ .</para>
+
+ <para>The &amp; (bit-mask) implementation has the advantage of
+ relying on the fast bit-wise and operation. It has the
+ disadvantage that for g(r, m) is affected only by the
+ low order bits of r. This method is hard-wired into
+ Dinkumware's implementation.</para>
+
+
+ </section>
+
+ <section xml:id="details.hash_policies.ranged">
+ <info><title>Ranged Hash</title></info>
+
+ <para>In cases it is beneficial to allow the
+ client to directly specify a ranged-hash hash function. It is
+ true, that the writer of the ranged-hash function cannot rely
+ on the values of m having specific numerical properties
+ suitable for hashing (in the sense used in <xref linkend="biblio.knuth98sorting"/>), since
+ the values of m are determined by a resize policy with
+ possibly orthogonal considerations.</para>
+
+ <para>There are two cases where a ranged-hash function can be
+ superior. The firs is when using perfect hashing: the
+ second is when the values of m can be used to estimate
+ the "general" number of distinct values required. This is
+ described in the following.</para>
+
+ <para>Let</para>
+
+ <para>
+ s = [ s<subscript>0</subscript>,..., s<subscript>t - 1</subscript>]
+ </para>
+
+ <para>be a string of t characters, each of which is from
+ domain S. Consider the following ranged-hash
+ function:</para>
+ <equation>
+ <title>
+ A Standard String Hash Function
+ </title>
+ <mathphrase>
+ f<subscript>1</subscript>(s, m) = ∑ <subscript>i =
+ 0</subscript><superscript>t - 1</superscript> s<subscript>i</subscript> a<superscript>i</superscript> mod m
+ </mathphrase>
+ </equation>
+
+
+ <para>where a is some non-negative integral value. This is
+ the standard string-hashing function used in SGI's
+ implementation (with a = 5). Its advantage is that
+ it takes into account all of the characters of the string.</para>
+
+ <para>Now assume that s is the string representation of a
+ of a long DNA sequence (and so S = {'A', 'C', 'G',
+ 'T'}). In this case, scanning the entire string might be
+ prohibitively expensive. A possible alternative might be to use
+ only the first k characters of the string, where</para>
+
+ <para>|S|<superscript>k</superscript> ≥ m ,</para>
+
+ <para>i.e., using the hash function</para>
+
+ <equation>
+ <title>
+ Only k String DNA Hash
+ </title>
+ <mathphrase>
+ f<subscript>2</subscript>(s, m) = ∑ <subscript>i
+ = 0</subscript><superscript>k - 1</superscript> s<subscript>i</subscript> a<superscript>i</superscript> mod m
+ </mathphrase>
+ </equation>
+
+ <para>requiring scanning over only</para>
+
+ <para>k = log<subscript>4</subscript>( m )</para>
+
+ <para>characters.</para>
+
+ <para>Other more elaborate hash-functions might scan k
+ characters starting at a random position (determined at each
+ resize), or scanning k random positions (determined at
+ each resize), i.e., using</para>
+
+ <para>f<subscript>3</subscript>(s, m) = ∑ <subscript>i =
+ r</subscript>0<superscript>r<subscript>0</subscript> + k - 1</superscript> s<subscript>i</subscript>
+ a<superscript>i</superscript> mod m ,</para>
+
+ <para>or</para>
+
+ <para>f<subscript>4</subscript>(s, m) = ∑ <subscript>i = 0</subscript><superscript>k -
+ 1</superscript> s<subscript>r</subscript>i a<superscript>r<subscript>i</subscript></superscript> mod
+ m ,</para>
+
+ <para>respectively, for r<subscript>0</subscript>,..., r<subscript>k-1</subscript>
+ each in the (inclusive) range [0,...,t-1].</para>
+
+ <para>It should be noted that the above functions cannot be
+ decomposed as per a ranged hash composed of hash and range hashing.</para>
+
+
+ </section>
+
+ <section xml:id="details.hash_policies.implementation">
+ <info><title>Implementation</title></info>
+
+ <para>This sub-subsection describes the implementation of
+ the above in this library. It first explains range-hashing
+ functions in collision-chaining tables, then ranged-hash
+ functions in collision-chaining tables, then probing-based
+ tables, and finally lists the relevant classes in this
+ library.</para>
+
+ <section xml:id="hash_policies.implementation.collision-chaining">
+ <info><title>
+ Range-Hashing and Ranged-Hashes in Collision-Chaining Tables
+ </title></info>
+
+
+ <para><classname>cc_hash_table</classname> is
+ parametrized by <classname>Hash_Fn</classname> and <classname>Comb_Hash_Fn</classname>, a
+ hash functor and a combining hash functor, respectively.</para>
+
+ <para>In general, <classname>Comb_Hash_Fn</classname> is considered a
+ range-hashing functor. <classname>cc_hash_table</classname>
+ synthesizes a ranged-hash function from <classname>Hash_Fn</classname> and
+ <classname>Comb_Hash_Fn</classname>. The figure below shows an <classname>insert</classname> sequence
+ diagram for this case. The user inserts an element (point A),
+ the container transforms the key into a non-negative integral
+ using the hash functor (points B and C), and transforms the
+ result into a position using the combining functor (points D
+ and E).</para>
+
+ <figure>
+ <title>Insert hash sequence diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_range_hashing_seq_diagram.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert hash sequence diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>If <classname>cc_hash_table</classname>'s
+ hash-functor, <classname>Hash_Fn</classname> is instantiated by <classname>null_type</classname> , then <classname>Comb_Hash_Fn</classname> is taken to be
+ a ranged-hash function. The graphic below shows an <function>insert</function> sequence
+ diagram. The user inserts an element (point A), the container
+ transforms the key into a position using the combining functor
+ (points B and C).</para>
+
+ <figure>
+ <title>Insert hash sequence diagram with a null policy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_range_hashing_seq_diagram2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert hash sequence diagram with a null policy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="hash_policies.implementation.probe">
+ <info><title>
+ Probing tables
+ </title></info>
+ <para><classname>gp_hash_table</classname> is parametrized by
+ <classname>Hash_Fn</classname>, <classname>Probe_Fn</classname>,
+ and <classname>Comb_Probe_Fn</classname>. As before, if
+ <classname>Hash_Fn</classname> and <classname>Probe_Fn</classname>
+ are both <classname>null_type</classname>, then
+ <classname>Comb_Probe_Fn</classname> is a ranged-probe
+ functor. Otherwise, <classname>Hash_Fn</classname> is a hash
+ functor, <classname>Probe_Fn</classname> is a functor for offsets
+ from a hash value, and <classname>Comb_Probe_Fn</classname>
+ transforms a probe sequence into a sequence of positions within
+ the table.</para>
+
+ </section>
+
+ <section xml:id="hash_policies.implementation.predefined">
+ <info><title>
+ Pre-Defined Policies
+ </title></info>
+
+ <para>This library contains some pre-defined classes
+ implementing range-hashing and probing functions:</para>
+
+ <orderedlist>
+ <listitem><para><classname>direct_mask_range_hashing</classname>
+ and <classname>direct_mod_range_hashing</classname>
+ are range-hashing functions based on a bit-mask and a modulo
+ operation, respectively.</para></listitem>
+
+ <listitem><para><classname>linear_probe_fn</classname>, and
+ <classname>quadratic_probe_fn</classname> are
+ a linear probe and a quadratic probe function,
+ respectively.</para></listitem>
+ </orderedlist>
+
+ <para>
+ The graphic below shows the relationships.
+ </para>
+ <figure>
+ <title>Hash policy class diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_policy_cd.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Hash policy class diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ </section>
+
+ </section> <!-- impl -->
+
+ </section>
+
+ <section xml:id="container.hash.details.resize_policies">
+ <info><title>Resize Policies</title></info>
+
+ <section xml:id="resize_policies.general">
+ <info><title>General</title></info>
+
+ <para>Hash-tables, as opposed to trees, do not naturally grow or
+ shrink. It is necessary to specify policies to determine how
+ and when a hash table should change its size. Usually, resize
+ policies can be decomposed into orthogonal policies:</para>
+
+ <orderedlist>
+ <listitem><para>A size policy indicating how a hash table
+ should grow (e.g., it should multiply by powers of
+ 2).</para></listitem>
+
+ <listitem><para>A trigger policy indicating when a hash
+ table should grow (e.g., a load factor is
+ exceeded).</para></listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="resize_policies.size">
+ <info><title>Size Policies</title></info>
+
+
+ <para>Size policies determine how a hash table changes size. These
+ policies are simple, and there are relatively few sensible
+ options. An exponential-size policy (with the initial size and
+ growth factors both powers of 2) works well with a mask-based
+ range-hashing function, and is the
+ hard-wired policy used by Dinkumware. A
+ prime-list based policy works well with a modulo-prime range
+ hashing function and is the hard-wired policy used by SGI's
+ implementation.</para>
+
+ </section>
+
+ <section xml:id="resize_policies.trigger">
+ <info><title>Trigger Policies</title></info>
+
+ <para>Trigger policies determine when a hash table changes size.
+ Following is a description of two policies: load-check
+ policies, and collision-check policies.</para>
+
+ <para>Load-check policies are straightforward. The user specifies
+ two factors, Α<subscript>min</subscript> and
+ Α<subscript>max</subscript>, and the hash table maintains the
+ invariant that</para>
+
+ <para>Α<subscript>min</subscript> ≤ (number of
+ stored elements) / (hash-table size) ≤
+ Α<subscript>max</subscript><remark>load factor min max</remark></para>
+
+ <para>Collision-check policies work in the opposite direction of
+ load-check policies. They focus on keeping the number of
+ collisions moderate and hoping that the size of the table will
+ not grow very large, instead of keeping a moderate load-factor
+ and hoping that the number of collisions will be small. A
+ maximal collision-check policy resizes when the longest
+ probe-sequence grows too large.</para>
+
+ <para>Consider the graphic below. Let the size of the hash table
+ be denoted by m, the length of a probe sequence be denoted by k,
+ and some load factor be denoted by Α. We would like to
+ calculate the minimal length of k, such that if there were Α
+ m elements in the hash table, a probe sequence of length k would
+ be found with probability at most 1/m.</para>
+
+ <figure>
+ <title>Balls and bins</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_balls_and_bins.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Balls and bins</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Denote the probability that a probe sequence of length
+ k appears in bin i by p<subscript>i</subscript>, the
+ length of the probe sequence of bin i by
+ l<subscript>i</subscript>, and assume uniform distribution. Then</para>
+
+
+
+ <equation>
+ <title>
+ Probability of Probe Sequence of Length k
+ </title>
+ <mathphrase>
+ p<subscript>1</subscript> =
+ </mathphrase>
+ </equation>
+
+ <para>P(l<subscript>1</subscript> ≥ k) =</para>
+
+ <para>
+ P(l<subscript>1</subscript> ≥ α ( 1 + k / α - 1) ≤ (a)
+ </para>
+
+ <para>
+ e ^ ( - ( α ( k / α - 1 )<superscript>2</superscript> ) /2)
+ </para>
+
+ <para>where (a) follows from the Chernoff bound (<xref linkend="biblio.motwani95random"/>). To
+ calculate the probability that some bin contains a probe
+ sequence greater than k, we note that the
+ l<subscript>i</subscript> are negatively-dependent
+ (<xref linkend="biblio.dubhashi98neg"/>)
+ . Let
+ I(.) denote the indicator function. Then</para>
+
+ <equation>
+ <title>
+ Probability Probe Sequence in Some Bin
+ </title>
+ <mathphrase>
+ P( exists<subscript>i</subscript> l<subscript>i</subscript> ≥ k ) =
+ </mathphrase>
+ </equation>
+
+ <para>P ( ∑ <subscript>i = 1</subscript><superscript>m</superscript>
+ I(l<subscript>i</subscript> ≥ k) ≥ 1 ) =</para>
+
+ <para>P ( ∑ <subscript>i = 1</subscript><superscript>m</superscript> I (
+ l<subscript>i</subscript> ≥ k ) ≥ m p<subscript>1</subscript> ( 1 + 1 / (m
+ p<subscript>1</subscript>) - 1 ) ) ≤ (a)</para>
+
+ <para>e ^ ( ( - m p<subscript>1</subscript> ( 1 / (m p<subscript>1</subscript>)
+ - 1 ) <superscript>2</superscript> ) / 2 ) ,</para>
+
+ <para>where (a) follows from the fact that the Chernoff bound can
+ be applied to negatively-dependent variables (<xref
+ linkend="biblio.dubhashi98neg"/>). Inserting the first probability
+ equation into the second one, and equating with 1/m, we
+ obtain</para>
+
+
+ <para>k ~ √ ( 2 α ln 2 m ln(m) )
+ ) .</para>
+
+ </section>
+
+ <section xml:id="resize_policies.impl">
+ <info><title>Implementation</title></info>
+
+ <para>This sub-subsection describes the implementation of the
+ above in this library. It first describes resize policies and
+ their decomposition into trigger and size policies, then
+ describes pre-defined classes, and finally discusses controlled
+ access the policies' internals.</para>
+
+ <section xml:id="resize_policies.impl.decomposition">
+ <info><title>Decomposition</title></info>
+
+
+ <para>Each hash-based container is parametrized by a
+ <classname>Resize_Policy</classname> parameter; the container derives
+ <classname>public</classname>ly from <classname>Resize_Policy</classname>. For
+ example:</para>
+ <programlisting>
+ cc_hash_table&lt;typename Key,
+ typename Mapped,
+ ...
+ typename Resize_Policy
+ ...&gt; : public Resize_Policy
+ </programlisting>
+
+ <para>As a container object is modified, it continuously notifies
+ its <classname>Resize_Policy</classname> base of internal changes
+ (e.g., collisions encountered and elements being
+ inserted). It queries its <classname>Resize_Policy</classname> base whether
+ it needs to be resized, and if so, to what size.</para>
+
+ <para>The graphic below shows a (possible) sequence diagram
+ of an insert operation. The user inserts an element; the hash
+ table notifies its resize policy that a search has started
+ (point A); in this case, a single collision is encountered -
+ the table notifies its resize policy of this (point B); the
+ container finally notifies its resize policy that the search
+ has ended (point C); it then queries its resize policy whether
+ a resize is needed, and if so, what is the new size (points D
+ to G); following the resize, it notifies the policy that a
+ resize has completed (point H); finally, the element is
+ inserted, and the policy notified (point I).</para>
+
+ <figure>
+ <title>Insert resize sequence diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_insert_resize_sequence_diagram1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert resize sequence diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>In practice, a resize policy can be usually orthogonally
+ decomposed to a size policy and a trigger policy. Consequently,
+ the library contains a single class for instantiating a resize
+ policy: <classname>hash_standard_resize_policy</classname>
+ is parametrized by <classname>Size_Policy</classname> and
+ <classname>Trigger_Policy</classname>, derives <classname>public</classname>ly from
+ both, and acts as a standard delegate (<xref linkend="biblio.gof"/>)
+ to these policies.</para>
+
+ <para>The two graphics immediately below show sequence diagrams
+ illustrating the interaction between the standard resize policy
+ and its trigger and size policies, respectively.</para>
+
+ <figure>
+ <title>Standard resize policy trigger sequence
+ diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_insert_resize_sequence_diagram2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Standard resize policy trigger sequence
+ diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Standard resize policy size sequence
+ diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_insert_resize_sequence_diagram3.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Standard resize policy size sequence
+ diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ </section>
+
+ <section xml:id="resize_policies.impl.predefined">
+ <info><title>Predefined Policies</title></info>
+ <para>The library includes the following
+ instantiations of size and trigger policies:</para>
+
+ <orderedlist>
+ <listitem><para><classname>hash_load_check_resize_trigger</classname>
+ implements a load check trigger policy.</para></listitem>
+
+ <listitem><para><classname>cc_hash_max_collision_check_resize_trigger</classname>
+ implements a collision check trigger policy.</para></listitem>
+
+ <listitem><para><classname>hash_exponential_size_policy</classname>
+ implements an exponential-size policy (which should be used
+ with mask range hashing).</para></listitem>
+
+ <listitem><para><classname>hash_prime_size_policy</classname>
+ implementing a size policy based on a sequence of primes
+ (which should
+ be used with mod range hashing</para></listitem>
+ </orderedlist>
+
+ <para>The graphic below gives an overall picture of the resize-related
+ classes. <classname>basic_hash_table</classname>
+ is parametrized by <classname>Resize_Policy</classname>, which it subclasses
+ publicly. This class is currently instantiated only by <classname>hash_standard_resize_policy</classname>.
+ <classname>hash_standard_resize_policy</classname>
+ itself is parametrized by <classname>Trigger_Policy</classname> and
+ <classname>Size_Policy</classname>. Currently, <classname>Trigger_Policy</classname> is
+ instantiated by <classname>hash_load_check_resize_trigger</classname>,
+ or <classname>cc_hash_max_collision_check_resize_trigger</classname>;
+ <classname>Size_Policy</classname> is instantiated by <classname>hash_exponential_size_policy</classname>,
+ or <classname>hash_prime_size_policy</classname>.</para>
+
+ </section>
+
+ <section xml:id="resize_policies.impl.internals">
+ <info><title>Controling Access to Internals</title></info>
+
+ <para>There are cases where (controlled) access to resize
+ policies' internals is beneficial. E.g., it is sometimes
+ useful to query a hash-table for the table's actual size (as
+ opposed to its <function>size()</function> - the number of values it
+ currently holds); it is sometimes useful to set a table's
+ initial size, externally resize it, or change load factors.</para>
+
+ <para>Clearly, supporting such methods both decreases the
+ encapsulation of hash-based containers, and increases the
+ diversity between different associative-containers' interfaces.
+ Conversely, omitting such methods can decrease containers'
+ flexibility.</para>
+
+ <para>In order to avoid, to the extent possible, the above
+ conflict, the hash-based containers themselves do not address
+ any of these questions; this is deferred to the resize policies,
+ which are easier to change or replace. Thus, for example,
+ neither <classname>cc_hash_table</classname> nor
+ <classname>gp_hash_table</classname>
+ contain methods for querying the actual size of the table; this
+ is deferred to <classname>hash_standard_resize_policy</classname>.</para>
+
+ <para>Furthermore, the policies themselves are parametrized by
+ template arguments that determine the methods they support
+ (
+ <xref linkend="biblio.alexandrescu01modern"/>
+ shows techniques for doing so). <classname>hash_standard_resize_policy</classname>
+ is parametrized by <classname>External_Size_Access</classname> that
+ determines whether it supports methods for querying the actual
+ size of the table or resizing it. <classname>hash_load_check_resize_trigger</classname>
+ is parametrized by <classname>External_Load_Access</classname> that
+ determines whether it supports methods for querying or
+ modifying the loads. <classname>cc_hash_max_collision_check_resize_trigger</classname>
+ is parametrized by <classname>External_Load_Access</classname> that
+ determines whether it supports methods for querying the
+ load.</para>
+
+ <para>Some operations, for example, resizing a container at
+ run time, or changing the load factors of a load-check trigger
+ policy, require the container itself to resize. As mentioned
+ above, the hash-based containers themselves do not contain
+ these types of methods, only their resize policies.
+ Consequently, there must be some mechanism for a resize policy
+ to manipulate the hash-based container. As the hash-based
+ container is a subclass of the resize policy, this is done
+ through virtual methods. Each hash-based container has a
+ <classname>private</classname> <classname>virtual</classname> method:</para>
+ <programlisting>
+ virtual void
+ do_resize
+ (size_type new_size);
+ </programlisting>
+
+ <para>which resizes the container. Implementations of
+ <classname>Resize_Policy</classname> can export public methods for resizing
+ the container externally; these methods internally call
+ <classname>do_resize</classname> to resize the table.</para>
+
+
+ </section>
+
+ </section>
+
+
+ </section> <!-- resize policies -->
+
+ <section xml:id="container.hash.details.policy_interaction">
+ <info><title>Policy Interactions</title></info>
+ <para>
+ </para>
+ <para>Hash-tables are unfortunately especially susceptible to
+ choice of policies. One of the more complicated aspects of this
+ is that poor combinations of good policies can form a poor
+ container. Following are some considerations.</para>
+
+ <section xml:id="policy_interaction.probesizetrigger">
+ <info><title>probe/size/trigger</title></info>
+
+ <para>Some combinations do not work well for probing containers.
+ For example, combining a quadratic probe policy with an
+ exponential size policy can yield a poor container: when an
+ element is inserted, a trigger policy might decide that there
+ is no need to resize, as the table still contains unused
+ entries; the probe sequence, however, might never reach any of
+ the unused entries.</para>
+
+ <para>Unfortunately, this library cannot detect such problems at
+ compilation (they are halting reducible). It therefore defines
+ an exception class <classname>insert_error</classname> to throw an
+ exception in this case.</para>
+
+ </section>
+
+ <section xml:id="policy_interaction.hashtrigger">
+ <info><title>hash/trigger</title></info>
+
+ <para>Some trigger policies are especially susceptible to poor
+ hash functions. Suppose, as an extreme case, that the hash
+ function transforms each key to the same hash value. After some
+ inserts, a collision detecting policy will always indicate that
+ the container needs to grow.</para>
+
+ <para>The library, therefore, by design, limits each operation to
+ one resize. For each <classname>insert</classname>, for example, it queries
+ only once whether a resize is needed.</para>
+
+ </section>
+
+ <section xml:id="policy_interaction.eqstorehash">
+ <info><title>equivalence functors/storing hash values/hash</title></info>
+
+ <para><classname>cc_hash_table</classname> and
+ <classname>gp_hash_table</classname> are
+ parametrized by an equivalence functor and by a
+ <classname>Store_Hash</classname> parameter. If the latter parameter is
+ <classname>true</classname>, then the container stores with each entry
+ a hash value, and uses this value in case of collisions to
+ determine whether to apply a hash value. This can lower the
+ cost of collision for some types, but increase the cost of
+ collisions for other types.</para>
+
+ <para>If a ranged-hash function or ranged probe function is
+ directly supplied, however, then it makes no sense to store the
+ hash value with each entry. This library's container will
+ fail at compilation, by design, if this is attempted.</para>
+
+ </section>
+
+ <section xml:id="policy_interaction.sizeloadtrigger">
+ <info><title>size/load-check trigger</title></info>
+
+ <para>Assume a size policy issues an increasing sequence of sizes
+ a, a q, a q<superscript>1</superscript>, a q<superscript>2</superscript>, ... For
+ example, an exponential size policy might issue the sequence of
+ sizes 8, 16, 32, 64, ...</para>
+
+ <para>If a load-check trigger policy is used, with loads
+ α<subscript>min</subscript> and α<subscript>max</subscript>,
+ respectively, then it is a good idea to have:</para>
+
+ <orderedlist>
+ <listitem><para>α<subscript>max</subscript> ~ 1 / q</para></listitem>
+
+ <listitem><para>α<subscript>min</subscript> &lt; 1 / (2 q)</para></listitem>
+ </orderedlist>
+
+ <para>This will ensure that the amortized hash cost of each
+ modifying operation is at most approximately 3.</para>
+
+ <para>α<subscript>min</subscript> ~ α<subscript>max</subscript> is, in
+ any case, a bad choice, and α<subscript>min</subscript> &gt;
+ α <subscript>max</subscript> is horrendous.</para>
+
+ </section>
+
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- hash -->
+
+ <!-- tree -->
+ <section xml:id="pbds.design.container.tree">
+ <info><title>tree</title></info>
+
+ <section xml:id="container.tree.interface">
+ <info><title>Interface</title></info>
+
+ <para>The tree-based container has the following declaration:</para>
+ <programlisting>
+ template&lt;
+ typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less&lt;Key&gt;,
+ typename Tag = rb_tree_tag,
+ template&lt;
+ typename Const_Node_Iterator,
+ typename Node_Iterator,
+ typename Cmp_Fn_,
+ typename Allocator_&gt;
+ class Node_Update = null_node_update,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class tree;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><classname>Key</classname> is the key type.</para></listitem>
+
+ <listitem>
+ <para><classname>Mapped</classname> is the mapped-policy.</para></listitem>
+
+ <listitem>
+ <para><classname>Cmp_Fn</classname> is a key comparison functor</para></listitem>
+
+ <listitem>
+ <para><classname>Tag</classname> specifies which underlying data structure
+ to use.</para></listitem>
+
+ <listitem>
+ <para><classname>Node_Update</classname> is a policy for updating node
+ invariants.</para></listitem>
+
+ <listitem>
+ <para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The <classname>Tag</classname> parameter specifies which underlying
+ data structure to use. Instantiating it by <classname>rb_tree_tag</classname>, <classname>splay_tree_tag</classname>, or
+ <classname>ov_tree_tag</classname>,
+ specifies an underlying red-black tree, splay tree, or
+ ordered-vector tree, respectively; any other tag is illegal.
+ Note that containers based on the former two contain more types
+ and methods than the latter (e.g.,
+ <classname>reverse_iterator</classname> and <classname>rbegin</classname>), and different
+ exception and invalidation guarantees.</para>
+
+ </section>
+
+ <section xml:id="container.tree.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.tree.node">
+ <info><title>Node Invariants</title></info>
+
+
+ <para>Consider the two trees in the graphic below, labels A and B. The first
+ is a tree of floats; the second is a tree of pairs, each
+ signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
+ these trees can support the usual queries: the first can easily
+ search for <classname>0.4</classname>; the second can easily search for
+ <classname>std::make_pair(10, 41)</classname>.</para>
+
+ <para>Each of these trees can efficiently support other queries.
+ The first can efficiently determine that the 2rd key in the
+ tree is <constant>0.3</constant>; the second can efficiently determine
+ whether any of its intervals overlaps
+ <programlisting>std::make_pair(29,42)</programlisting> (useful in geometric
+ applications or distributed file systems with leases, for
+ example). It should be noted that an <classname>std::set</classname> can
+ only solve these types of problems with linear complexity.</para>
+
+ <para>In order to do so, each tree stores some metadata in
+ each node, and maintains node invariants (see <xref linkend="biblio.clrs2001"/>.) The first stores in
+ each node the size of the sub-tree rooted at the node; the
+ second stores at each node the maximal endpoint of the
+ intervals at the sub-tree rooted at the node.</para>
+
+ <figure>
+ <title>Tree node invariants</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_node_invariants.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Tree node invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Supporting such trees is difficult for a number of
+ reasons:</para>
+
+ <orderedlist>
+ <listitem><para>There must be a way to specify what a node's metadata
+ should be (if any).</para></listitem>
+
+ <listitem><para>Various operations can invalidate node
+ invariants. The graphic below shows how a right rotation,
+ performed on A, results in B, with nodes x and y having
+ corrupted invariants (the grayed nodes in C). The graphic shows
+ how an insert, performed on D, results in E, with nodes x and y
+ having corrupted invariants (the grayed nodes in F). It is not
+ feasible to know outside the tree the effect of an operation on
+ the nodes of the tree.</para></listitem>
+
+ <listitem><para>The search paths of standard associative containers are
+ defined by comparisons between keys, and not through
+ metadata.</para></listitem>
+
+ <listitem><para>It is not feasible to know in advance which methods trees
+ can support. Besides the usual <classname>find</classname> method, the
+ first tree can support a <classname>find_by_order</classname> method, while
+ the second can support an <classname>overlaps</classname> method.</para></listitem>
+ </orderedlist>
+
+ <figure>
+ <title>Tree node invalidation</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_node_invalidations.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Tree node invalidation</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>These problems are solved by a combination of two means:
+ node iterators, and template-template node updater
+ parameters.</para>
+
+ <section xml:id="container.tree.node.iterators">
+ <info><title>Node Iterators</title></info>
+
+
+ <para>Each tree-based container defines two additional iterator
+ types, <classname>const_node_iterator</classname>
+ and <classname>node_iterator</classname>.
+ These iterators allow descending from a node to one of its
+ children. Node iterator allow search paths different than those
+ determined by the comparison functor. The <classname>tree</classname>
+ supports the methods:</para>
+ <programlisting>
+ const_node_iterator
+ node_begin() const;
+
+ node_iterator
+ node_begin();
+
+ const_node_iterator
+ node_end() const;
+
+ node_iterator
+ node_end();
+ </programlisting>
+
+ <para>The first pairs return node iterators corresponding to the
+ root node of the tree; the latter pair returns node iterators
+ corresponding to a just-after-leaf node.</para>
+ </section>
+
+ <section xml:id="container.tree.node.updator">
+ <info><title>Node Updator</title></info>
+
+ <para>The tree-based containers are parametrized by a
+ <classname>Node_Update</classname> template-template parameter. A
+ tree-based container instantiates
+ <classname>Node_Update</classname> to some
+ <classname>node_update</classname> class, and publicly subclasses
+ <classname>node_update</classname>. The graphic below shows this
+ scheme, as well as some predefined policies (which are explained
+ below).</para>
+
+ <figure>
+ <title>A tree and its update policy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_node_updator_policy_cd.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A tree and its update policy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para><classname>node_update</classname> (an instantiation of
+ <classname>Node_Update</classname>) must define <classname>metadata_type</classname> as
+ the type of metadata it requires. For order statistics,
+ e.g., <classname>metadata_type</classname> might be <classname>size_t</classname>.
+ The tree defines within each node a <classname>metadata_type</classname>
+ object.</para>
+
+ <para><classname>node_update</classname> must also define the following method
+ for restoring node invariants:</para>
+ <programlisting>
+ void
+ operator()(node_iterator nd_it, const_node_iterator end_nd_it)
+ </programlisting>
+
+ <para>In this method, <varname>nd_it</varname> is a
+ <classname>node_iterator</classname> corresponding to a node whose
+ A) all descendants have valid invariants, and B) its own
+ invariants might be violated; <classname>end_nd_it</classname> is
+ a <classname>const_node_iterator</classname> corresponding to a
+ just-after-leaf node. This method should correct the node
+ invariants of the node pointed to by
+ <classname>nd_it</classname>. For example, say node x in the
+ graphic below label A has an invalid invariant, but its' children,
+ y and z have valid invariants. After the invocation, all three
+ nodes should have valid invariants, as in label B.</para>
+
+
+ <figure>
+ <title>Restoring node invariants</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_restoring_node_invariants.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Restoring node invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>When a tree operation might invalidate some node invariant,
+ it invokes this method in its <classname>node_update</classname> base to
+ restore the invariant. For example, the graphic below shows
+ an <function>insert</function> operation (point A); the tree performs some
+ operations, and calls the update functor three times (points B,
+ C, and D). (It is well known that any <function>insert</function>,
+ <function>erase</function>, <function>split</function> or <function>join</function>, can restore
+ all node invariants by a small number of node invariant updates (<xref linkend="biblio.clrs2001"/>)
+ .</para>
+
+ <figure>
+ <title>Insert update sequence</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_update_seq_diagram.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert update sequence</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>To complete the description of the scheme, three questions
+ need to be answered:</para>
+
+ <orderedlist>
+ <listitem><para>How can a tree which supports order statistics define a
+ method such as <classname>find_by_order</classname>?</para></listitem>
+
+ <listitem><para>How can the node updater base access methods of the
+ tree?</para></listitem>
+
+ <listitem><para>How can the following cyclic dependency be resolved?
+ <classname>node_update</classname> is a base class of the tree, yet it
+ uses node iterators defined in the tree (its child).</para></listitem>
+ </orderedlist>
+
+ <para>The first two questions are answered by the fact that
+ <classname>node_update</classname> (an instantiation of
+ <classname>Node_Update</classname>) is a <emphasis>public</emphasis> base class
+ of the tree. Consequently:</para>
+
+ <orderedlist>
+ <listitem><para>Any public methods of
+ <classname>node_update</classname> are automatically methods of
+ the tree (<xref linkend="biblio.alexandrescu01modern"/>).
+ Thus an order-statistics node updater,
+ <classname>tree_order_statistics_node_update</classname> defines
+ the <function>find_by_order</function> method; any tree
+ instantiated by this policy consequently supports this method as
+ well.</para></listitem>
+
+ <listitem><para>In C++, if a base class declares a method as
+ <literal>virtual</literal>, it is
+ <literal>virtual</literal> in its subclasses. If
+ <classname>node_update</classname> needs to access one of the
+ tree's methods, say the member function
+ <function>end</function>, it simply declares that method as
+ <literal>virtual</literal> abstract.</para></listitem>
+ </orderedlist>
+
+ <para>The cyclic dependency is solved through template-template
+ parameters. <classname>Node_Update</classname> is parametrized by
+ the tree's node iterators, its comparison functor, and its
+ allocator type. Thus, instantiations of
+ <classname>Node_Update</classname> have all information
+ required.</para>
+
+ <para>This library assumes that constructing a metadata object and
+ modifying it are exception free. Suppose that during some method,
+ say <classname>insert</classname>, a metadata-related operation
+ (e.g., changing the value of a metadata) throws an exception. Ack!
+ Rolling back the method is unusually complex.</para>
+
+ <para>Previously, a distinction was made between redundant
+ policies and null policies. Node invariants show a
+ case where null policies are required.</para>
+
+ <para>Assume a regular tree is required, one which need not
+ support order statistics or interval overlap queries.
+ Seemingly, in this case a redundant policy - a policy which
+ doesn't affect nodes' contents would suffice. This, would lead
+ to the following drawbacks:</para>
+
+ <orderedlist>
+ <listitem><para>Each node would carry a useless metadata object, wasting
+ space.</para></listitem>
+
+ <listitem><para>The tree cannot know if its
+ <classname>Node_Update</classname> policy actually modifies a
+ node's metadata (this is halting reducible). In the graphic
+ below, assume the shaded node is inserted. The tree would have
+ to traverse the useless path shown to the root, applying
+ redundant updates all the way.</para></listitem>
+ </orderedlist>
+ <figure>
+ <title>Useless update path</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_rationale_null_node_updator.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Useless update path</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>A null policy class, <classname>null_node_update</classname>
+ solves both these problems. The tree detects that node
+ invariants are irrelevant, and defines all accordingly.</para>
+
+ </section>
+
+ </section>
+
+ <section xml:id="container.tree.details.split">
+ <info><title>Split and Join</title></info>
+
+ <para>Tree-based containers support split and join methods.
+ It is possible to split a tree so that it passes
+ all nodes with keys larger than a given key to a different
+ tree. These methods have the following advantages over the
+ alternative of externally inserting to the destination
+ tree and erasing from the source tree:</para>
+
+ <orderedlist>
+ <listitem><para>These methods are efficient - red-black trees are split
+ and joined in poly-logarithmic complexity; ordered-vector
+ trees are split and joined at linear complexity. The
+ alternatives have super-linear complexity.</para></listitem>
+
+ <listitem><para>Aside from orders of growth, these operations perform
+ few allocations and de-allocations. For red-black trees, allocations are not performed,
+ and the methods are exception-free. </para></listitem>
+ </orderedlist>
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- tree -->
+
+ <!-- trie -->
+ <section xml:id="pbds.design.container.trie">
+ <info><title>Trie</title></info>
+
+ <section xml:id="container.trie.interface">
+ <info><title>Interface</title></info>
+
+ <para>The trie-based container has the following declaration:</para>
+ <programlisting>
+ template&lt;typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less&lt;Key&gt;,
+ typename Tag = pat_trie_tag,
+ template&lt;typename Const_Node_Iterator,
+ typename Node_Iterator,
+ typename E_Access_Traits_,
+ typename Allocator_&gt;
+ class Node_Update = null_node_update,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class trie;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem><para><classname>Key</classname> is the key type.</para></listitem>
+
+ <listitem><para><classname>Mapped</classname> is the mapped-policy.</para></listitem>
+
+ <listitem><para><classname>E_Access_Traits</classname> is described in below.</para></listitem>
+
+ <listitem><para><classname>Tag</classname> specifies which underlying data structure
+ to use, and is described shortly.</para></listitem>
+
+ <listitem><para><classname>Node_Update</classname> is a policy for updating node
+ invariants. This is described below.</para></listitem>
+
+ <listitem><para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The <classname>Tag</classname> parameter specifies which underlying
+ data structure to use. Instantiating it by <classname>pat_trie_tag</classname>, specifies an
+ underlying PATRICIA trie (explained shortly); any other tag is
+ currently illegal.</para>
+
+ <para>Following is a description of a (PATRICIA) trie
+ (this implementation follows <xref linkend="biblio.okasaki98mereable"/> and
+ <xref linkend="biblio.filliatre2000ptset"/>).
+ </para>
+
+ <para>A (PATRICIA) trie is similar to a tree, but with the
+ following differences:</para>
+
+ <orderedlist>
+ <listitem><para>It explicitly views keys as a sequence of elements.
+ E.g., a trie can view a string as a sequence of
+ characters; a trie can view a number as a sequence of
+ bits.</para></listitem>
+
+ <listitem><para>It is not (necessarily) binary. Each node has fan-out n
+ + 1, where n is the number of distinct
+ elements.</para></listitem>
+
+ <listitem><para>It stores values only at leaf nodes.</para></listitem>
+
+ <listitem><para>Internal nodes have the properties that A) each has at
+ least two children, and B) each shares the same prefix with
+ any of its descendant.</para></listitem>
+ </orderedlist>
+
+ <para>A (PATRICIA) trie has some useful properties:</para>
+
+ <orderedlist>
+ <listitem><para>It can be configured to use large node fan-out, giving it
+ very efficient find performance (albeit at insertion
+ complexity and size).</para></listitem>
+
+ <listitem><para>It works well for common-prefix keys.</para></listitem>
+
+ <listitem><para>It can support efficiently queries such as which
+ keys match a certain prefix. This is sometimes useful in file
+ systems and routers, and for "type-ahead" aka predictive text matching
+ on mobile devices.</para></listitem>
+ </orderedlist>
+
+
+ </section>
+
+ <section xml:id="container.trie.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.trie.details.etraits">
+ <info><title>Element Access Traits</title></info>
+
+ <para>A trie inherently views its keys as sequences of elements.
+ For example, a trie can view a string as a sequence of
+ characters. A trie needs to map each of n elements to a
+ number in {0, n - 1}. For example, a trie can map a
+ character <varname>c</varname> to
+ <programlisting>static_cast&lt;size_t&gt;(c)</programlisting>.</para>
+
+ <para>Seemingly, then, a trie can assume that its keys support
+ (const) iterators, and that the <classname>value_type</classname> of this
+ iterator can be cast to a <classname>size_t</classname>. There are several
+ reasons, though, to decouple the mechanism by which the trie
+ accesses its keys' elements from the trie:</para>
+
+ <orderedlist>
+ <listitem><para>In some cases, the numerical value of an element is
+ inappropriate. Consider a trie storing DNA strings. It is
+ logical to use a trie with a fan-out of 5 = 1 + |{'A', 'C',
+ 'G', 'T'}|. This requires mapping 'T' to 3, though.</para></listitem>
+
+ <listitem><para>In some cases the keys' iterators are different than what
+ is needed. For example, a trie can be used to search for
+ common suffixes, by using strings'
+ <classname>reverse_iterator</classname>. As another example, a trie mapping
+ UNICODE strings would have a huge fan-out if each node would
+ branch on a UNICODE character; instead, one can define an
+ iterator iterating over 8-bit (or less) groups.</para></listitem>
+ </orderedlist>
+
+ <para>trie is,
+ consequently, parametrized by <classname>E_Access_Traits</classname> -
+ traits which instruct how to access sequences' elements.
+ <classname>string_trie_e_access_traits</classname>
+ is a traits class for strings. Each such traits define some
+ types, like:</para>
+ <programlisting>
+ typename E_Access_Traits::const_iterator
+ </programlisting>
+
+ <para>is a const iterator iterating over a key's elements. The
+ traits class must also define methods for obtaining an iterator
+ to the first and last element of a key.</para>
+
+ <para>The graphic below shows a
+ (PATRICIA) trie resulting from inserting the words: "I wish
+ that I could ever see a poem lovely as a trie" (which,
+ unfortunately, does not rhyme).</para>
+
+ <para>The leaf nodes contain values; each internal node contains
+ two <classname>typename E_Access_Traits::const_iterator</classname>
+ objects, indicating the maximal common prefix of all keys in
+ the sub-tree. For example, the shaded internal node roots a
+ sub-tree with leafs "a" and "as". The maximal common prefix is
+ "a". The internal node contains, consequently, to const
+ iterators, one pointing to <varname>'a'</varname>, and the other to
+ <varname>'s'</varname>.</para>
+
+ <figure>
+ <title>A PATRICIA trie</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_pat_trie.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A PATRICIA trie</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="container.trie.details.node">
+ <info><title>Node Invariants</title></info>
+
+ <para>Trie-based containers support node invariants, as do
+ tree-based containers. There are two minor
+ differences, though, which, unfortunately, thwart sharing them
+ sharing the same node-updating policies:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>A trie's <classname>Node_Update</classname> template-template
+ parameter is parametrized by <classname>E_Access_Traits</classname>, while
+ a tree's <classname>Node_Update</classname> template-template parameter is
+ parametrized by <classname>Cmp_Fn</classname>.</para></listitem>
+
+ <listitem><para>Tree-based containers store values in all nodes, while
+ trie-based containers (at least in this implementation) store
+ values in leafs.</para></listitem>
+ </orderedlist>
+
+ <para>The graphic below shows the scheme, as well as some predefined
+ policies (which are explained below).</para>
+
+ <figure>
+ <title>A trie and its update policy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_trie_node_updator_policy_cd.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A trie and its update policy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>This library offers the following pre-defined trie node
+ updating policies:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>trie_order_statistics_node_update</classname>
+ supports order statistics.
+ </para>
+ </listitem>
+
+ <listitem><para><classname>trie_prefix_search_node_update</classname>
+ supports searching for ranges that match a given prefix.</para></listitem>
+
+ <listitem><para><classname>null_node_update</classname>
+ is the null node updater.</para></listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="container.trie.details.split">
+ <info><title>Split and Join</title></info>
+ <para>Trie-based containers support split and join methods; the
+ rationale is equal to that of tree-based containers supporting
+ these methods.</para>
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- trie -->
+
+ <!-- list_update -->
+ <section xml:id="pbds.design.container.list">
+ <info><title>List</title></info>
+
+ <section xml:id="container.list.interface">
+ <info><title>Interface</title></info>
+
+ <para>The list-based container has the following declaration:</para>
+ <programlisting>
+ template&lt;typename Key,
+ typename Mapped,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+ typename Update_Policy = move_to_front_lu_policy&lt;&gt;,
+ typename Allocator = std::allocator&lt;char&gt; &gt;
+ class list_update;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>Key</classname> is the key type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Mapped</classname> is the mapped-policy.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Eq_Fn</classname> is a key equivalence functor.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Update_Policy</classname> is a policy updating positions in
+ the list based on access patterns. It is described in the
+ following subsection.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Allocator</classname> is an allocator type.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>A list-based associative container is a container that
+ stores elements in a linked-list. It does not order the elements
+ by any particular order related to the keys. List-based
+ containers are primarily useful for creating "multimaps". In fact,
+ list-based containers are designed in this library expressly for
+ this purpose.</para>
+
+ <para>List-based containers might also be useful for some rare
+ cases, where a key is encapsulated to the extent that only
+ key-equivalence can be tested. Hash-based containers need to know
+ how to transform a key into a size type, and tree-based containers
+ need to know if some key is larger than another. List-based
+ associative containers, conversely, only need to know if two keys
+ are equivalent.</para>
+
+ <para>Since a list-based associative container does not order
+ elements by keys, is it possible to order the list in some
+ useful manner? Remarkably, many on-line competitive
+ algorithms exist for reordering lists to reflect access
+ prediction. (See <xref linkend="biblio.motwani95random"/> and <xref linkend="biblio.andrew04mtf"/>).
+ </para>
+
+ </section>
+
+ <section xml:id="container.list.details">
+ <info><title>Details</title></info>
+ <para>
+ </para>
+ <section xml:id="container.list.details.ds">
+ <info><title>Underlying Data Structure</title></info>
+
+ <para>The graphic below shows a
+ simple list of integer keys. If we search for the integer 6, we
+ are paying an overhead: the link with key 6 is only the fifth
+ link; if it were the first link, it could be accessed
+ faster.</para>
+
+ <figure>
+ <title>A simple list</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_simple_list.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A simple list</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>List-update algorithms reorder lists as elements are
+ accessed. They try to determine, by the access history, which
+ keys to move to the front of the list. Some of these algorithms
+ require adding some metadata alongside each entry.</para>
+
+ <para>For example, in the graphic below label A shows the counter
+ algorithm. Each node contains both a key and a count metadata
+ (shown in bold). When an element is accessed (e.g. 6) its count is
+ incremented, as shown in label B. If the count reaches some
+ predetermined value, say 10, as shown in label C, the count is set
+ to 0 and the node is moved to the front of the list, as in label
+ D.
+ </para>
+
+ <figure>
+ <title>The counter algorithm</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_list_update.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>The counter algorithm</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ </section>
+
+ <section xml:id="container.list.details.policies">
+ <info><title>Policies</title></info>
+
+ <para>this library allows instantiating lists with policies
+ implementing any algorithm moving nodes to the front of the
+ list (policies implementing algorithms interchanging nodes are
+ unsupported).</para>
+
+ <para>Associative containers based on lists are parametrized by a
+ <classname>Update_Policy</classname> parameter. This parameter defines the
+ type of metadata each node contains, how to create the
+ metadata, and how to decide, using this metadata, whether to
+ move a node to the front of the list. A list-based associative
+ container object derives (publicly) from its update policy.
+ </para>
+
+ <para>An instantiation of <classname>Update_Policy</classname> must define
+ internally <classname>update_metadata</classname> as the metadata it
+ requires. Internally, each node of the list contains, besides
+ the usual key and data, an instance of <classname>typename
+ Update_Policy::update_metadata</classname>.</para>
+
+ <para>An instantiation of <classname>Update_Policy</classname> must define
+ internally two operators:</para>
+ <programlisting>
+ update_metadata
+ operator()();
+
+ bool
+ operator()(update_metadata &amp;);
+ </programlisting>
+
+ <para>The first is called by the container object, when creating a
+ new node, to create the node's metadata. The second is called
+ by the container object, when a node is accessed (
+ when a find operation's key is equivalent to the key of the
+ node), to determine whether to move the node to the front of
+ the list.
+ </para>
+
+ <para>The library contains two predefined implementations of
+ list-update policies. The first
+ is <classname>lu_counter_policy</classname>, which implements the
+ counter algorithm described above. The second is
+ <classname>lu_move_to_front_policy</classname>,
+ which unconditionally move an accessed element to the front of
+ the list. The latter type is very useful in this library,
+ since there is no need to associate metadata with each element.
+ (See <xref linkend="biblio.andrew04mtf"/>
+ </para>
+
+ </section>
+
+ <section xml:id="container.list.details.mapped">
+ <info><title>Use in Multimaps</title></info>
+
+ <para>In this library, there are no equivalents for the standard's
+ multimaps and multisets; instead one uses an associative
+ container mapping primary keys to secondary keys.</para>
+
+ <para>List-based containers are especially useful as associative
+ containers for secondary keys. In fact, they are implemented
+ here expressly for this purpose.</para>
+
+ <para>To begin with, these containers use very little per-entry
+ structure memory overhead, since they can be implemented as
+ singly-linked lists. (Arrays use even lower per-entry memory
+ overhead, but they are less flexible in moving around entries,
+ and have weaker invalidation guarantees).</para>
+
+ <para>More importantly, though, list-based containers use very
+ little per-container memory overhead. The memory overhead of an
+ empty list-based container is practically that of a pointer.
+ This is important for when they are used as secondary
+ associative-containers in situations where the average ratio of
+ secondary keys to primary keys is low (or even 1).</para>
+
+ <para>In order to reduce the per-container memory overhead as much
+ as possible, they are implemented as closely as possible to
+ singly-linked lists.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ List-based containers do not store internally the number
+ of values that they hold. This means that their <function>size</function>
+ method has linear complexity (just like <classname>std::list</classname>).
+ Note that finding the number of equivalent-key values in a
+ standard multimap also has linear complexity (because it must be
+ done, via <function>std::distance</function> of the
+ multimap's <function>equal_range</function> method), but usually with
+ higher constants.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Most associative-container objects each hold a policy
+ object (a hash-based container object holds a
+ hash functor). List-based containers, conversely, only have
+ class-wide policy objects.
+ </para>
+ </listitem>
+ </orderedlist>
+
+
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- list -->
+
+
+ <!-- priority_queue -->
+ <section xml:id="pbds.design.container.priority_queue">
+ <info><title>Priority Queue</title></info>
+
+ <section xml:id="container.priority_queue.interface">
+ <info><title>Interface</title></info>
+
+ <para>The priority queue container has the following
+ declaration:
+ </para>
+ <programlisting>
+ template&lt;typename Value_Type,
+ typename Cmp_Fn = std::less&lt;Value_Type&gt;,
+ typename Tag = pairing_heap_tag,
+ typename Allocator = std::allocator&lt;char &gt; &gt;
+ class priority_queue;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem><para><classname>Value_Type</classname> is the value type.</para></listitem>
+
+ <listitem><para><classname>Cmp_Fn</classname> is a value comparison functor</para></listitem>
+
+ <listitem><para><classname>Tag</classname> specifies which underlying data structure
+ to use.</para></listitem>
+
+ <listitem><para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The <classname>Tag</classname> parameter specifies which underlying
+ data structure to use. Instantiating it by<classname>pairing_heap_tag</classname>,<classname>binary_heap_tag</classname>,
+ <classname>binomial_heap_tag</classname>,
+ <classname>rc_binomial_heap_tag</classname>,
+ or <classname>thin_heap_tag</classname>,
+ specifies, respectively,
+ an underlying pairing heap (<xref linkend="biblio.fredman86pairing"/>),
+ binary heap (<xref linkend="biblio.clrs2001"/>),
+ binomial heap (<xref linkend="biblio.clrs2001"/>),
+ a binomial heap with a redundant binary counter (<xref linkend="biblio.maverik_lowerbounds"/>),
+ or a thin heap (<xref linkend="biblio.kt99fat_heaps"/>).
+ </para>
+
+ <para>
+ As mentioned in the tutorial,
+ <classname>__gnu_pbds::priority_queue</classname> shares most of the
+ same interface with <classname>std::priority_queue</classname>.
+ E.g. if <varname>q</varname> is a priority queue of type
+ <classname>Q</classname>, then <function>q.top()</function> will
+ return the "largest" value in the container (according to
+ <classname>typename
+ Q::cmp_fn</classname>). <classname>__gnu_pbds::priority_queue</classname>
+ has a larger (and very slightly different) interface than
+ <classname>std::priority_queue</classname>, however, since typically
+ <classname>push</classname> and <classname>pop</classname> are deemed
+ insufficient for manipulating priority-queues. </para>
+
+ <para>Different settings require different priority-queue
+ implementations which are described in later; see traits
+ discusses ways to differentiate between the different traits of
+ different implementations.</para>
+
+
+ </section>
+
+ <section xml:id="container.priority_queue.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.priority_queue.details.iterators">
+ <info><title>Iterators</title></info>
+
+ <para>There are many different underlying-data structures for
+ implementing priority queues. Unfortunately, most such
+ structures are oriented towards making <function>push</function> and
+ <function>top</function> efficient, and consequently don't allow efficient
+ access of other elements: for instance, they cannot support an efficient
+ <function>find</function> method. In the use case where it
+ is important to both access and "do something with" an
+ arbitrary value, one would be out of luck. For example, many graph algorithms require
+ modifying a value (typically increasing it in the sense of the
+ priority queue's comparison functor).</para>
+
+ <para>In order to access and manipulate an arbitrary value in a
+ priority queue, one needs to reference the internals of the
+ priority queue from some form of an associative container -
+ this is unavoidable. Of course, in order to maintain the
+ encapsulation of the priority queue, this needs to be done in a
+ way that minimizes exposure to implementation internals.</para>
+
+ <para>In this library the priority queue's <function>insert</function>
+ method returns an iterator, which if valid can be used for subsequent <function>modify</function> and
+ <function>erase</function> operations. This both preserves the priority
+ queue's encapsulation, and allows accessing arbitrary values (since the
+ returned iterators from the <function>push</function> operation can be
+ stored in some form of associative container).</para>
+
+ <para>Priority queues' iterators present a problem regarding their
+ invalidation guarantees. One assumes that calling
+ <function>operator++</function> on an iterator will associate it
+ with the "next" value. Priority-queues are
+ self-organizing: each operation changes what the "next" value
+ means. Consequently, it does not make sense that <function>push</function>
+ will return an iterator that can be incremented - this can have
+ no possible use. Also, as in the case of hash-based containers,
+ it is awkward to define if a subsequent <function>push</function> operation
+ invalidates a prior returned iterator: it invalidates it in the
+ sense that its "next" value is not related to what it
+ previously considered to be its "next" value. However, it might not
+ invalidate it, in the sense that it can be
+ de-referenced and used for <function>modify</function> and <function>erase</function>
+ operations.</para>
+
+ <para>Similarly to the case of the other unordered associative
+ containers, this library uses a distinction between
+ point-type and range type iterators. A priority queue's <classname>iterator</classname> can always be
+ converted to a <classname>point_iterator</classname>, and a
+ <classname>const_iterator</classname> can always be converted to a
+ <classname>point_const_iterator</classname>.</para>
+
+ <para>The following snippet demonstrates manipulating an arbitrary
+ value:</para>
+ <programlisting>
+ // A priority queue of integers.
+ priority_queue&lt;int &gt; p;
+
+ // Insert some values into the priority queue.
+ priority_queue&lt;int &gt;::point_iterator it = p.push(0);
+
+ p.push(1);
+ p.push(2);
+
+ // Now modify a value.
+ p.modify(it, 3);
+
+ assert(p.top() == 3);
+ </programlisting>
+
+
+ <para>It should be noted that an alternative design could embed an
+ associative container in a priority queue. Could, but most
+ probably should not. To begin with, it should be noted that one
+ could always encapsulate a priority queue and an associative
+ container mapping values to priority queue iterators with no
+ performance loss. One cannot, however, "un-encapsulate" a priority
+ queue embedding an associative container, which might lead to
+ performance loss. Assume, that one needs to associate each value
+ with some data unrelated to priority queues. Then using
+ this library's design, one could use an
+ associative container mapping each value to a pair consisting of
+ this data and a priority queue's iterator. Using the embedded
+ method would need to use two associative containers. Similar
+ problems might arise in cases where a value can reside
+ simultaneously in many priority queues.</para>
+
+ </section>
+
+
+ <section xml:id="container.priority_queue.details.d">
+ <info><title>Underlying Data Structure</title></info>
+
+ <para>There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the graphic below, in labels A1 and A2, label B, and label C.</para>
+
+ <figure>
+ <title>Underlying Priority-Queue Data-Structures.</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_different_underlying_dss.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Underlying Priority-Queue Data-Structures.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Roughly speaking, any value that is both pushed and popped
+ from a priority queue must incur a logarithmic expense (in the
+ amortized sense). Any priority queue implementation that would
+ avoid this, would violate known bounds on comparison-based
+ sorting (see <xref linkend="biblio.clrs2001"/> and <xref linkend="biblio.brodal96priority"/>).
+ </para>
+
+ <para>Most implementations do
+ not differ in the asymptotic amortized complexity of
+ <function>push</function> and <function>pop</function> operations, but they differ in
+ the constants involved, in the complexity of other operations
+ (e.g., <function>modify</function>), and in the worst-case
+ complexity of single operations. In general, the more
+ "structured" an implementation (i.e., the more internal
+ invariants it possesses) - the higher its amortized complexity
+ of <function>push</function> and <function>pop</function> operations.</para>
+
+ <para>This library implements different algorithms using a
+ single class: <classname>priority_queue</classname>.
+ Instantiating the <classname>Tag</classname> template parameter, "selects"
+ the implementation:</para>
+
+ <orderedlist>
+ <listitem><para>
+ Instantiating <classname>Tag = binary_heap_tag</classname> creates
+ a binary heap of the form in represented in the graphic with labels A1 or A2. The former is internally
+ selected by priority_queue
+ if <classname>Value_Type</classname> is instantiated by a primitive type
+ (e.g., an <type>int</type>); the latter is
+ internally selected for all other types (e.g.,
+ <classname>std::string</classname>). This implementations is relatively
+ unstructured, and so has good <classname>push</classname> and <classname>pop</classname>
+ performance; it is the "best-in-kind" for primitive
+ types, e.g., <type>int</type>s. Conversely, it has
+ high worst-case performance, and can support only linear-time
+ <function>modify</function> and <function>erase</function> operations.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ pairing_heap_tag</classname> creates a pairing heap of the form
+ in represented by label B in the graphic above. This
+ implementations too is relatively unstructured, and so has good
+ <function>push</function> and <function>pop</function>
+ performance; it is the "best-in-kind" for non-primitive types,
+ e.g., <classname>std:string</classname>s. It also has very good
+ worst-case <function>push</function> and
+ <function>join</function> performance (O(1)), but has high
+ worst-case <function>pop</function>
+ complexity.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ binomial_heap_tag</classname> creates a binomial heap of the
+ form repsented by label B in the graphic above. This
+ implementations is more structured than a pairing heap, and so
+ has worse <function>push</function> and <function>pop</function>
+ performance. Conversely, it has sub-linear worst-case bounds for
+ <function>pop</function>, e.g., and so it might be preferred in
+ cases where responsiveness is important.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ rc_binomial_heap_tag</classname> creates a binomial heap of the
+ form represented in label B above, accompanied by a redundant
+ counter which governs the trees. This implementations is
+ therefore more structured than a binomial heap, and so has worse
+ <function>push</function> and <function>pop</function>
+ performance. Conversely, it guarantees O(1)
+ <function>push</function> complexity, and so it might be
+ preferred in cases where the responsiveness of a binomial heap
+ is insufficient.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ thin_heap_tag</classname> creates a thin heap of the form
+ represented by the label B in the graphic above. This
+ implementations too is more structured than a pairing heap, and
+ so has worse <function>push</function> and
+ <function>pop</function> performance. Conversely, it has better
+ worst-case and identical amortized complexities than a Fibonacci
+ heap, and so might be more appropriate for some graph
+ algorithms.</para></listitem>
+ </orderedlist>
+
+ <para>Of course, one can use any order-preserving associative
+ container as a priority queue, as in the graphic above label C, possibly by creating an adapter class
+ over the associative container (much as
+ <classname>std::priority_queue</classname> can adapt <classname>std::vector</classname>).
+ This has the advantage that no cross-referencing is necessary
+ at all; the priority queue itself is an associative container.
+ Most associative containers are too structured to compete with
+ priority queues in terms of <function>push</function> and <function>pop</function>
+ performance.</para>
+
+
+
+ </section>
+
+ <section xml:id="container.priority_queue.details.traits">
+ <info><title>Traits</title></info>
+
+ <para>It would be nice if all priority queues could
+ share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
+ two binary heaps might throw an exception (not corrupt
+ any of the heaps on which it operates), but joining two pairing
+ heaps is exception free.</para>
+
+ <para>Tags and traits are very useful for manipulating generic
+ types. <classname>__gnu_pbds::priority_queue</classname>
+ publicly defines <classname>container_category</classname> as one of the tags. Given any
+ container <classname>Cntnr</classname>, the tag of the underlying
+ data structure can be found via <classname>typename
+ Cntnr::container_category</classname>; this is one of the possible tags shown in the graphic below.
+ </para>
+
+ <figure>
+ <title>Priority-Queue Data-Structure Tags.</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_tag_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Priority-Queue Data-Structure Tags.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <classname>Cntnr</classname>, then <programlisting>__gnu_pbds::container_traits&lt;Cntnr&gt;</programlisting>
+ is a traits class identifying the properties of the
+ container.</para>
+
+ <para>To find if a container might throw if two of its objects are
+ joined, one can use
+ <programlisting>
+ container_traits&lt;Cntnr&gt;::split_join_can_throw
+ </programlisting>
+ </para>
+
+ <para>
+ Different priority-queue implementations have different invalidation guarantees. This is
+ especially important, since there is no way to access an arbitrary
+ value of priority queues except for iterators. Similarly to
+ associative containers, one can use
+ <programlisting>
+ container_traits&lt;Cntnr&gt;::invalidation_guarantee
+ </programlisting>
+ to get the invalidation guarantee type of a priority queue.</para>
+
+ <para>It is easy to understand from the graphic above, what <classname>container_traits&lt;Cntnr&gt;::invalidation_guarantee</classname>
+ will be for different implementations. All implementations of
+ type represented by label B have <classname>point_invalidation_guarantee</classname>:
+ the container can freely internally reorganize the nodes -
+ range-type iterators are invalidated, but point-type iterators
+ are always valid. Implementations of type represented by labels A1 and A2 have <classname>basic_invalidation_guarantee</classname>:
+ the container can freely internally reallocate the array - both
+ point-type and range-type iterators might be invalidated.</para>
+
+ <para>
+ This has major implications, and constitutes a good reason to avoid
+ using binary heaps. A binary heap can perform <function>modify</function>
+ or <function>erase</function> efficiently given a valid point-type
+ iterator. However, in order to supply it with a valid point-type
+ iterator, one needs to iterate (linearly) over all
+ values, then supply the relevant iterator (recall that a
+ range-type iterator can always be converted to a point-type
+ iterator). This means that if the number of <function>modify</function> or
+ <function>erase</function> operations is non-negligible (say
+ super-logarithmic in the total sequence of operations) - binary
+ heaps will perform badly.
+ </para>
+
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- priority_queue -->
+
+
+
+ </section> <!-- container -->
+
+ </section> <!-- design -->
+
+
+
+ <!-- S04: Test -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="test_policy_data_structures.xml">
+ </xi:include>
+
+ <!-- S05: Reference/Acknowledgments -->
+ <section xml:id="pbds.ack">
+ <info><title>Acknowledgments</title></info>
+ <?dbhtml filename="policy_data_structures_ack.html"?>
+
+ <para>
+ Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+ Laboratories), and Benjamin Kosnik (Red Hat).
+ </para>
+
+ <para>
+ This library was partially written at IBM's Haifa Research Labs.
+ It is based heavily on policy-based design and uses many useful
+ techniques from Modern C++ Design: Generic Programming and Design
+ Patterns Applied by Andrei Alexandrescu.
+ </para>
+
+ <para>
+ Two ideas are borrowed from the SGI-STL implementation:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ The prime-based resize policies use a list of primes taken from
+ the SGI-STL implementation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The red-black trees contain both a root node and a header node
+ (containing metadata), connected in a way that forward and
+ reverse iteration can be performed efficiently.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ Some test utilities borrow ideas from
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/doc/libs/release/libs/timer/index.html">boost::timer</link>.
+ </para>
+
+ <para>
+ We would like to thank Scott Meyers for useful comments (without
+ attributing to him any flaws in the design or implementation of the
+ library).
+ </para>
+ <para>We would like to thank Matt Austern for the suggestion to
+ include tries.</para>
+ </section>
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="policy_data_structures_biblio.xml">
+</xi:include>
+
+</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml b/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
new file mode 100644
index 0000000000..49cacf0340
--- /dev/null
+++ b/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
@@ -0,0 +1,1452 @@
+
+<!-- Policy Based Data Structures: Biblio -->
+<bibliography xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="pbds.biblio" xreflabel="Bibliography">
+ <info><title>Bibliography</title></info>
+
+ <!-- 01 -->
+ <biblioentry xml:id="biblio.abrahams97exception">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf">
+ STL Exception Handling Contract
+ </link>
+ </title>
+ <date>1997</date>
+
+ <author>
+ <personname>
+ <firstname>
+ Dave
+ </firstname>
+ <surname>
+ Abrahams
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ ISO SC22/WG21
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 02 -->
+ <biblioentry xml:id="biblio.alexandrescu01modern">
+ <title>
+ Modern C++ Design: Generic Programming and Design Patterns Applied
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Andrei
+ </firstname>
+ <surname>
+ Alexandrescu
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 03 -->
+ <biblioentry xml:id="biblio.andrew04mtf">
+ <title>
+ MTF, Bit, and COMB: A Guide to Deterministic and Randomized
+ Algorithms for the List Update Problem
+ </title>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ K.
+ </firstname>
+ <surname>
+ Andrew
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Gleich
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+ <!-- 04 -->
+ <biblioentry xml:id="biblio.austern00noset">
+ <title>
+ Why You Shouldn't Use set - and What You Should Use Instead
+ </title>
+ <date>
+ April, 2000
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Matthew
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ C++ Report
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 05 -->
+ <biblioentry xml:id="biblio.austern01htprop">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2001/n1326.html">
+ A Proposal to Add Hashtables to the Standard Library
+ </link>
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Matthew
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ ISO SC22/WG21
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 06 -->
+ <biblioentry xml:id="biblio.austern98segmentedit">
+ <title>
+ Segmented iterators and hierarchical algorithms
+ </title>
+ <date>
+ April, 1998
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Matthew
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Generic Programming
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 07 -->
+ <biblioentry xml:id="biblio.dawestimer">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.boost.org/doc/libs/release/libs/timer/">
+ Boost Timer Library
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>
+ Beeman
+ </firstname>
+ <surname>
+ Dawes
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 08 -->
+ <biblioentry xml:id="biblio.clearypool">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.boost.org/doc/libs/release/libs/pool/">
+ Boost Pool Library
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>
+ Stephen
+ </firstname>
+ <surname>
+ Cleary
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 09 -->
+ <biblioentry xml:id="biblio.maddocktraits">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.boost.org/doc/libs/release/libs/type_traits/">
+ Boost Type Traits Library
+ </link>
+ </title>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ Maddock
+ </firstname>
+ <surname>
+ John
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ Stephen
+ </firstname>
+ <surname>
+ Cleary
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 10 -->
+ <biblioentry xml:id="biblio.brodal96priority">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="https://dl.acm.org/citation.cfm?id=313883">
+ Worst-case efficient priority queues
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>
+ Gerth
+ </firstname>
+ <surname>
+ Stolting Brodal
+ </surname>
+ </personname>
+ </author>
+
+ </biblioentry>
+
+ <!-- 11 -->
+ <biblioentry xml:id="biblio.bulkamayheweff">
+ <title>
+ Efficient C++ Programming Techniques
+ </title>
+ <date>
+ 1997
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Bulka
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Mayhew
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 12 -->
+ <biblioentry xml:id="biblio.clrs2001">
+ <title>
+ Introduction to Algorithms, 2nd edition
+ </title>
+ <date>
+ 2001
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ T. H.
+ </firstname>
+ <surname>
+ Cormen
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ C. E.
+ </firstname>
+ <surname>
+ Leiserson
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ R. L.
+ </firstname>
+ <surname>
+ Rivest
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ C.
+ </firstname>
+ <surname>
+ Stein
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ MIT Press
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 13 -->
+ <biblioentry xml:id="biblio.dubhashi98neg">
+ <title>
+ Balls and bins: A study in negative dependence
+ </title>
+ <date>
+ 1998
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Dubashi
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Ranjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ Random Structures and Algorithms 13
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 14 -->
+ <biblioentry xml:id="biblio.fagin79extendible">
+ <title>
+ Extendible hashing - a fast access method for dynamic files
+ </title>
+ <date>
+ 1979
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Fagin
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ J.
+ </firstname>
+ <surname>
+ Nievergelt
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ N.
+ </firstname>
+ <surname>
+ Pippenger
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ H. R.
+ </firstname>
+ <surname>
+ Strong
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ ACM Trans. Database Syst. 4
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+
+ <!-- 15 -->
+ <biblioentry xml:id="biblio.filliatre2000ptset">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://cristal.inria.fr/~frisch/icfp06_contest/advtr/applyOmatic/ptset.ml">
+ Ptset: Sets of integers implemented as Patricia trees
+ </link>
+ </title>
+
+ <date>
+ 2000
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Jean-Christophe
+ </firstname>
+ <surname>
+ Filliatre
+ </surname>
+ </personname>
+ </author>
+ </biblioentry>
+
+
+
+ <!-- 16 -->
+ <biblioentry xml:id="biblio.fredman86pairing">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf">
+ The pairing heap: a new form of self-adjusting heap
+ </link>
+ </title>
+ <date>
+ 1986
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ M. L.
+ </firstname>
+ <surname>
+ Fredman
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Sedgewick
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ D. D.
+ </firstname>
+ <surname>
+ Sleator
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R. E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+
+ <!-- 17 -->
+ <biblioentry xml:id="biblio.gof">
+ <title>
+ Design Patterns - Elements of Reusable Object-Oriented Software
+ </title>
+ <date>
+ 1995
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ E.
+ </firstname>
+ <surname>
+ Gamma
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Helm
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Johnson
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ J.
+ </firstname>
+ <surname>
+ Vlissides
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 18 -->
+ <biblioentry xml:id="biblio.garg86order">
+ <title>
+ Order-preserving key transformations
+ </title>
+ <date>
+ 1986
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ A. K.
+ </firstname>
+ <surname>
+ Garg
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ C. C.
+ </firstname>
+ <surname>
+ Gotlieb
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ Trans. Database Syst. 11
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 19 -->
+ <biblioentry xml:id="biblio.hyslop02making">
+ <title>
+ Making a real hash of things
+ </title>
+ <date>
+ May 2002
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ J.
+ </firstname>
+ <surname>
+ Hyslop
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ Herb
+ </firstname>
+ <surname>
+ Sutter
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ C++ Report
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 20 -->
+ <biblioentry xml:id="biblio.jossutis01stl">
+ <title>
+ The C++ Standard Library - A Tutorial and Reference
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ N. M.
+ </firstname>
+ <surname>
+ Jossutis
+ </surname>
+ </personname>
+ </author>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 21 -->
+ <biblioentry xml:id="biblio.kt99fat_heaps">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cs.princeton.edu/research/techreps/TR-597-99">
+ New Heap Data Structures
+ </link>
+ </title>
+ <date>
+ 1999
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ Haim
+ </firstname>
+ <surname>
+ Kaplan
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ Robert E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+
+ <!-- 22 -->
+ <biblioentry xml:id="biblio.kleft00sets">
+ <title>
+ Are Set Iterators Mutable or Immutable?
+ </title>
+ <date>
+ October 2000
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ Angelika
+ </firstname>
+ <surname>
+ Langer
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ Klaus
+ </firstname>
+ <surname>
+ Kleft
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ C/C++ Users Jornal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 23 -->
+ <biblioentry xml:id="biblio.knuth98sorting">
+ <title>
+ The Art of Computer Programming - Sorting and Searching
+ </title>
+ <date>
+ 1998
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ D. E.
+ </firstname>
+ <surname>
+ Knuth
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 24 -->
+ <biblioentry xml:id="biblio.liskov98data">
+ <title>
+ Data abstraction and hierarchy
+ </title>
+ <date>
+ May 1998
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ B.
+ </firstname>
+ <surname>
+ Liskov
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ SIGPLAN Notices 23
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 25 -->
+ <biblioentry xml:id="biblio.litwin80lh">
+ <title>
+ Linear hashing: A new tool for file and table addressing
+ </title>
+ <date>
+ June 1980
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ W.
+ </firstname>
+ <surname>
+ Litwin
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Proceedings of International Conference on Very Large Data Bases
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 26 -->
+ <biblioentry xml:id="biblio.maverik_lowerbounds">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/">
+ Deamortization - Part 2: Binomial Heaps
+ </link>
+ </title>
+ <date>
+ 2005
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Maverik
+ </firstname>
+ <surname>
+ Woo
+ </surname>
+ </personname>
+ </author>
+ </biblioentry>
+
+ <!-- 27 -->
+ <biblioentry xml:id="biblio.meyers96more">
+ <title>
+ More Effective C++: 35 New Ways to Improve Your Programs and Designs
+ </title>
+ <date>
+ 1996
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 28 -->
+ <biblioentry xml:id="biblio.meyers00nonmember">
+ <title>
+ How Non-Member Functions Improve Encapsulation
+ </title>
+ <date>
+ 2000
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ C/C++ Users Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 29 -->
+ <biblioentry xml:id="biblio.meyers01stl">
+ <title>
+ Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 30 -->
+ <biblioentry xml:id="biblio.meyers02both">
+ <title>
+ Class Template, Member Template - or Both?
+ </title>
+ <date>
+ 2003
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ C/C++ Users Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 31 -->
+ <biblioentry xml:id="biblio.motwani95random">
+ <title>
+ Randomized Algorithms
+ </title>
+ <date>
+ 2003
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Motwani
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ P.
+ </firstname>
+ <surname>
+ Raghavan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Cambridge University Press
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 32 -->
+ <biblioentry xml:id="biblio.mscom">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="https://www.microsoft.com/com/">
+ COM: Component Model Object Technologies
+ </link>
+ </title>
+ <publisher>
+ <publishername>
+ Microsoft
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 33 -->
+ <biblioentry xml:id="biblio.musser95rationale">
+ <title>
+ Rationale for Adding Hash Tables to the C++ Standard Template Library
+ </title>
+ <date>
+ 1995
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ David R.
+ </firstname>
+ <surname>
+ Musser
+ </surname>
+ </personname>
+ </author>
+
+ </biblioentry>
+
+ <!-- 35 -->
+ <biblioentry xml:id="biblio.musser96stltutorial">
+ <title>
+ STL Tutorial and Reference Guide
+ </title>
+ <date>
+ 1996
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ David R.
+ </firstname>
+ <surname>
+ Musser
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ A.
+ </firstname>
+ <surname>
+ Saini
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+
+ </biblioentry>
+
+
+ <!-- 36 -->
+ <biblioentry xml:id="biblio.nelson96stlpq">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://marknelson.us/1996/01/01/priority-queues/">Priority Queues and the STL
+ </link>
+ </title>
+ <date>
+ January 1996
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Mark
+ </firstname>
+ <surname>
+ Nelson
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Dr. Dobbs Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 37 -->
+ <biblioentry xml:id="biblio.okasaki98mereable">
+ <title>
+ Fast mergeable integer maps
+ </title>
+ <date>
+ September 1998
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ C.
+ </firstname>
+ <surname>
+ Okasaki
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ A.
+ </firstname>
+ <surname>
+ Gill
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ In Workshop on ML
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 38 -->
+ <biblioentry xml:id="biblio.sgi_stl">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.sgi.com/tech/stl/">
+ Standard Template Library Programmer's Guide
+ </link>
+ </title>
+ <author>
+ <personname>
+ <firstname>
+ Matt
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ SGI
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 39 -->
+ <biblioentry xml:id="biblio.select_man">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html">
+ select
+ </link>
+ </title>
+ </biblioentry>
+
+
+ <!-- 40 -->
+ <biblioentry xml:id="biblio.sleator84amortized">
+ <title>
+ Amortized Efficiency of List Update Problems
+ </title>
+ <date>
+ 1984
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D. D.
+ </firstname>
+ <surname>
+ Sleator
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ R. E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ ACM Symposium on Theory of Computing
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 41 -->
+ <biblioentry xml:id="biblio.sleator85self">
+ <title>
+ Self-Adjusting Binary Search Trees
+ </title>
+ <date>
+ 1985
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D. D.
+ </firstname>
+ <surname>
+ Sleator
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ R. E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ ACM Symposium on Theory of Computing
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 42 -->
+ <biblioentry xml:id="biblio.stepanov94standard">
+ <title>
+ The Standard Template Library
+ </title>
+ <date>
+ 1984
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ A. A.
+ </firstname>
+ <surname>
+ Stepanov
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ M.
+ </firstname>
+ <surname>
+ Lee
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+ <!-- 43 -->
+ <biblioentry xml:id="biblio.stroustrup97cpp">
+ <title>
+ The C++ Programming Langugage
+ </title>
+ <date>
+ 1997
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Bjarne
+ </firstname>
+ <surname>
+ Stroustrup
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 44 -->
+ <biblioentry xml:id="biblio.vandevoorde2002cpptemplates">
+ <title>
+ C++ Templates: The Complete Guide
+ </title>
+ <date>
+ 2002
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Vandevoorde
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ N. M.
+ </firstname>
+ <surname>
+ Josuttis
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 45 -->
+ <biblioentry xml:id="biblio.wickland96thirty">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip">
+ Thirty Years Among the Dead
+ </link>
+ </title>
+ <date>
+ 1996
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ C. A.
+ </firstname>
+ <surname>
+ Wickland
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ National Psychological Institute
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+</bibliography>
diff --git a/libstdc++-v3/doc/xml/manual/prerequisites.xml b/libstdc++-v3/doc/xml/manual/prerequisites.xml
index 0a41c44ea7..078813bf94 100644
--- a/libstdc++-v3/doc/xml/manual/prerequisites.xml
+++ b/libstdc++-v3/doc/xml/manual/prerequisites.xml
@@ -57,9 +57,9 @@
<listitem>
<para>
- If gcc 3.1.0 or later on is being used on linux, an attempt
+ If GCC 3.1.0 or later on is being used on GNU/Linux, an attempt
will be made to use "C" library functionality necessary for
- C++ named locale support. For gcc 4.6.0 and later, this
+ C++ named locale support. For GCC 4.6.0 and later, this
means that glibc 2.3 or later is required.
</para>
@@ -110,32 +110,12 @@ zh_TW BIG5
<itemizedlist>
<listitem>
<para>install all locales</para>
- <itemizedlist>
- <listitem>
- <para>with RedHat Linux:
- </para>
- <para> <code> export LC_ALL=C </code>
- </para>
- <para> <code> rpm -e glibc-common --nodeps </code>
- </para>
- <para>
- <code> rpm -i --define "_install_langs all"
- glibc-common-2.2.5-34.i386.rpm
- </code>
- </para>
- </listitem>
- <listitem>
- <para>
- Instructions for other operating systems solicited.
- </para>
- </listitem>
- </itemizedlist>
</listitem>
<listitem>
<para>install just the necessary locales</para>
<itemizedlist>
<listitem>
- <para>with Debian Linux:</para>
+ <para>with Debian GNU/Linux:</para>
<para> Add the above list, as shown, to the file
<code>/etc/locale.gen</code> </para>
<para> run <code>/usr/sbin/locale-gen</code> </para>
diff --git a/libstdc++-v3/doc/xml/manual/profile_mode.xml b/libstdc++-v3/doc/xml/manual/profile_mode.xml
index cb4db6732a..9b841b9486 100644
--- a/libstdc++-v3/doc/xml/manual/profile_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/profile_mode.xml
@@ -1401,7 +1401,7 @@ foo.cc:1: advice: Change "list" to "forward_list".
</para></listitem>
<listitem><para><emphasis>Fundamentals:</emphasis>
See papers:
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://portal.acm.org/citation.cfm?doid=1065944.1065981">
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://dl.acm.org/citation.cfm?doid=1065944.1065981">
A framework for adaptive algorithm selection in STAPL</link> and
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227">
Optimizing Sorting with Machine Learning Algorithms</link>.
@@ -1597,7 +1597,7 @@ the allocation sequence or switching to a structure conscious allocator.
Keep a shadow for each container. Record iterator dereferences and
container member accesses. Issue advice for elements referenced by
multiple threads.
- See paper: <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://portal.acm.org/citation.cfm?id=207110.207148">
+ See paper: <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://dl.acm.org/citation.cfm?id=207110.207148">
The LRPD test: speculative run-time parallelization of loops with
privatization and reduction parallelization</link>.
</para></listitem>
diff --git a/libstdc++-v3/doc/xml/manual/shared_ptr.xml b/libstdc++-v3/doc/xml/manual/shared_ptr.xml
index 4ef5f72b6a..55aee3cee8 100644
--- a/libstdc++-v3/doc/xml/manual/shared_ptr.xml
+++ b/libstdc++-v3/doc/xml/manual/shared_ptr.xml
@@ -33,14 +33,6 @@ and implements shared ownership semantics.
</para>
<para>
- At the time of writing the C++0x working paper doesn't mention how
- threads affect shared_ptr, but it is likely to follow the existing
- practice set by <classname>boost::shared_ptr</classname>. The
- shared_ptr in libstdc++ is derived from Boost's, so the same rules
- apply.
- </para>
-
- <para>
</para>
</section>
@@ -103,13 +95,13 @@ until the last weak reference is dropped.
<term><classname>_Sp_counted_base_impl&lt;Ptr, Deleter, Lp&gt;</classname></term>
<listitem>
<para>
-Inherits from _Sp_counted_base and stores a pointer of type <type>Ptr</type>
-and a deleter of type <code>Deleter</code>. <code>_Sp_deleter</code> is
+Inherits from _Sp_counted_base and stores a pointer of type <code>Ptr</code>
+and a deleter of type <code>Deleter</code>. <classname>_Sp_deleter</classname> is
used when the user doesn't supply a custom deleter. Unlike Boost's, this
default deleter is not "checked" because GCC already issues a warning if
<function>delete</function> is used with an incomplete type.
-This is the only derived type used by <classname>shared_ptr&lt;Ptr&gt;</classname>
-and it is never used by <classname>shared_ptr</classname>, which uses one of
+This is the only derived type used by <classname>tr1::shared_ptr&lt;Ptr&gt;</classname>
+and it is never used by <classname>std::shared_ptr</classname>, which uses one of
the following types, depending on how the shared_ptr is constructed.
</para>
</listitem>
@@ -157,21 +149,21 @@ that simplifies the implementation slightly.
</variablelist>
- </section>
-
- <section><info><title>Thread Safety</title></info>
-
-
<para>
-C++0x-only features are: rvalue-ref/move support, allocator support,
+C++11-only features are: rvalue-ref/move support, allocator support,
aliasing constructor, make_shared &amp; allocate_shared. Additionally,
the constructors taking <classname>auto_ptr</classname> parameters are
-deprecated in C++0x mode.
+deprecated in C++11 mode.
</para>
+
+ </section>
+
+ <section><info><title>Thread Safety</title></info>
+
<para>
The
-<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety">Thread
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety">Thread
Safety</link> section of the Boost shared_ptr documentation says "shared_ptr
objects offer the same level of thread safety as built-in types."
The implementation must ensure that concurrent updates to separate shared_ptr
@@ -251,7 +243,7 @@ available policies are:
<orderedlist>
<listitem>
<para>
- <type>_S_Atomic</type>
+ <constant>_S_Atomic</constant>
</para>
<para>
Selected when GCC supports a builtin atomic compare-and-swap operation
@@ -264,7 +256,7 @@ synchronisation.
<listitem>
<para>
- <type>_S_Mutex</type>
+ <constant>_S_Mutex</constant>
</para>
<para>
The _Sp_counted_base specialization for this policy contains a mutex,
@@ -275,7 +267,7 @@ builtins aren't available so explicit memory barriers are needed in places.
<listitem>
<para>
- <type>_S_Single</type>
+ <constant>_S_Single</constant>
</para>
<para>
This policy uses a non-reentrant add_ref_lock() with no locking. It is
@@ -293,32 +285,6 @@ used when libstdc++ is built without <literal>--enable-threads</literal>.
</para>
</section>
- <section><info><title>Dual C++0x and TR1 Implementation</title></info>
-
-
-<para>
-The interface of <classname>tr1::shared_ptr</classname> was extended for C++0x
-with support for rvalue-references and the other features from N2351.
-The <classname>_Sp_counted_base</classname> base class is implemented in
-<filename>tr1/boost_sp_shared_count.h</filename> and is common to the TR1
-and C++0x versions of <classname>shared_ptr</classname>.
-</para>
-
-<para>
-The classes derived from <classname>_Sp_counted_base</classname> (see Class Hierarchy
-above) and <classname>__shared_count</classname> are implemented separately for C++0x
-and TR1, in <filename>bits/shared_ptr.h</filename> and
-<filename>tr1/shared_ptr.h</filename> respectively.
-</para>
-
-<para>
-The TR1 implementation is considered relatively stable, so is unlikely to
-change unless bug fixes require it. If the code that is common to both
-C++0x and TR1 modes needs to diverge further then it might be necessary to
-duplicate <classname>_Sp_counted_base</classname> and only make changes to
-the C++0x version.
-</para>
-</section>
<section><info><title>Related functions and classes</title></info>
@@ -332,9 +298,9 @@ the C++0x version.
<para>
As noted in N2351, these functions can be implemented non-intrusively using
the alias constructor. However the aliasing constructor is only available
-in C++0x mode, so in TR1 mode these casts rely on three non-standard
+in C++11 mode, so in TR1 mode these casts rely on three non-standard
constructors in shared_ptr and __shared_ptr.
-In C++0x mode these constructors and the related tag types are not needed.
+In C++11 mode these constructors and the related tag types are not needed.
</para>
</listitem>
</varlistentry>
@@ -385,34 +351,6 @@ be private.
</section>
-<!--- XXX
- <listitem>
- <type>_Sp_counted_base&lt;Lp&gt;</type>
- <para>
-The base of the hierarchy is parameterized on the lock policy alone.
-_Sp_counted_base doesn't depend on the type of pointer being managed,
-it only maintains the reference counts and calls virtual functions when
-the counts drop to zero. The managed object is destroyed when the last
-strong reference is dropped, but the _Sp_counted_base itself must exist
-until the last weak reference is dropped.
- </para>
- </listitem>
-
- <listitem>
- <type>_Sp_counted_base_impl&lt;Ptr, Deleter, Lp&gt;</type>
- <para>
-Inherits from _Sp_counted_base and stores a pointer of type <code>Ptr</code>
-and a deleter of type <code>Deleter</code>. <code>_Sp_deleter</code> is
-used when the user doesn't supply a custom deleter. Unlike Boost's, this
-default deleter is not "checked" because GCC already issues a warning if
-<code>delete</code> is used with an incomplete type.
-This is the only derived type used by <code>tr1::shared_ptr&lt;Ptr&gt;</code>
-and it is never used by <code>std::shared_ptr</code>, which uses one of
-the following types, depending on how the shared_ptr is constructed.
- </para>
- </listitem>
--->
-
<section xml:id="shared_ptr.using"><info><title>Use</title></info>
@@ -431,7 +369,7 @@ the following types, depending on how the shared_ptr is constructed.
<para>
The <emphasis><classname>shared_ptr</classname> atomic access</emphasis>
- clause in the C++0x working draft is not implemented in GCC.
+ clause in the C++11 standard is not implemented in GCC.
</para>
<para>
@@ -445,7 +383,7 @@ the following types, depending on how the shared_ptr is constructed.
<para>
Unlike Boost, this implementation does not use separate classes
for the pointer+deleter and pointer+deleter+allocator cases in
- C++0x mode, combining both into _Sp_counted_deleter and using
+ C++11 mode, combining both into _Sp_counted_deleter and using
<classname>allocator</classname> when the user doesn't specify
an allocator. If it was found to be beneficial an additional
class could easily be added. With the current implementation,
@@ -495,44 +433,51 @@ the following types, depending on how the shared_ptr is constructed.
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm">
Improving shared_ptr for C++0x, Revision 2
- </citetitle>
+ </link>
+ </title>
+
<subtitle>
N2351
</subtitle>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html">
C++ Standard Library Active Issues List
- </citetitle>
+ </link>
+ </title>
+
<subtitle>
N2456
</subtitle>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">
Working Draft, Standard for Programming Language C++
- </citetitle>
+ </link>
+ </title>
<subtitle>
N2461
</subtitle>
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://boost.org/libs/smart_ptr/shared_ptr.htm" class="uri">shared_ptr
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://boost.org/libs/smart_ptr/shared_ptr.htm">
Boost C++ Libraries documentation, shared_ptr
- </citetitle>
+ </link>
+ </title>
+
<subtitle>
N2461
</subtitle>
diff --git a/libstdc++-v3/doc/xml/manual/spine.xml b/libstdc++-v3/doc/xml/manual/spine.xml
index 808ca0341c..2d4bc6f1d0 100644
--- a/libstdc++-v3/doc/xml/manual/spine.xml
+++ b/libstdc++-v3/doc/xml/manual/spine.xml
@@ -1,22 +1,151 @@
-<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual-index">
+<book xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual" xreflabel="Manual">
<?dbhtml dir="manual"?>
-<?dbhtml filename="spine.html"?>
+<?dbhtml filename="index.html"?>
<title>The GNU C++ Library Manual</title>
<info>
<copyright>
+ <year>2000</year>
+ <year>2001</year>
+ <year>2002</year>
+ <year>2003</year>
+ <year>2004</year>
+ <year>2005</year>
+ <year>2006</year>
+ <year>2007</year>
+ <year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
+ <year>2012</year>
<holder>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>
</copyright>
- <legalnotice>
- <para>
- <link linkend="manual.intro.status.license">License</link>
- </para>
- </legalnotice>
+
+<authorgroup version="5.0">
+
+<!--
+ <author>
+ <firstname>Benjamin</firstname>
+ <surname>Kosnik</surname>
+
+ <affiliation>
+ <shortaffil>Red Hat</shortaffil>
+ <orgname>Red Hat, Inc.</orgname>
+ <address>
+ <email>libstdc++@gcc.gnu.org</email>
+ </address>
+ </affiliation>
+
+ <authorblurb>
+ <para>
+ </para>
+ </authorblurb>
+ </author>
+-->
+
+ <author><personname><firstname/><surname/></personname><personblurb>
+ <para>
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Paolo</firstname><surname>Carlini</surname></personname><personblurb>
+ <para>
+ TR1, LWG Active, Closed, Defects lists.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Phil</firstname><surname>Edwards</surname></personname><personblurb>
+ <para>
+ Originating author, started HOWTO and FAQ, worked on sections
+ Demangling, Macros, Strings, Iterators, Backwards
+ Compatibility, SGI Extensions, Configure, Build, Install.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Doug</firstname><surname>Gregor</surname></personname><personblurb>
+ <para>
+ Debug Mode, TR1 function objects
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname><personblurb>
+ <para>
+ Allocators, ABI, API evolution and deprecation history,
+ Backwards Compatibility, Thread, Debug Support, Locales,
+ Facets, Parallel Mode, Headers, Namespaces, Construction and
+ Structure, Using Exceptions, DocBook conversion and layout.
+ </para>
+ </personblurb></author>
+
+
+ <author><personname><firstname>Dhruv</firstname><surname>Matani</surname></personname><personblurb>
+ <para>
+ bitmap_allocator
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Jason</firstname><surname>Merrill</surname></personname><personblurb>
+ <para>
+ License, __verbose_terminate_handler
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Mark</firstname><surname>Mitchell</surname></personname><personblurb>
+ <para>
+ Porting
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Nathan</firstname><surname>Myers</surname></personname><personblurb>
+ <para>
+ Referenced counted string, C++1998 implementation status.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Felix</firstname><surname>Natter</surname></personname><personblurb>
+ <para>
+ Namespace composition, Backwards Compatibility.
+ </para>
+ </personblurb></author>
+
+
+ <author><personname><firstname>Stefan</firstname><surname>Olsson</surname></personname><personblurb>
+ <para>
+ mt_allocator
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Silvius</firstname><surname>Rus</surname></personname><personblurb>
+ <para>
+ Profile mode
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname><personblurb>
+ <para>
+ Parallel mode
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Ami</firstname><surname>Tavory</surname></personname><personblurb>
+ <para>
+ Policy Based Data Structures, Associative Containers, Unordered
+ Containers.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Jonathan</firstname><surname>Wakely</surname></personname><personblurb>
+ <para>
+ shared_ptr, markup editing and styling
+ </para>
+ </personblurb></author>
+
+</authorgroup>
+
</info>
<!-- Part 01 : Intro -->
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx200x.xml b/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
deleted file mode 100644
index 3e4be8fcaf..0000000000
--- a/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
+++ /dev/null
@@ -1,2628 +0,0 @@
-<section xmlns="http://docbook.org/ns/docbook" version="5.0"
- xml:id="status.iso.200x" xreflabel="Status C++ 200x">
-<?dbhtml filename="status_iso_cxx200x.html"?>
-
-<info><title>C++ 200x</title>
- <keywordset>
- <keyword>
- ISO C++
- </keyword>
- <keyword>
- 200x
- </keyword>
- </keywordset>
-</info>
-
-<para>
-This table is based on the table of contents of ISO/IEC
-JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11
-Final Draft International Standard, Standard for Programming Language C++
-</para>
-
-<para>
-In this implementation <literal>-std=gnu++0x</literal> or
-<literal>-std=c++0x</literal> flags must be used to enable language
-and library
-features. See <link linkend="manual.intro.using.flags">dialect</link>
-options. The pre-defined symbol
-<constant>__GXX_EXPERIMENTAL_CXX0X__</constant> is used to check for the
-presence of the required flag.
-</para>
-
-<para>
-This page describes the C++0x support in the GCC 4.6 release series.
-</para>
-
-<!-- Status is Yes or No, Broken/Partial-->
-<!--
- Yes
-
- No
- <?dbhtml bgcolor="#C8B0B0" ?>
- Broken/Partial
- <?dbhtml bgcolor="#B0B0B0" ?>
--->
-<table frame="all">
-<title>C++ 200x Implementation Status</title>
-
-<tgroup cols="4" align="left" colsep="0" rowsep="1">
-<colspec colname="c1"/>
-<colspec colname="c2"/>
-<colspec colname="c3"/>
-<colspec colname="c4"/>
- <thead>
- <row>
- <entry>Section</entry>
- <entry>Description</entry>
- <entry>Status</entry>
- <entry>Comments</entry>
- </row>
- </thead>
-
- <tbody>
-
- <row>
- <entry>
- <emphasis>18</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Language support</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>18.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>18.2</entry>
- <entry>Types</entry>
- <entry>Partial</entry>
- <entry>Missing offsetof, max_align_t</entry>
- </row>
- <row>
- <entry>18.3</entry>
- <entry>Implementation properties</entry>
- <entry/>
- <entry/>
- </row>
-
- <row>
- <entry>18.3.2</entry>
- <entry>Numeric Limits</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>18.3.2.3</entry>
- <entry>Class template <code>numeric_limits</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.3.2.4</entry>
- <entry><code>numeric_limits</code> members</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>18.3.2.5</entry>
- <entry><code>float_round_style</code></entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>18.3.2.6</entry>
- <entry><code>float_denorm_style</code></entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>18.3.2.7</entry>
- <entry><code>numeric_limits</code> specializations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
-
- <row>
- <entry>18.3.3</entry>
- <entry>C Library</entry>
- <entry>Y</entry>
- <entry/>
- </row>
-
- <row>
- <entry>18.4</entry>
- <entry>Integer types</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>18.4.1</entry>
- <entry>Header <code>&lt;cstdint&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>18.5</entry>
- <entry>Start and termination</entry>
- <entry>Partial</entry>
- <entry>C library dependency for quick_exit, at_quick_exit</entry>
- </row>
- <row>
- <entry>18.6</entry>
- <entry>Dynamic memory management</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.7</entry>
- <entry>Type identification</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>18.7.1</entry>
- <entry>Class type_info</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.7.2</entry>
- <entry>Class bad_cast</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.7.3</entry>
- <entry>Class bad_typeid</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.8</entry>
- <entry>Exception handling</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>18.8.1</entry>
- <entry>Class exception</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.8.2</entry>
- <entry>Class bad_exception</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.8.3</entry>
- <entry>Abnormal termination</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.8.4</entry>
- <entry><code>uncaught_exception</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.8.5</entry>
- <entry>Exception Propagation</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.8.6</entry>
- <entry><code>nested_exception</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.9</entry>
- <entry>Initializer lists</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>18.9.1</entry>
- <entry>Initializer list constructors</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>18.9.2</entry>
- <entry>Initializer list access</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>18.9.3</entry>
- <entry>Initializer list range access</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>18.10</entry>
- <entry>Other runtime support</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>19</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Diagnostics</emphasis>
- </entry>
- </row>
- <row>
- <entry>19.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.2</entry>
- <entry>Exception classes</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.3</entry>
- <entry>Assertions</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.4</entry>
- <entry>Error numbers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.5</entry>
- <entry>System error support</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>19.5.1</entry>
- <entry>Class <code>error_category</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.5.2</entry>
- <entry>Class <code>error_code</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.5.3</entry>
- <entry>Class <code>error_condition</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.5.4</entry>
- <entry>Comparison operators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>19.5.5</entry>
- <entry>Class <code>system_error</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>20</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>General utilities</emphasis>
- </entry>
- </row>
- <row>
- <entry>20.1</entry>
- <entry>General</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.2</entry>
- <entry>Utility components</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.2.1</entry>
- <entry>Operators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.2.2</entry>
- <entry>Swap</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.2.3</entry>
- <entry><code>forward</code> and <code>move</code> helpers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.2.4</entry>
- <entry>Function template <code>declval</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.3</entry>
- <entry>Pairs</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.3.1</entry>
- <entry>In general</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.3.2</entry>
- <entry>Class template <code>pair</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.3.3</entry>
- <entry>Specialized algorithms</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.3.4</entry>
- <entry>Tuple-like access to <code>pair</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.3.5</entry>
- <entry>Piecewise construction</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.4</entry>
- <entry>Tuples</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.4.1</entry>
- <entry>In general</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.4.2</entry>
- <entry>Class template <code>tuple</code></entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.4.2.1</entry>
- <entry>Construction</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.4.2.2</entry>
- <entry>Assignment</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.4.2.3</entry>
- <entry>Swap</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.4.2.4</entry>
- <entry>Tuple creation functions</entry>
- <entry>Partial</entry>
- <entry><code>tuple_cat</code> should be a single variadic signature (DR 1385)</entry>
- </row>
- <row>
- <entry>20.4.2.5</entry>
- <entry>Tuple helper classes</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.4.2.6</entry>
- <entry>Element access</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.4.2.7</entry>
- <entry>Relational operators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.4.2.8</entry>
- <entry>Tuple traits</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>20.4.2.9</entry>
- <entry>Tuple specialized algorithms</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.5</entry>
- <entry>Class template <code>bitset</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.5.1</entry>
- <entry><code>bitset</code> constructors</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.5.2</entry>
- <entry><code>bitset</code> members</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.5.3</entry>
- <entry><code>bitset</code> hash support</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.5.4</entry>
- <entry><code>bitset</code> operators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6</entry>
- <entry>Memory</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.6.1</entry>
- <entry>In general</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.6.2</entry>
- <entry>Header <code>&lt;memory&gt;</code> synopsis</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.6.3</entry>
- <entry>Pointer traits</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.6.4</entry>
- <entry>Pointer safety</entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.6.5</entry>
- <entry>Align</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.6</entry>
- <entry>Allocator argument tag</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.7</entry>
- <entry><code>uses_allocator</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.6.8</entry>
- <entry>Allocator traits</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.9</entry>
- <entry>The default allocator</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.10</entry>
- <entry>Raw storage iterator</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.11</entry>
- <entry>Temporary buffers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.12</entry>
- <entry>Specialized algorithms</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.6.12.1</entry>
- <entry><code>addressof</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.12.2</entry>
- <entry><code>uninitialized_copy</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.12.3</entry>
- <entry><code>uninitialized_fill</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.12.4</entry>
- <entry><code>uninitialized_fill_n</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.6.13</entry>
- <entry>C library</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.7</entry>
- <entry>Smart pointers</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.7.1</entry>
- <entry>Class template <code>unique_ptr</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.7.2</entry>
- <entry>Shared-ownership pointers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.7.2.1</entry>
- <entry>Class <code>bad_weak_ptr</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.7.2.2</entry>
- <entry>Class template <code>shared_ptr</code></entry>
- <entry>Y</entry>
- <entry>
- <para>
- Uses code from
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</link>.
- </para>
- </entry>
- </row>
- <row>
- <entry>20.7.2.3</entry>
- <entry>Class template <code>weak_ptr</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.7.2.4</entry>
- <entry>Class template <code>emable_shared_from_this</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.7.2.5</entry>
- <entry><code>shared_ptr</code> atomic access</entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <entry>20.7.2.6</entry>
- <entry>Smart pointer hash support</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8</entry>
- <entry>Function objects</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.8.1</entry>
- <entry>Definitions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.8.2</entry>
- <entry>Requirements</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.8.3</entry>
- <entry>Class template <code>reference_wrapper</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8.4</entry>
- <entry>Arithmetic operation</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8.5</entry>
- <entry>Comparisons</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8.6</entry>
- <entry>Logical operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8.7</entry>
- <entry>Bitwise operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8.8</entry>
- <entry>Negators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.8.9</entry>
- <entry>Function template <code>bind</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.8.10</entry>
- <entry>Function template <code>mem_fn</code></entry>
- <entry>Partial</entry>
- <entry>Missing overloads for reference-qualified member functions</entry>
- </row>
- <row>
- <entry>20.8.11</entry>
- <entry>Polymorphic function wrappers</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.8.11.1</entry>
- <entry>Class <code>bad_function_call</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.8.11.2</entry>
- <entry>Class template <code>function</code></entry>
- <entry>Partial</entry>
- <entry>Missing allocator support</entry>
- </row>
- <row>
- <entry>20.8.12</entry>
- <entry>Class template <code>hash</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9</entry>
- <entry>Metaprogramming and type traits</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.9.1</entry>
- <entry>Requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.2</entry>
- <entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.9.3</entry>
- <entry>Helper classes</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.4</entry>
- <entry>Unary Type Traits</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.4.1</entry>
- <entry>Primary type categories</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.4.2</entry>
- <entry>Composite type traits</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.9.4.3</entry>
- <entry>Type properties</entry>
- <entry>Partial</entry>
- <entry>Missing is_trivially_copyable,
- is_assignable, is_copy_assignable, is_move_assignable,
- is_trivially_constructible, is_trivially_default_constructible,
- is_trivially_copy_constructible, is_trivially_move_constructible,
- is_trivially_assignable, is_trivially_default_assignable,
- is_trivially_copy_assignable, is_trivially_move_assignable,
- is_trivially_destructible,
- is_nothrow_assignable,
- is_nothrow_copy_assignable, is_nothrow_move_assignable,
- is_nothrow_destructible
- </entry>
- </row>
- <row>
- <entry>20.9.5</entry>
- <entry>Type property queries</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.6</entry>
- <entry>Relationships between types</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.7</entry>
- <entry>Transformations between types</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.9.7.1</entry>
- <entry>Const-volatile modifications</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.7.2</entry>
- <entry>Reference modifications</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.7.3</entry>
- <entry>Sign modifications</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.7.4</entry>
- <entry>Array modifications</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.7.5</entry>
- <entry>Pointer modifications</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.9.7.6</entry>
- <entry>Other transformations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.10</entry>
- <entry>Compile-time rational arithmetic</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.10.1</entry>
- <entry>In general</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.10.2</entry>
- <entry>Header <code>&lt;ratio&gt;</code> synopsis</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.10.3</entry>
- <entry>Class template <code>ratio</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.10.4</entry>
- <entry>Arithmetic on <code>ratio</code>s</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.10.5</entry>
- <entry>Comparison of <code>ratio</code>s</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.10.6</entry>
- <entry>SI types for <code>ratio</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.11</entry>
- <entry>Time utilities</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.11.3</entry>
- <entry>Clock requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.11.4</entry>
- <entry>Time-related traits</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.11.4.1</entry>
- <entry><code>treat_as_floating_point</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.11.4.2</entry>
- <entry><code>duration_values</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.11.4.3</entry>
- <entry>Specializations of <code>common_type</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.11.5</entry>
- <entry>Class template <code>duration</code></entry>
- <entry>Partial</entry>
- <entry>Missing constexpr for non-member arithmetic operations</entry>
- </row>
- <row>
- <entry>20.11.6</entry>
- <entry>Class template <code>time_point</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.11.7</entry>
- <entry>Clocks</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>20.11.7.1</entry>
- <entry>Class <code>system_clock</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.11.7.2</entry>
- <entry>Class <code>steady_clock</code></entry>
- <entry>N</entry>
- <entry>Support old <code>monotonic_clock</code> spec instead</entry>
- </row>
- <row>
- <entry>20.11.7.3</entry>
- <entry>Class <code>high_resolution_clock</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>20.11.8</entry>
- <entry>Date and time functions</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.12</entry>
- <entry>Scoped allocator adaptor</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.12.1</entry>
- <entry>Header <code>&lt;scoped_allocator&gt;</code> synopsis</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.12.2</entry>
- <entry>Scoped allocator adaptor member types</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.12.3</entry>
- <entry>Scoped allocator adaptor constructors</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.12.4</entry>
- <entry>Scoped allocator adaptor members</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.12.5</entry>
- <entry>Scoped allocator operators</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.13</entry>
- <entry>Class <code>type_index</code></entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>21</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Strings</emphasis>
- </entry>
- </row>
- <row>
- <entry>21.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.2</entry>
- <entry>Character traits</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>21.2.1</entry>
- <entry>Character traits requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.2.2</entry>
- <entry>traits typedefs</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.2.3</entry>
- <entry><code>char_traits</code> specializations</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>21.2.3.1</entry>
- <entry>struct <code>char_traits&lt;char&gt;</code></entry>
- <entry>Partial</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>21.2.3.2</entry>
- <entry>struct <code>char_traits&lt;char16_t&gt;</code></entry>
- <entry>Partial</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>21.2.3.3</entry>
- <entry>struct <code>char_traits&lt;char32_t&gt;</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.2.3.4</entry>
- <entry>struct <code>char_traits&lt;wchar_t&gt;</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.3</entry>
- <entry>String classes</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.4</entry>
- <entry>Class template <code>basic_string</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.5</entry>
- <entry>Numeric Conversions</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.6</entry>
- <entry>Hash support</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>21.7</entry>
- <entry>Null-terminated sequence utilities</entry>
- <entry>Y</entry>
- <entry>C library dependency</entry>
- </row>
- <row>
- <entry>
- <emphasis>22</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Localization</emphasis>
- </entry>
- </row>
- <row>
- <entry>22.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.2</entry>
- <entry>Header <code>&lt;locale&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.3</entry>
- <entry>Locales</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.3.1</entry>
- <entry>Class <code>locale</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.3.2</entry>
- <entry><code>locale</code> globals</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.3.3</entry>
- <entry>Convenience interfaces</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.3.3.1</entry>
- <entry>Character classification</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.3.3.2</entry>
- <entry>Conversions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.3.3.2.1</entry>
- <entry>Character conversions</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>22.3.3.2.2</entry>
- <entry><code>string</code> conversions</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>22.3.3.2.3</entry>
- <entry>Buffer conversions</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4</entry>
- <entry>Standard <code>locale</code> categories</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.4.1</entry>
- <entry>The <code>ctype</code> category</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.2</entry>
- <entry>The numeric category</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.4.2.1</entry>
- <entry><code>num_get</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.2.2</entry>
- <entry><code>num_put</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.3</entry>
- <entry>The numeric punctuation facet</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.4</entry>
- <entry>The collate category</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.5</entry>
- <entry>The time category</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.4.5.1</entry>
- <entry>Class template <code>time_get</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.5.2</entry>
- <entry>Class template <code>time_get_byname</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.5.3</entry>
- <entry>Class template <code>time_put</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.5.3</entry>
- <entry>Class template <code>time_put_byname</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.6</entry>
- <entry>The monetary category</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>22.4.6.1</entry>
- <entry>Class template <code>money_get</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.6.2</entry>
- <entry>Class template <code>money_put</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.6.3</entry>
- <entry>Class template <code>money_punct</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.6.4</entry>
- <entry>Class template <code>money_punct_byname</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.7</entry>
- <entry>The message retrieval category</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>22.4.8</entry>
- <entry>Program-defined facets</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>22.5</entry>
- <entry>Standard code conversion facets</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>22.6</entry>
- <entry>C Library Locales</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>23</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Containers</emphasis>
- </entry>
- </row>
- <row>
- <entry>23.1</entry>
- <entry>General</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>23.2</entry>
- <entry>Container requirements</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>23.2.1</entry>
- <entry>General container requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.2.2</entry>
- <entry>Container data races</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.2.3</entry>
- <entry>Sequence containers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.2.4</entry>
- <entry>Associative containers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.2.5</entry>
- <entry>Unordered associative containers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.3</entry>
- <entry>Sequence containers</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>23.3.2</entry>
- <entry>Class template <code>array</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.3.3</entry>
- <entry>Class template <code>deque</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.3.4</entry>
- <entry>Class template <code>forward_list</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.3.5</entry>
- <entry>Class template <code>list</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.3.6</entry>
- <entry>Class template <code>vector</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.3.7</entry>
- <entry>Class <code>vector&lt;bool&gt;</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.4</entry>
- <entry>Associative containers</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>23.4.4</entry>
- <entry>Class template <code>map</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.4.5</entry>
- <entry>Class template <code>multimap</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.4.6</entry>
- <entry>Class template <code>set</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.4.7</entry>
- <entry>Class template <code>multiset</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.5</entry>
- <entry>Unordered associative containers</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>23.5.4</entry>
- <entry>Class template <code>unordered_map</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.5.5</entry>
- <entry>Class template <code>unordered_multimap</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.5.6</entry>
- <entry>Class template <code>unordered_set</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.5.7</entry>
- <entry>Class template <code>unordered_multiset</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.6</entry>
- <entry>Container adaptors</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>23.6.1</entry>
- <entry>Class template <code>queue</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.6.2</entry>
- <entry>Class template <code>priority_queue</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>23.6.3</entry>
- <entry>Class template <code>stack</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>24</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Iterators</emphasis>
- </entry>
- </row>
- <row>
- <entry>24.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.2</entry>
- <entry>Iterator requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.3</entry>
- <entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.4</entry>
- <entry>Iterator primitives</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.5</entry>
- <entry>Iterator adaptors</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>24.5.1</entry>
- <entry>Reverse iterators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.5.2</entry>
- <entry>Insert iterators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.5.3</entry>
- <entry>Move iterators</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.6</entry>
- <entry>Stream iterators</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>24.6.1</entry>
- <entry>Class template <code>istream_iterator</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.6.2</entry>
- <entry>Class template <code>ostream_iterator</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.6.3</entry>
- <entry>Class template <code>istreambuf_iterator</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>24.6.4</entry>
- <entry>Class template <code>ostreambuf_iterator</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>24.6.5</entry>
- <entry>range access</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>25</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Algorithms</emphasis>
- </entry>
- </row>
- <row>
- <entry>25.1</entry>
- <entry>General</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>25.2</entry>
- <entry>Non-modifying sequence operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>25.3</entry>
- <entry>Mutating sequence operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>25.4</entry>
- <entry>Sorting and related operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>25.5</entry>
- <entry>C library algorithms</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>26</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Numerics</emphasis>
- </entry>
- </row>
- <row>
- <entry>26.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.2</entry>
- <entry>Numeric type requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.3</entry>
- <entry>The floating-point environment</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.4</entry>
- <entry>Complex numbers</entry>
- <entry>Partial</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5</entry>
- <entry>Random number generation</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.1</entry>
- <entry>Requirements</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.2</entry>
- <entry>Header <code>&lt;random&gt;</code> synopsis</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.3</entry>
- <entry>Random number engine class templates</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.3.1</entry>
- <entry>Class template <code>linear_congruential_engine</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.3.2</entry>
- <entry>Class template <code>mersenne_twister_engine</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.3.3</entry>
- <entry>Class template <code>subtract_with_carry_engine</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.4</entry>
- <entry>Random number engine adaptor class templates</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.4.2</entry>
- <entry>Class template <code>discard_block_engine</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.4.3</entry>
- <entry>Class template <code>independent_bits_engine</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.4.4</entry>
- <entry>Class template <code>shuffle_order_engine</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.5</entry>
- <entry>Engines and engine adaptors with predefined parameters</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.6</entry>
- <entry>Class <code>random_device</code></entry>
- <entry>Y</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>26.5.7</entry>
- <entry>Utilities</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.7.1</entry>
- <entry>Class <code>seed_seq</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.7.2</entry>
- <entry>Function template <code>generate_canonical</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8</entry>
- <entry>Random number distribution class templates</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.2</entry>
- <entry>Uniform distributions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.2.1</entry>
- <entry>Class template <code>uniform_int_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.2.2</entry>
- <entry>Class template <code>uniform_real_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.3</entry>
- <entry>Bernoulli distributions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.3.1</entry>
- <entry>Class <code>bernoulli_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.3.2</entry>
- <entry>Class template <code>binomial_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.3.3</entry>
- <entry>Class template <code>geometric_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.3.4</entry>
- <entry>Class template <code>negative_binomial_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.4</entry>
- <entry>Poisson distributions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.4.1</entry>
- <entry>Class template <code>poisson_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.4.2</entry>
- <entry>Class template <code>exponential_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.4.3</entry>
- <entry>Class template <code>gamma_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.4.4</entry>
- <entry>Class template <code>weibull_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.4.5</entry>
- <entry>Class template <code>extreme_value_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5</entry>
- <entry>Normal distributions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5.1</entry>
- <entry>Class template <code>normal_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5.2</entry>
- <entry>Class template <code>lognormal_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5.3</entry>
- <entry>Class template <code>chi_squared_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5.4</entry>
- <entry>Class template <code>cauchy_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5.5</entry>
- <entry>Class template <code>fisher_f_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.5.6</entry>
- <entry>Class template <code>student_t_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.6</entry>
- <entry>Sampling distributions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.6.1</entry>
- <entry>Class template <code>discrete_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.6.2</entry>
- <entry>Class template <code>piecewise_constant_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.5.8.6.3</entry>
- <entry>Class template <code>piecewise_linear_distribution</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6</entry>
- <entry>Numeric arrays</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.6.1</entry>
- <entry>Header <code>&lt;valarray&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>26.6.2</entry>
- <entry>Class template <code>valarray</code></entry>
- <entry>Partial</entry>
- <entry>Missing move and swap operations</entry>
- </row>
- <row>
- <entry>26.6.3</entry>
- <entry><code>valarray</code> non-member operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.4</entry>
- <entry>Class <code>slice</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.5</entry>
- <entry>Class template <code>slice_array</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.6</entry>
- <entry>The <code>gslice</code> class</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.7</entry>
- <entry>Class template <code>gslice_array</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.8</entry>
- <entry>Class template <code>mask_array</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.9</entry>
- <entry>Class template <code>indirect_array</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.6.10</entry>
- <entry><code>valarray</code> range access</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.7</entry>
- <entry>Generalized numeric operations</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>26.7.1</entry>
- <entry>Header <code>&lt;numeric&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.7.2</entry>
- <entry><code>accumulate</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.7.3</entry>
- <entry><code>inner_product</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.7.4</entry>
- <entry><code>partial_sum</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.7.5</entry>
- <entry><code>adjacent_difference</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.7.6</entry>
- <entry>iota</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>26.8</entry>
- <entry>C Library</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>27</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Input/output library</emphasis>
- </entry>
- </row>
- <row>
- <entry>27.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.2</entry>
- <entry>Iostreams requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.2.1</entry>
- <entry>Imbue Limitations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.2.2</entry>
- <entry>Positioning Type Limitations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>27.2.3</entry>
- <entry>Thread safety</entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <entry>27.3</entry>
- <entry>Forward declarations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.4</entry>
- <entry>Standard iostream objects</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.4.1</entry>
- <entry>Overview</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.4.2</entry>
- <entry>Narrow stream objects</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>27.4.3</entry>
- <entry>Wide stream objects</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>27.5</entry>
- <entry>Iostreams base classes</entry>
- <entry>Partial</entry>
- <entry>
- Missing move and swap operations on <code>basic_ios</code>. Missing
- <code>make_error_code</code> and <code>make_error_condition</code>.
- </entry>
- </row>
- <row>
- <entry>27.6</entry>
- <entry>Stream buffers</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>27.7</entry>
- <entry>Formatting and manipulators</entry>
- <entry>Partial</entry>
- <entry>Missing move and swap operations</entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>27.8</entry>
- <entry>String-based streams</entry>
- <entry>Partial</entry>
- <entry>Missing move and swap operations</entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>27.9</entry>
- <entry>File-based streams</entry>
- <entry>Partial</entry>
- <entry>Missing move and swap operations</entry>
- </row>
- <row>
- <entry>
- <emphasis>28</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Regular expressions</emphasis>
- </entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.1</entry>
- <entry>General</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.2</entry>
- <entry>Definitions</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.3</entry>
- <entry>Requirements</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.4</entry>
- <entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>28.5</entry>
- <entry>Namespace <code>std::regex_constants</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>28.6</entry>
- <entry>Class <code>regex_error</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.7</entry>
- <entry>Class template <code>regex_traits</code></entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.8</entry>
- <entry>Class template <code>basic_regex</code></entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.9</entry>
- <entry>Class template <code>sub_match</code></entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.10</entry>
- <entry>Class template <code>match_results</code></entry>
- <entry>Partial</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.11</entry>
- <entry>Regular expression algorithms</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.12</entry>
- <entry>Regular expression Iterators</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.13</entry>
- <entry>Modified ECMAScript regular expression grammar</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>29</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Atomic operations</emphasis>
- </entry>
- </row>
- <row>
- <entry>29.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>29.2</entry>
- <entry>Header <code>&lt;atomic&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>29.3</entry>
- <entry>Order and consistency</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>29.4</entry>
- <entry>Lock-free property</entry>
- <entry>Partial</entry>
- <entry>Missing <code>ATOMIC_BOOL_LOCK_FREE</code> and
- <code>ATOMIC_POINTER_LOCK_FREE</code>.
- Based on _GLIBCXX_ATOMIC_PROPERTY
- </entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>29.5</entry>
- <entry>Atomic types</entry>
- <entry>Partial</entry>
- <entry>Missing constexpr</entry>
- </row>
- <row>
- <entry>29.6</entry>
- <entry>Operations on atomic types</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>29.7</entry>
- <entry>Flag Type and operations</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>29.8</entry>
- <entry>Fences</entry>
- <entry>N</entry>
- <entry/>
- </row>
- <row>
- <entry>
- <emphasis>30</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Thread support</emphasis>
- </entry>
- </row>
- <row>
- <entry>30.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.2</entry>
- <entry>Requirements</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.3</entry>
- <entry>Threads</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>30.3.1</entry>
- <entry>Class <code>thread</code></entry>
- <entry>Partial</entry>
- <entry><code>thread::id</code> comparisons not well-defined</entry>
- </row>
- <row>
- <entry>30.3.2</entry>
- <entry>Namespace <code>this_thread</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4</entry>
- <entry>Mutual exclusion</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.1</entry>
- <entry>Mutex requirements</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.1</entry>
- <entry>In general</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.2</entry>
- <entry>Mutex types</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.2.1</entry>
- <entry>Class <code>mutex</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.2.2</entry>
- <entry>Class <code>recursive_mutex</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.3</entry>
- <entry>Timed mutex types</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.3.1</entry>
- <entry>Class <code>timed_mutex</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.1.3.2</entry>
- <entry>Class <code>recursive_timed_mutex</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.2</entry>
- <entry>Locks</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.2.1</entry>
- <entry>Class template <code>lock_guard</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.2.2</entry>
- <entry>Class template <code>unique_lock</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.3</entry>
- <entry>Generic locking algorithms</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.4</entry>
- <entry>Call once</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.4.4.1</entry>
- <entry>Struct <code>once_flag</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.4.4.2</entry>
- <entry>Function <code>call_once</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>30.5</entry>
- <entry>Condition variables</entry>
- <entry>Partial</entry>
- <entry>Missing notify_all_at_thread_exit</entry>
- </row>
- <row>
- <entry>30.5.1</entry>
- <entry>Class <code>condition_variable</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.5.2</entry>
- <entry>Class <code>condition_variable_any</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.6</entry>
- <entry>Futures</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.6.1</entry>
- <entry>Overview</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>30.6.2</entry>
- <entry>Error handling</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.6.3</entry>
- <entry>Class <code>future_error</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <entry>30.6.4</entry>
- <entry>Shared state</entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>30.6.5</entry>
- <entry>Class template <code>promise</code></entry>
- <entry>Partial</entry>
- <entry>Missing set_*_at_thread_exit</entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>30.6.6</entry>
- <entry>Class template <code>future</code></entry>
- <entry>Partial</entry>
- <entry>Missing future_status and future::share()</entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>30.6.7</entry>
- <entry>Class template <code>shared_future</code></entry>
- <entry>Partial</entry>
- <entry>Missing future_status</entry>
- </row>
- <row>
- <entry>30.6.8</entry>
- <entry>Function template <code>async</code></entry>
- <entry>Y</entry>
- <entry/>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>30.6.9</entry>
- <entry>Class template <code>packaged_task</code></entry>
- <entry>Partial</entry>
- <entry>Missing make_ready_at_thread_exit</entry>
- </row>
- <row>
- <entry>
- <emphasis>Appendix D</emphasis>
- </entry>
- <entry namest="c2" nameend="c4" align="left">
- <emphasis>Compatibility features</emphasis>
- </entry>
- </row>
- <row>
- <entry>D.1</entry>
- <entry>Increment operator with <code>bool</code> operand</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.2</entry>
- <entry><code>register</code> keyword</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.3</entry>
- <entry>Implicit declaration of copy functions</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.4</entry>
- <entry>Dynamic exception specifications</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.5</entry>
- <entry>C standard library headers</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.6</entry>
- <entry>Old iostreams members</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.7</entry>
- <entry><code>char*</code> streams</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.8</entry>
- <entry>Function objects</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.9</entry>
- <entry>Binders</entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.10</entry>
- <entry><code>auto_ptr</code></entry>
- <entry/>
- <entry/>
- </row>
- <row>
- <entry>D.11</entry>
- <entry>Violating exception-specifications</entry>
- <entry/>
- <entry/>
- </row>
-
- </tbody>
-</tgroup>
-</table>
-
-
-</section>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
new file mode 100644
index 0000000000..e26db6ff91
--- /dev/null
+++ b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
@@ -0,0 +1,2683 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.2011" xreflabel="Status C++ 2011">
+<?dbhtml filename="status_iso_cxx2011.html"?>
+
+<info><title>C++ 2011</title>
+ <keywordset>
+ <keyword>
+ ISO C++
+ </keyword>
+ <keyword>
+ 2011
+ </keyword>
+ </keywordset>
+</info>
+
+<para>
+<anchor xml:id="status.iso.200x" /> <!-- preserve links to old section ID -->
+This table is based on the table of contents of ISO/IEC
+JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11
+Final Draft International Standard, Standard for Programming Language C++
+</para>
+
+<para>
+In this implementation <literal>-std=gnu++11</literal> or
+<literal>-std=c++11</literal> flags must be used to enable language
+and library
+features. See <link linkend="manual.intro.using.flags">dialect</link>
+options. The pre-defined symbol
+<constant>__GXX_EXPERIMENTAL_CXX0X__</constant> is used to check for the
+presence of the required flag.
+</para>
+
+<para>
+This page describes the C++11 support in mainline GCC SVN, not in any
+particular release.
+</para>
+
+<!-- Status is Yes or No, Broken/Partial-->
+<!--
+ Yes
+
+ No
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ Broken/Partial
+ <?dbhtml bgcolor="#B0B0B0" ?>
+-->
+<table frame="all">
+<title>C++ 2011 Implementation Status</title>
+
+<tgroup cols="4" align="left" colsep="0" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+ <thead>
+ <row>
+ <entry>Section</entry>
+ <entry>Description</entry>
+ <entry>Status</entry>
+ <entry>Comments</entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <row>
+ <entry>
+ <emphasis>18</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Language support</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>18.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>18.2</entry>
+ <entry>Types</entry>
+ <entry>Partial</entry>
+ <entry>Missing offsetof, max_align_t</entry>
+ </row>
+ <row>
+ <entry>18.3</entry>
+ <entry>Implementation properties</entry>
+ <entry/>
+ <entry/>
+ </row>
+
+ <row>
+ <entry>18.3.2</entry>
+ <entry>Numeric Limits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.3.2.3</entry>
+ <entry>Class template <code>numeric_limits</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.3.2.4</entry>
+ <entry><code>numeric_limits</code> members</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>18.3.2.5</entry>
+ <entry><code>float_round_style</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>18.3.2.6</entry>
+ <entry><code>float_denorm_style</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.3.2.7</entry>
+ <entry><code>numeric_limits</code> specializations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry>18.3.3</entry>
+ <entry>C Library</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry>18.4</entry>
+ <entry>Integer types</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.4.1</entry>
+ <entry>Header <code>&lt;cstdint&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>18.5</entry>
+ <entry>Start and termination</entry>
+ <entry>Partial</entry>
+ <entry>C library dependency for quick_exit, at_quick_exit</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>18.6</entry>
+ <entry>Dynamic memory management</entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>get_new_handler</code>.
+ <code>set_new_handler</code> is not thread-safe.
+ </entry>
+ </row>
+ <row>
+ <entry>18.7</entry>
+ <entry>Type identification</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.7.1</entry>
+ <entry>Class type_info</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.7.2</entry>
+ <entry>Class bad_cast</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.7.3</entry>
+ <entry>Class bad_typeid</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.8</entry>
+ <entry>Exception handling</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.8.1</entry>
+ <entry>Class exception</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.8.2</entry>
+ <entry>Class bad_exception</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>18.8.3</entry>
+ <entry>Abnormal termination</entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>get_terminate</code>.
+ <code>set_terminate</code> is not thread-safe.
+ </entry>
+ </row>
+ <row>
+ <entry>18.8.4</entry>
+ <entry><code>uncaught_exception</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.8.5</entry>
+ <entry>Exception Propagation</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.8.6</entry>
+ <entry><code>nested_exception</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.9</entry>
+ <entry>Initializer lists</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.9.1</entry>
+ <entry>Initializer list constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.9.2</entry>
+ <entry>Initializer list access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.9.3</entry>
+ <entry>Initializer list range access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.10</entry>
+ <entry>Other runtime support</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>19</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Diagnostics</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>19.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.2</entry>
+ <entry>Exception classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.3</entry>
+ <entry>Assertions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.4</entry>
+ <entry>Error numbers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.5</entry>
+ <entry>System error support</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.5.1</entry>
+ <entry>Class <code>error_category</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.5.2</entry>
+ <entry>Class <code>error_code</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.5.3</entry>
+ <entry>Class <code>error_condition</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.5.4</entry>
+ <entry>Comparison operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.5.5</entry>
+ <entry>Class <code>system_error</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>20</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>General utilities</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>20.1</entry>
+ <entry>General</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.2</entry>
+ <entry>Utility components</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.2.1</entry>
+ <entry>Operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.2.2</entry>
+ <entry>Swap</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.2.3</entry>
+ <entry><code>forward</code> and <code>move</code> helpers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.2.4</entry>
+ <entry>Function template <code>declval</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3</entry>
+ <entry>Pairs</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.1</entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.2</entry>
+ <entry>Class template <code>pair</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.3</entry>
+ <entry>Specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.4</entry>
+ <entry>Tuple-like access to <code>pair</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.5</entry>
+ <entry>Piecewise construction</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4</entry>
+ <entry>Tuples</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.1</entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2</entry>
+ <entry>Class template <code>tuple</code></entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.1</entry>
+ <entry>Construction</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.2</entry>
+ <entry>Assignment</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.3</entry>
+ <entry>Swap</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.4</entry>
+ <entry>Tuple creation functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.5</entry>
+ <entry>Tuple helper classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.6</entry>
+ <entry>Element access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.7</entry>
+ <entry>Relational operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.8</entry>
+ <entry>Tuple traits</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2.9</entry>
+ <entry>Tuple specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.5</entry>
+ <entry>Class template <code>bitset</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.5.1</entry>
+ <entry><code>bitset</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.5.2</entry>
+ <entry><code>bitset</code> members</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.5.3</entry>
+ <entry><code>bitset</code> hash support</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.5.4</entry>
+ <entry><code>bitset</code> operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6</entry>
+ <entry>Memory</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.1</entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.2</entry>
+ <entry>Header <code>&lt;memory&gt;</code> synopsis</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.3</entry>
+ <entry>Pointer traits</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.6.4</entry>
+ <entry>Pointer safety</entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>20.6.5</entry>
+ <entry>Align</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.6</entry>
+ <entry>Allocator argument tag</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.7</entry>
+ <entry><code>uses_allocator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.8</entry>
+ <entry>Allocator traits</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.9</entry>
+ <entry>The default allocator</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.10</entry>
+ <entry>Raw storage iterator</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.11</entry>
+ <entry>Temporary buffers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.12</entry>
+ <entry>Specialized algorithms</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.12.1</entry>
+ <entry><code>addressof</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.12.2</entry>
+ <entry><code>uninitialized_copy</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.12.3</entry>
+ <entry><code>uninitialized_fill</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.12.4</entry>
+ <entry><code>uninitialized_fill_n</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.6.13</entry>
+ <entry>C library</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7</entry>
+ <entry>Smart pointers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7.1</entry>
+ <entry>Class template <code>unique_ptr</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7.2</entry>
+ <entry>Shared-ownership pointers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7.2.1</entry>
+ <entry>Class <code>bad_weak_ptr</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7.2.2</entry>
+ <entry>Class template <code>shared_ptr</code></entry>
+ <entry>Y</entry>
+ <entry>
+ <para>
+ Uses code from
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</link>.
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry>20.7.2.3</entry>
+ <entry>Class template <code>weak_ptr</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7.2.4</entry>
+ <entry>Class template <code>emable_shared_from_this</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.7.2.5</entry>
+ <entry><code>shared_ptr</code> atomic access</entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.7.2.6</entry>
+ <entry>Smart pointer hash support</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8</entry>
+ <entry>Function objects</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.1</entry>
+ <entry>Definitions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.2</entry>
+ <entry>Requirements</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.3</entry>
+ <entry>Class template <code>reference_wrapper</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.4</entry>
+ <entry>Arithmetic operation</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.5</entry>
+ <entry>Comparisons</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.6</entry>
+ <entry>Logical operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.7</entry>
+ <entry>Bitwise operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.8</entry>
+ <entry>Negators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.9</entry>
+ <entry>Function template <code>bind</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.8.10</entry>
+ <entry>Function template <code>mem_fn</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing overloads for reference-qualified member functions</entry>
+ </row>
+ <row>
+ <entry>20.8.11</entry>
+ <entry>Polymorphic function wrappers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.8.11.1</entry>
+ <entry>Class <code>bad_function_call</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.8.11.2</entry>
+ <entry>Class template <code>function</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing allocator support</entry>
+ </row>
+ <row>
+ <entry>20.8.12</entry>
+ <entry>Class template <code>hash</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9</entry>
+ <entry>Metaprogramming and type traits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.1</entry>
+ <entry>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.2</entry>
+ <entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.3</entry>
+ <entry>Helper classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.4</entry>
+ <entry>Unary Type Traits</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.4.1</entry>
+ <entry>Primary type categories</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.4.2</entry>
+ <entry>Composite type traits</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.9.4.3</entry>
+ <entry>Type properties</entry>
+ <entry>Partial</entry>
+ <entry>Missing is_trivially_copyable,
+ is_assignable, is_copy_assignable, is_move_assignable,
+ is_trivially_constructible, is_trivially_default_constructible,
+ is_trivially_copy_constructible, is_trivially_move_constructible,
+ is_trivially_assignable, is_trivially_default_assignable,
+ is_trivially_copy_assignable, is_trivially_move_assignable,
+ is_trivially_destructible,
+ is_nothrow_assignable,
+ is_nothrow_copy_assignable, is_nothrow_move_assignable,
+ is_nothrow_destructible
+ </entry>
+ </row>
+ <row>
+ <entry>20.9.5</entry>
+ <entry>Type property queries</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.6</entry>
+ <entry>Relationships between types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7</entry>
+ <entry>Transformations between types</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7.1</entry>
+ <entry>Const-volatile modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7.2</entry>
+ <entry>Reference modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7.3</entry>
+ <entry>Sign modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7.4</entry>
+ <entry>Array modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7.5</entry>
+ <entry>Pointer modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.7.6</entry>
+ <entry>Other transformations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10</entry>
+ <entry>Compile-time rational arithmetic</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10.1</entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10.2</entry>
+ <entry>Header <code>&lt;ratio&gt;</code> synopsis</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10.3</entry>
+ <entry>Class template <code>ratio</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10.4</entry>
+ <entry>Arithmetic on <code>ratio</code>s</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10.5</entry>
+ <entry>Comparison of <code>ratio</code>s</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.10.6</entry>
+ <entry>SI types for <code>ratio</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11</entry>
+ <entry>Time utilities</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.3</entry>
+ <entry>Clock requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.4</entry>
+ <entry>Time-related traits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.4.1</entry>
+ <entry><code>treat_as_floating_point</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.4.2</entry>
+ <entry><code>duration_values</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.4.3</entry>
+ <entry>Specializations of <code>common_type</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.11.5</entry>
+ <entry>Class template <code>duration</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing constexpr for non-member arithmetic operations</entry>
+ </row>
+ <row>
+ <entry>20.11.6</entry>
+ <entry>Class template <code>time_point</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.7</entry>
+ <entry>Clocks</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.7.1</entry>
+ <entry>Class <code>system_clock</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.7.2</entry>
+ <entry>Class <code>steady_clock</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.7.3</entry>
+ <entry>Class <code>high_resolution_clock</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.11.8</entry>
+ <entry>Date and time functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.12</entry>
+ <entry>Scoped allocator adaptor</entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.12.1</entry>
+ <entry>Header <code>&lt;scoped_allocator&gt;</code> synopsis</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.12.2</entry>
+ <entry>Scoped allocator adaptor member types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.12.3</entry>
+ <entry>Scoped allocator adaptor constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.12.4</entry>
+ <entry>Scoped allocator adaptor members</entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.12.5</entry>
+ <entry>Scoped allocator operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.13</entry>
+ <entry>Class <code>type_index</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>21</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Strings</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>21.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.2</entry>
+ <entry>Character traits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.2.1</entry>
+ <entry>Character traits requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.2.2</entry>
+ <entry>traits typedefs</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.2.3</entry>
+ <entry><code>char_traits</code> specializations</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>21.2.3.1</entry>
+ <entry>struct <code>char_traits&lt;char&gt;</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>21.2.3.2</entry>
+ <entry>struct <code>char_traits&lt;char16_t&gt;</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>21.2.3.3</entry>
+ <entry>struct <code>char_traits&lt;char32_t&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.2.3.4</entry>
+ <entry>struct <code>char_traits&lt;wchar_t&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.3</entry>
+ <entry>String classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.4</entry>
+ <entry>Class template <code>basic_string</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.5</entry>
+ <entry>Numeric Conversions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.6</entry>
+ <entry>Hash support</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>21.7</entry>
+ <entry>Null-terminated sequence utilities</entry>
+ <entry>Partial</entry>
+ <entry>C library dependency.
+ Missing <filename class="headerfile">&lt;cuchar&gt;</filename>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <emphasis>22</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Localization</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>22.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2</entry>
+ <entry>Header <code>&lt;locale&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3</entry>
+ <entry>Locales</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3.1</entry>
+ <entry>Class <code>locale</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3.2</entry>
+ <entry><code>locale</code> globals</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3.3</entry>
+ <entry>Convenience interfaces</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3.3.1</entry>
+ <entry>Character classification</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3.3.2</entry>
+ <entry>Conversions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3.3.2.1</entry>
+ <entry>Character conversions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>22.3.3.2.2</entry>
+ <entry><code>string</code> conversions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>22.3.3.2.3</entry>
+ <entry>Buffer conversions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4</entry>
+ <entry>Standard <code>locale</code> categories</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.1</entry>
+ <entry>The <code>ctype</code> category</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.2</entry>
+ <entry>The numeric category</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.2.1</entry>
+ <entry><code>num_get</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.2.2</entry>
+ <entry><code>num_put</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.3</entry>
+ <entry>The numeric punctuation facet</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.4</entry>
+ <entry>The collate category</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.5</entry>
+ <entry>The time category</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.5.1</entry>
+ <entry>Class template <code>time_get</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.5.2</entry>
+ <entry>Class template <code>time_get_byname</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.5.3</entry>
+ <entry>Class template <code>time_put</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.5.3</entry>
+ <entry>Class template <code>time_put_byname</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.6</entry>
+ <entry>The monetary category</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.6.1</entry>
+ <entry>Class template <code>money_get</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.6.2</entry>
+ <entry>Class template <code>money_put</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.6.3</entry>
+ <entry>Class template <code>money_punct</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.6.4</entry>
+ <entry>Class template <code>money_punct_byname</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.7</entry>
+ <entry>The message retrieval category</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.4.8</entry>
+ <entry>Program-defined facets</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>22.5</entry>
+ <entry>Standard code conversion facets</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.6</entry>
+ <entry>C Library Locales</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>23</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Containers</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>23.1</entry>
+ <entry>General</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2</entry>
+ <entry>Container requirements</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>23.2.1</entry>
+ <entry>General container requirements</entry>
+ <entry>Partial</entry>
+ <entry>Only <code>vector</code> meets the requirements
+ relating to allocator use and propagation.</entry>
+ </row>
+ <row>
+ <entry>23.2.2</entry>
+ <entry>Container data races</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.3</entry>
+ <entry>Sequence containers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>23.2.4</entry>
+ <entry>Associative containers</entry>
+ <entry>Partial</entry>
+ <entry>Missing emplace members</entry>
+ </row>
+ <row>
+ <entry>23.2.5</entry>
+ <entry>Unordered associative containers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3</entry>
+ <entry>Sequence containers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.2</entry>
+ <entry>Class template <code>array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.3</entry>
+ <entry>Class template <code>deque</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.4</entry>
+ <entry>Class template <code>forward_list</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.5</entry>
+ <entry>Class template <code>list</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.6</entry>
+ <entry>Class template <code>vector</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.7</entry>
+ <entry>Class <code>vector&lt;bool&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.4</entry>
+ <entry>Associative containers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.4.4</entry>
+ <entry>Class template <code>map</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.4.5</entry>
+ <entry>Class template <code>multimap</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.4.6</entry>
+ <entry>Class template <code>set</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.4.7</entry>
+ <entry>Class template <code>multiset</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.5</entry>
+ <entry>Unordered associative containers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.5.4</entry>
+ <entry>Class template <code>unordered_map</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.5.5</entry>
+ <entry>Class template <code>unordered_multimap</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.5.6</entry>
+ <entry>Class template <code>unordered_set</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.5.7</entry>
+ <entry>Class template <code>unordered_multiset</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.6</entry>
+ <entry>Container adaptors</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.6.1</entry>
+ <entry>Class template <code>queue</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.6.2</entry>
+ <entry>Class template <code>priority_queue</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.6.3</entry>
+ <entry>Class template <code>stack</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>24</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Iterators</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>24.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.2</entry>
+ <entry>Iterator requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.3</entry>
+ <entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.4</entry>
+ <entry>Iterator primitives</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5</entry>
+ <entry>Iterator adaptors</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.1</entry>
+ <entry>Reverse iterators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.2</entry>
+ <entry>Insert iterators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.3</entry>
+ <entry>Move iterators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.6</entry>
+ <entry>Stream iterators</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.6.1</entry>
+ <entry>Class template <code>istream_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.6.2</entry>
+ <entry>Class template <code>ostream_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.6.3</entry>
+ <entry>Class template <code>istreambuf_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.6.4</entry>
+ <entry>Class template <code>ostreambuf_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.6.5</entry>
+ <entry>range access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>25</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Algorithms</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>25.1</entry>
+ <entry>General</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.2</entry>
+ <entry>Non-modifying sequence operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.3</entry>
+ <entry>Mutating sequence operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.4</entry>
+ <entry>Sorting and related operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.5</entry>
+ <entry>C library algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>26</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Numerics</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>26.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.2</entry>
+ <entry>Numeric type requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3</entry>
+ <entry>The floating-point environment</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4</entry>
+ <entry>Complex numbers</entry>
+ <entry>Partial</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5</entry>
+ <entry>Random number generation</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.1</entry>
+ <entry>Requirements</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.2</entry>
+ <entry>Header <code>&lt;random&gt;</code> synopsis</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.3</entry>
+ <entry>Random number engine class templates</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.3.1</entry>
+ <entry>Class template <code>linear_congruential_engine</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.3.2</entry>
+ <entry>Class template <code>mersenne_twister_engine</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.3.3</entry>
+ <entry>Class template <code>subtract_with_carry_engine</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.4</entry>
+ <entry>Random number engine adaptor class templates</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.4.2</entry>
+ <entry>Class template <code>discard_block_engine</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.4.3</entry>
+ <entry>Class template <code>independent_bits_engine</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.4.4</entry>
+ <entry>Class template <code>shuffle_order_engine</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.5</entry>
+ <entry>Engines and engine adaptors with predefined parameters</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.6</entry>
+ <entry>Class <code>random_device</code></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>26.5.7</entry>
+ <entry>Utilities</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.7.1</entry>
+ <entry>Class <code>seed_seq</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.7.2</entry>
+ <entry>Function template <code>generate_canonical</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8</entry>
+ <entry>Random number distribution class templates</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.2</entry>
+ <entry>Uniform distributions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.2.1</entry>
+ <entry>Class template <code>uniform_int_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.2.2</entry>
+ <entry>Class template <code>uniform_real_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.3</entry>
+ <entry>Bernoulli distributions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.3.1</entry>
+ <entry>Class <code>bernoulli_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.3.2</entry>
+ <entry>Class template <code>binomial_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.3.3</entry>
+ <entry>Class template <code>geometric_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.3.4</entry>
+ <entry>Class template <code>negative_binomial_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.4</entry>
+ <entry>Poisson distributions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.4.1</entry>
+ <entry>Class template <code>poisson_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.4.2</entry>
+ <entry>Class template <code>exponential_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.4.3</entry>
+ <entry>Class template <code>gamma_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.4.4</entry>
+ <entry>Class template <code>weibull_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.4.5</entry>
+ <entry>Class template <code>extreme_value_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5</entry>
+ <entry>Normal distributions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5.1</entry>
+ <entry>Class template <code>normal_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5.2</entry>
+ <entry>Class template <code>lognormal_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5.3</entry>
+ <entry>Class template <code>chi_squared_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5.4</entry>
+ <entry>Class template <code>cauchy_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5.5</entry>
+ <entry>Class template <code>fisher_f_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.5.6</entry>
+ <entry>Class template <code>student_t_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.6</entry>
+ <entry>Sampling distributions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.6.1</entry>
+ <entry>Class template <code>discrete_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.6.2</entry>
+ <entry>Class template <code>piecewise_constant_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5.8.6.3</entry>
+ <entry>Class template <code>piecewise_linear_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6</entry>
+ <entry>Numeric arrays</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.1</entry>
+ <entry>Header <code>&lt;valarray&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.2</entry>
+ <entry>Class template <code>valarray</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.3</entry>
+ <entry><code>valarray</code> non-member operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.4</entry>
+ <entry>Class <code>slice</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.5</entry>
+ <entry>Class template <code>slice_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.6</entry>
+ <entry>The <code>gslice</code> class</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.7</entry>
+ <entry>Class template <code>gslice_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.8</entry>
+ <entry>Class template <code>mask_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.9</entry>
+ <entry>Class template <code>indirect_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.6.10</entry>
+ <entry><code>valarray</code> range access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7</entry>
+ <entry>Generalized numeric operations</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7.1</entry>
+ <entry>Header <code>&lt;numeric&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7.2</entry>
+ <entry><code>accumulate</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7.3</entry>
+ <entry><code>inner_product</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7.4</entry>
+ <entry><code>partial_sum</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7.5</entry>
+ <entry><code>adjacent_difference</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.7.6</entry>
+ <entry>iota</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.8</entry>
+ <entry>C Library</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>27</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Input/output library</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>27.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.2</entry>
+ <entry>Iostreams requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.2.1</entry>
+ <entry>Imbue Limitations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.2.2</entry>
+ <entry>Positioning Type Limitations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>27.2.3</entry>
+ <entry>Thread safety</entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.3</entry>
+ <entry>Forward declarations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.4</entry>
+ <entry>Standard iostream objects</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.4.1</entry>
+ <entry>Overview</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.4.2</entry>
+ <entry>Narrow stream objects</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.4.3</entry>
+ <entry>Wide stream objects</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>27.5</entry>
+ <entry>Iostreams base classes</entry>
+ <entry>Partial</entry>
+ <entry>
+ Missing move and swap operations on <code>basic_ios</code>.
+ Missing <code>io_errc</code> and <code>iostream_category</code>.
+ <code>ios_base::failure</code> is not derived from <code>system_error</code>.
+ </entry>
+ </row>
+ <row>
+ <entry>27.6</entry>
+ <entry>Stream buffers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>27.7</entry>
+ <entry>Formatting and manipulators</entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>27.8</entry>
+ <entry>String-based streams</entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>27.9</entry>
+ <entry>File-based streams</entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
+ </row>
+ <row>
+ <entry>
+ <emphasis>28</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Regular expressions</emphasis>
+ </entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.1</entry>
+ <entry>General</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.2</entry>
+ <entry>Definitions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.3</entry>
+ <entry>Requirements</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.4</entry>
+ <entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>28.5</entry>
+ <entry>Namespace <code>std::regex_constants</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>28.6</entry>
+ <entry>Class <code>regex_error</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>28.7</entry>
+ <entry>Class template <code>regex_traits</code></entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>28.8</entry>
+ <entry>Class template <code>basic_regex</code></entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>28.9</entry>
+ <entry>Class template <code>sub_match</code></entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>28.10</entry>
+ <entry>Class template <code>match_results</code></entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.11</entry>
+ <entry>Regular expression algorithms</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.12</entry>
+ <entry>Regular expression Iterators</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>28.13</entry>
+ <entry>Modified ECMAScript regular expression grammar</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>29</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Atomic operations</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>29.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>29.2</entry>
+ <entry>Header <code>&lt;atomic&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>29.3</entry>
+ <entry>Order and consistency</entry>
+ <entry>Partial</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>29.4</entry>
+ <entry>Lock-free property</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>29.5</entry>
+ <entry>Atomic types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>29.6</entry>
+ <entry>Operations on atomic types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>29.7</entry>
+ <entry>Flag Type and operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>29.8</entry>
+ <entry>Fences</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>
+ <emphasis>30</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Thread support</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>30.1</entry>
+ <entry>General</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.2</entry>
+ <entry>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.3</entry>
+ <entry>Threads</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.3.1</entry>
+ <entry>Class <code>thread</code></entry>
+ <entry>Partial</entry>
+ <entry><code>thread::id</code> comparisons not well-defined</entry>
+ </row>
+ <row>
+ <entry>30.3.2</entry>
+ <entry>Namespace <code>this_thread</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4</entry>
+ <entry>Mutual exclusion</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1</entry>
+ <entry>Mutex requirements</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1.1</entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1.2</entry>
+ <entry>Mutex types</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1.2.1</entry>
+ <entry>Class <code>mutex</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1.2.2</entry>
+ <entry>Class <code>recursive_mutex</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1.3</entry>
+ <entry>Timed mutex types</entry>
+ <entry/>
+ <entry>On POSIX sytems these types are only defined if the OS
+ supports the POSIX Timeouts option. </entry>
+ </row>
+ <row>
+ <entry>30.4.1.3.1</entry>
+ <entry>Class <code>timed_mutex</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.1.3.2</entry>
+ <entry>Class <code>recursive_timed_mutex</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.2</entry>
+ <entry>Locks</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.2.1</entry>
+ <entry>Class template <code>lock_guard</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.2.2</entry>
+ <entry>Class template <code>unique_lock</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.3</entry>
+ <entry>Generic locking algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.4</entry>
+ <entry>Call once</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.4.1</entry>
+ <entry>Struct <code>once_flag</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.4.4.2</entry>
+ <entry>Function <code>call_once</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.5</entry>
+ <entry>Condition variables</entry>
+ <entry>Partial</entry>
+ <entry>Missing notify_all_at_thread_exit</entry>
+ </row>
+ <row>
+ <entry>30.5.1</entry>
+ <entry>Class <code>condition_variable</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.5.2</entry>
+ <entry>Class <code>condition_variable_any</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.6</entry>
+ <entry>Futures</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.6.1</entry>
+ <entry>Overview</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.6.2</entry>
+ <entry>Error handling</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.6.3</entry>
+ <entry>Class <code>future_error</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.6.4</entry>
+ <entry>Shared state</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.6.5</entry>
+ <entry>Class template <code>promise</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing set_*_at_thread_exit</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.6.6</entry>
+ <entry>Class template <code>future</code></entry>
+ <entry>Partial</entry>
+ <entry>Timed waiting functions do not return future_status::deferred</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.6.7</entry>
+ <entry>Class template <code>shared_future</code></entry>
+ <entry>Partial</entry>
+ <entry>Timed waiting functions do not return future_status::deferred</entry>
+ </row>
+ <row>
+ <entry>30.6.8</entry>
+ <entry>Function template <code>async</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.6.9</entry>
+ <entry>Class template <code>packaged_task</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing make_ready_at_thread_exit</entry>
+ </row>
+ <row>
+ <entry>
+ <emphasis>Appendix D</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Compatibility features</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>D.1</entry>
+ <entry>Increment operator with <code>bool</code> operand</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.2</entry>
+ <entry><code>register</code> keyword</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.3</entry>
+ <entry>Implicit declaration of copy functions</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.4</entry>
+ <entry>Dynamic exception specifications</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.5</entry>
+ <entry>C standard library headers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.6</entry>
+ <entry>Old iostreams members</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.7</entry>
+ <entry><code>char*</code> streams</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.8</entry>
+ <entry>Function objects</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.9</entry>
+ <entry>Binders</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.10</entry>
+ <entry><code>auto_ptr</code></entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>D.11</entry>
+ <entry>Violating exception-specifications</entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>get_unexpected</code>.
+ <code>set_unexpected</code> is not thread-safe.
+ </entry>
+ </row>
+
+ </tbody>
+</tgroup>
+</table>
+
+<section xml:id="iso.2011.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
+
+ <para>For behaviour which is also specified by the 1998 and 2003 standards,
+ see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation
+ Specific Behavior</link>. This section only documents behaviour which
+ is new in the 2011 standard.
+ </para>
+
+ <para>
+ <emphasis>20.8.9.1.3 [func.bind.place]/1</emphasis> There are 29
+ placeholders defined and the placeholder types are
+ <literal>CopyAssignable</literal>.
+ </para>
+
+ <para>
+ <emphasis>30.2.3 [thread.req.native]/1</emphasis>
+ <classname>native_handle_type</classname> and
+ <methodname>native_handle</methodname> are provided. The handle types
+ are defined in terms of the Gthreads abstraction layer.
+ <itemizedlist>
+ <listitem><para><classname>thread</classname>: The native handle type is
+ a typedef for <code>__gthread_t</code> i.e. <code>pthread_t</code>
+ when GCC is configured with the <literal>posix</literal> thread
+ model. The value of the native handle is undefined for a thread
+ which is not joinable.
+ </para></listitem>
+ <listitem><para><classname>mutex</classname> and
+ <classname>timed_mutex</classname>:
+ The native handle type is <code>__gthread_mutex_t*</code> i.e.
+ <code>pthread_mutex_t*</code> for the <literal>posix</literal>
+ thread model.
+ </para></listitem>
+ <listitem><para><classname>recursive_mutex</classname> and
+ <classname>recursive_timed_mutex</classname>:
+ The native handle type is <code>__gthread_recursive_mutex_t*</code>
+ i.e. <code>pthread_mutex_t*</code> for the <literal>posix</literal>
+ thread model.
+ </para></listitem>
+ <listitem><para><classname>condition_variable</classname>: The native
+ handle type is <code>__gthread_cond_t*</code> i.e.
+ <code>pthread_cond_t*</code> for the <literal>posix</literal>
+ thread model.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <emphasis>30.6.1 [futures.overview]/2</emphasis>
+ <code>launch</code> is a scoped enumeration type with
+ overloaded operators to support bitmask operations. There are no
+ additional bitmask elements defined.
+ </para>
+
+</section>
+
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml b/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
index 321c4ba269..58571f2dde 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
@@ -1779,4 +1779,20 @@ release.
</tgroup>
</table>
+<section xml:id="iso.tr1.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
+
+ <para>For behaviour which is specified by the 1998 and 2003 standards,
+ see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation
+ Specific Behavior</link>. This section documents behaviour which
+ is required by TR1.
+ </para>
+
+ <para>
+ <emphasis>3.6.4 [tr.func.bind.place]/1</emphasis> There are 29
+ placeholders defined and the placeholder types are
+ <literal>Assignable</literal>.
+ </para>
+
+</section>
+
</section>
diff --git a/libstdc++-v3/doc/xml/manual/strings.xml b/libstdc++-v3/doc/xml/manual/strings.xml
index 4d9fc64f76..1387189ece 100644
--- a/libstdc++-v3/doc/xml/manual/strings.xml
+++ b/libstdc++-v3/doc/xml/manual/strings.xml
@@ -359,7 +359,7 @@ stringtok(Container &amp;container, string const &amp;in,
entry</link>) but the regular copy constructor cannot be used
because libstdc++'s <code>string</code> is Copy-On-Write.
</para>
- <para>In <link linkend="status.iso.200x">C++0x</link> mode you can call
+ <para>In <link linkend="status.iso.2011">C++11</link> mode you can call
<code>s.shrink_to_fit()</code> to achieve the same effect as
<code>s.reserve(s.size())</code>.
</para>
diff --git a/libstdc++-v3/doc/xml/manual/test.xml b/libstdc++-v3/doc/xml/manual/test.xml
index 006ff33208..88bf14dffe 100644
--- a/libstdc++-v3/doc/xml/manual/test.xml
+++ b/libstdc++-v3/doc/xml/manual/test.xml
@@ -609,10 +609,10 @@ Example 1: Testing compilation only
// { dg-do compile }
Example 2: Testing for expected warnings on line 36, which all targets fail
-// { dg-warning "string literals" "" { xfail *-*-* } 36
+// { dg-warning "string literals" "" { xfail *-*-* } 36 }
Example 3: Testing for expected warnings on line 36
-// { dg-warning "string literals" "" { target *-*-* } 36
+// { dg-warning "string literals" "" { target *-*-* } 36 }
Example 4: Testing for compilation errors on line 41
// { dg-do compile }
@@ -896,7 +896,7 @@ as the allocator type.
<listitem>
<para>
- C++0x Container Requirements.
+ C++11 Container Requirements.
</para>
<para>
@@ -924,7 +924,7 @@ as the allocator type.
<section xml:id="test.exception.safety.containers"><info><title>
-C++0x Requirements Test Sequence Descriptions
+C++11 Requirements Test Sequence Descriptions
</title></info>
diff --git a/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml b/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
new file mode 100644
index 0000000000..241ec9f0e3
--- /dev/null
+++ b/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
@@ -0,0 +1,9723 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="pbds.test" xreflabel="Test">
+ <info><title>Testing</title></info>
+ <?dbhtml filename="policy_based_data_structures_test.html"?>
+
+ <!-- S01 regression -->
+ <section xml:id="pbds.test.regression">
+ <info><title>Regression</title></info>
+
+ <para>The library contains a single comprehensive regression test.
+ For a given container type in this library, the test creates
+ an object of the container type and an object of the
+ corresponding standard type (e.g., <classname>std::set</classname>). It
+ then performs a random sequence of methods with random
+ arguments (e.g., inserts, erases, and so forth) on both
+ objects. At each operation, the test checks the return value of
+ the method, and optionally both compares this library's
+ object with the standard's object as well as performing other
+ consistency checks on this library's object (e.g.,
+ order preservation, when applicable, or node invariants, when
+ applicable).</para>
+
+ <para>Additionally, the test integrally checks exception safety
+ and resource leaks. This is done as follows. A special
+ allocator type, written for the purpose of the test, both
+ randomly throws an exceptions when allocations are performed,
+ and tracks allocations and de-allocations. The exceptions thrown
+ at allocations simulate memory-allocation failures; the
+ tracking mechanism checks for memory-related bugs (e.g.,
+ resource leaks and multiple de-allocations). Both
+ this library's containers and the containers' value-types are
+ configured to use this allocator.</para>
+
+ <para>For granularity, the test is split into the
+ several sources, each checking only some containers.</para>
+
+ <para>For more details, consult the files in
+ <filename class="directory">testsuite/ext/pb_ds/regression</filename>.
+ </para>
+ </section>
+
+ <!-- S02 performance -->
+ <section xml:id="pbds.test.performance">
+ <info><title>Performance</title></info>
+
+ <section xml:id="performance.hash">
+ <info><title>Hash-Based</title></info>
+ <para></para>
+
+ <!-- 01 <a href="hash_text_find_find_timing_test"> -->
+ <section xml:id="performance.hash.text_find">
+ <info><title>
+ Text <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.text_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>
+ This test inserts a number of values with keys from an
+ arbitrary text (<xref
+ linkend="biblio.wickland96thirty"/>) into a container,
+ then performs a series of finds using
+ <function>find</function> . It measures the average
+ time for <function>find</function> as a function of
+ the number of values inserted.</para>
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/text_find_timing_test.cc</filename>
+ </para>
+
+ <para>
+ And uses the data file:
+ <filename>filethirty_years_among_the_dead_preproc.txt</filename>
+ </para>
+
+ <para>The test checks the effect of different range-hashing
+ functions, trigger policies, and cache-hashing policies.
+ </para>
+
+ </section>
+
+ <section xml:id="hash.text_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for the native
+ and collision-chaining hash types the the function
+ applied being a text find timing test using
+ <function>find</function>.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_hash_text_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_text_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div2_sth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.text_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, the range-hashing scheme affects performance
+ more than other policies. As the results show, containers using
+ mod-based range-hashing (including the native hash-based container,
+ which is currently hard-wired to this scheme) have lower performance
+ than those using mask-based range-hashing. A modulo-based
+ range-hashing scheme's main benefit is that it takes into account
+ all hash-value bits. Standard string hash-functions are designed to
+ create hash values that are nearly-uniform as is (<xref
+ linkend="biblio.knuth98sorting"/>).</para>
+
+ <para>Trigger policies, i.e. the load-checks constants, affect
+ performance to a lesser extent.</para>
+
+ <para>Perhaps surprisingly, storing the hash value alongside each
+ entry affects performance only marginally, at least in this
+ library's implementation. (Unfortunately, it was not possible to run
+ the tests with <classname>std::tr1::unordered_map</classname> 's
+ <classname>cache_hash_code = true</classname> , as it appeared to
+ malfuntion.)</para>
+
+ </section>
+
+ </section>
+
+ <!-- 02 <a href="hash_int_find_timing_test"> -->
+ <section xml:id="performance.hash.int_find">
+ <info><title>
+ Integer <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.int_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+ using <function>find</function>. It measures the average time
+ for <function>find</function> as a function of the number of values
+ inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/random_int_find_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ hash-tables,
+ range-hashing functions, and trigger policies.</para>
+
+ </section>
+
+ <section xml:id="hash.int_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </para>
+
+ <para>The first graphic below shows the results for the native and
+ collision-chaining hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 01 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_cc_hash_int_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_cc_hash_int_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+
+ <para>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 02 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_gp_hash_int_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_gp_hash_int_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ gp_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.int_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, the choice of underlying hash-table affects
+ performance most, then the range-hashing scheme and, only finally,
+ other policies.</para>
+
+ <para>When comparing probing and chaining containers, it is
+ apparent that the probing containers are less efficient than the
+ collision-chaining containers (
+ <classname>std::tr1::unordered_map</classname> uses
+ collision-chaining) in this case.</para>
+
+ <para>Hash-Based Integer Subscript Insert Timing Test shows
+ a different case, where the situation is reversed;
+ </para>
+
+ <para>Within each type of hash-table, the range-hashing scheme
+ affects performance more than other policies; Hash-Based Text
+ <function>find</function> Find Timing Test also shows this. In the
+ above graphics should be noted that
+ <classname>std::tr1::unordered_map</classname> are hard-wired
+ currently to mod-based schemes.
+ </para>
+
+ </section>
+
+ </section>
+
+ <!-- 03 <a href="hash_int_subscript_find_test"> -->
+ <section xml:id="performance.hash.int_subscript_find">
+ <info><title>
+ Integer Subscript <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.int_subscript_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+ using <function>operator[]</function>. It measures the average time
+ for <function>operator[]</function> as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/random_int_subscript_find_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ hash-tables, range-hashing functions, and trigger policies.</para>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </para>
+
+ <para>The first graphic below shows the results for the native
+ and collision-chaining hash types, using as the function
+ applied an integer subscript timing test with
+ <function>find</function>.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_cc_hash_int_subscript_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_cc_hash_int_subscript_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+
+ <para>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 02 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_gp_hash_int_subscript_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_gp_hash_int_subscript_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ gp_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+ <para>This test shows similar results to Hash-Based
+ Integer <classname>find</classname> Find Timing test.</para>
+
+ </section>
+
+ </section>
+
+ <!-- 04 <a href="hash_random_int_subscript_insert_timing_test"> -->
+ <section xml:id="performance.hash.int_subscript_insert">
+ <info><title>
+ Integer Subscript <function>insert</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.int_subscript_insert.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with uniform i.i.d.
+ integer keys into a container, using
+ <function>operator[]</function>. It measures the average time for
+ <function>operator[]</function> as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/random_int_subscript_insert_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ hash-tables.</para>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_insert.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </para>
+
+ <para>The first graphic below shows the results for the native
+ and collision-chaining hash types, using as the function
+ applied an integer subscript timing test with
+ <function>insert</function>.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_cc_hash_int_subscript_insert.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_cc_hash_int_subscript_insert.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+
+ <para>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 02 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_gp_hash_int_subscript_insert.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_gp_hash_int_subscript_insert.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ gp_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_insert.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, as in Hash-Based Text
+ <function>find</function> Find Timing test and Hash-Based
+ Integer <function>find</function> Find Timing test , the choice
+ of underlying hash-table underlying hash-table affects performance
+ most, then the range-hashing scheme, and
+ finally any other policies.</para>
+ <para>There are some differences, however:</para>
+ <orderedlist>
+ <listitem><para>In this setting, probing tables function sometimes more
+ efficiently than collision-chaining tables.
+ This is explained shortly.</para></listitem>
+ <listitem><para>The performance graphs have a "saw-tooth" shape. The
+ average insert time rises and falls. As values are inserted
+ into the container, the load factor grows larger. Eventually,
+ a resize occurs. The reallocations and rehashing are
+ relatively expensive. After this, the load factor is smaller
+ than before.</para></listitem>
+ </orderedlist>
+
+ <para>Collision-chaining containers use indirection for greater
+ flexibility; probing containers store values contiguously, in
+ an array (see Figure Motivation::Different
+ underlying data structures A and B, respectively). It
+ follows that for simple data types, probing containers access
+ their allocator less frequently than collision-chaining
+ containers, (although they still have less efficient probing
+ sequences). This explains why some probing containers fare
+ better than collision-chaining containers in this case.</para>
+
+ <para>
+ Within each type of hash-table, the range-hashing scheme affects
+ performance more than other policies. This is similar to the
+ situation in Hash-Based Text
+ <function>find</function> Find Timing Test and Hash-Based
+ Integer <function>find</function> Find Timing Test.
+ Unsurprisingly, however, containers with lower α<subscript>max</subscript> perform worse in this case,
+ since more re-hashes are performed.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 05 <a href="hash_zlob_random_int_find_find_timing_test"> -->
+
+ <!-- 05 <a href="hash_zlob_random_int_find_find_timing_test"> -->
+ <section xml:id="performance.hash.zlob_int_find">
+ <info><title>
+ Integer <function>find</function> with Skewed-Distribution
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.zlob_int_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with a markedly
+ non-uniform integer keys into a container, then performs
+ a series of finds using <function>find</function>. It measures the average
+ time for <function>find</function> as a function of the number of values in
+ the containers. The keys are generated as follows. First, a
+ uniform integer is created. Then it is then shifted left 8 bits.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different range-hashing
+ functions and trigger policies.</para>
+
+
+ </section>
+
+ <section xml:id="hash.zlob_int_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_hash_zlob_int_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_zlob_int_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.zlob_int_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, the distribution of keys is so skewed that
+ the underlying hash-table type affects performance marginally.
+ (This is in contrast with Hash-Based Text
+ <function>find</function> Find Timing Test, Hash-Based
+ Integer <function>find</function> Find Timing Test, Hash-Based
+ Integer Subscript Find Timing Test and Hash-Based
+ Integer Subscript Insert Timing Test.)</para>
+
+ <para>The range-hashing scheme affects performance dramatically. A
+ mask-based range-hashing scheme effectively maps all values
+ into the same bucket. Access degenerates into a search within
+ an unordered linked-list. In the graphic above, it should be noted that
+ <classname>std::tr1::unordered_map</classname> is hard-wired currently to mod-based and mask-based schemes,
+ respectively.</para>
+
+ <para>When observing the settings of this test, it is apparent
+ that the keys' distribution is far from natural. One might ask
+ if the test is not contrived to show that, in some cases,
+ mod-based range hashing does better than mask-based range
+ hashing. This is, in fact just the case. A
+ more natural case in which mod-based range hashing is better was not encountered.
+ Thus the inescapable conclusion: real-life key distributions are handled better
+ with an appropriate hash function and a mask-based
+ range-hashing function. (<filename>pb_ds/example/hash_shift_mask.cc</filename>
+ shows an example of handling this a-priori known skewed
+ distribution with a mask-based range-hashing function). If hash
+ performance is bad, a χ<superscript>2</superscript> test can be used
+ to check how to transform it into a more uniform
+ distribution.</para>
+ <para>For this reason, this library's default range-hashing
+ function is mask-based.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 06 <a href="hash_random_int_erase_mem_usage_test"> -->
+
+ <!-- 06 <a href="hash_random_int_erase_mem_usage_test"> -->
+ <section xml:id="performance.hash.erase_mem">
+ <info><title>
+ Erase Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.erase_mem.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of uniform integer keys
+ into a container, then erases all keys except one. It measures
+ the final size of the container.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc</filename>
+ </para>
+
+
+ <para>The test checks how containers adjust internally as their
+ logical size decreases.</para>
+
+ </section>
+
+ <section xml:id="hash.erase_mem.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_hash_int_erase_mem.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_hash_int_erase_mem.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.erase_mem.observations">
+ <info><title>
+ Observations
+ </title></info>
+ <para>The standard's hash-based containers act very differently than trees in
+ this respect. When erasing numerous keys from an standard
+ associative-container, the resulting memory user varies greatly
+ depending on whether the container is tree-based or hash-based.
+ This is a fundamental consequence of the standard's interface for
+ associative containers, and it is not due to a specific
+ implementation.</para>
+ </section>
+
+ </section>
+ </section>
+
+
+ <section xml:id="performance.branch">
+ <info><title>Branch-Based</title></info>
+ <para></para>
+
+ <!-- 01 <a href="tree_text_insert_timing_test"> -->
+ <section xml:id="performance.branch.text_insert">
+ <info><title>
+ Text <function>insert</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.text_insert.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an arbitrary
+ text ([ wickland96thirty ]) into a container
+ using <function>insert</function> . It measures the average time
+ for <function>insert</function> as a function of the number of
+ values inserted.</para>
+
+ <para>The test checks the effect of different underlying
+ data structures.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/tree_text_insert_timing.cc</filename>
+ </para>
+
+
+ </section>
+
+ <section xml:id="branch.text_insert.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The three graphics below show the results for the native
+ tree and this library's node-based trees, the native tree and
+ this library's vector-based trees, and the native tree
+ and this library's PATRICIA-trie, respectively.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several node-based tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_insert_node.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_text_insert_node.png"/>
+ </imageobject>
+ </mediaobject>
+
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+ </informalfigure>
+
+ <informaltable frame="all">
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the
+ native tree type and a vector-based tree type.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_insert_vector.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_text_insert_vector.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+
+ <para>The graphic below shows the results for the
+ native tree type and a PATRICIA trie type.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_insert_trie.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_text_insert_trie.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.text_insert.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Observing the first graphic implies that for this setting, a splay tree
+ (<classname>tree</classname> with <classname>Tag
+ </classname> = <classname>splay_tree_tag</classname>) does not do
+ well. See also the Branch-Based
+ Text <function>find</function> Find Timing Test. The two
+ red-black trees perform better.</para>
+
+ <para>Observing the second graphic, an ordered-vector tree
+ (<classname>tree</classname> with <classname>Tag
+ </classname> = <classname>ov_tree_tag</classname>) performs
+ abysmally. Inserting into this type of tree has linear complexity
+ [ austern00noset].</para>
+
+ <para>Observing the third and last graphic, A PATRICIA trie
+ (<classname>trie</classname> with <classname>Tag
+ </classname> = <classname>pat_trie_tag</classname>) has abysmal
+ performance, as well. This is not that surprising, since a
+ large-fan-out PATRICIA trie works like a hash table with
+ collisions resolved by a sub-trie. Each time a collision is
+ encountered, a new "hash-table" is built A large fan-out PATRICIA
+ trie, however, doe does well in look-ups (see Branch-Based
+ Text <function>find</function> Find Timing Test). It may be
+ beneficial in semi-static settings.</para>
+ </section>
+
+ </section>
+
+
+ <!-- 02 <a href="tree_text_find_find_timing_test"> -->
+ <section xml:id="performance.branch.text_find">
+ <info><title>
+ Text <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.text_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([wickland96thirty]) into
+ a container, then performs a series of finds using
+ <function>find</function>. It measures the average time
+ for <function>find</function> as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/text_find_timing.cc</filename>
+ </para>
+
+
+ <para>The test checks the effect of different underlying
+ data structures.</para>
+
+ </section>
+
+ <section xml:id="branch.text_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_text_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.text_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>For this setting, a splay tree (<classname>tree</classname>
+ with <classname>Tag
+ </classname> = <classname>splay_tree_tag</classname>) does not do
+ well. This is possibly due to two reasons:</para>
+
+ <orderedlist>
+ <listitem><para>A splay tree is not guaranteed to be balanced [motwani95random]. If a
+ splay tree contains n nodes, its average root-leaf
+ path can be m &gt;&gt; log(n).</para></listitem>
+ <listitem><para>Assume a specific root-leaf search path has length
+ m, and the search-target node has distance m'
+ from the root. A red-black tree will require m + 1
+ comparisons to find the required node; a splay tree will
+ require 2 m' comparisons. A splay tree, consequently,
+ can perform many more comparisons than a red-black tree.</para></listitem>
+ </orderedlist>
+ <para>An ordered-vector tree (<classname>tree</classname>
+ with <classname>Tag</classname> = <classname>ov_tree_tag</classname>), a red-black
+ tree (<classname>tree</classname>
+ with <classname>Tag</classname> = <classname>rb_tree_tag</classname>), and the
+ native red-black tree all share approximately the same
+ performance.</para>
+ <para>An ordered-vector tree is slightly slower than red-black
+ trees, since it requires, in order to find a key, more math
+ operations than they do. Conversely, an ordered-vector tree
+ requires far lower space than the others. ([austern00noset], however,
+ seems to have an implementation that is also faster than a
+ red-black tree).</para>
+ <para>A PATRICIA trie (<classname>trie</classname>
+ with <classname>Tag</classname> = <classname>pat_trie_tag</classname>) has good
+ look-up performance, due to its large fan-out in this case. In
+ this setting, a PATRICIA trie has look-up performance comparable
+ to a hash table (see Hash-Based Text
+ <classname>find</classname> Timing Test), but it is order
+ preserving. This is not that surprising, since a large-fan-out
+ PATRICIA trie works like a hash table with collisions resolved
+ by a sub-trie. A large-fan-out PATRICIA trie does not do well on
+ modifications (see Tree-Based and Trie-Based
+ Text Insert Timing Test). Therefore, it is possibly beneficial in
+ semi-static settings.</para>
+ </section>
+ </section>
+
+
+ <!-- 03 <a href="tree_text_lor_find_find_timing_test"> -->
+ <section xml:id="performance.branch.text_lor_find">
+
+ <info><title>
+ Text <function>find</function> with Locality-of-Reference
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.text_lor_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container, then performs a series of finds using
+ <function>find</function>. It is different than Tree-Based and
+ Trie-Based Text <function>find</function> Find Timing Test in the
+ sequence of finds it performs: this test performs multiple
+ <function>find</function>s on the same key before moving on to the next
+ key. It measures the average time for <function>find</function> as a
+ function of the number of values inserted.</para>
+
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/tree_text_lor_find_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ data structures in a locality-of-reference setting.</para>
+
+ </section>
+
+ <section xml:id="branch.text_lor_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_lor_find.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_text_lor_find.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.text_lor_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>For this setting, an ordered-vector tree
+ (<classname>tree</classname> with <classname>Tag</classname>
+ = <classname>ov_tree_tag</classname>), a red-black tree
+ (<classname>tree</classname> with <classname>Tag</classname>
+ = <classname>rb_tree_tag</classname>), and the native red-black
+ tree all share approximately the same performance.</para>
+ <para>A splay tree (<classname>tree</classname>
+ with <classname>Tag</classname> = <classname>splay_tree_tag</classname>) does
+ much better, since each (successful) find "bubbles" the
+ corresponding node to the root of the tree.</para>
+
+ </section>
+ </section>
+
+ <!-- 04 <a href="tree_split_join_timing_test"> -->
+ <section xml:id="performance.branch.split_join">
+
+ <info><title>
+ <function>split</function> and <function>join</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.split_join.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test a container, inserts into a number of values, splits
+ the container at the median, and joins the two containers. (If the
+ containers are one of this library's trees,
+ it splits and joins with the <function>split</function> and
+ <function>join</function> method; otherwise, it uses the <function>erase</function> and
+ <function>insert</function> methods.) It measures the time for splitting
+ and joining the containers as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/tree_split_join_timing.cc</filename>
+ </para>
+
+
+ <para>The test checks the performance difference of <function>join</function>
+ as opposed to a sequence of <function>insert</function> operations; by
+ implication, this test checks the most efficient way to erase a
+ sub-sequence from a tree-like-based container, since this can
+ always be performed by a small sequence of splits and joins.
+ </para>
+ </section>
+
+ <section xml:id="branch.split_join.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_split_join.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_split_join.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_set
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::set</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.split_join.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this test, the native red-black trees must be split and
+ joined externally, through a sequence of <function>erase</function> and
+ <function>insert</function> operations. This is clearly
+ super-linear, and it is not that surprising that the cost is
+ high.</para>
+ <para>This library's tree-based containers use in this test the
+ <function>split</function> and <function>join</function> methods,
+ which have lower complexity: the <function>join</function> method
+ of a splay tree (<classname>tree</classname>
+ with <classname>Tag </classname>
+ = <classname>splay_tree_tag</classname>) is quadratic in the
+ length of the longest root-leaf path, and linear in the total
+ number of elements; the <function>join</function> method of a
+ red-black tree (<classname>tree</classname>
+ with <classname>Tag </classname>
+ = <classname>rb_tree_tag</classname>) or an ordered-vector tree
+ (<classname>tree</classname> with <classname>Tag </classname>
+ = <classname>ov_tree_tag</classname>) is linear in the number of
+ elements.</para>
+
+ <para>Asides from orders of growth, this library's trees access their
+ allocator very little in these operations, and some of them do not
+ access it at all. This leads to lower constants in their
+ complexity, and, for some containers, to exception-free splits and
+ joins (which can be determined
+ via <classname>container_traits</classname>).</para>
+
+ <para>It is important to note that <function>split</function> and
+ <function>join</function> are not esoteric methods - they are the most
+ efficient means of erasing a contiguous range of values from a
+ tree based container.</para>
+ </section>
+ </section>
+
+ <!-- 05 <a href="tree_order_statistics_timing_test"> -->
+ <section xml:id="performance.branch.order_statistics">
+
+ <info><title>
+ Order-Statistics
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.order_statistics.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test creates a container, inserts random integers into the
+ the container, and then checks the order-statistics of the
+ container's values. (If the container is one of this
+ library's trees, it does this with
+ the <function>order_of_key</function> method of
+ <classname>tree_order_statistics_node_update</classname>
+ ; otherwise, it uses the <function>find</function> method and
+ <function>std::distance</function>.) It measures the average
+ time for such queries as a function of the number of values
+ inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/tree_order_statistics_timing.cc</filename>
+ </para>
+
+ <para>The test checks the performance difference of policies based
+ on node-invariant as opposed to a external functions.</para>
+
+ </section>
+
+ <section xml:id="branch.order_statistics.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_order_statistics.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_tree_order_statistics.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_set
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::set</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_ost_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>tree_order_statistics_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_ost_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>tree_order_statistics_node_update</classname>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.order_statistics.observations">
+ <info><title>
+ Observations
+ </title></info>
+ <para>In this test, the native red-black tree can support
+ order-statistics queries only externally, by performing a
+ <classname>find</classname> (alternatively, <classname>lower_bound</classname> or
+ <classname>upper_bound</classname> ) and then using <classname>std::distance</classname> .
+ This is clearly linear, and it is not that surprising that the
+ cost is high.</para>
+ <para>This library's tree-based containers use in this test the
+ <classname>order_of_key</classname> method of <classname>tree_order_statistics_node_update</classname>.
+ This method has only linear complexity in the length of the
+ root-node path. Unfortunately, the average path of a splay tree
+ (<classname>tree</classname>
+ with <classname>Tag =</classname> <classname>splay_tree_tag</classname> ) can
+ be higher than logarithmic; the longest path of a red-black
+ tree (<classname>tree</classname>
+ with <classname>Tag =</classname> <classname>rb_tree_tag</classname> ) is
+ logarithmic in the number of elements. Consequently, the splay
+ tree has worse performance than the red-black tree.</para>
+ </section>
+ </section>
+
+ </section> <!-- branch -->
+
+ <section xml:id="performance.multimap">
+ <info><title>Multimap</title></info>
+ <para></para>
+
+
+ <!-- 01 <a href="multimap_text_find_timing_test_small"> -->
+ <section xml:id="performance.multimap.text_find_small">
+ <info><title>
+ Text <function>find</function> with Small Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_find_small.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform i.i.d.integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key (see Motivation::Associative
+ Containers::Alternative to Multiple Equivalent Keys). There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average find-time as a function of the
+ number of values inserted. For this library's containers, it
+ finds the secondary key from a container obtained from finding
+ a primary key. For the native multimaps, it searches a range
+ obtained using <classname>std::equal_range</classname> on a primary key.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/multimap_text_find_timing_small.cc</filename>
+ </para>
+
+ <para>The test checks the find-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_find_small.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_small_s2p_tree.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_small_s2p_tree.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_small_s2p_hash.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_small_s2p_hash.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_find_small.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+ <!-- 02 <a href="multimap_text_find_timing_test_large"> -->
+ <section xml:id="performance.multimap.text_find_large">
+ <info><title>
+ Text <function>find</function> with Large Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_find_large.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average find-time as a function of the
+ number of values inserted. For this library's containers, it
+ finds the secondary key from a container obtained from finding
+ a primary key. For the native multimaps, it searches a range
+ obtained using <classname>std::equal_range</classname> on a primary key.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/multimap_text_find_timing_large.cc</filename>
+ </para>
+
+ <para>The test checks the find-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_find_large.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_large_s2p_tree.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_large_s2p_tree.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_find_large.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 03 <a href="multimap_text_insert_timing_test_small"> -->
+ <section xml:id="performance.multimap.text_insert_small">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_small.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average insert-time as a function of
+ the number of values inserted. For this library's containers,
+ it inserts a primary key into the primary associative
+ container, then a secondary key into the secondary associative
+ container. For the native multimaps, it obtains a range using
+ <classname>std::equal_range</classname>, and inserts a value only if it was
+ not contained already.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/multimap_text_insert_timing_small.cc</filename>
+ </para>
+
+ <para>The test checks the insert-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_small.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_insert_small_s2p_tree.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_small_s2p_tree.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_small_s2p_hash.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_small_s2p_hash.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_small.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 04 <a href="multimap_text_insert_timing_test_large"> -->
+ <section xml:id="performance.multimap.text_insert_large">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_large.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average insert-time as a function of
+ the number of values inserted. For this library's containers,
+ it inserts a primary key into the primary associative
+ container, then a secondary key into the secondary associative
+ container. For the native multimaps, it obtains a range using
+ <classname>std::equal_range</classname>, and inserts a value only if it was
+ not contained already.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/multimap_text_insert_timing_large.cc</filename>
+ </para>
+
+ <para>The test checks the insert-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_large.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_insert_large_s2p_tree.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_large_s2p_tree.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_large.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 05 <a href="multimap_text_insert_mem_usage_test_small"> -->
+ <section xml:id="performance.multimap.text_insert_mem_small">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_mem_small.info">
+ <info><title>
+ Description
+ </title></info>
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 100 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges to about 20.</para>
+ <para>The test measures the memory use as a function of the number
+ of values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc</filename>
+ </para>
+
+ <para>The test checks the memory scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_small.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_insert_mem_small_s2p_tree.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_small.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+ <!-- 06 <a href="multimap_text_insert_mem_usage_test_large"> -->
+ <section xml:id="performance.multimap.text_insert_mem_large">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_mem_large.info">
+ <info><title>
+ Description
+ </title></info>
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 100 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges to about 20.</para>
+ <para>The test measures the memory use as a function of the number
+ of values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc</filename>
+ </para>
+
+ <para>The test checks the memory scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_large.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_insert_mem_large_s2p_tree.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_large_s2p_hash.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_large.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+ </section> <!-- multimap -->
+
+ <section xml:id="performance.priority_queue">
+ <info><title>Priority Queue</title></info>
+
+ <!-- 01 <a href="priority_queue_text_push_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_push">
+ <info><title>
+ Text <function>push</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_push.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container using <function>push</function>. It measures the average time
+ for <function>push</function> as a function of the number of values
+ pushed.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_text_push_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_push.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_push.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_text_push.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the binary-heap
+ based native priority queues and this library's pairing-heap
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_pairing_priority_queue_text_push.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_pairing_priority_queue_text_push.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_push.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Pairing heaps (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>pairing_heap_tag</classname>)
+ are the most suited for sequences of <function>push</function> and
+ <function>pop</function> operations of non-primitive types (e.g.
+ <classname>std::string</classname>s). (See Priority Queue
+ Text <function>push</function> and <function>pop</function> Timing Test.) They are
+ less constrained than binomial heaps, e.g., and since
+ they are node-based, they outperform binary heaps. (See
+ Priority
+ Queue Random Integer <function>push</function> Timing Test for the case
+ of primitive types.)</para>
+
+ <para>The standard's priority queues do not seem to perform well in
+ this case: the <classname>std::vector</classname> implementation needs to
+ perform a logarithmic sequence of string operations for each
+ operation, and the deque implementation is possibly hampered by
+ its need to manipulate a relatively-complex type (deques
+ support a O(1) <function>push_front</function>, even though it is
+ not used by <classname>std::priority_queue</classname>.)</para>
+
+ </section>
+ </section>
+
+ <!-- 02 <a href="priority_queue_text_push_pop_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_push_pop">
+ <info><title>
+ Text <function>push</function> and <function>pop</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_push_pop.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container using <classname>push</classname> , then removes them using
+ <classname>pop</classname> . It measures the average time for <classname>push</classname>
+ as a function of the number of values.</para>
+
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_push_pop.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_push_pop.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_text_push_pop.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the native priority
+ queues and this library's pairing-heap priority_queue data
+ structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_pairing_priority_queue_text_push_pop.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_pairing_priority_queue_text_push_pop.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname> adapting <classname>std::vector</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_push_pop.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>These results are very similar to Priority Queue Text
+ <function>push</function> Timing Test. As stated there, pairing heaps
+ (<classname>priority_queue</classname> with
+ <classname>Tag</classname>
+ = <classname>pairing_heap_tag</classname>) are most suited
+ for <function>push</function> and <function>pop</function>
+ sequences of non-primitive types such as strings. Observing these
+ two tests, one can note that a pairing heap outperforms the others
+ in terms of <function>push</function> operations, but equals
+ binary heaps (<classname>priority_queue</classname> with
+ <classname>Tag</classname>
+ = <classname>binary_heap_tag</classname>) if the number
+ of <function>push</function> and <function>pop</function>
+ operations is equal. As the number of <function>pop</function>
+ operations is at most equal to the number
+ of <function>push</function> operations, pairing heaps are better
+ in this case. See Priority Queue Random
+ Integer <function>push</function> and <function>pop</function>
+ Timing Test for a case which is different.</para>
+
+ </section>
+ </section>
+
+
+ <!-- 03 <a href="priority_queue_random_int_push_timing_test"> -->
+ <section xml:id="performance.priority_queue.int_push">
+ <info><title>
+ Integer <function>push</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.int_push.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with integer keys
+ into a container using <function>push</function>. It
+ measures the average time for <function>push</function> as a
+ function of the number of values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_random_int_push_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.int_push.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_int_push.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_int_push.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the binary-heap
+ based native priority queues and this library's
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_binary_priority_queue_int_push.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_binary_priority_queue_int_push.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname> adapting <classname>std::vector</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.int_push.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+
+ <para>Binary heaps are the most suited for sequences of
+ <function>push</function> and <function>pop</function> operations of primitive types
+ (e.g. <type>int</type>s). They are less constrained
+ than any other type, and since it is very efficient to store
+ such types in arrays, they outperform even pairing heaps. (See
+ Priority
+ Queue Text <function>push</function> Timing Test for the case of
+ non-primitive types.)</para>
+ </section>
+ </section>
+
+ <!-- 04 "priority_queue_random_int_push_pop_timing_test" -->
+ <section xml:id="performance.priority_queue.int_push_pop">
+ <info><title>
+ Integer <function>push</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.int_push_pop.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with integer keys
+ into a container using <function>push</function> , then removes them
+ using <function>pop</function> . It measures the average time for
+ <function>push</function> and <function>pop</function> as a function
+ of the number of values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.int_push_pop.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_int_push_pop.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_int_push_pop.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ </section>
+
+ <section xml:id="priority_queue.int_push_pop.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Binary heaps are the most suited for sequences of
+ <function>push</function> and <function>pop</function> operations of primitive types
+ (e.g. <type>int</type>s). This is explained in
+ Priority
+ Queue Random Int <function>push</function> Timing Test. (See Priority Queue
+ Text <function>push</function> Timing Test for the case of primitive
+ types.)</para>
+
+ <para>At first glance it seems that the standard's vector-based
+ priority queue is approximately on par with this
+ library's corresponding priority queue. There are two
+ differences however:</para>
+ <orderedlist>
+ <listitem><para>The standard's priority queue does not downsize the underlying
+ vector (or deque) as the priority queue becomes smaller
+ (see Priority Queue
+ Text <function>pop</function> Memory Use Test). It is therefore
+ gaining some speed at the expense of space.</para></listitem>
+ <listitem><para>From Priority Queue Random
+ Integer <function>push</function> and <function>pop</function>
+ Timing Test, it seems that the standard's priority queue is
+ slower in terms of <function>push</function> operations. Since
+ the number of
+ <function>pop</function> operations is at most that of <function>push</function>
+ operations, the test here is the "best" for the standard's
+ priority queue.</para></listitem>
+ </orderedlist>
+
+
+ </section>
+ </section>
+
+
+ <!-- 05 <a href="priority_queue_text_pop_mem_usage_test"> -->
+ <section xml:id="performance.priority_queue.text_pop">
+ <info><title>
+ Text <function>pop</function> Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_pop.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container, then pops them until only one is left in the
+ container. It measures the memory use as a function of the
+ number of values pushed to the container.</para>
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_pop.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_pop_mem.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_text_pop_mem.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_pop.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+
+ <para>The priority queue implementations (excluding the standard's) use
+ memory proportionally to the number of values they hold:
+ node-based implementations (e.g., a pairing heap) do so
+ naturally; this library's binary heap de-allocates memory when
+ a certain lower threshold is exceeded.</para>
+
+ <para>Note from Priority Queue Text <function>push</function>
+ and <function>pop</function> Timing Test and Priority Queue
+ Random Integer <function>push</function>
+ and <function>pop</function> Timing Test that this does not
+ impede performance compared to the standard's priority
+ queues.</para>
+ <para>See Hash-Based Erase
+ Memory Use Test for a similar phenomenon regarding priority
+ queues.</para>
+ </section>
+ </section>
+
+ <!-- 06 <a href="priority_queue_text_join_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_join">
+ <info><title>
+ Text <function>join</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_join.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ two containers, then merges the containers. It uses
+ <function>join</function> for this library's priority queues; for
+ the standard's priority queues, it successively pops values from
+ one container and pushes them into the other. The test measures
+ the average time as a function of the number of values.</para>
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_text_join_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_join.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_join.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_text_join.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_join.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this test the node-based heaps perform <function>join</function> in
+ either logarithmic or constant time. The binary heap requires
+ linear time, since the well-known heapify algorithm [clrs2001] is linear.</para>
+ <para>It would be possible to apply the heapify algorithm to the
+ standard containers, if they would support iteration (which they
+ don't). Barring iterators, it is still somehow possible to perform
+ linear-time merge on a <classname>std::vector</classname>-based
+ standard priority queue, using <function>top()</function>
+ and <function>size()</function> (since they are enough to expose
+ the underlying array), but this is impossible for
+ a <classname>std::deque</classname>-based standard priority queue.
+ Without heapify, the cost is super-linear.</para>
+ </section>
+ </section>
+
+
+ <!-- 07 <a href="priority_queue_text_push_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_modify_up">
+ <info><title>
+ Text <function>modify</function> Up
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_modify_up.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ into a container then modifies each one "up" (i.e., it
+ makes it larger). It uses <function>modify</function> for this library's
+ priority queues; for the standard's priority queues, it pops values
+ from a container until it reaches the value that should be
+ modified, then pushes values back in. It measures the average
+ time for <function>modify</function> as a function of the number of
+ values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc</filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures for graph algorithms settings. Note that making an
+ arbitrary value larger (in the sense of the priority queue's
+ comparison functor) corresponds to decrease-key in standard graph
+ algorithms [clrs2001].
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_up.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_modify_up.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_text_modify_up.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the
+ native priority queues and this library's pairing and thin heap
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_pairing_priority_queue_text_modify_up_thin.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_pairing_priority_queue_text_modify_up_thin.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_up.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>As noted above, increasing an arbitrary value (in the sense of
+ the priority queue's comparison functor) is very common in
+ graph-related algorithms. In this case, a thin heap
+ (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>thin_heap_tag</classname>)
+ outperforms a pairing heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>pairing_heap_tag</classname>).
+ Conversely, Priority Queue Text
+ <function>push</function> Timing Test, Priority Queue
+ Text <function>push</function> and <function>pop</function> Timing Test, Priority
+ Queue Random Integer <function>push</function> Timing Test, and
+ Priority
+ Queue Random Integer <function>push</function> and <function>pop</function> Timing
+ Test show that the situation is reversed for other
+ operations. It is not clear when to prefer one of these two
+ different types.</para>
+
+ <para>In this test this library's binary heaps
+ effectively perform modify in linear time. As explained in
+ Priority Queue Design::Traits, given a valid point-type iterator,
+ a binary heap can perform
+ <function>modify</function> logarithmically. The problem is that binary
+ heaps invalidate their find iterators with each modifying
+ operation, and so the only way to obtain a valid point-type
+ iterator is to iterate using a range-type iterator until
+ finding the appropriate value, then use the range-type iterator
+ for the <function>modify</function> operation.</para>
+ <para>The explanation for the standard's priority queues' performance
+ is similar to that in Priority Queue Text
+ <function>join</function> Timing Test.</para>
+
+
+ </section>
+ </section>
+
+ <!-- 08 <a href="priority_queue_text_modify_down_timing_test"> -->
+
+ <section xml:id="performance.priority_queue.text_modify_down">
+ <info><title>
+ Text <function>modify</function> Down
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_modify_down.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ into a container then modifies each one "down" (i.e., it
+ makes it smaller). It uses <function>modify</function> for this library's
+ priority queues; for the standard's priority queues, it pops values
+ from a container until it reaches the value that should be
+ modified, then pushes values back in. It measures the average
+ time for <function>modify</function> as a function of the number of
+ values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc</filename>
+ </para>
+
+ <para>The main purpose of this test is to contrast Priority Queue
+ Text <classname>modify</classname> Up Timing Test.</para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_down.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_modify_down.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_priority_queue_text_modify_down.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the
+ native priority queues and this library's pairing and thin heap
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_pairing_priority_queue_text_modify_down_thin.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="../images/pbds_pairing_priority_queue_text_modify_down_thin.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_down.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Most points in these results are similar to Priority Queue
+ Text <function>modify</function> Up Timing Test.</para>
+
+ <para>It is interesting to note, however, that as opposed to that
+ test, a thin heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>thin_heap_tag</classname>) is
+ outperformed by a pairing heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>pairing_heap_tag</classname>).
+ In this case, both heaps essentially perform an <function>erase</function>
+ operation followed by a <function>push</function> operation. As the other
+ tests show, a pairing heap is usually far more efficient than a
+ thin heap, so this is not surprising.</para>
+ <para>Most algorithms that involve priority queues increase values
+ (in the sense of the priority queue's comparison functor), and
+ so Priority Queue
+ Text <classname>modify</classname> Up Timing Test - is more interesting
+ than this test.</para>
+ </section>
+ </section>
+
+
+ </section> <!-- priority_queue -->
+
+ <section xml:id="pbds.test.performance.observations">
+ <info><title>Observations</title></info>
+
+ <section xml:id="observations.associative">
+ <info><title>Associative</title></info>
+
+ <section xml:id="observations.associative.underlying">
+ <info><title>
+ Underlying Data-Structure Families
+ </title></info>
+
+ <para>In general, hash-based containers have better timing performance
+ than containers based on different underlying-data structures. The
+ main reason to choose a tree-based or trie-based container is if a
+ byproduct of the tree-like structure is required: either
+ order-preservation, or the ability to utilize node invariants. If
+ memory-use is the major factor, an ordered-vector tree gives
+ optimal results (albeit with high modificiation costs), and a
+ list-based container gives reasonable results.</para>
+
+ </section>
+
+ <section xml:id="observations.associative.hash">
+ <info><title>
+ Hash-Based Containers
+ </title></info>
+
+ <para>Hash-based containers are typically either collision
+ chaining or probing. Collision-chaining
+ containers are more flexible internally, and so offer better
+ timing performance. Probing containers, if used for simple
+ value-types, manage memory more efficiently (they perform far
+ fewer allocation-related calls). In general, therefore, a
+ collision-chaining table should be used. A probing container,
+ conversely, might be used efficiently for operations such as
+ eliminating duplicates in a sequence, or counting the number of
+ occurrences within a sequence. Probing containers might be more
+ useful also in multithreaded applications where each thread
+ manipulates a hash-based container: in the standard, allocators have
+ class-wise semantics (see [meyers96more] - Item 10); a
+ probing container might incur less contention in this case.</para>
+ </section>
+
+ <section xml:id="observations.associative.hash_policies">
+ <info><title>
+ Hash Policies
+ </title></info>
+
+ <para>In hash-based containers, the range-hashing scheme seems to
+ affect performance more than other considerations. In most
+ settings, a mask-based scheme works well (or can be made to
+ work well). If the key-distribution can be estimated a-priori,
+ a simple hash function can produce nearly uniform hash-value
+ distribution. In many other cases (e.g., text hashing,
+ floating-point hashing), the hash function is powerful enough
+ to generate hash values with good uniformity properties
+ [knuth98sorting];
+ a modulo-based scheme, taking into account all bits of the hash
+ value, appears to overlap the hash function in its effort.</para>
+ <para>The range-hashing scheme determines many of the other
+ policies. A mask-based scheme works
+ well with an exponential-size policy; for
+ probing-based containers, it goes well with a linear-probe
+ function.</para>
+ <para>An orthogonal consideration is the trigger policy. This
+ presents difficult tradeoffs. E.g., different load
+ factors in a load-check trigger policy yield a
+ space/amortized-cost tradeoff.</para>
+ </section>
+
+ <section xml:id="observations.associative.branch">
+ <info><title>
+ Branch-Based Containers
+ </title></info>
+ <para>In general, there are several families of tree-based
+ underlying data structures: balanced node-based trees
+ (e.g., red-black or AVL trees), high-probability
+ balanced node-based trees (e.g., random treaps or
+ skip-lists), competitive node-based trees (e.g., splay
+ trees), vector-based "trees", and tries. (Additionally, there
+ are disk-residing or network-residing trees, such as B-Trees
+ and their numerous variants. An interface for this would have
+ to deal with the execution model and ACID guarantees; this is
+ out of the scope of this library.) Following are some
+ observations on their application to different settings.</para>
+
+ <para>Of the balanced node-based trees, this library includes a
+ red-black tree, as does standard (in
+ practice). This type of tree is the "workhorse" of tree-based
+ containers: it offers both reasonable modification and
+ reasonable lookup time. Unfortunately, this data structure
+ stores a huge amount of metadata. Each node must contain,
+ besides a value, three pointers and a boolean. This type might
+ be avoided if space is at a premium [austern00noset].</para>
+ <para>High-probability balanced node-based trees suffer the
+ drawbacks of deterministic balanced trees. Although they are
+ fascinating data structures, preliminary tests with them showed
+ their performance was worse than red-black trees. The library
+ does not contain any such trees, therefore.</para>
+ <para>Competitive node-based trees have two drawbacks. They are
+ usually somewhat unbalanced, and they perform a large number of
+ comparisons. Balanced trees perform one comparison per each
+ node they encounter on a search path; a splay tree performs two
+ comparisons. If the keys are complex objects, e.g.,
+ <classname>std::string</classname>, this can increase the running time.
+ Conversely, such trees do well when there is much locality of
+ reference. It is difficult to determine in which case to prefer
+ such trees over balanced trees. This library includes a splay
+ tree.</para>
+ <para>Ordered-vector trees use very little space
+ [austern00noset].
+ They do not have any other advantages (at least in this
+ implementation).</para>
+ <para>Large-fan-out PATRICIA tries have excellent lookup
+ performance, but they do so through maintaining, for each node,
+ a miniature "hash-table". Their space efficiency is low, and
+ their modification performance is bad. These tries might be
+ used for semi-static settings, where order preservation is
+ important. Alternatively, red-black trees cross-referenced with
+ hash tables can be used. [okasaki98mereable]
+ discusses small-fan-out PATRICIA tries for integers, but the
+ cited results seem to indicate that the amortized cost of
+ maintaining such trees is higher than that of balanced trees.
+ Moderate-fan-out trees might be useful for sequences where each
+ element has a limited number of choices, e.g., DNA
+ strings.</para>
+ </section>
+
+ <section xml:id="observations.associative.mapping_semantics">
+ <info><title>
+ Mapping-Semantics
+ </title></info>
+ <para>Different mapping semantics were discussed in the introduction and design sections.Here
+ the focus will be on the case where a keys can be composed into
+ primary keys and secondary keys. (In the case where some keys
+ are completely identical, it is trivial that one should use an
+ associative container mapping values to size types.) In this
+ case there are (at least) five possibilities:</para>
+ <orderedlist>
+ <listitem><para>Use an associative container that allows equivalent-key
+ values (such as <classname>std::multimap</classname>)</para></listitem>
+ <listitem><para>Use a unique-key value associative container that maps
+ each primary key to some complex associative container of
+ secondary keys, say a tree-based or hash-based container.
+ </para></listitem>
+ <listitem><para>Use a unique-key value associative container that maps
+ each primary key to some simple associative container of
+ secondary keys, say a list-based container.</para></listitem>
+ <listitem><para>Use a unique-key value associative container that maps
+ each primary key to some non-associative container
+ (e.g., <classname>std::vector</classname>)</para></listitem>
+ <listitem><para>Use a unique-key value associative container that takes
+ into account both primary and secondary keys.</para></listitem>
+ </orderedlist>
+ <para>Stated simply: there is a simple answer for this. (Excluding
+ option 1, which should be avoided in all cases).</para>
+ <para>If the expected ratio of secondary keys to primary keys is
+ small, then 3 and 4 seem reasonable. Both types of secondary
+ containers are relatively lightweight (in terms of memory use
+ and construction time), and so creating an entire container
+ object for each primary key is not too expensive. Option 4
+ might be preferable to option 3 if changing the secondary key
+ of some primary key is frequent - one cannot modify an
+ associative container's key, and the only possibility,
+ therefore, is erasing the secondary key and inserting another
+ one instead; a non-associative container, conversely, can
+ support in-place modification. The actual cost of erasing a
+ secondary key and inserting another one depends also on the
+ allocator used for secondary associative-containers (The tests
+ above used the standard allocator, but in practice one might
+ choose to use, e.g., [boost_pool]). Option 2 is
+ definitely an overkill in this case. Option 1 loses out either
+ immediately (when there is one secondary key per primary key)
+ or almost immediately after that. Option 5 has the same
+ drawbacks as option 2, but it has the additional drawback that
+ finding all values whose primary key is equivalent to some key,
+ might be linear in the total number of values stored (for
+ example, if using a hash-based container).</para>
+ <para>If the expected ratio of secondary keys to primary keys is
+ large, then the answer is more complicated. It depends on the
+ distribution of secondary keys to primary keys, the
+ distribution of accesses according to primary keys, and the
+ types of operations most frequent.</para>
+ <para>To be more precise, assume there are m primary keys,
+ primary key i is mapped to n<subscript>i</subscript>
+ secondary keys, and each primary key is mapped, on average, to
+ n secondary keys (i.e.,
+ E(n<subscript>i</subscript>) = n).</para>
+ <para>Suppose one wants to find a specific pair of primary and
+ secondary keys. Using 1 with a tree based container
+ (<classname>std::multimap</classname>), the expected cost is
+ E(Θ(log(m) + n<subscript>i</subscript>)) = Θ(log(m) +
+ n); using 1 with a hash-based container
+ (<classname>std::tr1::unordered_multimap</classname>), the expected cost is
+ Θ(n). Using 2 with a primary hash-based container
+ and secondary hash-based containers, the expected cost is
+ O(1); using 2 with a primary tree-based container and
+ secondary tree-based containers, the expected cost is (using
+ the Jensen inequality [motwani95random])
+ E(O(log(m) + log(n<subscript>i</subscript>)) = O(log(m)) +
+ E(O(log(n<subscript>i</subscript>)) = O(log(m)) + O(log(n)),
+ assuming that primary keys are accessed equiprobably. 3 and 4
+ are similar to 1, but with lower constants. Using 5 with a
+ hash-based container, the expected cost is O(1); using 5
+ with a tree based container, the cost is
+ E(Θ(log(mn))) = Θ(log(m) +
+ log(n)).</para>
+ <para>Suppose one needs the values whose primary key matches some
+ given key. Using 1 with a hash-based container, the expected
+ cost is Θ(n), but the values will not be ordered
+ by secondary keys (which may or may not be required); using 1
+ with a tree-based container, the expected cost is
+ Θ(log(m) + n), but with high constants; again the
+ values will not be ordered by secondary keys. 2, 3, and 4 are
+ similar to 1, but typically with lower constants (and,
+ additionally, if one uses a tree-based container for secondary
+ keys, they will be ordered). Using 5 with a hash-based
+ container, the cost is Θ(mn).</para>
+ <para>Suppose one wants to assign to a primary key all secondary
+ keys assigned to a different primary key. Using 1 with a
+ hash-based container, the expected cost is Θ(n),
+ but with very high constants; using 1 with a tree-based
+ container, the cost is Θ(nlog(mn)). Using 2, 3,
+ and 4, the expected cost is Θ(n), but typically
+ with far lower costs than 1. 5 is similar to 1.</para>
+
+ </section>
+
+ </section>
+
+
+ <section xml:id="observations.priority_queue">
+ <info><title>Priority_Queue</title></info>
+
+ <section xml:id="observations.priority_queue.complexity">
+ <info><title>Complexity</title></info>
+
+ <para>The following table shows the complexities of the different
+ underlying data structures in terms of orders of growth. It is
+ interesting to note that this table implies something about the
+ constants of the operations as well (see Amortized <function>push</function>
+ and <function>pop</function> operations).</para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="6" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <thead>
+ <row>
+ <entry></entry>
+ <entry><emphasis><function>push</function></emphasis></entry>
+ <entry><emphasis><function>pop</function></emphasis></entry>
+ <entry><emphasis><function>modify</function></emphasis></entry>
+ <entry><emphasis><function>erase</function></emphasis></entry>
+ <entry><emphasis><function>join</function></emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(log(n)) Worst
+ </entry>
+ <entry>
+ Θ(n log(n)) Worst
+ <subscript>[std note 1]</subscript>
+ </entry>
+ <entry>
+ Θ(n log(n))
+ <subscript>[std note 2]</subscript>
+ </entry>
+ <entry>
+ Θ(n log(n))
+ <subscript>[std note 1]</subscript>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ &lt;<classname>Tag</classname> =
+ <classname>pairing_heap_tag</classname>&gt;
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ &lt;<classname>Tag</classname> =
+ <classname>binary_heap_tag</classname>&gt;
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ &lt;<classname>Tag</classname> =
+ <classname>binomial_heap_tag</classname>&gt;
+ </entry>
+ <entry>
+ Θ(log(n)) worst
+ O(1) amortized
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ &lt;<classname>Tag</classname> =
+ <classname>rc_binomial_heap_tag</classname>&gt;
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>&lt;<classname>Tag</classname> =
+ <classname>thin_heap_tag</classname>&gt;
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(log(n)) worst
+ O(1) amortized,
+ or Θ(log(n)) amortized
+ <subscript>[thin_heap_note]</subscript>
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+
+ </informaltable>
+
+ <para>[std note 1] This
+ is not a property of the algorithm, but rather due to the fact
+ that the standard's priority queue implementation does not support
+ iterators (and consequently the ability to access a specific
+ value inside it). If the priority queue is adapting an
+ <classname>std::vector</classname>, then it is still possible to reduce this
+ to Θ(n) by adapting over the standard's adapter and
+ using the fact that <function>top</function> returns a reference to the
+ first value; if, however, it is adapting an
+ <classname>std::deque</classname>, then this is impossible.</para>
+
+ <para>[std note 2] As
+ with [std note 1], this is not a
+ property of the algorithm, but rather the standard's implementation.
+ Again, if the priority queue is adapting an
+ <classname>std::vector</classname> then it is possible to reduce this to
+ Θ(n), but with a very high constant (one must call
+ <function>std::make_heap</function> which is an expensive linear
+ operation); if the priority queue is adapting an
+ <classname>std::deque</classname>, then this is impossible.</para>
+
+ <para>[thin_heap_note] A thin heap has
+ Θ(log(n)) worst case <function>modify</function> time
+ always, but the amortized time depends on the nature of the
+ operation: I) if the operation increases the key (in the sense
+ of the priority queue's comparison functor), then the amortized
+ time is O(1), but if II) it decreases it, then the
+ amortized time is the same as the worst case time. Note that
+ for most algorithms, I) is important and II) is not.</para>
+
+ </section>
+
+ <section xml:id="observations.priority_queue.amortized_ops">
+ <info><title>
+ Amortized <function>push</function>
+ and <function>pop</function> operations
+ </title></info>
+
+
+ <para>In many cases, a priority queue is needed primarily for
+ sequences of <function>push</function> and <function>pop</function> operations. All of
+ the underlying data structures have the same amortized
+ logarithmic complexity, but they differ in terms of
+ constants.</para>
+ <para>The table above shows that the different data structures are
+ "constrained" in some respects. In general, if a data structure
+ has lower worst-case complexity than another, then it will
+ perform slower in the amortized sense. Thus, for example a
+ redundant-counter binomial heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>rc_binomial_heap_tag</classname>)
+ has lower worst-case <function>push</function> performance than a binomial
+ heap (<classname>priority_queue</classname>
+ with <classname>Tag</classname> = <classname>binomial_heap_tag</classname>),
+ and so its amortized <function>push</function> performance is slower in
+ terms of constants.</para>
+ <para>As the table shows, the "least constrained" underlying
+ data structures are binary heaps and pairing heaps.
+ Consequently, it is not surprising that they perform best in
+ terms of amortized constants.</para>
+ <orderedlist>
+ <listitem><para>Pairing heaps seem to perform best for non-primitive
+ types (e.g., <classname>std::string</classname>s), as shown by
+ Priority
+ Queue Text <function>push</function> Timing Test and Priority
+ Queue Text <function>push</function> and <function>pop</function> Timing
+ Test</para></listitem>
+ <listitem><para>binary heaps seem to perform best for primitive types
+ (e.g., <type>int</type>s), as shown by Priority
+ Queue Random Integer <function>push</function> Timing Test and
+ Priority
+ Queue Random Integer <function>push</function> and <function>pop</function> Timing
+ Test.</para></listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="observations.priority_queue.graphs">
+ <info><title>
+ Graph Algorithms
+ </title></info>
+
+ <para>In some graph algorithms, a decrease-key operation is
+ required [clrs2001];
+ this operation is identical to <function>modify</function> if a value is
+ increased (in the sense of the priority queue's comparison
+ functor). The table above and Priority Queue
+ Text <function>modify</function> Up Timing Test show that a thin heap
+ (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>thin_heap_tag</classname>)
+ outperforms a pairing heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>Tag</classname> = <classname>pairing_heap_tag</classname>),
+ but the rest of the tests show otherwise.</para>
+
+ <para>This makes it difficult to decide which implementation to use in
+ this case. Dijkstra's shortest-path algorithm, for example, requires
+ Θ(n) <function>push</function> and <function>pop</function> operations
+ (in the number of vertices), but O(n<superscript>2</superscript>)
+ <function>modify</function> operations, which can be in practice Θ(n)
+ as well. It is difficult to find an a-priori characterization of
+ graphs in which the actual number of <function>modify</function>
+ operations will dwarf the number of <function>push</function> and
+ <function>pop</function> operations.</para>
+
+ </section>
+
+ </section> <!-- priority_queue -->
+
+ </section>
+
+
+ </section> <!-- performance -->
+
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index 02498e21cd..d2d5e4b285 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -8,7 +8,7 @@
<para>
The set of features available in the GNU C++ library is shaped
by
- several <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Invoking-GCC.html">GCC
+ several <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html">GCC
Command Options</link>. Options that impact libstdc++ are
enumerated and detailed in the table below.
</para>
@@ -43,12 +43,12 @@
</row>
<row>
- <entry><literal>-std=c++0x</literal></entry>
- <entry>Use the working draft of the upcoming ISO C++0x standard.</entry>
+ <entry><literal>-std=c++11</literal></entry>
+ <entry>Use the 2011 ISO C++ standard.</entry>
</row>
<row>
- <entry><literal>-std=gnu++0x</literal></entry>
+ <entry><literal>-std=gnu++11</literal></entry>
<entry>As directly above, with GNU extensions.</entry>
</row>
@@ -64,7 +64,7 @@
<row>
<entry><literal>-pthread</literal> or <literal>-pthreads</literal></entry>
- <entry>For ISO C++0x &lt;thread&gt;, &lt;future&gt;,
+ <entry>For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
&lt;mutex&gt;, or &lt;condition_variable&gt;.</entry>
</row>
@@ -108,8 +108,7 @@
<para>
Two dialects of standard headers are supported, corresponding to
- the 1998 standard as updated for 2003, and the draft of the
- upcoming 200x standard.
+ the 1998 standard as updated for 2003, and the current 2011 standard.
</para>
<para>
@@ -218,13 +217,13 @@
</table>
<para>
-C++0x include files. These are only available in C++0x compilation
-mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
+C++11 include files. These are only available in C++11 compilation
+mode, i.e. <literal>-std=c++11</literal> or <literal>-std=gnu++11</literal>.
</para>
<para/>
<table frame="all">
-<title>C++ 200x Library Headers</title>
+<title>C++ 2011 Library Headers</title>
<tgroup cols="5" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@@ -310,7 +309,7 @@ mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
<para/>
<table frame="all">
-<title>C++ 200x Library Headers for C Library Facilities</title>
+<title>C++ 2011 Library Headers for C Library Facilities</title>
<tgroup cols="5" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@@ -632,22 +631,22 @@ possible. It's an all-or-nothing affair. Thus, code like
#include &lt;functional&gt;
</programlisting>
-<para>Implies C++0x mode. To use the entities in &lt;array&gt;, the C++0x
-compilation mode must be used, which implies the C++0x functionality
+<para>Implies C++11 mode. To use the entities in &lt;array&gt;, the C++11
+compilation mode must be used, which implies the C++11 functionality
(and deprecations) in &lt;functional&gt; will be present.
</para>
<para>Second, the other headers can be included with either dialect of
-the standard headers, although features and types specific to C++0x
-are still only enabled when in C++0x compilation mode. So, to use
+the standard headers, although features and types specific to C++11
+are still only enabled when in C++11 compilation mode. So, to use
rvalue references with <code>__gnu_cxx::vstring</code>, or to use the
debug-mode versions of <code>std::unordered_map</code>, one must use
-the <code>std=gnu++0x</code> compiler flag. (Or <code>std=c++0x</code>, of course.)
+the <code>std=gnu++11</code> compiler flag. (Or <code>std=c++11</code>, of course.)
</para>
-<para>A special case of the second rule is the mixing of TR1 and C++0x
+<para>A special case of the second rule is the mixing of TR1 and C++11
facilities. It is possible (although not especially prudent) to
-include both the TR1 version and the C++0x version of header in the
+include both the TR1 version and the C++11 version of header in the
same translation unit:
</para>
@@ -656,7 +655,7 @@ same translation unit:
#include &lt;type_traits&gt;
</programlisting>
-<para> Several parts of C++0x diverge quite substantially from TR1 predecessors.
+<para> Several parts of C++11 diverge quite substantially from TR1 predecessors.
</para>
</section>
@@ -841,7 +840,7 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
removes older ARM-style iostreams code, and other anachronisms
from the API. This macro is dependent on the version of the
standard being tracked, and as a result may give different results for
- <code>-std=c++98</code> and <code>-std=c++0x</code>. This may
+ <code>-std=c++98</code> and <code>-std=c++11</code>. This may
be useful in updating old C++ code which no longer meet the
requirements of the language, or for checking current code
against new language standards.
@@ -1093,7 +1092,7 @@ namespace gtk
<para>
In the
- C++0x <link linkend="manual.intro.using.flags">dialect</link> add
+ C++11 <link linkend="manual.intro.using.flags">dialect</link> add
</para>
<itemizedlist>
@@ -1178,7 +1177,7 @@ A quick read of the relevant part of the GCC
<itemizedlist>
<listitem>
<para>
- GNU ld (default on Linux):
+ GNU ld (default on GNU/Linux):
<literal>-Wl,-rpath,</literal><filename class="directory">destdir/lib</filename>
</para>
</listitem>
@@ -1208,7 +1207,7 @@ A quick read of the relevant part of the GCC
On some platforms the system administrator can configure the
dynamic linker to always look for libraries in
<filename class="directory">destdir/lib</filename>, for example
- by using the <command>ldconfig</command> utility on Linux
+ by using the <command>ldconfig</command> utility on GNU/Linux
or the <command>crle</command> utility on Solaris. This is a
system-wide change which can make the system unusable so if you
are unsure then use one of the other methods described above.
@@ -1270,7 +1269,7 @@ A quick read of the relevant part of the GCC
to display how ad hoc this is: On Solaris, both -pthreads and
-threads (with subtly different meanings) are honored. On OSF,
-pthread and -threads (with subtly different meanings) are
- honored. On Linux/i386, -pthread is honored. On FreeBSD,
+ honored. On GNU/Linux x86, -pthread is honored. On FreeBSD,
-pthread is honored. Some other ports use other switches.
AFAIK, none of this is properly documented anywhere other than
in ``gcc -dumpspecs'' (look at lib and cpp entries).
@@ -1281,9 +1280,16 @@ A quick read of the relevant part of the GCC
<section xml:id="manual.intro.using.concurrency.thread_safety" xreflabel="Thread Safety"><info><title>Thread Safety</title></info>
-
<para>
-We currently use the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety.
+In the terms of the 2011 C++ standard a thread-safe program is one which
+does not perform any conflicting non-atomic operations on memory locations
+and so does not contain any data races.
+The standard places requirements on the library to ensure that no data
+races are caused by the library itself or by programs which use the
+library correctly (as described below).
+The C++11 memory model and library requirements are a more formal version
+of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety, which the library used
+prior to the 2011 standard.
</para>
@@ -1329,17 +1335,25 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
</listitem>
</itemizedlist>
- <para>The user-code must guard against concurrent method calls which may
- access any particular library object's state. Typically, the
- application programmer may infer what object locks must be held
- based on the objects referenced in a method call. Without getting
+
+ <para>The user code must guard against concurrent function calls which
+ access any particular library object's state when one or more of
+ those accesses modifies the state. An object will be modified by
+ invoking a non-const member function on it or passing it as a
+ non-const argument to a library function. An object will not be
+ modified by invoking a const member function on it or passing it to
+ a function as a pointer- or reference-to-const.
+ Typically, the application
+ programmer may infer what object locks must be held based on the
+ objects referenced in a function call and whether the objects are
+ accessed as const or non-const. Without getting
into great detail, here is an example which requires user-level
locks:
</para>
<programlisting>
library_class_a shared_object_a;
- thread_main () {
+ void thread_main () {
library_class_b *object_b = new library_class_b;
shared_object_a.add_b (object_b); // must hold lock for shared_object_a
shared_object_a.mutate (); // must hold lock for shared_object_a
@@ -1347,25 +1361,84 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
// Multiple copies of thread_main() are started in independent threads.</programlisting>
<para>Under the assumption that object_a and object_b are never exposed to
- another thread, here is an example that should not require any
+ another thread, here is an example that does not require any
user-level locks:
</para>
<programlisting>
- thread_main () {
+ void thread_main () {
library_class_a object_a;
library_class_b *object_b = new library_class_b;
object_a.add_b (object_b);
object_a.mutate ();
} </programlisting>
- <para>All library objects are safe to use in a multithreaded program as
- long as each thread carefully locks out access by any other
- thread while it uses any object visible to another thread, i.e.,
- treat library objects like any other shared resource. In general,
- this requirement includes both read and write access to objects;
- unless otherwise documented as safe, do not assume that two threads
- may access a shared standard library object at the same time.
+
+ <para>All library types are safe to use in a multithreaded program
+ if objects are not shared between threads or as
+ long each thread carefully locks out access by any other
+ thread while it modifies any object visible to another thread.
+ Unless otherwise documented, the only exceptions to these rules
+ are atomic operations on the types in
+ <filename class="headerfile">&lt;atomic&gt;</filename>
+ and lock/unlock operations on the standard mutex types in
+ <filename class="headerfile">&lt;mutex&gt;</filename>. These
+ atomic operations allow concurrent accesses to the same object
+ without introducing data races.
+ </para>
+
+ <para>The following member functions of standard containers can be
+ considered to be const for the purposes of avoiding data races:
+ <code>begin</code>, <code>end</code>, <code>rbegin</code>, <code>rend</code>,
+ <code>front</code>, <code>back</code>, <code>data</code>,
+ <code>find</code>, <code>lower_bound</code>, <code>upper_bound</code>,
+ <code>equal_range</code>, <code>at</code>
+ and, except in associative or unordered associative containers,
+ <code>operator[]</code>. In other words, although they are non-const
+ so that they can return mutable iterators, those member functions
+ will not modify the container.
+ Accessing an iterator might cause a non-modifying access to
+ the container the iterator refers to (for example incrementing a
+ list iterator must access the pointers between nodes, which are part
+ of the container and so conflict with other accesses to the container).
</para>
+ <para>Programs which follow the rules above will not encounter data
+ races in library code, even when using library types which share
+ state between distinct objects. In the example below the
+ <code>shared_ptr</code> objects share a reference count, but
+ because the code does not perform any non-const operations on the
+ globally-visible object, the library ensures that the reference
+ count updates are atomic and do not introduce data races:
+ </para>
+ <programlisting>
+ std::shared_ptr&lt;int&gt; global_sp;
+
+ void thread_main() {
+ auto local_sp = global_sp; // OK, copy constructor's parameter is reference-to-const
+
+ int i = *global_sp; // OK, operator* is const
+ int j = *local_sp; // OK, does not operate on global_sp
+
+ // *global_sp = 2; // NOT OK, modifies int visible to other threads
+ // *local_sp = 2; // NOT OK, modifies int visible to other threads
+
+ // global_sp.reset(); // NOT OK, reset is non-const
+ local_sp.reset(); // OK, does not operate on global_sp
+ }
+
+ int main() {
+ global_sp.reset(new int(1));
+ std::thread t1(thread_main);
+ std::thread t2(thread_main);
+ t1.join();
+ t2.join();
+ }
+ </programlisting>
+
+ <para>For further details of the C++11 memory model see Hans-J. Boehm's
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html">Threads
+ and memory model for C++</link> pages, particularly the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.html">introduction</link>
+ and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html">FAQ</link>.
+ </para>
</section>
<section xml:id="manual.intro.using.concurrency.atomics" xreflabel="Atomics"><info><title>Atomics</title></info>
diff --git a/libstdc++-v3/doc/xml/manual/using_exceptions.xml b/libstdc++-v3/doc/xml/manual/using_exceptions.xml
index 0ced13442b..d9d271f965 100644
--- a/libstdc++-v3/doc/xml/manual/using_exceptions.xml
+++ b/libstdc++-v3/doc/xml/manual/using_exceptions.xml
@@ -438,11 +438,13 @@ is called.
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin/" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.opengroup.org/austin">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
+ </link>
+ </title>
+
<pagenums>
2.9.5 Thread Cancellation
@@ -457,11 +459,12 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/community/error_handling.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.boost.org/community/error_handling.html">
Error and Exception Handling
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>David</firstname><surname>Abrahams </surname></personname></author>
<publisher>
@@ -473,11 +476,12 @@ is called.
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/community/exception_safety.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.boost.org/community/exception_safety.html">
Exception-Safety in Generic Components
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>David</firstname><surname>Abrahams</surname></personname></author>
<publisher>
@@ -488,11 +492,13 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf">
Standard Library Exception Policy
- </citetitle>
+ </link>
+ </title>
+
<author><personname><firstname>Matt</firstname><surname>Austern</surname></personname></author>
<publisher>
<publishername>
@@ -502,11 +508,12 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html">
ia64 c++ abi exception handling
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>Richard</firstname><surname>Henderson</surname></personname></author>
<publisher>
@@ -517,11 +524,12 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.research.att.com/~bs/3rd_safe.pdf" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.research.att.com/~bs/3rd_safe.pdf">
Appendix E: Standard-Library Exception Safety
- </citetitle>
+ </link>
+ </title>
<author><personname><firstname>Bjarne</firstname><surname>Stroustrup</surname></personname></author>
</biblioentry>
@@ -536,11 +544,12 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/PR25191" class="uri">
- </biblioid>
- <citetitle>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://gcc.gnu.org/PR25191">
GCC Bug 25191: exception_defines.h #defines try/catch
- </citetitle>
+ </link>
+ </title>
</biblioentry>
</bibliography>
diff --git a/libstdc++-v3/doc/xml/manual/utilities.xml b/libstdc++-v3/doc/xml/manual/utilities.xml
index 5c3a8fd486..41eed1ecb8 100644
--- a/libstdc++-v3/doc/xml/manual/utilities.xml
+++ b/libstdc++-v3/doc/xml/manual/utilities.xml
@@ -25,7 +25,7 @@
<para>If you don't know what functors are, you're not alone. Many people
get slightly the wrong idea. In the interest of not reinventing
the wheel, we will refer you to the introduction to the functor
- concept written by SGI as chapter of their STL, in
+ concept written by SGI as part of their STL, in
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/functors.html">their
http://www.sgi.com/tech/stl/functors.html</link>.
</para>
@@ -50,8 +50,7 @@
<para>does what you think it does, <code>first</code> getting <code>x</code>
and <code>second</code> getting <code>y</code>.
</para>
- <para>There is a copy constructor, but it requires that your compiler
- handle member function templates:
+ <para>There is a constructor template for copying pairs of other types:
</para>
<programlisting>
template &lt;class U, class V&gt; pair (const pair&lt;U,V&gt;&amp; p);
diff --git a/libstdc++-v3/doc/xml/spine.xml b/libstdc++-v3/doc/xml/spine.xml
index 5fb739fb2b..5fd913e94d 100644
--- a/libstdc++-v3/doc/xml/spine.xml
+++ b/libstdc++-v3/doc/xml/spine.xml
@@ -1,149 +1,68 @@
-<set xmlns="http://docbook.org/ns/docbook" version="5.0"
- xml:id="set-index"
+<set xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="set-index"
xreflabel="The GNU C++ Library">
-<?dbhtml filename="spine.html"?>
-
- <title>The GNU C++ Library</title>
+<title>The GNU C++ Library</title>
+<?dbhtml filename="index.html"?>
<info>
- <copyright>
- <year>2000</year>
- <year>2001</year>
- <year>2002</year>
- <year>2003</year>
- <year>2004</year>
- <year>2005</year>
- <year>2006</year>
- <year>2007</year>
- <year>2008</year>
- <year>2009</year>
- <year>2010</year>
- <holder>
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
- </holder>
- </copyright>
-
-<authorgroup version="5.0">
-
-<!--
- <author>
- <firstname>Benjamin</firstname>
- <surname>Kosnik</surname>
-
- <affiliation>
- <shortaffil>Red Hat</shortaffil>
- <orgname>Red Hat, Inc.</orgname>
- <address>
- <email>libstdc++@gcc.gnu.org</email>
- </address>
- </affiliation>
-
- <authorblurb>
- <para>
- </para>
- </authorblurb>
- </author>
--->
-
- <author><personname><firstname/><surname/></personname><personblurb>
- <para>
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Paolo</firstname><surname>Carlini</surname></personname><personblurb>
- <para>
- TR1, LWG Active, Closed, Defects lists.
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Phil</firstname><surname>Edwards</surname></personname><personblurb>
- <para>
- Originating author, started HOWTO and FAQ, worked on sections
- Demangling, Macros, Strings, Iterators, Backwards
- Compatibility, SGI Extensions, Configure, Build, Install.
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Doug</firstname><surname>Gregor</surname></personname><personblurb>
- <para>
- Debug Mode, TR1 function objects
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname><personblurb>
- <para>
- Allocators, ABI, API evolution and deprecation history,
- Backwards Compatibility, Thread, Debug Support, Locales,
- Facets, Parallel Mode, Headers, Namespaces, Construction and
- Structure, Using Exceptions, DocBook conversion and layout.
- </para>
- </personblurb></author>
-
-
- <author><personname><firstname>Dhruv</firstname><surname>Matani</surname></personname><personblurb>
- <para>
- bitmap_allocator
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Jason</firstname><surname>Merrill</surname></personname><personblurb>
- <para>
- License, __verbose_terminate_handler
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Mark</firstname><surname>Mitchell</surname></personname><personblurb>
- <para>
- Porting
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Nathan</firstname><surname>Myers</surname></personname><personblurb>
- <para>
- Referenced counted string, C++1998 implementation status.
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Felix</firstname><surname>Natter</surname></personname><personblurb>
- <para>
- Namespace composition, Backwards Compatibility.
- </para>
- </personblurb></author>
-
-
- <author><personname><firstname>Stefan</firstname><surname>Olsson</surname></personname><personblurb>
- <para>
- mt_allocator
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Silvius</firstname><surname>Rus</surname></personname><personblurb>
- <para>
- Profile mode
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname><personblurb>
- <para>
- Parallel mode
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Ami</firstname><surname>Tavory</surname></personname><personblurb>
- <para>
- Policy Based Data Structures, Associative Containers, Unordered
- Containers.
- </para>
- </personblurb></author>
-
- <author><personname><firstname>Jonathan</firstname><surname>Wakely</surname></personname><personblurb>
- <para>
- shared_ptr, markup editing and styling
- </para>
- </personblurb></author>
-
-</authorgroup>
-
+ <keywordset>
+ <keyword>
+ ISO C++
+ </keyword>
+ <keyword>
+ runtime
+ </keyword>
+ <keyword>
+ library
+ </keyword>
+ </keywordset>
+ <abstract xml:id="contents">
+ <title>Short Contents</title>
+
+ <para>
+ Copyright 2008, 2009, 2011
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/">FSF
+ </link>
+ </para>
+
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License, Version 1.2 or any later version published by the
+ Free Software Foundation; with no Invariant Sections, with no
+ Front-Cover Texts, and with no Back-Cover Texts.
+ </para>
+
+ <para>
+ This is the top level of the libstdc++ documentation set. The
+ documentation is divided into the following three sections.
+ </para>
+
+ <para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <link linkend="manual">Manual</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="faq">Frequently Asked Questions</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="api">API and Source Documentation</link>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+
+ </abstract>
</info>
diff --git a/libstdc++-v3/doc/xsl/customization.xsl.in b/libstdc++-v3/doc/xsl/customization.xsl.in
new file mode 100644
index 0000000000..9db621ce73
--- /dev/null
+++ b/libstdc++-v3/doc/xsl/customization.xsl.in
@@ -0,0 +1,16 @@
+<?xml version='1.0'?>
+
+<!--
+ Specialization/customization layer for libstdc++.
+ To output both chunked/single page HTML in UTF-8 charset
+
+ XSL_STYLE_DIR is set in acinclude.m4
+
+<xsl:import html="@XSL_STYLE_DIR@/html/docbook.xsl"/>
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+<xsl:import href="@XSL_STYLE_DIR@/html/docbook.xsl"/>
+<xsl:output method="html" encoding="UTF-8" indent="no"/>
+</xsl:stylesheet>
diff --git a/libstdc++-v3/fragment.am b/libstdc++-v3/fragment.am
index d2065dc7bb..304d39637d 100644
--- a/libstdc++-v3/fragment.am
+++ b/libstdc++-v3/fragment.am
@@ -13,12 +13,18 @@ STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+if ENABLE_WERROR
+WERROR_FLAG=$(WERROR)
+else
+WERROR_FLAG=
+endif
+
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 27b0a4bb8b..e6de2568ef 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1,7 +1,7 @@
## Makefile for the include subdirectory of the GNU C++ Standard library.
##
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-## 2011
+## 2011, 2012
## Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
@@ -58,6 +58,7 @@ std_headers = \
${std_srcdir}/random \
${std_srcdir}/ratio \
${std_srcdir}/regex \
+ ${std_srcdir}/scoped_allocator \
${std_srcdir}/set \
${std_srcdir}/sstream \
${std_srcdir}/stack \
@@ -78,11 +79,10 @@ std_headers = \
bits_srcdir = ${glibcxx_srcdir}/include/bits
bits_builddir = ./bits
bits_headers = \
- ${bits_srcdir}/algorithmfwd.h \
+ ${bits_srcdir}/algorithmfwd.h \
+ ${bits_srcdir}/alloc_traits.h \
${bits_srcdir}/allocator.h \
${bits_srcdir}/atomic_base.h \
- ${bits_srcdir}/atomic_0.h \
- ${bits_srcdir}/atomic_2.h \
${bits_srcdir}/basic_ios.h \
${bits_srcdir}/basic_ios.tcc \
${bits_srcdir}/basic_string.h \
@@ -119,6 +119,7 @@ bits_headers = \
${bits_srcdir}/ostream.tcc \
${bits_srcdir}/ostream_insert.h \
${bits_srcdir}/postypes.h \
+ ${bits_srcdir}/ptr_traits.h \
${bits_srcdir}/random.h \
${bits_srcdir}/random.tcc \
${bits_srcdir}/range_access.h \
@@ -167,6 +168,7 @@ bits_headers = \
${bits_srcdir}/unique_ptr.h \
${bits_srcdir}/unordered_map.h \
${bits_srcdir}/unordered_set.h \
+ ${bits_srcdir}/uses_allocator.h \
${bits_srcdir}/valarray_array.h \
${bits_srcdir}/valarray_array.tcc \
${bits_srcdir}/valarray_before.h \
@@ -175,11 +177,12 @@ bits_headers = \
bits_sup_srcdir = ${glibcxx_srcdir}/libsupc++
bits_sup_headers = \
- ${bits_sup_srcdir}/cxxabi_forced.h \
- ${bits_sup_srcdir}/exception_defines.h \
- ${bits_sup_srcdir}/exception_ptr.h \
- ${bits_sup_srcdir}/hash_bytes.h \
- ${bits_sup_srcdir}/nested_exception.h
+ ${bits_sup_srcdir}/atomic_lockfree_defines.h \
+ ${bits_sup_srcdir}/cxxabi_forced.h \
+ ${bits_sup_srcdir}/exception_defines.h \
+ ${bits_sup_srcdir}/exception_ptr.h \
+ ${bits_sup_srcdir}/hash_bytes.h \
+ ${bits_sup_srcdir}/nested_exception.h
backward_srcdir = ${glibcxx_srcdir}/include/backward
backward_builddir = ./backward
@@ -201,7 +204,7 @@ pb_subdirs = \
${pb_builddir}/detail/pairing_heap_ \
${pb_builddir}/detail/splay_tree_ \
${pb_builddir}/detail/list_update_map_ \
- ${pb_builddir}/detail/basic_tree_policy \
+ ${pb_builddir}/detail/branch_policy \
${pb_builddir}/detail/trie_policy \
${pb_builddir}/detail/gp_hash_table_map_ \
${pb_builddir}/detail/tree_policy \
@@ -236,13 +239,12 @@ pb_headers1 = \
${pb_srcdir}/tag_and_trait.hpp \
${pb_srcdir}/tree_policy.hpp \
${pb_srcdir}/trie_policy.hpp \
- ${pb_srcdir}/detail/basic_tree_policy/basic_tree_policy_base.hpp \
- ${pb_srcdir}/detail/basic_tree_policy/null_node_metadata.hpp \
- ${pb_srcdir}/detail/basic_tree_policy/traits.hpp \
- ${pb_srcdir}/detail/basic_types.hpp \
+ ${pb_srcdir}/detail/branch_policy/branch_policy.hpp \
+ ${pb_srcdir}/detail/branch_policy/null_node_metadata.hpp \
+ ${pb_srcdir}/detail/branch_policy/traits.hpp \
${pb_srcdir}/detail/binary_heap_/binary_heap_.hpp \
${pb_srcdir}/detail/binary_heap_/const_iterator.hpp \
- ${pb_srcdir}/detail/binary_heap_/const_point_iterator.hpp \
+ ${pb_srcdir}/detail/binary_heap_/point_const_iterator.hpp \
${pb_srcdir}/detail/binary_heap_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/binary_heap_/debug_fn_imps.hpp \
${pb_srcdir}/detail/binary_heap_/entry_cmp.hpp \
@@ -266,9 +268,7 @@ pb_headers1 = \
${pb_srcdir}/detail/binomial_heap_/binomial_heap_.hpp \
${pb_srcdir}/detail/binomial_heap_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/binomial_heap_/debug_fn_imps.hpp \
- ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp \
- ${pb_srcdir}/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp \
- ${pb_srcdir}/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
+ ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp
pb_headers2 = \
${pb_srcdir}/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp \
@@ -315,7 +315,6 @@ pb_headers2 = \
pb_headers3 = \
${pb_srcdir}/detail/cc_hash_table_map_/trace_fn_imps.hpp \
${pb_srcdir}/detail/cond_dealtor.hpp \
- ${pb_srcdir}/detail/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/container_base_dispatch.hpp \
${pb_srcdir}/detail/eq_fn/eq_by_less.hpp \
${pb_srcdir}/detail/eq_fn/hash_eq_fn.hpp \
@@ -359,7 +358,7 @@ pb_headers4 = \
${pb_srcdir}/detail/hash_fn/sample_ranged_probe_fn.hpp \
${pb_srcdir}/detail/hash_fn/sample_range_hashing.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/const_iterator.hpp \
- ${pb_srcdir}/detail/left_child_next_sibling_heap_/const_point_iterator.hpp \
+ ${pb_srcdir}/detail/left_child_next_sibling_heap_/point_const_iterator.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp \
@@ -368,7 +367,6 @@ pb_headers4 = \
${pb_srcdir}/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/node.hpp \
- ${pb_srcdir}/detail/left_child_next_sibling_heap_/null_metadata.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp \
${pb_srcdir}/detail/list_update_map_/constructor_destructor_fn_imps.hpp \
@@ -381,12 +379,9 @@ pb_headers4 = \
${pb_srcdir}/detail/list_update_map_/iterators_fn_imps.hpp \
${pb_srcdir}/detail/list_update_map_/lu_map_.hpp \
${pb_srcdir}/detail/list_update_map_/trace_fn_imps.hpp \
- ${pb_srcdir}/detail/list_update_policy/counter_lu_metadata.hpp \
- ${pb_srcdir}/detail/list_update_policy/counter_lu_policy_imp.hpp \
- ${pb_srcdir}/detail/list_update_policy/mtf_lu_policy_imp.hpp \
+ ${pb_srcdir}/detail/list_update_policy/lu_counter_metadata.hpp \
${pb_srcdir}/detail/list_update_policy/sample_update_policy.hpp \
${pb_srcdir}/detail/debug_map_base.hpp \
- ${pb_srcdir}/detail/ov_tree_map_/cond_dtor.hpp \
${pb_srcdir}/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/ov_tree_map_/debug_fn_imps.hpp \
${pb_srcdir}/detail/ov_tree_map_/erase_fn_imps.hpp \
@@ -407,30 +402,20 @@ pb_headers5 = \
${pb_srcdir}/detail/pairing_heap_/insert_fn_imps.hpp \
${pb_srcdir}/detail/pairing_heap_/pairing_heap_.hpp \
${pb_srcdir}/detail/pairing_heap_/split_join_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/child_iterator.hpp \
- ${pb_srcdir}/detail/pat_trie_/cond_dtor_entry_dealtor.hpp \
- ${pb_srcdir}/detail/pat_trie_/const_child_iterator.hpp \
${pb_srcdir}/detail/pat_trie_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/debug_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/erase_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/find_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/head.hpp \
${pb_srcdir}/detail/pat_trie_/info_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/insert_join_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/internal_node.hpp \
${pb_srcdir}/detail/pat_trie_/iterators_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/leaf.hpp \
- ${pb_srcdir}/detail/pat_trie_/node_base.hpp \
- ${pb_srcdir}/detail/pat_trie_/node_iterators.hpp \
- ${pb_srcdir}/detail/pat_trie_/node_metadata_base.hpp \
${pb_srcdir}/detail/pat_trie_/pat_trie_.hpp \
- ${pb_srcdir}/detail/pat_trie_/point_iterators.hpp \
+ ${pb_srcdir}/detail/pat_trie_/pat_trie_base.hpp \
${pb_srcdir}/detail/pat_trie_/policy_access_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/r_erase_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/rotate_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/split_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/split_join_branch_bag.hpp \
- ${pb_srcdir}/detail/pat_trie_/synth_e_access_traits.hpp \
+ ${pb_srcdir}/detail/pat_trie_/synth_access_traits.hpp \
${pb_srcdir}/detail/pat_trie_/trace_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/traits.hpp \
${pb_srcdir}/detail/pat_trie_/update_fn_imps.hpp \
@@ -487,22 +472,20 @@ pb_headers7 = \
${pb_srcdir}/detail/thin_heap_/thin_heap_.hpp \
${pb_srcdir}/detail/thin_heap_/trace_fn_imps.hpp \
${pb_srcdir}/detail/tree_policy/node_metadata_selector.hpp \
- ${pb_srcdir}/detail/tree_policy/null_node_update_imp.hpp \
${pb_srcdir}/detail/tree_policy/order_statistics_imp.hpp \
${pb_srcdir}/detail/tree_policy/sample_tree_node_update.hpp \
${pb_srcdir}/detail/tree_trace_base.hpp \
${pb_srcdir}/detail/trie_policy/node_metadata_selector.hpp \
- ${pb_srcdir}/detail/trie_policy/null_node_update_imp.hpp \
${pb_srcdir}/detail/trie_policy/order_statistics_imp.hpp \
${pb_srcdir}/detail/trie_policy/prefix_search_node_update_imp.hpp \
- ${pb_srcdir}/detail/trie_policy/sample_trie_e_access_traits.hpp \
+ ${pb_srcdir}/detail/trie_policy/sample_trie_access_traits.hpp \
${pb_srcdir}/detail/trie_policy/sample_trie_node_update.hpp \
- ${pb_srcdir}/detail/trie_policy/string_trie_e_access_traits_imp.hpp \
+ ${pb_srcdir}/detail/trie_policy/trie_string_access_traits_imp.hpp \
${pb_srcdir}/detail/trie_policy/trie_policy_base.hpp \
${pb_srcdir}/detail/types_traits.hpp \
${pb_srcdir}/detail/type_utils.hpp \
${pb_srcdir}/detail/unordered_iterator/const_iterator.hpp \
- ${pb_srcdir}/detail/unordered_iterator/const_point_iterator.hpp \
+ ${pb_srcdir}/detail/unordered_iterator/point_const_iterator.hpp \
${pb_srcdir}/detail/unordered_iterator/iterator.hpp \
${pb_srcdir}/detail/unordered_iterator/point_iterator.hpp
@@ -511,6 +494,7 @@ ext_srcdir = ${glibcxx_srcdir}/include/ext
ext_builddir = ./ext
ext_headers = \
${ext_srcdir}/algorithm \
+ ${ext_srcdir}/alloc_traits.h \
${ext_srcdir}/atomicity.h \
${ext_srcdir}/array_allocator.h \
${ext_srcdir}/bitmap_allocator.h \
@@ -619,6 +603,15 @@ tr1_headers = \
${tr1_srcdir}/wchar.h \
${tr1_srcdir}/wctype.h
+tr2_srcdir = ${glibcxx_srcdir}/include/tr2
+tr2_builddir = ./tr2
+tr2_headers = \
+ ${tr2_srcdir}/bool_set \
+ ${tr2_srcdir}/bool_set.tcc \
+ ${tr2_srcdir}/dynamic_bitset \
+ ${tr2_srcdir}/ratio \
+ ${tr2_srcdir}/type_traits
+
decimal_srcdir = ${glibcxx_srcdir}/include/decimal
decimal_builddir = ./decimal
decimal_headers = \
@@ -642,6 +635,7 @@ c_base_headers = \
${c_base_srcdir}/cmath \
${c_base_srcdir}/csetjmp \
${c_base_srcdir}/csignal \
+ ${c_base_srcdir}/cstdalign \
${c_base_srcdir}/cstdarg \
${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstddef \
@@ -716,8 +710,13 @@ debug_headers = \
${debug_srcdir}/safe_base.h \
${debug_srcdir}/safe_iterator.h \
${debug_srcdir}/safe_iterator.tcc \
+ ${debug_srcdir}/safe_local_iterator.h \
+ ${debug_srcdir}/safe_local_iterator.tcc \
${debug_srcdir}/safe_sequence.h \
${debug_srcdir}/safe_sequence.tcc \
+ ${debug_srcdir}/safe_unordered_base.h \
+ ${debug_srcdir}/safe_unordered_container.h \
+ ${debug_srcdir}/safe_unordered_container.tcc \
${debug_srcdir}/set \
${debug_srcdir}/set.h \
${debug_srcdir}/string \
@@ -730,49 +729,49 @@ parallel_srcdir = ${glibcxx_srcdir}/include/parallel
parallel_builddir = ./parallel
if ENABLE_PARALLEL
parallel_headers = \
- ${parallel_srcdir}/algo.h \
- ${parallel_srcdir}/algobase.h \
- ${parallel_srcdir}/algorithm \
- ${parallel_srcdir}/algorithmfwd.h \
- ${parallel_srcdir}/balanced_quicksort.h \
- ${parallel_srcdir}/base.h \
- ${parallel_srcdir}/basic_iterator.h \
- ${parallel_srcdir}/checkers.h \
- ${parallel_srcdir}/compatibility.h \
- ${parallel_srcdir}/compiletime_settings.h \
- ${parallel_srcdir}/equally_split.h \
- ${parallel_srcdir}/features.h \
- ${parallel_srcdir}/find.h \
- ${parallel_srcdir}/find_selectors.h \
- ${parallel_srcdir}/for_each.h \
- ${parallel_srcdir}/for_each_selectors.h \
- ${parallel_srcdir}/iterator.h \
- ${parallel_srcdir}/list_partition.h \
- ${parallel_srcdir}/losertree.h \
- ${parallel_srcdir}/merge.h \
- ${parallel_srcdir}/multiseq_selection.h \
- ${parallel_srcdir}/multiway_merge.h \
- ${parallel_srcdir}/multiway_mergesort.h \
- ${parallel_srcdir}/numeric \
- ${parallel_srcdir}/numericfwd.h \
- ${parallel_srcdir}/omp_loop.h \
- ${parallel_srcdir}/omp_loop_static.h \
- ${parallel_srcdir}/par_loop.h \
- ${parallel_srcdir}/parallel.h \
- ${parallel_srcdir}/partial_sum.h \
- ${parallel_srcdir}/partition.h \
- ${parallel_srcdir}/queue.h \
- ${parallel_srcdir}/quicksort.h \
- ${parallel_srcdir}/random_number.h \
- ${parallel_srcdir}/random_shuffle.h \
- ${parallel_srcdir}/search.h \
- ${parallel_srcdir}/set_operations.h \
- ${parallel_srcdir}/settings.h \
- ${parallel_srcdir}/sort.h \
- ${parallel_srcdir}/tags.h \
- ${parallel_srcdir}/types.h \
- ${parallel_srcdir}/unique_copy.h \
- ${parallel_srcdir}/workstealing.h
+ ${parallel_srcdir}/algo.h \
+ ${parallel_srcdir}/algobase.h \
+ ${parallel_srcdir}/algorithm \
+ ${parallel_srcdir}/algorithmfwd.h \
+ ${parallel_srcdir}/balanced_quicksort.h \
+ ${parallel_srcdir}/base.h \
+ ${parallel_srcdir}/basic_iterator.h \
+ ${parallel_srcdir}/checkers.h \
+ ${parallel_srcdir}/compatibility.h \
+ ${parallel_srcdir}/compiletime_settings.h \
+ ${parallel_srcdir}/equally_split.h \
+ ${parallel_srcdir}/features.h \
+ ${parallel_srcdir}/find.h \
+ ${parallel_srcdir}/find_selectors.h \
+ ${parallel_srcdir}/for_each.h \
+ ${parallel_srcdir}/for_each_selectors.h \
+ ${parallel_srcdir}/iterator.h \
+ ${parallel_srcdir}/list_partition.h \
+ ${parallel_srcdir}/losertree.h \
+ ${parallel_srcdir}/merge.h \
+ ${parallel_srcdir}/multiseq_selection.h \
+ ${parallel_srcdir}/multiway_merge.h \
+ ${parallel_srcdir}/multiway_mergesort.h \
+ ${parallel_srcdir}/numeric \
+ ${parallel_srcdir}/numericfwd.h \
+ ${parallel_srcdir}/omp_loop.h \
+ ${parallel_srcdir}/omp_loop_static.h \
+ ${parallel_srcdir}/par_loop.h \
+ ${parallel_srcdir}/parallel.h \
+ ${parallel_srcdir}/partial_sum.h \
+ ${parallel_srcdir}/partition.h \
+ ${parallel_srcdir}/queue.h \
+ ${parallel_srcdir}/quicksort.h \
+ ${parallel_srcdir}/random_number.h \
+ ${parallel_srcdir}/random_shuffle.h \
+ ${parallel_srcdir}/search.h \
+ ${parallel_srcdir}/set_operations.h \
+ ${parallel_srcdir}/settings.h \
+ ${parallel_srcdir}/sort.h \
+ ${parallel_srcdir}/tags.h \
+ ${parallel_srcdir}/types.h \
+ ${parallel_srcdir}/unique_copy.h \
+ ${parallel_srcdir}/workstealing.h
else
parallel_headers =
endif
@@ -827,7 +826,6 @@ host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits
host_headers = \
${host_srcdir}/ctype_base.h \
${host_srcdir}/ctype_inline.h \
- ${host_srcdir}/ctype_noninline.h \
${host_srcdir}/os_defines.h \
${glibcxx_srcdir}/$(ATOMIC_WORD_SRCDIR)/atomic_word.h \
${glibcxx_srcdir}/$(ABI_TWEAKS_SRCDIR)/cxxabi_tweaks.h \
@@ -857,7 +855,6 @@ thread_host_headers = \
${host_builddir}/gthr.h \
${host_builddir}/gthr-single.h \
${host_builddir}/gthr-posix.h \
- ${host_builddir}/gthr-tpf.h \
${host_builddir}/gthr-default.h
@@ -898,9 +895,9 @@ endif
# CLEANFILES and all-local are kept up-to-date.
allstamped = \
stamp-std stamp-bits stamp-bits-sup stamp-c_base stamp-c_compatibility \
- stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-decimal \
+ stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-tr2 stamp-decimal \
stamp-debug stamp-parallel stamp-profile stamp-profile-impl \
- stamp-host
+ stamp-host
# List of all files that are created by explicit building, editing, or
# catenation.
@@ -1013,6 +1010,11 @@ stamp-tr1: ${tr1_headers}
@-cd ${tr1_builddir} && $(LN_S) $? . 2>/dev/null
@$(STAMP) stamp-tr1
+stamp-tr2: ${tr2_headers}
+ @-mkdir -p ${tr2_builddir}
+ @-cd ${tr2_builddir} && $(LN_S) $? . 2>/dev/null
+ @$(STAMP) stamp-tr2
+
stamp-decimal: ${decimal_headers}
@-mkdir -p ${decimal_builddir}
@-cd ${decimal_builddir} && $(LN_S) $? . 2>/dev/null
@@ -1103,9 +1105,9 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
-e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
-e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
- -e "s,define _GLIBCXX_EXTERN_TEMPLATE, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
+ -e "s,define _GLIBCXX_EXTERN_TEMPLATE$$, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
-e "$$ldbl_compat" \
- < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
-e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
-e 's/VERSION/_GLIBCXX_VERSION/g' \
@@ -1119,43 +1121,35 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
# Host includes for threads
uppercase = [ABCDEFGHIJKLMNOPQRSTUVWXYZ_]
-${host_builddir}/gthr.h: ${toplevel_srcdir}/gcc/gthr.h stamp-${host_alias}
+${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
sed -e '/^#pragma/b' \
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
- < ${toplevel_srcdir}/gcc/gthr.h > $@
+ < $< > $@
-${host_builddir}/gthr-single.h: ${toplevel_srcdir}/gcc/gthr-single.h \
+${host_builddir}/gthr-single.h: ${toplevel_srcdir}/libgcc/gthr-single.h \
stamp-${host_alias}
sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
-e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
- < ${toplevel_srcdir}/gcc/gthr-single.h > $@
+ < $< > $@
-${host_builddir}/gthr-posix.h: ${toplevel_srcdir}/gcc/gthr-posix.h \
+${host_builddir}/gthr-posix.h: ${toplevel_srcdir}/libgcc/gthr-posix.h \
stamp-${host_alias}
sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
-e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
-e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \
- < ${toplevel_srcdir}/gcc/gthr-posix.h > $@
+ < $< > $@
-${host_builddir}/gthr-tpf.h: ${toplevel_srcdir}/gcc/gthr-tpf.h \
- stamp-${host_alias}
- sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
- -e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
- -e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \
- -e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \
- < ${toplevel_srcdir}/gcc/gthr-tpf.h > $@
-
-${host_builddir}/gthr-default.h: ${toplevel_srcdir}/gcc/${glibcxx_thread_h} \
+${host_builddir}/gthr-default.h: ${toplevel_builddir}/libgcc/gthr-default.h \
stamp-${host_alias}
sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
-e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
-e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
- < ${toplevel_srcdir}/gcc/${glibcxx_thread_h} > $@
+ < $< > $@
# Build two precompiled C++ includes, stdc++.h.gch/*.gch
${pch1a_output}: ${allstamped} ${host_builddir}/c++config.h ${pch1_source}
@@ -1198,8 +1192,10 @@ endif
# are installed by libsupc++, so only the first four and the sub-includes
# are copied here.
install-freestanding-headers:
- $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/bits
$(mkinstalldirs) $(DESTDIR)${host_installdir}
+ $(INSTALL_DATA) ${glibcxx_srcdir}/include/bits/c++0x_warning.h \
+ $(DESTDIR)${gxx_include_dir}/bits
for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h \
${glibcxx_srcdir}/$(ABI_TWEAKS_SRCDIR)/cxxabi_tweaks.h \
${glibcxx_srcdir}/$(CPU_DEFINES_SRCDIR)/cpu_defines.h; do \
@@ -1256,6 +1252,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir}
for file in ${tr1_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr2_builddir}
+ for file in ${tr2_headers}; do \
+ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr2_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${decimal_builddir}
for file in ${decimal_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${decimal_builddir}; done
@@ -1302,7 +1301,7 @@ clean-local:
# developer tries to create them via make in the include build
# directory. (This is more of an example of how this kind of rule can
# be made.)
-.PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers)
+.PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers) $(tr2_headers)
$(decimal_headers) $(ext_headers)
$(std_headers): ; @:
$(c_base_headers): ; @:
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 3f1abd3e1d..0b6205c154 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -107,7 +107,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -135,7 +134,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -163,7 +161,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -190,6 +187,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -209,10 +207,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -240,6 +240,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -252,6 +253,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -262,14 +264,16 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
@@ -309,6 +313,7 @@ std_headers = \
${std_srcdir}/random \
${std_srcdir}/ratio \
${std_srcdir}/regex \
+ ${std_srcdir}/scoped_allocator \
${std_srcdir}/set \
${std_srcdir}/sstream \
${std_srcdir}/stack \
@@ -329,11 +334,10 @@ std_headers = \
bits_srcdir = ${glibcxx_srcdir}/include/bits
bits_builddir = ./bits
bits_headers = \
- ${bits_srcdir}/algorithmfwd.h \
+ ${bits_srcdir}/algorithmfwd.h \
+ ${bits_srcdir}/alloc_traits.h \
${bits_srcdir}/allocator.h \
${bits_srcdir}/atomic_base.h \
- ${bits_srcdir}/atomic_0.h \
- ${bits_srcdir}/atomic_2.h \
${bits_srcdir}/basic_ios.h \
${bits_srcdir}/basic_ios.tcc \
${bits_srcdir}/basic_string.h \
@@ -370,6 +374,7 @@ bits_headers = \
${bits_srcdir}/ostream.tcc \
${bits_srcdir}/ostream_insert.h \
${bits_srcdir}/postypes.h \
+ ${bits_srcdir}/ptr_traits.h \
${bits_srcdir}/random.h \
${bits_srcdir}/random.tcc \
${bits_srcdir}/range_access.h \
@@ -418,6 +423,7 @@ bits_headers = \
${bits_srcdir}/unique_ptr.h \
${bits_srcdir}/unordered_map.h \
${bits_srcdir}/unordered_set.h \
+ ${bits_srcdir}/uses_allocator.h \
${bits_srcdir}/valarray_array.h \
${bits_srcdir}/valarray_array.tcc \
${bits_srcdir}/valarray_before.h \
@@ -426,11 +432,12 @@ bits_headers = \
bits_sup_srcdir = ${glibcxx_srcdir}/libsupc++
bits_sup_headers = \
- ${bits_sup_srcdir}/cxxabi_forced.h \
- ${bits_sup_srcdir}/exception_defines.h \
- ${bits_sup_srcdir}/exception_ptr.h \
- ${bits_sup_srcdir}/hash_bytes.h \
- ${bits_sup_srcdir}/nested_exception.h
+ ${bits_sup_srcdir}/atomic_lockfree_defines.h \
+ ${bits_sup_srcdir}/cxxabi_forced.h \
+ ${bits_sup_srcdir}/exception_defines.h \
+ ${bits_sup_srcdir}/exception_ptr.h \
+ ${bits_sup_srcdir}/hash_bytes.h \
+ ${bits_sup_srcdir}/nested_exception.h
backward_srcdir = ${glibcxx_srcdir}/include/backward
backward_builddir = ./backward
@@ -451,7 +458,7 @@ pb_subdirs = \
${pb_builddir}/detail/pairing_heap_ \
${pb_builddir}/detail/splay_tree_ \
${pb_builddir}/detail/list_update_map_ \
- ${pb_builddir}/detail/basic_tree_policy \
+ ${pb_builddir}/detail/branch_policy \
${pb_builddir}/detail/trie_policy \
${pb_builddir}/detail/gp_hash_table_map_ \
${pb_builddir}/detail/tree_policy \
@@ -486,13 +493,12 @@ pb_headers1 = \
${pb_srcdir}/tag_and_trait.hpp \
${pb_srcdir}/tree_policy.hpp \
${pb_srcdir}/trie_policy.hpp \
- ${pb_srcdir}/detail/basic_tree_policy/basic_tree_policy_base.hpp \
- ${pb_srcdir}/detail/basic_tree_policy/null_node_metadata.hpp \
- ${pb_srcdir}/detail/basic_tree_policy/traits.hpp \
- ${pb_srcdir}/detail/basic_types.hpp \
+ ${pb_srcdir}/detail/branch_policy/branch_policy.hpp \
+ ${pb_srcdir}/detail/branch_policy/null_node_metadata.hpp \
+ ${pb_srcdir}/detail/branch_policy/traits.hpp \
${pb_srcdir}/detail/binary_heap_/binary_heap_.hpp \
${pb_srcdir}/detail/binary_heap_/const_iterator.hpp \
- ${pb_srcdir}/detail/binary_heap_/const_point_iterator.hpp \
+ ${pb_srcdir}/detail/binary_heap_/point_const_iterator.hpp \
${pb_srcdir}/detail/binary_heap_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/binary_heap_/debug_fn_imps.hpp \
${pb_srcdir}/detail/binary_heap_/entry_cmp.hpp \
@@ -516,9 +522,7 @@ pb_headers1 = \
${pb_srcdir}/detail/binomial_heap_/binomial_heap_.hpp \
${pb_srcdir}/detail/binomial_heap_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/binomial_heap_/debug_fn_imps.hpp \
- ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp \
- ${pb_srcdir}/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp \
- ${pb_srcdir}/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
+ ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp
pb_headers2 = \
${pb_srcdir}/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp \
@@ -565,7 +569,6 @@ pb_headers2 = \
pb_headers3 = \
${pb_srcdir}/detail/cc_hash_table_map_/trace_fn_imps.hpp \
${pb_srcdir}/detail/cond_dealtor.hpp \
- ${pb_srcdir}/detail/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/container_base_dispatch.hpp \
${pb_srcdir}/detail/eq_fn/eq_by_less.hpp \
${pb_srcdir}/detail/eq_fn/hash_eq_fn.hpp \
@@ -609,7 +612,7 @@ pb_headers4 = \
${pb_srcdir}/detail/hash_fn/sample_ranged_probe_fn.hpp \
${pb_srcdir}/detail/hash_fn/sample_range_hashing.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/const_iterator.hpp \
- ${pb_srcdir}/detail/left_child_next_sibling_heap_/const_point_iterator.hpp \
+ ${pb_srcdir}/detail/left_child_next_sibling_heap_/point_const_iterator.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp \
@@ -618,7 +621,6 @@ pb_headers4 = \
${pb_srcdir}/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/node.hpp \
- ${pb_srcdir}/detail/left_child_next_sibling_heap_/null_metadata.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp \
${pb_srcdir}/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp \
${pb_srcdir}/detail/list_update_map_/constructor_destructor_fn_imps.hpp \
@@ -631,12 +633,9 @@ pb_headers4 = \
${pb_srcdir}/detail/list_update_map_/iterators_fn_imps.hpp \
${pb_srcdir}/detail/list_update_map_/lu_map_.hpp \
${pb_srcdir}/detail/list_update_map_/trace_fn_imps.hpp \
- ${pb_srcdir}/detail/list_update_policy/counter_lu_metadata.hpp \
- ${pb_srcdir}/detail/list_update_policy/counter_lu_policy_imp.hpp \
- ${pb_srcdir}/detail/list_update_policy/mtf_lu_policy_imp.hpp \
+ ${pb_srcdir}/detail/list_update_policy/lu_counter_metadata.hpp \
${pb_srcdir}/detail/list_update_policy/sample_update_policy.hpp \
${pb_srcdir}/detail/debug_map_base.hpp \
- ${pb_srcdir}/detail/ov_tree_map_/cond_dtor.hpp \
${pb_srcdir}/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/ov_tree_map_/debug_fn_imps.hpp \
${pb_srcdir}/detail/ov_tree_map_/erase_fn_imps.hpp \
@@ -657,30 +656,20 @@ pb_headers5 = \
${pb_srcdir}/detail/pairing_heap_/insert_fn_imps.hpp \
${pb_srcdir}/detail/pairing_heap_/pairing_heap_.hpp \
${pb_srcdir}/detail/pairing_heap_/split_join_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/child_iterator.hpp \
- ${pb_srcdir}/detail/pat_trie_/cond_dtor_entry_dealtor.hpp \
- ${pb_srcdir}/detail/pat_trie_/const_child_iterator.hpp \
${pb_srcdir}/detail/pat_trie_/constructors_destructor_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/debug_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/erase_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/find_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/head.hpp \
${pb_srcdir}/detail/pat_trie_/info_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/insert_join_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/internal_node.hpp \
${pb_srcdir}/detail/pat_trie_/iterators_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/leaf.hpp \
- ${pb_srcdir}/detail/pat_trie_/node_base.hpp \
- ${pb_srcdir}/detail/pat_trie_/node_iterators.hpp \
- ${pb_srcdir}/detail/pat_trie_/node_metadata_base.hpp \
${pb_srcdir}/detail/pat_trie_/pat_trie_.hpp \
- ${pb_srcdir}/detail/pat_trie_/point_iterators.hpp \
+ ${pb_srcdir}/detail/pat_trie_/pat_trie_base.hpp \
${pb_srcdir}/detail/pat_trie_/policy_access_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/r_erase_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/rotate_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/split_fn_imps.hpp \
- ${pb_srcdir}/detail/pat_trie_/split_join_branch_bag.hpp \
- ${pb_srcdir}/detail/pat_trie_/synth_e_access_traits.hpp \
+ ${pb_srcdir}/detail/pat_trie_/synth_access_traits.hpp \
${pb_srcdir}/detail/pat_trie_/trace_fn_imps.hpp \
${pb_srcdir}/detail/pat_trie_/traits.hpp \
${pb_srcdir}/detail/pat_trie_/update_fn_imps.hpp \
@@ -737,22 +726,20 @@ pb_headers7 = \
${pb_srcdir}/detail/thin_heap_/thin_heap_.hpp \
${pb_srcdir}/detail/thin_heap_/trace_fn_imps.hpp \
${pb_srcdir}/detail/tree_policy/node_metadata_selector.hpp \
- ${pb_srcdir}/detail/tree_policy/null_node_update_imp.hpp \
${pb_srcdir}/detail/tree_policy/order_statistics_imp.hpp \
${pb_srcdir}/detail/tree_policy/sample_tree_node_update.hpp \
${pb_srcdir}/detail/tree_trace_base.hpp \
${pb_srcdir}/detail/trie_policy/node_metadata_selector.hpp \
- ${pb_srcdir}/detail/trie_policy/null_node_update_imp.hpp \
${pb_srcdir}/detail/trie_policy/order_statistics_imp.hpp \
${pb_srcdir}/detail/trie_policy/prefix_search_node_update_imp.hpp \
- ${pb_srcdir}/detail/trie_policy/sample_trie_e_access_traits.hpp \
+ ${pb_srcdir}/detail/trie_policy/sample_trie_access_traits.hpp \
${pb_srcdir}/detail/trie_policy/sample_trie_node_update.hpp \
- ${pb_srcdir}/detail/trie_policy/string_trie_e_access_traits_imp.hpp \
+ ${pb_srcdir}/detail/trie_policy/trie_string_access_traits_imp.hpp \
${pb_srcdir}/detail/trie_policy/trie_policy_base.hpp \
${pb_srcdir}/detail/types_traits.hpp \
${pb_srcdir}/detail/type_utils.hpp \
${pb_srcdir}/detail/unordered_iterator/const_iterator.hpp \
- ${pb_srcdir}/detail/unordered_iterator/const_point_iterator.hpp \
+ ${pb_srcdir}/detail/unordered_iterator/point_const_iterator.hpp \
${pb_srcdir}/detail/unordered_iterator/iterator.hpp \
${pb_srcdir}/detail/unordered_iterator/point_iterator.hpp
@@ -760,6 +747,7 @@ ext_srcdir = ${glibcxx_srcdir}/include/ext
ext_builddir = ./ext
ext_headers = \
${ext_srcdir}/algorithm \
+ ${ext_srcdir}/alloc_traits.h \
${ext_srcdir}/atomicity.h \
${ext_srcdir}/array_allocator.h \
${ext_srcdir}/bitmap_allocator.h \
@@ -868,6 +856,15 @@ tr1_headers = \
${tr1_srcdir}/wchar.h \
${tr1_srcdir}/wctype.h
+tr2_srcdir = ${glibcxx_srcdir}/include/tr2
+tr2_builddir = ./tr2
+tr2_headers = \
+ ${tr2_srcdir}/bool_set \
+ ${tr2_srcdir}/bool_set.tcc \
+ ${tr2_srcdir}/dynamic_bitset \
+ ${tr2_srcdir}/ratio \
+ ${tr2_srcdir}/type_traits
+
decimal_srcdir = ${glibcxx_srcdir}/include/decimal
decimal_builddir = ./decimal
decimal_headers = \
@@ -892,6 +889,7 @@ c_base_headers = \
${c_base_srcdir}/cmath \
${c_base_srcdir}/csetjmp \
${c_base_srcdir}/csignal \
+ ${c_base_srcdir}/cstdalign \
${c_base_srcdir}/cstdarg \
${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstddef \
@@ -960,8 +958,13 @@ debug_headers = \
${debug_srcdir}/safe_base.h \
${debug_srcdir}/safe_iterator.h \
${debug_srcdir}/safe_iterator.tcc \
+ ${debug_srcdir}/safe_local_iterator.h \
+ ${debug_srcdir}/safe_local_iterator.tcc \
${debug_srcdir}/safe_sequence.h \
${debug_srcdir}/safe_sequence.tcc \
+ ${debug_srcdir}/safe_unordered_base.h \
+ ${debug_srcdir}/safe_unordered_container.h \
+ ${debug_srcdir}/safe_unordered_container.tcc \
${debug_srcdir}/set \
${debug_srcdir}/set.h \
${debug_srcdir}/string \
@@ -975,49 +978,49 @@ parallel_srcdir = ${glibcxx_srcdir}/include/parallel
parallel_builddir = ./parallel
@ENABLE_PARALLEL_FALSE@parallel_headers =
@ENABLE_PARALLEL_TRUE@parallel_headers = \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algo.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algobase.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algorithm \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algorithmfwd.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/balanced_quicksort.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/base.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/basic_iterator.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/checkers.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/compatibility.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/compiletime_settings.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/equally_split.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/features.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/find.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/find_selectors.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/for_each.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/for_each_selectors.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/iterator.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/list_partition.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/losertree.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/merge.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/multiseq_selection.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/multiway_merge.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/multiway_mergesort.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/numeric \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/numericfwd.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/omp_loop.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/omp_loop_static.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/par_loop.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/parallel.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/partial_sum.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/partition.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/queue.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/quicksort.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/random_number.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/random_shuffle.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/search.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/set_operations.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/settings.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/sort.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/tags.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/types.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/unique_copy.h \
-@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/workstealing.h
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algo.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algobase.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algorithm \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/algorithmfwd.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/balanced_quicksort.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/base.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/basic_iterator.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/checkers.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/compatibility.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/compiletime_settings.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/equally_split.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/features.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/find.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/find_selectors.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/for_each.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/for_each_selectors.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/iterator.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/list_partition.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/losertree.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/merge.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/multiseq_selection.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/multiway_merge.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/multiway_mergesort.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/numeric \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/numericfwd.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/omp_loop.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/omp_loop_static.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/par_loop.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/parallel.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/partial_sum.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/partition.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/queue.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/quicksort.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/random_number.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/random_shuffle.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/search.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/set_operations.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/settings.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/sort.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/tags.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/types.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/unique_copy.h \
+@ENABLE_PARALLEL_TRUE@ ${parallel_srcdir}/workstealing.h
# Profile mode headers
@@ -1068,7 +1071,6 @@ host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits
host_headers = \
${host_srcdir}/ctype_base.h \
${host_srcdir}/ctype_inline.h \
- ${host_srcdir}/ctype_noninline.h \
${host_srcdir}/os_defines.h \
${glibcxx_srcdir}/$(ATOMIC_WORD_SRCDIR)/atomic_word.h \
${glibcxx_srcdir}/$(ABI_TWEAKS_SRCDIR)/cxxabi_tweaks.h \
@@ -1100,7 +1102,6 @@ thread_host_headers = \
${host_builddir}/gthr.h \
${host_builddir}/gthr-single.h \
${host_builddir}/gthr-posix.h \
- ${host_builddir}/gthr-tpf.h \
${host_builddir}/gthr-default.h
pch1_source = ${glibcxx_srcdir}/include/precompiled/stdc++.h
@@ -1135,9 +1136,9 @@ PCHFLAGS = -x c++-header -nostdinc++ $(CXXFLAGS)
# CLEANFILES and all-local are kept up-to-date.
allstamped = \
stamp-std stamp-bits stamp-bits-sup stamp-c_base stamp-c_compatibility \
- stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-decimal \
+ stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-tr2 stamp-decimal \
stamp-debug stamp-parallel stamp-profile stamp-profile-impl \
- stamp-host
+ stamp-host
# List of all files that are created by explicit building, editing, or
@@ -1412,6 +1413,11 @@ stamp-tr1: ${tr1_headers}
@-cd ${tr1_builddir} && $(LN_S) $? . 2>/dev/null
@$(STAMP) stamp-tr1
+stamp-tr2: ${tr2_headers}
+ @-mkdir -p ${tr2_builddir}
+ @-cd ${tr2_builddir} && $(LN_S) $? . 2>/dev/null
+ @$(STAMP) stamp-tr2
+
stamp-decimal: ${decimal_headers}
@-mkdir -p ${decimal_builddir}
@-cd ${decimal_builddir} && $(LN_S) $? . 2>/dev/null
@@ -1493,9 +1499,9 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
-e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
-e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
- -e "s,define _GLIBCXX_EXTERN_TEMPLATE, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
+ -e "s,define _GLIBCXX_EXTERN_TEMPLATE$$, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
-e "$$ldbl_compat" \
- < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
-e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
-e 's/VERSION/_GLIBCXX_VERSION/g' \
@@ -1506,43 +1512,35 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
echo "" >> $@ ;\
echo "#endif // _GLIBCXX_CXX_CONFIG_H" >> $@
-${host_builddir}/gthr.h: ${toplevel_srcdir}/gcc/gthr.h stamp-${host_alias}
+${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
sed -e '/^#pragma/b' \
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
- < ${toplevel_srcdir}/gcc/gthr.h > $@
+ < $< > $@
-${host_builddir}/gthr-single.h: ${toplevel_srcdir}/gcc/gthr-single.h \
+${host_builddir}/gthr-single.h: ${toplevel_srcdir}/libgcc/gthr-single.h \
stamp-${host_alias}
sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
-e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
- < ${toplevel_srcdir}/gcc/gthr-single.h > $@
+ < $< > $@
-${host_builddir}/gthr-posix.h: ${toplevel_srcdir}/gcc/gthr-posix.h \
+${host_builddir}/gthr-posix.h: ${toplevel_srcdir}/libgcc/gthr-posix.h \
stamp-${host_alias}
sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
-e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
-e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \
- < ${toplevel_srcdir}/gcc/gthr-posix.h > $@
+ < $< > $@
-${host_builddir}/gthr-tpf.h: ${toplevel_srcdir}/gcc/gthr-tpf.h \
- stamp-${host_alias}
- sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
- -e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
- -e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \
- -e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \
- < ${toplevel_srcdir}/gcc/gthr-tpf.h > $@
-
-${host_builddir}/gthr-default.h: ${toplevel_srcdir}/gcc/${glibcxx_thread_h} \
+${host_builddir}/gthr-default.h: ${toplevel_builddir}/libgcc/gthr-default.h \
stamp-${host_alias}
sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \
-e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \
-e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
- < ${toplevel_srcdir}/gcc/${glibcxx_thread_h} > $@
+ < $< > $@
# Build two precompiled C++ includes, stdc++.h.gch/*.gch
${pch1a_output}: ${allstamped} ${host_builddir}/c++config.h ${pch1_source}
@@ -1582,8 +1580,10 @@ ${pch3_output}: ${pch3_source} ${pch2_output}
# are installed by libsupc++, so only the first four and the sub-includes
# are copied here.
install-freestanding-headers:
- $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/bits
$(mkinstalldirs) $(DESTDIR)${host_installdir}
+ $(INSTALL_DATA) ${glibcxx_srcdir}/include/bits/c++0x_warning.h \
+ $(DESTDIR)${gxx_include_dir}/bits
for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h \
${glibcxx_srcdir}/$(ABI_TWEAKS_SRCDIR)/cxxabi_tweaks.h \
${glibcxx_srcdir}/$(CPU_DEFINES_SRCDIR)/cpu_defines.h; do \
@@ -1640,6 +1640,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir}
for file in ${tr1_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr2_builddir}
+ for file in ${tr2_headers}; do \
+ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr2_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${decimal_builddir}
for file in ${decimal_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${decimal_builddir}; done
@@ -1683,7 +1686,7 @@ clean-local:
# developer tries to create them via make in the include build
# directory. (This is more of an example of how this kind of rule can
# be made.)
-.PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers)
+.PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers) $(tr2_headers)
$(decimal_headers) $(ext_headers)
$(std_headers): ; @:
$(c_base_headers): ; @:
diff --git a/libstdc++-v3/include/backward/auto_ptr.h b/libstdc++-v3/include/backward/auto_ptr.h
index e868765103..3c91c08139 100644
--- a/libstdc++-v3/include/backward/auto_ptr.h
+++ b/libstdc++-v3/include/backward/auto_ptr.h
@@ -95,30 +95,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief An %auto_ptr is usually constructed from a raw pointer.
- * @param p A pointer (defaults to NULL).
+ * @param __p A pointer (defaults to NULL).
*
- * This object now @e owns the object pointed to by @a p.
+ * This object now @e owns the object pointed to by @a __p.
*/
explicit
auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
/**
* @brief An %auto_ptr can be constructed from another %auto_ptr.
- * @param a Another %auto_ptr of the same type.
+ * @param __a Another %auto_ptr of the same type.
*
- * This object now @e owns the object previously owned by @a a,
+ * This object now @e owns the object previously owned by @a __a,
* which has given up ownership.
*/
auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
/**
* @brief An %auto_ptr can be constructed from another %auto_ptr.
- * @param a Another %auto_ptr of a different but related type.
+ * @param __a Another %auto_ptr of a different but related type.
*
* A pointer-to-Tp1 must be convertible to a
* pointer-to-Tp/element_type.
*
- * This object now @e owns the object previously owned by @a a,
+ * This object now @e owns the object previously owned by @a __a,
* which has given up ownership.
*/
template<typename _Tp1>
@@ -126,9 +126,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief %auto_ptr assignment operator.
- * @param a Another %auto_ptr of the same type.
+ * @param __a Another %auto_ptr of the same type.
*
- * This object now @e owns the object previously owned by @a a,
+ * This object now @e owns the object previously owned by @a __a,
* which has given up ownership. The object that this one @e
* used to own and track has been deleted.
*/
@@ -141,11 +141,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief %auto_ptr assignment operator.
- * @param a Another %auto_ptr of a different but related type.
+ * @param __a Another %auto_ptr of a different but related type.
*
* A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type.
*
- * This object now @e owns the object previously owned by @a a,
+ * This object now @e owns the object previously owned by @a __a,
* which has given up ownership. The object that this one @e
* used to own and track has been deleted.
*/
@@ -231,9 +231,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Forcibly deletes the managed object.
- * @param p A pointer (defaults to NULL).
+ * @param __p A pointer (defaults to NULL).
*
- * This object now @e owns the object pointed to by @a p. The
+ * This object now @e owns the object pointed to by @a __p. The
* previous object has been deleted.
*/
void
diff --git a/libstdc++-v3/include/backward/binders.h b/libstdc++-v3/include/backward/binders.h
index f98b56aaed..076f8d2e21 100644
--- a/libstdc++-v3/include/backward/binders.h
+++ b/libstdc++-v3/include/backward/binders.h
@@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The type @c binder2nd and its creator function @c bind2nd do the same
* thing, but the stored argument is passed as the second parameter instead
- * of the first, e.g., @c bind2nd(std::minus<float>,1.3) will create a
+ * of the first, e.g., @c bind2nd(std::minus<float>(),1.3) will create a
* functor whose @c operator() accepts a floating-point number, subtracts
* 1.3 from it, and returns the result. (If @c bind1st had been used,
* the functor would perform <em>1.3 - x</em> instead.
@@ -89,10 +89,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* calling algorithms. Their return values will be temporary objects.
* (The goal is to not require you to type names like
* @c std::binder1st<std::plus<int>> for declaring a variable to hold the
- * return value from @c bind1st(std::plus<int>,5).
+ * return value from @c bind1st(std::plus<int>(),5).
*
* These become more useful when combined with the composition functions.
*
+ * These functions are deprecated in C++11 and can be replaced by
+ * @c std::bind (or @c std::tr1::bind) which is more powerful and flexible,
+ * supporting functions with any number of arguments. Uses of @c bind1st
+ * can be replaced by @c std::bind(f, x, std::placeholders::_1) and
+ * @c bind2nd by @c std::bind(f, std::placeholders::_1, x).
* @{
*/
/// One of the @link binders binder functors@endlink.
diff --git a/libstdc++-v3/include/backward/hashtable.h b/libstdc++-v3/include/backward/hashtable.h
index 0bcaec4fdc..dbba097d13 100644
--- a/libstdc++-v3/include/backward/hashtable.h
+++ b/libstdc++-v3/include/backward/hashtable.h
@@ -209,7 +209,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Note: assumes long is at least 32 bits.
enum { _S_num_primes = 29 };
- static const unsigned long __stl_prime_list[_S_num_primes] =
+ template<typename _PrimeType>
+ struct _Hashtable_prime_list
+ {
+ static const _PrimeType __stl_prime_list[_S_num_primes];
+
+ static const _PrimeType*
+ _S_get_prime_list();
+ };
+
+ template<typename _PrimeType> const _PrimeType
+ _Hashtable_prime_list<_PrimeType>::__stl_prime_list[_S_num_primes] =
{
5ul, 53ul, 97ul, 193ul, 389ul,
769ul, 1543ul, 3079ul, 6151ul, 12289ul,
@@ -219,11 +229,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
805306457ul, 1610612741ul, 3221225473ul, 4294967291ul
};
+ template<class _PrimeType> inline const _PrimeType*
+ _Hashtable_prime_list<_PrimeType>::_S_get_prime_list()
+ {
+ return __stl_prime_list;
+ }
+
inline unsigned long
__stl_next_prime(unsigned long __n)
{
- const unsigned long* __first = __stl_prime_list;
- const unsigned long* __last = __stl_prime_list + (int)_S_num_primes;
+ const unsigned long* __first = _Hashtable_prime_list<unsigned long>::_S_get_prime_list();
+ const unsigned long* __last = __first + (int)_S_num_primes;
const unsigned long* pos = std::lower_bound(__first, __last, __n);
return pos == __last ? *(__last - 1) : *pos;
}
@@ -417,7 +433,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_type
max_bucket_count() const
- { return __stl_prime_list[(int)_S_num_primes - 1]; }
+ { return _Hashtable_prime_list<unsigned long>::
+ _S_get_prime_list()[(int)_S_num_primes - 1];
+ }
size_type
elems_in_bucket(size_type __bucket) const
@@ -898,13 +916,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__next = __cur->_M_next;
}
}
- if (_M_equals(_M_get_key(__first->_M_val), __key))
- {
- _M_buckets[__n] = __first->_M_next;
- _M_delete_node(__first);
- ++__erased;
- --_M_num_elements;
- }
+ bool __delete_first = _M_equals(_M_get_key(__first->_M_val), __key);
if (__saved_slot)
{
__next = __saved_slot->_M_next;
@@ -913,6 +925,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
++__erased;
--_M_num_elements;
}
+ if (__delete_first)
+ {
+ _M_buckets[__n] = __first->_M_next;
+ _M_delete_node(__first);
+ ++__erased;
+ --_M_num_elements;
+ }
}
return __erased;
}
diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h
index 8632bf5dd6..fbec55d0c3 100644
--- a/libstdc++-v3/include/bits/algorithmfwd.h
+++ b/libstdc++-v3/include/bits/algorithmfwd.h
@@ -35,7 +35,9 @@
#include <bits/c++config.h>
#include <bits/stl_pair.h>
#include <bits/stl_iterator_base_types.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -549,11 +551,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
void
- swap(_Tp&, _Tp&);
+ swap(_Tp&, _Tp&)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(__and_<is_nothrow_move_constructible<_Tp>,
+ is_nothrow_move_assignable<_Tp>>::value)
+#endif
+ ;
template<typename _Tp, size_t _Nm>
void
- swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
+ swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(noexcept(swap(*__a, *__b)))
+#endif
+ ;
template<typename _FIter1, typename _FIter2>
_FIter2
diff --git a/libstdc++-v3/include/bits/alloc_traits.h b/libstdc++-v3/include/bits/alloc_traits.h
new file mode 100644
index 0000000000..bfa50de71c
--- /dev/null
+++ b/libstdc++-v3/include/bits/alloc_traits.h
@@ -0,0 +1,568 @@
+// Allocator traits -*- C++ -*-
+
+// Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/alloc_traits.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{memory}
+ */
+
+#ifndef _ALLOC_TRAITS_H
+#define _ALLOC_TRAITS_H 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+
+#include <bits/ptr_traits.h>
+#include <ext/numeric_traits.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<typename _Tp>
+ class allocator;
+
+ template<typename _Alloc, typename _Tp>
+ class __alloctr_rebind_helper
+ {
+ template<typename _Alloc2, typename _Tp2>
+ static constexpr bool
+ _S_chk(typename _Alloc2::template rebind<_Tp2>::other*)
+ { return true; }
+
+ template<typename, typename>
+ static constexpr bool
+ _S_chk(...)
+ { return false; }
+
+ public:
+ static const bool __value = _S_chk<_Alloc, _Tp>(nullptr);
+ };
+
+ template<typename _Alloc, typename _Tp>
+ const bool __alloctr_rebind_helper<_Alloc, _Tp>::__value;
+
+ template<typename _Alloc, typename _Tp,
+ bool = __alloctr_rebind_helper<_Alloc, _Tp>::__value>
+ struct __alloctr_rebind;
+
+ template<typename _Alloc, typename _Tp>
+ struct __alloctr_rebind<_Alloc, _Tp, true>
+ {
+ typedef typename _Alloc::template rebind<_Tp>::other __type;
+ };
+
+ template<template<typename, typename...> class _Alloc, typename _Tp,
+ typename _Up, typename... _Args>
+ struct __alloctr_rebind<_Alloc<_Up, _Args...>, _Tp, false>
+ {
+ typedef _Alloc<_Tp, _Args...> __type;
+ };
+
+ /**
+ * @brief Uniform interface to all allocator types.
+ * @ingroup allocators
+ */
+ template<typename _Alloc>
+ struct allocator_traits
+ {
+ /// The allocator type
+ typedef _Alloc allocator_type;
+ /// The allocated type
+ typedef typename _Alloc::value_type value_type;
+
+#define _GLIBCXX_ALLOC_TR_NESTED_TYPE(_NTYPE, _ALT) \
+ private: \
+ template<typename _Tp> \
+ static typename _Tp::_NTYPE _S_##_NTYPE##_helper(_Tp*); \
+ static _ALT _S_##_NTYPE##_helper(...); \
+ typedef decltype(_S_##_NTYPE##_helper((_Alloc*)0)) __##_NTYPE; \
+ public:
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(pointer, value_type*)
+
+ /**
+ * @brief The allocator's pointer type.
+ *
+ * @c Alloc::pointer if that type exists, otherwise @c value_type*
+ */
+ typedef __pointer pointer;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(const_pointer,
+ typename pointer_traits<pointer>::template rebind<const value_type>)
+
+ /**
+ * @brief The allocator's const pointer type.
+ *
+ * @c Alloc::const_pointer if that type exists, otherwise
+ * <tt> pointer_traits<pointer>::rebind<const value_type> </tt>
+ */
+ typedef __const_pointer const_pointer;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(void_pointer,
+ typename pointer_traits<pointer>::template rebind<void>)
+
+ /**
+ * @brief The allocator's void pointer type.
+ *
+ * @c Alloc::void_pointer if that type exists, otherwise
+ * <tt> pointer_traits<pointer>::rebind<void> </tt>
+ */
+ typedef __void_pointer void_pointer;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(const_void_pointer,
+ typename pointer_traits<pointer>::template rebind<const void>)
+
+ /**
+ * @brief The allocator's const void pointer type.
+ *
+ * @c Alloc::const_void_pointer if that type exists, otherwise
+ * <tt> pointer_traits<pointer>::rebind<const void> </tt>
+ */
+ typedef __const_void_pointer const_void_pointer;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(difference_type,
+ typename pointer_traits<pointer>::difference_type)
+
+ /**
+ * @brief The allocator's difference type
+ *
+ * @c Alloc::difference_type if that type exists, otherwise
+ * <tt> pointer_traits<pointer>::difference_type </tt>
+ */
+ typedef __difference_type difference_type;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(size_type,
+ typename make_unsigned<difference_type>::type)
+
+ /**
+ * @brief The allocator's size type
+ *
+ * @c Alloc::size_type if that type exists, otherwise
+ * <tt> make_unsigned<difference_type>::type </tt>
+ */
+ typedef __size_type size_type;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(propagate_on_container_copy_assignment,
+ false_type)
+
+ /**
+ * @brief How the allocator is propagated on copy assignment
+ *
+ * @c Alloc::propagate_on_container_copy_assignment if that type exists,
+ * otherwise @c false_type
+ */
+ typedef __propagate_on_container_copy_assignment
+ propagate_on_container_copy_assignment;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(propagate_on_container_move_assignment,
+ false_type)
+
+ /**
+ * @brief How the allocator is propagated on move assignment
+ *
+ * @c Alloc::propagate_on_container_move_assignment if that type exists,
+ * otherwise @c false_type
+ */
+ typedef __propagate_on_container_move_assignment
+ propagate_on_container_move_assignment;
+
+_GLIBCXX_ALLOC_TR_NESTED_TYPE(propagate_on_container_swap,
+ false_type)
+
+ /**
+ * @brief How the allocator is propagated on swap
+ *
+ * @c Alloc::propagate_on_container_swap if that type exists,
+ * otherwise @c false_type
+ */
+ typedef __propagate_on_container_swap propagate_on_container_swap;
+
+#undef _GLIBCXX_ALLOC_TR_NESTED_TYPE
+
+ template<typename _Tp>
+ using rebind_alloc = typename __alloctr_rebind<_Alloc, _Tp>::__type;
+ template<typename _Tp>
+ using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
+
+ private:
+ template<typename _Alloc2>
+ struct __allocate_helper
+ {
+ template<typename _Alloc3,
+ typename = decltype(std::declval<_Alloc3*>()->allocate(
+ std::declval<size_type>(),
+ std::declval<const_void_pointer>()))>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc>(0)) type;
+ static const bool value = type::value;
+ };
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<__allocate_helper<_Alloc2>::value, pointer>::type
+ _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint)
+ { return __a.allocate(__n, __hint); }
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<!__allocate_helper<_Alloc2>::value, pointer>::type
+ _S_allocate(_Alloc2& __a, size_type __n, ...)
+ { return __a.allocate(__n); }
+
+ template<typename _Tp, typename... _Args>
+ struct __construct_helper
+ {
+ template<typename _Alloc2,
+ typename = decltype(std::declval<_Alloc2*>()->construct(
+ std::declval<_Tp*>(), std::declval<_Args>()...))>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc>(0)) type;
+ static const bool value = type::value;
+ };
+
+ template<typename _Tp, typename... _Args>
+ static typename
+ enable_if<__construct_helper<_Tp, _Args...>::value, void>::type
+ _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
+ { __a.construct(__p, std::forward<_Args>(__args)...); }
+
+ template<typename _Tp, typename... _Args>
+ static typename
+ enable_if<__and_<__not_<__construct_helper<_Tp, _Args...>>,
+ is_constructible<_Tp, _Args...>>::value, void>::type
+ _S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
+ { ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); }
+
+ template<typename _Tp>
+ struct __destroy_helper
+ {
+ template<typename _Alloc2,
+ typename = decltype(std::declval<_Alloc2*>()->destroy(
+ std::declval<_Tp*>()))>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc>(0)) type;
+ static const bool value = type::value;
+ };
+
+ template<typename _Tp>
+ static typename enable_if<__destroy_helper<_Tp>::value, void>::type
+ _S_destroy(_Alloc& __a, _Tp* __p)
+ { __a.destroy(__p); }
+
+ template<typename _Tp>
+ static typename enable_if<!__destroy_helper<_Tp>::value, void>::type
+ _S_destroy(_Alloc&, _Tp* __p)
+ { __p->~_Tp(); }
+
+ template<typename _Alloc2>
+ struct __maxsize_helper
+ {
+ template<typename _Alloc3,
+ typename = decltype(std::declval<_Alloc3*>()->max_size())>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc2>(0)) type;
+ static const bool value = type::value;
+ };
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<__maxsize_helper<_Alloc2>::value, size_type>::type
+ _S_max_size(_Alloc2& __a)
+ { return __a.max_size(); }
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<!__maxsize_helper<_Alloc2>::value, size_type>::type
+ _S_max_size(_Alloc2&)
+ { return __gnu_cxx::__numeric_traits<size_type>::__max; }
+
+ template<typename _Alloc2>
+ struct __select_helper
+ {
+ template<typename _Alloc3, typename
+ = decltype(std::declval<_Alloc3*>()
+ ->select_on_container_copy_construction())>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc2>(0)) type;
+ static const bool value = type::value;
+ };
+ template<typename _Alloc2>
+ static typename
+ enable_if<__select_helper<_Alloc2>::value, _Alloc2>::type
+ _S_select(_Alloc2& __a)
+ { return __a.select_on_container_copy_construction(); }
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<!__select_helper<_Alloc2>::value, _Alloc2>::type
+ _S_select(_Alloc2& __a)
+ { return __a; }
+
+ public:
+
+ /**
+ * @brief Allocate memory.
+ * @param __a An allocator.
+ * @param __n The number of objects to allocate space for.
+ *
+ * Calls @c a.allocate(n)
+ */
+ static pointer
+ allocate(_Alloc& __a, size_type __n)
+ { return __a.allocate(__n); }
+
+ /**
+ * @brief Allocate memory.
+ * @param __a An allocator.
+ * @param __n The number of objects to allocate space for.
+ * @param __hint Aid to locality.
+ * @return Memory of suitable size and alignment for @a n objects
+ * of type @c value_type
+ *
+ * Returns <tt> a.allocate(n, hint) </tt> if that expression is
+ * well-formed, otherwise returns @c a.allocate(n)
+ */
+ static pointer
+ allocate(_Alloc& __a, size_type __n, const_void_pointer __hint)
+ { return _S_allocate(__a, __n, __hint); }
+
+ /**
+ * @brief Deallocate memory.
+ * @param __a An allocator.
+ * @param __p Pointer to the memory to deallocate.
+ * @param __n The number of objects space was allocated for.
+ *
+ * Calls <tt> a.deallocate(p, n) </tt>
+ */
+ static void deallocate(_Alloc& __a, pointer __p, size_type __n)
+ { __a.deallocate(__p, __n); }
+
+ /**
+ * @brief Construct an object of type @a _Tp
+ * @param __a An allocator.
+ * @param __p Pointer to memory of suitable size and alignment for Tp
+ * @param __args Constructor arguments.
+ *
+ * Calls <tt> __a.construct(__p, std::forward<Args>(__args)...) </tt>
+ * if that expression is well-formed, otherwise uses placement-new
+ * to construct an object of type @a _Tp at location @a __p from the
+ * arguments @a __args...
+ */
+ template<typename _Tp, typename... _Args>
+ static auto construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
+ -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...))
+ { _S_construct(__a, __p, std::forward<_Args>(__args)...); }
+
+ /**
+ * @brief Destroy an object of type @a _Tp
+ * @param __a An allocator.
+ * @param __p Pointer to the object to destroy
+ *
+ * Calls @c __a.destroy(__p) if that expression is well-formed,
+ * otherwise calls @c __p->~_Tp()
+ */
+ template <class _Tp>
+ static void destroy(_Alloc& __a, _Tp* __p)
+ { _S_destroy(__a, __p); }
+
+ /**
+ * @brief The maximum supported allocation size
+ * @param __a An allocator.
+ * @return @c __a.max_size() or @c numeric_limits<size_type>::max()
+ *
+ * Returns @c __a.max_size() if that expression is well-formed,
+ * otherwise returns @c numeric_limits<size_type>::max()
+ */
+ static size_type max_size(const _Alloc& __a)
+ { return _S_max_size(__a); }
+
+ /**
+ * @brief Obtain an allocator to use when copying a container.
+ * @param __rhs An allocator.
+ * @return @c __rhs.select_on_container_copy_construction() or @a __rhs
+ *
+ * Returns @c __rhs.select_on_container_copy_construction() if that
+ * expression is well-formed, otherwise returns @a __rhs
+ */
+ static _Alloc
+ select_on_container_copy_construction(const _Alloc& __rhs)
+ { return _S_select(__rhs); }
+ };
+
+ template<typename _Alloc>
+ template<typename _Alloc2>
+ const bool allocator_traits<_Alloc>::__allocate_helper<_Alloc2>::value;
+
+ template<typename _Alloc>
+ template<typename _Tp, typename... _Args>
+ const bool
+ allocator_traits<_Alloc>::__construct_helper<_Tp, _Args...>::value;
+
+ template<typename _Alloc>
+ template<typename _Tp>
+ const bool allocator_traits<_Alloc>::__destroy_helper<_Tp>::value;
+
+ template<typename _Alloc>
+ template<typename _Alloc2>
+ const bool allocator_traits<_Alloc>::__maxsize_helper<_Alloc2>::value;
+
+ template<typename _Alloc>
+ template<typename _Alloc2>
+ const bool allocator_traits<_Alloc>::__select_helper<_Alloc2>::value;
+
+ template<typename _Alloc>
+ inline void
+ __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type)
+ { __one = __two; }
+
+ template<typename _Alloc>
+ inline void
+ __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type)
+ { }
+
+ template<typename _Alloc>
+ inline void __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
+ {
+ typedef allocator_traits<_Alloc> __traits;
+ typedef typename __traits::propagate_on_container_copy_assignment __pocca;
+ __do_alloc_on_copy(__one, __two, __pocca());
+ }
+
+ template<typename _Alloc>
+ inline _Alloc __alloc_on_copy(const _Alloc& __a)
+ {
+ typedef allocator_traits<_Alloc> __traits;
+ return __traits::select_on_container_copy_construction(__a);
+ }
+
+ template<typename _Alloc>
+ inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type)
+ { __one = std::move(__two); }
+
+ template<typename _Alloc>
+ inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type)
+ { }
+
+ template<typename _Alloc>
+ inline void __alloc_on_move(_Alloc& __one, _Alloc& __two)
+ {
+ typedef allocator_traits<_Alloc> __traits;
+ typedef typename __traits::propagate_on_container_move_assignment __pocma;
+ __do_alloc_on_move(__one, __two, __pocma());
+ }
+
+ template<typename _Alloc>
+ inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type)
+ {
+ using std::swap;
+ swap(__one, __two);
+ }
+
+ template<typename _Alloc>
+ inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type)
+ { }
+
+ template<typename _Alloc>
+ inline void __alloc_on_swap(_Alloc& __one, _Alloc& __two)
+ {
+ typedef allocator_traits<_Alloc> __traits;
+ typedef typename __traits::propagate_on_container_swap __pocs;
+ __do_alloc_on_swap(__one, __two, __pocs());
+ }
+
+ template<typename _Alloc>
+ class __is_copy_insertable_impl
+ {
+ typedef allocator_traits<_Alloc> _Traits;
+
+ template<typename _Up, typename
+ = decltype(_Traits::construct(std::declval<_Alloc&>(),
+ std::declval<_Up*>(),
+ std::declval<const _Up&>()))>
+ static true_type
+ _M_select(int);
+
+ template<typename _Up>
+ static false_type
+ _M_select(...);
+
+ public:
+ typedef decltype(_M_select<typename _Alloc::value_type>(0)) type;
+ };
+
+ // true if _Alloc::value_type is CopyInsertable into containers using _Alloc
+ template<typename _Alloc>
+ struct __is_copy_insertable
+ : __is_copy_insertable_impl<_Alloc>::type
+ { };
+
+ // std::allocator<_Tp> just requires CopyConstructible
+ template<typename _Tp>
+ struct __is_copy_insertable<allocator<_Tp>>
+ : is_copy_constructible<_Tp>
+ { };
+
+ // Used to allow copy construction of unordered containers
+ template<bool> struct __allow_copy_cons { };
+
+ // Used to delete copy constructor of unordered containers
+ template<>
+ struct __allow_copy_cons<false>
+ {
+ __allow_copy_cons() = default;
+ __allow_copy_cons(const __allow_copy_cons&) = delete;
+ __allow_copy_cons(__allow_copy_cons&&) = default;
+ __allow_copy_cons& operator=(const __allow_copy_cons&) = default;
+ __allow_copy_cons& operator=(__allow_copy_cons&&) = default;
+ };
+
+ template<typename _Alloc>
+ using __check_copy_constructible
+ = __allow_copy_cons<__is_copy_insertable<_Alloc>::value>;
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif
+#endif
diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index 9d01a602da..b985d3f5e6 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -47,10 +47,6 @@
// Define the base class to std::allocator.
#include <bits/c++allocator.h>
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <type_traits> // For _GLIBCXX_HAS_NESTED_TYPE
-#endif
-
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -60,6 +56,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @ingroup memory
*
* Classes encapsulating memory operations.
+ *
+ * @{
*/
template<typename _Tp>
@@ -83,10 +81,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief The @a standard allocator, as per [20.4].
- * @ingroup allocators
*
- * Further details:
- * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html
+ * See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html
+ * for further details.
*/
template<typename _Tp>
class allocator: public __glibcxx_base_allocator<_Tp>
@@ -137,6 +134,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
{ return false; }
+ /**
+ * @}
+ */
+
// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
#if _GLIBCXX_EXTERN_TEMPLATE
@@ -182,55 +183,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- // A very basic implementation for now. In general we have to wait for
- // the availability of the infrastructure described in N2983: we should
- // try when either T has a move constructor which cannot throw or T is
- // CopyContructible.
- // NB: This code doesn't properly belong here, we should find a more
- // suited place common to std::vector and std::deque.
- template<typename _Tp,
- bool = __has_trivial_copy(typename _Tp::value_type)>
- struct __shrink_to_fit
- { static void _S_do_it(_Tp&) { } };
+ template<typename _Tp, bool
+ = __or_<is_copy_constructible<typename _Tp::value_type>,
+ is_nothrow_move_constructible<typename _Tp::value_type>>::value>
+ struct __shrink_to_fit_aux
+ { static bool _S_do_it(_Tp&) { return false; } };
template<typename _Tp>
- struct __shrink_to_fit<_Tp, true>
+ struct __shrink_to_fit_aux<_Tp, true>
{
- static void
- _S_do_it(_Tp& __v)
+ static bool
+ _S_do_it(_Tp& __c)
{
__try
- { _Tp(__v).swap(__v); }
- __catch(...) { }
+ {
+ _Tp(__make_move_if_noexcept_iterator(__c.begin()),
+ __make_move_if_noexcept_iterator(__c.end()),
+ __c.get_allocator()).swap(__c);
+ return true;
+ }
+ __catch(...)
+ { return false; }
}
};
-
- /// [allocator.tag]
- struct allocator_arg_t { };
-
- constexpr allocator_arg_t allocator_arg = allocator_arg_t();
-
-_GLIBCXX_HAS_NESTED_TYPE(allocator_type)
-
- template<typename _Tp, typename _Alloc,
- bool = __has_allocator_type<_Tp>::value>
- struct __uses_allocator_helper
- : public false_type { };
-
- template<typename _Tp, typename _Alloc>
- struct __uses_allocator_helper<_Tp, _Alloc, true>
- : public integral_constant<bool, is_convertible<_Alloc,
- typename _Tp::allocator_type>::value>
- { };
-
- /// [allocator.uses.trait]
- template<typename _Tp, typename _Alloc>
- struct uses_allocator
- : public integral_constant<bool,
- __uses_allocator_helper<_Tp, _Alloc>::value>
- { };
-
+ // Declare uses_allocator so it can be specialized in <queue> etc.
+ template<typename, typename>
+ struct uses_allocator;
#endif
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/atomic_0.h b/libstdc++-v3/include/bits/atomic_0.h
deleted file mode 100644
index 84ff779ef0..0000000000
--- a/libstdc++-v3/include/bits/atomic_0.h
+++ /dev/null
@@ -1,660 +0,0 @@
-// -*- C++ -*- header.
-
-// Copyright (C) 2008, 2009, 2010, 2011
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/atomic_0.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{atomic}
- */
-
-#ifndef _GLIBCXX_ATOMIC_0_H
-#define _GLIBCXX_ATOMIC_0_H 1
-
-#pragma GCC system_header
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-// 0 == __atomic0 == Never lock-free
-namespace __atomic0
-{
- _GLIBCXX_BEGIN_EXTERN_C
-
- void
- atomic_flag_clear_explicit(__atomic_flag_base*, memory_order)
- _GLIBCXX_NOTHROW;
-
- void
- __atomic_flag_wait_explicit(__atomic_flag_base*, memory_order)
- _GLIBCXX_NOTHROW;
-
- _GLIBCXX_CONST __atomic_flag_base*
- __atomic_flag_for_address(const volatile void* __z) _GLIBCXX_NOTHROW;
-
- _GLIBCXX_END_EXTERN_C
-
- // Implementation specific defines.
-#define _ATOMIC_MEMBER_ _M_i
-
- // Implementation specific defines.
-#define _ATOMIC_LOAD_(__a, __x) \
- ({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
- __i_type* __p = &_ATOMIC_MEMBER_; \
- __atomic_flag_base* __g = __atomic_flag_for_address(__p); \
- __atomic_flag_wait_explicit(__g, __x); \
- __i_type __r = *__p; \
- atomic_flag_clear_explicit(__g, __x); \
- __r; })
-
-#define _ATOMIC_STORE_(__a, __n, __x) \
- ({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
- __i_type* __p = &_ATOMIC_MEMBER_; \
- __typeof__(__n) __w = (__n); \
- __atomic_flag_base* __g = __atomic_flag_for_address(__p); \
- __atomic_flag_wait_explicit(__g, __x); \
- *__p = __w; \
- atomic_flag_clear_explicit(__g, __x); \
- __w; })
-
-#define _ATOMIC_MODIFY_(__a, __o, __n, __x) \
- ({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
- __i_type* __p = &_ATOMIC_MEMBER_; \
- __typeof__(__n) __w = (__n); \
- __atomic_flag_base* __g = __atomic_flag_for_address(__p); \
- __atomic_flag_wait_explicit(__g, __x); \
- __i_type __r = *__p; \
- *__p __o __w; \
- atomic_flag_clear_explicit(__g, __x); \
- __r; })
-
-#define _ATOMIC_CMPEXCHNG_(__a, __e, __n, __x) \
- ({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
- __i_type* __p = &_ATOMIC_MEMBER_; \
- __typeof__(__e) __q = (__e); \
- __typeof__(__n) __w = (__n); \
- bool __r; \
- __atomic_flag_base* __g = __atomic_flag_for_address(__p); \
- __atomic_flag_wait_explicit(__g, __x); \
- __i_type __t = *__p; \
- if (*__q == __t) \
- { \
- *__p = (__i_type)__w; \
- __r = true; \
- } \
- else { *__q = __t; __r = false; } \
- atomic_flag_clear_explicit(__g, __x); \
- __r; })
-
-
- /// atomic_flag
- struct atomic_flag : public __atomic_flag_base
- {
- atomic_flag() = default;
- ~atomic_flag() = default;
- atomic_flag(const atomic_flag&) = delete;
- atomic_flag& operator=(const atomic_flag&) = delete;
- atomic_flag& operator=(const atomic_flag&) volatile = delete;
-
- // Conversion to ATOMIC_FLAG_INIT.
- atomic_flag(bool __i): __atomic_flag_base({ __i }) { }
-
- bool
- test_and_set(memory_order __m = memory_order_seq_cst);
-
- bool
- test_and_set(memory_order __m = memory_order_seq_cst) volatile;
-
- void
- clear(memory_order __m = memory_order_seq_cst);
-
- void
- clear(memory_order __m = memory_order_seq_cst) volatile;
- };
-
-
- /// Base class for atomic integrals.
- //
- // For each of the integral types, define atomic_[integral type] struct
- //
- // atomic_bool bool
- // atomic_char char
- // atomic_schar signed char
- // atomic_uchar unsigned char
- // atomic_short short
- // atomic_ushort unsigned short
- // atomic_int int
- // atomic_uint unsigned int
- // atomic_long long
- // atomic_ulong unsigned long
- // atomic_llong long long
- // atomic_ullong unsigned long long
- // atomic_char16_t char16_t
- // atomic_char32_t char32_t
- // atomic_wchar_t wchar_t
-
- // Base type.
- // NB: Assuming _ITp is an integral scalar type that is 1, 2, 4, or 8 bytes,
- // since that is what GCC built-in functions for atomic memory access work on.
- template<typename _ITp>
- struct __atomic_base
- {
- private:
- typedef _ITp __int_type;
-
- __int_type _M_i;
-
- public:
- __atomic_base() = default;
- ~__atomic_base() = default;
- __atomic_base(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) volatile = delete;
-
- // Requires __int_type convertible to _M_base._M_i.
- constexpr __atomic_base(__int_type __i): _M_i (__i) { }
-
- operator __int_type() const
- { return load(); }
-
- operator __int_type() const volatile
- { return load(); }
-
- __int_type
- operator=(__int_type __i)
- {
- store(__i);
- return __i;
- }
-
- __int_type
- operator=(__int_type __i) volatile
- {
- store(__i);
- return __i;
- }
-
- __int_type
- operator++(int)
- { return fetch_add(1); }
-
- __int_type
- operator++(int) volatile
- { return fetch_add(1); }
-
- __int_type
- operator--(int)
- { return fetch_sub(1); }
-
- __int_type
- operator--(int) volatile
- { return fetch_sub(1); }
-
- __int_type
- operator++()
- { return fetch_add(1) + 1; }
-
- __int_type
- operator++() volatile
- { return fetch_add(1) + 1; }
-
- __int_type
- operator--()
- { return fetch_sub(1) - 1; }
-
- __int_type
- operator--() volatile
- { return fetch_sub(1) - 1; }
-
- __int_type
- operator+=(__int_type __i)
- { return fetch_add(__i) + __i; }
-
- __int_type
- operator+=(__int_type __i) volatile
- { return fetch_add(__i) + __i; }
-
- __int_type
- operator-=(__int_type __i)
- { return fetch_sub(__i) - __i; }
-
- __int_type
- operator-=(__int_type __i) volatile
- { return fetch_sub(__i) - __i; }
-
- __int_type
- operator&=(__int_type __i)
- { return fetch_and(__i) & __i; }
-
- __int_type
- operator&=(__int_type __i) volatile
- { return fetch_and(__i) & __i; }
-
- __int_type
- operator|=(__int_type __i)
- { return fetch_or(__i) | __i; }
-
- __int_type
- operator|=(__int_type __i) volatile
- { return fetch_or(__i) | __i; }
-
- __int_type
- operator^=(__int_type __i)
- { return fetch_xor(__i) ^ __i; }
-
- __int_type
- operator^=(__int_type __i) volatile
- { return fetch_xor(__i) ^ __i; }
-
- bool
- is_lock_free() const
- { return false; }
-
- bool
- is_lock_free() const volatile
- { return false; }
-
- void
- store(__int_type __i, memory_order __m = memory_order_seq_cst)
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
- _ATOMIC_STORE_(this, __i, __m);
- }
-
- void
- store(__int_type __i, memory_order __m = memory_order_seq_cst) volatile
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
- _ATOMIC_STORE_(this, __i, __m);
- }
-
- __int_type
- load(memory_order __m = memory_order_seq_cst) const
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
- return _ATOMIC_LOAD_(this, __m);
- }
-
- __int_type
- load(memory_order __m = memory_order_seq_cst) const volatile
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
- return _ATOMIC_LOAD_(this, __m);
- }
-
- __int_type
- exchange(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return _ATOMIC_MODIFY_(this, =, __i, __m); }
-
- __int_type
- exchange(__int_type __i, memory_order __m = memory_order_seq_cst) volatile
- { return _ATOMIC_MODIFY_(this, =, __i, __m); }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2)
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
- return _ATOMIC_CMPEXCHNG_(this, &__i1, __i2, __m1);
- }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2) volatile
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
- return _ATOMIC_CMPEXCHNG_(this, &__i1, __i2, __m1);
- }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst)
- {
- return compare_exchange_weak(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst) volatile
- {
- return compare_exchange_weak(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2)
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
- return _ATOMIC_CMPEXCHNG_(this, &__i1, __i2, __m1);
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2) volatile
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
- return _ATOMIC_CMPEXCHNG_(this, &__i1, __i2, __m1);
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst)
- {
- return compare_exchange_strong(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst) volatile
- {
- return compare_exchange_strong(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- __int_type
- fetch_add(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return _ATOMIC_MODIFY_(this, +=, __i, __m); }
-
- __int_type
- fetch_add(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return _ATOMIC_MODIFY_(this, +=, __i, __m); }
-
- __int_type
- fetch_sub(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return _ATOMIC_MODIFY_(this, -=, __i, __m); }
-
- __int_type
- fetch_sub(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return _ATOMIC_MODIFY_(this, -=, __i, __m); }
-
- __int_type
- fetch_and(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return _ATOMIC_MODIFY_(this, &=, __i, __m); }
-
- __int_type
- fetch_and(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return _ATOMIC_MODIFY_(this, &=, __i, __m); }
-
- __int_type
- fetch_or(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return _ATOMIC_MODIFY_(this, |=, __i, __m); }
-
- __int_type
- fetch_or(__int_type __i, memory_order __m = memory_order_seq_cst) volatile
- { return _ATOMIC_MODIFY_(this, |=, __i, __m); }
-
- __int_type
- fetch_xor(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return _ATOMIC_MODIFY_(this, ^=, __i, __m); }
-
- __int_type
- fetch_xor(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return _ATOMIC_MODIFY_(this, ^=, __i, __m); }
- };
-
-
- /// Partial specialization for pointer types.
- template<typename _PTp>
- struct __atomic_base<_PTp*>
- {
- private:
- typedef _PTp* __return_pointer_type;
- typedef void* __pointer_type;
- __pointer_type _M_i;
-
- public:
- __atomic_base() = default;
- ~__atomic_base() = default;
- __atomic_base(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) volatile = delete;
-
- // Requires __pointer_type convertible to _M_i.
- constexpr __atomic_base(__return_pointer_type __p): _M_i (__p) { }
-
- operator __return_pointer_type() const
- { return reinterpret_cast<__return_pointer_type>(load()); }
-
- operator __return_pointer_type() const volatile
- { return reinterpret_cast<__return_pointer_type>(load()); }
-
- __return_pointer_type
- operator=(__pointer_type __p)
- {
- store(__p);
- return reinterpret_cast<__return_pointer_type>(__p);
- }
-
- __return_pointer_type
- operator=(__pointer_type __p) volatile
- {
- store(__p);
- return reinterpret_cast<__return_pointer_type>(__p);
- }
-
- __return_pointer_type
- operator++(int)
- { return reinterpret_cast<__return_pointer_type>(fetch_add(1)); }
-
- __return_pointer_type
- operator++(int) volatile
- { return reinterpret_cast<__return_pointer_type>(fetch_add(1)); }
-
- __return_pointer_type
- operator--(int)
- { return reinterpret_cast<__return_pointer_type>(fetch_sub(1)); }
-
- __return_pointer_type
- operator--(int) volatile
- { return reinterpret_cast<__return_pointer_type>(fetch_sub(1)); }
-
- __return_pointer_type
- operator++()
- { return reinterpret_cast<__return_pointer_type>(fetch_add(1) + 1); }
-
- __return_pointer_type
- operator++() volatile
- { return reinterpret_cast<__return_pointer_type>(fetch_add(1) + 1); }
-
- __return_pointer_type
- operator--()
- { return reinterpret_cast<__return_pointer_type>(fetch_sub(1) - 1); }
-
- __return_pointer_type
- operator--() volatile
- { return reinterpret_cast<__return_pointer_type>(fetch_sub(1) - 1); }
-
- __return_pointer_type
- operator+=(ptrdiff_t __d)
- { return reinterpret_cast<__return_pointer_type>(fetch_add(__d) + __d); }
-
- __return_pointer_type
- operator+=(ptrdiff_t __d) volatile
- { return reinterpret_cast<__return_pointer_type>(fetch_add(__d) + __d); }
-
- __return_pointer_type
- operator-=(ptrdiff_t __d)
- { return reinterpret_cast<__return_pointer_type>(fetch_sub(__d) - __d); }
-
- __return_pointer_type
- operator-=(ptrdiff_t __d) volatile
- { return reinterpret_cast<__return_pointer_type>(fetch_sub(__d) - __d); }
-
- bool
- is_lock_free() const
- { return true; }
-
- bool
- is_lock_free() const volatile
- { return true; }
-
- void
- store(__pointer_type __p, memory_order __m = memory_order_seq_cst)
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
- _ATOMIC_STORE_(this, __p, __m);
- }
-
- void
- store(__pointer_type __p,
- memory_order __m = memory_order_seq_cst) volatile
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
- volatile __pointer_type* __p2 = &_M_i;
- __typeof__(__p) __w = (__p);
- __atomic_flag_base* __g = __atomic_flag_for_address(__p2);
- __atomic_flag_wait_explicit(__g, __m);
- *__p2 = reinterpret_cast<__pointer_type>(__w);
- atomic_flag_clear_explicit(__g, __m);
- __w;
- }
-
- __return_pointer_type
- load(memory_order __m = memory_order_seq_cst) const
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
- void* __v = _ATOMIC_LOAD_(this, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
-
- __return_pointer_type
- load(memory_order __m = memory_order_seq_cst) const volatile
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
- void* __v = _ATOMIC_LOAD_(this, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
-
- __return_pointer_type
- exchange(__pointer_type __p, memory_order __m = memory_order_seq_cst)
- {
- void* __v = _ATOMIC_MODIFY_(this, =, __p, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
-
- __return_pointer_type
- exchange(__pointer_type __p,
- memory_order __m = memory_order_seq_cst) volatile
- {
- volatile __pointer_type* __p2 = &_M_i;
- __typeof__(__p) __w = (__p);
- __atomic_flag_base* __g = __atomic_flag_for_address(__p2);
- __atomic_flag_wait_explicit(__g, __m);
- __pointer_type __r = *__p2;
- *__p2 = __w;
- atomic_flag_clear_explicit(__g, __m);
- __r;
- return reinterpret_cast<__return_pointer_type>(_M_i);
- }
-
- bool
- compare_exchange_strong(__return_pointer_type& __rp1, __pointer_type __p2,
- memory_order __m1, memory_order __m2)
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
- __pointer_type& __p1 = reinterpret_cast<void*&>(__rp1);
- return _ATOMIC_CMPEXCHNG_(this, &__p1, __p2, __m1);
- }
-
- bool
- compare_exchange_strong(__return_pointer_type& __rp1, __pointer_type __p2,
- memory_order __m1, memory_order __m2) volatile
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
- __pointer_type& __p1 = reinterpret_cast<void*&>(__rp1);
- return _ATOMIC_CMPEXCHNG_(this, &__p1, __p2, __m1);
- }
-
- __return_pointer_type
- fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
- {
- void* __v = _ATOMIC_MODIFY_(this, +=, __d, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
-
- __return_pointer_type
- fetch_add(ptrdiff_t __d,
- memory_order __m = memory_order_seq_cst) volatile
- {
- void* __v = _ATOMIC_MODIFY_(this, +=, __d, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
-
- __return_pointer_type
- fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
- {
- void* __v = _ATOMIC_MODIFY_(this, -=, __d, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
-
- __return_pointer_type
- fetch_sub(ptrdiff_t __d,
- memory_order __m = memory_order_seq_cst) volatile
- {
- void* __v = _ATOMIC_MODIFY_(this, -=, __d, __m);
- return reinterpret_cast<__return_pointer_type>(__v);
- }
- };
-
-#undef _ATOMIC_LOAD_
-#undef _ATOMIC_STORE_
-#undef _ATOMIC_MODIFY_
-#undef _ATOMIC_CMPEXCHNG_
-} // namespace __atomic0
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
-
-#endif
diff --git a/libstdc++-v3/include/bits/atomic_2.h b/libstdc++-v3/include/bits/atomic_2.h
deleted file mode 100644
index f95beca55c..0000000000
--- a/libstdc++-v3/include/bits/atomic_2.h
+++ /dev/null
@@ -1,669 +0,0 @@
-// -*- C++ -*- header.
-
-// Copyright (C) 2008, 2009, 2010, 2011
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/atomic_2.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{atomic}
- */
-
-#ifndef _GLIBCXX_ATOMIC_2_H
-#define _GLIBCXX_ATOMIC_2_H 1
-
-#pragma GCC system_header
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-// 2 == __atomic2 == Always lock-free
-// Assumed:
-// _GLIBCXX_ATOMIC_BUILTINS_1
-// _GLIBCXX_ATOMIC_BUILTINS_2
-// _GLIBCXX_ATOMIC_BUILTINS_4
-// _GLIBCXX_ATOMIC_BUILTINS_8
-namespace __atomic2
-{
- /// atomic_flag
- struct atomic_flag : public __atomic_flag_base
- {
- atomic_flag() = default;
- ~atomic_flag() = default;
- atomic_flag(const atomic_flag&) = delete;
- atomic_flag& operator=(const atomic_flag&) = delete;
- atomic_flag& operator=(const atomic_flag&) volatile = delete;
-
- // Conversion to ATOMIC_FLAG_INIT.
- atomic_flag(bool __i): __atomic_flag_base({ __i }) { }
-
- bool
- test_and_set(memory_order __m = memory_order_seq_cst)
- {
- // Redundant synchronize if built-in for lock is a full barrier.
- if (__m != memory_order_acquire && __m != memory_order_acq_rel)
- __sync_synchronize();
- return __sync_lock_test_and_set(&_M_i, 1);
- }
-
- bool
- test_and_set(memory_order __m = memory_order_seq_cst) volatile
- {
- // Redundant synchronize if built-in for lock is a full barrier.
- if (__m != memory_order_acquire && __m != memory_order_acq_rel)
- __sync_synchronize();
- return __sync_lock_test_and_set(&_M_i, 1);
- }
-
- void
- clear(memory_order __m = memory_order_seq_cst)
- {
- __glibcxx_assert(__m != memory_order_consume);
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
-
- __sync_lock_release(&_M_i);
- if (__m != memory_order_acquire && __m != memory_order_acq_rel)
- __sync_synchronize();
- }
-
- void
- clear(memory_order __m = memory_order_seq_cst) volatile
- {
- __glibcxx_assert(__m != memory_order_consume);
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
-
- __sync_lock_release(&_M_i);
- if (__m != memory_order_acquire && __m != memory_order_acq_rel)
- __sync_synchronize();
- }
- };
-
-
- /// Base class for atomic integrals.
- //
- // For each of the integral types, define atomic_[integral type] struct
- //
- // atomic_bool bool
- // atomic_char char
- // atomic_schar signed char
- // atomic_uchar unsigned char
- // atomic_short short
- // atomic_ushort unsigned short
- // atomic_int int
- // atomic_uint unsigned int
- // atomic_long long
- // atomic_ulong unsigned long
- // atomic_llong long long
- // atomic_ullong unsigned long long
- // atomic_char16_t char16_t
- // atomic_char32_t char32_t
- // atomic_wchar_t wchar_t
- //
- // NB: Assuming _ITp is an integral scalar type that is 1, 2, 4, or
- // 8 bytes, since that is what GCC built-in functions for atomic
- // memory access expect.
- template<typename _ITp>
- struct __atomic_base
- {
- private:
- typedef _ITp __int_type;
-
- __int_type _M_i;
-
- public:
- __atomic_base() = default;
- ~__atomic_base() = default;
- __atomic_base(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) volatile = delete;
-
- // Requires __int_type convertible to _M_i.
- constexpr __atomic_base(__int_type __i): _M_i (__i) { }
-
- operator __int_type() const
- { return load(); }
-
- operator __int_type() const volatile
- { return load(); }
-
- __int_type
- operator=(__int_type __i)
- {
- store(__i);
- return __i;
- }
-
- __int_type
- operator=(__int_type __i) volatile
- {
- store(__i);
- return __i;
- }
-
- __int_type
- operator++(int)
- { return fetch_add(1); }
-
- __int_type
- operator++(int) volatile
- { return fetch_add(1); }
-
- __int_type
- operator--(int)
- { return fetch_sub(1); }
-
- __int_type
- operator--(int) volatile
- { return fetch_sub(1); }
-
- __int_type
- operator++()
- { return __sync_add_and_fetch(&_M_i, 1); }
-
- __int_type
- operator++() volatile
- { return __sync_add_and_fetch(&_M_i, 1); }
-
- __int_type
- operator--()
- { return __sync_sub_and_fetch(&_M_i, 1); }
-
- __int_type
- operator--() volatile
- { return __sync_sub_and_fetch(&_M_i, 1); }
-
- __int_type
- operator+=(__int_type __i)
- { return __sync_add_and_fetch(&_M_i, __i); }
-
- __int_type
- operator+=(__int_type __i) volatile
- { return __sync_add_and_fetch(&_M_i, __i); }
-
- __int_type
- operator-=(__int_type __i)
- { return __sync_sub_and_fetch(&_M_i, __i); }
-
- __int_type
- operator-=(__int_type __i) volatile
- { return __sync_sub_and_fetch(&_M_i, __i); }
-
- __int_type
- operator&=(__int_type __i)
- { return __sync_and_and_fetch(&_M_i, __i); }
-
- __int_type
- operator&=(__int_type __i) volatile
- { return __sync_and_and_fetch(&_M_i, __i); }
-
- __int_type
- operator|=(__int_type __i)
- { return __sync_or_and_fetch(&_M_i, __i); }
-
- __int_type
- operator|=(__int_type __i) volatile
- { return __sync_or_and_fetch(&_M_i, __i); }
-
- __int_type
- operator^=(__int_type __i)
- { return __sync_xor_and_fetch(&_M_i, __i); }
-
- __int_type
- operator^=(__int_type __i) volatile
- { return __sync_xor_and_fetch(&_M_i, __i); }
-
- bool
- is_lock_free() const
- { return true; }
-
- bool
- is_lock_free() const volatile
- { return true; }
-
- void
- store(__int_type __i, memory_order __m = memory_order_seq_cst)
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
-
- if (__m == memory_order_relaxed)
- _M_i = __i;
- else
- {
- // write_mem_barrier();
- _M_i = __i;
- if (__m == memory_order_seq_cst)
- __sync_synchronize();
- }
- }
-
- void
- store(__int_type __i, memory_order __m = memory_order_seq_cst) volatile
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
-
- if (__m == memory_order_relaxed)
- _M_i = __i;
- else
- {
- // write_mem_barrier();
- _M_i = __i;
- if (__m == memory_order_seq_cst)
- __sync_synchronize();
- }
- }
-
- __int_type
- load(memory_order __m = memory_order_seq_cst) const
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
-
- __sync_synchronize();
- __int_type __ret = _M_i;
- __sync_synchronize();
- return __ret;
- }
-
- __int_type
- load(memory_order __m = memory_order_seq_cst) const volatile
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
-
- __sync_synchronize();
- __int_type __ret = _M_i;
- __sync_synchronize();
- return __ret;
- }
-
- __int_type
- exchange(__int_type __i, memory_order __m = memory_order_seq_cst)
- {
- // XXX built-in assumes memory_order_acquire.
- return __sync_lock_test_and_set(&_M_i, __i);
- }
-
-
- __int_type
- exchange(__int_type __i, memory_order __m = memory_order_seq_cst) volatile
- {
- // XXX built-in assumes memory_order_acquire.
- return __sync_lock_test_and_set(&_M_i, __i);
- }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2)
- { return compare_exchange_strong(__i1, __i2, __m1, __m2); }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2) volatile
- { return compare_exchange_strong(__i1, __i2, __m1, __m2); }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst)
- {
- return compare_exchange_weak(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- bool
- compare_exchange_weak(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst) volatile
- {
- return compare_exchange_weak(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2)
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
-
- __int_type __i1o = __i1;
- __int_type __i1n = __sync_val_compare_and_swap(&_M_i, __i1o, __i2);
-
- // Assume extra stores (of same value) allowed in true case.
- __i1 = __i1n;
- return __i1o == __i1n;
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m1, memory_order __m2) volatile
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
-
- __int_type __i1o = __i1;
- __int_type __i1n = __sync_val_compare_and_swap(&_M_i, __i1o, __i2);
-
- // Assume extra stores (of same value) allowed in true case.
- __i1 = __i1n;
- return __i1o == __i1n;
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst)
- {
- return compare_exchange_strong(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- bool
- compare_exchange_strong(__int_type& __i1, __int_type __i2,
- memory_order __m = memory_order_seq_cst) volatile
- {
- return compare_exchange_strong(__i1, __i2, __m,
- __calculate_memory_order(__m));
- }
-
- __int_type
- fetch_add(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_add(&_M_i, __i); }
-
- __int_type
- fetch_add(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_add(&_M_i, __i); }
-
- __int_type
- fetch_sub(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_sub(&_M_i, __i); }
-
- __int_type
- fetch_sub(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_sub(&_M_i, __i); }
-
- __int_type
- fetch_and(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_and(&_M_i, __i); }
-
- __int_type
- fetch_and(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_and(&_M_i, __i); }
-
- __int_type
- fetch_or(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_or(&_M_i, __i); }
-
- __int_type
- fetch_or(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_or(&_M_i, __i); }
-
- __int_type
- fetch_xor(__int_type __i, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_xor(&_M_i, __i); }
-
- __int_type
- fetch_xor(__int_type __i,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_xor(&_M_i, __i); }
- };
-
-
- /// Partial specialization for pointer types.
- template<typename _PTp>
- struct __atomic_base<_PTp*>
- {
- private:
- typedef _PTp* __pointer_type;
-
- __pointer_type _M_p;
-
- public:
- __atomic_base() = default;
- ~__atomic_base() = default;
- __atomic_base(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) = delete;
- __atomic_base& operator=(const __atomic_base&) volatile = delete;
-
- // Requires __pointer_type convertible to _M_p.
- constexpr __atomic_base(__pointer_type __p): _M_p (__p) { }
-
- operator __pointer_type() const
- { return load(); }
-
- operator __pointer_type() const volatile
- { return load(); }
-
- __pointer_type
- operator=(__pointer_type __p)
- {
- store(__p);
- return __p;
- }
-
- __pointer_type
- operator=(__pointer_type __p) volatile
- {
- store(__p);
- return __p;
- }
-
- __pointer_type
- operator++(int)
- { return fetch_add(1); }
-
- __pointer_type
- operator++(int) volatile
- { return fetch_add(1); }
-
- __pointer_type
- operator--(int)
- { return fetch_sub(1); }
-
- __pointer_type
- operator--(int) volatile
- { return fetch_sub(1); }
-
- __pointer_type
- operator++()
- { return fetch_add(1) + 1; }
-
- __pointer_type
- operator++() volatile
- { return fetch_add(1) + 1; }
-
- __pointer_type
- operator--()
- { return fetch_sub(1) -1; }
-
- __pointer_type
- operator--() volatile
- { return fetch_sub(1) -1; }
-
- __pointer_type
- operator+=(ptrdiff_t __d)
- { return fetch_add(__d) + __d; }
-
- __pointer_type
- operator+=(ptrdiff_t __d) volatile
- { return fetch_add(__d) + __d; }
-
- __pointer_type
- operator-=(ptrdiff_t __d)
- { return fetch_sub(__d) - __d; }
-
- __pointer_type
- operator-=(ptrdiff_t __d) volatile
- { return fetch_sub(__d) - __d; }
-
- bool
- is_lock_free() const
- { return true; }
-
- bool
- is_lock_free() const volatile
- { return true; }
-
- void
- store(__pointer_type __p, memory_order __m = memory_order_seq_cst)
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
-
- if (__m == memory_order_relaxed)
- _M_p = __p;
- else
- {
- // write_mem_barrier();
- _M_p = __p;
- if (__m == memory_order_seq_cst)
- __sync_synchronize();
- }
- }
-
- void
- store(__pointer_type __p,
- memory_order __m = memory_order_seq_cst) volatile
- {
- __glibcxx_assert(__m != memory_order_acquire);
- __glibcxx_assert(__m != memory_order_acq_rel);
- __glibcxx_assert(__m != memory_order_consume);
-
- if (__m == memory_order_relaxed)
- _M_p = __p;
- else
- {
- // write_mem_barrier();
- _M_p = __p;
- if (__m == memory_order_seq_cst)
- __sync_synchronize();
- }
- }
-
- __pointer_type
- load(memory_order __m = memory_order_seq_cst) const
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
-
- __sync_synchronize();
- __pointer_type __ret = _M_p;
- __sync_synchronize();
- return __ret;
- }
-
- __pointer_type
- load(memory_order __m = memory_order_seq_cst) const volatile
- {
- __glibcxx_assert(__m != memory_order_release);
- __glibcxx_assert(__m != memory_order_acq_rel);
-
- __sync_synchronize();
- __pointer_type __ret = _M_p;
- __sync_synchronize();
- return __ret;
- }
-
- __pointer_type
- exchange(__pointer_type __p, memory_order __m = memory_order_seq_cst)
- {
- // XXX built-in assumes memory_order_acquire.
- return __sync_lock_test_and_set(&_M_p, __p);
- }
-
-
- __pointer_type
- exchange(__pointer_type __p,
- memory_order __m = memory_order_seq_cst) volatile
- {
- // XXX built-in assumes memory_order_acquire.
- return __sync_lock_test_and_set(&_M_p, __p);
- }
-
- bool
- compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m1, memory_order __m2)
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
-
- __pointer_type __p1o = __p1;
- __pointer_type __p1n = __sync_val_compare_and_swap(&_M_p, __p1o, __p2);
-
- // Assume extra stores (of same value) allowed in true case.
- __p1 = __p1n;
- return __p1o == __p1n;
- }
-
- bool
- compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m1, memory_order __m2) volatile
- {
- __glibcxx_assert(__m2 != memory_order_release);
- __glibcxx_assert(__m2 != memory_order_acq_rel);
- __glibcxx_assert(__m2 <= __m1);
-
- __pointer_type __p1o = __p1;
- __pointer_type __p1n = __sync_val_compare_and_swap(&_M_p, __p1o, __p2);
-
- // Assume extra stores (of same value) allowed in true case.
- __p1 = __p1n;
- return __p1o == __p1n;
- }
-
- __pointer_type
- fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_add(&_M_p, __d); }
-
- __pointer_type
- fetch_add(ptrdiff_t __d,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_add(&_M_p, __d); }
-
- __pointer_type
- fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
- { return __sync_fetch_and_sub(&_M_p, __d); }
-
- __pointer_type
- fetch_sub(ptrdiff_t __d,
- memory_order __m = memory_order_seq_cst) volatile
- { return __sync_fetch_and_sub(&_M_p, __d); }
- };
-
-} // namespace __atomic2
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
-
-#endif
diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h
index 272a4cd4cf..191db7b5f0 100644
--- a/libstdc++-v3/include/bits/atomic_base.h
+++ b/libstdc++-v3/include/bits/atomic_base.h
@@ -1,6 +1,6 @@
// -*- C++ -*- header.
-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,6 +35,7 @@
#include <bits/c++config.h>
#include <stdbool.h>
#include <stdint.h>
+#include <bits/atomic_lockfree_defines.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -58,111 +59,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order_seq_cst
} memory_order;
- inline memory_order
- __calculate_memory_order(memory_order __m)
+ // Drop release ordering as per [atomics.types.operations.req]/21
+ constexpr memory_order
+ __cmpexch_failure_order(memory_order __m) noexcept
{
- const bool __cond1 = __m == memory_order_release;
- const bool __cond2 = __m == memory_order_acq_rel;
- memory_order __mo1(__cond1 ? memory_order_relaxed : __m);
- memory_order __mo2(__cond2 ? memory_order_acquire : __mo1);
- return __mo2;
+ return __m == memory_order_acq_rel ? memory_order_acquire
+ : __m == memory_order_release ? memory_order_relaxed : __m;
}
- void
- atomic_thread_fence(memory_order);
+ inline void
+ atomic_thread_fence(memory_order __m) noexcept
+ { __atomic_thread_fence(__m); }
- void
- atomic_signal_fence(memory_order);
+ inline void
+ atomic_signal_fence(memory_order __m) noexcept
+ { __atomic_signal_fence(__m); }
/// kill_dependency
template<typename _Tp>
inline _Tp
- kill_dependency(_Tp __y)
+ kill_dependency(_Tp __y) noexcept
{
_Tp __ret(__y);
return __ret;
}
- /**
- * @brief Base type for atomic_flag.
- *
- * Base type is POD with data, allowing atomic_flag to derive from
- * it and meet the standard layout type requirement. In addition to
- * compatibilty with a C interface, this allows different
- * implementations of atomic_flag to use the same atomic operation
- * functions, via a standard conversion to the __atomic_flag_base
- * argument.
- */
- _GLIBCXX_BEGIN_EXTERN_C
-
- struct __atomic_flag_base
- {
- bool _M_i;
- };
-
- _GLIBCXX_END_EXTERN_C
-
-#define ATOMIC_FLAG_INIT { false }
-
// Base types for atomics.
- //
- // Three nested namespaces for atomic implementation details.
- //
- // The nested namespace inlined into std:: is determined by the value
- // of the _GLIBCXX_ATOMIC_PROPERTY macro and the resulting
- // ATOMIC_*_LOCK_FREE macros.
- //
- // 0 == __atomic0 == Never lock-free
- // 1 == __atomic1 == Best available, sometimes lock-free
- // 2 == __atomic2 == Always lock-free
-
- namespace __atomic0
- {
- struct atomic_flag;
-
- template<typename _IntTp>
- struct __atomic_base;
- }
-
- namespace __atomic2
- {
- struct atomic_flag;
-
- template<typename _IntTp>
- struct __atomic_base;
- }
-
- namespace __atomic1
- {
- using __atomic2::atomic_flag;
- using __atomic0::__atomic_base;
- }
-
- /// Lock-free Property
-#if defined(_GLIBCXX_ATOMIC_BUILTINS_1) && defined(_GLIBCXX_ATOMIC_BUILTINS_2) \
- && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_ATOMIC_BUILTINS_8)
-# define _GLIBCXX_ATOMIC_PROPERTY 2
-# define _GLIBCXX_ATOMIC_NAMESPACE __atomic2
-#elif defined(_GLIBCXX_ATOMIC_BUILTINS_1)
-# define _GLIBCXX_ATOMIC_PROPERTY 1
-# define _GLIBCXX_ATOMIC_NAMESPACE __atomic1
-#else
-# define _GLIBCXX_ATOMIC_PROPERTY 0
-# define _GLIBCXX_ATOMIC_NAMESPACE __atomic0
-#endif
-
-#define ATOMIC_CHAR_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_CHAR16_T_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_CHAR32_T_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_WCHAR_T_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_SHORT_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_INT_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_LONG_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_LLONG_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-
- inline namespace _GLIBCXX_ATOMIC_NAMESPACE { }
-
+ template<typename _IntTp>
+ struct __atomic_base;
/// atomic_char
typedef __atomic_base<char> atomic_char;
@@ -287,6 +212,622 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct atomic<_Tp*>;
+ /* The target's "set" value for test-and-set may not be exactly 1. */
+#if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
+ typedef bool __atomic_flag_data_type;
+#else
+ typedef unsigned char __atomic_flag_data_type;
+#endif
+
+ /**
+ * @brief Base type for atomic_flag.
+ *
+ * Base type is POD with data, allowing atomic_flag to derive from
+ * it and meet the standard layout type requirement. In addition to
+ * compatibilty with a C interface, this allows different
+ * implementations of atomic_flag to use the same atomic operation
+ * functions, via a standard conversion to the __atomic_flag_base
+ * argument.
+ */
+ _GLIBCXX_BEGIN_EXTERN_C
+
+ struct __atomic_flag_base
+ {
+ __atomic_flag_data_type _M_i;
+ };
+
+ _GLIBCXX_END_EXTERN_C
+
+#define ATOMIC_FLAG_INIT { 0 }
+
+ /// atomic_flag
+ struct atomic_flag : public __atomic_flag_base
+ {
+ atomic_flag() noexcept = default;
+ ~atomic_flag() noexcept = default;
+ atomic_flag(const atomic_flag&) = delete;
+ atomic_flag& operator=(const atomic_flag&) = delete;
+ atomic_flag& operator=(const atomic_flag&) volatile = delete;
+
+ // Conversion to ATOMIC_FLAG_INIT.
+ constexpr atomic_flag(bool __i) noexcept
+ : __atomic_flag_base{ _S_init(__i) }
+ { }
+
+ bool
+ test_and_set(memory_order __m = memory_order_seq_cst) noexcept
+ {
+ return __atomic_test_and_set (&_M_i, __m);
+ }
+
+ bool
+ test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ return __atomic_test_and_set (&_M_i, __m);
+ }
+
+ void
+ clear(memory_order __m = memory_order_seq_cst) noexcept
+ {
+ __glibcxx_assert(__m != memory_order_consume);
+ __glibcxx_assert(__m != memory_order_acquire);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+
+ __atomic_clear (&_M_i, __m);
+ }
+
+ void
+ clear(memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ __glibcxx_assert(__m != memory_order_consume);
+ __glibcxx_assert(__m != memory_order_acquire);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+
+ __atomic_clear (&_M_i, __m);
+ }
+
+ private:
+ static constexpr __atomic_flag_data_type
+ _S_init(bool __i)
+ { return __i ? __GCC_ATOMIC_TEST_AND_SET_TRUEVAL : 0; }
+ };
+
+
+ /// Base class for atomic integrals.
+ //
+ // For each of the integral types, define atomic_[integral type] struct
+ //
+ // atomic_bool bool
+ // atomic_char char
+ // atomic_schar signed char
+ // atomic_uchar unsigned char
+ // atomic_short short
+ // atomic_ushort unsigned short
+ // atomic_int int
+ // atomic_uint unsigned int
+ // atomic_long long
+ // atomic_ulong unsigned long
+ // atomic_llong long long
+ // atomic_ullong unsigned long long
+ // atomic_char16_t char16_t
+ // atomic_char32_t char32_t
+ // atomic_wchar_t wchar_t
+ //
+ // NB: Assuming _ITp is an integral scalar type that is 1, 2, 4, or
+ // 8 bytes, since that is what GCC built-in functions for atomic
+ // memory access expect.
+ template<typename _ITp>
+ struct __atomic_base
+ {
+ private:
+ typedef _ITp __int_type;
+
+ __int_type _M_i;
+
+ public:
+ __atomic_base() noexcept = default;
+ ~__atomic_base() noexcept = default;
+ __atomic_base(const __atomic_base&) = delete;
+ __atomic_base& operator=(const __atomic_base&) = delete;
+ __atomic_base& operator=(const __atomic_base&) volatile = delete;
+
+ // Requires __int_type convertible to _M_i.
+ constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { }
+
+ operator __int_type() const noexcept
+ { return load(); }
+
+ operator __int_type() const volatile noexcept
+ { return load(); }
+
+ __int_type
+ operator=(__int_type __i) noexcept
+ {
+ store(__i);
+ return __i;
+ }
+
+ __int_type
+ operator=(__int_type __i) volatile noexcept
+ {
+ store(__i);
+ return __i;
+ }
+
+ __int_type
+ operator++(int) noexcept
+ { return fetch_add(1); }
+
+ __int_type
+ operator++(int) volatile noexcept
+ { return fetch_add(1); }
+
+ __int_type
+ operator--(int) noexcept
+ { return fetch_sub(1); }
+
+ __int_type
+ operator--(int) volatile noexcept
+ { return fetch_sub(1); }
+
+ __int_type
+ operator++() noexcept
+ { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
+
+ __int_type
+ operator++() volatile noexcept
+ { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
+
+ __int_type
+ operator--() noexcept
+ { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
+
+ __int_type
+ operator--() volatile noexcept
+ { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
+
+ __int_type
+ operator+=(__int_type __i) noexcept
+ { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator+=(__int_type __i) volatile noexcept
+ { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator-=(__int_type __i) noexcept
+ { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator-=(__int_type __i) volatile noexcept
+ { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator&=(__int_type __i) noexcept
+ { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator&=(__int_type __i) volatile noexcept
+ { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator|=(__int_type __i) noexcept
+ { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator|=(__int_type __i) volatile noexcept
+ { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator^=(__int_type __i) noexcept
+ { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ __int_type
+ operator^=(__int_type __i) volatile noexcept
+ { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
+
+ bool
+ is_lock_free() const noexcept
+ { return __atomic_is_lock_free (sizeof (_M_i), &_M_i); }
+
+ bool
+ is_lock_free() const volatile noexcept
+ { return __atomic_is_lock_free (sizeof (_M_i), &_M_i); }
+
+ void
+ store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
+ {
+ __glibcxx_assert(__m != memory_order_acquire);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+ __glibcxx_assert(__m != memory_order_consume);
+
+ __atomic_store_n(&_M_i, __i, __m);
+ }
+
+ void
+ store(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ __glibcxx_assert(__m != memory_order_acquire);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+ __glibcxx_assert(__m != memory_order_consume);
+
+ __atomic_store_n(&_M_i, __i, __m);
+ }
+
+ __int_type
+ load(memory_order __m = memory_order_seq_cst) const noexcept
+ {
+ __glibcxx_assert(__m != memory_order_release);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+
+ return __atomic_load_n(&_M_i, __m);
+ }
+
+ __int_type
+ load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+ {
+ __glibcxx_assert(__m != memory_order_release);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+
+ return __atomic_load_n(&_M_i, __m);
+ }
+
+ __int_type
+ exchange(__int_type __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ {
+ return __atomic_exchange_n(&_M_i, __i, __m);
+ }
+
+
+ __int_type
+ exchange(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ return __atomic_exchange_n(&_M_i, __i, __m);
+ }
+
+ bool
+ compare_exchange_weak(__int_type& __i1, __int_type __i2,
+ memory_order __m1, memory_order __m2) noexcept
+ {
+ __glibcxx_assert(__m2 != memory_order_release);
+ __glibcxx_assert(__m2 != memory_order_acq_rel);
+ __glibcxx_assert(__m2 <= __m1);
+
+ return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
+ }
+
+ bool
+ compare_exchange_weak(__int_type& __i1, __int_type __i2,
+ memory_order __m1,
+ memory_order __m2) volatile noexcept
+ {
+ __glibcxx_assert(__m2 != memory_order_release);
+ __glibcxx_assert(__m2 != memory_order_acq_rel);
+ __glibcxx_assert(__m2 <= __m1);
+
+ return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
+ }
+
+ bool
+ compare_exchange_weak(__int_type& __i1, __int_type __i2,
+ memory_order __m = memory_order_seq_cst) noexcept
+ {
+ return compare_exchange_weak(__i1, __i2, __m,
+ __cmpexch_failure_order(__m));
+ }
+
+ bool
+ compare_exchange_weak(__int_type& __i1, __int_type __i2,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ return compare_exchange_weak(__i1, __i2, __m,
+ __cmpexch_failure_order(__m));
+ }
+
+ bool
+ compare_exchange_strong(__int_type& __i1, __int_type __i2,
+ memory_order __m1, memory_order __m2) noexcept
+ {
+ __glibcxx_assert(__m2 != memory_order_release);
+ __glibcxx_assert(__m2 != memory_order_acq_rel);
+ __glibcxx_assert(__m2 <= __m1);
+
+ return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
+ }
+
+ bool
+ compare_exchange_strong(__int_type& __i1, __int_type __i2,
+ memory_order __m1,
+ memory_order __m2) volatile noexcept
+ {
+ __glibcxx_assert(__m2 != memory_order_release);
+ __glibcxx_assert(__m2 != memory_order_acq_rel);
+ __glibcxx_assert(__m2 <= __m1);
+
+ return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
+ }
+
+ bool
+ compare_exchange_strong(__int_type& __i1, __int_type __i2,
+ memory_order __m = memory_order_seq_cst) noexcept
+ {
+ return compare_exchange_strong(__i1, __i2, __m,
+ __cmpexch_failure_order(__m));
+ }
+
+ bool
+ compare_exchange_strong(__int_type& __i1, __int_type __i2,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ return compare_exchange_strong(__i1, __i2, __m,
+ __cmpexch_failure_order(__m));
+ }
+
+ __int_type
+ fetch_add(__int_type __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_add(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_add(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_add(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_sub(__int_type __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_sub(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_sub(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_sub(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_and(__int_type __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_and(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_and(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_and(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_or(__int_type __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_or(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_or(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_or(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_xor(__int_type __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_xor(&_M_i, __i, __m); }
+
+ __int_type
+ fetch_xor(__int_type __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_xor(&_M_i, __i, __m); }
+ };
+
+
+ /// Partial specialization for pointer types.
+ template<typename _PTp>
+ struct __atomic_base<_PTp*>
+ {
+ private:
+ typedef _PTp* __pointer_type;
+
+ __pointer_type _M_p;
+
+ // Factored out to facilitate explicit specialization.
+ constexpr ptrdiff_t
+ _M_type_size(ptrdiff_t __d) { return __d * sizeof(_PTp); }
+
+ constexpr ptrdiff_t
+ _M_type_size(ptrdiff_t __d) volatile { return __d * sizeof(_PTp); }
+
+ public:
+ __atomic_base() noexcept = default;
+ ~__atomic_base() noexcept = default;
+ __atomic_base(const __atomic_base&) = delete;
+ __atomic_base& operator=(const __atomic_base&) = delete;
+ __atomic_base& operator=(const __atomic_base&) volatile = delete;
+
+ // Requires __pointer_type convertible to _M_p.
+ constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { }
+
+ operator __pointer_type() const noexcept
+ { return load(); }
+
+ operator __pointer_type() const volatile noexcept
+ { return load(); }
+
+ __pointer_type
+ operator=(__pointer_type __p) noexcept
+ {
+ store(__p);
+ return __p;
+ }
+
+ __pointer_type
+ operator=(__pointer_type __p) volatile noexcept
+ {
+ store(__p);
+ return __p;
+ }
+
+ __pointer_type
+ operator++(int) noexcept
+ { return fetch_add(1); }
+
+ __pointer_type
+ operator++(int) volatile noexcept
+ { return fetch_add(1); }
+
+ __pointer_type
+ operator--(int) noexcept
+ { return fetch_sub(1); }
+
+ __pointer_type
+ operator--(int) volatile noexcept
+ { return fetch_sub(1); }
+
+ __pointer_type
+ operator++() noexcept
+ { return __atomic_add_fetch(&_M_p, _M_type_size(1),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator++() volatile noexcept
+ { return __atomic_add_fetch(&_M_p, _M_type_size(1),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator--() noexcept
+ { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator--() volatile noexcept
+ { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator+=(ptrdiff_t __d) noexcept
+ { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator+=(ptrdiff_t __d) volatile noexcept
+ { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator-=(ptrdiff_t __d) noexcept
+ { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
+ memory_order_seq_cst); }
+
+ __pointer_type
+ operator-=(ptrdiff_t __d) volatile noexcept
+ { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
+ memory_order_seq_cst); }
+
+ bool
+ is_lock_free() const noexcept
+ { return __atomic_is_lock_free(_M_type_size(1), &_M_p); }
+
+ bool
+ is_lock_free() const volatile noexcept
+ { return __atomic_is_lock_free(_M_type_size(1), &_M_p); }
+
+ void
+ store(__pointer_type __p,
+ memory_order __m = memory_order_seq_cst) noexcept
+ {
+ __glibcxx_assert(__m != memory_order_acquire);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+ __glibcxx_assert(__m != memory_order_consume);
+
+ __atomic_store_n(&_M_p, __p, __m);
+ }
+
+ void
+ store(__pointer_type __p,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ __glibcxx_assert(__m != memory_order_acquire);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+ __glibcxx_assert(__m != memory_order_consume);
+
+ __atomic_store_n(&_M_p, __p, __m);
+ }
+
+ __pointer_type
+ load(memory_order __m = memory_order_seq_cst) const noexcept
+ {
+ __glibcxx_assert(__m != memory_order_release);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+
+ return __atomic_load_n(&_M_p, __m);
+ }
+
+ __pointer_type
+ load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+ {
+ __glibcxx_assert(__m != memory_order_release);
+ __glibcxx_assert(__m != memory_order_acq_rel);
+
+ return __atomic_load_n(&_M_p, __m);
+ }
+
+ __pointer_type
+ exchange(__pointer_type __p,
+ memory_order __m = memory_order_seq_cst) noexcept
+ {
+ return __atomic_exchange_n(&_M_p, __p, __m);
+ }
+
+
+ __pointer_type
+ exchange(__pointer_type __p,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ return __atomic_exchange_n(&_M_p, __p, __m);
+ }
+
+ bool
+ compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+ memory_order __m1,
+ memory_order __m2) noexcept
+ {
+ __glibcxx_assert(__m2 != memory_order_release);
+ __glibcxx_assert(__m2 != memory_order_acq_rel);
+ __glibcxx_assert(__m2 <= __m1);
+
+ return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
+ }
+
+ bool
+ compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+ memory_order __m1,
+ memory_order __m2) volatile noexcept
+ {
+ __glibcxx_assert(__m2 != memory_order_release);
+ __glibcxx_assert(__m2 != memory_order_acq_rel);
+ __glibcxx_assert(__m2 <= __m1);
+
+ return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
+ }
+
+ __pointer_type
+ fetch_add(ptrdiff_t __d,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
+
+ __pointer_type
+ fetch_add(ptrdiff_t __d,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
+
+ __pointer_type
+ fetch_sub(ptrdiff_t __d,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
+
+ __pointer_type
+ fetch_sub(ptrdiff_t __d,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
+ };
+
// @} group atomics
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/basic_ios.h b/libstdc++-v3/include/bits/basic_ios.h
index 29d8ae5d3e..24c3ca499a 100644
--- a/libstdc++-v3/include/bits/basic_ios.h
+++ b/libstdc++-v3/include/bits/basic_ios.h
@@ -131,7 +131,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief [Re]sets the error state.
- * @param state The new state flag(s) to set.
+ * @param __state The new state flag(s) to set.
*
* See std::ios_base::iostate for the possible bit values. Most
* users will not need to pass an argument.
@@ -141,7 +141,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Sets additional flags in the error state.
- * @param state The additional state flag(s) to set.
+ * @param __state The additional state flag(s) to set.
*
* See std::ios_base::iostate for the possible bit values.
*/
@@ -216,7 +216,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Throwing exceptions on errors.
- * @param except The new exceptions mask.
+ * @param __except The new exceptions mask.
*
* By default, error flags are set silently. You can set an
* exceptions mask for each stream; if a bit in the mask becomes set
@@ -289,7 +289,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Ties this stream to an output stream.
- * @param tiestr The output stream.
+ * @param __tiestr The output stream.
* @return The previously tied output stream, or NULL if the stream
* was not tied.
*
@@ -315,7 +315,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Changing the underlying buffer.
- * @param sb The new stream buffer.
+ * @param __sb The new stream buffer.
* @return The previous stream buffer.
*
* Associates a new buffer with the current stream, and clears the
@@ -371,7 +371,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Sets a new @a empty character.
- * @param ch The new character.
+ * @param __ch The new character.
* @return The previous fill character.
*
* The fill character is used to fill out space when P+ characters
@@ -389,7 +389,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Locales:
/**
* @brief Moves to a new locale.
- * @param loc The new locale.
+ * @param __loc The new locale.
* @return The previous locale.
*
* Calls @c ios_base::imbue(loc), and if a stream buffer is associated
@@ -403,8 +403,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Squeezes characters.
- * @param c The character to narrow.
- * @param dfault The character to narrow.
+ * @param __c The character to narrow.
+ * @param __dfault The character to narrow.
* @return The narrowed character.
*
* Maps a character of @c char_type to a character of @c char,
@@ -424,7 +424,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Widens characters.
- * @param c The character to widen.
+ * @param __c The character to widen.
* @return The widened character.
*
* Maps a character of @c char to a character of @c char_type.
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 102ef77a68..169daf5861 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -40,7 +40,9 @@
#include <ext/atomicity.h>
#include <debug/debug.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -201,7 +203,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_set_length_and_sharable(size_type __n)
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (__builtin_expect(this != &_S_empty_rep(), false))
#endif
{
@@ -231,7 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_dispose(const _Alloc& __a)
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (__builtin_expect(this != &_S_empty_rep(), false))
#endif
{
@@ -252,7 +254,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_CharT*
_M_refcopy() throw()
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (__builtin_expect(this != &_S_empty_rep(), false))
#endif
__gnu_cxx::__atomic_add_dispatch(&this->_M_refcount, 1);
@@ -430,7 +432,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Default constructor creates an empty string.
*/
basic_string()
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
: _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { }
#else
: _M_dataplus(_S_construct(size_type(), _CharT(), _Alloc()), _Alloc()){ }
@@ -445,64 +447,64 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// NB: per LWG issue 42, semantics different from IS:
/**
* @brief Construct string with copy of value of @a str.
- * @param str Source string.
+ * @param __str Source string.
*/
basic_string(const basic_string& __str);
/**
* @brief Construct string as copy of a substring.
- * @param str Source string.
- * @param pos Index of first character to copy from.
- * @param n Number of characters to copy (default remainder).
+ * @param __str Source string.
+ * @param __pos Index of first character to copy from.
+ * @param __n Number of characters to copy (default remainder).
*/
basic_string(const basic_string& __str, size_type __pos,
size_type __n = npos);
/**
* @brief Construct string as copy of a substring.
- * @param str Source string.
- * @param pos Index of first character to copy from.
- * @param n Number of characters to copy.
- * @param a Allocator to use.
+ * @param __str Source string.
+ * @param __pos Index of first character to copy from.
+ * @param __n Number of characters to copy.
+ * @param __a Allocator to use.
*/
basic_string(const basic_string& __str, size_type __pos,
size_type __n, const _Alloc& __a);
/**
* @brief Construct string initialized by a character %array.
- * @param s Source character %array.
- * @param n Number of characters to copy.
- * @param a Allocator to use (default is default allocator).
+ * @param __s Source character %array.
+ * @param __n Number of characters to copy.
+ * @param __a Allocator to use (default is default allocator).
*
- * NB: @a s must have at least @a n characters, &apos;\\0&apos;
+ * NB: @a __s must have at least @a __n characters, &apos;\\0&apos;
* has no special meaning.
*/
basic_string(const _CharT* __s, size_type __n,
const _Alloc& __a = _Alloc());
/**
* @brief Construct string as copy of a C string.
- * @param s Source C string.
- * @param a Allocator to use (default is default allocator).
+ * @param __s Source C string.
+ * @param __a Allocator to use (default is default allocator).
*/
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
/**
* @brief Construct string as multiple characters.
- * @param n Number of characters.
- * @param c Character to use.
- * @param a Allocator to use (default is default allocator).
+ * @param __n Number of characters.
+ * @param __c Character to use.
+ * @param __a Allocator to use (default is default allocator).
*/
basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc());
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Move construct string.
- * @param str Source string.
+ * @param __str Source string.
*
- * The newly-created string contains the exact contents of @a str.
- * @a str is a valid, but unspecified string.
+ * The newly-created string contains the exact contents of @a __str.
+ * @a __str is a valid, but unspecified string.
**/
- basic_string(basic_string&& __str)
+ basic_string(basic_string&& __str) noexcept
: _M_dataplus(__str._M_dataplus)
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
__str._M_data(_S_empty_rep()._M_refdata());
#else
__str._M_data(_S_construct(size_type(), _CharT(), get_allocator()));
@@ -511,17 +513,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Construct string from an initializer %list.
- * @param l std::initializer_list of characters.
- * @param a Allocator to use (default is default allocator).
+ * @param __l std::initializer_list of characters.
+ * @param __a Allocator to use (default is default allocator).
*/
basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc());
#endif // __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Construct string as copy of a range.
- * @param beg Start of range.
- * @param end End of range.
- * @param a Allocator to use (default is default allocator).
+ * @param __beg Start of range.
+ * @param __end End of range.
+ * @param __a Allocator to use (default is default allocator).
*/
template<class _InputIterator>
basic_string(_InputIterator __beg, _InputIterator __end,
@@ -530,12 +532,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Destroy the string instance.
*/
- ~basic_string()
+ ~basic_string() _GLIBCXX_NOEXCEPT
{ _M_rep()->_M_dispose(this->get_allocator()); }
/**
* @brief Assign the value of @a str to this string.
- * @param str Source string.
+ * @param __str Source string.
*/
basic_string&
operator=(const basic_string& __str)
@@ -543,7 +545,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy contents of @a s into this string.
- * @param s Source null-terminated string.
+ * @param __s Source null-terminated string.
*/
basic_string&
operator=(const _CharT* __s)
@@ -551,7 +553,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to string of length 1.
- * @param c Source character.
+ * @param __c Source character.
*
* Assigning to a character makes this string length 1 and
* (*this)[0] == @a c.
@@ -566,7 +568,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Move assign the value of @a str to this string.
- * @param str Source string.
+ * @param __str Source string.
*
* The contents of @a str are moved into this string (without copying).
* @a str is a valid, but unspecified string.
@@ -581,7 +583,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to string constructed from initializer %list.
- * @param l std::initializer_list.
+ * @param __l std::initializer_list.
*/
basic_string&
operator=(initializer_list<_CharT> __l)
@@ -597,7 +599,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the %string. Unshares the string.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{
_M_leak();
return iterator(_M_data());
@@ -608,7 +610,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* character in the %string.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_M_data()); }
/**
@@ -616,7 +618,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* character in the %string. Unshares the string.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{
_M_leak();
return iterator(_M_data() + this->size());
@@ -627,7 +629,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* last character in the %string.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_M_data() + this->size()); }
/**
@@ -636,7 +638,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* order. Unshares the string.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(this->end()); }
/**
@@ -645,7 +647,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* reverse element order.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(this->end()); }
/**
@@ -654,7 +656,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* element order. Unshares the string.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(this->begin()); }
/**
@@ -663,7 +665,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* is done in reverse element order.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(this->begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -672,7 +674,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* character in the %string.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(this->_M_data()); }
/**
@@ -680,7 +682,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* last character in the %string.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(this->_M_data() + this->size()); }
/**
@@ -689,7 +691,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* reverse element order.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(this->end()); }
/**
@@ -698,7 +700,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* is done in reverse element order.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(this->begin()); }
#endif
@@ -707,36 +709,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Returns the number of characters in the string, not including any
/// null-termination.
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _M_rep()->_M_length; }
/// Returns the number of characters in the string, not including any
/// null-termination.
size_type
- length() const
+ length() const _GLIBCXX_NOEXCEPT
{ return _M_rep()->_M_length; }
/// Returns the size() of the largest possible %string.
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _Rep::_S_max_size; }
/**
* @brief Resizes the %string to the specified number of characters.
- * @param n Number of characters the %string should contain.
- * @param c Character to fill any new elements.
+ * @param __n Number of characters the %string should contain.
+ * @param __c Character to fill any new elements.
*
* This function will %resize the %string to the specified
* number of characters. If the number is smaller than the
* %string's current size the %string is truncated, otherwise
- * the %string is extended and new elements are %set to @a c.
+ * the %string is extended and new elements are %set to @a __c.
*/
void
resize(size_type __n, _CharT __c);
/**
* @brief Resizes the %string to the specified number of characters.
- * @param n Number of characters the %string should contain.
+ * @param __n Number of characters the %string should contain.
*
* This function will resize the %string to the specified length. If
* the new size is smaller than the %string's current size the %string
@@ -753,10 +755,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
shrink_to_fit()
{
- __try
- { reserve(0); }
- __catch(...)
- { }
+ if (capacity() > size())
+ {
+ __try
+ { reserve(0); }
+ __catch(...)
+ { }
+ }
}
#endif
@@ -765,14 +770,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* before needing to allocate more memory.
*/
size_type
- capacity() const
+ capacity() const _GLIBCXX_NOEXCEPT
{ return _M_rep()->_M_capacity; }
/**
* @brief Attempt to preallocate enough memory for specified number of
* characters.
- * @param res_arg Number of characters required.
- * @throw std::length_error If @a res_arg exceeds @c max_size().
+ * @param __res_arg Number of characters required.
+ * @throw std::length_error If @a __res_arg exceeds @c max_size().
*
* This function attempts to reserve enough memory for the
* %string to hold the specified number of characters. If the
@@ -792,7 +797,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Erases the string, making it empty.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_mutate(0, this->size(), 0); }
/**
@@ -800,13 +805,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* <code>*this == ""</code>.
*/
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return this->size() == 0; }
// Element access:
/**
* @brief Subscript access to the data contained in the %string.
- * @param pos The index of the character to access.
+ * @param __pos The index of the character to access.
* @return Read-only (constant) reference to the character.
*
* This operator allows for easy, array-style, data access.
@@ -823,7 +828,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Subscript access to the data contained in the %string.
- * @param pos The index of the character to access.
+ * @param __pos The index of the character to access.
* @return Read/write reference to the character.
*
* This operator allows for easy, array-style, data access.
@@ -844,7 +849,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Provides access to the data contained in the %string.
- * @param n The index of the character to access.
+ * @param __n The index of the character to access.
* @return Read-only (const) reference to the character.
* @throw std::out_of_range If @a n is an invalid index.
*
@@ -860,6 +865,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return _M_data()[__n];
}
+ /**
+ * @brief Provides access to the data contained in the %string.
+ * @param __n The index of the character to access.
+ * @return Read/write reference to the character.
+ * @throw std::out_of_range If @a n is an invalid index.
+ *
+ * This function provides for safer data access. The parameter is
+ * first checked that it is in the range of the string. The function
+ * throws out_of_range if the check fails. Success results in
+ * unsharing the string.
+ */
+ reference
+ at(size_type __n)
+ {
+ if (__n >= size())
+ __throw_out_of_range(__N("basic_string::at"));
+ _M_leak();
+ return _M_data()[__n];
+ }
+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* Returns a read/write reference to the data at the first
@@ -894,30 +919,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return operator[](this->size() - 1); }
#endif
- /**
- * @brief Provides access to the data contained in the %string.
- * @param n The index of the character to access.
- * @return Read/write reference to the character.
- * @throw std::out_of_range If @a n is an invalid index.
- *
- * This function provides for safer data access. The parameter is
- * first checked that it is in the range of the string. The function
- * throws out_of_range if the check fails. Success results in
- * unsharing the string.
- */
- reference
- at(size_type __n)
- {
- if (__n >= size())
- __throw_out_of_range(__N("basic_string::at"));
- _M_leak();
- return _M_data()[__n];
- }
-
// Modifiers:
/**
* @brief Append a string to this string.
- * @param str The string to append.
+ * @param __str The string to append.
* @return Reference to this string.
*/
basic_string&
@@ -926,7 +931,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a C string.
- * @param s The C string to append.
+ * @param __s The C string to append.
* @return Reference to this string.
*/
basic_string&
@@ -935,7 +940,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a character.
- * @param c The character to append.
+ * @param __c The character to append.
* @return Reference to this string.
*/
basic_string&
@@ -948,7 +953,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Append an initializer_list of characters.
- * @param l The initializer_list of characters to be appended.
+ * @param __l The initializer_list of characters to be appended.
* @return Reference to this string.
*/
basic_string&
@@ -958,7 +963,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a string to this string.
- * @param str The string to append.
+ * @param __str The string to append.
* @return Reference to this string.
*/
basic_string&
@@ -966,23 +971,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a substring.
- * @param str The string to append.
- * @param pos Index of the first character of str to append.
- * @param n The number of characters to append.
+ * @param __str The string to append.
+ * @param __pos Index of the first character of str to append.
+ * @param __n The number of characters to append.
* @return Reference to this string.
- * @throw std::out_of_range if @a pos is not a valid index.
+ * @throw std::out_of_range if @a __pos is not a valid index.
*
- * This function appends @a n characters from @a str starting at @a pos
- * to this string. If @a n is is larger than the number of available
- * characters in @a str, the remainder of @a str is appended.
+ * This function appends @a __n characters from @a __str
+ * starting at @a __pos to this string. If @a __n is is larger
+ * than the number of available characters in @a __str, the
+ * remainder of @a __str is appended.
*/
basic_string&
append(const basic_string& __str, size_type __pos, size_type __n);
/**
* @brief Append a C substring.
- * @param s The C string to append.
- * @param n The number of characters to append.
+ * @param __s The C string to append.
+ * @param __n The number of characters to append.
* @return Reference to this string.
*/
basic_string&
@@ -990,7 +996,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a C string.
- * @param s The C string to append.
+ * @param __s The C string to append.
* @return Reference to this string.
*/
basic_string&
@@ -1002,11 +1008,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append multiple characters.
- * @param n The number of characters to append.
- * @param c The character to use.
+ * @param __n The number of characters to append.
+ * @param __c The character to use.
* @return Reference to this string.
*
- * Appends n copies of c to this string.
+ * Appends __n copies of __c to this string.
*/
basic_string&
append(size_type __n, _CharT __c);
@@ -1014,7 +1020,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Append an initializer_list of characters.
- * @param l The initializer_list of characters to append.
+ * @param __l The initializer_list of characters to append.
* @return Reference to this string.
*/
basic_string&
@@ -1024,11 +1030,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a range of characters.
- * @param first Iterator referencing the first character to append.
- * @param last Iterator marking the end of the range.
+ * @param __first Iterator referencing the first character to append.
+ * @param __last Iterator marking the end of the range.
* @return Reference to this string.
*
- * Appends characters in the range [first,last) to this string.
+ * Appends characters in the range [__first,__last) to this string.
*/
template<class _InputIterator>
basic_string&
@@ -1037,7 +1043,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Append a single character.
- * @param c Character to append.
+ * @param __c Character to append.
*/
void
push_back(_CharT __c)
@@ -1051,7 +1057,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to contents of another string.
- * @param str Source string to use.
+ * @param __str Source string to use.
* @return Reference to this string.
*/
basic_string&
@@ -1060,11 +1066,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Set value to contents of another string.
- * @param str Source string to use.
+ * @param __str Source string to use.
* @return Reference to this string.
*
- * This function sets this string to the exact contents of @a str.
- * @a str is a valid, but unspecified string.
+ * This function sets this string to the exact contents of @a __str.
+ * @a __str is a valid, but unspecified string.
*/
basic_string&
assign(basic_string&& __str)
@@ -1076,15 +1082,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to a substring of a string.
- * @param str The string to use.
- * @param pos Index of the first character of str.
- * @param n Number of characters to use.
+ * @param __str The string to use.
+ * @param __pos Index of the first character of str.
+ * @param __n Number of characters to use.
* @return Reference to this string.
* @throw std::out_of_range if @a pos is not a valid index.
*
- * This function sets this string to the substring of @a str consisting
- * of @a n characters at @a pos. If @a n is is larger than the number
- * of available characters in @a str, the remainder of @a str is used.
+ * This function sets this string to the substring of @a __str
+ * consisting of @a __n characters at @a __pos. If @a __n is
+ * is larger than the number of available characters in @a
+ * __str, the remainder of @a __str is used.
*/
basic_string&
assign(const basic_string& __str, size_type __pos, size_type __n)
@@ -1094,24 +1101,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to a C substring.
- * @param s The C string to use.
- * @param n Number of characters to use.
+ * @param __s The C string to use.
+ * @param __n Number of characters to use.
* @return Reference to this string.
*
- * This function sets the value of this string to the first @a n
- * characters of @a s. If @a n is is larger than the number of
- * available characters in @a s, the remainder of @a s is used.
+ * This function sets the value of this string to the first @a __n
+ * characters of @a __s. If @a __n is is larger than the number of
+ * available characters in @a __s, the remainder of @a __s is used.
*/
basic_string&
assign(const _CharT* __s, size_type __n);
/**
* @brief Set value to contents of a C string.
- * @param s The C string to use.
+ * @param __s The C string to use.
* @return Reference to this string.
*
- * This function sets the value of this string to the value of @a s.
- * The data is copied, so there is no dependence on @a s once the
+ * This function sets the value of this string to the value of @a __s.
+ * The data is copied, so there is no dependence on @a __s once the
* function returns.
*/
basic_string&
@@ -1123,12 +1130,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to multiple characters.
- * @param n Length of the resulting string.
- * @param c The character to use.
+ * @param __n Length of the resulting string.
+ * @param __c The character to use.
* @return Reference to this string.
*
- * This function sets the value of this string to @a n copies of
- * character @a c.
+ * This function sets the value of this string to @a __n copies of
+ * character @a __c.
*/
basic_string&
assign(size_type __n, _CharT __c)
@@ -1136,11 +1143,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Set value to a range of characters.
- * @param first Iterator referencing the first character to append.
- * @param last Iterator marking the end of the range.
+ * @param __first Iterator referencing the first character to append.
+ * @param __last Iterator marking the end of the range.
* @return Reference to this string.
*
- * Sets value of string to characters in the range [first,last).
+ * Sets value of string to characters in the range [__first,__last).
*/
template<class _InputIterator>
basic_string&
@@ -1150,7 +1157,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Set value to an initializer_list of characters.
- * @param l The initializer_list of characters to assign.
+ * @param __l The initializer_list of characters to assign.
* @return Reference to this string.
*/
basic_string&
@@ -1160,15 +1167,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert multiple characters.
- * @param p Iterator referencing location in string to insert at.
- * @param n Number of characters to insert
- * @param c The character to insert.
+ * @param __p Iterator referencing location in string to insert at.
+ * @param __n Number of characters to insert
+ * @param __c The character to insert.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Inserts @a n copies of character @a c starting at the position
- * referenced by iterator @a p. If adding characters causes the length
- * to exceed max_size(), length_error is thrown. The value of the
- * string doesn't change if an error is thrown.
+ * Inserts @a __n copies of character @a __c starting at the
+ * position referenced by iterator @a __p. If adding
+ * characters causes the length to exceed max_size(),
+ * length_error is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
void
insert(iterator __p, size_type __n, _CharT __c)
@@ -1176,14 +1184,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert a range of characters.
- * @param p Iterator referencing location in string to insert at.
- * @param beg Start of range.
- * @param end End of range.
+ * @param __p Iterator referencing location in string to insert at.
+ * @param __beg Start of range.
+ * @param __end End of range.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Inserts characters in range [beg,end). If adding characters causes
- * the length to exceed max_size(), length_error is thrown. The value
- * of the string doesn't change if an error is thrown.
+ * Inserts characters in range [__beg,__end). If adding
+ * characters causes the length to exceed max_size(),
+ * length_error is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
template<class _InputIterator>
void
@@ -1193,8 +1202,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Insert an initializer_list of characters.
- * @param p Iterator referencing location in string to insert at.
- * @param l The initializer_list of characters to insert.
+ * @param __p Iterator referencing location in string to insert at.
+ * @param __l The initializer_list of characters to insert.
* @throw std::length_error If new length exceeds @c max_size().
*/
void
@@ -1207,14 +1216,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert value of a string.
- * @param pos1 Iterator referencing location in string to insert at.
- * @param str The string to insert.
+ * @param __pos1 Iterator referencing location in string to insert at.
+ * @param __str The string to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Inserts value of @a str starting at @a pos1. If adding characters
- * causes the length to exceed max_size(), length_error is thrown. The
- * value of the string doesn't change if an error is thrown.
+ * Inserts value of @a __str starting at @a __pos1. If adding
+ * characters causes the length to exceed max_size(),
+ * length_error is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
basic_string&
insert(size_type __pos1, const basic_string& __str)
@@ -1222,21 +1232,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert a substring.
- * @param pos1 Iterator referencing location in string to insert at.
- * @param str The string to insert.
- * @param pos2 Start of characters in str to insert.
- * @param n Number of characters to insert.
+ * @param __pos1 Iterator referencing location in string to insert at.
+ * @param __str The string to insert.
+ * @param __pos2 Start of characters in str to insert.
+ * @param __n Number of characters to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
* @throw std::out_of_range If @a pos1 > size() or
- * @a pos2 > @a str.size().
+ * @a __pos2 > @a str.size().
*
- * Starting at @a pos1, insert @a n character of @a str beginning with
- * @a pos2. If adding characters causes the length to exceed
- * max_size(), length_error is thrown. If @a pos1 is beyond the end of
- * this string or @a pos2 is beyond the end of @a str, out_of_range is
- * thrown. The value of the string doesn't change if an error is
- * thrown.
+ * Starting at @a pos1, insert @a __n character of @a __str
+ * beginning with @a __pos2. If adding characters causes the
+ * length to exceed max_size(), length_error is thrown. If @a
+ * __pos1 is beyond the end of this string or @a __pos2 is
+ * beyond the end of @a __str, out_of_range is thrown. The
+ * value of the string doesn't change if an error is thrown.
*/
basic_string&
insert(size_type __pos1, const basic_string& __str,
@@ -1247,35 +1257,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert a C substring.
- * @param pos Iterator referencing location in string to insert at.
- * @param s The C string to insert.
- * @param n The number of characters to insert.
+ * @param __pos Iterator referencing location in string to insert at.
+ * @param __s The C string to insert.
+ * @param __n The number of characters to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
- * @throw std::out_of_range If @a pos is beyond the end of this
+ * @throw std::out_of_range If @a __pos is beyond the end of this
* string.
*
- * Inserts the first @a n characters of @a s starting at @a pos. If
- * adding characters causes the length to exceed max_size(),
- * length_error is thrown. If @a pos is beyond end(), out_of_range is
- * thrown. The value of the string doesn't change if an error is
- * thrown.
+ * Inserts the first @a __n characters of @a __s starting at @a
+ * __pos. If adding characters causes the length to exceed
+ * max_size(), length_error is thrown. If @a __pos is beyond
+ * end(), out_of_range is thrown. The value of the string
+ * doesn't change if an error is thrown.
*/
basic_string&
insert(size_type __pos, const _CharT* __s, size_type __n);
/**
* @brief Insert a C string.
- * @param pos Iterator referencing location in string to insert at.
- * @param s The C string to insert.
+ * @param __pos Iterator referencing location in string to insert at.
+ * @param __s The C string to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
* @throw std::out_of_range If @a pos is beyond the end of this
* string.
*
- * Inserts the first @a n characters of @a s starting at @a pos. If
+ * Inserts the first @a n characters of @a __s starting at @a __pos. If
* adding characters causes the length to exceed max_size(),
- * length_error is thrown. If @a pos is beyond end(), out_of_range is
+ * length_error is thrown. If @a __pos is beyond end(), out_of_range is
* thrown. The value of the string doesn't change if an error is
* thrown.
*/
@@ -1288,19 +1298,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert multiple characters.
- * @param pos Index in string to insert at.
- * @param n Number of characters to insert
- * @param c The character to insert.
+ * @param __pos Index in string to insert at.
+ * @param __n Number of characters to insert
+ * @param __c The character to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
- * @throw std::out_of_range If @a pos is beyond the end of this
+ * @throw std::out_of_range If @a __pos is beyond the end of this
* string.
*
- * Inserts @a n copies of character @a c starting at index @a pos. If
- * adding characters causes the length to exceed max_size(),
- * length_error is thrown. If @a pos > length(), out_of_range is
- * thrown. The value of the string doesn't change if an error is
- * thrown.
+ * Inserts @a __n copies of character @a __c starting at index
+ * @a __pos. If adding characters causes the length to exceed
+ * max_size(), length_error is thrown. If @a __pos > length(),
+ * out_of_range is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
basic_string&
insert(size_type __pos, size_type __n, _CharT __c)
@@ -1309,15 +1319,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Insert one character.
- * @param p Iterator referencing position in string to insert at.
- * @param c The character to insert.
+ * @param __p Iterator referencing position in string to insert at.
+ * @param __c The character to insert.
* @return Iterator referencing newly inserted char.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Inserts character @a c at position referenced by @a p. If adding
- * character causes the length to exceed max_size(), length_error is
- * thrown. If @a p is beyond end of string, out_of_range is thrown.
- * The value of the string doesn't change if an error is thrown.
+ * Inserts character @a __c at position referenced by @a __p.
+ * If adding character causes the length to exceed max_size(),
+ * length_error is thrown. If @a __p is beyond end of string,
+ * out_of_range is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
iterator
insert(iterator __p, _CharT __c)
@@ -1331,17 +1342,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove characters.
- * @param pos Index of first character to remove (default 0).
- * @param n Number of characters to remove (default remainder).
+ * @param __pos Index of first character to remove (default 0).
+ * @param __n Number of characters to remove (default remainder).
* @return Reference to this string.
* @throw std::out_of_range If @a pos is beyond the end of this
* string.
*
- * Removes @a n characters from this string starting at @a pos. The
- * length of the string is reduced by @a n. If there are < @a n
- * characters to remove, the remainder of the string is truncated. If
- * @a p is beyond end of string, out_of_range is thrown. The value of
- * the string doesn't change if an error is thrown.
+ * Removes @a __n characters from this string starting at @a
+ * __pos. The length of the string is reduced by @a __n. If
+ * there are < @a __n characters to remove, the remainder of
+ * the string is truncated. If @a __p is beyond end of string,
+ * out_of_range is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
basic_string&
erase(size_type __pos = 0, size_type __n = npos)
@@ -1353,10 +1365,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove one character.
- * @param position Iterator referencing the character to remove.
+ * @param __position Iterator referencing the character to remove.
* @return iterator referencing same location after removal.
*
- * Removes the character at @a position from this string. The value
+ * Removes the character at @a __position from this string. The value
* of the string doesn't change if an error is thrown.
*/
iterator
@@ -1372,8 +1384,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove a range of characters.
- * @param first Iterator referencing the first character to remove.
- * @param last Iterator referencing the end of the range.
+ * @param __first Iterator referencing the first character to remove.
+ * @param __last Iterator referencing the end of the range.
* @return Iterator referencing location of first after removal.
*
* Removes the characters in the range [first,last) from this string.
@@ -1382,21 +1394,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
iterator
erase(iterator __first, iterator __last);
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Remove the last character.
+ *
+ * The string must be non-empty.
+ */
+ void
+ pop_back()
+ { erase(size()-1, 1); }
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
/**
* @brief Replace characters with value from another string.
- * @param pos Index of first character to replace.
- * @param n Number of characters to be replaced.
- * @param str String to insert.
+ * @param __pos Index of first character to replace.
+ * @param __n Number of characters to be replaced.
+ * @param __str String to insert.
* @return Reference to this string.
* @throw std::out_of_range If @a pos is beyond the end of this
* string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [pos,pos+n) from this string.
- * In place, the value of @a str is inserted. If @a pos is beyond end
- * of string, out_of_range is thrown. If the length of the result
- * exceeds max_size(), length_error is thrown. The value of the string
- * doesn't change if an error is thrown.
+ * Removes the characters in the range [__pos,__pos+__n) from
+ * this string. In place, the value of @a __str is inserted.
+ * If @a __pos is beyond end of string, out_of_range is thrown.
+ * If the length of the result exceeds max_size(), length_error
+ * is thrown. The value of the string doesn't change if an
+ * error is thrown.
*/
basic_string&
replace(size_type __pos, size_type __n, const basic_string& __str)
@@ -1404,18 +1428,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace characters with value from another string.
- * @param pos1 Index of first character to replace.
- * @param n1 Number of characters to be replaced.
- * @param str String to insert.
- * @param pos2 Index of first character of str to use.
- * @param n2 Number of characters from str to use.
+ * @param __pos1 Index of first character to replace.
+ * @param __n1 Number of characters to be replaced.
+ * @param __str String to insert.
+ * @param __pos2 Index of first character of str to use.
+ * @param __n2 Number of characters from str to use.
* @return Reference to this string.
- * @throw std::out_of_range If @a pos1 > size() or @a pos2 >
- * str.size().
+ * @throw std::out_of_range If @a __pos1 > size() or @a __pos2 >
+ * __str.size().
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [pos1,pos1 + n) from this
- * string. In place, the value of @a str is inserted. If @a pos is
+ * Removes the characters in the range [__pos1,__pos1 + n) from this
+ * string. In place, the value of @a __str is inserted. If @a __pos is
* beyond end of string, out_of_range is thrown. If the length of the
* result exceeds max_size(), length_error is thrown. The value of the
* string doesn't change if an error is thrown.
@@ -1429,20 +1453,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace characters with value of a C substring.
- * @param pos Index of first character to replace.
- * @param n1 Number of characters to be replaced.
- * @param s C string to insert.
- * @param n2 Number of characters from @a s to use.
+ * @param __pos Index of first character to replace.
+ * @param __n1 Number of characters to be replaced.
+ * @param __s C string to insert.
+ * @param __n2 Number of characters from @a s to use.
* @return Reference to this string.
* @throw std::out_of_range If @a pos1 > size().
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [pos,pos + n1) from this string.
- * In place, the first @a n2 characters of @a s are inserted, or all
- * of @a s if @a n2 is too large. If @a pos is beyond end of string,
- * out_of_range is thrown. If the length of result exceeds max_size(),
- * length_error is thrown. The value of the string doesn't change if
- * an error is thrown.
+ * Removes the characters in the range [__pos,__pos + __n1)
+ * from this string. In place, the first @a __n2 characters of
+ * @a __s are inserted, or all of @a __s if @a __n2 is too large. If
+ * @a __pos is beyond end of string, out_of_range is thrown. If
+ * the length of result exceeds max_size(), length_error is
+ * thrown. The value of the string doesn't change if an error
+ * is thrown.
*/
basic_string&
replace(size_type __pos, size_type __n1, const _CharT* __s,
@@ -1450,18 +1475,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace characters with value of a C string.
- * @param pos Index of first character to replace.
- * @param n1 Number of characters to be replaced.
- * @param s C string to insert.
+ * @param __pos Index of first character to replace.
+ * @param __n1 Number of characters to be replaced.
+ * @param __s C string to insert.
* @return Reference to this string.
* @throw std::out_of_range If @a pos > size().
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [pos,pos + n1) from this string.
- * In place, the characters of @a s are inserted. If @a pos is beyond
- * end of string, out_of_range is thrown. If the length of result
- * exceeds max_size(), length_error is thrown. The value of the string
- * doesn't change if an error is thrown.
+ * Removes the characters in the range [__pos,__pos + __n1)
+ * from this string. In place, the characters of @a __s are
+ * inserted. If @a __pos is beyond end of string, out_of_range
+ * is thrown. If the length of result exceeds max_size(),
+ * length_error is thrown. The value of the string doesn't
+ * change if an error is thrown.
*/
basic_string&
replace(size_type __pos, size_type __n1, const _CharT* __s)
@@ -1472,19 +1498,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace characters with multiple characters.
- * @param pos Index of first character to replace.
- * @param n1 Number of characters to be replaced.
- * @param n2 Number of characters to insert.
- * @param c Character to insert.
+ * @param __pos Index of first character to replace.
+ * @param __n1 Number of characters to be replaced.
+ * @param __n2 Number of characters to insert.
+ * @param __c Character to insert.
* @return Reference to this string.
- * @throw std::out_of_range If @a pos > size().
+ * @throw std::out_of_range If @a __pos > size().
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [pos,pos + n1) from this string.
- * In place, @a n2 copies of @a c are inserted. If @a pos is beyond
- * end of string, out_of_range is thrown. If the length of result
- * exceeds max_size(), length_error is thrown. The value of the string
- * doesn't change if an error is thrown.
+ * Removes the characters in the range [pos,pos + n1) from this
+ * string. In place, @a __n2 copies of @a __c are inserted.
+ * If @a __pos is beyond end of string, out_of_range is thrown.
+ * If the length of result exceeds max_size(), length_error is
+ * thrown. The value of the string doesn't change if an error
+ * is thrown.
*/
basic_string&
replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
@@ -1493,16 +1520,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace range of characters with string.
- * @param i1 Iterator referencing start of range to replace.
- * @param i2 Iterator referencing end of range to replace.
- * @param str String value to insert.
+ * @param __i1 Iterator referencing start of range to replace.
+ * @param __i2 Iterator referencing end of range to replace.
+ * @param __str String value to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [i1,i2). In place, the value of
- * @a str is inserted. If the length of result exceeds max_size(),
- * length_error is thrown. The value of the string doesn't change if
- * an error is thrown.
+ * Removes the characters in the range [__i1,__i2). In place,
+ * the value of @a __str is inserted. If the length of result
+ * exceeds max_size(), length_error is thrown. The value of
+ * the string doesn't change if an error is thrown.
*/
basic_string&
replace(iterator __i1, iterator __i2, const basic_string& __str)
@@ -1510,17 +1537,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace range of characters with C substring.
- * @param i1 Iterator referencing start of range to replace.
- * @param i2 Iterator referencing end of range to replace.
- * @param s C string value to insert.
- * @param n Number of characters from s to insert.
+ * @param __i1 Iterator referencing start of range to replace.
+ * @param __i2 Iterator referencing end of range to replace.
+ * @param __s C string value to insert.
+ * @param __n Number of characters from s to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [i1,i2). In place, the first @a
- * n characters of @a s are inserted. If the length of result exceeds
- * max_size(), length_error is thrown. The value of the string doesn't
- * change if an error is thrown.
+ * Removes the characters in the range [__i1,__i2). In place,
+ * the first @a __n characters of @a __s are inserted. If the
+ * length of result exceeds max_size(), length_error is thrown.
+ * The value of the string doesn't change if an error is
+ * thrown.
*/
basic_string&
replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n)
@@ -1532,16 +1560,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace range of characters with C string.
- * @param i1 Iterator referencing start of range to replace.
- * @param i2 Iterator referencing end of range to replace.
- * @param s C string value to insert.
+ * @param __i1 Iterator referencing start of range to replace.
+ * @param __i2 Iterator referencing end of range to replace.
+ * @param __s C string value to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [i1,i2). In place, the
- * characters of @a s are inserted. If the length of result exceeds
- * max_size(), length_error is thrown. The value of the string doesn't
- * change if an error is thrown.
+ * Removes the characters in the range [__i1,__i2). In place,
+ * the characters of @a __s are inserted. If the length of
+ * result exceeds max_size(), length_error is thrown. The
+ * value of the string doesn't change if an error is thrown.
*/
basic_string&
replace(iterator __i1, iterator __i2, const _CharT* __s)
@@ -1552,17 +1580,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace range of characters with multiple characters
- * @param i1 Iterator referencing start of range to replace.
- * @param i2 Iterator referencing end of range to replace.
- * @param n Number of characters to insert.
- * @param c Character to insert.
+ * @param __i1 Iterator referencing start of range to replace.
+ * @param __i2 Iterator referencing end of range to replace.
+ * @param __n Number of characters to insert.
+ * @param __c Character to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [i1,i2). In place, @a n copies
- * of @a c are inserted. If the length of result exceeds max_size(),
- * length_error is thrown. The value of the string doesn't change if
- * an error is thrown.
+ * Removes the characters in the range [__i1,__i2). In place,
+ * @a __n copies of @a __c are inserted. If the length of
+ * result exceeds max_size(), length_error is thrown. The
+ * value of the string doesn't change if an error is thrown.
*/
basic_string&
replace(iterator __i1, iterator __i2, size_type __n, _CharT __c)
@@ -1574,17 +1602,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Replace range of characters with range.
- * @param i1 Iterator referencing start of range to replace.
- * @param i2 Iterator referencing end of range to replace.
- * @param k1 Iterator referencing start of range to insert.
- * @param k2 Iterator referencing end of range to insert.
+ * @param __i1 Iterator referencing start of range to replace.
+ * @param __i2 Iterator referencing end of range to replace.
+ * @param __k1 Iterator referencing start of range to insert.
+ * @param __k2 Iterator referencing end of range to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [i1,i2). In place, characters
- * in the range [k1,k2) are inserted. If the length of result exceeds
- * max_size(), length_error is thrown. The value of the string doesn't
- * change if an error is thrown.
+ * Removes the characters in the range [__i1,__i2). In place,
+ * characters in the range [__k1,__k2) are inserted. If the
+ * length of result exceeds max_size(), length_error is thrown.
+ * The value of the string doesn't change if an error is
+ * thrown.
*/
template<class _InputIterator>
basic_string&
@@ -1645,16 +1674,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Replace range of characters with initializer_list.
- * @param i1 Iterator referencing start of range to replace.
- * @param i2 Iterator referencing end of range to replace.
- * @param l The initializer_list of characters to insert.
+ * @param __i1 Iterator referencing start of range to replace.
+ * @param __i2 Iterator referencing end of range to replace.
+ * @param __l The initializer_list of characters to insert.
* @return Reference to this string.
* @throw std::length_error If new length exceeds @c max_size().
*
- * Removes the characters in the range [i1,i2). In place, characters
- * in the range [k1,k2) are inserted. If the length of result exceeds
- * max_size(), length_error is thrown. The value of the string doesn't
- * change if an error is thrown.
+ * Removes the characters in the range [__i1,__i2). In place,
+ * characters in the range [__k1,__k2) are inserted. If the
+ * length of result exceeds max_size(), length_error is thrown.
+ * The value of the string doesn't change if an error is
+ * thrown.
*/
basic_string& replace(iterator __i1, iterator __i2,
initializer_list<_CharT> __l)
@@ -1733,23 +1763,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy substring into C string.
- * @param s C string to copy value into.
- * @param n Number of characters to copy.
- * @param pos Index of first character to copy.
+ * @param __s C string to copy value into.
+ * @param __n Number of characters to copy.
+ * @param __pos Index of first character to copy.
* @return Number of characters actually copied
- * @throw std::out_of_range If pos > size().
+ * @throw std::out_of_range If __pos > size().
*
- * Copies up to @a n characters starting at @a pos into the C string @a
- * s. If @a pos is %greater than size(), out_of_range is thrown.
+ * Copies up to @a __n characters starting at @a __pos into the
+ * C string @a __s. If @a __pos is %greater than size(),
+ * out_of_range is thrown.
*/
size_type
copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
/**
* @brief Swap contents with another string.
- * @param s String to swap with.
+ * @param __s String to swap with.
*
- * Exchanges the contents of this string with that of @a s in constant
+ * Exchanges the contents of this string with that of @a __s in constant
* time.
*/
void
@@ -1763,7 +1794,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* happen.
*/
const _CharT*
- c_str() const
+ c_str() const _GLIBCXX_NOEXCEPT
{ return _M_data(); }
/**
@@ -1773,53 +1804,55 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* happen.
*/
const _CharT*
- data() const
+ data() const _GLIBCXX_NOEXCEPT
{ return _M_data(); }
/**
* @brief Return copy of allocator used to construct this string.
*/
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return _M_dataplus; }
/**
* @brief Find position of a C substring.
- * @param s C string to locate.
- * @param pos Index of character to search from.
- * @param n Number of characters from @a s to search for.
+ * @param __s C string to locate.
+ * @param __pos Index of character to search from.
+ * @param __n Number of characters from @a s to search for.
* @return Index of start of first occurrence.
*
- * Starting from @a pos, searches forward for the first @a n characters
- * in @a s within this string. If found, returns the index where it
- * begins. If not found, returns npos.
+ * Starting from @a __pos, searches forward for the first @a
+ * __n characters in @a __s within this string. If found,
+ * returns the index where it begins. If not found, returns
+ * npos.
*/
size_type
find(const _CharT* __s, size_type __pos, size_type __n) const;
/**
* @brief Find position of a string.
- * @param str String to locate.
- * @param pos Index of character to search from (default 0).
+ * @param __str String to locate.
+ * @param __pos Index of character to search from (default 0).
* @return Index of start of first occurrence.
*
- * Starting from @a pos, searches forward for value of @a str within
+ * Starting from @a __pos, searches forward for value of @a __str within
* this string. If found, returns the index where it begins. If not
* found, returns npos.
*/
size_type
find(const basic_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return this->find(__str.data(), __pos, __str.size()); }
/**
* @brief Find position of a C string.
- * @param s C string to locate.
- * @param pos Index of character to search from (default 0).
+ * @param __s C string to locate.
+ * @param __pos Index of character to search from (default 0).
* @return Index of start of first occurrence.
*
- * Starting from @a pos, searches forward for the value of @a s within
- * this string. If found, returns the index where it begins. If not
- * found, returns npos.
+ * Starting from @a __pos, searches forward for the value of @a
+ * __s within this string. If found, returns the index where
+ * it begins. If not found, returns npos.
*/
size_type
find(const _CharT* __s, size_type __pos = 0) const
@@ -1830,54 +1863,56 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find position of a character.
- * @param c Character to locate.
- * @param pos Index of character to search from (default 0).
+ * @param __c Character to locate.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for @a c within this string.
- * If found, returns the index where it was found. If not found,
- * returns npos.
+ * Starting from @a __pos, searches forward for @a __c within
+ * this string. If found, returns the index where it was
+ * found. If not found, returns npos.
*/
size_type
- find(_CharT __c, size_type __pos = 0) const;
+ find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT;
/**
* @brief Find last position of a string.
- * @param str String to locate.
- * @param pos Index of character to search back from (default end).
+ * @param __str String to locate.
+ * @param __pos Index of character to search back from (default end).
* @return Index of start of last occurrence.
*
- * Starting from @a pos, searches backward for value of @a str within
- * this string. If found, returns the index where it begins. If not
- * found, returns npos.
+ * Starting from @a __pos, searches backward for value of @a
+ * __str within this string. If found, returns the index where
+ * it begins. If not found, returns npos.
*/
size_type
rfind(const basic_string& __str, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT
{ return this->rfind(__str.data(), __pos, __str.size()); }
/**
* @brief Find last position of a C substring.
- * @param s C string to locate.
- * @param pos Index of character to search back from.
- * @param n Number of characters from s to search for.
+ * @param __s C string to locate.
+ * @param __pos Index of character to search back from.
+ * @param __n Number of characters from s to search for.
* @return Index of start of last occurrence.
*
- * Starting from @a pos, searches backward for the first @a n
- * characters in @a s within this string. If found, returns the index
- * where it begins. If not found, returns npos.
+ * Starting from @a __pos, searches backward for the first @a
+ * __n characters in @a __s within this string. If found,
+ * returns the index where it begins. If not found, returns
+ * npos.
*/
size_type
rfind(const _CharT* __s, size_type __pos, size_type __n) const;
/**
* @brief Find last position of a C string.
- * @param s C string to locate.
- * @param pos Index of character to start search at (default end).
+ * @param __s C string to locate.
+ * @param __pos Index of character to start search at (default end).
* @return Index of start of last occurrence.
*
- * Starting from @a pos, searches backward for the value of @a s within
- * this string. If found, returns the index where it begins. If not
- * found, returns npos.
+ * Starting from @a __pos, searches backward for the value of
+ * @a __s within this string. If found, returns the index
+ * where it begins. If not found, returns npos.
*/
size_type
rfind(const _CharT* __s, size_type __pos = npos) const
@@ -1888,54 +1923,57 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find last position of a character.
- * @param c Character to locate.
- * @param pos Index of character to search back from (default end).
+ * @param __c Character to locate.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for @a c within this string.
- * If found, returns the index where it was found. If not found,
- * returns npos.
+ * Starting from @a __pos, searches backward for @a __c within
+ * this string. If found, returns the index where it was
+ * found. If not found, returns npos.
*/
size_type
- rfind(_CharT __c, size_type __pos = npos) const;
+ rfind(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT;
/**
* @brief Find position of a character of string.
- * @param str String containing characters to locate.
- * @param pos Index of character to search from (default 0).
+ * @param __str String containing characters to locate.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for one of the characters of
- * @a str within this string. If found, returns the index where it was
- * found. If not found, returns npos.
+ * Starting from @a __pos, searches forward for one of the
+ * characters of @a __str within this string. If found,
+ * returns the index where it was found. If not found, returns
+ * npos.
*/
size_type
find_first_of(const basic_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_first_of(__str.data(), __pos, __str.size()); }
/**
* @brief Find position of a character of C substring.
- * @param s String containing characters to locate.
- * @param pos Index of character to search from.
- * @param n Number of characters from s to search for.
+ * @param __s String containing characters to locate.
+ * @param __pos Index of character to search from.
+ * @param __n Number of characters from s to search for.
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for one of the first @a n
- * characters of @a s within this string. If found, returns the index
- * where it was found. If not found, returns npos.
+ * Starting from @a __pos, searches forward for one of the
+ * first @a __n characters of @a __s within this string. If
+ * found, returns the index where it was found. If not found,
+ * returns npos.
*/
size_type
find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;
/**
* @brief Find position of a character of C string.
- * @param s String containing characters to locate.
- * @param pos Index of character to search from (default 0).
+ * @param __s String containing characters to locate.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for one of the characters of
- * @a s within this string. If found, returns the index where it was
- * found. If not found, returns npos.
+ * Starting from @a __pos, searches forward for one of the
+ * characters of @a __s within this string. If found, returns
+ * the index where it was found. If not found, returns npos.
*/
size_type
find_first_of(const _CharT* __s, size_type __pos = 0) const
@@ -1946,57 +1984,60 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find position of a character.
- * @param c Character to locate.
- * @param pos Index of character to search from (default 0).
+ * @param __c Character to locate.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for the character @a c within
- * this string. If found, returns the index where it was found. If
- * not found, returns npos.
+ * Starting from @a __pos, searches forward for the character
+ * @a __c within this string. If found, returns the index
+ * where it was found. If not found, returns npos.
*
- * Note: equivalent to find(c, pos).
+ * Note: equivalent to find(__c, __pos).
*/
size_type
- find_first_of(_CharT __c, size_type __pos = 0) const
+ find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
{ return this->find(__c, __pos); }
/**
* @brief Find last position of a character of string.
- * @param str String containing characters to locate.
- * @param pos Index of character to search back from (default end).
+ * @param __str String containing characters to locate.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for one of the characters of
- * @a str within this string. If found, returns the index where it was
- * found. If not found, returns npos.
+ * Starting from @a __pos, searches backward for one of the
+ * characters of @a __str within this string. If found,
+ * returns the index where it was found. If not found, returns
+ * npos.
*/
size_type
find_last_of(const basic_string& __str, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_last_of(__str.data(), __pos, __str.size()); }
/**
* @brief Find last position of a character of C substring.
- * @param s C string containing characters to locate.
- * @param pos Index of character to search back from.
- * @param n Number of characters from s to search for.
+ * @param __s C string containing characters to locate.
+ * @param __pos Index of character to search back from.
+ * @param __n Number of characters from s to search for.
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for one of the first @a n
- * characters of @a s within this string. If found, returns the index
- * where it was found. If not found, returns npos.
+ * Starting from @a __pos, searches backward for one of the
+ * first @a __n characters of @a __s within this string. If
+ * found, returns the index where it was found. If not found,
+ * returns npos.
*/
size_type
find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;
/**
* @brief Find last position of a character of C string.
- * @param s C string containing characters to locate.
- * @param pos Index of character to search back from (default end).
+ * @param __s C string containing characters to locate.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for one of the characters of
- * @a s within this string. If found, returns the index where it was
- * found. If not found, returns npos.
+ * Starting from @a __pos, searches backward for one of the
+ * characters of @a __s within this string. If found, returns
+ * the index where it was found. If not found, returns npos.
*/
size_type
find_last_of(const _CharT* __s, size_type __pos = npos) const
@@ -2007,44 +2048,46 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find last position of a character.
- * @param c Character to locate.
- * @param pos Index of character to search back from (default end).
+ * @param __c Character to locate.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for @a c within this string.
- * If found, returns the index where it was found. If not found,
- * returns npos.
+ * Starting from @a __pos, searches backward for @a __c within
+ * this string. If found, returns the index where it was
+ * found. If not found, returns npos.
*
- * Note: equivalent to rfind(c, pos).
+ * Note: equivalent to rfind(__c, __pos).
*/
size_type
- find_last_of(_CharT __c, size_type __pos = npos) const
+ find_last_of(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT
{ return this->rfind(__c, __pos); }
/**
* @brief Find position of a character not in string.
- * @param str String containing characters to avoid.
- * @param pos Index of character to search from (default 0).
+ * @param __str String containing characters to avoid.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for a character not contained
- * in @a str within this string. If found, returns the index where it
+ * Starting from @a __pos, searches forward for a character not contained
+ * in @a __str within this string. If found, returns the index where it
* was found. If not found, returns npos.
*/
size_type
find_first_not_of(const basic_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_first_not_of(__str.data(), __pos, __str.size()); }
/**
* @brief Find position of a character not in C substring.
- * @param s C string containing characters to avoid.
- * @param pos Index of character to search from.
- * @param n Number of characters from s to consider.
+ * @param __s C string containing characters to avoid.
+ * @param __pos Index of character to search from.
+ * @param __n Number of characters from __s to consider.
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for a character not contained
- * in the first @a n characters of @a s within this string. If found,
- * returns the index where it was found. If not found, returns npos.
+ * Starting from @a __pos, searches forward for a character not
+ * contained in the first @a __n characters of @a __s within
+ * this string. If found, returns the index where it was
+ * found. If not found, returns npos.
*/
size_type
find_first_not_of(const _CharT* __s, size_type __pos,
@@ -2052,13 +2095,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find position of a character not in C string.
- * @param s C string containing characters to avoid.
- * @param pos Index of character to search from (default 0).
+ * @param __s C string containing characters to avoid.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for a character not contained
- * in @a s within this string. If found, returns the index where it
- * was found. If not found, returns npos.
+ * Starting from @a __pos, searches forward for a character not
+ * contained in @a __s within this string. If found, returns
+ * the index where it was found. If not found, returns npos.
*/
size_type
find_first_not_of(const _CharT* __s, size_type __pos = 0) const
@@ -2069,40 +2112,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find position of a different character.
- * @param c Character to avoid.
- * @param pos Index of character to search from (default 0).
+ * @param __c Character to avoid.
+ * @param __pos Index of character to search from (default 0).
* @return Index of first occurrence.
*
- * Starting from @a pos, searches forward for a character other than @a c
- * within this string. If found, returns the index where it was found.
- * If not found, returns npos.
+ * Starting from @a __pos, searches forward for a character
+ * other than @a __c within this string. If found, returns the
+ * index where it was found. If not found, returns npos.
*/
size_type
- find_first_not_of(_CharT __c, size_type __pos = 0) const;
+ find_first_not_of(_CharT __c, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT;
/**
* @brief Find last position of a character not in string.
- * @param str String containing characters to avoid.
- * @param pos Index of character to search back from (default end).
+ * @param __str String containing characters to avoid.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for a character not
- * contained in @a str within this string. If found, returns the index
- * where it was found. If not found, returns npos.
+ * Starting from @a __pos, searches backward for a character
+ * not contained in @a __str within this string. If found,
+ * returns the index where it was found. If not found, returns
+ * npos.
*/
size_type
find_last_not_of(const basic_string& __str, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_last_not_of(__str.data(), __pos, __str.size()); }
/**
* @brief Find last position of a character not in C substring.
- * @param s C string containing characters to avoid.
- * @param pos Index of character to search back from.
- * @param n Number of characters from s to consider.
+ * @param __s C string containing characters to avoid.
+ * @param __pos Index of character to search back from.
+ * @param __n Number of characters from s to consider.
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for a character not
- * contained in the first @a n characters of @a s within this string.
+ * Starting from @a __pos, searches backward for a character not
+ * contained in the first @a __n characters of @a __s within this string.
* If found, returns the index where it was found. If not found,
* returns npos.
*/
@@ -2111,13 +2157,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_type __n) const;
/**
* @brief Find last position of a character not in C string.
- * @param s C string containing characters to avoid.
- * @param pos Index of character to search back from (default end).
+ * @param __s C string containing characters to avoid.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for a character not
- * contained in @a s within this string. If found, returns the index
- * where it was found. If not found, returns npos.
+ * Starting from @a __pos, searches backward for a character
+ * not contained in @a __s within this string. If found,
+ * returns the index where it was found. If not found, returns
+ * npos.
*/
size_type
find_last_not_of(const _CharT* __s, size_type __pos = npos) const
@@ -2128,28 +2175,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find last position of a different character.
- * @param c Character to avoid.
- * @param pos Index of character to search back from (default end).
+ * @param __c Character to avoid.
+ * @param __pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
- * Starting from @a pos, searches backward for a character other than
- * @a c within this string. If found, returns the index where it was
+ * Starting from @a __pos, searches backward for a character other than
+ * @a __c within this string. If found, returns the index where it was
* found. If not found, returns npos.
*/
size_type
- find_last_not_of(_CharT __c, size_type __pos = npos) const;
+ find_last_not_of(_CharT __c, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT;
/**
* @brief Get a substring.
- * @param pos Index of first character (default 0).
- * @param n Number of characters in substring (default remainder).
+ * @param __pos Index of first character (default 0).
+ * @param __n Number of characters in substring (default remainder).
* @return The new string.
- * @throw std::out_of_range If pos > size().
+ * @throw std::out_of_range If __pos > size().
*
- * Construct and return a new string using the @a n characters starting
- * at @a pos. If the string is too short, use the remainder of the
- * characters. If @a pos is beyond the end of the string, out_of_range
- * is thrown.
+ * Construct and return a new string using the @a __n
+ * characters starting at @a __pos. If the string is too
+ * short, use the remainder of the characters. If @a __pos is
+ * beyond the end of the string, out_of_range is thrown.
*/
basic_string
substr(size_type __pos = 0, size_type __n = npos) const
@@ -2158,16 +2206,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compare to a string.
- * @param str String to compare against.
+ * @param __str String to compare against.
* @return Integer < 0, 0, or > 0.
*
- * Returns an integer < 0 if this string is ordered before @a str, 0 if
- * their values are equivalent, or > 0 if this string is ordered after
- * @a str. Determines the effective length rlen of the strings to
- * compare as the smallest of size() and str.size(). The function
- * then compares the two strings by calling traits::compare(data(),
- * str.data(),rlen). If the result of the comparison is nonzero returns
- * it, otherwise the shorter one is ordered first.
+ * Returns an integer < 0 if this string is ordered before @a
+ * __str, 0 if their values are equivalent, or > 0 if this
+ * string is ordered after @a __str. Determines the effective
+ * length rlen of the strings to compare as the smallest of
+ * size() and str.size(). The function then compares the two
+ * strings by calling traits::compare(data(), str.data(),rlen).
+ * If the result of the comparison is nonzero returns it,
+ * otherwise the shorter one is ordered first.
*/
int
compare(const basic_string& __str) const
@@ -2184,44 +2233,48 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compare substring to a string.
- * @param pos Index of first character of substring.
- * @param n Number of characters in substring.
- * @param str String to compare against.
+ * @param __pos Index of first character of substring.
+ * @param __n Number of characters in substring.
+ * @param __str String to compare against.
* @return Integer < 0, 0, or > 0.
*
- * Form the substring of this string from the @a n characters starting
- * at @a pos. Returns an integer < 0 if the substring is ordered
- * before @a str, 0 if their values are equivalent, or > 0 if the
- * substring is ordered after @a str. Determines the effective length
- * rlen of the strings to compare as the smallest of the length of the
- * substring and @a str.size(). The function then compares the two
- * strings by calling traits::compare(substring.data(),str.data(),rlen).
- * If the result of the comparison is nonzero returns it, otherwise the
- * shorter one is ordered first.
+ * Form the substring of this string from the @a __n characters
+ * starting at @a __pos. Returns an integer < 0 if the
+ * substring is ordered before @a __str, 0 if their values are
+ * equivalent, or > 0 if the substring is ordered after @a
+ * __str. Determines the effective length rlen of the strings
+ * to compare as the smallest of the length of the substring
+ * and @a __str.size(). The function then compares the two
+ * strings by calling
+ * traits::compare(substring.data(),str.data(),rlen). If the
+ * result of the comparison is nonzero returns it, otherwise
+ * the shorter one is ordered first.
*/
int
compare(size_type __pos, size_type __n, const basic_string& __str) const;
/**
* @brief Compare substring to a substring.
- * @param pos1 Index of first character of substring.
- * @param n1 Number of characters in substring.
- * @param str String to compare against.
- * @param pos2 Index of first character of substring of str.
- * @param n2 Number of characters in substring of str.
+ * @param __pos1 Index of first character of substring.
+ * @param __n1 Number of characters in substring.
+ * @param __str String to compare against.
+ * @param __pos2 Index of first character of substring of str.
+ * @param __n2 Number of characters in substring of str.
* @return Integer < 0, 0, or > 0.
*
- * Form the substring of this string from the @a n1 characters starting
- * at @a pos1. Form the substring of @a str from the @a n2 characters
- * starting at @a pos2. Returns an integer < 0 if this substring is
- * ordered before the substring of @a str, 0 if their values are
- * equivalent, or > 0 if this substring is ordered after the substring
- * of @a str. Determines the effective length rlen of the strings
- * to compare as the smallest of the lengths of the substrings. The
- * function then compares the two strings by calling
+ * Form the substring of this string from the @a __n1
+ * characters starting at @a __pos1. Form the substring of @a
+ * __str from the @a __n2 characters starting at @a __pos2.
+ * Returns an integer < 0 if this substring is ordered before
+ * the substring of @a __str, 0 if their values are equivalent,
+ * or > 0 if this substring is ordered after the substring of
+ * @a __str. Determines the effective length rlen of the
+ * strings to compare as the smallest of the lengths of the
+ * substrings. The function then compares the two strings by
+ * calling
* traits::compare(substring.data(),str.substr(pos2,n2).data(),rlen).
- * If the result of the comparison is nonzero returns it, otherwise the
- * shorter one is ordered first.
+ * If the result of the comparison is nonzero returns it,
+ * otherwise the shorter one is ordered first.
*/
int
compare(size_type __pos1, size_type __n1, const basic_string& __str,
@@ -2229,14 +2282,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compare to a C string.
- * @param s C string to compare against.
+ * @param __s C string to compare against.
* @return Integer < 0, 0, or > 0.
*
- * Returns an integer < 0 if this string is ordered before @a s, 0 if
+ * Returns an integer < 0 if this string is ordered before @a __s, 0 if
* their values are equivalent, or > 0 if this string is ordered after
- * @a s. Determines the effective length rlen of the strings to
+ * @a __s. Determines the effective length rlen of the strings to
* compare as the smallest of size() and the length of a string
- * constructed from @a s. The function then compares the two strings
+ * constructed from @a __s. The function then compares the two strings
* by calling traits::compare(data(),s,rlen). If the result of the
* comparison is nonzero returns it, otherwise the shorter one is
* ordered first.
@@ -2248,42 +2301,45 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 5 String::compare specification questionable
/**
* @brief Compare substring to a C string.
- * @param pos Index of first character of substring.
- * @param n1 Number of characters in substring.
- * @param s C string to compare against.
+ * @param __pos Index of first character of substring.
+ * @param __n1 Number of characters in substring.
+ * @param __s C string to compare against.
* @return Integer < 0, 0, or > 0.
*
- * Form the substring of this string from the @a n1 characters starting
- * at @a pos. Returns an integer < 0 if the substring is ordered
- * before @a s, 0 if their values are equivalent, or > 0 if the
- * substring is ordered after @a s. Determines the effective length
- * rlen of the strings to compare as the smallest of the length of the
- * substring and the length of a string constructed from @a s. The
+ * Form the substring of this string from the @a __n1
+ * characters starting at @a pos. Returns an integer < 0 if
+ * the substring is ordered before @a __s, 0 if their values
+ * are equivalent, or > 0 if the substring is ordered after @a
+ * __s. Determines the effective length rlen of the strings to
+ * compare as the smallest of the length of the substring and
+ * the length of a string constructed from @a __s. The
* function then compares the two string by calling
- * traits::compare(substring.data(),s,rlen). If the result of the
- * comparison is nonzero returns it, otherwise the shorter one is
- * ordered first.
+ * traits::compare(substring.data(),__s,rlen). If the result of
+ * the comparison is nonzero returns it, otherwise the shorter
+ * one is ordered first.
*/
int
compare(size_type __pos, size_type __n1, const _CharT* __s) const;
/**
* @brief Compare substring against a character %array.
- * @param pos1 Index of first character of substring.
- * @param n1 Number of characters in substring.
- * @param s character %array to compare against.
- * @param n2 Number of characters of s.
+ * @param __pos Index of first character of substring.
+ * @param __n1 Number of characters in substring.
+ * @param __s character %array to compare against.
+ * @param __n2 Number of characters of s.
* @return Integer < 0, 0, or > 0.
*
- * Form the substring of this string from the @a n1 characters starting
- * at @a pos1. Form a string from the first @a n2 characters of @a s.
- * Returns an integer < 0 if this substring is ordered before the string
- * from @a s, 0 if their values are equivalent, or > 0 if this substring
- * is ordered after the string from @a s. Determines the effective
- * length rlen of the strings to compare as the smallest of the length
- * of the substring and @a n2. The function then compares the two
- * strings by calling traits::compare(substring.data(),s,rlen). If the
- * result of the comparison is nonzero returns it, otherwise the shorter
+ * Form the substring of this string from the @a __n1
+ * characters starting at @a __pos. Form a string from the
+ * first @a __n2 characters of @a __s. Returns an integer < 0
+ * if this substring is ordered before the string from @a __s,
+ * 0 if their values are equivalent, or > 0 if this substring
+ * is ordered after the string from @a __s. Determines the
+ * effective length rlen of the strings to compare as the
+ * smallest of the length of the substring and @a __n2. The
+ * function then compares the two strings by calling
+ * traits::compare(substring.data(),s,rlen). If the result of
+ * the comparison is nonzero returns it, otherwise the shorter
* one is ordered first.
*
* NB: s must have at least n2 characters, &apos;\\0&apos; has
@@ -2297,9 +2353,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator+
/**
* @brief Concatenate two strings.
- * @param lhs First string.
- * @param rhs Last string.
- * @return New string with value of @a lhs followed by @a rhs.
+ * @param __lhs First string.
+ * @param __rhs Last string.
+ * @return New string with value of @a __lhs followed by @a __rhs.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>
@@ -2313,9 +2369,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Concatenate C string and string.
- * @param lhs First string.
- * @param rhs Last string.
- * @return New string with value of @a lhs followed by @a rhs.
+ * @param __lhs First string.
+ * @param __rhs Last string.
+ * @return New string with value of @a __lhs followed by @a __rhs.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT,_Traits,_Alloc>
@@ -2324,9 +2380,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Concatenate character and string.
- * @param lhs First string.
- * @param rhs Last string.
- * @return New string with @a lhs followed by @a rhs.
+ * @param __lhs First string.
+ * @param __rhs Last string.
+ * @return New string with @a __lhs followed by @a __rhs.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT,_Traits,_Alloc>
@@ -2334,9 +2390,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Concatenate string and C string.
- * @param lhs First string.
- * @param rhs Last string.
- * @return New string with @a lhs followed by @a rhs.
+ * @param __lhs First string.
+ * @param __rhs Last string.
+ * @return New string with @a __lhs followed by @a __rhs.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
@@ -2350,9 +2406,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Concatenate string and character.
- * @param lhs First string.
- * @param rhs Last string.
- * @return New string with @a lhs followed by @a rhs.
+ * @param __lhs First string.
+ * @param __rhs Last string.
+ * @return New string with @a __lhs followed by @a __rhs.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
@@ -2418,9 +2474,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator ==
/**
* @brief Test equivalence of two strings.
- * @param lhs First string.
- * @param rhs Second string.
- * @return True if @a lhs.compare(@a rhs) == 0. False otherwise.
+ * @param __lhs First string.
+ * @param __rhs Second string.
+ * @return True if @a __lhs.compare(@a __rhs) == 0. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2439,9 +2495,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test equivalence of C string and string.
- * @param lhs C string.
- * @param rhs String.
- * @return True if @a rhs.compare(@a lhs) == 0. False otherwise.
+ * @param __lhs C string.
+ * @param __rhs String.
+ * @return True if @a __rhs.compare(@a __lhs) == 0. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2451,9 +2507,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test equivalence of string and C string.
- * @param lhs String.
- * @param rhs C string.
- * @return True if @a lhs.compare(@a rhs) == 0. False otherwise.
+ * @param __lhs String.
+ * @param __rhs C string.
+ * @return True if @a __lhs.compare(@a __rhs) == 0. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2464,9 +2520,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator !=
/**
* @brief Test difference of two strings.
- * @param lhs First string.
- * @param rhs Second string.
- * @return True if @a lhs.compare(@a rhs) != 0. False otherwise.
+ * @param __lhs First string.
+ * @param __rhs Second string.
+ * @return True if @a __lhs.compare(@a __rhs) != 0. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2476,9 +2532,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test difference of C string and string.
- * @param lhs C string.
- * @param rhs String.
- * @return True if @a rhs.compare(@a lhs) != 0. False otherwise.
+ * @param __lhs C string.
+ * @param __rhs String.
+ * @return True if @a __rhs.compare(@a __lhs) != 0. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2488,9 +2544,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test difference of string and C string.
- * @param lhs String.
- * @param rhs C string.
- * @return True if @a lhs.compare(@a rhs) != 0. False otherwise.
+ * @param __lhs String.
+ * @param __rhs C string.
+ * @return True if @a __lhs.compare(@a __rhs) != 0. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2501,9 +2557,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator <
/**
* @brief Test if string precedes string.
- * @param lhs First string.
- * @param rhs Second string.
- * @return True if @a lhs precedes @a rhs. False otherwise.
+ * @param __lhs First string.
+ * @param __rhs Second string.
+ * @return True if @a __lhs precedes @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2513,9 +2569,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if string precedes C string.
- * @param lhs String.
- * @param rhs C string.
- * @return True if @a lhs precedes @a rhs. False otherwise.
+ * @param __lhs String.
+ * @param __rhs C string.
+ * @return True if @a __lhs precedes @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2525,9 +2581,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if C string precedes string.
- * @param lhs C string.
- * @param rhs String.
- * @return True if @a lhs precedes @a rhs. False otherwise.
+ * @param __lhs C string.
+ * @param __rhs String.
+ * @return True if @a __lhs precedes @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2538,9 +2594,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator >
/**
* @brief Test if string follows string.
- * @param lhs First string.
- * @param rhs Second string.
- * @return True if @a lhs follows @a rhs. False otherwise.
+ * @param __lhs First string.
+ * @param __rhs Second string.
+ * @return True if @a __lhs follows @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2550,9 +2606,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if string follows C string.
- * @param lhs String.
- * @param rhs C string.
- * @return True if @a lhs follows @a rhs. False otherwise.
+ * @param __lhs String.
+ * @param __rhs C string.
+ * @return True if @a __lhs follows @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2562,9 +2618,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if C string follows string.
- * @param lhs C string.
- * @param rhs String.
- * @return True if @a lhs follows @a rhs. False otherwise.
+ * @param __lhs C string.
+ * @param __rhs String.
+ * @return True if @a __lhs follows @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2575,9 +2631,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator <=
/**
* @brief Test if string doesn't follow string.
- * @param lhs First string.
- * @param rhs Second string.
- * @return True if @a lhs doesn't follow @a rhs. False otherwise.
+ * @param __lhs First string.
+ * @param __rhs Second string.
+ * @return True if @a __lhs doesn't follow @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2587,9 +2643,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if string doesn't follow C string.
- * @param lhs String.
- * @param rhs C string.
- * @return True if @a lhs doesn't follow @a rhs. False otherwise.
+ * @param __lhs String.
+ * @param __rhs C string.
+ * @return True if @a __lhs doesn't follow @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2599,9 +2655,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if C string doesn't follow string.
- * @param lhs C string.
- * @param rhs String.
- * @return True if @a lhs doesn't follow @a rhs. False otherwise.
+ * @param __lhs C string.
+ * @param __rhs String.
+ * @return True if @a __lhs doesn't follow @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2612,9 +2668,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// operator >=
/**
* @brief Test if string doesn't precede string.
- * @param lhs First string.
- * @param rhs Second string.
- * @return True if @a lhs doesn't precede @a rhs. False otherwise.
+ * @param __lhs First string.
+ * @param __rhs Second string.
+ * @return True if @a __lhs doesn't precede @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2624,9 +2680,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if string doesn't precede C string.
- * @param lhs String.
- * @param rhs C string.
- * @return True if @a lhs doesn't precede @a rhs. False otherwise.
+ * @param __lhs String.
+ * @param __rhs C string.
+ * @return True if @a __lhs doesn't precede @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2636,9 +2692,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test if C string doesn't precede string.
- * @param lhs C string.
- * @param rhs String.
- * @return True if @a lhs doesn't precede @a rhs. False otherwise.
+ * @param __lhs C string.
+ * @param __rhs String.
+ * @return True if @a __lhs doesn't precede @a __rhs. False otherwise.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
@@ -2648,10 +2704,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Swap contents of two strings.
- * @param lhs First string.
- * @param rhs Second string.
+ * @param __lhs First string.
+ * @param __rhs Second string.
*
- * Exchanges the contents of @a lhs and @a rhs in constant time.
+ * Exchanges the contents of @a __lhs and @a __rhs in constant time.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline void
@@ -2661,14 +2717,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Read stream into a string.
- * @param is Input stream.
- * @param str Buffer to store into.
+ * @param __is Input stream.
+ * @param __str Buffer to store into.
* @return Reference to the input stream.
*
- * Stores characters from @a is into @a str until whitespace is found, the
- * end of the stream is encountered, or str.max_size() is reached. If
- * is.width() is non-zero, that is the limit on the number of characters
- * stored into @a str. Any previous contents of @a str are erased.
+ * Stores characters from @a __is into @a __str until whitespace is
+ * found, the end of the stream is encountered, or str.max_size()
+ * is reached. If is.width() is non-zero, that is the limit on the
+ * number of characters stored into @a __str. Any previous
+ * contents of @a __str are erased.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
@@ -2681,11 +2738,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Write string to a stream.
- * @param os Output stream.
- * @param str String to write out.
+ * @param __os Output stream.
+ * @param __str String to write out.
* @return Reference to the output stream.
*
- * Output characters of @a str into os following the same rules as for
+ * Output characters of @a __str into os following the same rules as for
* writing a C string.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
@@ -2700,16 +2757,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Read a line from stream into a string.
- * @param is Input stream.
- * @param str Buffer to store into.
- * @param delim Character marking end of line.
+ * @param __is Input stream.
+ * @param __str Buffer to store into.
+ * @param __delim Character marking end of line.
* @return Reference to the input stream.
*
- * Stores characters from @a is into @a str until @a delim is found, the
- * end of the stream is encountered, or str.max_size() is reached. If
- * is.width() is non-zero, that is the limit on the number of characters
- * stored into @a str. Any previous contents of @a str are erased. If @a
- * delim was encountered, it is extracted but not stored into @a str.
+ * Stores characters from @a __is into @a __str until @a __delim is
+ * found, the end of the stream is encountered, or str.max_size()
+ * is reached. If is.width() is non-zero, that is the limit on the
+ * number of characters stored into @a __str. Any previous
+ * contents of @a __str are erased. If @a __delim was encountered,
+ * it is extracted but not stored into @a __str.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
@@ -2718,16 +2776,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Read a line from stream into a string.
- * @param is Input stream.
- * @param str Buffer to store into.
+ * @param __is Input stream.
+ * @param __str Buffer to store into.
* @return Reference to the input stream.
*
- * Stores characters from is into @a str until &apos;\n&apos; is
+ * Stores characters from is into @a __str until &apos;\n&apos; is
* found, the end of the stream is encountered, or str.max_size()
- * is reached. If is.width() is non-zero, that is the limit on the
- * number of characters stored into @a str. Any previous contents
- * of @a str are erased. If end of line was encountered, it is
- * extracted but not stored into @a str.
+ * is reached. If __is.width() is non-zero, that is the limit on
+ * the number of characters stored into @a __str. Any previous
+ * contents of @a __str are erased. If end of line was
+ * encountered, it is extracted but not stored into @a __str.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
@@ -2986,7 +3044,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, string>
{
size_t
- operator()(const string& __s) const
+ operator()(const string& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(), __s.length()); }
};
@@ -2997,7 +3055,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, wstring>
{
size_t
- operator()(const wstring& __s) const
+ operator()(const wstring& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(wchar_t)); }
};
@@ -3011,7 +3069,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, u16string>
{
size_t
- operator()(const u16string& __s) const
+ operator()(const u16string& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(char16_t)); }
};
@@ -3022,7 +3080,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, u32string>
{
size_t
- operator()(const u32string& __s) const
+ operator()(const u32string& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(char32_t)); }
};
diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
index d988334274..7eff81819f 100644
--- a/libstdc++-v3/include/bits/basic_string.tcc
+++ b/libstdc++-v3/include/bits/basic_string.tcc
@@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
input_iterator_tag)
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (__beg == __end && __a == _Alloc())
return _S_empty_rep()._M_refdata();
#endif
@@ -126,7 +126,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
forward_iterator_tag)
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (__beg == __end && __a == _Alloc())
return _S_empty_rep()._M_refdata();
#endif
@@ -154,7 +154,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
basic_string<_CharT, _Traits, _Alloc>::
_S_construct(size_type __n, _CharT __c, const _Alloc& __a)
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (__n == 0 && __a == _Alloc())
return _S_empty_rep()._M_refdata();
#endif
@@ -456,7 +456,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
basic_string<_CharT, _Traits, _Alloc>::
_M_leak_hard()
{
-#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
if (_M_rep() == &_S_empty_rep())
return;
#endif
@@ -759,7 +759,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
- find(_CharT __c, size_type __pos) const
+ find(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
size_type __ret = npos;
const size_type __size = this->size();
@@ -798,7 +798,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
- rfind(_CharT __c, size_type __pos) const
+ rfind(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
size_type __size = this->size();
if (__size)
@@ -863,7 +863,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
- find_first_not_of(_CharT __c, size_type __pos) const
+ find_first_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
for (; __pos < this->size(); ++__pos)
if (!traits_type::eq(_M_data()[__pos], __c))
@@ -895,7 +895,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
- find_last_not_of(_CharT __c, size_type __pos) const
+ find_last_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
size_type __size = this->size();
if (__size)
diff --git a/libstdc++-v3/include/bits/c++0x_warning.h b/libstdc++-v3/include/bits/c++0x_warning.h
index 0685a50e6e..eb072d00a4 100644
--- a/libstdc++-v3/include/bits/c++0x_warning.h
+++ b/libstdc++-v3/include/bits/c++0x_warning.h
@@ -29,9 +29,9 @@
#define _CXX0X_WARNING_H 1
#ifndef __GXX_EXPERIMENTAL_CXX0X__
-#error This file requires compiler and library support for the upcoming \
-ISO C++ standard, C++0x. This support is currently experimental, and must be \
-enabled with the -std=c++0x or -std=gnu++0x compiler options.
+#error This file requires compiler and library support for the \
+ISO C++ 2011 standard. This support is currently experimental, and must be \
+enabled with the -std=c++11 or -std=gnu++11 compiler options.
#endif
#endif
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index fce52475fa..e76e742302 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -52,10 +52,9 @@
# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
#endif
+// See below for C++
#ifndef _GLIBCXX_NOTHROW
-# ifdef __cplusplus
-# define _GLIBCXX_NOTHROW throw()
-# else
+# ifndef __cplusplus
# define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
# endif
#endif
@@ -99,6 +98,23 @@
# endif
#endif
+// Macro for noexcept, to support in mixed 03/0x mode.
+#ifndef _GLIBCXX_NOEXCEPT
+# ifdef __GXX_EXPERIMENTAL_CXX0X__
+# define _GLIBCXX_NOEXCEPT noexcept
+# define _GLIBCXX_USE_NOEXCEPT noexcept
+# define _GLIBCXX_THROW(_EXC)
+# else
+# define _GLIBCXX_NOEXCEPT
+# define _GLIBCXX_USE_NOEXCEPT throw()
+# define _GLIBCXX_THROW(_EXC) throw(_EXC)
+# endif
+#endif
+
+#ifndef _GLIBCXX_NOTHROW
+# define _GLIBCXX_NOTHROW _GLIBCXX_USE_NOEXCEPT
+#endif
+
// Macro for extern template, ie controling template linkage via use
// of extern keyword on template declaration. As documented in the g++
// manual, it inhibits all implicit instantiations and is used
@@ -132,6 +148,8 @@
namespace __detail { }
}
+ namespace tr2 { }
+
namespace decimal { }
namespace chrono { }
@@ -181,6 +199,9 @@ namespace std
namespace __detail { inline namespace __7 { } }
}
+ namespace tr2
+ { inline namespace __7 { } }
+
namespace decimal { inline namespace __7 { } }
namespace chrono { inline namespace __7 { } }
diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h
index 07251df0fd..2024a33322 100644
--- a/libstdc++-v3/include/bits/char_traits.h
+++ b/libstdc++-v3/include/bits/char_traits.h
@@ -1,7 +1,7 @@
// Character Traits for use by standard string and iostream -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -241,15 +241,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef mbstate_t state_type;
static void
- assign(char_type& __c1, const char_type& __c2)
+ assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
{ __c1 = __c2; }
static _GLIBCXX_CONSTEXPR bool
- eq(const char_type& __c1, const char_type& __c2)
+ eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
{ return __c1 == __c2; }
static _GLIBCXX_CONSTEXPR bool
- lt(const char_type& __c1, const char_type& __c2)
+ lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
{ return __c1 < __c2; }
static int
@@ -277,25 +277,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return static_cast<char_type*>(__builtin_memset(__s, __a, __n)); }
static _GLIBCXX_CONSTEXPR char_type
- to_char_type(const int_type& __c)
+ to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT
{ return static_cast<char_type>(__c); }
// To keep both the byte 0xff and the eof symbol 0xffffffff
// from ending up as 0xffffffff.
static _GLIBCXX_CONSTEXPR int_type
- to_int_type(const char_type& __c)
+ to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT
{ return static_cast<int_type>(static_cast<unsigned char>(__c)); }
static _GLIBCXX_CONSTEXPR bool
- eq_int_type(const int_type& __c1, const int_type& __c2)
+ eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT
{ return __c1 == __c2; }
static _GLIBCXX_CONSTEXPR int_type
- eof()
+ eof() _GLIBCXX_NOEXCEPT
{ return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
static _GLIBCXX_CONSTEXPR int_type
- not_eof(const int_type& __c)
+ not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT
{ return (__c == eof()) ? 0 : __c; }
};
@@ -312,15 +312,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef mbstate_t state_type;
static void
- assign(char_type& __c1, const char_type& __c2)
+ assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
{ __c1 = __c2; }
static _GLIBCXX_CONSTEXPR bool
- eq(const char_type& __c1, const char_type& __c2)
+ eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
{ return __c1 == __c2; }
static _GLIBCXX_CONSTEXPR bool
- lt(const char_type& __c1, const char_type& __c2)
+ lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
{ return __c1 < __c2; }
static int
@@ -348,23 +348,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return wmemset(__s, __a, __n); }
static _GLIBCXX_CONSTEXPR char_type
- to_char_type(const int_type& __c)
+ to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT
{ return char_type(__c); }
static _GLIBCXX_CONSTEXPR int_type
- to_int_type(const char_type& __c)
+ to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT
{ return int_type(__c); }
static _GLIBCXX_CONSTEXPR bool
- eq_int_type(const int_type& __c1, const int_type& __c2)
+ eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT
{ return __c1 == __c2; }
static _GLIBCXX_CONSTEXPR int_type
- eof()
+ eof() _GLIBCXX_NOEXCEPT
{ return static_cast<int_type>(WEOF); }
static _GLIBCXX_CONSTEXPR int_type
- not_eof(const int_type& __c)
+ not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT
{ return eq_int_type(__c, eof()) ? 0 : __c; }
};
#endif //_GLIBCXX_USE_WCHAR_T
@@ -391,15 +391,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef mbstate_t state_type;
static void
- assign(char_type& __c1, const char_type& __c2)
+ assign(char_type& __c1, const char_type& __c2) noexcept
{ __c1 = __c2; }
- static _GLIBCXX_CONSTEXPR bool
- eq(const char_type& __c1, const char_type& __c2)
+ static constexpr bool
+ eq(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 == __c2; }
- static _GLIBCXX_CONSTEXPR bool
- lt(const char_type& __c1, const char_type& __c2)
+ static constexpr bool
+ lt(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 < __c2; }
static int
@@ -453,24 +453,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __s;
}
- static _GLIBCXX_CONSTEXPR char_type
- to_char_type(const int_type& __c)
+ static constexpr char_type
+ to_char_type(const int_type& __c) noexcept
{ return char_type(__c); }
- static _GLIBCXX_CONSTEXPR int_type
- to_int_type(const char_type& __c)
+ static constexpr int_type
+ to_int_type(const char_type& __c) noexcept
{ return int_type(__c); }
- static _GLIBCXX_CONSTEXPR bool
- eq_int_type(const int_type& __c1, const int_type& __c2)
+ static constexpr bool
+ eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
{ return __c1 == __c2; }
- static _GLIBCXX_CONSTEXPR int_type
- eof()
+ static constexpr int_type
+ eof() noexcept
{ return static_cast<int_type>(-1); }
- static _GLIBCXX_CONSTEXPR int_type
- not_eof(const int_type& __c)
+ static constexpr int_type
+ not_eof(const int_type& __c) noexcept
{ return eq_int_type(__c, eof()) ? 0 : __c; }
};
@@ -484,15 +484,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef mbstate_t state_type;
static void
- assign(char_type& __c1, const char_type& __c2)
+ assign(char_type& __c1, const char_type& __c2) noexcept
{ __c1 = __c2; }
- static _GLIBCXX_CONSTEXPR bool
- eq(const char_type& __c1, const char_type& __c2)
+ static constexpr bool
+ eq(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 == __c2; }
- static _GLIBCXX_CONSTEXPR bool
- lt(const char_type& __c1, const char_type& __c2)
+ static constexpr bool
+ lt(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 < __c2; }
static int
@@ -546,24 +546,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __s;
}
- static _GLIBCXX_CONSTEXPR char_type
- to_char_type(const int_type& __c)
+ static constexpr char_type
+ to_char_type(const int_type& __c) noexcept
{ return char_type(__c); }
- static _GLIBCXX_CONSTEXPR int_type
- to_int_type(const char_type& __c)
+ static constexpr int_type
+ to_int_type(const char_type& __c) noexcept
{ return int_type(__c); }
- static _GLIBCXX_CONSTEXPR bool
- eq_int_type(const int_type& __c1, const int_type& __c2)
+ static constexpr bool
+ eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
{ return __c1 == __c2; }
- static _GLIBCXX_CONSTEXPR int_type
- eof()
+ static constexpr int_type
+ eof() noexcept
{ return static_cast<int_type>(-1); }
- static _GLIBCXX_CONSTEXPR int_type
- not_eof(const int_type& __c)
+ static constexpr int_type
+ not_eof(const int_type& __c) noexcept
{ return eq_int_type(__c, eof()) ? 0 : __c; }
};
diff --git a/libstdc++-v3/include/bits/codecvt.h b/libstdc++-v3/include/bits/codecvt.h
index 6ae9bbe26d..f485c170de 100644
--- a/libstdc++-v3/include/bits/codecvt.h
+++ b/libstdc++-v3/include/bits/codecvt.h
@@ -104,13 +104,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* output, returns codecvt_base::partial. Otherwise the
* conversion failed and codecvt_base::error is returned.
*
- * @param state Persistent conversion state data.
- * @param from Start of input.
- * @param from_end End of input.
- * @param from_next Returns start of unconverted data.
- * @param to Start of output buffer.
- * @param to_end End of output buffer.
- * @param to_next Returns start of unused output area.
+ * @param __state Persistent conversion state data.
+ * @param __from Start of input.
+ * @param __from_end End of input.
+ * @param __from_next Returns start of unconverted data.
+ * @param __to Start of output buffer.
+ * @param __to_end End of output buffer.
+ * @param __to_next Returns start of unused output area.
* @return codecvt_base::result.
*/
result
@@ -146,10 +146,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* output has insufficient space, returns codecvt_base::partial.
* Otherwise the reset failed and codecvt_base::error is returned.
*
- * @param state Persistent conversion state data.
- * @param to Start of output buffer.
- * @param to_end End of output buffer.
- * @param to_next Returns start of unused output area.
+ * @param __state Persistent conversion state data.
+ * @param __to Start of output buffer.
+ * @param __to_end End of output buffer.
+ * @param __to_next Returns start of unused output area.
* @return codecvt_base::result.
*/
result
@@ -184,13 +184,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* output, returns codecvt_base::partial. Otherwise the
* conversion failed and codecvt_base::error is returned.
*
- * @param state Persistent conversion state data.
- * @param from Start of input.
- * @param from_end End of input.
- * @param from_next Returns start of unconverted data.
- * @param to Start of output buffer.
- * @param to_end End of output buffer.
- * @param to_next Returns start of unused output area.
+ * @param __state Persistent conversion state data.
+ * @param __from Start of input.
+ * @param __from_end End of input.
+ * @param __from_next Returns start of unconverted data.
+ * @param __to Start of output buffer.
+ * @param __to_end End of output buffer.
+ * @param __to_next Returns start of unused output area.
* @return codecvt_base::result.
*/
result
@@ -292,7 +292,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit
codecvt(size_t __refs = 0)
- : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs) { }
+ : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs),
+ _M_c_locale_codecvt(0)
+ { }
explicit
codecvt(__c_locale __cloc, size_t __refs = 0);
diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc
index 638102274a..fcece60c8b 100644
--- a/libstdc++-v3/include/bits/deque.tcc
+++ b/libstdc++-v3/include/bits/deque.tcc
@@ -1,7 +1,7 @@
// Deque implementation (out of line) -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-// 2009, 2010, 2011
+// 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -175,12 +175,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (__position._M_cur == this->_M_impl._M_start._M_cur)
{
- push_front(std::forward<_Args>(__args)...);
+ emplace_front(std::forward<_Args>(__args)...);
return this->_M_impl._M_start;
}
else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
{
- push_back(std::forward<_Args>(__args)...);
+ emplace_back(std::forward<_Args>(__args)...);
iterator __tmp = this->_M_impl._M_finish;
--__tmp;
return __tmp;
@@ -327,6 +327,24 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
}
}
+
+ template <typename _Tp, typename _Alloc>
+ bool
+ deque<_Tp, _Alloc>::
+ _M_shrink_to_fit()
+ {
+ const difference_type __front_capacity
+ = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first);
+ if (__front_capacity == 0)
+ return false;
+
+ const difference_type __back_capacity
+ = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur);
+ if (__front_capacity + __back_capacity < _S_buffer_size())
+ return false;
+
+ return std::__shrink_to_fit_aux<deque>::_S_do_it(*this);
+ }
#endif
template <typename _Tp, typename _Alloc>
diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h
index 39c2532281..6d62f1e227 100644
--- a/libstdc++-v3/include/bits/forward_list.h
+++ b/libstdc++-v3/include/bits/forward_list.h
@@ -1,6 +1,6 @@
// <forward_list.h> -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +33,9 @@
#pragma GCC system_header
#include <memory>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -51,15 +53,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Fwd_list_node_base* _M_next;
_Fwd_list_node_base*
- _M_transfer_after(_Fwd_list_node_base* __begin)
- {
- _Fwd_list_node_base* __end = __begin;
- while (__end && __end->_M_next)
- __end = __end->_M_next;
- return _M_transfer_after(__begin, __end);
- }
-
- _Fwd_list_node_base*
_M_transfer_after(_Fwd_list_node_base* __begin,
_Fwd_list_node_base* __end)
{
@@ -76,7 +69,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
void
- _M_reverse_after()
+ _M_reverse_after() noexcept
{
_Fwd_list_node_base* __tail = _M_next;
if (!__tail)
@@ -290,6 +283,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Fwd_list_impl(const _Node_alloc_type& __a)
: _Node_alloc_type(__a), _M_head()
{ }
+
+ _Fwd_list_impl(_Node_alloc_type&& __a)
+ : _Node_alloc_type(std::move(__a)), _M_head()
+ { }
};
_Fwd_list_impl _M_impl;
@@ -300,22 +297,22 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef _Fwd_list_node<_Tp> _Node;
_Node_alloc_type&
- _M_get_Node_allocator()
+ _M_get_Node_allocator() noexcept
{ return *static_cast<_Node_alloc_type*>(&this->_M_impl); }
const _Node_alloc_type&
- _M_get_Node_allocator() const
+ _M_get_Node_allocator() const noexcept
{ return *static_cast<const _Node_alloc_type*>(&this->_M_impl); }
_Fwd_list_base()
: _M_impl() { }
- _Fwd_list_base(const _Alloc& __a)
+ _Fwd_list_base(const _Node_alloc_type& __a)
: _M_impl(__a) { }
- _Fwd_list_base(const _Fwd_list_base& __lst, const _Alloc& __a);
+ _Fwd_list_base(const _Fwd_list_base& __lst, const _Node_alloc_type& __a);
- _Fwd_list_base(_Fwd_list_base&& __lst, const _Alloc& __a)
+ _Fwd_list_base(_Fwd_list_base&& __lst, const _Node_alloc_type& __a)
: _M_impl(__a)
{
this->_M_impl._M_head._M_next = __lst._M_impl._M_head._M_next;
@@ -323,7 +320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
_Fwd_list_base(_Fwd_list_base&& __lst)
- : _M_impl(__lst._M_get_Node_allocator())
+ : _M_impl(std::move(__lst._M_get_Node_allocator()))
{
this->_M_impl._M_head._M_next = __lst._M_impl._M_head._M_next;
__lst._M_impl._M_head._M_next = 0;
@@ -412,6 +409,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef _Fwd_list_node<_Tp> _Node;
typedef _Fwd_list_node_base _Node_base;
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+ typedef typename _Base::_Node_alloc_type _Node_alloc_type;
public:
// types:
@@ -431,36 +429,36 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %forward_list with no elements.
- * @param al An allocator object.
+ * @param __al An allocator object.
*/
explicit
forward_list(const _Alloc& __al = _Alloc())
- : _Base(__al)
+ : _Base(_Node_alloc_type(__al))
{ }
/**
* @brief Copy constructor with allocator argument.
- * @param list Input list to copy.
- * @param al An allocator object.
+ * @param __list Input list to copy.
+ * @param __al An allocator object.
*/
forward_list(const forward_list& __list, const _Alloc& __al)
- : _Base(__list, __al)
+ : _Base(__list, _Node_alloc_type(__al))
{ }
/**
* @brief Move constructor with allocator argument.
- * @param list Input list to move.
- * @param al An allocator object.
+ * @param __list Input list to move.
+ * @param __al An allocator object.
*/
forward_list(forward_list&& __list, const _Alloc& __al)
- : _Base(std::move(__list), __al)
+ : _Base(std::move(__list), _Node_alloc_type(__al))
{ }
/**
* @brief Creates a %forward_list with default constructed elements.
- * @param n The number of elements to initially create.
+ * @param __n The number of elements to initially create.
*
- * This constructor creates the %forward_list with @a n default
+ * This constructor creates the %forward_list with @a __n default
* constructed elements.
*/
explicit
@@ -470,32 +468,32 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %forward_list with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param al An allocator object.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __al An allocator object.
*
- * This constructor fills the %forward_list with @a n copies of @a
- * value.
+ * This constructor fills the %forward_list with @a __n copies of
+ * @a __value.
*/
forward_list(size_type __n, const _Tp& __value,
const _Alloc& __al = _Alloc())
- : _Base(__al)
+ : _Base(_Node_alloc_type(__al))
{ _M_fill_initialize(__n, __value); }
/**
* @brief Builds a %forward_list from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param al An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __al An allocator object.
*
* Create a %forward_list consisting of copies of the elements from
- * [@a first,@a last). This is linear in N (where N is
- * distance(@a first,@a last)).
+ * [@a __first,@a __last). This is linear in N (where N is
+ * distance(@a __first,@a __last)).
*/
template<typename _InputIterator>
forward_list(_InputIterator __first, _InputIterator __last,
const _Alloc& __al = _Alloc())
- : _Base(__al)
+ : _Base(_Node_alloc_type(__al))
{
// Check whether it's an integral type. If so, it's not an iterator.
typedef typename std::__is_integer<_InputIterator>::__type _Integral;
@@ -504,11 +502,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief The %forward_list copy constructor.
- * @param list A %forward_list of identical element and allocator
+ * @param __list A %forward_list of identical element and allocator
* types.
*
* The newly-created %forward_list uses a copy of the allocation
- * object used by @a list.
+ * object used by @a __list.
*/
forward_list(const forward_list& __list)
: _Base(__list._M_get_Node_allocator())
@@ -516,41 +514,41 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief The %forward_list move constructor.
- * @param list A %forward_list of identical element and allocator
+ * @param __list A %forward_list of identical element and allocator
* types.
*
* The newly-created %forward_list contains the exact contents of @a
- * forward_list. The contents of @a list are a valid, but unspecified
+ * forward_list. The contents of @a __list are a valid, but unspecified
* %forward_list.
*/
- forward_list(forward_list&& __list)
+ forward_list(forward_list&& __list) noexcept
: _Base(std::move(__list)) { }
/**
* @brief Builds a %forward_list from an initializer_list
- * @param il An initializer_list of value_type.
- * @param al An allocator object.
+ * @param __il An initializer_list of value_type.
+ * @param __al An allocator object.
*
* Create a %forward_list consisting of copies of the elements
- * in the initializer_list @a il. This is linear in il.size().
+ * in the initializer_list @a __il. This is linear in __il.size().
*/
forward_list(std::initializer_list<_Tp> __il,
const _Alloc& __al = _Alloc())
- : _Base(__al)
+ : _Base(_Node_alloc_type(__al))
{ _M_initialize_dispatch(__il.begin(), __il.end(), __false_type()); }
/**
* @brief The forward_list dtor.
*/
- ~forward_list()
+ ~forward_list() noexcept
{ }
/**
* @brief The %forward_list assignment operator.
- * @param list A %forward_list of identical element and allocator
+ * @param __list A %forward_list of identical element and allocator
* types.
*
- * All the elements of @a list are copied, but unlike the copy
+ * All the elements of @a __list are copied, but unlike the copy
* constructor, the allocator object is not copied.
*/
forward_list&
@@ -558,11 +556,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief The %forward_list move assignment operator.
- * @param list A %forward_list of identical element and allocator
+ * @param __list A %forward_list of identical element and allocator
* types.
*
- * The contents of @a list are moved into this %forward_list
- * (without copying). @a list is a valid, but unspecified
+ * The contents of @a __list are moved into this %forward_list
+ * (without copying). @a __list is a valid, but unspecified
* %forward_list
*/
forward_list&
@@ -577,11 +575,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief The %forward_list initializer list assignment operator.
- * @param il An initializer_list of value_type.
+ * @param __il An initializer_list of value_type.
*
* Replace the contents of the %forward_list with copies of the
- * elements in the initializer_list @a il. This is linear in
- * il.size().
+ * elements in the initializer_list @a __il. This is linear in
+ * __il.size().
*/
forward_list&
operator=(std::initializer_list<_Tp> __il)
@@ -592,15 +590,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a range to a %forward_list.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function fills a %forward_list with copies of the elements
- * in the range [@a first,@a last).
+ * in the range [@a __first,@a __last).
*
* Note that the assignment completely changes the %forward_list and
- * that the resulting %forward_list's size is the same as the number
- * of elements assigned. Old data may be lost.
+ * that the number of elements of the resulting %forward_list's is the
+ * same as the number of elements assigned. Old data is lost.
*/
template<typename _InputIterator>
void
@@ -612,13 +610,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a given value to a %forward_list.
- * @param n Number of elements to be assigned.
- * @param val Value to be assigned.
+ * @param __n Number of elements to be assigned.
+ * @param __val Value to be assigned.
*
- * This function fills a %forward_list with @a n copies of the given
- * value. Note that the assignment completely changes the
- * %forward_list and that the resulting %forward_list's size is the
- * same as the number of elements assigned. Old data may be lost.
+ * This function fills a %forward_list with @a __n copies of the
+ * given value. Note that the assignment completely changes the
+ * %forward_list, and that the resulting %forward_list has __n
+ * elements. Old data is lost.
*/
void
assign(size_type __n, const _Tp& __val)
@@ -629,10 +627,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns an initializer_list to a %forward_list.
- * @param il An initializer_list of value_type.
+ * @param __il An initializer_list of value_type.
*
* Replace the contents of the %forward_list with copies of the
- * elements in the initializer_list @a il. This is linear in
+ * elements in the initializer_list @a __il. This is linear in
* il.size().
*/
void
@@ -644,8 +642,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Get a copy of the memory allocation object.
allocator_type
- get_allocator() const
- { return this->_M_get_Node_allocator(); }
+ get_allocator() const noexcept
+ { return allocator_type(this->_M_get_Node_allocator()); }
// 23.2.3.2 iterators:
@@ -654,7 +652,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* in the %forward_list. Iteration is done in ordinary element order.
*/
iterator
- before_begin()
+ before_begin() noexcept
{ return iterator(&this->_M_impl._M_head); }
/**
@@ -663,7 +661,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- before_begin() const
+ before_begin() const noexcept
{ return const_iterator(&this->_M_impl._M_head); }
/**
@@ -671,7 +669,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* in the %forward_list. Iteration is done in ordinary element order.
*/
iterator
- begin()
+ begin() noexcept
{ return iterator(this->_M_impl._M_head._M_next); }
/**
@@ -680,7 +678,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- begin() const
+ begin() const noexcept
{ return const_iterator(this->_M_impl._M_head._M_next); }
/**
@@ -689,7 +687,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
iterator
- end()
+ end() noexcept
{ return iterator(0); }
/**
@@ -698,7 +696,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- end() const
+ end() const noexcept
{ return const_iterator(0); }
/**
@@ -707,7 +705,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(this->_M_impl._M_head._M_next); }
/**
@@ -716,7 +714,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- cbefore_begin() const
+ cbefore_begin() const noexcept
{ return const_iterator(&this->_M_impl._M_head); }
/**
@@ -725,7 +723,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* ordinary element order.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(0); }
/**
@@ -733,14 +731,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* equal end().)
*/
bool
- empty() const
+ empty() const noexcept
{ return this->_M_impl._M_head._M_next == 0; }
/**
- * Returns the largest possible size of %forward_list.
+ * Returns the largest possible number of elements of %forward_list.
*/
size_type
- max_size() const
+ max_size() const noexcept
{ return this->_M_get_Node_allocator().max_size(); }
// 23.2.3.3 element access:
@@ -772,7 +770,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Constructs object in %forward_list at the front of the
* list.
- * @param args Arguments.
+ * @param __args Arguments.
*
* This function will insert an object of type Tp constructed
* with Tp(std::forward<Args>(args)...) at the front of the list
@@ -788,7 +786,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Add data to the front of the %forward_list.
- * @param val Data to be added.
+ * @param __val Data to be added.
*
* This is a typical stack operation. The function creates an
* element at the front of the %forward_list and assigns the given
@@ -826,8 +824,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Constructs object in %forward_list after the specified
* iterator.
- * @param pos A const_iterator into the %forward_list.
- * @param args Arguments.
+ * @param __pos A const_iterator into the %forward_list.
+ * @param __args Arguments.
* @return An iterator that points to the inserted data.
*
* This function will insert an object of type T constructed
@@ -845,8 +843,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts given value into %forward_list after specified
* iterator.
- * @param pos An iterator into the %forward_list.
- * @param val Data to be inserted.
+ * @param __pos An iterator into the %forward_list.
+ * @param __val Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given value after
@@ -868,9 +866,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a number of copies of given data into the
* %forward_list.
- * @param pos An iterator into the %forward_list.
- * @param n Number of elements to be inserted.
- * @param val Data to be inserted.
+ * @param __pos An iterator into the %forward_list.
+ * @param __n Number of elements to be inserted.
+ * @param __val Data to be inserted.
* @return An iterator pointing to the last inserted copy of
* @a val or @a pos if @a n == 0.
*
@@ -885,15 +883,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a range into the %forward_list.
- * @param position An iterator into the %forward_list.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __pos An iterator into the %forward_list.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
* @return An iterator pointing to the last inserted element or
- * @a pos if @a first == @a last.
+ * @a __pos if @a __first == @a __last.
*
- * This function will insert copies of the data in the range [@a
- * first,@a last) into the %forward_list after the location specified
- * by @a pos.
+ * This function will insert copies of the data in the range
+ * [@a __first,@a __last) into the %forward_list after the
+ * location specified by @a __pos.
*
* This operation is linear in the number of elements inserted and
* does not invalidate iterators and references.
@@ -906,25 +904,26 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts the contents of an initializer_list into
* %forward_list after the specified iterator.
- * @param pos An iterator into the %forward_list.
- * @param il An initializer_list of value_type.
+ * @param __pos An iterator into the %forward_list.
+ * @param __il An initializer_list of value_type.
* @return An iterator pointing to the last inserted element
- * or @a pos if @a il is empty.
+ * or @a __pos if @a __il is empty.
*
* This function will insert copies of the data in the
- * initializer_list @a il into the %forward_list before the location
- * specified by @a pos.
+ * initializer_list @a __il into the %forward_list before the location
+ * specified by @a __pos.
*
* This operation is linear in the number of elements inserted and
* does not invalidate iterators and references.
*/
iterator
- insert_after(const_iterator __pos, std::initializer_list<_Tp> __il);
+ insert_after(const_iterator __pos, std::initializer_list<_Tp> __il)
+ { return insert_after(__pos, __il.begin(), __il.end()); }
/**
* @brief Removes the element pointed to by the iterator following
* @c pos.
- * @param pos Iterator pointing before element to be erased.
+ * @param __pos Iterator pointing before element to be erased.
* @return An iterator pointing to the element following the one
* that was erased, or end() if no such element exists.
*
@@ -945,14 +944,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove a range of elements.
- * @param pos Iterator pointing before the first element to be
- * erased.
- * @param last Iterator pointing to one past the last element to be
- * erased.
- * @return @last.
+ * @param __pos Iterator pointing before the first element to be
+ * erased.
+ * @param __last Iterator pointing to one past the last element to be
+ * erased.
+ * @return @ __last.
*
- * This function will erase the elements in the range @a
- * (pos,last) and shorten the %forward_list accordingly.
+ * This function will erase the elements in the range
+ * @a (__pos,__last) and shorten the %forward_list accordingly.
*
* This operation is linear time in the size of the range and only
* invalidates iterators/references to the element being removed.
@@ -970,8 +969,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Swaps data with another %forward_list.
- * @param list A %forward_list of the same element and allocator
- * types.
+ * @param __list A %forward_list of the same element and allocator
+ * types.
*
* This exchanges the elements between two lists in constant
* time. Note that the global std::swap() function is
@@ -986,13 +985,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Resizes the %forward_list to the specified number of
* elements.
- * @param sz Number of elements the %forward_list should contain.
+ * @param __sz Number of elements the %forward_list should contain.
*
* This function will %resize the %forward_list to the specified
* number of elements. If the number is smaller than the
- * %forward_list's current size the %forward_list is truncated,
- * otherwise the %forward_list is extended and the new elements
- * are default constructed.
+ * %forward_list's current number of elements the %forward_list
+ * is truncated, otherwise the %forward_list is extended and the
+ * new elements are default constructed.
*/
void
resize(size_type __sz);
@@ -1000,14 +999,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Resizes the %forward_list to the specified number of
* elements.
- * @param sz Number of elements the %forward_list should contain.
- * @param val Data with which new elements should be populated.
+ * @param __sz Number of elements the %forward_list should contain.
+ * @param __val Data with which new elements should be populated.
*
* This function will %resize the %forward_list to the specified
* number of elements. If the number is smaller than the
- * %forward_list's current size the %forward_list is truncated,
- * otherwise the %forward_list is extended and new elements are
- * populated with given data.
+ * %forward_list's current number of elements the %forward_list
+ * is truncated, otherwise the %forward_list is extended and new
+ * elements are populated with given data.
*/
void
resize(size_type __sz, const value_type& __val);
@@ -1021,15 +1020,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* Managing the pointer is the user's responsibility.
*/
void
- clear()
+ clear() noexcept
{ this->_M_erase_after(&this->_M_impl._M_head, 0); }
// 23.2.3.5 forward_list operations:
/**
* @brief Insert contents of another %forward_list.
- * @param pos Iterator referencing the element to insert after.
- * @param list Source list.
+ * @param __pos Iterator referencing the element to insert after.
+ * @param __list Source list.
*
* The elements of @a list are inserted in constant time after
* the element referenced by @a pos. @a list becomes an empty
@@ -1041,53 +1040,60 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
splice_after(const_iterator __pos, forward_list&& __list)
{
if (!__list.empty())
- _M_splice_after(__pos, std::move(__list));
+ _M_splice_after(__pos, __list.before_begin(), __list.end());
}
+ void
+ splice_after(const_iterator __pos, forward_list& __list)
+ { splice_after(__pos, std::move(__list)); }
+
/**
* @brief Insert element from another %forward_list.
- * @param pos Iterator referencing the element to insert after.
- * @param list Source list.
- * @param i Iterator referencing the element before the element
- * to move.
+ * @param __pos Iterator referencing the element to insert after.
+ * @param __list Source list.
+ * @param __i Iterator referencing the element before the element
+ * to move.
*
* Removes the element in list @a list referenced by @a i and
* inserts it into the current list after @a pos.
*/
void
splice_after(const_iterator __pos, forward_list&& __list,
- const_iterator __i)
- {
- const_iterator __j = __i;
- ++__j;
- if (__pos == __i || __pos == __j)
- return;
+ const_iterator __i);
- splice_after(__pos, std::move(__list), __i, __j);
- }
+ void
+ splice_after(const_iterator __pos, forward_list& __list,
+ const_iterator __i)
+ { splice_after(__pos, std::move(__list), __i); }
/**
* @brief Insert range from another %forward_list.
- * @param pos Iterator referencing the element to insert after.
- * @param list Source list.
- * @param before Iterator referencing before the start of range
- * in list.
- * @param last Iterator referencing the end of range in list.
+ * @param __pos Iterator referencing the element to insert after.
+ * @param __list Source list.
+ * @param __before Iterator referencing before the start of range
+ * in list.
+ * @param __last Iterator referencing the end of range in list.
*
- * Removes elements in the range (before,last) and inserts them
- * after @a pos in constant time.
+ * Removes elements in the range (__before,__last) and inserts them
+ * after @a __pos in constant time.
*
- * Undefined if @a pos is in (before,last).
+ * Undefined if @a __pos is in (__before,__last).
*/
void
- splice_after(const_iterator __pos, forward_list&& __list,
- const_iterator __before, const_iterator __last);
+ splice_after(const_iterator __pos, forward_list&&,
+ const_iterator __before, const_iterator __last)
+ { _M_splice_after(__pos, __before, __last); }
+
+ void
+ splice_after(const_iterator __pos, forward_list&,
+ const_iterator __before, const_iterator __last)
+ { _M_splice_after(__pos, __before, __last); }
/**
* @brief Remove all elements equal to value.
- * @param val The value to remove.
+ * @param __val The value to remove.
*
- * Removes every element in the list equal to @a value.
+ * Removes every element in the list equal to @a __val.
* Remaining elements stay in list order. Note that this
* function only erases the elements, and that if the elements
* themselves are pointers, the pointed-to memory is not
@@ -1099,7 +1105,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove all elements satisfying a predicate.
- * @param pred Unary predicate function or object.
+ * @param __pred Unary predicate function or object.
*
* Removes every element in the list for which the predicate
* returns true. Remaining elements stay in list order. Note
@@ -1124,11 +1130,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*/
void
unique()
- { this->unique(std::equal_to<_Tp>()); }
+ { unique(std::equal_to<_Tp>()); }
/**
* @brief Remove consecutive elements satisfying a predicate.
- * @param binary_pred Binary predicate function or object.
+ * @param __binary_pred Binary predicate function or object.
*
* For each consecutive set of elements [first,last) that
* satisfy predicate(first,i) where i is an iterator in
@@ -1144,32 +1150,41 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Merge sorted lists.
- * @param list Sorted list to merge.
+ * @param __list Sorted list to merge.
*
* Assumes that both @a list and this list are sorted according to
- * operator<(). Merges elements of @a list into this list in
- * sorted order, leaving @a list empty when complete. Elements in
- * this list precede elements in @a list that are equal.
+ * operator<(). Merges elements of @a __list into this list in
+ * sorted order, leaving @a __list empty when complete. Elements in
+ * this list precede elements in @a __list that are equal.
*/
void
merge(forward_list&& __list)
- { this->merge(std::move(__list), std::less<_Tp>()); }
+ { merge(std::move(__list), std::less<_Tp>()); }
+
+ void
+ merge(forward_list& __list)
+ { merge(std::move(__list)); }
/**
* @brief Merge sorted lists according to comparison function.
- * @param list Sorted list to merge.
- * @param comp Comparison function defining sort order.
+ * @param __list Sorted list to merge.
+ * @param __comp Comparison function defining sort order.
*
- * Assumes that both @a list and this list are sorted according to
- * comp. Merges elements of @a list into this list
- * in sorted order, leaving @a list empty when complete. Elements
- * in this list precede elements in @a list that are equivalent
+ * Assumes that both @a __list and this list are sorted according to
+ * comp. Merges elements of @a __list into this list
+ * in sorted order, leaving @a __list empty when complete. Elements
+ * in this list precede elements in @a __list that are equivalent
* according to comp().
*/
template<typename _Comp>
void
merge(forward_list&& __list, _Comp __comp);
+ template<typename _Comp>
+ void
+ merge(forward_list& __list, _Comp __comp)
+ { merge(std::move(__list), __comp); }
+
/**
* @brief Sort the elements of the list.
*
@@ -1178,7 +1193,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*/
void
sort()
- { this->sort(std::less<_Tp>()); }
+ { sort(std::less<_Tp>()); }
/**
* @brief Sort the forward_list using a comparison function.
@@ -1196,7 +1211,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* Reverse the order of elements in the list in linear time.
*/
void
- reverse()
+ reverse() noexcept
{ this->_M_impl._M_head._M_reverse_after(); }
private:
@@ -1218,7 +1233,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// Called by splice_after and insert_after.
iterator
- _M_splice_after(const_iterator __pos, forward_list&& __list);
+ _M_splice_after(const_iterator __pos, const_iterator __before,
+ const_iterator __last);
// Called by forward_list(n).
void
@@ -1231,13 +1247,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Forward list equality comparison.
- * @param lx A %forward_list
- * @param ly A %forward_list of the same type as @a lx.
- * @return True iff the size and elements of the forward lists are equal.
+ * @param __lx A %forward_list
+ * @param __ly A %forward_list of the same type as @a __lx.
+ * @return True iff the elements of the forward lists are equal.
*
- * This is an equivalence relation. It is linear in the size of the
- * forward lists. Deques are considered equivalent if corresponding
- * elements compare equal.
+ * This is an equivalence relation. It is linear in the number of
+ * elements of the forward lists. Deques are considered equivalent
+ * if corresponding elements compare equal.
*/
template<typename _Tp, typename _Alloc>
bool
@@ -1246,12 +1262,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Forward list ordering relation.
- * @param lx A %forward_list.
- * @param ly A %forward_list of the same type as @a lx.
- * @return True iff @a lx is lexicographically less than @a ly.
+ * @param __lx A %forward_list.
+ * @param __ly A %forward_list of the same type as @a __lx.
+ * @return True iff @a __lx is lexicographically less than @a __ly.
*
- * This is a total ordering relation. It is linear in the size of the
- * forward lists. The elements must be comparable with @c <.
+ * This is a total ordering relation. It is linear in the number of
+ * elements of the forward lists. The elements must be comparable
+ * with @c <.
*
* See std::lexicographical_compare() for how the determination is made.
*/
diff --git a/libstdc++-v3/include/bits/forward_list.tcc b/libstdc++-v3/include/bits/forward_list.tcc
index 2c319db7c1..e70e74a222 100644
--- a/libstdc++-v3/include/bits/forward_list.tcc
+++ b/libstdc++-v3/include/bits/forward_list.tcc
@@ -36,7 +36,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
_Fwd_list_base<_Tp, _Alloc>::
- _Fwd_list_base(const _Fwd_list_base& __lst, const _Alloc& __a)
+ _Fwd_list_base(const _Fwd_list_base& __lst, const _Node_alloc_type& __a)
: _M_impl(__a)
{
this->_M_impl._M_head._M_next = 0;
@@ -225,22 +225,37 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
typename forward_list<_Tp, _Alloc>::iterator
forward_list<_Tp, _Alloc>::
- _M_splice_after(const_iterator __pos, forward_list&& __list)
+ _M_splice_after(const_iterator __pos,
+ const_iterator __before, const_iterator __last)
{
_Node_base* __tmp = const_cast<_Node_base*>(__pos._M_node);
- iterator __before = __list.before_begin();
- return iterator(__tmp->_M_transfer_after(__before._M_node));
+ _Node_base* __b = const_cast<_Node_base*>(__before._M_node);
+ _Node_base* __end = __b;
+
+ while (__end && __end->_M_next != __last._M_node)
+ __end = __end->_M_next;
+
+ if (__b != __end)
+ return iterator(__tmp->_M_transfer_after(__b, __end));
+ else
+ return iterator(__tmp);
}
template<typename _Tp, typename _Alloc>
void
forward_list<_Tp, _Alloc>::
splice_after(const_iterator __pos, forward_list&&,
- const_iterator __before, const_iterator __last)
+ const_iterator __i)
{
+ const_iterator __j = __i;
+ ++__j;
+
+ if (__pos == __i || __pos == __j)
+ return;
+
_Node_base* __tmp = const_cast<_Node_base*>(__pos._M_node);
- __tmp->_M_transfer_after(const_cast<_Node_base*>(__before._M_node),
- const_cast<_Node_base*>(__last._M_node));
+ __tmp->_M_transfer_after(const_cast<_Node_base*>(__i._M_node),
+ const_cast<_Node_base*>(__j._M_node));
}
template<typename _Tp, typename _Alloc>
@@ -250,8 +265,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (__n)
{
- forward_list __tmp(__n, __val, this->_M_get_Node_allocator());
- return _M_splice_after(__pos, std::move(__tmp));
+ forward_list __tmp(__n, __val, get_allocator());
+ return _M_splice_after(__pos, __tmp.before_begin(), __tmp.end());
}
else
return iterator(const_cast<_Node_base*>(__pos._M_node));
@@ -264,28 +279,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
insert_after(const_iterator __pos,
_InputIterator __first, _InputIterator __last)
{
- forward_list __tmp(__first, __last, this->_M_get_Node_allocator());
+ forward_list __tmp(__first, __last, get_allocator());
if (!__tmp.empty())
- return _M_splice_after(__pos, std::move(__tmp));
+ return _M_splice_after(__pos, __tmp.before_begin(), __tmp.end());
else
return iterator(const_cast<_Node_base*>(__pos._M_node));
}
template<typename _Tp, typename _Alloc>
- typename forward_list<_Tp, _Alloc>::iterator
- forward_list<_Tp, _Alloc>::
- insert_after(const_iterator __pos, std::initializer_list<_Tp> __il)
- {
- if (__il.size())
- {
- forward_list __tmp(__il, this->_M_get_Node_allocator());
- return _M_splice_after(__pos, std::move(__tmp));
- }
- else
- return iterator(const_cast<_Node_base*>(__pos._M_node));
- }
-
- template<typename _Tp, typename _Alloc>
void
forward_list<_Tp, _Alloc>::
remove(const _Tp& __val)
diff --git a/libstdc++-v3/include/bits/functional_hash.h b/libstdc++-v3/include/bits/functional_hash.h
index e77cb4e17b..e892159d44 100644
--- a/libstdc++-v3/include/bits/functional_hash.h
+++ b/libstdc++-v3/include/bits/functional_hash.h
@@ -57,8 +57,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct hash : public __hash_base<size_t, _Tp>
{
- size_t
- operator()(_Tp __val) const;
+ static_assert(sizeof(_Tp) < 0,
+ "std::hash is not specialized for this type");
+ size_t operator()(const _Tp&) const noexcept;
};
/// Partial specializations for pointer types.
@@ -66,61 +67,64 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
{
size_t
- operator()(_Tp* __p) const
+ operator()(_Tp* __p) const noexcept
{ return reinterpret_cast<size_t>(__p); }
};
// Explicit specializations for integer types.
#define _Cxx_hashtable_define_trivial_hash(_Tp) \
template<> \
- inline size_t \
- hash<_Tp>::operator()(_Tp __val) const \
- { return static_cast<size_t>(__val); }
+ struct hash<_Tp> : public __hash_base<size_t, _Tp> \
+ { \
+ size_t \
+ operator()(_Tp __val) const noexcept \
+ { return static_cast<size_t>(__val); } \
+ };
/// Explicit specialization for bool.
- _Cxx_hashtable_define_trivial_hash(bool);
+ _Cxx_hashtable_define_trivial_hash(bool)
/// Explicit specialization for char.
- _Cxx_hashtable_define_trivial_hash(char);
+ _Cxx_hashtable_define_trivial_hash(char)
/// Explicit specialization for signed char.
- _Cxx_hashtable_define_trivial_hash(signed char);
+ _Cxx_hashtable_define_trivial_hash(signed char)
/// Explicit specialization for unsigned char.
- _Cxx_hashtable_define_trivial_hash(unsigned char);
+ _Cxx_hashtable_define_trivial_hash(unsigned char)
/// Explicit specialization for wchar_t.
- _Cxx_hashtable_define_trivial_hash(wchar_t);
+ _Cxx_hashtable_define_trivial_hash(wchar_t)
/// Explicit specialization for char16_t.
- _Cxx_hashtable_define_trivial_hash(char16_t);
+ _Cxx_hashtable_define_trivial_hash(char16_t)
/// Explicit specialization for char32_t.
- _Cxx_hashtable_define_trivial_hash(char32_t);
+ _Cxx_hashtable_define_trivial_hash(char32_t)
/// Explicit specialization for short.
- _Cxx_hashtable_define_trivial_hash(short);
+ _Cxx_hashtable_define_trivial_hash(short)
/// Explicit specialization for int.
- _Cxx_hashtable_define_trivial_hash(int);
+ _Cxx_hashtable_define_trivial_hash(int)
/// Explicit specialization for long.
- _Cxx_hashtable_define_trivial_hash(long);
+ _Cxx_hashtable_define_trivial_hash(long)
/// Explicit specialization for long long.
- _Cxx_hashtable_define_trivial_hash(long long);
+ _Cxx_hashtable_define_trivial_hash(long long)
/// Explicit specialization for unsigned short.
- _Cxx_hashtable_define_trivial_hash(unsigned short);
+ _Cxx_hashtable_define_trivial_hash(unsigned short)
/// Explicit specialization for unsigned int.
- _Cxx_hashtable_define_trivial_hash(unsigned int);
+ _Cxx_hashtable_define_trivial_hash(unsigned int)
/// Explicit specialization for unsigned long.
- _Cxx_hashtable_define_trivial_hash(unsigned long);
+ _Cxx_hashtable_define_trivial_hash(unsigned long)
/// Explicit specialization for unsigned long long.
- _Cxx_hashtable_define_trivial_hash(unsigned long long);
+ _Cxx_hashtable_define_trivial_hash(unsigned long long)
#undef _Cxx_hashtable_define_trivial_hash
@@ -162,26 +166,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Specialization for float.
template<>
- inline size_t
- hash<float>::operator()(float __val) const
+ struct hash<float> : public __hash_base<size_t, float>
{
- // 0 and -0 both hash to zero.
- return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
- }
+ size_t
+ operator()(float __val) const noexcept
+ {
+ // 0 and -0 both hash to zero.
+ return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
+ }
+ };
/// Specialization for double.
template<>
- inline size_t
- hash<double>::operator()(double __val) const
+ struct hash<double> : public __hash_base<size_t, double>
{
- // 0 and -0 both hash to zero.
- return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
- }
+ size_t
+ operator()(double __val) const noexcept
+ {
+ // 0 and -0 both hash to zero.
+ return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
+ }
+ };
/// Specialization for long double.
template<>
- _GLIBCXX_PURE size_t
- hash<long double>::operator()(long double __val) const;
+ struct hash<long double>
+ : public __hash_base<size_t, long double>
+ {
+ _GLIBCXX_PURE size_t
+ operator()(long double __val) const noexcept;
+ };
// @} group hashes
diff --git a/libstdc++-v3/include/bits/gslice.h b/libstdc++-v3/include/bits/gslice.h
index 47d177510a..ab4ccb5f5e 100644
--- a/libstdc++-v3/include/bits/gslice.h
+++ b/libstdc++-v3/include/bits/gslice.h
@@ -1,7 +1,7 @@
// The template and inlines for the -*- C++ -*- gslice class.
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004, 2005, 2006, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004, 2005, 2006, 2009, 2010,
+// 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -74,11 +74,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Constructs a slice with as many dimensions as the length of the @a l
* and @a s arrays.
*
- * @param o Offset in array of first element.
- * @param l Array of dimension lengths.
- * @param s Array of dimension strides between array elements.
+ * @param __o Offset in array of first element.
+ * @param __l Array of dimension lengths.
+ * @param __s Array of dimension strides between array elements.
*/
- gslice(size_t, const valarray<size_t>&, const valarray<size_t>&);
+ gslice(size_t __o, const valarray<size_t>& __l,
+ const valarray<size_t>& __s);
// XXX: the IS says the copy-ctor and copy-assignment operators are
// synthesized by the compiler but they are just unsuitable
diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h
index b9e7a6eaf4..c7a8be0556 100644
--- a/libstdc++-v3/include/bits/hashtable.h
+++ b/libstdc++-v3/include/bits/hashtable.h
@@ -1,6 +1,7 @@
// hashtable.h header -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +49,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// value type is Value. As a conforming extension, we allow for
// value type != Value.
- // _ExtractKey: function object that takes a object of type Value
+ // _ExtractKey: function object that takes an object of type Value
// and returns a value of type _Key.
// _Equal: function object that takes two objects of type k and returns
@@ -78,9 +79,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// count. If so, returns make_pair(true, n), where n is the new
// bucket count. If not, returns make_pair(false, <anything>).
- // ??? Right now it is hard-wired that the number of buckets never
- // shrinks. Should we allow _RehashPolicy to change that?
-
// __cache_hash_code: bool. true if we store the value of the hash
// function along with the value. This is a time-space tradeoff.
// Storing it may improve lookup speed by reducing the number of times
@@ -94,6 +92,52 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// is always at most one, false if it may be an arbitrary number. This
// true for unordered_set and unordered_map, false for unordered_multiset
// and unordered_multimap.
+ /**
+ * Here's _Hashtable data structure, each _Hashtable has:
+ * - _Bucket[] _M_buckets
+ * - _Hash_node_base _M_before_begin
+ * - size_type _M_bucket_count
+ * - size_type _M_element_count
+ *
+ * with _Bucket being _Hash_node* and _Hash_node containing:
+ * - _Hash_node* _M_next
+ * - Tp _M_value
+ * - size_t _M_hash_code if cache_hash_code is true
+ *
+ * In terms of Standard containers the hashtable is like the aggregation of:
+ * - std::forward_list<_Node> containing the elements
+ * - std::vector<std::forward_list<_Node>::iterator> representing the buckets
+ *
+ * The non-empty buckets contain the node before the first node in the
+ * bucket. This design makes it possible to implement something like a
+ * std::forward_list::insert_after on container insertion and
+ * std::forward_list::erase_after on container erase calls.
+ * _M_before_begin is equivalent to std::foward_list::before_begin.
+ * Empty buckets contain nullptr.
+ * Note that one of the non-empty buckets contains &_M_before_begin which is
+ * not a dereferenceable node so the node pointer in a bucket shall never be
+ * dereferenced, only its next node can be.
+ *
+ * Walking through a bucket's nodes requires a check on the hash code to see
+ * if each node is still in the bucket. Such a design assumes a quite
+ * efficient hash functor and is one of the reasons it is
+ * highly advisable to set __cache_hash_code to true.
+ *
+ * The container iterators are simply built from nodes. This way incrementing
+ * the iterator is perfectly efficient independent of how many empty buckets
+ * there are in the container.
+ *
+ * On insert we compute the element's hash code and use it to it find the
+ * bucket index. If the element must be inserted in an empty bucket we add
+ * it at the beginning of the singly linked list and make the bucket point to
+ * _M_before_begin. The bucket that used to point to _M_before_begin, if any,
+ * is updated to point to its new before begin node.
+ *
+ * On erase, the simple iterator design requires using the hash functor to
+ * get the index of the bucket to update. For this reason, when
+ * __cache_hash_code is set to false, the hash functor must not throw
+ * and this is enforced by a statied assertion.
+ */
template<typename _Key, typename _Value, typename _Allocator,
typename _ExtractKey, typename _Equal,
@@ -111,7 +155,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__cache_hash_code,
__constant_iterators,
__unique_keys> >,
- public __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal,
+ public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
_H1, _H2, _Hash, __cache_hash_code>,
public __detail::_Map_base<_Key, _Value, _ExtractKey, __unique_keys,
_Hashtable<_Key, _Value, _Allocator,
@@ -130,6 +174,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__constant_iterators,
__unique_keys> >
{
+ template<typename _Cond>
+ using __if_hash_code_cached
+ = __or_<__not_<integral_constant<bool, __cache_hash_code>>, _Cond>;
+
+ template<typename _Cond>
+ using __if_hash_code_not_cached
+ = __or_<integral_constant<bool, __cache_hash_code>, _Cond>;
+
+ // When hash codes are not cached the hash functor shall not throw
+ // because it is used in methods (erase, swap...) that shall not throw.
+ static_assert(__if_hash_code_not_cached<__detail::__is_noexcept_hash<_Key,
+ _H1>>::value,
+ "Cache the hash code or qualify your hash functor with noexcept");
+
+ // Following two static assertions are necessary to guarantee that
+ // swapping two hashtable instances won't invalidate associated local
+ // iterators.
+
+ // When hash codes are cached local iterator only uses H2 which must then
+ // be empty.
+ static_assert(__if_hash_code_cached<is_empty<_H2>>::value,
+ "Functor used to map hash code to bucket index must be empty");
+
+ typedef __detail::_Hash_code_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash,
+ __cache_hash_code> _HCBase;
+
+ // When hash codes are not cached local iterator is going to use _HCBase
+ // above to compute node bucket index so it has to be empty.
+ static_assert(__if_hash_code_not_cached<is_empty<_HCBase>>::value,
+ "Cache the hash code or make functors involved in hash code"
+ " and bucket index computation empty");
+
public:
typedef _Allocator allocator_type;
typedef _Value value_type;
@@ -144,20 +221,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
+ typedef __detail::_Local_iterator<key_type, value_type, _ExtractKey,
+ _H1, _H2, _Hash,
+ __constant_iterators,
+ __cache_hash_code>
+ local_iterator;
+ typedef __detail::_Local_const_iterator<key_type, value_type, _ExtractKey,
+ _H1, _H2, _Hash,
+ __constant_iterators,
+ __cache_hash_code>
+ const_local_iterator;
typedef __detail::_Node_iterator<value_type, __constant_iterators,
__cache_hash_code>
- local_iterator;
+ iterator;
typedef __detail::_Node_const_iterator<value_type,
__constant_iterators,
__cache_hash_code>
- const_local_iterator;
-
- typedef __detail::_Hashtable_iterator<value_type, __constant_iterators,
- __cache_hash_code>
- iterator;
- typedef __detail::_Hashtable_const_iterator<value_type,
- __constant_iterators,
- __cache_hash_code>
const_iterator;
template<typename _Key2, typename _Value2, typename _Ex2, bool __unique2,
@@ -165,21 +244,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend struct __detail::_Map_base;
private:
+ typedef typename _RehashPolicy::_State _RehashPolicyState;
typedef __detail::_Hash_node<_Value, __cache_hash_code> _Node;
typedef typename _Allocator::template rebind<_Node>::other
_Node_allocator_type;
- typedef typename _Allocator::template rebind<_Node*>::other
+ typedef __detail::_Hash_node_base _BaseNode;
+ typedef _BaseNode* _Bucket;
+ typedef typename _Allocator::template rebind<_Bucket>::other
_Bucket_allocator_type;
typedef typename _Allocator::template rebind<_Value>::other
_Value_allocator_type;
- _Node_allocator_type _M_node_allocator;
- _Node** _M_buckets;
- size_type _M_bucket_count;
- size_type _M_begin_bucket_index; // First non-empty bucket.
- size_type _M_element_count;
- _RehashPolicy _M_rehash_policy;
+ _Node_allocator_type _M_node_allocator;
+ _Bucket* _M_buckets;
+ size_type _M_bucket_count;
+ _BaseNode _M_before_begin;
+ size_type _M_element_count;
+ _RehashPolicy _M_rehash_policy;
template<typename... _Args>
_Node*
@@ -188,14 +270,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_deallocate_node(_Node* __n);
+ // Deallocate the linked list of nodes pointed to by __n
void
- _M_deallocate_nodes(_Node**, size_type);
+ _M_deallocate_nodes(_Node* __n);
- _Node**
+ _Bucket*
_M_allocate_buckets(size_type __n);
void
- _M_deallocate_buckets(_Node**, size_type __n);
+ _M_deallocate_buckets(_Bucket*, size_type __n);
+
+ // Gets bucket begin, deals with the fact that non-empty buckets contain
+ // their before begin node.
+ _Node*
+ _M_bucket_begin(size_type __bkt) const;
+
+ _Node*
+ _M_begin() const
+ { return static_cast<_Node*>(_M_before_begin._M_nxt); }
public:
// Constructor, destructor, assignment, swap
@@ -233,65 +325,65 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- ~_Hashtable();
+ ~_Hashtable() noexcept;
void swap(_Hashtable&);
// Basic container operations
iterator
- begin()
- { return iterator(_M_buckets + _M_begin_bucket_index); }
+ begin() noexcept
+ { return iterator(_M_begin()); }
const_iterator
- begin() const
- { return const_iterator(_M_buckets + _M_begin_bucket_index); }
+ begin() const noexcept
+ { return const_iterator(_M_begin()); }
iterator
- end()
- { return iterator(_M_buckets + _M_bucket_count); }
+ end() noexcept
+ { return iterator(nullptr); }
const_iterator
- end() const
- { return const_iterator(_M_buckets + _M_bucket_count); }
+ end() const noexcept
+ { return const_iterator(nullptr); }
const_iterator
- cbegin() const
- { return const_iterator(_M_buckets + _M_begin_bucket_index); }
+ cbegin() const noexcept
+ { return const_iterator(_M_begin()); }
const_iterator
- cend() const
- { return const_iterator(_M_buckets + _M_bucket_count); }
+ cend() const noexcept
+ { return const_iterator(nullptr); }
size_type
- size() const
+ size() const noexcept
{ return _M_element_count; }
bool
- empty() const
+ empty() const noexcept
{ return size() == 0; }
allocator_type
- get_allocator() const
+ get_allocator() const noexcept
{ return allocator_type(_M_node_allocator); }
size_type
- max_size() const
+ max_size() const noexcept
{ return _M_node_allocator.max_size(); }
// Observers
key_equal
key_eq() const
- { return this->_M_eq; }
+ { return this->_M_eq(); }
// hash_function, if present, comes from _Hash_code_base.
// Bucket operations
size_type
- bucket_count() const
+ bucket_count() const noexcept
{ return _M_bucket_count; }
size_type
- max_bucket_count() const
+ max_bucket_count() const noexcept
{ return max_size(); }
size_type
@@ -300,38 +392,38 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_type
bucket(const key_type& __k) const
- {
- return this->_M_bucket_index(__k, this->_M_hash_code(__k),
- bucket_count());
- }
+ { return _M_bucket_index(__k, this->_M_hash_code(__k)); }
local_iterator
begin(size_type __n)
- { return local_iterator(_M_buckets[__n]); }
+ { return local_iterator(_M_bucket_begin(__n), __n,
+ _M_bucket_count); }
local_iterator
- end(size_type)
- { return local_iterator(0); }
+ end(size_type __n)
+ { return local_iterator(nullptr, __n, _M_bucket_count); }
const_local_iterator
begin(size_type __n) const
- { return const_local_iterator(_M_buckets[__n]); }
+ { return const_local_iterator(_M_bucket_begin(__n), __n,
+ _M_bucket_count); }
const_local_iterator
- end(size_type) const
- { return const_local_iterator(0); }
+ end(size_type __n) const
+ { return const_local_iterator(nullptr, __n, _M_bucket_count); }
// DR 691.
const_local_iterator
cbegin(size_type __n) const
- { return const_local_iterator(_M_buckets[__n]); }
+ { return const_local_iterator(_M_bucket_begin(__n), __n,
+ _M_bucket_count); }
const_local_iterator
- cend(size_type) const
- { return const_local_iterator(0); }
+ cend(size_type __n) const
+ { return const_local_iterator(nullptr, __n, _M_bucket_count); }
float
- load_factor() const
+ load_factor() const noexcept
{
return static_cast<float>(size()) / static_cast<float>(bucket_count());
}
@@ -364,23 +456,49 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
equal_range(const key_type& __k) const;
private:
+ // Bucket index computation helpers.
+ size_type
+ _M_bucket_index(_Node* __n) const
+ { return _HCBase::_M_bucket_index(__n, _M_bucket_count); }
+
+ size_type
+ _M_bucket_index(const key_type& __k,
+ typename _Hashtable::_Hash_code_type __c) const
+ { return _HCBase::_M_bucket_index(__k, __c, _M_bucket_count); }
+
// Find and insert helper functions and types
+ // Find the node before the one matching the criteria.
+ _BaseNode*
+ _M_find_before_node(size_type, const key_type&,
+ typename _Hashtable::_Hash_code_type) const;
+
_Node*
- _M_find_node(_Node*, const key_type&,
- typename _Hashtable::_Hash_code_type) const;
+ _M_find_node(size_type __bkt, const key_type& __key,
+ typename _Hashtable::_Hash_code_type __c) const
+ {
+ _BaseNode* __before_n = _M_find_before_node(__bkt, __key, __c);
+ if (__before_n)
+ return static_cast<_Node*>(__before_n->_M_nxt);
+ return nullptr;
+ }
- template<typename _Arg>
- iterator
- _M_insert_bucket(_Arg&&, size_type,
- typename _Hashtable::_Hash_code_type);
+ // Insert a node at the beginning of a bucket.
+ void
+ _M_insert_bucket_begin(size_type, _Node*);
- template<typename _Arg>
- std::pair<iterator, bool>
- _M_insert(_Arg&&, std::true_type);
+ // Remove the bucket first node
+ void
+ _M_remove_bucket_begin(size_type __bkt, _Node* __next_n,
+ size_type __next_bkt);
+
+ // Get the node before __n in the bucket __bkt
+ _BaseNode*
+ _M_get_previous_node(size_type __bkt, _BaseNode* __n);
template<typename _Arg>
iterator
- _M_insert(_Arg&&, std::false_type);
+ _M_insert_bucket(_Arg&&, size_type,
+ typename _Hashtable::_Hash_code_type);
typedef typename std::conditional<__unique_keys,
std::pair<iterator, bool>,
@@ -393,38 +511,57 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>::type
_Insert_Conv_Type;
+ protected:
+ template<typename... _Args>
+ std::pair<iterator, bool>
+ _M_emplace(std::true_type, _Args&&... __args);
+
+ template<typename... _Args>
+ iterator
+ _M_emplace(std::false_type, _Args&&... __args);
+
+ template<typename _Arg>
+ std::pair<iterator, bool>
+ _M_insert(_Arg&&, std::true_type);
+
+ template<typename _Arg>
+ iterator
+ _M_insert(_Arg&&, std::false_type);
+
public:
- // Insert and erase
+ // Emplace, insert and erase
+ template<typename... _Args>
+ _Insert_Return_Type
+ emplace(_Args&&... __args)
+ { return _M_emplace(integral_constant<bool, __unique_keys>(),
+ std::forward<_Args>(__args)...); }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator, _Args&&... __args)
+ { return _Insert_Conv_Type()(emplace(std::forward<_Args>(__args)...)); }
+
_Insert_Return_Type
insert(const value_type& __v)
- { return _M_insert(__v, std::integral_constant<bool, __unique_keys>()); }
+ { return _M_insert(__v, integral_constant<bool, __unique_keys>()); }
iterator
insert(const_iterator, const value_type& __v)
{ return _Insert_Conv_Type()(insert(__v)); }
- _Insert_Return_Type
- insert(value_type&& __v)
- { return _M_insert(std::move(__v),
- std::integral_constant<bool, __unique_keys>()); }
-
- iterator
- insert(const_iterator, value_type&& __v)
- { return _Insert_Conv_Type()(insert(std::move(__v))); }
-
template<typename _Pair, typename = typename
- std::enable_if<!__constant_iterators
- && std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<__and_<integral_constant<bool, !__constant_iterators>,
+ std::is_constructible<value_type,
+ _Pair&&>>::value>::type>
_Insert_Return_Type
insert(_Pair&& __v)
{ return _M_insert(std::forward<_Pair>(__v),
- std::integral_constant<bool, __unique_keys>()); }
+ integral_constant<bool, __unique_keys>()); }
template<typename _Pair, typename = typename
- std::enable_if<!__constant_iterators
- && std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<__and_<integral_constant<bool, !__constant_iterators>,
+ std::is_constructible<value_type,
+ _Pair&&>>::value>::type>
iterator
insert(const_iterator, _Pair&& __v)
{ return _Insert_Conv_Type()(insert(std::forward<_Pair>(__v))); }
@@ -440,6 +577,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
iterator
erase(const_iterator);
+ // LWG 2059.
+ iterator
+ erase(iterator __it)
+ { return erase(const_iterator(__it)); }
+
size_type
erase(const key_type&);
@@ -447,7 +589,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase(const_iterator, const_iterator);
void
- clear();
+ clear() noexcept;
// Set number of buckets to be appropriate for container of n element.
void rehash(size_type __n);
@@ -456,8 +598,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// reserve, if present, comes from _Rehash_base.
private:
- // Unconditionally change size of bucket array to n.
- void _M_rehash(size_type __n);
+ // Helper rehash method used when keys are unique.
+ void _M_rehash_aux(size_type __n, std::true_type);
+
+ // Helper rehash method used when keys can be non-unique.
+ void _M_rehash_aux(size_type __n, std::false_type);
+
+ // Unconditionally change size of bucket array to n, restore hash policy
+ // state to __state on exception.
+ void _M_rehash(size_type __n, const _RehashPolicyState& __state);
};
@@ -478,7 +627,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__try
{
_M_node_allocator.construct(__n, std::forward<_Args>(__args)...);
- __n->_M_next = 0;
return __n;
}
__catch(...)
@@ -508,18 +656,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_deallocate_nodes(_Node** __array, size_type __n)
+ _M_deallocate_nodes(_Node* __n)
{
- for (size_type __i = 0; __i < __n; ++__i)
+ while (__n)
{
- _Node* __p = __array[__i];
- while (__p)
- {
- _Node* __tmp = __p;
- __p = __p->_M_next;
- _M_deallocate_node(__tmp);
- }
- __array[__i] = 0;
+ _Node* __tmp = __n;
+ __n = __n->_M_next();
+ _M_deallocate_node(__tmp);
}
}
@@ -529,18 +672,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool __chc, bool __cit, bool __uk>
typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy,
- __chc, __cit, __uk>::_Node**
+ __chc, __cit, __uk>::_Bucket*
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_M_allocate_buckets(size_type __n)
{
_Bucket_allocator_type __alloc(_M_node_allocator);
- // We allocate one extra bucket to hold a sentinel, an arbitrary
- // non-null pointer. Iterator increment relies on this.
- _Node** __p = __alloc.allocate(__n + 1);
- std::fill(__p, __p + __n, (_Node*) 0);
- __p[__n] = reinterpret_cast<_Node*>(0x1000);
+ _Bucket* __p = __alloc.allocate(__n);
+ __builtin_memset(__p, 0, __n * sizeof(_Bucket));
return __p;
}
@@ -551,10 +691,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_deallocate_buckets(_Node** __p, size_type __n)
+ _M_deallocate_buckets(_Bucket* __p, size_type __n)
{
_Bucket_allocator_type __alloc(_M_node_allocator);
- __alloc.deallocate(__p, __n + 1);
+ __alloc.deallocate(__p, __n);
+ }
+
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey,
+ _Equal, _H1, _H2, _Hash, _RehashPolicy,
+ __chc, __cit, __uk>::_Node*
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_bucket_begin(size_type __bkt) const
+ {
+ _BaseNode* __n = _M_buckets[__bkt];
+ return __n ? static_cast<_Node*>(__n->_M_nxt) : nullptr;
}
template<typename _Key, typename _Value,
@@ -568,9 +723,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const _Equal& __eq, const _ExtractKey& __exk,
const allocator_type& __a)
: __detail::_Rehash_base<_RehashPolicy, _Hashtable>(),
- __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal,
- _H1, _H2, _Hash, __chc>(__exk, __eq,
- __h1, __h2, __h),
+ __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, __chc>(__exk, __h1, __h2, __h,
+ __eq),
__detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(),
_M_node_allocator(__a),
_M_bucket_count(0),
@@ -578,8 +733,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_rehash_policy()
{
_M_bucket_count = _M_rehash_policy._M_next_bkt(__bucket_hint);
+ // We don't want the rehash policy to ask for the hashtable to shrink
+ // on the first insertion so we need to reset its previous resize level.
+ _M_rehash_policy._M_prev_resize = 0;
_M_buckets = _M_allocate_buckets(_M_bucket_count);
- _M_begin_bucket_index = _M_bucket_count;
}
template<typename _Key, typename _Value,
@@ -595,22 +752,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const _Equal& __eq, const _ExtractKey& __exk,
const allocator_type& __a)
: __detail::_Rehash_base<_RehashPolicy, _Hashtable>(),
- __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal,
- _H1, _H2, _Hash, __chc>(__exk, __eq,
- __h1, __h2, __h),
+ __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, __chc>(__exk, __h1, __h2, __h,
+ __eq),
__detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(),
_M_node_allocator(__a),
_M_bucket_count(0),
_M_element_count(0),
_M_rehash_policy()
{
- _M_bucket_count = std::max(_M_rehash_policy._M_next_bkt(__bucket_hint),
- _M_rehash_policy.
- _M_bkt_for_elements(__detail::
- __distance_fw(__f,
- __l)));
+ _M_bucket_count =
+ _M_rehash_policy._M_bkt_for_elements(__detail::__distance_fw(__f,
+ __l));
+ if (_M_bucket_count <= __bucket_hint)
+ _M_bucket_count = _M_rehash_policy._M_next_bkt(__bucket_hint);
+
+ // We don't want the rehash policy to ask for the hashtable to shrink
+ // on the first insertion so we need to reset its previous resize
+ // level.
+ _M_rehash_policy._M_prev_resize = 0;
_M_buckets = _M_allocate_buckets(_M_bucket_count);
- _M_begin_bucket_index = _M_bucket_count;
__try
{
for (; __f != __l; ++__f)
@@ -632,29 +793,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_Hashtable(const _Hashtable& __ht)
: __detail::_Rehash_base<_RehashPolicy, _Hashtable>(__ht),
- __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal,
+ __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
_H1, _H2, _Hash, __chc>(__ht),
__detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(__ht),
_M_node_allocator(__ht._M_node_allocator),
_M_bucket_count(__ht._M_bucket_count),
- _M_begin_bucket_index(__ht._M_begin_bucket_index),
_M_element_count(__ht._M_element_count),
_M_rehash_policy(__ht._M_rehash_policy)
{
_M_buckets = _M_allocate_buckets(_M_bucket_count);
__try
{
- for (size_type __i = 0; __i < __ht._M_bucket_count; ++__i)
+ if (!__ht._M_before_begin._M_nxt)
+ return;
+
+ // First deal with the special first node pointed to by
+ // _M_before_begin.
+ const _Node* __ht_n = __ht._M_begin();
+ _Node* __this_n = _M_allocate_node(__ht_n->_M_v);
+ this->_M_copy_code(__this_n, __ht_n);
+ _M_before_begin._M_nxt = __this_n;
+ _M_buckets[_M_bucket_index(__this_n)] = &_M_before_begin;
+
+ // Then deal with other nodes.
+ _BaseNode* __prev_n = __this_n;
+ for (__ht_n = __ht_n->_M_next(); __ht_n; __ht_n = __ht_n->_M_next())
{
- _Node* __n = __ht._M_buckets[__i];
- _Node** __tail = _M_buckets + __i;
- while (__n)
- {
- *__tail = _M_allocate_node(__n->_M_v);
- this->_M_copy_code(*__tail, __n);
- __tail = &((*__tail)->_M_next);
- __n = __n->_M_next;
- }
+ __this_n = _M_allocate_node(__ht_n->_M_v);
+ __prev_n->_M_nxt = __this_n;
+ this->_M_copy_code(__this_n, __ht_n);
+ size_type __bkt = _M_bucket_index(__this_n);
+ if (!_M_buckets[__bkt])
+ _M_buckets[__bkt] = __prev_n;
+ __prev_n = __this_n;
}
}
__catch(...)
@@ -673,20 +844,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_Hashtable(_Hashtable&& __ht)
: __detail::_Rehash_base<_RehashPolicy, _Hashtable>(__ht),
- __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal,
+ __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
_H1, _H2, _Hash, __chc>(__ht),
__detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(__ht),
- _M_node_allocator(__ht._M_node_allocator),
+ _M_node_allocator(std::move(__ht._M_node_allocator)),
_M_buckets(__ht._M_buckets),
_M_bucket_count(__ht._M_bucket_count),
- _M_begin_bucket_index(__ht._M_begin_bucket_index),
+ _M_before_begin(__ht._M_before_begin._M_nxt),
_M_element_count(__ht._M_element_count),
_M_rehash_policy(__ht._M_rehash_policy)
{
+ // Update, if necessary, bucket pointing to before begin that hasn't move.
+ if (_M_begin())
+ _M_buckets[_M_bucket_index(_M_begin())] = &_M_before_begin;
__ht._M_rehash_policy = _RehashPolicy();
__ht._M_bucket_count = __ht._M_rehash_policy._M_next_bkt(0);
__ht._M_buckets = __ht._M_allocate_buckets(__ht._M_bucket_count);
- __ht._M_begin_bucket_index = __ht._M_bucket_count;
+ __ht._M_before_begin._M_nxt = nullptr;
__ht._M_element_count = 0;
}
@@ -696,7 +870,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool __chc, bool __cit, bool __uk>
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- ~_Hashtable()
+ ~_Hashtable() noexcept
{
clear();
_M_deallocate_buckets(_M_buckets, _M_bucket_count);
@@ -714,8 +888,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// The only base class with member variables is hash_code_base. We
// define _Hash_code_base::_M_swap because different specializations
// have different members.
- __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal,
- _H1, _H2, _Hash, __chc>::_M_swap(__x);
+ this->_M_swap(__x);
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 431. Swapping containers with unequal allocators.
@@ -725,8 +898,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::swap(_M_rehash_policy, __x._M_rehash_policy);
std::swap(_M_buckets, __x._M_buckets);
std::swap(_M_bucket_count, __x._M_bucket_count);
- std::swap(_M_begin_bucket_index, __x._M_begin_bucket_index);
+ std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt);
std::swap(_M_element_count, __x._M_element_count);
+ // Fix buckets containing the _M_before_begin pointers that can't be
+ // swapped.
+ if (_M_begin())
+ _M_buckets[_M_bucket_index(_M_begin())] = &_M_before_begin;
+ if (__x._M_begin())
+ __x._M_buckets[__x._M_bucket_index(__x._M_begin())]
+ = &(__x._M_before_begin);
}
template<typename _Key, typename _Value,
@@ -738,10 +918,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
__rehash_policy(const _RehashPolicy& __pol)
{
- _M_rehash_policy = __pol;
size_type __n_bkt = __pol._M_bkt_for_elements(_M_element_count);
- if (__n_bkt > _M_bucket_count)
- _M_rehash(__n_bkt);
+ if (__n_bkt != _M_bucket_count)
+ _M_rehash(__n_bkt, _M_rehash_policy._M_state());
+ _M_rehash_policy = __pol;
}
template<typename _Key, typename _Value,
@@ -756,9 +936,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
find(const key_type& __k)
{
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
- _Node* __p = _M_find_node(_M_buckets[__n], __k, __code);
- return __p ? iterator(__p, _M_buckets + __n) : this->end();
+ std::size_t __n = _M_bucket_index(__k, __code);
+ _Node* __p = _M_find_node(__n, __k, __code);
+ return __p ? iterator(__p) : this->end();
}
template<typename _Key, typename _Value,
@@ -773,9 +953,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
find(const key_type& __k) const
{
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
- _Node* __p = _M_find_node(_M_buckets[__n], __k, __code);
- return __p ? const_iterator(__p, _M_buckets + __n) : this->end();
+ std::size_t __n = _M_bucket_index(__k, __code);
+ _Node* __p = _M_find_node(__n, __k, __code);
+ return __p ? const_iterator(__p) : this->end();
}
template<typename _Key, typename _Value,
@@ -790,11 +970,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
count(const key_type& __k) const
{
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
+ std::size_t __n = _M_bucket_index(__k, __code);
+ _Node* __p = _M_bucket_begin(__n);
+ if (!__p)
+ return 0;
+
std::size_t __result = 0;
- for (_Node* __p = _M_buckets[__n]; __p; __p = __p->_M_next)
- if (this->_M_compare(__k, __code, __p))
- ++__result;
+ for (;; __p = __p->_M_next())
+ {
+ if (this->_M_equals(__k, __code, __p))
+ ++__result;
+ else if (__result)
+ // All equivalent values are next to each other, if we found a not
+ // equivalent value after an equivalent one it means that we won't
+ // find any more equivalent values.
+ break;
+ if (!__p->_M_nxt || _M_bucket_index(__p->_M_next()) != __n)
+ break;
+ }
return __result;
}
@@ -815,22 +1008,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
equal_range(const key_type& __k)
{
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
- _Node** __head = _M_buckets + __n;
- _Node* __p = _M_find_node(*__head, __k, __code);
+ std::size_t __n = _M_bucket_index(__k, __code);
+ _Node* __p = _M_find_node(__n, __k, __code);
if (__p)
{
- _Node* __p1 = __p->_M_next;
- for (; __p1; __p1 = __p1->_M_next)
- if (!this->_M_compare(__k, __code, __p1))
- break;
-
- iterator __first(__p, __head);
- iterator __last(__p1, __head);
- if (!__p1)
- __last._M_incr_bucket();
- return std::make_pair(__first, __last);
+ _Node* __p1 = __p->_M_next();
+ while (__p1 && _M_bucket_index(__p1) == __n
+ && this->_M_equals(__k, __code, __p1))
+ __p1 = __p1->_M_next();
+
+ return std::make_pair(iterator(__p), iterator(__p1));
}
else
return std::make_pair(this->end(), this->end());
@@ -853,47 +1041,230 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
equal_range(const key_type& __k) const
{
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
- _Node** __head = _M_buckets + __n;
- _Node* __p = _M_find_node(*__head, __k, __code);
+ std::size_t __n = _M_bucket_index(__k, __code);
+ _Node* __p = _M_find_node(__n, __k, __code);
if (__p)
{
- _Node* __p1 = __p->_M_next;
- for (; __p1; __p1 = __p1->_M_next)
- if (!this->_M_compare(__k, __code, __p1))
- break;
-
- const_iterator __first(__p, __head);
- const_iterator __last(__p1, __head);
- if (!__p1)
- __last._M_incr_bucket();
- return std::make_pair(__first, __last);
+ _Node* __p1 = __p->_M_next();
+ while (__p1 && _M_bucket_index(__p1) == __n
+ && this->_M_equals(__k, __code, __p1))
+ __p1 = __p1->_M_next();
+
+ return std::make_pair(const_iterator(__p), const_iterator(__p1));
}
else
return std::make_pair(this->end(), this->end());
}
- // Find the node whose key compares equal to k, beginning the search
- // at p (usually the head of a bucket). Return nil if no node is found.
+ // Find the node whose key compares equal to k in the bucket n. Return nullptr
+ // if no node is found.
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
bool __chc, bool __cit, bool __uk>
typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey,
_Equal, _H1, _H2, _Hash, _RehashPolicy,
- __chc, __cit, __uk>::_Node*
+ __chc, __cit, __uk>::_BaseNode*
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_find_before_node(size_type __n, const key_type& __k,
+ typename _Hashtable::_Hash_code_type __code) const
+ {
+ _BaseNode* __prev_p = _M_buckets[__n];
+ if (!__prev_p)
+ return nullptr;
+ _Node* __p = static_cast<_Node*>(__prev_p->_M_nxt);
+ for (;; __p = __p->_M_next())
+ {
+ if (this->_M_equals(__k, __code, __p))
+ return __prev_p;
+ if (!(__p->_M_nxt) || _M_bucket_index(__p->_M_next()) != __n)
+ break;
+ __prev_p = __p;
+ }
+ return nullptr;
+ }
+
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ void
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_find_node(_Node* __p, const key_type& __k,
- typename _Hashtable::_Hash_code_type __code) const
+ _M_insert_bucket_begin(size_type __bkt, _Node* __new_node)
{
- for (; __p; __p = __p->_M_next)
- if (this->_M_compare(__k, __code, __p))
- return __p;
- return false;
+ if (_M_buckets[__bkt])
+ {
+ // Bucket is not empty, we just need to insert the new node after the
+ // bucket before begin.
+ __new_node->_M_nxt = _M_buckets[__bkt]->_M_nxt;
+ _M_buckets[__bkt]->_M_nxt = __new_node;
+ }
+ else
+ {
+ // The bucket is empty, the new node is inserted at the beginning of
+ // the singly-linked list and the bucket will contain _M_before_begin
+ // pointer.
+ __new_node->_M_nxt = _M_before_begin._M_nxt;
+ _M_before_begin._M_nxt = __new_node;
+ if (__new_node->_M_nxt)
+ // We must update former begin bucket that is pointing to
+ // _M_before_begin.
+ _M_buckets[_M_bucket_index(__new_node->_M_next())] = __new_node;
+ _M_buckets[__bkt] = &_M_before_begin;
+ }
}
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ void
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_remove_bucket_begin(size_type __bkt, _Node* __next, size_type __next_bkt)
+ {
+ if (!__next || __next_bkt != __bkt)
+ {
+ // Bucket is now empty
+ // First update next bucket if any
+ if (__next)
+ _M_buckets[__next_bkt] = _M_buckets[__bkt];
+ // Second update before begin node if necessary
+ if (&_M_before_begin == _M_buckets[__bkt])
+ _M_before_begin._M_nxt = __next;
+ _M_buckets[__bkt] = nullptr;
+ }
+ }
+
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey,
+ _Equal, _H1, _H2, _Hash, _RehashPolicy,
+ __chc, __cit, __uk>::_BaseNode*
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_get_previous_node(size_type __bkt, _BaseNode* __n)
+ {
+ _BaseNode* __prev_n = _M_buckets[__bkt];
+ while (__prev_n->_M_nxt != __n)
+ __prev_n = __prev_n->_M_nxt;
+ return __prev_n;
+ }
+
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ template<typename... _Args>
+ std::pair<typename _Hashtable<_Key, _Value, _Allocator,
+ _ExtractKey, _Equal, _H1,
+ _H2, _Hash, _RehashPolicy,
+ __chc, __cit, __uk>::iterator, bool>
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_emplace(std::true_type, _Args&&... __args)
+ {
+ // First build the node to get access to the hash code
+ _Node* __new_node = _M_allocate_node(std::forward<_Args>(__args)...);
+ __try
+ {
+ const key_type& __k = this->_M_extract()(__new_node->_M_v);
+ typename _Hashtable::_Hash_code_type __code
+ = this->_M_hash_code(__k);
+ size_type __bkt = _M_bucket_index(__k, __code);
+
+ if (_Node* __p = _M_find_node(__bkt, __k, __code))
+ {
+ // There is already an equivalent node, no insertion
+ _M_deallocate_node(__new_node);
+ return std::make_pair(iterator(__p), false);
+ }
+
+ // We are going to insert this node
+ this->_M_store_code(__new_node, __code);
+ const _RehashPolicyState& __saved_state
+ = _M_rehash_policy._M_state();
+ std::pair<bool, std::size_t> __do_rehash
+ = _M_rehash_policy._M_need_rehash(_M_bucket_count,
+ _M_element_count, 1);
+
+ if (__do_rehash.first)
+ {
+ _M_rehash(__do_rehash.second, __saved_state);
+ __bkt = _M_bucket_index(__k, __code);
+ }
+
+ _M_insert_bucket_begin(__bkt, __new_node);
+ ++_M_element_count;
+ return std::make_pair(iterator(__new_node), true);
+ }
+ __catch(...)
+ {
+ _M_deallocate_node(__new_node);
+ __throw_exception_again;
+ }
+ }
+
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ template<typename... _Args>
+ typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy,
+ __chc, __cit, __uk>::iterator
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_emplace(std::false_type, _Args&&... __args)
+ {
+ const _RehashPolicyState& __saved_state = _M_rehash_policy._M_state();
+ std::pair<bool, std::size_t> __do_rehash
+ = _M_rehash_policy._M_need_rehash(_M_bucket_count,
+ _M_element_count, 1);
+
+ // First build the node to get its hash code.
+ _Node* __new_node = _M_allocate_node(std::forward<_Args>(__args)...);
+ __try
+ {
+ const key_type& __k = this->_M_extract()(__new_node->_M_v);
+ typename _Hashtable::_Hash_code_type __code
+ = this->_M_hash_code(__k);
+ this->_M_store_code(__new_node, __code);
+
+ // Second, do rehash if necessary.
+ if (__do_rehash.first)
+ _M_rehash(__do_rehash.second, __saved_state);
+
+ // Third, find the node before an equivalent one.
+ size_type __bkt = _M_bucket_index(__k, __code);
+ _BaseNode* __prev = _M_find_before_node(__bkt, __k, __code);
+
+ if (__prev)
+ {
+ // Insert after the node before the equivalent one.
+ __new_node->_M_nxt = __prev->_M_nxt;
+ __prev->_M_nxt = __new_node;
+ }
+ else
+ // The inserted node has no equivalent in the hashtable. We must
+ // insert the new node at the beginning of the bucket to preserve
+ // equivalent elements' relative positions.
+ _M_insert_bucket_begin(__bkt, __new_node);
+ ++_M_element_count;
+ return iterator(__new_node);
+ }
+ __catch(...)
+ {
+ _M_deallocate_node(__new_node);
+ __throw_exception_again;
+ }
+ }
+
// Insert v in bucket n (assumes no element with its key already present).
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
@@ -908,36 +1279,37 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_insert_bucket(_Arg&& __v, size_type __n,
typename _Hashtable::_Hash_code_type __code)
{
+ const _RehashPolicyState& __saved_state = _M_rehash_policy._M_state();
std::pair<bool, std::size_t> __do_rehash
= _M_rehash_policy._M_need_rehash(_M_bucket_count,
_M_element_count, 1);
if (__do_rehash.first)
{
- const key_type& __k = this->_M_extract(__v);
- __n = this->_M_bucket_index(__k, __code, __do_rehash.second);
+ const key_type& __k = this->_M_extract()(__v);
+ __n = _HCBase::_M_bucket_index(__k, __code, __do_rehash.second);
}
- // Allocate the new node before doing the rehash so that we don't
- // do a rehash if the allocation throws.
- _Node* __new_node = _M_allocate_node(std::forward<_Arg>(__v));
-
+ _Node* __new_node = nullptr;
__try
{
+ // Allocate the new node before doing the rehash so that we
+ // don't do a rehash if the allocation throws.
+ __new_node = _M_allocate_node(std::forward<_Arg>(__v));
+ this->_M_store_code(__new_node, __code);
if (__do_rehash.first)
- _M_rehash(__do_rehash.second);
+ _M_rehash(__do_rehash.second, __saved_state);
- __new_node->_M_next = _M_buckets[__n];
- this->_M_store_code(__new_node, __code);
- _M_buckets[__n] = __new_node;
+ _M_insert_bucket_begin(__n, __new_node);
++_M_element_count;
- if (__n < _M_begin_bucket_index)
- _M_begin_bucket_index = __n;
- return iterator(__new_node, _M_buckets + __n);
+ return iterator(__new_node);
}
__catch(...)
{
- _M_deallocate_node(__new_node);
+ if (!__new_node)
+ _M_rehash_policy._M_reset(__saved_state);
+ else
+ _M_deallocate_node(__new_node);
__throw_exception_again;
}
}
@@ -956,12 +1328,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_M_insert(_Arg&& __v, std::true_type)
{
- const key_type& __k = this->_M_extract(__v);
+ const key_type& __k = this->_M_extract()(__v);
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- size_type __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
+ size_type __n = _M_bucket_index(__k, __code);
- if (_Node* __p = _M_find_node(_M_buckets[__n], __k, __code))
- return std::make_pair(iterator(__p, _M_buckets + __n), false);
+ if (_Node* __p = _M_find_node(__n, __k, __code))
+ return std::make_pair(iterator(__p), false);
return std::make_pair(_M_insert_bucket(std::forward<_Arg>(__v),
__n, __code), true);
}
@@ -979,36 +1351,51 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_M_insert(_Arg&& __v, std::false_type)
{
+ const _RehashPolicyState& __saved_state = _M_rehash_policy._M_state();
std::pair<bool, std::size_t> __do_rehash
= _M_rehash_policy._M_need_rehash(_M_bucket_count,
_M_element_count, 1);
- if (__do_rehash.first)
- _M_rehash(__do_rehash.second);
- const key_type& __k = this->_M_extract(__v);
- typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- size_type __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
+ // First compute the hash code so that we don't do anything if it throws.
+ typename _Hashtable::_Hash_code_type __code
+ = this->_M_hash_code(this->_M_extract()(__v));
- // First find the node, avoid leaking new_node if compare throws.
- _Node* __prev = _M_find_node(_M_buckets[__n], __k, __code);
- _Node* __new_node = _M_allocate_node(std::forward<_Arg>(__v));
-
- if (__prev)
+ _Node* __new_node = nullptr;
+ __try
{
- __new_node->_M_next = __prev->_M_next;
- __prev->_M_next = __new_node;
+ // Second allocate new node so that we don't rehash if it throws.
+ __new_node = _M_allocate_node(std::forward<_Arg>(__v));
+ this->_M_store_code(__new_node, __code);
+ if (__do_rehash.first)
+ _M_rehash(__do_rehash.second, __saved_state);
+
+ // Third, find the node before an equivalent one.
+ size_type __bkt = _M_bucket_index(__new_node);
+ _BaseNode* __prev
+ = _M_find_before_node(__bkt, this->_M_extract()(__new_node->_M_v),
+ __code);
+ if (__prev)
+ {
+ // Insert after the node before the equivalent one.
+ __new_node->_M_nxt = __prev->_M_nxt;
+ __prev->_M_nxt = __new_node;
+ }
+ else
+ // The inserted node has no equivalent in the hashtable. We must
+ // insert the new node at the beginning of the bucket to preserve
+ // equivalent elements relative positions.
+ _M_insert_bucket_begin(__bkt, __new_node);
+ ++_M_element_count;
+ return iterator(__new_node);
}
- else
+ __catch(...)
{
- __new_node->_M_next = _M_buckets[__n];
- _M_buckets[__n] = __new_node;
- if (__n < _M_begin_bucket_index)
- _M_begin_bucket_index = __n;
+ if (!__new_node)
+ _M_rehash_policy._M_reset(__saved_state);
+ else
+ _M_deallocate_node(__new_node);
+ __throw_exception_again;
}
- this->_M_store_code(__new_node, __code);
-
- ++_M_element_count;
- return iterator(__new_node, _M_buckets + __n);
}
template<typename _Key, typename _Value,
@@ -1022,11 +1409,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
insert(_InputIterator __first, _InputIterator __last)
{
size_type __n_elt = __detail::__distance_fw(__first, __last);
+ const _RehashPolicyState& __saved_state = _M_rehash_policy._M_state();
std::pair<bool, std::size_t> __do_rehash
= _M_rehash_policy._M_need_rehash(_M_bucket_count,
_M_element_count, __n_elt);
if (__do_rehash.first)
- _M_rehash(__do_rehash.second);
+ _M_rehash(__do_rehash.second, __saved_state);
for (; __first != __last; ++__first)
this->insert(*__first);
@@ -1043,31 +1431,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
erase(const_iterator __it)
{
- iterator __result(__it._M_cur_node, __it._M_cur_bucket);
- ++__result;
-
- _Node* __cur = *__it._M_cur_bucket;
- if (__cur == __it._M_cur_node)
+ _Node* __n = __it._M_cur;
+ std::size_t __bkt = _M_bucket_index(__n);
+
+ // Look for previous node to unlink it from the erased one, this is why
+ // we need buckets to contain the before begin to make this search fast.
+ _BaseNode* __prev_n = _M_get_previous_node(__bkt, __n);
+ if (__n == _M_bucket_begin(__bkt))
+ _M_remove_bucket_begin(__bkt, __n->_M_next(),
+ __n->_M_nxt ? _M_bucket_index(__n->_M_next()) : 0);
+ else if (__n->_M_nxt)
{
- *__it._M_cur_bucket = __cur->_M_next;
-
- // If _M_begin_bucket_index no longer indexes the first non-empty
- // bucket - its single node is being erased - update it.
- if (!_M_buckets[_M_begin_bucket_index])
- _M_begin_bucket_index = __result._M_cur_bucket - _M_buckets;
- }
- else
- {
- _Node* __next = __cur->_M_next;
- while (__next != __it._M_cur_node)
- {
- __cur = __next;
- __next = __cur->_M_next;
- }
- __cur->_M_next = __next->_M_next;
+ size_type __next_bkt = _M_bucket_index(__n->_M_next());
+ if (__next_bkt != __bkt)
+ _M_buckets[__next_bkt] = __prev_n;
}
- _M_deallocate_node(__it._M_cur_node);
+ __prev_n->_M_nxt = __n->_M_nxt;
+ iterator __result(__n->_M_next());
+ _M_deallocate_node(__n);
--_M_element_count;
return __result;
@@ -1085,64 +1467,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase(const key_type& __k)
{
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
- std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
+ std::size_t __bkt = _M_bucket_index(__k, __code);
+ // Look for the node before the first matching node.
+ _BaseNode* __prev_n = _M_find_before_node(__bkt, __k, __code);
+ if (!__prev_n)
+ return 0;
+ _Node* __n = static_cast<_Node*>(__prev_n->_M_nxt);
+ bool __is_bucket_begin = _M_buckets[__bkt] == __prev_n;
+
+ // We found a matching node, start deallocation loop from it
+ std::size_t __next_bkt = __bkt;
+ _Node* __next_n = __n;
size_type __result = 0;
-
- _Node** __slot = _M_buckets + __n;
- while (*__slot && !this->_M_compare(__k, __code, *__slot))
- __slot = &((*__slot)->_M_next);
-
- _Node** __saved_slot = 0;
- while (*__slot && this->_M_compare(__k, __code, *__slot))
+ _Node* __saved_n = nullptr;
+ do
{
+ _Node* __p = __next_n;
+ __next_n = __p->_M_next();
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 526. Is it undefined if a function in the standard changes
// in parameters?
- if (std::__addressof(this->_M_extract((*__slot)->_M_v))
+ if (std::__addressof(this->_M_extract()(__p->_M_v))
!= std::__addressof(__k))
- {
- _Node* __p = *__slot;
- *__slot = __p->_M_next;
- _M_deallocate_node(__p);
- --_M_element_count;
- ++__result;
- }
+ _M_deallocate_node(__p);
else
- {
- __saved_slot = __slot;
- __slot = &((*__slot)->_M_next);
- }
- }
-
- if (__saved_slot)
- {
- _Node* __p = *__saved_slot;
- *__saved_slot = __p->_M_next;
- _M_deallocate_node(__p);
+ __saved_n = __p;
--_M_element_count;
++__result;
+ if (!__next_n)
+ break;
+ __next_bkt = _M_bucket_index(__next_n);
}
-
- // If the entire bucket indexed by _M_begin_bucket_index has been
- // erased look forward for the first non-empty bucket.
- if (!_M_buckets[_M_begin_bucket_index])
- {
- if (!_M_element_count)
- _M_begin_bucket_index = _M_bucket_count;
- else
- {
- ++_M_begin_bucket_index;
- while (!_M_buckets[_M_begin_bucket_index])
- ++_M_begin_bucket_index;
- }
- }
-
+ while (__next_bkt == __bkt && this->_M_equals(__k, __code, __next_n));
+
+ if (__saved_n)
+ _M_deallocate_node(__saved_n);
+ if (__is_bucket_begin)
+ _M_remove_bucket_begin(__bkt, __next_n, __next_bkt);
+ else if (__next_n && __next_bkt != __bkt)
+ _M_buckets[__next_bkt] = __prev_n;
+ if (__prev_n)
+ __prev_n->_M_nxt = __next_n;
return __result;
}
- // ??? This could be optimized by taking advantage of the bucket
- // structure, but it's not clear that it's worth doing. It probably
- // wouldn't even be an optimization unless the load factor is large.
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
@@ -1154,9 +1522,41 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
erase(const_iterator __first, const_iterator __last)
{
- while (__first != __last)
- __first = this->erase(__first);
- return iterator(__last._M_cur_node, __last._M_cur_bucket);
+ _Node* __n = __first._M_cur;
+ _Node* __last_n = __last._M_cur;
+ if (__n == __last_n)
+ return iterator(__n);
+
+ std::size_t __bkt = _M_bucket_index(__n);
+
+ _BaseNode* __prev_n = _M_get_previous_node(__bkt, __n);
+ bool __is_bucket_begin = __n == _M_bucket_begin(__bkt);
+ std::size_t __n_bkt = __bkt;
+ for (;;)
+ {
+ do
+ {
+ _Node* __tmp = __n;
+ __n = __n->_M_next();
+ _M_deallocate_node(__tmp);
+ --_M_element_count;
+ if (!__n)
+ break;
+ __n_bkt = _M_bucket_index(__n);
+ }
+ while (__n != __last_n && __n_bkt == __bkt);
+ if (__is_bucket_begin)
+ _M_remove_bucket_begin(__bkt, __n, __n_bkt);
+ if (__n == __last_n)
+ break;
+ __is_bucket_begin = true;
+ __bkt = __n_bkt;
+ }
+
+ if (__n && (__n_bkt != __bkt || __is_bucket_begin))
+ _M_buckets[__n_bkt] = __prev_n;
+ __prev_n->_M_nxt = __n;
+ return iterator(__n);
}
template<typename _Key, typename _Value,
@@ -1166,11 +1566,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- clear()
+ clear() noexcept
{
- _M_deallocate_nodes(_M_buckets, _M_bucket_count);
+ _M_deallocate_nodes(_M_begin());
+ __builtin_memset(_M_buckets, 0, _M_bucket_count * sizeof(_Bucket));
_M_element_count = 0;
- _M_begin_bucket_index = _M_bucket_count;
+ _M_before_begin._M_nxt = nullptr;
}
template<typename _Key, typename _Value,
@@ -1182,9 +1583,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
rehash(size_type __n)
{
- _M_rehash(std::max(_M_rehash_policy._M_next_bkt(__n),
- _M_rehash_policy._M_bkt_for_elements(_M_element_count
- + 1)));
+ const _RehashPolicyState& __saved_state = _M_rehash_policy._M_state();
+ std::size_t __buckets
+ = _M_rehash_policy._M_bkt_for_elements(_M_element_count + 1);
+ if (__buckets <= __n)
+ __buckets = _M_rehash_policy._M_next_bkt(__n);
+
+ if (__buckets != _M_bucket_count)
+ {
+ _M_rehash(__buckets, __saved_state);
+
+ // We don't want the rehash policy to ask for the hashtable to shrink
+ // on the next insertion so we need to reset its previous resize
+ // level.
+ _M_rehash_policy._M_prev_resize = 0;
+ }
+ else
+ // No rehash, restore previous state to keep a consistent state.
+ _M_rehash_policy._M_reset(__saved_state);
}
template<typename _Key, typename _Value,
@@ -1194,41 +1610,149 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_rehash(size_type __n)
+ _M_rehash(size_type __n, const _RehashPolicyState& __state)
{
- _Node** __new_array = _M_allocate_buckets(__n);
__try
{
- _M_begin_bucket_index = __n;
- for (size_type __i = 0; __i < _M_bucket_count; ++__i)
- while (_Node* __p = _M_buckets[__i])
- {
- std::size_t __new_index = this->_M_bucket_index(__p, __n);
- _M_buckets[__i] = __p->_M_next;
- __p->_M_next = __new_array[__new_index];
- __new_array[__new_index] = __p;
- if (__new_index < _M_begin_bucket_index)
- _M_begin_bucket_index = __new_index;
- }
- _M_deallocate_buckets(_M_buckets, _M_bucket_count);
- _M_bucket_count = __n;
- _M_buckets = __new_array;
+ _M_rehash_aux(__n, integral_constant<bool, __uk>());
}
__catch(...)
{
- // A failure here means that a hash function threw an exception.
- // We can't restore the previous state without calling the hash
- // function again, so the only sensible recovery is to delete
- // everything.
- _M_deallocate_nodes(__new_array, __n);
- _M_deallocate_buckets(__new_array, __n);
- _M_deallocate_nodes(_M_buckets, _M_bucket_count);
- _M_element_count = 0;
- _M_begin_bucket_index = _M_bucket_count;
+ // A failure here means that buckets allocation failed. We only
+ // have to restore hash policy previous state.
+ _M_rehash_policy._M_reset(__state);
__throw_exception_again;
}
}
+ // Rehash when there is no equivalent elements.
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ void
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_rehash_aux(size_type __n, std::true_type)
+ {
+ _Bucket* __new_buckets = _M_allocate_buckets(__n);
+ _Node* __p = _M_begin();
+ _M_before_begin._M_nxt = nullptr;
+ std::size_t __bbegin_bkt = 0;
+ while (__p)
+ {
+ _Node* __next = __p->_M_next();
+ std::size_t __bkt = _HCBase::_M_bucket_index(__p, __n);
+ if (!__new_buckets[__bkt])
+ {
+ __p->_M_nxt = _M_before_begin._M_nxt;
+ _M_before_begin._M_nxt = __p;
+ __new_buckets[__bkt] = &_M_before_begin;
+ if (__p->_M_nxt)
+ __new_buckets[__bbegin_bkt] = __p;
+ __bbegin_bkt = __bkt;
+ }
+ else
+ {
+ __p->_M_nxt = __new_buckets[__bkt]->_M_nxt;
+ __new_buckets[__bkt]->_M_nxt = __p;
+ }
+ __p = __next;
+ }
+ _M_deallocate_buckets(_M_buckets, _M_bucket_count);
+ _M_bucket_count = __n;
+ _M_buckets = __new_buckets;
+ }
+
+ // Rehash when there can be equivalent elements, preserve their relative
+ // order.
+ template<typename _Key, typename _Value,
+ typename _Allocator, typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
+ bool __chc, bool __cit, bool __uk>
+ void
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+ _M_rehash_aux(size_type __n, std::false_type)
+ {
+ _Bucket* __new_buckets = _M_allocate_buckets(__n);
+
+ _Node* __p = _M_begin();
+ _M_before_begin._M_nxt = nullptr;
+ std::size_t __bbegin_bkt = 0;
+ std::size_t __prev_bkt = 0;
+ _Node* __prev_p = nullptr;
+ bool __check_bucket = false;
+
+ while (__p)
+ {
+ _Node* __next = __p->_M_next();
+ std::size_t __bkt = _HCBase::_M_bucket_index(__p, __n);
+
+ if (__prev_p && __prev_bkt == __bkt)
+ {
+ // Previous insert was already in this bucket, we insert after
+ // the previously inserted one to preserve equivalent elements
+ // relative order.
+ __p->_M_nxt = __prev_p->_M_nxt;
+ __prev_p->_M_nxt = __p;
+
+ // Inserting after a node in a bucket require to check that we
+ // haven't change the bucket last node, in this case next
+ // bucket containing its before begin node must be updated. We
+ // schedule a check as soon as we move out of the sequence of
+ // equivalent nodes to limit the number of checks.
+ __check_bucket = true;
+ }
+ else
+ {
+ if (__check_bucket)
+ {
+ // Check if we shall update the next bucket because of
+ // insertions into __prev_bkt bucket.
+ if (__prev_p->_M_nxt)
+ {
+ std::size_t __next_bkt
+ = _HCBase::_M_bucket_index(__prev_p->_M_next(), __n);
+ if (__next_bkt != __prev_bkt)
+ __new_buckets[__next_bkt] = __prev_p;
+ }
+ __check_bucket = false;
+ }
+ if (!__new_buckets[__bkt])
+ {
+ __p->_M_nxt = _M_before_begin._M_nxt;
+ _M_before_begin._M_nxt = __p;
+ __new_buckets[__bkt] = &_M_before_begin;
+ if (__p->_M_nxt)
+ __new_buckets[__bbegin_bkt] = __p;
+ __bbegin_bkt = __bkt;
+ }
+ else
+ {
+ __p->_M_nxt = __new_buckets[__bkt]->_M_nxt;
+ __new_buckets[__bkt]->_M_nxt = __p;
+ }
+ }
+
+ __prev_p = __p;
+ __prev_bkt = __bkt;
+ __p = __next;
+ }
+
+ if (__check_bucket && __prev_p->_M_nxt)
+ {
+ std::size_t __next_bkt
+ = _HCBase::_M_bucket_index(__prev_p->_M_next(), __n);
+ if (__next_bkt != __prev_bkt)
+ __new_buckets[__next_bkt] = __prev_p;
+ }
+
+ _M_deallocate_buckets(_M_buckets, _M_bucket_count);
+ _M_bucket_count = __n;
+ _M_buckets = __new_buckets;
+ }
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h
index f6e187616e..2359e93d70 100644
--- a/libstdc++-v3/include/bits/hashtable_policy.h
+++ b/libstdc++-v3/include/bits/hashtable_policy.h
@@ -1,6 +1,6 @@
// Internal policy header for unordered_set and unordered_map -*- C++ -*-
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,6 +59,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __distance_fw(__first, __last, _Tag());
}
+ // Helper type used to detect whether the hash functor is noexcept.
+ template <typename _Key, typename _Hash>
+ struct __is_noexcept_hash : std::integral_constant<bool,
+ noexcept(declval<const _Hash&>()(declval<const _Key&>()))>
+ {};
+
// Auxiliary types used for all instantiations of _Hashtable: nodes
// and iterators.
@@ -66,36 +72,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// template parameter of class template _Hashtable controls whether
// nodes also store a hash code. In some cases (e.g. strings) this
// may be a performance win.
+ struct _Hash_node_base
+ {
+ _Hash_node_base* _M_nxt;
+
+ _Hash_node_base()
+ : _M_nxt() { }
+ _Hash_node_base(_Hash_node_base* __next)
+ : _M_nxt(__next) { }
+ };
+
template<typename _Value, bool __cache_hash_code>
struct _Hash_node;
template<typename _Value>
- struct _Hash_node<_Value, true>
+ struct _Hash_node<_Value, true> : _Hash_node_base
{
_Value _M_v;
std::size_t _M_hash_code;
- _Hash_node* _M_next;
template<typename... _Args>
_Hash_node(_Args&&... __args)
- : _M_v(std::forward<_Args>(__args)...),
- _M_hash_code(), _M_next() { }
+ : _M_v(std::forward<_Args>(__args)...), _M_hash_code() { }
+
+ _Hash_node* _M_next() const
+ { return static_cast<_Hash_node*>(_M_nxt); }
};
template<typename _Value>
- struct _Hash_node<_Value, false>
+ struct _Hash_node<_Value, false> : _Hash_node_base
{
_Value _M_v;
- _Hash_node* _M_next;
template<typename... _Args>
_Hash_node(_Args&&... __args)
- : _M_v(std::forward<_Args>(__args)...),
- _M_next() { }
+ : _M_v(std::forward<_Args>(__args)...) { }
+
+ _Hash_node* _M_next() const
+ { return static_cast<_Hash_node*>(_M_nxt); }
};
- // Local iterators, used to iterate within a bucket but not between
- // buckets.
+ // Node iterators, used to iterate through all the hashtable.
template<typename _Value, bool __cache>
struct _Node_iterator_base
{
@@ -104,7 +121,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_incr()
- { _M_cur = _M_cur->_M_next; }
+ { _M_cur = _M_cur->_M_next(); }
_Hash_node<_Value, __cache>* _M_cur;
};
@@ -211,155 +228,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
};
- template<typename _Value, bool __cache>
- struct _Hashtable_iterator_base
- {
- _Hashtable_iterator_base(_Hash_node<_Value, __cache>* __node,
- _Hash_node<_Value, __cache>** __bucket)
- : _M_cur_node(__node), _M_cur_bucket(__bucket) { }
-
- void
- _M_incr()
- {
- _M_cur_node = _M_cur_node->_M_next;
- if (!_M_cur_node)
- _M_incr_bucket();
- }
-
- void
- _M_incr_bucket();
-
- _Hash_node<_Value, __cache>* _M_cur_node;
- _Hash_node<_Value, __cache>** _M_cur_bucket;
- };
-
- // Global iterators, used for arbitrary iteration within a hash
- // table. Larger and more expensive than local iterators.
- template<typename _Value, bool __cache>
- void
- _Hashtable_iterator_base<_Value, __cache>::
- _M_incr_bucket()
- {
- ++_M_cur_bucket;
-
- // This loop requires the bucket array to have a non-null sentinel.
- while (!*_M_cur_bucket)
- ++_M_cur_bucket;
- _M_cur_node = *_M_cur_bucket;
- }
-
- template<typename _Value, bool __cache>
- inline bool
- operator==(const _Hashtable_iterator_base<_Value, __cache>& __x,
- const _Hashtable_iterator_base<_Value, __cache>& __y)
- { return __x._M_cur_node == __y._M_cur_node; }
-
- template<typename _Value, bool __cache>
- inline bool
- operator!=(const _Hashtable_iterator_base<_Value, __cache>& __x,
- const _Hashtable_iterator_base<_Value, __cache>& __y)
- { return __x._M_cur_node != __y._M_cur_node; }
-
- template<typename _Value, bool __constant_iterators, bool __cache>
- struct _Hashtable_iterator
- : public _Hashtable_iterator_base<_Value, __cache>
- {
- typedef _Value value_type;
- typedef typename std::conditional<__constant_iterators,
- const _Value*, _Value*>::type
- pointer;
- typedef typename std::conditional<__constant_iterators,
- const _Value&, _Value&>::type
- reference;
- typedef std::ptrdiff_t difference_type;
- typedef std::forward_iterator_tag iterator_category;
-
- _Hashtable_iterator()
- : _Hashtable_iterator_base<_Value, __cache>(0, 0) { }
-
- _Hashtable_iterator(_Hash_node<_Value, __cache>* __p,
- _Hash_node<_Value, __cache>** __b)
- : _Hashtable_iterator_base<_Value, __cache>(__p, __b) { }
-
- explicit
- _Hashtable_iterator(_Hash_node<_Value, __cache>** __b)
- : _Hashtable_iterator_base<_Value, __cache>(*__b, __b) { }
-
- reference
- operator*() const
- { return this->_M_cur_node->_M_v; }
-
- pointer
- operator->() const
- { return std::__addressof(this->_M_cur_node->_M_v); }
-
- _Hashtable_iterator&
- operator++()
- {
- this->_M_incr();
- return *this;
- }
-
- _Hashtable_iterator
- operator++(int)
- {
- _Hashtable_iterator __tmp(*this);
- this->_M_incr();
- return __tmp;
- }
- };
-
- template<typename _Value, bool __constant_iterators, bool __cache>
- struct _Hashtable_const_iterator
- : public _Hashtable_iterator_base<_Value, __cache>
- {
- typedef _Value value_type;
- typedef const _Value* pointer;
- typedef const _Value& reference;
- typedef std::ptrdiff_t difference_type;
- typedef std::forward_iterator_tag iterator_category;
-
- _Hashtable_const_iterator()
- : _Hashtable_iterator_base<_Value, __cache>(0, 0) { }
-
- _Hashtable_const_iterator(_Hash_node<_Value, __cache>* __p,
- _Hash_node<_Value, __cache>** __b)
- : _Hashtable_iterator_base<_Value, __cache>(__p, __b) { }
-
- explicit
- _Hashtable_const_iterator(_Hash_node<_Value, __cache>** __b)
- : _Hashtable_iterator_base<_Value, __cache>(*__b, __b) { }
-
- _Hashtable_const_iterator(const _Hashtable_iterator<_Value,
- __constant_iterators, __cache>& __x)
- : _Hashtable_iterator_base<_Value, __cache>(__x._M_cur_node,
- __x._M_cur_bucket) { }
-
- reference
- operator*() const
- { return this->_M_cur_node->_M_v; }
-
- pointer
- operator->() const
- { return std::__addressof(this->_M_cur_node->_M_v); }
-
- _Hashtable_const_iterator&
- operator++()
- {
- this->_M_incr();
- return *this;
- }
-
- _Hashtable_const_iterator
- operator++(int)
- {
- _Hashtable_const_iterator __tmp(*this);
- this->_M_incr();
- return __tmp;
- }
- };
-
-
// Many of class template _Hashtable's template parameters are policy
// classes. These are defaults for the policies.
@@ -388,10 +256,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Prime_rehash_policy
{
_Prime_rehash_policy(float __z = 1.0)
- : _M_max_load_factor(__z), _M_growth_factor(2.f), _M_next_resize(0) { }
+ : _M_max_load_factor(__z), _M_prev_resize(0), _M_next_resize(0) { }
float
- max_load_factor() const
+ max_load_factor() const noexcept
{ return _M_max_load_factor; }
// Return a bucket size no smaller than n.
@@ -410,10 +278,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt,
std::size_t __n_ins) const;
+ typedef std::pair<std::size_t, std::size_t> _State;
+
+ _State
+ _M_state() const
+ { return std::make_pair(_M_prev_resize, _M_next_resize); }
+
+ void
+ _M_reset(const _State& __state)
+ {
+ _M_prev_resize = __state.first;
+ _M_next_resize = __state.second;
+ }
+
enum { _S_n_primes = sizeof(unsigned long) != 8 ? 256 : 256 + 48 };
+ static const std::size_t _S_growth_factor = 2;
+
float _M_max_load_factor;
- float _M_growth_factor;
+ mutable std::size_t _M_prev_resize;
mutable std::size_t _M_next_resize;
};
@@ -427,11 +310,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Prime_rehash_policy::
_M_next_bkt(std::size_t __n) const
{
- const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
- + _S_n_primes, __n);
- _M_next_resize =
- static_cast<std::size_t>(__builtin_ceil(*__p * _M_max_load_factor));
- return *__p;
+ // Optimize lookups involving the first elements of __prime_list.
+ // (useful to speed-up, eg, constructors)
+ static const unsigned char __fast_bkt[12]
+ = { 2, 2, 2, 3, 5, 5, 7, 7, 11, 11, 11, 11 };
+
+ const std::size_t __grown_n = __n * _S_growth_factor;
+ if (__grown_n <= 11)
+ {
+ _M_prev_resize = 0;
+ _M_next_resize
+ = __builtin_ceil(__fast_bkt[__grown_n]
+ * (long double)_M_max_load_factor);
+ return __fast_bkt[__grown_n];
+ }
+
+ const unsigned long* __next_bkt
+ = std::lower_bound(__prime_list + 5, __prime_list + _S_n_primes,
+ __grown_n);
+ const unsigned long* __prev_bkt
+ = std::lower_bound(__prime_list + 1, __next_bkt, __n / _S_growth_factor);
+
+ _M_prev_resize
+ = __builtin_floor(*(__prev_bkt - 1) * (long double)_M_max_load_factor);
+ _M_next_resize
+ = __builtin_ceil(*__next_bkt * (long double)_M_max_load_factor);
+ return *__next_bkt;
}
// Return the smallest prime p such that alpha p >= n, where alpha
@@ -439,14 +343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline std::size_t
_Prime_rehash_policy::
_M_bkt_for_elements(std::size_t __n) const
- {
- const float __min_bkts = __n / _M_max_load_factor;
- const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
- + _S_n_primes, __min_bkts);
- _M_next_resize =
- static_cast<std::size_t>(__builtin_ceil(*__p * _M_max_load_factor));
- return *__p;
- }
+ { return _M_next_bkt(__builtin_ceil(__n / (long double)_M_max_load_factor)); }
// Finds the smallest prime p such that alpha p > __n_elt + __n_ins.
// If p > __n_bkt, return make_pair(true, p); otherwise return
@@ -462,27 +359,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt,
std::size_t __n_ins) const
{
- if (__n_elt + __n_ins > _M_next_resize)
+ if (__n_elt + __n_ins >= _M_next_resize)
{
- float __min_bkts = ((float(__n_ins) + float(__n_elt))
- / _M_max_load_factor);
- if (__min_bkts > __n_bkt)
- {
- __min_bkts = std::max(__min_bkts, _M_growth_factor * __n_bkt);
- const unsigned long* __p =
- std::lower_bound(__prime_list, __prime_list + _S_n_primes,
- __min_bkts);
- _M_next_resize = static_cast<std::size_t>
- (__builtin_ceil(*__p * _M_max_load_factor));
- return std::make_pair(true, *__p);
- }
+ long double __min_bkts = (__n_elt + __n_ins)
+ / (long double)_M_max_load_factor;
+ if (__min_bkts >= __n_bkt)
+ return std::make_pair(true,
+ _M_next_bkt(__builtin_floor(__min_bkts) + 1));
else
{
- _M_next_resize = static_cast<std::size_t>
- (__builtin_ceil(__n_bkt * _M_max_load_factor));
+ _M_next_resize
+ = __builtin_floor(__n_bkt * (long double)_M_max_load_factor);
return std::make_pair(false, 0);
}
}
+ else if (__n_elt + __n_ins < _M_prev_resize)
+ {
+ long double __min_bkts = (__n_elt + __n_ins)
+ / (long double)_M_max_load_factor;
+ return std::make_pair(true,
+ _M_next_bkt(__builtin_floor(__min_bkts) + 1));
+ }
else
return std::make_pair(false, 0);
}
@@ -539,11 +436,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_Hashtable* __h = static_cast<_Hashtable*>(this);
typename _Hashtable::_Hash_code_type __code = __h->_M_hash_code(__k);
- std::size_t __n = __h->_M_bucket_index(__k, __code,
- __h->_M_bucket_count);
+ std::size_t __n = __h->_M_bucket_index(__k, __code);
- typename _Hashtable::_Node* __p =
- __h->_M_find_node(__h->_M_buckets[__n], __k, __code);
+ typename _Hashtable::_Node* __p = __h->_M_find_node(__n, __k, __code);
if (!__p)
return __h->_M_insert_bucket(std::make_pair(__k, mapped_type()),
__n, __code)->second;
@@ -558,11 +453,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_Hashtable* __h = static_cast<_Hashtable*>(this);
typename _Hashtable::_Hash_code_type __code = __h->_M_hash_code(__k);
- std::size_t __n = __h->_M_bucket_index(__k, __code,
- __h->_M_bucket_count);
+ std::size_t __n = __h->_M_bucket_index(__k, __code);
- typename _Hashtable::_Node* __p =
- __h->_M_find_node(__h->_M_buckets[__n], __k, __code);
+ typename _Hashtable::_Node* __p = __h->_M_find_node(__n, __k, __code);
if (!__p)
return __h->_M_insert_bucket(std::make_pair(std::move(__k),
mapped_type()),
@@ -578,11 +471,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_Hashtable* __h = static_cast<_Hashtable*>(this);
typename _Hashtable::_Hash_code_type __code = __h->_M_hash_code(__k);
- std::size_t __n = __h->_M_bucket_index(__k, __code,
- __h->_M_bucket_count);
+ std::size_t __n = __h->_M_bucket_index(__k, __code);
- typename _Hashtable::_Node* __p =
- __h->_M_find_node(__h->_M_buckets[__n], __k, __code);
+ typename _Hashtable::_Node* __p = __h->_M_find_node(__n, __k, __code);
if (!__p)
__throw_out_of_range(__N("_Map_base::at"));
return (__p->_M_v).second;
@@ -596,11 +487,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
const _Hashtable* __h = static_cast<const _Hashtable*>(this);
typename _Hashtable::_Hash_code_type __code = __h->_M_hash_code(__k);
- std::size_t __n = __h->_M_bucket_index(__k, __code,
- __h->_M_bucket_count);
+ std::size_t __n = __h->_M_bucket_index(__k, __code);
- typename _Hashtable::_Node* __p =
- __h->_M_find_node(__h->_M_buckets[__n], __k, __code);
+ typename _Hashtable::_Node* __p = __h->_M_find_node(__n, __k, __code);
if (!__p)
__throw_out_of_range(__N("_Map_base::at"));
return (__p->_M_v).second;
@@ -615,7 +504,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Rehash_base<_Prime_rehash_policy, _Hashtable>
{
float
- max_load_factor() const
+ max_load_factor() const noexcept
{
const _Hashtable* __this = static_cast<const _Hashtable*>(this);
return __this->__rehash_policy().max_load_factor();
@@ -636,6 +525,51 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
};
+ // Helper class using EBO when it is not forbidden, type is not final,
+ // and when it worth it, type is empty.
+ template<int _Nm, typename _Tp,
+ bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
+ struct _Hashtable_ebo_helper;
+
+ // Specialization using EBO.
+ template<int _Nm, typename _Tp>
+ struct _Hashtable_ebo_helper<_Nm, _Tp, true>
+ // See PR53067.
+ : public _Tp
+ {
+ _Hashtable_ebo_helper() = default;
+ _Hashtable_ebo_helper(const _Tp& __tp) : _Tp(__tp)
+ { }
+
+ static const _Tp&
+ _S_cget(const _Hashtable_ebo_helper& __eboh)
+ { return static_cast<const _Tp&>(__eboh); }
+
+ static _Tp&
+ _S_get(_Hashtable_ebo_helper& __eboh)
+ { return static_cast<_Tp&>(__eboh); }
+ };
+
+ // Specialization not using EBO.
+ template<int _Nm, typename _Tp>
+ struct _Hashtable_ebo_helper<_Nm, _Tp, false>
+ {
+ _Hashtable_ebo_helper() = default;
+ _Hashtable_ebo_helper(const _Tp& __tp) : _M_tp(__tp)
+ { }
+
+ static const _Tp&
+ _S_cget(const _Hashtable_ebo_helper& __eboh)
+ { return __eboh._M_tp; }
+
+ static _Tp&
+ _S_get(_Hashtable_ebo_helper& __eboh)
+ { return __eboh._M_tp; }
+
+ private:
+ _Tp _M_tp;
+ };
+
// Class template _Hash_code_base. Encapsulates two policy issues that
// aren't quite orthogonal.
// (1) the difference between using a ranged hash function and using
@@ -644,28 +578,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// we have a dummy type as placeholder.
// (2) Whether or not we cache hash codes. Caching hash codes is
// meaningless if we have a ranged hash function.
- // We also put the key extraction and equality comparison function
- // objects here, for convenience.
+ // We also put the key extraction objects here, for convenience.
+ //
+ // Each specialization derives from one or more of the template parameters to
+ // benefit from Ebo. This is important as this type is inherited in some cases
+ // by the _Local_iterator_base type used to implement local_iterator and
+ // const_local_iterator. As with any iterator type we prefer to make it as
+ // small as possible.
// Primary template: unused except as a hook for specializations.
- template<typename _Key, typename _Value,
- typename _ExtractKey, typename _Equal,
+ template<typename _Key, typename _Value, typename _ExtractKey,
typename _H1, typename _H2, typename _Hash,
bool __cache_hash_code>
struct _Hash_code_base;
// Specialization: ranged hash function, no caching hash codes. H1
// and H2 are provided but ignored. We define a dummy hash code type.
- template<typename _Key, typename _Value,
- typename _ExtractKey, typename _Equal,
+ template<typename _Key, typename _Value, typename _ExtractKey,
typename _H1, typename _H2, typename _Hash>
- struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2,
- _Hash, false>
+ struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, false>
+ // See PR53067.
+ : public _Hashtable_ebo_helper<0, _ExtractKey>,
+ public _Hashtable_ebo_helper<1, _Hash>
{
+ private:
+ typedef _Hashtable_ebo_helper<0, _ExtractKey> _EboExtractKey;
+ typedef _Hashtable_ebo_helper<1, _Hash> _EboHash;
+
protected:
- _Hash_code_base(const _ExtractKey& __ex, const _Equal& __eq,
+ // We need the default constructor for the local iterators.
+ _Hash_code_base() = default;
+ _Hash_code_base(const _ExtractKey& __ex,
const _H1&, const _H2&, const _Hash& __h)
- : _M_extract(__ex), _M_eq(__eq), _M_ranged_hash(__h) { }
+ : _EboExtractKey(__ex), _EboHash(__h) { }
typedef void* _Hash_code_type;
@@ -676,17 +621,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::size_t
_M_bucket_index(const _Key& __k, _Hash_code_type,
std::size_t __n) const
- { return _M_ranged_hash(__k, __n); }
+ { return _M_ranged_hash()(__k, __n); }
std::size_t
_M_bucket_index(const _Hash_node<_Value, false>* __p,
std::size_t __n) const
- { return _M_ranged_hash(_M_extract(__p->_M_v), __n); }
-
- bool
- _M_compare(const _Key& __k, _Hash_code_type,
- _Hash_node<_Value, false>* __n) const
- { return _M_eq(__k, _M_extract(__n->_M_v)); }
+ { return _M_ranged_hash()(_M_extract()(__p->_M_v), __n); }
void
_M_store_code(_Hash_node<_Value, false>*, _Hash_code_type) const
@@ -700,72 +640,78 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_swap(_Hash_code_base& __x)
{
- std::swap(_M_extract, __x._M_extract);
- std::swap(_M_eq, __x._M_eq);
- std::swap(_M_ranged_hash, __x._M_ranged_hash);
+ std::swap(_M_extract(), __x._M_extract());
+ std::swap(_M_ranged_hash(), __x._M_ranged_hash());
}
protected:
- _ExtractKey _M_extract;
- _Equal _M_eq;
- _Hash _M_ranged_hash;
+ const _ExtractKey&
+ _M_extract() const { return _EboExtractKey::_S_cget(*this); }
+ _ExtractKey&
+ _M_extract() { return _EboExtractKey::_S_get(*this); }
+ const _Hash&
+ _M_ranged_hash() const { return _EboHash::_S_cget(*this); }
+ _Hash&
+ _M_ranged_hash() { return _EboHash::_S_get(*this); }
};
-
// No specialization for ranged hash function while caching hash codes.
// That combination is meaningless, and trying to do it is an error.
-
// Specialization: ranged hash function, cache hash codes. This
// combination is meaningless, so we provide only a declaration
// and no definition.
- template<typename _Key, typename _Value,
- typename _ExtractKey, typename _Equal,
+ template<typename _Key, typename _Value, typename _ExtractKey,
typename _H1, typename _H2, typename _Hash>
- struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2,
- _Hash, true>;
+ struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, true>;
// Specialization: hash function and range-hashing function, no
- // caching of hash codes. H is provided but ignored. Provides
- // typedef and accessor required by TR1.
- template<typename _Key, typename _Value,
- typename _ExtractKey, typename _Equal,
+ // caching of hash codes.
+ // Provides typedef and accessor required by TR1.
+ template<typename _Key, typename _Value, typename _ExtractKey,
typename _H1, typename _H2>
- struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2,
+ struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
_Default_ranged_hash, false>
+ // See PR53067.
+ : public _Hashtable_ebo_helper<0, _ExtractKey>,
+ public _Hashtable_ebo_helper<1, _H1>,
+ public _Hashtable_ebo_helper<2, _H2>
{
+ private:
+ typedef _Hashtable_ebo_helper<0, _ExtractKey> _EboExtractKey;
+ typedef _Hashtable_ebo_helper<1, _H1> _EboH1;
+ typedef _Hashtable_ebo_helper<2, _H2> _EboH2;
+
+ public:
typedef _H1 hasher;
hasher
hash_function() const
- { return _M_h1; }
+ { return _M_h1(); }
protected:
- _Hash_code_base(const _ExtractKey& __ex, const _Equal& __eq,
+ // We need the default constructor for the local iterators.
+ _Hash_code_base() = default;
+ _Hash_code_base(const _ExtractKey& __ex,
const _H1& __h1, const _H2& __h2,
const _Default_ranged_hash&)
- : _M_extract(__ex), _M_eq(__eq), _M_h1(__h1), _M_h2(__h2) { }
+ : _EboExtractKey(__ex), _EboH1(__h1), _EboH2(__h2) { }
typedef std::size_t _Hash_code_type;
_Hash_code_type
_M_hash_code(const _Key& __k) const
- { return _M_h1(__k); }
+ { return _M_h1()(__k); }
std::size_t
_M_bucket_index(const _Key&, _Hash_code_type __c,
std::size_t __n) const
- { return _M_h2(__c, __n); }
+ { return _M_h2()(__c, __n); }
std::size_t
_M_bucket_index(const _Hash_node<_Value, false>* __p,
std::size_t __n) const
- { return _M_h2(_M_h1(_M_extract(__p->_M_v)), __n); }
-
- bool
- _M_compare(const _Key& __k, _Hash_code_type,
- _Hash_node<_Value, false>* __n) const
- { return _M_eq(__k, _M_extract(__n->_M_v)); }
+ { return _M_h2()(_M_h1()(_M_extract()(__p->_M_v)), __n); }
void
_M_store_code(_Hash_node<_Value, false>*, _Hash_code_type) const
@@ -779,60 +725,71 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_swap(_Hash_code_base& __x)
{
- std::swap(_M_extract, __x._M_extract);
- std::swap(_M_eq, __x._M_eq);
- std::swap(_M_h1, __x._M_h1);
- std::swap(_M_h2, __x._M_h2);
+ std::swap(_M_extract(), __x._M_extract());
+ std::swap(_M_h1(), __x._M_h1());
+ std::swap(_M_h2(), __x._M_h2());
}
protected:
- _ExtractKey _M_extract;
- _Equal _M_eq;
- _H1 _M_h1;
- _H2 _M_h2;
+ const _ExtractKey&
+ _M_extract() const { return _EboExtractKey::_S_cget(*this); }
+ _ExtractKey&
+ _M_extract() { return _EboExtractKey::_S_get(*this); }
+ const _H1&
+ _M_h1() const { return _EboH1::_S_cget(*this); }
+ _H1&
+ _M_h1() { return _EboH1::_S_get(*this); }
+ const _H2&
+ _M_h2() const { return _EboH2::_S_cget(*this); }
+ _H2&
+ _M_h2() { return _EboH2::_S_get(*this); }
};
// Specialization: hash function and range-hashing function,
// caching hash codes. H is provided but ignored. Provides
// typedef and accessor required by TR1.
- template<typename _Key, typename _Value,
- typename _ExtractKey, typename _Equal,
+ template<typename _Key, typename _Value, typename _ExtractKey,
typename _H1, typename _H2>
- struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2,
+ struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
_Default_ranged_hash, true>
+ // See PR53067.
+ : public _Hashtable_ebo_helper<0, _ExtractKey>,
+ public _Hashtable_ebo_helper<1, _H1>,
+ public _Hashtable_ebo_helper<2, _H2>
{
+ private:
+ typedef _Hashtable_ebo_helper<0, _ExtractKey> _EboExtractKey;
+ typedef _Hashtable_ebo_helper<1, _H1> _EboH1;
+ typedef _Hashtable_ebo_helper<2, _H2> _EboH2;
+
+ public:
typedef _H1 hasher;
hasher
hash_function() const
- { return _M_h1; }
+ { return _M_h1(); }
protected:
- _Hash_code_base(const _ExtractKey& __ex, const _Equal& __eq,
+ _Hash_code_base(const _ExtractKey& __ex,
const _H1& __h1, const _H2& __h2,
const _Default_ranged_hash&)
- : _M_extract(__ex), _M_eq(__eq), _M_h1(__h1), _M_h2(__h2) { }
+ : _EboExtractKey(__ex), _EboH1(__h1), _EboH2(__h2) { }
typedef std::size_t _Hash_code_type;
_Hash_code_type
_M_hash_code(const _Key& __k) const
- { return _M_h1(__k); }
+ { return _M_h1()(__k); }
std::size_t
_M_bucket_index(const _Key&, _Hash_code_type __c,
std::size_t __n) const
- { return _M_h2(__c, __n); }
+ { return _M_h2()(__c, __n); }
std::size_t
_M_bucket_index(const _Hash_node<_Value, true>* __p,
std::size_t __n) const
- { return _M_h2(__p->_M_hash_code, __n); }
-
- bool
- _M_compare(const _Key& __k, _Hash_code_type __c,
- _Hash_node<_Value, true>* __n) const
- { return __c == __n->_M_hash_code && _M_eq(__k, _M_extract(__n->_M_v)); }
+ { return _M_h2()(__p->_M_hash_code, __n); }
void
_M_store_code(_Hash_node<_Value, true>* __n, _Hash_code_type __c) const
@@ -846,17 +803,294 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_swap(_Hash_code_base& __x)
{
- std::swap(_M_extract, __x._M_extract);
- std::swap(_M_eq, __x._M_eq);
- std::swap(_M_h1, __x._M_h1);
- std::swap(_M_h2, __x._M_h2);
+ std::swap(_M_extract(), __x._M_extract());
+ std::swap(_M_h1(), __x._M_h1());
+ std::swap(_M_h2(), __x._M_h2());
}
protected:
- _ExtractKey _M_extract;
- _Equal _M_eq;
- _H1 _M_h1;
- _H2 _M_h2;
+ const _ExtractKey&
+ _M_extract() const { return _EboExtractKey::_S_cget(*this); }
+ _ExtractKey&
+ _M_extract() { return _EboExtractKey::_S_get(*this); }
+ const _H1&
+ _M_h1() const { return _EboH1::_S_cget(*this); }
+ _H1&
+ _M_h1() { return _EboH1::_S_get(*this); }
+ const _H2&
+ _M_h2() const { return _EboH2::_S_cget(*this); }
+ _H2&
+ _M_h2() { return _EboH2::_S_get(*this); }
+ };
+
+ template <typename _Key, typename _Value, typename _ExtractKey,
+ typename _Equal, typename _HashCodeType,
+ bool __cache_hash_code>
+ struct _Equal_helper;
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _Equal, typename _HashCodeType>
+ struct _Equal_helper<_Key, _Value, _ExtractKey, _Equal, _HashCodeType, true>
+ {
+ static bool
+ _S_equals(const _Equal& __eq, const _ExtractKey& __extract,
+ const _Key& __k, _HashCodeType __c,
+ _Hash_node<_Value, true>* __n)
+ { return __c == __n->_M_hash_code
+ && __eq(__k, __extract(__n->_M_v)); }
+ };
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _Equal, typename _HashCodeType>
+ struct _Equal_helper<_Key, _Value, _ExtractKey, _Equal, _HashCodeType, false>
+ {
+ static bool
+ _S_equals(const _Equal& __eq, const _ExtractKey& __extract,
+ const _Key& __k, _HashCodeType,
+ _Hash_node<_Value, false>* __n)
+ { return __eq(__k, __extract(__n->_M_v)); }
+ };
+
+ // Helper class adding management of _Equal functor to _Hash_code_base
+ // type.
+ template<typename _Key, typename _Value,
+ typename _ExtractKey, typename _Equal,
+ typename _H1, typename _H2, typename _Hash,
+ bool __cache_hash_code>
+ struct _Hashtable_base
+ // See PR53067.
+ : public _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash,
+ __cache_hash_code>,
+ public _Hashtable_ebo_helper<0, _Equal>
+ {
+ private:
+ typedef _Hashtable_ebo_helper<0, _Equal> _EboEqual;
+
+ protected:
+ typedef _Hash_code_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache_hash_code> _HCBase;
+ typedef typename _HCBase::_Hash_code_type _Hash_code_type;
+
+ _Hashtable_base(const _ExtractKey& __ex,
+ const _H1& __h1, const _H2& __h2,
+ const _Hash& __hash, const _Equal& __eq)
+ : _HCBase(__ex, __h1, __h2, __hash), _EboEqual(__eq) { }
+
+ bool
+ _M_equals(const _Key& __k, _Hash_code_type __c,
+ _Hash_node<_Value, __cache_hash_code>* __n) const
+ {
+ typedef _Equal_helper<_Key, _Value, _ExtractKey,
+ _Equal, _Hash_code_type,
+ __cache_hash_code> _EqualHelper;
+ return _EqualHelper::_S_equals(_M_eq(), this->_M_extract(),
+ __k, __c, __n);
+ }
+
+ void
+ _M_swap(_Hashtable_base& __x)
+ {
+ _HCBase::_M_swap(__x);
+ std::swap(_M_eq(), __x._M_eq());
+ }
+
+ protected:
+ const _Equal&
+ _M_eq() const { return _EboEqual::_S_cget(*this); }
+ _Equal&
+ _M_eq() { return _EboEqual::_S_get(*this); }
+ };
+
+ // Local iterators, used to iterate within a bucket but not between
+ // buckets.
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash,
+ bool __cache_hash_code>
+ struct _Local_iterator_base;
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash>
+ struct _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, true>
+ // See PR53067.
+ : public _H2
+ {
+ _Local_iterator_base() = default;
+ _Local_iterator_base(_Hash_node<_Value, true>* __p,
+ std::size_t __bkt, std::size_t __bkt_count)
+ : _M_cur(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) { }
+
+ void
+ _M_incr()
+ {
+ _M_cur = _M_cur->_M_next();
+ if (_M_cur)
+ {
+ std::size_t __bkt = _M_h2()(_M_cur->_M_hash_code, _M_bucket_count);
+ if (__bkt != _M_bucket)
+ _M_cur = nullptr;
+ }
+ }
+
+ const _H2& _M_h2() const
+ { return *this; }
+
+ _Hash_node<_Value, true>* _M_cur;
+ std::size_t _M_bucket;
+ std::size_t _M_bucket_count;
+ };
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash>
+ struct _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, false>
+ // See PR53067.
+ : public _Hash_code_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, false>
+ {
+ _Local_iterator_base() = default;
+ _Local_iterator_base(_Hash_node<_Value, false>* __p,
+ std::size_t __bkt, std::size_t __bkt_count)
+ : _M_cur(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) { }
+
+ void
+ _M_incr()
+ {
+ _M_cur = _M_cur->_M_next();
+ if (_M_cur)
+ {
+ std::size_t __bkt = this->_M_bucket_index(_M_cur, _M_bucket_count);
+ if (__bkt != _M_bucket)
+ _M_cur = nullptr;
+ }
+ }
+
+ _Hash_node<_Value, false>* _M_cur;
+ std::size_t _M_bucket;
+ std::size_t _M_bucket_count;
+ };
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash, bool __cache>
+ inline bool
+ operator==(const _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache>& __x,
+ const _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache>& __y)
+ { return __x._M_cur == __y._M_cur; }
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash, bool __cache>
+ inline bool
+ operator!=(const _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache>& __x,
+ const _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache>& __y)
+ { return __x._M_cur != __y._M_cur; }
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash,
+ bool __constant_iterators, bool __cache>
+ struct _Local_iterator
+ : public _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache>
+ {
+ typedef _Value value_type;
+ typedef typename std::conditional<__constant_iterators,
+ const _Value*, _Value*>::type
+ pointer;
+ typedef typename std::conditional<__constant_iterators,
+ const _Value&, _Value&>::type
+ reference;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::forward_iterator_tag iterator_category;
+
+ _Local_iterator() = default;
+
+ explicit
+ _Local_iterator(_Hash_node<_Value, __cache>* __p,
+ std::size_t __bkt, std::size_t __bkt_count)
+ : _Local_iterator_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash,
+ __cache>(__p, __bkt, __bkt_count)
+ { }
+
+ reference
+ operator*() const
+ { return this->_M_cur->_M_v; }
+
+ pointer
+ operator->() const
+ { return std::__addressof(this->_M_cur->_M_v); }
+
+ _Local_iterator&
+ operator++()
+ {
+ this->_M_incr();
+ return *this;
+ }
+
+ _Local_iterator
+ operator++(int)
+ {
+ _Local_iterator __tmp(*this);
+ this->_M_incr();
+ return __tmp;
+ }
+ };
+
+ template<typename _Key, typename _Value, typename _ExtractKey,
+ typename _H1, typename _H2, typename _Hash,
+ bool __constant_iterators, bool __cache>
+ struct _Local_const_iterator
+ : public _Local_iterator_base<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash, __cache>
+ {
+ typedef _Value value_type;
+ typedef const _Value* pointer;
+ typedef const _Value& reference;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::forward_iterator_tag iterator_category;
+
+ _Local_const_iterator() = default;
+
+ explicit
+ _Local_const_iterator(_Hash_node<_Value, __cache>* __p,
+ std::size_t __bkt, std::size_t __bkt_count)
+ : _Local_iterator_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash,
+ __cache>(__p, __bkt, __bkt_count)
+ { }
+
+ _Local_const_iterator(const _Local_iterator<_Key, _Value, _ExtractKey,
+ _H1, _H2, _Hash,
+ __constant_iterators,
+ __cache>& __x)
+ : _Local_iterator_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash,
+ __cache>(__x._M_cur, __x._M_bucket,
+ __x._M_bucket_count)
+ { }
+
+ reference
+ operator*() const
+ { return this->_M_cur->_M_v; }
+
+ pointer
+ operator->() const
+ { return std::__addressof(this->_M_cur->_M_v); }
+
+ _Local_const_iterator&
+ operator++()
+ {
+ this->_M_incr();
+ return *this;
+ }
+
+ _Local_const_iterator
+ operator++(int)
+ {
+ _Local_const_iterator __tmp(*this);
+ this->_M_incr();
+ return __tmp;
+ }
};
@@ -887,7 +1121,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (auto __itx = __this->begin(); __itx != __this->end(); ++__itx)
{
const auto __ity = __other.find(_ExtractKey()(*__itx));
- if (__ity == __other.end() || *__ity != *__itx)
+ if (__ity == __other.end() || !bool(*__ity == *__itx))
return false;
}
return true;
@@ -925,7 +1159,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (_Uiterator __it1 = __first1; __it1 != __last1; ++__it1)
{
_Uiterator __tmp = __first1;
- while (__tmp != __it1 && !(*__tmp == *__it1))
+ while (__tmp != __it1 && !bool(*__tmp == *__it1))
++__tmp;
// We've seen this one before.
diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h
index 8825657a2a..ace307cba5 100644
--- a/libstdc++-v3/include/bits/ios_base.h
+++ b/libstdc++-v3/include/bits/ios_base.h
@@ -427,15 +427,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief The type of an event callback function.
- * @param event One of the members of the event enum.
- * @param ios_base Reference to the ios_base object.
- * @param int The integer provided when the callback was registered.
+ * @param __e One of the members of the event enum.
+ * @param __b Reference to the ios_base object.
+ * @param __i The integer provided when the callback was registered.
*
* Event callbacks are user defined functions that get called during
* several ios_base and basic_ios functions, specifically imbue(),
* copyfmt(), and ~ios().
*/
- typedef void (*event_callback) (event, ios_base&, int);
+ typedef void (*event_callback) (event __e, ios_base& __b, int __i);
/**
* @brief Add the callback __fn with parameter __index.
@@ -555,10 +555,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting new format flags all at once.
- * @param fmtfl The new flags to set.
+ * @param __fmtfl The new flags to set.
* @return The previous format control flags.
*
- * This function overwrites all the format flags with @a fmtfl.
+ * This function overwrites all the format flags with @a __fmtfl.
*/
fmtflags
flags(fmtflags __fmtfl)
@@ -570,7 +570,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting new format flags.
- * @param fmtfl Additional flags to set.
+ * @param __fmtfl Additional flags to set.
* @return The previous format control flags.
*
* This function sets additional flags in format control. Flags that
@@ -586,8 +586,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting new format flags.
- * @param fmtfl Additional flags to set.
- * @param mask The flags mask for @a fmtfl.
+ * @param __fmtfl Additional flags to set.
+ * @param __mask The flags mask for @a fmtfl.
* @return The previous format control flags.
*
* This function clears @a mask in the format flags, then sets
@@ -604,9 +604,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Clearing format flags.
- * @param mask The flags to unset.
+ * @param __mask The flags to unset.
*
- * This function clears @a mask in the format flags.
+ * This function clears @a __mask in the format flags.
*/
void
unsetf(fmtflags __mask)
@@ -625,7 +625,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Changing flags.
- * @param prec The new precision value.
+ * @param __prec The new precision value.
* @return The previous value of precision().
*/
streamsize
@@ -648,7 +648,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Changing flags.
- * @param wide The new width value.
+ * @param __wide The new width value.
* @return The previous value of width().
*/
streamsize
@@ -662,7 +662,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.4.2.4] ios_base static members
/**
* @brief Interaction with the standard C I/O objects.
- * @param sync Whether to synchronize or not.
+ * @param __sync Whether to synchronize or not.
* @return True if the standard streams were previously synchronized.
*
* The synchronization referred to is @e only that between the standard
@@ -676,7 +676,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.4.2.3] ios_base locale functions
/**
* @brief Setting a new locale.
- * @param loc The new locale.
+ * @param __loc The new locale.
* @return The previous locale.
*
* Sets the new locale for this stream, and then invokes each callback
diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc
index 01c1bc6449..727e82d3d8 100644
--- a/libstdc++-v3/include/bits/list.tcc
+++ b/libstdc++-v3/include/bits/list.tcc
@@ -1,7 +1,7 @@
// List implementation (out of line) -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -67,8 +67,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_clear()
{
typedef _List_node<_Tp> _Node;
- _Node* __cur = static_cast<_Node*>(this->_M_impl._M_node._M_next);
- while (__cur != &this->_M_impl._M_node)
+ _Node* __cur = static_cast<_Node*>(_M_impl._M_node._M_next);
+ while (__cur != &_M_impl._M_node)
{
_Node* __tmp = __cur;
__cur = static_cast<_Node*>(__cur->_M_next);
diff --git a/libstdc++-v3/include/bits/locale_classes.h b/libstdc++-v3/include/bits/locale_classes.h
index 80ba735268..4beca40d34 100644
--- a/libstdc++-v3/include/bits/locale_classes.h
+++ b/libstdc++-v3/include/bits/locale_classes.h
@@ -123,7 +123,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* Constructs a copy of @a other.
*
- * @param other The locale to copy.
+ * @param __other The locale to copy.
*/
locale(const locale& __other) throw();
@@ -132,8 +132,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* Constructs a copy of the named C library locale.
*
- * @param s Name of the locale to construct.
- * @throw std::runtime_error if s is null or an undefined locale.
+ * @param __s Name of the locale to construct.
+ * @throw std::runtime_error if __s is null or an undefined locale.
*/
explicit
locale(const char* __s);
@@ -145,10 +145,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* cat are replaced with those from the locale named by @a s. If base is
* named, this locale instance will also be named.
*
- * @param base The locale to copy.
- * @param s Name of the locale to use facets from.
- * @param cat Set of categories defining the facets to use from s.
- * @throw std::runtime_error if s is null or an undefined locale.
+ * @param __base The locale to copy.
+ * @param __s Name of the locale to use facets from.
+ * @param __cat Set of categories defining the facets to use from __s.
+ * @throw std::runtime_error if __s is null or an undefined locale.
*/
locale(const locale& __base, const char* __s, category __cat);
@@ -159,21 +159,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* cat are replaced with those from the locale @a add. If @a base and @a
* add are named, this locale instance will also be named.
*
- * @param base The locale to copy.
- * @param add The locale to use facets from.
- * @param cat Set of categories defining the facets to use from add.
+ * @param __base The locale to copy.
+ * @param __add The locale to use facets from.
+ * @param __cat Set of categories defining the facets to use from add.
*/
locale(const locale& __base, const locale& __add, category __cat);
/**
* @brief Construct locale with another facet.
*
- * Constructs a copy of the locale @a other. The facet @f is added to
- * @other, replacing an existing facet of type Facet if there is one. If
- * @f is null, this locale is a copy of @a other.
+ * Constructs a copy of the locale @a __other. The facet @a __f
+ * is added to @a __other, replacing an existing facet of type
+ * Facet if there is one. If @a __f is null, this locale is a
+ * copy of @a __other.
*
- * @param other The locale to copy.
- * @param f The facet to add in.
+ * @param __other The locale to copy.
+ * @param __f The facet to add in.
*/
template<typename _Facet>
locale(const locale& __other, _Facet* __f);
@@ -186,7 +187,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* Set this locale to be a copy of @a other.
*
- * @param other The locale to copy.
+ * @param __other The locale to copy.
* @return A reference to this locale.
*/
const locale&
@@ -199,10 +200,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* existing facet of type Facet from the locale @a other into the new
* locale.
*
- * @param Facet The facet type to copy from other
- * @param other The locale to copy from.
+ * @tparam _Facet The facet type to copy from other
+ * @param __other The locale to copy from.
* @return Newly constructed locale.
- * @throw std::runtime_error if other has no facet of type Facet.
+ * @throw std::runtime_error if __other has no facet of type _Facet.
*/
template<typename _Facet>
locale
@@ -219,7 +220,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Locale equality.
*
- * @param other The locale to compare against.
+ * @param __other The locale to compare against.
* @return True if other and this refer to the same locale instance, are
* copies, or have the same name. False otherwise.
*/
@@ -229,8 +230,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Locale inequality.
*
- * @param other The locale to compare against.
- * @return ! (*this == other)
+ * @param __other The locale to compare against.
+ * @return ! (*this == __other)
*/
bool
operator!=(const locale& __other) const throw()
@@ -247,9 +248,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* std::sort(v.begin(), v.end(), loc);
* @endcode
*
- * @param s1 First string to compare.
- * @param s2 Second string to compare.
- * @return True if collate<Char> facet compares s1 < s2, else false.
+ * @param __s1 First string to compare.
+ * @param __s2 Second string to compare.
+ * @return True if collate<_Char> facet compares __s1 < __s2, else false.
*/
template<typename _Char, typename _Traits, typename _Alloc>
bool
@@ -264,11 +265,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* copy of the previous global locale. If the argument has a name, it
* will also call std::setlocale(LC_ALL, loc.name()).
*
- * @param locale The new locale to make global.
+ * @param __loc The new locale to make global.
* @return Copy of the old global locale.
*/
static locale
- global(const locale&);
+ global(const locale& __loc);
/**
* @brief Return reference to the C locale.
@@ -365,7 +366,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* facet is destroyed when the last referencing locale is destroyed.
* Otherwise the facet will never be destroyed.
*
- * @param refs The initial value for reference count.
+ * @param __refs The initial value for reference count.
*/
explicit
facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
@@ -570,39 +571,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @brief Test for the presence of a facet.
- *
- * has_facet tests the locale argument for the presence of the facet type
- * provided as the template parameter. Facets derived from the facet
- * parameter will also return true.
- *
- * @param Facet The facet type to test the presence of.
- * @param locale The locale to test.
- * @return true if locale contains a facet of type Facet, else false.
- */
- template<typename _Facet>
- bool
- has_facet(const locale& __loc) throw();
-
- /**
- * @brief Return a facet.
- *
- * use_facet looks for and returns a reference to a facet of type Facet
- * where Facet is the template parameter. If has_facet(locale) is true,
- * there is a suitable facet to return. It throws std::bad_cast if the
- * locale doesn't contain a facet of type Facet.
- *
- * @param Facet The facet type to access.
- * @param locale The locale to use.
- * @return Reference to facet of type Facet.
- * @throw std::bad_cast if locale doesn't contain a facet of type Facet.
- */
- template<typename _Facet>
- const _Facet&
- use_facet(const locale& __loc);
-
-
- /**
* @brief Facet for localized string comparison.
*
* This facet encapsulates the code to compare strings in a localized
@@ -639,7 +607,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
collate(size_t __refs = 0)
@@ -652,8 +620,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This is a constructor for use by the library itself to set up new
* locales.
*
- * @param cloc The C locale.
- * @param refs Passed to the base facet class.
+ * @param __cloc The C locale.
+ * @param __refs Passed to the base facet class.
*/
explicit
collate(__c_locale __cloc, size_t __refs = 0)
@@ -666,10 +634,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function compares two strings and returns the result by calling
* collate::do_compare().
*
- * @param lo1 Start of string 1.
- * @param hi1 End of string 1.
- * @param lo2 Start of string 2.
- * @param hi2 End of string 2.
+ * @param __lo1 Start of string 1.
+ * @param __hi1 End of string 1.
+ * @param __lo2 Start of string 2.
+ * @param __hi2 End of string 2.
* @return 1 if string1 > string2, -1 if string1 < string2, else 0.
*/
int
@@ -687,8 +655,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* locales, it may replace two chars with one, change a char for
* another, etc. It does so by returning collate::do_transform().
*
- * @param lo Start of string.
- * @param hi End of string.
+ * @param __lo Start of string.
+ * @param __hi End of string.
* @return Transformed string_type.
*/
string_type
@@ -701,8 +669,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function computes and returns a hash on the input string. It
* does so by returning collate::do_hash().
*
- * @param lo Start of string.
- * @param hi End of string.
+ * @param __lo Start of string.
+ * @param __hi End of string.
* @return Hash value.
*/
long
@@ -728,10 +696,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function is a hook for derived classes to change the value
* returned. @see compare().
*
- * @param lo1 Start of string 1.
- * @param hi1 End of string 1.
- * @param lo2 Start of string 2.
- * @param hi2 End of string 2.
+ * @param __lo1 Start of string 1.
+ * @param __hi1 End of string 1.
+ * @param __lo2 Start of string 2.
+ * @param __hi2 End of string 2.
* @return 1 if string1 > string2, -1 if string1 < string2, else 0.
*/
virtual int
@@ -744,11 +712,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function is a hook for derived classes to change the value
* returned.
*
- * @param lo1 Start of string 1.
- * @param hi1 End of string 1.
- * @param lo2 Start of string 2.
- * @param hi2 End of string 2.
- * @return 1 if string1 > string2, -1 if string1 < string2, else 0.
+ * @param __lo Start.
+ * @param __hi End.
+ * @return transformed string.
*/
virtual string_type
do_transform(const _CharT* __lo, const _CharT* __hi) const;
@@ -759,8 +725,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function computes and returns a hash on the input string. This
* function is a hook for derived classes to change the value returned.
*
- * @param lo Start of string.
- * @param hi End of string.
+ * @param __lo Start of string.
+ * @param __hi End of string.
* @return Hash value.
*/
virtual long
diff --git a/libstdc++-v3/include/bits/locale_classes.tcc b/libstdc++-v3/include/bits/locale_classes.tcc
index 5b2901aea9..c796e0eaa4 100644
--- a/libstdc++-v3/include/bits/locale_classes.tcc
+++ b/libstdc++-v3/include/bits/locale_classes.tcc
@@ -87,7 +87,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__s2.data(), __s2.data() + __s2.length()) < 0);
}
-
+ /**
+ * @brief Test for the presence of a facet.
+ *
+ * has_facet tests the locale argument for the presence of the facet type
+ * provided as the template parameter. Facets derived from the facet
+ * parameter will also return true.
+ *
+ * @tparam _Facet The facet type to test the presence of.
+ * @param __loc The locale to test.
+ * @return true if @p __loc contains a facet of type _Facet, else false.
+ */
template<typename _Facet>
bool
has_facet(const locale& __loc) throw()
@@ -102,6 +112,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
}
+ /**
+ * @brief Return a facet.
+ *
+ * use_facet looks for and returns a reference to a facet of type Facet
+ * where Facet is the template parameter. If has_facet(locale) is true,
+ * there is a suitable facet to return. It throws std::bad_cast if the
+ * locale doesn't contain a facet of type Facet.
+ *
+ * @tparam _Facet The facet type to access.
+ * @param __loc The locale to use.
+ * @return Reference to facet of type Facet.
+ * @throw std::bad_cast if @p __loc doesn't contain a facet of type _Facet.
+ */
template<typename _Facet>
const _Facet&
use_facet(const locale& __loc)
diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h
index 41732f3c4a..dc95f5a755 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -152,12 +152,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test char_type classification.
*
- * This function finds a mask M for @a c and compares it to mask @a m.
- * It does so by returning the value of ctype<char_type>::do_is().
+ * This function finds a mask M for @a __c and compares it to
+ * mask @a __m. It does so by returning the value of
+ * ctype<char_type>::do_is().
*
- * @param c The char_type to compare the mask of.
- * @param m The mask to compare against.
- * @return (M & m) != 0.
+ * @param __c The char_type to compare the mask of.
+ * @param __m The mask to compare against.
+ * @return (M & __m) != 0.
*/
bool
is(mask __m, char_type __c) const
@@ -171,10 +172,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* as the char array. It does so by returning the value of
* ctype<char_type>::do_is().
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param vec Pointer to an array of mask storage.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __vec Pointer to an array of mask storage.
+ * @return @a __hi.
*/
const char_type*
is(const char_type *__lo, const char_type *__hi, mask *__vec) const
@@ -187,10 +188,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* [lo,hi) for which is(m,c) is true. It does so by returning
* ctype<char_type>::do_scan_is().
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to matching char_type if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to matching char_type if found, else @a __hi.
*/
const char_type*
scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
@@ -203,10 +204,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* [lo,hi) for which is(m,c) is false. It does so by returning
* ctype<char_type>::do_scan_not().
*
- * @param m The mask to compare against.
- * @param lo Pointer to first char in range.
- * @param hi Pointer to end of range.
- * @return Pointer to non-matching char if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to first char in range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to non-matching char if found, else @a __hi.
*/
const char_type*
scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
@@ -219,8 +220,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* If not possible (for example, '2'), returns the argument. It does
* so by returning ctype<char_type>::do_toupper().
*
- * @param c The char_type to convert.
- * @return The uppercase char_type if convertible, else @a c.
+ * @param __c The char_type to convert.
+ * @return The uppercase char_type if convertible, else @a __c.
*/
char_type
toupper(char_type __c) const
@@ -233,9 +234,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* uppercase if possible. Other elements remain untouched. It does so
* by returning ctype<char_type>:: do_toupper(lo, hi).
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
const char_type*
toupper(char_type *__lo, const char_type* __hi) const
@@ -248,8 +249,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* not possible (for example, '2'), returns the argument. It does so
* by returning ctype<char_type>::do_tolower(c).
*
- * @param c The char_type to convert.
- * @return The lowercase char_type if convertible, else @a c.
+ * @param __c The char_type to convert.
+ * @return The lowercase char_type if convertible, else @a __c.
*/
char_type
tolower(char_type __c) const
@@ -258,13 +259,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Convert array to lowercase.
*
- * This function converts each char_type in the range [lo,hi) to
+ * This function converts each char_type in the range [__lo,__hi) to
* lowercase if possible. Other elements remain untouched. It does so
- * by returning ctype<char_type>:: do_tolower(lo, hi).
+ * by returning ctype<char_type>:: do_tolower(__lo, __hi).
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
const char_type*
tolower(char_type* __lo, const char_type* __hi) const
@@ -280,7 +281,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
+ * @param __c The char to convert.
* @return The converted char_type.
*/
char_type
@@ -297,10 +298,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
const char*
widen(const char* __lo, const char* __hi, char_type* __to) const
@@ -312,13 +313,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function converts the char_type to char using the simplest
* reasonable transformation. If the conversion fails, dfault is
* returned instead. It does so by returning
- * ctype<char_type>::do_narrow(c).
+ * ctype<char_type>::do_narrow(__c).
*
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char_type to convert.
- * @param dfault Char to return if conversion fails.
+ * @param __c The char_type to convert.
+ * @param __dfault Char to return if conversion fails.
* @return The converted char.
*/
char
@@ -332,20 +333,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* simplest reasonable transformation and writes the results to the
* destination array. For any char_type in the input that cannot be
* converted, @a dfault is used instead. It does so by returning
- * ctype<char_type>::do_narrow(lo, hi, dfault, to).
+ * ctype<char_type>::do_narrow(__lo, __hi, __dfault, __to).
*
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param dfault Char to use if conversion fails.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __dfault Char to use if conversion fails.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
const char_type*
narrow(const char_type* __lo, const char_type* __hi,
- char __dfault, char *__to) const
+ char __dfault, char* __to) const
{ return this->do_narrow(__lo, __hi, __dfault, __to); }
protected:
@@ -364,9 +365,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* classifying. do_is() must always return the same result for the
* same input.
*
- * @param c The char_type to find the mask of.
- * @param m The mask to compare against.
- * @return (M & m) != 0.
+ * @param __c The char_type to find the mask of.
+ * @param __m The mask to compare against.
+ * @return (M & __m) != 0.
*/
virtual bool
do_is(mask __m, char_type __c) const = 0;
@@ -382,10 +383,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* classifying. do_is() must always return the same result for the
* same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param vec Pointer to an array of mask storage.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __vec Pointer to an array of mask storage.
+ * @return @a __hi.
*/
virtual const char_type*
do_is(const char_type* __lo, const char_type* __hi,
@@ -395,16 +396,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Find char_type matching mask
*
* This function searches for and returns the first char_type c in
- * [lo,hi) for which is(m,c) is true.
+ * [__lo,__hi) for which is(__m,c) is true.
*
* do_scan_is() is a hook for a derived facet to change the behavior of
* match searching. do_is() must always return the same result for the
* same input.
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to a matching char_type if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to a matching char_type if found, else @a __hi.
*/
virtual const char_type*
do_scan_is(mask __m, const char_type* __lo,
@@ -420,10 +421,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* match searching. do_is() must always return the same result for the
* same input.
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to a non-matching char_type if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to a non-matching char_type if found, else @a __hi.
*/
virtual const char_type*
do_scan_not(mask __m, const char_type* __lo,
@@ -440,25 +441,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* uppercasing. do_toupper() must always return the same result for
* the same input.
*
- * @param c The char_type to convert.
- * @return The uppercase char_type if convertible, else @a c.
+ * @param __c The char_type to convert.
+ * @return The uppercase char_type if convertible, else @a __c.
*/
virtual char_type
- do_toupper(char_type) const = 0;
+ do_toupper(char_type __c) const = 0;
/**
* @brief Convert array to uppercase.
*
- * This virtual function converts each char_type in the range [lo,hi)
+ * This virtual function converts each char_type in the range [__lo,__hi)
* to uppercase if possible. Other elements remain untouched.
*
* do_toupper() is a hook for a derived facet to change the behavior of
* uppercasing. do_toupper() must always return the same result for
* the same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const = 0;
@@ -473,25 +474,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* lowercasing. do_tolower() must always return the same result for
* the same input.
*
- * @param c The char_type to convert.
- * @return The lowercase char_type if convertible, else @a c.
+ * @param __c The char_type to convert.
+ * @return The lowercase char_type if convertible, else @a __c.
*/
virtual char_type
- do_tolower(char_type) const = 0;
+ do_tolower(char_type __c) const = 0;
/**
* @brief Convert array to lowercase.
*
- * This virtual function converts each char_type in the range [lo,hi)
+ * This virtual function converts each char_type in the range [__lo,__hi)
* to lowercase if possible. Other elements remain untouched.
*
* do_tolower() is a hook for a derived facet to change the behavior of
* lowercasing. do_tolower() must always return the same result for
* the same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const = 0;
@@ -509,11 +510,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
+ * @param __c The char to convert.
* @return The converted char_type
*/
virtual char_type
- do_widen(char) const = 0;
+ do_widen(char __c) const = 0;
/**
* @brief Widen char array
@@ -528,14 +529,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start range.
- * @param hi Pointer to end of range.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start range.
+ * @param __hi Pointer to end of range.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
virtual const char*
- do_widen(const char* __lo, const char* __hi,
- char_type* __dest) const = 0;
+ do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0;
/**
* @brief Narrow char_type to char
@@ -551,20 +551,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char_type to convert.
- * @param dfault Char to return if conversion fails.
+ * @param __c The char_type to convert.
+ * @param __dfault Char to return if conversion fails.
* @return The converted char.
*/
virtual char
- do_narrow(char_type, char __dfault) const = 0;
+ do_narrow(char_type __c, char __dfault) const = 0;
/**
* @brief Narrow char_type array to char
*
- * This virtual function converts each char_type in the range [lo,hi) to
- * char using the simplest reasonable transformation and writes the
- * results to the destination array. For any element in the input that
- * cannot be converted, @a dfault is used instead.
+ * This virtual function converts each char_type in the range
+ * [__lo,__hi) to char using the simplest reasonable
+ * transformation and writes the results to the destination
+ * array. For any element in the input that cannot be
+ * converted, @a __dfault is used instead.
*
* do_narrow() is a hook for a derived facet to change the behavior of
* narrowing. do_narrow() must always return the same result for the
@@ -573,15 +574,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param dfault Char to use if conversion fails.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __dfault Char to use if conversion fails.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
- char __dfault, char* __dest) const = 0;
+ char __dfault, char* __to) const = 0;
};
/**
@@ -656,7 +657,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
- char __dfault, char* __dest) const;
+ char __dfault, char* __to) const;
};
template<typename _CharT>
@@ -703,10 +704,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is the constructor provided by the standard.
*
- * @param table If non-zero, table is used as the per-char mask.
+ * @param __table If non-zero, table is used as the per-char mask.
* Else classic_table() is used.
- * @param del If true, passes ownership of table to this facet.
- * @param refs Passed to the base facet class.
+ * @param __del If true, passes ownership of table to this facet.
+ * @param __refs Passed to the base facet class.
*/
explicit
ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);
@@ -716,10 +717,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This constructor is used to construct the initial C locale facet.
*
- * @param cloc Handle to C locale data.
- * @param table If non-zero, table is used as the per-char mask.
- * @param del If true, passes ownership of table to this facet.
- * @param refs Passed to the base facet class.
+ * @param __cloc Handle to C locale data.
+ * @param __table If non-zero, table is used as the per-char mask.
+ * @param __del If true, passes ownership of table to this facet.
+ * @param __refs Passed to the base facet class.
*/
explicit
ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
@@ -728,11 +729,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Test char classification.
*
- * This function compares the mask table[c] to @a m.
+ * This function compares the mask table[c] to @a __m.
*
- * @param c The char to compare the mask of.
- * @param m The mask to compare against.
- * @return True if m & table[c] is true, false otherwise.
+ * @param __c The char to compare the mask of.
+ * @param __m The mask to compare against.
+ * @return True if __m & table[__c] is true, false otherwise.
*/
inline bool
is(mask __m, char __c) const;
@@ -744,10 +745,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* successively writes it to vec. vec must have as many elements as
* the char array.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param vec Pointer to an array of mask storage.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __vec Pointer to an array of mask storage.
+ * @return @a __hi.
*/
inline const char*
is(const char* __lo, const char* __hi, mask* __vec) const;
@@ -758,10 +759,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function searches for and returns the first char in [lo,hi) for
* which is(m,char) is true.
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to a matching char if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to a matching char if found, else @a __hi.
*/
inline const char*
scan_is(mask __m, const char* __lo, const char* __hi) const;
@@ -770,12 +771,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Find char not matching a mask
*
* This function searches for and returns a pointer to the first char
- * in [lo,hi) for which is(m,char) is false.
+ * in [__lo,__hi) for which is(m,char) is false.
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to a non-matching char if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to a non-matching char if found, else @a __hi.
*/
inline const char*
scan_not(mask __m, const char* __lo, const char* __hi) const;
@@ -789,8 +790,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* toupper() acts as if it returns ctype<char>::do_toupper(c).
* do_toupper() must always return the same result for the same input.
*
- * @param c The char to convert.
- * @return The uppercase char if convertible, else @a c.
+ * @param __c The char to convert.
+ * @return The uppercase char if convertible, else @a __c.
*/
char_type
toupper(char_type __c) const
@@ -799,15 +800,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Convert array to uppercase.
*
- * This function converts each char in the range [lo,hi) to uppercase
+ * This function converts each char in the range [__lo,__hi) to uppercase
* if possible. Other chars remain untouched.
*
- * toupper() acts as if it returns ctype<char>:: do_toupper(lo, hi).
+ * toupper() acts as if it returns ctype<char>:: do_toupper(__lo, __hi).
* do_toupper() must always return the same result for the same input.
*
- * @param lo Pointer to first char in range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to first char in range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
const char_type*
toupper(char_type *__lo, const char_type* __hi) const
@@ -819,11 +820,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function converts the char argument to lowercase if possible.
* If not possible (for example, '2'), returns the argument.
*
- * tolower() acts as if it returns ctype<char>::do_tolower(c).
+ * tolower() acts as if it returns ctype<char>::do_tolower(__c).
* do_tolower() must always return the same result for the same input.
*
- * @param c The char to convert.
- * @return The lowercase char if convertible, else @a c.
+ * @param __c The char to convert.
+ * @return The lowercase char if convertible, else @a __c.
*/
char_type
tolower(char_type __c) const
@@ -835,12 +836,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This function converts each char in the range [lo,hi) to lowercase
* if possible. Other chars remain untouched.
*
- * tolower() acts as if it returns ctype<char>:: do_tolower(lo, hi).
+ * tolower() acts as if it returns ctype<char>:: do_tolower(__lo, __hi).
* do_tolower() must always return the same result for the same input.
*
- * @param lo Pointer to first char in range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to first char in range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
const char_type*
tolower(char_type* __lo, const char_type* __hi) const
@@ -859,7 +860,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
+ * @param __c The char to convert.
* @return The converted character.
*/
char_type
@@ -884,10 +885,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to first char in range.
- * @param hi Pointer to end of range.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to first char in range.
+ * @param __hi Pointer to end of range.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
const char*
widen(const char* __lo, const char* __hi, char_type* __to) const
@@ -916,8 +917,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
- * @param dfault Char to return if conversion fails.
+ * @param __c The char to convert.
+ * @param __dfault Char to return if conversion fails.
* @return The converted character.
*/
char
@@ -947,15 +948,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param dfault Char to use if conversion fails.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __dfault Char to use if conversion fails.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
const char_type*
narrow(const char_type* __lo, const char_type* __hi,
- char __dfault, char *__to) const
+ char __dfault, char* __to) const
{
if (__builtin_expect(_M_narrow_ok == 1, true))
{
@@ -999,11 +1000,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* uppercasing. do_toupper() must always return the same result for
* the same input.
*
- * @param c The char to convert.
- * @return The uppercase char if convertible, else @a c.
+ * @param __c The char to convert.
+ * @return The uppercase char if convertible, else @a __c.
*/
virtual char_type
- do_toupper(char_type) const;
+ do_toupper(char_type __c) const;
/**
* @brief Convert array to uppercase.
@@ -1015,9 +1016,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* uppercasing. do_toupper() must always return the same result for
* the same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const;
@@ -1032,11 +1033,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* lowercasing. do_tolower() must always return the same result for
* the same input.
*
- * @param c The char to convert.
- * @return The lowercase char if convertible, else @a c.
+ * @param __c The char to convert.
+ * @return The lowercase char if convertible, else @a __c.
*/
virtual char_type
- do_tolower(char_type) const;
+ do_tolower(char_type __c) const;
/**
* @brief Convert array to lowercase.
@@ -1048,9 +1049,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* lowercasing. do_tolower() must always return the same result for
* the same input.
*
- * @param lo Pointer to first char in range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to first char in range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const;
@@ -1069,7 +1070,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
+ * @param __c The char to convert.
* @return The converted character.
*/
virtual char_type
@@ -1090,15 +1091,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
virtual const char*
- do_widen(const char* __lo, const char* __hi, char_type* __dest) const
+ do_widen(const char* __lo, const char* __hi, char_type* __to) const
{
- __builtin_memcpy(__dest, __lo, __hi - __lo);
+ __builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
@@ -1117,12 +1118,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
- * @param dfault Char to return if conversion fails.
+ * @param __c The char to convert.
+ * @param __dfault Char to return if conversion fails.
* @return The converted char.
*/
virtual char
- do_narrow(char_type __c, char) const
+ do_narrow(char_type __c, char __dfault) const
{ return __c; }
/**
@@ -1141,17 +1142,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param dfault Char to use if conversion fails.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __dfault Char to use if conversion fails.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
- char, char* __dest) const
+ char __dfault, char* __to) const
{
- __builtin_memcpy(__dest, __lo, __hi - __lo);
+ __builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
@@ -1203,7 +1204,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
ctype(size_t __refs = 0);
@@ -1213,8 +1214,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This constructor is used to construct the initial C locale facet.
*
- * @param cloc Handle to C locale data.
- * @param refs Passed to the base facet class.
+ * @param __cloc Handle to C locale data.
+ * @param __refs Passed to the base facet class.
*/
explicit
ctype(__c_locale __cloc, size_t __refs = 0);
@@ -1236,9 +1237,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* classifying. do_is() must always return the same result for the
* same input.
*
- * @param c The wchar_t to find the mask of.
- * @param m The mask to compare against.
- * @return (M & m) != 0.
+ * @param __c The wchar_t to find the mask of.
+ * @param __m The mask to compare against.
+ * @return (M & __m) != 0.
*/
virtual bool
do_is(mask __m, char_type __c) const;
@@ -1254,10 +1255,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* classifying. do_is() must always return the same result for the
* same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param vec Pointer to an array of mask storage.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __vec Pointer to an array of mask storage.
+ * @return @a __hi.
*/
virtual const char_type*
do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
@@ -1266,16 +1267,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Find wchar_t matching mask
*
* This function searches for and returns the first wchar_t c in
- * [lo,hi) for which is(m,c) is true.
+ * [__lo,__hi) for which is(__m,c) is true.
*
* do_scan_is() is a hook for a derived facet to change the behavior of
* match searching. do_is() must always return the same result for the
* same input.
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to a matching wchar_t if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to a matching wchar_t if found, else @a __hi.
*/
virtual const char_type*
do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
@@ -1284,16 +1285,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Find wchar_t not matching mask
*
* This function searches for and returns a pointer to the first
- * wchar_t c of [lo,hi) for which is(m,c) is false.
+ * wchar_t c of [__lo,__hi) for which is(__m,c) is false.
*
* do_scan_is() is a hook for a derived facet to change the behavior of
* match searching. do_is() must always return the same result for the
* same input.
*
- * @param m The mask to compare against.
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return Pointer to a non-matching wchar_t if found, else @a hi.
+ * @param __m The mask to compare against.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return Pointer to a non-matching wchar_t if found, else @a __hi.
*/
virtual const char_type*
do_scan_not(mask __m, const char_type* __lo,
@@ -1309,11 +1310,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* uppercasing. do_toupper() must always return the same result for
* the same input.
*
- * @param c The wchar_t to convert.
- * @return The uppercase wchar_t if convertible, else @a c.
+ * @param __c The wchar_t to convert.
+ * @return The uppercase wchar_t if convertible, else @a __c.
*/
virtual char_type
- do_toupper(char_type) const;
+ do_toupper(char_type __c) const;
/**
* @brief Convert array to uppercase.
@@ -1325,9 +1326,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* uppercasing. do_toupper() must always return the same result for
* the same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const;
@@ -1342,11 +1343,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* lowercasing. do_tolower() must always return the same result for
* the same input.
*
- * @param c The wchar_t to convert.
- * @return The lowercase wchar_t if convertible, else @a c.
+ * @param __c The wchar_t to convert.
+ * @return The lowercase wchar_t if convertible, else @a __c.
*/
virtual char_type
- do_tolower(char_type) const;
+ do_tolower(char_type __c) const;
/**
* @brief Convert array to lowercase.
@@ -1358,9 +1359,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* lowercasing. do_tolower() must always return the same result for
* the same input.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @return @a __hi.
*/
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const;
@@ -1379,11 +1380,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The char to convert.
+ * @param __c The char to convert.
* @return The converted wchar_t.
*/
virtual char_type
- do_widen(char) const;
+ do_widen(char __c) const;
/**
* @brief Widen char array to wchar_t array
@@ -1399,13 +1400,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start range.
- * @param hi Pointer to end of range.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start range.
+ * @param __hi Pointer to end of range.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
virtual const char*
- do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
+ do_widen(const char* __lo, const char* __hi, char_type* __to) const;
/**
* @brief Narrow wchar_t to char
@@ -1423,12 +1424,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param c The wchar_t to convert.
- * @param dfault Char to return if conversion fails.
+ * @param __c The wchar_t to convert.
+ * @param __dfault Char to return if conversion fails.
* @return The converted char.
*/
virtual char
- do_narrow(char_type, char __dfault) const;
+ do_narrow(char_type __c, char __dfault) const;
/**
* @brief Narrow wchar_t array to char array
@@ -1447,15 +1448,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: this is not what you want for codepage conversions. See
* codecvt for that.
*
- * @param lo Pointer to start of range.
- * @param hi Pointer to end of range.
- * @param dfault Char to use if conversion fails.
- * @param to Pointer to the destination array.
- * @return @a hi.
+ * @param __lo Pointer to start of range.
+ * @param __hi Pointer to end of range.
+ * @param __dfault Char to use if conversion fails.
+ * @param __to Pointer to the destination array.
+ * @return @a __hi.
*/
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
- char __dfault, char* __dest) const;
+ char __dfault, char* __to) const;
// For use at construction time only.
void
@@ -1660,7 +1661,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Numpunct constructor.
*
- * @param refs Refcount to pass to the base class.
+ * @param __refs Refcount to pass to the base class.
*/
explicit
numpunct(size_t __refs = 0)
@@ -1673,8 +1674,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This is a constructor for use by the library itself to set up the
* predefined locale facets.
*
- * @param cache __numpunct_cache object.
- * @param refs Refcount to pass to the base class.
+ * @param __cache __numpunct_cache object.
+ * @param __refs Refcount to pass to the base class.
*/
explicit
numpunct(__cache_type* __cache, size_t __refs = 0)
@@ -1687,8 +1688,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This is a constructor for use by the library itself to set up new
* locales.
*
- * @param cloc The C locale.
- * @param refs Refcount to pass to the base class.
+ * @param __cloc The C locale.
+ * @param __refs Refcount to pass to the base class.
*/
explicit
numpunct(__c_locale __cloc, size_t __refs = 0)
@@ -1931,7 +1932,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
num_get(size_t __refs = 0) : facet(__refs) { }
@@ -1952,11 +1953,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* except if the value is 1, sets @a v to true, if the value is 0, sets
* @a v to false, and otherwise set err to ios_base::failbit.
*
- * @param in Start of input stream.
- * @param end End of input stream.
- * @param io Source of locale and flags.
- * @param err Error flags to set.
- * @param v Value to format and insert.
+ * @param __in Start of input stream.
+ * @param __end End of input stream.
+ * @param __io Source of locale and flags.
+ * @param __err Error flags to set.
+ * @param __v Value to format and insert.
* @return Iterator after reading.
*/
iter_type
@@ -1988,11 +1989,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* Otherwise, sets err to ios_base::failbit and leaves @a v unaltered.
* Sets err to ios_base::eofbit if the stream is emptied.
*
- * @param in Start of input stream.
- * @param end End of input stream.
- * @param io Source of locale and flags.
- * @param err Error flags to set.
- * @param v Value to format and insert.
+ * @param __in Start of input stream.
+ * @param __end End of input stream.
+ * @param __io Source of locale and flags.
+ * @param __err Error flags to set.
+ * @param __v Value to format and insert.
* @return Iterator after reading.
*/
iter_type
@@ -2047,11 +2048,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* Otherwise, sets err to ios_base::failbit and leaves @a v unaltered.
* Sets err to ios_base::eofbit if the stream is emptied.
*
- * @param in Start of input stream.
- * @param end End of input stream.
- * @param io Source of locale and flags.
- * @param err Error flags to set.
- * @param v Value to format and insert.
+ * @param __in Start of input stream.
+ * @param __end End of input stream.
+ * @param __io Source of locale and flags.
+ * @param __err Error flags to set.
+ * @param __v Value to format and insert.
* @return Iterator after reading.
*/
iter_type
@@ -2089,11 +2090,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* Otherwise, sets err to ios_base::failbit and leaves @a v unaltered.
* Sets err to ios_base::eofbit if the stream is emptied.
*
- * @param in Start of input stream.
- * @param end End of input stream.
- * @param io Source of locale and flags.
- * @param err Error flags to set.
- * @param v Value to format and insert.
+ * @param __in Start of input stream.
+ * @param __end End of input stream.
+ * @param __io Source of locale and flags.
+ * @param __err Error flags to set.
+ * @param __v Value to format and insert.
* @return Iterator after reading.
*/
iter_type
@@ -2160,11 +2161,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* hook for derived classes to change the value returned. @see get()
* for more details.
*
- * @param in Start of input stream.
- * @param end End of input stream.
- * @param io Source of locale and flags.
- * @param err Error flags to set.
- * @param v Value to format and insert.
+ * @param __beg Start of input stream.
+ * @param __end End of input stream.
+ * @param __io Source of locale and flags.
+ * @param __err Error flags to set.
+ * @param __v Value to format and insert.
* @return Iterator after reading.
*/
virtual iter_type
@@ -2203,32 +2204,30 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
#endif
virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- float&) const;
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const;
virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
double&) const;
// XXX GLIBCXX_ABI Deprecated
#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
virtual iter_type
- __do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
double&) const;
#else
virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
long double&) const;
#endif
virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- void*&) const;
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const;
// XXX GLIBCXX_ABI Deprecated
#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
long double&) const;
#endif
//@}
@@ -2269,7 +2268,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
num_put(size_t __refs = 0) : facet(__refs) { }
@@ -2283,15 +2282,15 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* If ios_base::boolalpha is set, writes ctype<CharT>::truename() or
* ctype<CharT>::falsename(). Otherwise formats @a v as an int.
*
- * @param s Stream to write to.
- * @param io Source of locale and flags.
- * @param fill Char_type to use for filling.
- * @param v Value to format and insert.
+ * @param __s Stream to write to.
+ * @param __io Source of locale and flags.
+ * @param __fill Char_type to use for filling.
+ * @param __v Value to format and insert.
* @return Iterator after writing.
*/
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
+ { return this->do_put(__s, __io, __fill, __v); }
//@{
/**
@@ -2325,30 +2324,30 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* immediately after either a '+' or '-' or after '0x' or '0X'.
* Otherwise, padding occurs at the beginning.
*
- * @param s Stream to write to.
- * @param io Source of locale and flags.
- * @param fill Char_type to use for filling.
- * @param v Value to format and insert.
+ * @param __s Stream to write to.
+ * @param __io Source of locale and flags.
+ * @param __fill Char_type to use for filling.
+ * @param __v Value to format and insert.
* @return Iterator after writing.
*/
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill, long __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
+ { return this->do_put(__s, __io, __fill, __v); }
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill,
+ put(iter_type __s, ios_base& __io, char_type __fill,
unsigned long __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ { return this->do_put(__s, __io, __fill, __v); }
#ifdef _GLIBCXX_USE_LONG_LONG
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill, long long __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const
+ { return this->do_put(__s, __io, __fill, __v); }
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill,
+ put(iter_type __s, ios_base& __io, char_type __fill,
unsigned long long __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ { return this->do_put(__s, __io, __fill, __v); }
#endif
//@}
@@ -2388,20 +2387,20 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* immediately after either a '+' or '-' or after '0x' or '0X'.
* Otherwise, padding occurs at the beginning.
*
- * @param s Stream to write to.
- * @param io Source of locale and flags.
- * @param fill Char_type to use for filling.
- * @param v Value to format and insert.
+ * @param __s Stream to write to.
+ * @param __io Source of locale and flags.
+ * @param __fill Char_type to use for filling.
+ * @param __v Value to format and insert.
* @return Iterator after writing.
*/
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill, double __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+ { return this->do_put(__s, __io, __fill, __v); }
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill,
+ put(iter_type __s, ios_base& __io, char_type __fill,
long double __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ { return this->do_put(__s, __io, __fill, __v); }
//@}
/**
@@ -2413,16 +2412,16 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* This function formats @a v as an unsigned long with ios_base::hex
* and ios_base::showbase set.
*
- * @param s Stream to write to.
- * @param io Source of locale and flags.
- * @param fill Char_type to use for filling.
- * @param v Value to format and insert.
+ * @param __s Stream to write to.
+ * @param __io Source of locale and flags.
+ * @param __fill Char_type to use for filling.
+ * @param __v Value to format and insert.
* @return Iterator after writing.
*/
iter_type
- put(iter_type __s, ios_base& __f, char_type __fill,
+ put(iter_type __s, ios_base& __io, char_type __fill,
const void* __v) const
- { return this->do_put(__s, __f, __fill, __v); }
+ { return this->do_put(__s, __io, __fill, __v); }
protected:
template<typename _ValueT>
@@ -2461,14 +2460,14 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
* inserting them into a stream. This function is a hook for derived
* classes to change the value returned.
*
- * @param s Stream to write to.
- * @param io Source of locale and flags.
- * @param fill Char_type to use for filling.
- * @param v Value to format and insert.
+ * @param __s Stream to write to.
+ * @param __io Source of locale and flags.
+ * @param __fill Char_type to use for filling.
+ * @param __v Value to format and insert.
* @return Iterator after writing.
*/
virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, bool __v) const;
+ do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const;
virtual iter_type
do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
@@ -2492,24 +2491,24 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
#endif
virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, double __v) const;
+ do_put(iter_type, ios_base&, char_type, double) const;
// XXX GLIBCXX_ABI Deprecated
#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
virtual iter_type
- __do_put(iter_type, ios_base&, char_type __fill, double __v) const;
+ __do_put(iter_type, ios_base&, char_type, double) const;
#else
virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
+ do_put(iter_type, ios_base&, char_type, long double) const;
#endif
virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
+ do_put(iter_type, ios_base&, char_type, const void*) const;
// XXX GLIBCXX_ABI Deprecated
#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
+ do_put(iter_type, ios_base&, char_type, long double) const;
#endif
//@}
};
@@ -2603,7 +2602,7 @@ _GLIBCXX_END_NAMESPACE_LDBL
{ return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
+} // namespace std
# include <bits/locale_facets.tcc>
diff --git a/libstdc++-v3/include/bits/locale_facets_nonio.h b/libstdc++-v3/include/bits/locale_facets_nonio.h
index be7c1a42fd..2309e075c7 100644
--- a/libstdc++-v3/include/bits/locale_facets_nonio.h
+++ b/libstdc++-v3/include/bits/locale_facets_nonio.h
@@ -203,8 +203,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This is a constructor for use by the library itself to set up new
* locales.
*
- * @param cloc The C locale.
- * @param s The name of a locale.
+ * @param __cloc The C locale.
+ * @param __s The name of a locale.
* @param refs Passed to the base facet class.
*/
explicit
@@ -384,7 +384,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
time_get(size_t __refs = 0)
@@ -420,11 +420,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the end, err |= ios_base::failbit. If parsing reads all the
* characters, err |= ios_base::eofbit.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond time string.
*/
iter_type
@@ -445,11 +445,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the end, err |= ios_base::failbit. If parsing reads all the
* characters, err |= ios_base::eofbit.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond date string.
*/
iter_type
@@ -473,11 +473,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* If an error occurs before the end, err |= ios_base::failbit. If
* parsing reads all the characters, err |= ios_base::eofbit.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond weekday name.
*/
iter_type
@@ -502,11 +502,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* parsing reads all the characters, err |=
* ios_base::eofbit.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond month name.
*/
iter_type
@@ -528,11 +528,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* If an error occurs before the end, err |= ios_base::failbit. If
* parsing reads all the characters, err |= ios_base::eofbit.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond year.
*/
iter_type
@@ -566,11 +566,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* derived classes to change the value returned. @see get_time() for
* details.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond time string.
*/
virtual iter_type
@@ -585,11 +585,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* derived classes to change the value returned. @see get_date() for
* details.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond date string.
*/
virtual iter_type
@@ -604,11 +604,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* classes to change the value returned. @see get_weekday() for
* details.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond weekday name.
*/
virtual iter_type
@@ -623,11 +623,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* classes to change the value returned. @see get_monthname() for
* details.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond month name.
*/
virtual iter_type
@@ -642,11 +642,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* hook for derived classes to change the value returned. @see
* get_year() for details.
*
- * @param beg Start of string to parse.
- * @param end End of string to parse.
- * @param io Source of the locale.
- * @param err Error flags to set.
- * @param tm Pointer to struct tm to fill in.
+ * @param __beg Start of string to parse.
+ * @param __end End of string to parse.
+ * @param __io Source of the locale.
+ * @param __err Error flags to set.
+ * @param __tm Pointer to struct tm to fill in.
* @return Iterator to first char beyond year.
*/
virtual iter_type
@@ -730,7 +730,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
time_put(size_t __refs = 0)
@@ -743,12 +743,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* provided format string. The format string is interpreted as by
* strftime().
*
- * @param s The stream to write to.
- * @param io Source of locale.
- * @param fill char_type to use for padding.
- * @param tm Struct tm with date and time info to format.
- * @param beg Start of format string.
- * @param end End of format string.
+ * @param __s The stream to write to.
+ * @param __io Source of locale.
+ * @param __fill char_type to use for padding.
+ * @param __tm Struct tm with date and time info to format.
+ * @param __beg Start of format string.
+ * @param __end End of format string.
* @return Iterator after writing.
*/
iter_type
@@ -763,12 +763,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* are interpreted as by strftime(). It does so by returning
* time_put::do_put().
*
- * @param s The stream to write to.
- * @param io Source of locale.
- * @param fill char_type to use for padding.
- * @param tm Struct tm with date and time info to format.
- * @param format Format char.
- * @param mod Optional modifier char.
+ * @param __s The stream to write to.
+ * @param __io Source of locale.
+ * @param __fill char_type to use for padding.
+ * @param __tm Struct tm with date and time info to format.
+ * @param __format Format char.
+ * @param __mod Optional modifier char.
* @return Iterator after writing.
*/
iter_type
@@ -790,12 +790,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* for derived classes to change the value returned. @see put() for
* more details.
*
- * @param s The stream to write to.
- * @param io Source of locale.
- * @param fill char_type to use for padding.
- * @param tm Struct tm with date and time info to format.
- * @param format Format char.
- * @param mod Optional modifier char.
+ * @param __s The stream to write to.
+ * @param __io Source of locale.
+ * @param __fill char_type to use for padding.
+ * @param __tm Struct tm with date and time info to format.
+ * @param __format Format char.
+ * @param __mod Optional modifier char.
* @return Iterator after writing.
*/
virtual iter_type
@@ -957,7 +957,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
moneypunct(size_t __refs = 0)
@@ -969,8 +969,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This is an internal constructor.
*
- * @param cache Cache for optimization.
- * @param refs Passed to the base facet class.
+ * @param __cache Cache for optimization.
+ * @param __refs Passed to the base facet class.
*/
explicit
moneypunct(__cache_type* __cache, size_t __refs = 0)
@@ -983,9 +983,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This is a constructor for use by the library itself to set up new
* locales.
*
- * @param cloc The C locale.
- * @param s The name of a locale.
- * @param refs Passed to the base facet class.
+ * @param __cloc The C locale.
+ * @param __s The name of a locale.
+ * @param __refs Passed to the base facet class.
*/
explicit
moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0)
@@ -1386,7 +1386,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
money_get(size_t __refs = 0) : facet(__refs) { }
@@ -1394,7 +1394,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
/**
* @brief Read and parse a monetary value.
*
- * This function reads characters from @a s, interprets them as a
+ * This function reads characters from @a __s, interprets them as a
* monetary value according to moneypunct and ctype facets retrieved
* from io.getloc(), and returns the result in @a units as an integral
* value moneypunct::frac_digits() * the actual amount. For example,
@@ -1409,12 +1409,12 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This function works by returning the result of do_get().
*
- * @param s Start of characters to parse.
- * @param end End of characters to parse.
- * @param intl Parameter to use_facet<moneypunct<CharT,intl> >.
- * @param io Source of facets and io state.
- * @param err Error field to set if parsing fails.
- * @param units Place to store result of parsing.
+ * @param __s Start of characters to parse.
+ * @param __end End of characters to parse.
+ * @param __intl Parameter to use_facet<moneypunct<CharT,intl> >.
+ * @param __io Source of facets and io state.
+ * @param __err Error field to set if parsing fails.
+ * @param __units Place to store result of parsing.
* @return Iterator referencing first character beyond valid money
* amount.
*/
@@ -1426,7 +1426,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
/**
* @brief Read and parse a monetary value.
*
- * This function reads characters from @a s, interprets them as
+ * This function reads characters from @a __s, interprets them as
* a monetary value according to moneypunct and ctype facets
* retrieved from io.getloc(), and returns the result in @a
* digits. For example, the string $10.01 in a US locale would
@@ -1440,12 +1440,12 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This function works by returning the result of do_get().
*
- * @param s Start of characters to parse.
- * @param end End of characters to parse.
- * @param intl Parameter to use_facet<moneypunct<CharT,intl> >.
- * @param io Source of facets and io state.
- * @param err Error field to set if parsing fails.
- * @param digits Place to store result of parsing.
+ * @param __s Start of characters to parse.
+ * @param __end End of characters to parse.
+ * @param __intl Parameter to use_facet<moneypunct<CharT,intl> >.
+ * @param __io Source of facets and io state.
+ * @param __err Error field to set if parsing fails.
+ * @param __digits Place to store result of parsing.
* @return Iterator referencing first character beyond valid money
* amount.
*/
@@ -1536,7 +1536,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
money_put(size_t __refs = 0) : facet(__refs) { }
@@ -1546,16 +1546,16 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This function formats @a units as a monetary value according to
* moneypunct and ctype facets retrieved from io.getloc(), and writes
- * the resulting characters to @a s. For example, the value 1001 in a
- * US locale would write <code>$10.01</code> to @a s.
+ * the resulting characters to @a __s. For example, the value 1001 in a
+ * US locale would write <code>$10.01</code> to @a __s.
*
* This function works by returning the result of do_put().
*
- * @param s The stream to write to.
- * @param intl Parameter to use_facet<moneypunct<CharT,intl> >.
- * @param io Source of facets and io state.
- * @param fill char_type to use for padding.
- * @param units Place to store result of parsing.
+ * @param __s The stream to write to.
+ * @param __intl Parameter to use_facet<moneypunct<CharT,intl> >.
+ * @param __io Source of facets and io state.
+ * @param __fill char_type to use for padding.
+ * @param __units Place to store result of parsing.
* @return Iterator after writing.
*/
iter_type
@@ -1568,17 +1568,17 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This function formats @a digits as a monetary value
* according to moneypunct and ctype facets retrieved from
- * io.getloc(), and writes the resulting characters to @a s.
+ * io.getloc(), and writes the resulting characters to @a __s.
* For example, the string <code>1001</code> in a US locale
- * would write <code>$10.01</code> to @a s.
+ * would write <code>$10.01</code> to @a __s.
*
* This function works by returning the result of do_put().
*
- * @param s The stream to write to.
- * @param intl Parameter to use_facet<moneypunct<CharT,intl> >.
- * @param io Source of facets and io state.
- * @param fill char_type to use for padding.
- * @param units Place to store result of parsing.
+ * @param __s The stream to write to.
+ * @param __intl Parameter to use_facet<moneypunct<CharT,intl> >.
+ * @param __io Source of facets and io state.
+ * @param __fill char_type to use for padding.
+ * @param __digits Place to store result of parsing.
* @return Iterator after writing.
*/
iter_type
@@ -1596,17 +1596,17 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This function formats @a units as a monetary value according to
* moneypunct and ctype facets retrieved from io.getloc(), and writes
- * the resulting characters to @a s. For example, the value 1001 in a
- * US locale would write <code>$10.01</code> to @a s.
+ * the resulting characters to @a __s. For example, the value 1001 in a
+ * US locale would write <code>$10.01</code> to @a __s.
*
* This function is a hook for derived classes to change the value
* returned. @see put().
*
- * @param s The stream to write to.
- * @param intl Parameter to use_facet<moneypunct<CharT,intl> >.
- * @param io Source of facets and io state.
- * @param fill char_type to use for padding.
- * @param units Place to store result of parsing.
+ * @param __s The stream to write to.
+ * @param __intl Parameter to use_facet<moneypunct<CharT,intl> >.
+ * @param __io Source of facets and io state.
+ * @param __fill char_type to use for padding.
+ * @param __units Place to store result of parsing.
* @return Iterator after writing.
*/
// XXX GLIBCXX_ABI Deprecated
@@ -1625,18 +1625,18 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
*
* This function formats @a digits as a monetary value
* according to moneypunct and ctype facets retrieved from
- * io.getloc(), and writes the resulting characters to @a s.
+ * io.getloc(), and writes the resulting characters to @a __s.
* For example, the string <code>1001</code> in a US locale
- * would write <code>$10.01</code> to @a s.
+ * would write <code>$10.01</code> to @a __s.
*
* This function is a hook for derived classes to change the value
* returned. @see put().
*
- * @param s The stream to write to.
- * @param intl Parameter to use_facet<moneypunct<CharT,intl> >.
- * @param io Source of facets and io state.
- * @param fill char_type to use for padding.
- * @param units Place to store result of parsing.
+ * @param __s The stream to write to.
+ * @param __intl Parameter to use_facet<moneypunct<CharT,intl> >.
+ * @param __io Source of facets and io state.
+ * @param __fill char_type to use for padding.
+ * @param __digits Place to store result of parsing.
* @return Iterator after writing.
*/
virtual iter_type
@@ -1717,7 +1717,7 @@ _GLIBCXX_END_NAMESPACE_LDBL
*
* This is the constructor provided by the standard.
*
- * @param refs Passed to the base facet class.
+ * @param __refs Passed to the base facet class.
*/
explicit
messages(size_t __refs = 0);
@@ -1729,9 +1729,9 @@ _GLIBCXX_END_NAMESPACE_LDBL
* This is a constructor for use by the library itself to set up new
* locales.
*
- * @param cloc The C locale.
- * @param s The name of a locale.
- * @param refs Refcount to pass to the base class.
+ * @param __cloc The C locale.
+ * @param __s The name of a locale.
+ * @param __refs Refcount to pass to the base class.
*/
explicit
messages(__c_locale __cloc, const char* __s, size_t __refs = 0);
@@ -1740,10 +1740,10 @@ _GLIBCXX_END_NAMESPACE_LDBL
* @brief Open a message catalog.
*
* This function opens and returns a handle to a message catalog by
- * returning do_open(s, loc).
+ * returning do_open(__s, __loc).
*
- * @param s The catalog to open.
- * @param loc Locale to use for character set conversions.
+ * @param __s The catalog to open.
+ * @param __loc Locale to use for character set conversions.
* @return Handle to the catalog or value < 0 if open fails.
*/
catalog
@@ -1759,9 +1759,9 @@ _GLIBCXX_END_NAMESPACE_LDBL
* message catalog root directory for gnu gettext and is ignored
* otherwise.
*
- * @param s The catalog to open.
- * @param loc Locale to use for character set conversions.
- * @param dir Message catalog root directory.
+ * @param __s The catalog to open.
+ * @param __loc Locale to use for character set conversions.
+ * @param __dir Message catalog root directory.
* @return Handle to the catalog or value < 0 if open fails.
*/
catalog
@@ -1773,14 +1773,14 @@ _GLIBCXX_END_NAMESPACE_LDBL
* This function retrieves and returns a message from a catalog by
* returning do_get(c, set, msgid, s).
*
- * For gnu, @a set and @a msgid are ignored. Returns gettext(s).
+ * For gnu, @a __set and @a msgid are ignored. Returns gettext(s).
* For default, returns s. For ieee, returns catgets(c,set,msgid,s).
*
- * @param c The catalog to access.
- * @param set Implementation-defined.
- * @param msgid Implementation-defined.
- * @param s Default return value if retrieval fails.
- * @return Retrieved message or @a s if get fails.
+ * @param __c The catalog to access.
+ * @param __set Implementation-defined.
+ * @param __msgid Implementation-defined.
+ * @param __s Default return value if retrieval fails.
+ * @return Retrieved message or @a __s if get fails.
*/
string_type
get(catalog __c, int __set, int __msgid, const string_type& __s) const
@@ -1791,7 +1791,7 @@ _GLIBCXX_END_NAMESPACE_LDBL
*
* Closes catalog @a c by calling do_close(c).
*
- * @param c The catalog to close.
+ * @param __c The catalog to close.
*/
void
close(catalog __c) const
@@ -1809,8 +1809,8 @@ _GLIBCXX_END_NAMESPACE_LDBL
* implementation-defined manner. This function is a hook for derived
* classes to change the value returned.
*
- * @param s The catalog to open.
- * @param loc Locale to use for character set conversions.
+ * @param __s The catalog to open.
+ * @param __loc Locale to use for character set conversions.
* @return Handle to the opened catalog, value < 0 if open failed.
*/
virtual catalog
@@ -1823,14 +1823,14 @@ _GLIBCXX_END_NAMESPACE_LDBL
* implementation-defined manner. This function is a hook for derived
* classes to change the value returned.
*
- * For gnu, @a set and @a msgid are ignored. Returns gettext(s).
+ * For gnu, @a __set and @a __msgid are ignored. Returns gettext(s).
* For default, returns s. For ieee, returns catgets(c,set,msgid,s).
*
- * @param c The catalog to access.
- * @param set Implementation-defined.
- * @param msgid Implementation-defined.
- * @param s Default return value if retrieval fails.
- * @return Retrieved message or @a s if get fails.
+ * @param __c The catalog to access.
+ * @param __set Implementation-defined.
+ * @param __msgid Implementation-defined.
+ * @param __s Default return value if retrieval fails.
+ * @return Retrieved message or @a __s if get fails.
*/
virtual string_type
do_get(catalog, int, int, const string_type& __dfault) const;
@@ -1838,7 +1838,7 @@ _GLIBCXX_END_NAMESPACE_LDBL
/*
* @brief Close a message catalog.
*
- * @param c The catalog to close.
+ * @param __c The catalog to close.
*/
virtual void
do_close(catalog) const;
@@ -1855,40 +1855,7 @@ _GLIBCXX_END_NAMESPACE_LDBL
string_type
_M_convert_from_char(char*) const
{
-#if 0
- // Length of message string without terminating null.
- size_t __len = char_traits<char>::length(__msg) - 1;
-
- // "everybody can easily convert the string using
- // mbsrtowcs/wcsrtombs or with iconv()"
-
- // Convert char* to _CharT in locale used to open catalog.
- // XXX need additional template parameter on messages class for this..
- // typedef typename codecvt<char, _CharT, _StateT> __codecvt_type;
- typedef typename codecvt<char, _CharT, mbstate_t> __codecvt_type;
-
- __codecvt_type::state_type __state;
- // XXX may need to initialize state.
- //initialize_state(__state._M_init());
-
- char* __from_next;
- // XXX what size for this string?
- _CharT* __to = static_cast<_CharT*>(__builtin_alloca(__len + 1));
- const __codecvt_type& __cvt = use_facet<__codecvt_type>(_M_locale_conv);
- __cvt.out(__state, __msg, __msg + __len, __from_next,
- __to, __to + __len + 1, __to_next);
- return string_type(__to);
-#endif
-#if 0
- typedef ctype<_CharT> __ctype_type;
- // const __ctype_type& __cvt = use_facet<__ctype_type>(_M_locale_msg);
- const __ctype_type& __cvt = use_facet<__ctype_type>(locale());
- // XXX Again, proper length of converted string an issue here.
- // For now, assume the converted length is not larger.
- _CharT* __dest = static_cast<_CharT*>(__builtin_alloca(__len + 1));
- __cvt.widen(__msg, __msg + __len, __dest);
- return basic_string<_CharT>(__dest);
-#endif
+ // XXX
return string_type();
}
};
diff --git a/libstdc++-v3/include/bits/move.h b/libstdc++-v3/include/bits/move.h
index f5918999cf..353c466d8f 100644
--- a/libstdc++-v3/include/bits/move.h
+++ b/libstdc++-v3/include/bits/move.h
@@ -1,6 +1,6 @@
// Move, forward and identity for C++0x + swap -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,9 +38,13 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Used, in C++03 mode too, by allocators, etc.
+ /**
+ * @brief Same as C++11 std::addressof
+ * @ingroup utilities
+ */
template<typename _Tp>
inline _Tp*
- __addressof(_Tp& __r)
+ __addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
{
return reinterpret_cast<_Tp*>
(&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
@@ -55,16 +59,33 @@ _GLIBCXX_END_NAMESPACE_VERSION
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- /// forward (as per N3143)
+
+ /**
+ * @addtogroup utilities
+ * @{
+ */
+
+ // forward (as per N3143)
+ /**
+ * @brief Forward an lvalue.
+ * @return The parameter cast to the specified type.
+ *
+ * This function is used to implement "perfect forwarding".
+ */
template<typename _Tp>
- inline _Tp&&
- forward(typename std::remove_reference<_Tp>::type& __t)
+ constexpr _Tp&&
+ forward(typename std::remove_reference<_Tp>::type& __t) noexcept
{ return static_cast<_Tp&&>(__t); }
+ /**
+ * @brief Forward an rvalue.
+ * @return The parameter cast to the specified type.
+ *
+ * This function is used to implement "perfect forwarding".
+ */
template<typename _Tp>
- inline _Tp&&
- forward(typename std::remove_reference<_Tp>::type&& __t)
+ constexpr _Tp&&
+ forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
{
static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
" substituting _Tp is an lvalue reference type");
@@ -72,17 +93,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Move a value.
- * @ingroup mutating_algorithms
+ * @brief Convert a value to an rvalue.
* @param __t A thing of arbitrary type.
- * @return Same, moved.
+ * @return The parameter cast to an rvalue-reference to allow moving it.
*/
template<typename _Tp>
- inline typename std::remove_reference<_Tp>::type&&
- move(_Tp&& __t)
+ constexpr typename std::remove_reference<_Tp>::type&&
+ move(_Tp&& __t) noexcept
{ return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
- /// declval, from type_traits.
+
+ template<typename _Tp>
+ struct __move_if_noexcept_cond
+ : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
+ is_copy_constructible<_Tp>>::type { };
+
+ /**
+ * @brief Conditionally convert a value to an rvalue.
+ * @param __x A thing of arbitrary type.
+ * @return The parameter, possibly cast to an rvalue-reference.
+ *
+ * Same as std::move unless the type's move constructor could throw and the
+ * type is copyable, in which case an lvalue-reference is returned instead.
+ */
+ template<typename _Tp>
+ inline typename
+ conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
+ move_if_noexcept(_Tp& __x) noexcept
+ { return std::move(__x); }
+
+ // declval, from type_traits.
/**
* @brief Returns the actual address of the object or function
@@ -93,9 +133,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp>
inline _Tp*
- addressof(_Tp& __r)
+ addressof(_Tp& __r) noexcept
{ return std::__addressof(__r); }
+ /// @} group utilities
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
@@ -111,8 +152,12 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
+ * @addtogroup utilities
+ * @{
+ */
+
+ /**
* @brief Swaps two values.
- * @ingroup mutating_algorithms
* @param __a A thing of arbitrary type.
* @param __b Another thing of arbitrary type.
* @return Nothing.
@@ -120,6 +165,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
inline void
swap(_Tp& __a, _Tp& __b)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(__and_<is_nothrow_move_constructible<_Tp>,
+ is_nothrow_move_assignable<_Tp>>::value)
+#endif
{
// concept requirements
__glibcxx_function_requires(_SGIAssignableConcept<_Tp>)
@@ -131,14 +180,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 809. std::swap should be overloaded for array types.
+ /// Swap the contents of two arrays.
template<typename _Tp, size_t _Nm>
inline void
swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(noexcept(swap(*__a, *__b)))
+#endif
{
for (size_t __n = 0; __n < _Nm; ++__n)
swap(__a[__n], __b[__n]);
}
+ /// @} group utilities
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/bits/ptr_traits.h b/libstdc++-v3/include/bits/ptr_traits.h
new file mode 100644
index 0000000000..c364b2dcb2
--- /dev/null
+++ b/libstdc++-v3/include/bits/ptr_traits.h
@@ -0,0 +1,182 @@
+// Pointer Traits -*- C++ -*-
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/ptr_traits.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{memory}
+ */
+
+#ifndef _PTR_TRAITS_H
+#define _PTR_TRAITS_H 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+
+#include <type_traits> // For _GLIBCXX_HAS_NESTED_TYPE
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+_GLIBCXX_HAS_NESTED_TYPE(element_type)
+_GLIBCXX_HAS_NESTED_TYPE(difference_type)
+
+ template<typename _Tp, bool = __has_element_type<_Tp>::value>
+ struct __ptrtr_elt_type;
+
+ template<typename _Tp>
+ struct __ptrtr_elt_type<_Tp, true>
+ {
+ typedef typename _Tp::element_type __type;
+ };
+
+ template<template<typename, typename...> class _SomePtr, typename _Tp,
+ typename... _Args>
+ struct __ptrtr_elt_type<_SomePtr<_Tp, _Args...>, false>
+ {
+ typedef _Tp __type;
+ };
+
+ template<typename _Tp, bool = __has_difference_type<_Tp>::value>
+ struct __ptrtr_diff_type
+ {
+ typedef typename _Tp::difference_type __type;
+ };
+
+ template<typename _Tp>
+ struct __ptrtr_diff_type<_Tp, false>
+ {
+ typedef ptrdiff_t __type;
+ };
+
+ template<typename _Ptr, typename _Up>
+ class __ptrtr_rebind_helper
+ {
+ template<typename _Ptr2, typename _Up2>
+ static constexpr bool
+ _S_chk(typename _Ptr2::template rebind<_Up2>*)
+ { return true; }
+
+ template<typename, typename>
+ static constexpr bool
+ _S_chk(...)
+ { return false; }
+
+ public:
+ static const bool __value = _S_chk<_Ptr, _Up>(nullptr);
+ };
+
+ template<typename _Ptr, typename _Up>
+ const bool __ptrtr_rebind_helper<_Ptr, _Up>::__value;
+
+ template<typename _Tp, typename _Up,
+ bool = __ptrtr_rebind_helper<_Tp, _Up>::__value>
+ struct __ptrtr_rebind;
+
+ template<typename _Tp, typename _Up>
+ struct __ptrtr_rebind<_Tp, _Up, true>
+ {
+ typedef typename _Tp::template rebind<_Up> __type;
+ };
+
+ template<template<typename, typename...> class _SomePtr, typename _Up,
+ typename _Tp, typename... _Args>
+ struct __ptrtr_rebind<_SomePtr<_Tp, _Args...>, _Up, false>
+ {
+ typedef _SomePtr<_Up, _Args...> __type;
+ };
+
+ template<typename _Tp, typename = typename remove_cv<_Tp>::type>
+ struct __ptrtr_not_void
+ {
+ typedef _Tp __type;
+ };
+
+ template<typename _Tp>
+ struct __ptrtr_not_void<_Tp, void>
+ {
+ struct __type { };
+ };
+
+ template<typename _Ptr>
+ class __ptrtr_pointer_to
+ {
+ typedef typename __ptrtr_elt_type<_Ptr>::__type __orig_type;
+ typedef typename __ptrtr_not_void<__orig_type>::__type __element_type;
+
+ public:
+ static _Ptr pointer_to(__element_type& __e)
+ { return _Ptr::pointer_to(__e); }
+ };
+
+ /**
+ * @brief Uniform interface to all pointer-like types
+ * @ingroup pointer_abstractions
+ */
+ template<typename _Ptr>
+ struct pointer_traits : __ptrtr_pointer_to<_Ptr>
+ {
+ /// The pointer type
+ typedef _Ptr pointer;
+ /// The type pointed to
+ typedef typename __ptrtr_elt_type<_Ptr>::__type element_type;
+ /// Type used to represent the difference between two pointers
+ typedef typename __ptrtr_diff_type<_Ptr>::__type difference_type;
+
+ template<typename _Up>
+ using rebind = typename __ptrtr_rebind<_Ptr, _Up>::__type;
+ };
+
+ /**
+ * @brief Partial specialization for built-in pointers.
+ * @ingroup pointer_abstractions
+ */
+ template<typename _Tp>
+ struct pointer_traits<_Tp*>
+ {
+ /// The pointer type
+ typedef _Tp* pointer;
+ /// The type pointed to
+ typedef _Tp element_type;
+ /// Type used to represent the difference between two pointers
+ typedef ptrdiff_t difference_type;
+
+ template<typename _Up>
+ using rebind = _Up*;
+
+ /**
+ * @brief Obtain a pointer to an object
+ * @param __r A reference to an object of type @c element_type
+ * @return @c addressof(__r)
+ */
+ static pointer
+ pointer_to(typename __ptrtr_not_void<element_type>::__type& __r) noexcept
+ { return std::addressof(__r); }
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h
index 988ee61cab..1e8caa023b 100644
--- a/libstdc++-v3/include/bits/random.h
+++ b/libstdc++-v3/include/bits/random.h
@@ -1,6 +1,6 @@
// random number generation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -174,6 +174,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static_assert(__m == 0u || (__a < __m && __c < __m),
"template argument substituting __m out of bounds");
+ // XXX FIXME:
+ // _Mod::__calc should handle correctly __m % __a >= __m / __a too.
+ static_assert(__m % __a < __m / __a,
+ "sorry, not implemented yet: try a smaller 'a' constant");
+
public:
/** The type of the generated random value. */
typedef _UIntType result_type;
@@ -294,9 +299,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
_UIntType1 __m1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const std::linear_congruential_engine<_UIntType1,
- __a1, __c1, __m1>&);
+ __a1, __c1, __m1>& __lcr);
/**
* @brief Sets the state of the engine by reading its textual
@@ -314,9 +319,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
_UIntType1 __m1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
std::linear_congruential_engine<_UIntType1, __a1,
- __c1, __m1>&);
+ __c1, __m1>& __lcr);
private:
_UIntType _M_x;
@@ -355,17 +360,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This algorithm was originally invented by Makoto Matsumoto and
* Takuji Nishimura.
*
- * @var word_size The number of bits in each element of the state vector.
- * @var state_size The degree of recursion.
- * @var shift_size The period parameter.
- * @var mask_bits The separation point bit index.
- * @var parameter_a The last row of the twist matrix.
- * @var output_u The first right-shift tempering matrix parameter.
- * @var output_s The first left-shift tempering matrix parameter.
- * @var output_b The first left-shift tempering matrix mask.
- * @var output_t The second left-shift tempering matrix parameter.
- * @var output_c The second left-shift tempering matrix mask.
- * @var output_l The second right-shift tempering matrix parameter.
+ * @tparam __w Word size, the number of bits in each element of
+ * the state vector.
+ * @tparam __n The degree of recursion.
+ * @tparam __m The period parameter.
+ * @tparam __r The separation point bit index.
+ * @tparam __a The last row of the twist matrix.
+ * @tparam __u The first right-shift tempering matrix parameter.
+ * @tparam __d The first right-shift tempering matrix mask.
+ * @tparam __s The first left-shift tempering matrix parameter.
+ * @tparam __b The first left-shift tempering matrix mask.
+ * @tparam __t The second left-shift tempering matrix parameter.
+ * @tparam __c The second left-shift tempering matrix mask.
+ * @tparam __l The second right-shift tempering matrix parameter.
+ * @tparam __f Initialization multiplier.
*/
template<typename _UIntType, size_t __w,
size_t __n, size_t __m, size_t __r,
@@ -488,7 +496,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend bool
operator==(const mersenne_twister_engine& __lhs,
const mersenne_twister_engine& __rhs)
- { return std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x); }
+ { return (std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x)
+ && __lhs._M_p == __rhs._M_p); }
/**
* @brief Inserts the current state of a % mersenne_twister_engine
@@ -511,10 +520,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_UIntType1 __c1, size_t __l1, _UIntType1 __f1,
typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const std::mersenne_twister_engine<_UIntType1, __w1, __n1,
__m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
- __l1, __f1>&);
+ __l1, __f1>& __x);
/**
* @brief Extracts the current state of a % mersenne_twister_engine
@@ -537,10 +546,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_UIntType1 __c1, size_t __l1, _UIntType1 __f1,
typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
std::mersenne_twister_engine<_UIntType1, __w1, __n1, __m1,
__r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
- __l1, __f1>&);
+ __l1, __f1>& __x);
private:
_UIntType _M_x[state_size];
@@ -702,7 +711,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend bool
operator==(const subtract_with_carry_engine& __lhs,
const subtract_with_carry_engine& __rhs)
- { return std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x); }
+ { return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x)
+ && __lhs._M_carry == __rhs._M_carry
+ && __lhs._M_p == __rhs._M_p); }
/**
* @brief Inserts the current state of a % subtract_with_carry_engine
@@ -801,21 +812,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Copy constructs a %discard_block_engine engine.
*
* Copies an existing base class random number generator.
- * @param rng An existing (base class) engine object.
+ * @param __rng An existing (base class) engine object.
*/
explicit
- discard_block_engine(const _RandomNumberEngine& __rne)
- : _M_b(__rne), _M_n(0) { }
+ discard_block_engine(const _RandomNumberEngine& __rng)
+ : _M_b(__rng), _M_n(0) { }
/**
* @brief Move constructs a %discard_block_engine engine.
*
* Copies an existing base class random number generator.
- * @param rng An existing (base class) engine object.
+ * @param __rng An existing (base class) engine object.
*/
explicit
- discard_block_engine(_RandomNumberEngine&& __rne)
- : _M_b(std::move(__rne)), _M_n(0) { }
+ discard_block_engine(_RandomNumberEngine&& __rng)
+ : _M_b(std::move(__rng)), _M_n(0) { }
/**
* @brief Seed constructs a %discard_block_engine engine.
@@ -881,7 +892,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* object.
*/
const _RandomNumberEngine&
- base() const
+ base() const noexcept
{ return _M_b; }
/**
@@ -944,9 +955,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _RandomNumberEngine1, size_t __p1, size_t __r1,
typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const std::discard_block_engine<_RandomNumberEngine1,
- __p1, __r1>&);
+ __p1, __r1>& __x);
/**
* @brief Extracts the current state of a % subtract_with_carry_engine
@@ -962,9 +973,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _RandomNumberEngine1, size_t __p1, size_t __r1,
typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
std::discard_block_engine<_RandomNumberEngine1,
- __p1, __r1>&);
+ __p1, __r1>& __x);
private:
_RandomNumberEngine _M_b;
@@ -1019,21 +1030,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Copy constructs a %independent_bits_engine engine.
*
* Copies an existing base class random number generator.
- * @param rng An existing (base class) engine object.
+ * @param __rng An existing (base class) engine object.
*/
explicit
- independent_bits_engine(const _RandomNumberEngine& __rne)
- : _M_b(__rne) { }
+ independent_bits_engine(const _RandomNumberEngine& __rng)
+ : _M_b(__rng) { }
/**
* @brief Move constructs a %independent_bits_engine engine.
*
* Copies an existing base class random number generator.
- * @param rng An existing (base class) engine object.
+ * @param __rng An existing (base class) engine object.
*/
explicit
- independent_bits_engine(_RandomNumberEngine&& __rne)
- : _M_b(std::move(__rne)) { }
+ independent_bits_engine(_RandomNumberEngine&& __rng)
+ : _M_b(std::move(__rng)) { }
/**
* @brief Seed constructs a %independent_bits_engine engine.
@@ -1090,7 +1101,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* object.
*/
const _RandomNumberEngine&
- base() const
+ base() const noexcept
{ return _M_b; }
/**
@@ -1238,22 +1249,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Copy constructs a %shuffle_order_engine engine.
*
* Copies an existing base class random number generator.
- * @param rng An existing (base class) engine object.
+ * @param __rng An existing (base class) engine object.
*/
explicit
- shuffle_order_engine(const _RandomNumberEngine& __rne)
- : _M_b(__rne)
+ shuffle_order_engine(const _RandomNumberEngine& __rng)
+ : _M_b(__rng)
{ _M_initialize(); }
/**
* @brief Move constructs a %shuffle_order_engine engine.
*
* Copies an existing base class random number generator.
- * @param rng An existing (base class) engine object.
+ * @param __rng An existing (base class) engine object.
*/
explicit
- shuffle_order_engine(_RandomNumberEngine&& __rne)
- : _M_b(std::move(__rne))
+ shuffle_order_engine(_RandomNumberEngine&& __rng)
+ : _M_b(std::move(__rng))
{ _M_initialize(); }
/**
@@ -1320,7 +1331,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Gets a const reference to the underlying generator engine object.
*/
const _RandomNumberEngine&
- base() const
+ base() const noexcept
{ return _M_b; }
/**
@@ -1367,7 +1378,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend bool
operator==(const shuffle_order_engine& __lhs,
const shuffle_order_engine& __rhs)
- { return __lhs._M_b == __rhs._M_b; }
+ { return (__lhs._M_b == __rhs._M_b
+ && std::equal(__lhs._M_v, __lhs._M_v + __k, __rhs._M_v)
+ && __lhs._M_y == __rhs._M_y); }
/**
* @brief Inserts the current state of a %shuffle_order_engine random
@@ -1383,9 +1396,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _RandomNumberEngine1, size_t __k1,
typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const std::shuffle_order_engine<_RandomNumberEngine1,
- __k1>&);
+ __k1>& __x);
/**
* @brief Extracts the current state of a % subtract_with_carry_engine
@@ -1401,8 +1414,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _RandomNumberEngine1, size_t __k1,
typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::shuffle_order_engine<_RandomNumberEngine1, __k1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::shuffle_order_engine<_RandomNumberEngine1, __k1>& __x);
private:
void _M_initialize()
@@ -1544,16 +1557,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
- result_type
- min() const
+ static constexpr result_type
+ min()
{ return std::numeric_limits<result_type>::min(); }
- result_type
- max() const
+ static constexpr result_type
+ max()
{ return std::numeric_limits<result_type>::max(); }
double
- entropy() const
+ entropy() const noexcept
{ return 0.0; }
result_type
@@ -1706,28 +1719,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p);
+ /**
+ * @brief Return true if two uniform integer distributions have
+ * the same parameters.
+ */
+ friend bool
+ operator==(const uniform_int_distribution& __d1,
+ const uniform_int_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
+ private:
param_type _M_param;
};
/**
* @brief Return true if two uniform integer distributions have
- * the same parameters.
- */
- template<typename _IntType>
- inline bool
- operator==(const std::uniform_int_distribution<_IntType>& __d1,
- const std::uniform_int_distribution<_IntType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
- * @brief Return true if two uniform integer distributions have
* different parameters.
*/
template<typename _IntType>
@@ -1816,8 +1829,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Constructs a uniform_real_distribution object.
*
- * @param __min [IN] The lower bound of the distribution.
- * @param __max [IN] The upper bound of the distribution.
+ * @param __a [IN] The lower bound of the distribution.
+ * @param __b [IN] The upper bound of the distribution.
*/
explicit
uniform_real_distribution(_RealType __a = _RealType(0),
@@ -1881,7 +1894,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -1893,22 +1906,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return (__aurng() * (__p.b() - __p.a())) + __p.a();
}
+ /**
+ * @brief Return true if two uniform real distributions have
+ * the same parameters.
+ */
+ friend bool
+ operator==(const uniform_real_distribution& __d1,
+ const uniform_real_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
* @brief Return true if two uniform real distributions have
- * the same parameters.
- */
- template<typename _IntType>
- inline bool
- operator==(const std::uniform_real_distribution<_IntType>& __d1,
- const std::uniform_real_distribution<_IntType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
- * @brief Return true if two uniform real distributions have
* different parameters.
*/
template<typename _IntType>
@@ -2075,7 +2087,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -2104,8 +2116,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::normal_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::normal_distribution<_RealType1>& __x);
/**
* @brief Extracts a %normal_distribution random number distribution
@@ -2119,8 +2131,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::normal_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::normal_distribution<_RealType1>& __x);
private:
param_type _M_param;
@@ -2248,7 +2260,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -2261,12 +2273,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the same parameters and the sequences that would
* be generated are equal.
*/
- template<typename _RealType1>
- friend bool
- operator==(const std::lognormal_distribution<_RealType1>& __d1,
- const std::lognormal_distribution<_RealType1>& __d2)
- { return (__d1.param() == __d2.param()
- && __d1._M_nd == __d2._M_nd); }
+ friend bool
+ operator==(const lognormal_distribution& __d1,
+ const lognormal_distribution& __d2)
+ { return (__d1._M_param == __d2._M_param
+ && __d1._M_nd == __d2._M_nd); }
/**
* @brief Inserts a %lognormal_distribution random number distribution
@@ -2280,8 +2291,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::lognormal_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::lognormal_distribution<_RealType1>& __x);
/**
* @brief Extracts a %lognormal_distribution random number distribution
@@ -2295,8 +2306,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::lognormal_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::lognormal_distribution<_RealType1>& __x);
private:
param_type _M_param;
@@ -2442,7 +2453,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -2454,12 +2465,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* parameters and the sequences that would be generated
* are equal.
*/
- template<typename _RealType1>
- friend bool
- operator==(const std::gamma_distribution<_RealType1>& __d1,
- const std::gamma_distribution<_RealType1>& __d2)
- { return (__d1.param() == __d2.param()
- && __d1._M_nd == __d2._M_nd); }
+ friend bool
+ operator==(const gamma_distribution& __d1,
+ const gamma_distribution& __d2)
+ { return (__d1._M_param == __d2._M_param
+ && __d1._M_nd == __d2._M_nd); }
/**
* @brief Inserts a %gamma_distribution random number distribution
@@ -2473,8 +2483,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::gamma_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::gamma_distribution<_RealType1>& __x);
/**
* @brief Extracts a %gamma_distribution random number distribution
@@ -2487,8 +2497,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::gamma_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::gamma_distribution<_RealType1>& __x);
private:
param_type _M_param;
@@ -2619,11 +2629,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the same parameters and the sequences that would be
* generated are equal.
*/
- template<typename _RealType1>
- friend bool
- operator==(const std::chi_squared_distribution<_RealType1>& __d1,
- const std::chi_squared_distribution<_RealType1>& __d2)
- { return __d1.param() == __d2.param() && __d1._M_gd == __d2._M_gd; }
+ friend bool
+ operator==(const chi_squared_distribution& __d1,
+ const chi_squared_distribution& __d2)
+ { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; }
/**
* @brief Inserts a %chi_squared_distribution random number distribution
@@ -2637,8 +2646,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::chi_squared_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::chi_squared_distribution<_RealType1>& __x);
/**
* @brief Extracts a %chi_squared_distribution random number distribution
@@ -2652,8 +2661,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::chi_squared_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::chi_squared_distribution<_RealType1>& __x);
private:
param_type _M_param;
@@ -2778,29 +2787,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p);
+ /**
+ * @brief Return true if two Cauchy distributions have
+ * the same parameters.
+ */
+ friend bool
+ operator==(const cauchy_distribution& __d1,
+ const cauchy_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
* @brief Return true if two Cauchy distributions have
- * the same parameters.
- */
- template<typename _RealType>
- inline bool
- operator==(const std::cauchy_distribution<_RealType>& __d1,
- const std::cauchy_distribution<_RealType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
- * @brief Return true if two Cauchy distributions have
* different parameters.
*/
template<typename _RealType>
@@ -2821,8 +2829,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::cauchy_distribution<_RealType>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::cauchy_distribution<_RealType>& __x);
/**
* @brief Extracts a %cauchy_distribution random number distribution
@@ -2836,8 +2844,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::cauchy_distribution<_RealType>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::cauchy_distribution<_RealType>& __x);
/**
@@ -2972,13 +2980,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the same parameters and the sequences that would
* be generated are equal.
*/
- template<typename _RealType1>
- friend bool
- operator==(const std::fisher_f_distribution<_RealType1>& __d1,
- const std::fisher_f_distribution<_RealType1>& __d2)
- { return (__d1.param() == __d2.param()
- && __d1._M_gd_x == __d2._M_gd_x
- && __d1._M_gd_y == __d2._M_gd_y); }
+ friend bool
+ operator==(const fisher_f_distribution& __d1,
+ const fisher_f_distribution& __d2)
+ { return (__d1._M_param == __d2._M_param
+ && __d1._M_gd_x == __d2._M_gd_x
+ && __d1._M_gd_y == __d2._M_gd_y); }
/**
* @brief Inserts a %fisher_f_distribution random number distribution
@@ -2992,8 +2999,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::fisher_f_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::fisher_f_distribution<_RealType1>& __x);
/**
* @brief Extracts a %fisher_f_distribution random number distribution
@@ -3007,8 +3014,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::fisher_f_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::fisher_f_distribution<_RealType1>& __x);
private:
param_type _M_param;
@@ -3146,12 +3153,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the same parameters and the sequences that would
* be generated are equal.
*/
- template<typename _RealType1>
- friend bool
- operator==(const std::student_t_distribution<_RealType1>& __d1,
- const std::student_t_distribution<_RealType1>& __d2)
- { return (__d1.param() == __d2.param()
- && __d1._M_nd == __d2._M_nd && __d1._M_gd == __d2._M_gd); }
+ friend bool
+ operator==(const student_t_distribution& __d1,
+ const student_t_distribution& __d2)
+ { return (__d1._M_param == __d2._M_param
+ && __d1._M_nd == __d2._M_nd && __d1._M_gd == __d2._M_gd); }
/**
* @brief Inserts a %student_t_distribution random number distribution
@@ -3165,8 +3171,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::student_t_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::student_t_distribution<_RealType1>& __x);
/**
* @brief Extracts a %student_t_distribution random number distribution
@@ -3180,8 +3186,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::student_t_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::student_t_distribution<_RealType1>& __x);
private:
param_type _M_param;
@@ -3310,7 +3316,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -3325,21 +3331,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return false;
}
+ /**
+ * @brief Return true if two Bernoulli distributions have
+ * the same parameters.
+ */
+ friend bool
+ operator==(const bernoulli_distribution& __d1,
+ const bernoulli_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
* @brief Return true if two Bernoulli distributions have
- * the same parameters.
- */
- inline bool
- operator==(const std::bernoulli_distribution& __d1,
- const std::bernoulli_distribution& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
- * @brief Return true if two Bernoulli distributions have
* different parameters.
*/
inline bool
@@ -3359,8 +3365,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _CharT, typename _Traits>
std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::bernoulli_distribution&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::bernoulli_distribution& __x);
/**
* @brief Extracts a %bernoulli_distribution random number distribution
@@ -3510,7 +3516,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -3522,14 +3528,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the same parameters and the sequences that would
* be generated are equal.
*/
- template<typename _IntType1>
friend bool
- operator==(const std::binomial_distribution<_IntType1>& __d1,
- const std::binomial_distribution<_IntType1>& __d2)
+ operator==(const binomial_distribution& __d1,
+ const binomial_distribution& __d2)
#ifdef _GLIBCXX_USE_C99_MATH_TR1
- { return __d1.param() == __d2.param() && __d1._M_nd == __d2._M_nd; }
+ { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; }
#else
- { return __d1.param() == __d2.param(); }
+ { return __d1._M_param == __d2._M_param; }
#endif
/**
@@ -3545,8 +3550,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _IntType1,
typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::binomial_distribution<_IntType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::binomial_distribution<_IntType1>& __x);
/**
* @brief Extracts a %binomial_distribution random number distribution
@@ -3561,8 +3566,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _IntType1,
typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::binomial_distribution<_IntType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::binomial_distribution<_IntType1>& __x);
private:
template<typename _UniformRandomNumberGenerator>
@@ -3611,8 +3616,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
param_type(double __p = 0.5)
: _M_p(__p)
{
- _GLIBCXX_DEBUG_ASSERT((_M_p > 0.0)
- && (_M_p < 1.0));
+ _GLIBCXX_DEBUG_ASSERT((_M_p > 0.0) && (_M_p < 1.0));
_M_initialize();
}
@@ -3695,29 +3699,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p);
+ /**
+ * @brief Return true if two geometric distributions have
+ * the same parameters.
+ */
+ friend bool
+ operator==(const geometric_distribution& __d1,
+ const geometric_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
* @brief Return true if two geometric distributions have
- * the same parameters.
- */
- template<typename _IntType>
- inline bool
- operator==(const std::geometric_distribution<_IntType>& __d1,
- const std::geometric_distribution<_IntType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
- * @brief Return true if two geometric distributions have
* different parameters.
*/
template<typename _IntType>
@@ -3739,8 +3742,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _IntType,
typename _CharT, typename _Traits>
std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::geometric_distribution<_IntType>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::geometric_distribution<_IntType>& __x);
/**
* @brief Extracts a %geometric_distribution random number distribution
@@ -3754,8 +3757,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _IntType,
typename _CharT, typename _Traits>
std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::geometric_distribution<_IntType>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::geometric_distribution<_IntType>& __x);
/**
@@ -3880,11 +3883,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the same parameters and the sequences that would be
* generated are equal.
*/
- template<typename _IntType1>
- friend bool
- operator==(const std::negative_binomial_distribution<_IntType1>& __d1,
- const std::negative_binomial_distribution<_IntType1>& __d2)
- { return __d1.param() == __d2.param() && __d1._M_gd == __d2._M_gd; }
+ friend bool
+ operator==(const negative_binomial_distribution& __d1,
+ const negative_binomial_distribution& __d2)
+ { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; }
/**
* @brief Inserts a %negative_binomial_distribution random
@@ -3899,8 +3901,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _IntType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::negative_binomial_distribution<_IntType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::negative_binomial_distribution<_IntType1>& __x);
/**
* @brief Extracts a %negative_binomial_distribution random number
@@ -3914,8 +3916,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _IntType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::negative_binomial_distribution<_IntType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::negative_binomial_distribution<_IntType1>& __x);
private:
param_type _M_param;
@@ -4052,7 +4054,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -4064,14 +4066,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* parameters and the sequences that would be generated
* are equal.
*/
- template<typename _IntType1>
- friend bool
- operator==(const std::poisson_distribution<_IntType1>& __d1,
- const std::poisson_distribution<_IntType1>& __d2)
+ friend bool
+ operator==(const poisson_distribution& __d1,
+ const poisson_distribution& __d2)
#ifdef _GLIBCXX_USE_C99_MATH_TR1
- { return __d1.param() == __d2.param() && __d1._M_nd == __d2._M_nd; }
+ { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; }
#else
- { return __d1.param() == __d2.param(); }
+ { return __d1._M_param == __d2._M_param; }
#endif
/**
@@ -4086,8 +4087,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _IntType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::poisson_distribution<_IntType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::poisson_distribution<_IntType1>& __x);
/**
* @brief Extracts a %poisson_distribution random number distribution
@@ -4101,8 +4102,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _IntType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::poisson_distribution<_IntType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::poisson_distribution<_IntType1>& __x);
private:
param_type _M_param;
@@ -4234,7 +4235,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -4243,24 +4244,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
__aurng(__urng);
- return -std::log(__aurng()) / __p.lambda();
+ return -std::log(result_type(1) - __aurng()) / __p.lambda();
}
+ /**
+ * @brief Return true if two exponential distributions have the same
+ * parameters.
+ */
+ friend bool
+ operator==(const exponential_distribution& __d1,
+ const exponential_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
- * @brief Return true if two exponential distributions have the same
- * parameters.
- */
- template<typename _RealType>
- inline bool
- operator==(const std::exponential_distribution<_RealType>& __d1,
- const std::exponential_distribution<_RealType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
* @brief Return true if two exponential distributions have different
* parameters.
*/
@@ -4282,8 +4282,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::exponential_distribution<_RealType>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::exponential_distribution<_RealType>& __x);
/**
* @brief Extracts a %exponential_distribution random number distribution
@@ -4297,8 +4297,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::exponential_distribution<_RealType>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::exponential_distribution<_RealType>& __x);
/**
@@ -4414,28 +4414,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p);
+ /**
+ * @brief Return true if two Weibull distributions have the same
+ * parameters.
+ */
+ friend bool
+ operator==(const weibull_distribution& __d1,
+ const weibull_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
- * @brief Return true if two Weibull distributions have the same
- * parameters.
- */
- template<typename _RealType>
- inline bool
- operator==(const std::weibull_distribution<_RealType>& __d1,
- const std::weibull_distribution<_RealType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
* @brief Return true if two Weibull distributions have different
* parameters.
*/
@@ -4457,8 +4456,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::weibull_distribution<_RealType>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::weibull_distribution<_RealType>& __x);
/**
* @brief Extracts a %weibull_distribution random number distribution
@@ -4472,8 +4471,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::weibull_distribution<_RealType>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::weibull_distribution<_RealType>& __x);
/**
@@ -4589,28 +4588,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p);
+ /**
+ * @brief Return true if two extreme value distributions have the same
+ * parameters.
+ */
+ friend bool
+ operator==(const extreme_value_distribution& __d1,
+ const extreme_value_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
private:
param_type _M_param;
};
/**
- * @brief Return true if two extreme value distributions have the same
- * parameters.
- */
- template<typename _RealType>
- inline bool
- operator==(const std::extreme_value_distribution<_RealType>& __d1,
- const std::extreme_value_distribution<_RealType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
* @brief Return true if two extreme value distributions have different
* parameters.
*/
@@ -4632,8 +4630,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::extreme_value_distribution<_RealType>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::extreme_value_distribution<_RealType>& __x);
/**
* @brief Extracts a %extreme_value_distribution random number
@@ -4647,8 +4645,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType, typename _CharT, typename _Traits>
std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::extreme_value_distribution<_RealType>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::extreme_value_distribution<_RealType>& __x);
/**
@@ -4790,7 +4788,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -4798,6 +4796,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const param_type& __p);
/**
+ * @brief Return true if two discrete distributions have the same
+ * parameters.
+ */
+ friend bool
+ operator==(const discrete_distribution& __d1,
+ const discrete_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
+ /**
* @brief Inserts a %discrete_distribution random number distribution
* @p __x into the output stream @p __os.
*
@@ -4809,8 +4816,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _IntType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::discrete_distribution<_IntType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::discrete_distribution<_IntType1>& __x);
/**
* @brief Extracts a %discrete_distribution random number distribution
@@ -4825,24 +4832,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _IntType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::discrete_distribution<_IntType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::discrete_distribution<_IntType1>& __x);
private:
param_type _M_param;
};
/**
- * @brief Return true if two discrete distributions have the same
- * parameters.
- */
- template<typename _IntType>
- inline bool
- operator==(const std::discrete_distribution<_IntType>& __d1,
- const std::discrete_distribution<_IntType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
* @brief Return true if two discrete distributions have different
* parameters.
*/
@@ -5028,7 +5025,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -5036,6 +5033,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const param_type& __p);
/**
+ * @brief Return true if two piecewise constant distributions have the
+ * same parameters.
+ */
+ friend bool
+ operator==(const piecewise_constant_distribution& __d1,
+ const piecewise_constant_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
+ /**
* @brief Inserts a %piecewise_constan_distribution random
* number distribution @p __x into the output stream @p __os.
*
@@ -5048,8 +5054,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::piecewise_constant_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::piecewise_constant_distribution<_RealType1>& __x);
/**
* @brief Extracts a %piecewise_constan_distribution random
@@ -5064,24 +5070,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::piecewise_constant_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::piecewise_constant_distribution<_RealType1>& __x);
private:
param_type _M_param;
};
/**
- * @brief Return true if two piecewise constant distributions have the
- * same parameters.
- */
- template<typename _RealType>
- inline bool
- operator==(const std::piecewise_constant_distribution<_RealType>& __d1,
- const std::piecewise_constant_distribution<_RealType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
* @brief Return true if two piecewise constant distributions have
* different parameters.
*/
@@ -5270,7 +5266,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
- { return this->operator()(__urng, this->param()); }
+ { return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
@@ -5278,6 +5274,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const param_type& __p);
/**
+ * @brief Return true if two piecewise linear distributions have the
+ * same parameters.
+ */
+ friend bool
+ operator==(const piecewise_linear_distribution& __d1,
+ const piecewise_linear_distribution& __d2)
+ { return __d1._M_param == __d2._M_param; }
+
+ /**
* @brief Inserts a %piecewise_linear_distribution random number
* distribution @p __x into the output stream @p __os.
*
@@ -5290,8 +5295,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>&,
- const std::piecewise_linear_distribution<_RealType1>&);
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const std::piecewise_linear_distribution<_RealType1>& __x);
/**
* @brief Extracts a %piecewise_linear_distribution random number
@@ -5306,24 +5311,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _RealType1, typename _CharT, typename _Traits>
friend std::basic_istream<_CharT, _Traits>&
- operator>>(std::basic_istream<_CharT, _Traits>&,
- std::piecewise_linear_distribution<_RealType1>&);
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ std::piecewise_linear_distribution<_RealType1>& __x);
private:
param_type _M_param;
};
/**
- * @brief Return true if two piecewise linear distributions have the
- * same parameters.
- */
- template<typename _RealType>
- inline bool
- operator==(const std::piecewise_linear_distribution<_RealType>& __d1,
- const std::piecewise_linear_distribution<_RealType>& __d2)
- { return __d1.param() == __d2.param(); }
-
- /**
* @brief Return true if two piecewise linear distributions have
* different parameters.
*/
diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc
index b9f6af6536..a182dfb838 100644
--- a/libstdc++-v3/include/bits/random.tcc
+++ b/libstdc++-v3/include/bits/random.tcc
@@ -1,6 +1,6 @@
// random number generation (out of line) -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,6 +49,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
//
// Preconditions: a > 0, m > 0.
//
+ // XXX FIXME: as-is, only works correctly for __m % __a < __m / __a.
+ //
template<typename _Tp, _Tp __m, _Tp __a, _Tp __c, bool>
struct _Mod
{
@@ -399,6 +401,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
if (__zero)
_M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value;
+ _M_p = state_size;
}
template<typename _UIntType, size_t __w,
@@ -471,9 +474,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__space);
- for (size_t __i = 0; __i < __n - 1; ++__i)
+ for (size_t __i = 0; __i < __n; ++__i)
__os << __x._M_x[__i] << __space;
- __os << __x._M_x[__n - 1];
+ __os << __x._M_p;
__os.flags(__flags);
__os.fill(__fill);
@@ -498,6 +501,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (size_t __i = 0; __i < __n; ++__i)
__is >> __x._M_x[__i];
+ __is >> __x._M_p;
__is.flags(__flags);
return __is;
@@ -627,7 +631,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (size_t __i = 0; __i < __r; ++__i)
__os << __x._M_x[__i] << __space;
- __os << __x._M_carry;
+ __os << __x._M_carry << __space << __x._M_p;
__os.flags(__flags);
__os.fill(__fill);
@@ -649,6 +653,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (size_t __i = 0; __i < __r; ++__i)
__is >> __x._M_x[__i];
__is >> __x._M_carry;
+ __is >> __x._M_p;
__is.flags(__flags);
return __is;
@@ -726,40 +731,65 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
independent_bits_engine<_RandomNumberEngine, __w, _UIntType>::
operator()()
{
- const long double __r = static_cast<long double>(_M_b.max())
- - static_cast<long double>(_M_b.min()) + 1.0L;
- const result_type __m = std::log(__r) / std::log(2.0L);
- result_type __n, __n0, __y0, __y1, __s0, __s1;
+ typedef typename _RandomNumberEngine::result_type _Eresult_type;
+ const _Eresult_type __r
+ = (_M_b.max() - _M_b.min() < std::numeric_limits<_Eresult_type>::max()
+ ? _M_b.max() - _M_b.min() + 1 : 0);
+ const unsigned __edig = std::numeric_limits<_Eresult_type>::digits;
+ const unsigned __m = __r ? std::__lg(__r) : __edig;
+
+ typedef typename std::common_type<_Eresult_type, result_type>::type
+ __ctype;
+ const unsigned __cdig = std::numeric_limits<__ctype>::digits;
+
+ unsigned __n, __n0;
+ __ctype __s0, __s1, __y0, __y1;
+
for (size_t __i = 0; __i < 2; ++__i)
{
__n = (__w + __m - 1) / __m + __i;
__n0 = __n - __w % __n;
- const result_type __w0 = __w / __n;
- const result_type __w1 = __w0 + 1;
- __s0 = result_type(1) << __w0;
- __s1 = result_type(1) << __w1;
- __y0 = __s0 * (__r / __s0);
- __y1 = __s1 * (__r / __s1);
- if (__r - __y0 <= __y0 / __n)
+ const unsigned __w0 = __w / __n; // __w0 <= __m
+
+ __s0 = 0;
+ __s1 = 0;
+ if (__w0 < __cdig)
+ {
+ __s0 = __ctype(1) << __w0;
+ __s1 = __s0 << 1;
+ }
+
+ __y0 = 0;
+ __y1 = 0;
+ if (__r)
+ {
+ __y0 = __s0 * (__r / __s0);
+ if (__s1)
+ __y1 = __s1 * (__r / __s1);
+
+ if (__r - __y0 <= __y0 / __n)
+ break;
+ }
+ else
break;
}
result_type __sum = 0;
for (size_t __k = 0; __k < __n0; ++__k)
{
- result_type __u;
+ __ctype __u;
do
__u = _M_b() - _M_b.min();
- while (__u >= __y0);
- __sum = __s0 * __sum + __u % __s0;
+ while (__y0 && __u >= __y0);
+ __sum = __s0 * __sum + (__s0 ? __u % __s0 : __u);
}
for (size_t __k = __n0; __k < __n; ++__k)
{
- result_type __u;
+ __ctype __u;
do
__u = _M_b() - _M_b.min();
- while (__u >= __y1);
- __sum = __s1 * __sum + __u % __s1;
+ while (__y1 && __u >= __y1);
+ __sum = __s1 * __sum + (__s1 ? __u % __s1 : __u);
}
return __sum;
}
@@ -836,12 +866,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __param)
{
- typedef typename std::make_unsigned<typename
- _UniformRandomNumberGenerator::result_type>::type __urngtype;
+ typedef typename _UniformRandomNumberGenerator::result_type
+ _Gresult_type;
typedef typename std::make_unsigned<result_type>::type __utype;
- typedef typename std::conditional<(sizeof(__urngtype)
- > sizeof(__utype)),
- __urngtype, __utype>::type __uctype;
+ typedef typename std::common_type<_Gresult_type, __utype>::type
+ __uctype;
const __uctype __urngmin = __urng.min();
const __uctype __urngmax = __urng.max();
@@ -1025,7 +1054,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
double __cand;
do
- __cand = std::floor(std::log(__aurng()) / __param._M_log_1_p);
+ __cand = std::floor(std::log(1.0 - __aurng()) / __param._M_log_1_p);
while (__cand >= __thr);
return result_type(__cand + __naf);
@@ -1075,7 +1104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __is;
}
-
+ // This is Leger's algorithm, also in Devroye, Ch. X, Example 1.5.
template<typename _IntType>
template<typename _UniformRandomNumberGenerator>
typename negative_binomial_distribution<_IntType>::result_type
@@ -1230,7 +1259,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
do
{
const double __u = __c * __aurng();
- const double __e = -std::log(__aurng());
+ const double __e = -std::log(1.0 - __aurng());
double __w = 0.0;
@@ -1262,7 +1291,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__x = 1;
else
{
- const double __v = -std::log(__aurng());
+ const double __v = -std::log(1.0 - __aurng());
const double __y = __param._M_d
+ __v * __2cx / __param._M_d;
__x = std::ceil(__y);
@@ -1406,7 +1435,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
do
{
- const double __e = -std::log(__aurng());
+ const double __e = -std::log(1.0 - __aurng());
__sum += __e / (__t - __x);
__x += 1;
}
@@ -1474,7 +1503,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__reject = __y >= __param._M_d1;
if (!__reject)
{
- const double __e = -std::log(__aurng());
+ const double __e = -std::log(1.0 - __aurng());
__x = std::floor(__y);
__v = -__e - __n * __n / 2 + __param._M_c;
}
@@ -1486,15 +1515,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__reject = __y >= __param._M_d2;
if (!__reject)
{
- const double __e = -std::log(__aurng());
+ const double __e = -std::log(1.0 - __aurng());
__x = std::floor(-__y);
__v = -__e - __n * __n / 2;
}
}
else if (__u <= __a123)
{
- const double __e1 = -std::log(__aurng());
- const double __e2 = -std::log(__aurng());
+ const double __e1 = -std::log(1.0 - __aurng());
+ const double __e2 = -std::log(1.0 - __aurng());
const double __y = __param._M_d1
+ 2 * __s1s * __e1 / __param._M_d1;
@@ -1505,8 +1534,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
else
{
- const double __e1 = -std::log(__aurng());
- const double __e2 = -std::log(__aurng());
+ const double __e1 = -std::log(1.0 - __aurng());
+ const double __e2 = -std::log(1.0 - __aurng());
const double __y = __param._M_d2
+ 2 * __s2s * __e1 / __param._M_d2;
@@ -2108,7 +2137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
__aurng(__urng);
- return __p.b() * std::pow(-std::log(__aurng()),
+ return __p.b() * std::pow(-std::log(result_type(1) - __aurng()),
result_type(1) / __p.a());
}
@@ -2166,7 +2195,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
__aurng(__urng);
- return __p.a() - __p.b() * std::log(-std::log(__aurng()));
+ return __p.a() - __p.b() * std::log(-std::log(result_type(1)
+ - __aurng()));
}
template<typename _RealType, typename _CharT, typename _Traits>
@@ -2761,7 +2791,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: (__n - 1) / 2;
const size_t __p = (__n - __t) / 2;
const size_t __q = __p + __t;
- const size_t __m = std::max(__s + 1, __n);
+ const size_t __m = std::max(size_t(__s + 1), __n);
for (size_t __k = 0; __k < __m; ++__k)
{
@@ -2769,8 +2799,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
^ __begin[(__k + __p) % __n]
^ __begin[(__k - 1) % __n]);
_Type __r1 = __arg ^ (__arg >> 27);
- __r1 = __detail::__mod<_Type, __detail::_Shift<_Type, 32>::__value,
- 1664525u, 0u>(__r1);
+ __r1 = __detail::__mod<_Type,
+ __detail::_Shift<_Type, 32>::__value>(1664525u * __r1);
_Type __r2 = __r1;
if (__k == 0)
__r2 += __s;
@@ -2791,8 +2821,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ __begin[(__k + __p) % __n]
+ __begin[(__k - 1) % __n]);
_Type __r3 = __arg ^ (__arg >> 27);
- __r3 = __detail::__mod<_Type, __detail::_Shift<_Type, 32>::__value,
- 1566083941u, 0u>(__r3);
+ __r3 = __detail::__mod<_Type,
+ __detail::_Shift<_Type, 32>::__value>(1566083941u * __r3);
_Type __r4 = __r3 - __k % __n;
__r4 = __detail::__mod<_Type,
__detail::_Shift<_Type, 32>::__value>(__r4);
diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h
index 0463791b71..e1b83bfcfc 100644
--- a/libstdc++-v3/include/bits/range_access.h
+++ b/libstdc++-v3/include/bits/range_access.h
@@ -41,7 +41,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return an iterator pointing to the first element of
* the container.
- * @param cont Container.
+ * @param __cont Container.
*/
template<class _Container>
inline auto
@@ -51,7 +51,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return an iterator pointing to the first element of
* the const container.
- * @param cont Container.
+ * @param __cont Container.
*/
template<class _Container>
inline auto
@@ -61,7 +61,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return an iterator pointing to one past the last element of
* the container.
- * @param cont Container.
+ * @param __cont Container.
*/
template<class _Container>
inline auto
@@ -71,7 +71,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return an iterator pointing to one past the last element of
* the const container.
- * @param cont Container.
+ * @param __cont Container.
*/
template<class _Container>
inline auto
@@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return an iterator pointing to the first element of the array.
- * @param arr Array.
+ * @param __arr Array.
*/
template<class _Tp, size_t _Nm>
inline _Tp*
@@ -90,7 +90,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return an iterator pointing to one past the last element
* of the array.
- * @param arr Array.
+ * @param __arr Array.
*/
template<class _Tp, size_t _Nm>
inline _Tp*
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
index f29ee91391..4c496653cb 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -82,9 +82,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Performs the identity translation.
*
- * @param c A character to the locale-specific character set.
+ * @param __c A character to the locale-specific character set.
*
- * @returns c.
+ * @returns __c.
*/
char_type
translate(char_type __c) const
@@ -93,9 +93,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Translates a character into a case-insensitive equivalent.
*
- * @param c A character to the locale-specific character set.
+ * @param __c A character to the locale-specific character set.
*
- * @returns the locale-specific lower-case equivalent of c.
+ * @returns the locale-specific lower-case equivalent of __c.
* @throws std::bad_cast if the imbued locale does not support the ctype
* facet.
*/
@@ -110,8 +110,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets a sort key for a character sequence.
*
- * @param first beginning of the character sequence.
- * @param last one-past-the-end of the character sequence.
+ * @param __first beginning of the character sequence.
+ * @param __last one-past-the-end of the character sequence.
*
* Returns a sort key for the character sequence designated by the
* iterator range [F1, F2) such that if the character sequence [G1, G2)
@@ -142,14 +142,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets a sort key for a character sequence, independant of case.
*
- * @param first beginning of the character sequence.
- * @param last one-past-the-end of the character sequence.
+ * @param __first beginning of the character sequence.
+ * @param __last one-past-the-end of the character sequence.
*
* Effects: if typeid(use_facet<collate<_Ch_type> >) ==
* typeid(collate_byname<_Ch_type>) and the form of the sort key
- * returned by collate_byname<_Ch_type>::transform(first, last) is known
- * and can be converted into a primary sort key then returns that key,
- * otherwise returns an empty string.
+ * returned by collate_byname<_Ch_type>::transform(__first, __last)
+ * is known and can be converted into a primary sort key
+ * then returns that key, otherwise returns an empty string.
*
* @todo Implement this function.
*/
@@ -161,12 +161,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets a collation element by name.
*
- * @param first beginning of the collation element name.
- * @param last one-past-the-end of the collation element name.
+ * @param __first beginning of the collation element name.
+ * @param __last one-past-the-end of the collation element name.
*
* @returns a sequence of one or more characters that represents the
* collating element consisting of the character sequence designated by
- * the iterator range [first, last). Returns an empty string if the
+ * the iterator range [__first, __last). Returns an empty string if the
* character sequence is not a valid collating element.
*
* @todo Implement this function.
@@ -180,19 +180,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Maps one or more characters to a named character
* classification.
*
- * @param first beginning of the character sequence.
- * @param last one-past-the-end of the character sequence.
- * @param icase ignores the case of the classification name.
+ * @param __first beginning of the character sequence.
+ * @param __last one-past-the-end of the character sequence.
+ * @param __icase ignores the case of the classification name.
*
* @returns an unspecified value that represents the character
- * classification named by the character sequence designated by the
- * iterator range [first, last). If @p icase is true, the returned mask
- * identifies the classification regardless of the case of the characters
- * to be matched (for example, [[:lower:]] is the same as [[:alpha:]]),
- * otherwise a case-dependant classification is returned. The value
- * returned shall be independent of the case of the characters in the
- * character sequence. If the name is not recognized then returns a value
- * that compares equal to 0.
+ * classification named by the character sequence designated by
+ * the iterator range [__first, __last). If @p icase is true,
+ * the returned mask identifies the classification regardless of
+ * the case of the characters to be matched (for example,
+ * [[:lower:]] is the same as [[:alpha:]]), otherwise a
+ * case-dependant classification is returned. The value
+ * returned shall be independent of the case of the characters
+ * in the character sequence. If the name is not recognized then
+ * returns a value that compares equal to 0.
*
* At least the following names (or their wide-character equivalent) are
* supported.
@@ -223,11 +224,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines if @p c is a member of an identified class.
*
- * @param c a character.
- * @param f a class type (as returned from lookup_classname).
+ * @param __c a character.
+ * @param __f a class type (as returned from lookup_classname).
*
- * @returns true if the character @p c is a member of the classification
- * represented by @p f, false otherwise.
+ * @returns true if the character @p __c is a member of the classification
+ * represented by @p __f, false otherwise.
*
* @throws std::bad_cast if the current locale does not have a ctype
* facet.
@@ -238,12 +239,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Converts a digit to an int.
*
- * @param ch a character representing a digit.
- * @param radix the radix if the numeric conversion (limited to 8, 10,
+ * @param __ch a character representing a digit.
+ * @param __radix the radix if the numeric conversion (limited to 8, 10,
* or 16).
*
- * @returns the value represented by the digit ch in base radix if the
- * character ch is a valid digit in base radix; otherwise returns -1.
+ * @returns the value represented by the digit __ch in base radix if the
+ * character __ch is a valid digit in base radix; otherwise returns -1.
*/
int
value(_Ch_type __ch, int __radix) const;
@@ -251,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Imbues the regex_traits object with a copy of a new locale.
*
- * @param loc A locale.
+ * @param __loc A locale.
*
* @returns a copy of the previous locale in use by the regex_traits
* object.
@@ -387,15 +388,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ }
/**
- * @brief Constructs a basic regular expression from the sequence
- * [p, p + char_traits<_Ch_type>::length(p)) interpreted according to the
- * flags in @p f.
+ * @brief Constructs a basic regular expression from the
+ * sequence [__p, __p + char_traits<_Ch_type>::length(__p))
+ * interpreted according to the flags in @p __f.
*
- * @param p A pointer to the start of a C-style null-terminated string
+ * @param __p A pointer to the start of a C-style null-terminated string
* containing a regular expression.
- * @param f Flags indicating the syntax rules and options.
+ * @param __f Flags indicating the syntax rules and options.
*
- * @throws regex_error if @p p is not a valid regular expression.
+ * @throws regex_error if @p __p is not a valid regular expression.
*/
explicit
basic_regex(const _Ch_type* __p,
@@ -409,12 +410,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Constructs a basic regular expression from the sequence
* [p, p + len) interpreted according to the flags in @p f.
*
- * @param p A pointer to the start of a string containing a regular
- * expression.
- * @param len The length of the string containing the regular expression.
- * @param f Flags indicating the syntax rules and options.
+ * @param __p A pointer to the start of a string containing a regular
+ * expression.
+ * @param __len The length of the string containing the regular
+ * expression.
+ * @param __f Flags indicating the syntax rules and options.
*
- * @throws regex_error if @p p is not a valid regular expression.
+ * @throws regex_error if @p __p is not a valid regular expression.
*/
basic_regex(const _Ch_type* __p, std::size_t __len, flag_type __f)
: _M_flags(__f),
@@ -424,7 +426,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy-constructs a basic regular expression.
*
- * @param rhs A @p regex object.
+ * @param __rhs A @p regex object.
*/
basic_regex(const basic_regex& __rhs)
: _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
@@ -434,7 +436,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Move-constructs a basic regular expression.
*
- * @param rhs A @p regex object.
+ * @param __rhs A @p regex object.
*/
basic_regex(const basic_regex&& __rhs) noexcept
: _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
@@ -445,10 +447,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Constructs a basic regular expression from the string
* @p s interpreted according to the flags in @p f.
*
- * @param s A string containing a regular expression.
- * @param f Flags indicating the syntax rules and options.
+ * @param __s A string containing a regular expression.
+ * @param __f Flags indicating the syntax rules and options.
*
- * @throws regex_error if @p s is not a valid regular expression.
+ * @throws regex_error if @p __s is not a valid regular expression.
*/
template<typename _Ch_traits, typename _Ch_alloc>
explicit
@@ -464,13 +466,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Constructs a basic regular expression from the range
* [first, last) interpreted according to the flags in @p f.
*
- * @param first The start of a range containing a valid regular
- * expression.
- * @param last The end of a range containing a valid regular
- * expression.
- * @param f The format flags of the regular expression.
+ * @param __first The start of a range containing a valid regular
+ * expression.
+ * @param __last The end of a range containing a valid regular
+ * expression.
+ * @param __f The format flags of the regular expression.
*
- * @throws regex_error if @p [first, last) is not a valid regular
+ * @throws regex_error if @p [__first, __last) is not a valid regular
* expression.
*/
template<typename _InputIterator>
@@ -483,10 +485,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Constructs a basic regular expression from an initializer list.
*
- * @param l The initializer list.
- * @param f The format flags of the regular expression.
+ * @param __l The initializer list.
+ * @param __f The format flags of the regular expression.
*
- * @throws regex_error if @p l is not a valid regular expression.
+ * @throws regex_error if @p __l is not a valid regular expression.
*/
basic_regex(initializer_list<_Ch_type> __l,
flag_type __f = regex_constants::ECMAScript)
@@ -519,7 +521,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Replaces a regular expression with a new one constructed from
* a C-style null-terminated string.
*
- * @param A pointer to the start of a null-terminated C-style string
+ * @param __p A pointer to the start of a null-terminated C-style string
* containing a regular expression.
*/
basic_regex&
@@ -530,7 +532,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Replaces a regular expression with a new one constructed from
* a string.
*
- * @param A pointer to a string containing a regular expression.
+ * @param __s A pointer to a string containing a regular expression.
*/
template<typename _Ch_typeraits, typename _Allocator>
basic_regex&
@@ -541,7 +543,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief the real assignment operator.
*
- * @param rhs Another regular expression object.
+ * @param __rhs Another regular expression object.
*/
basic_regex&
assign(const basic_regex& __rhs)
@@ -554,7 +556,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief The move-assignment operator.
*
- * @param rhs Another regular expression object.
+ * @param __rhs Another regular expression object.
*/
basic_regex&
assign(basic_regex&& __rhs) noexcept
@@ -569,13 +571,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* C-style null-terminated string containing a regular expression
* pattern.
*
- * @param p A pointer to a C-style null-terminated string containing
+ * @param __p A pointer to a C-style null-terminated string containing
* a regular expression pattern.
- * @param flags Syntax option flags.
+ * @param __flags Syntax option flags.
*
- * @throws regex_error if p does not contain a valid regular expression
- * pattern interpreted according to @p flags. If regex_error is thrown,
- * *this remains unchanged.
+ * @throws regex_error if __p does not contain a valid regular
+ * expression pattern interpreted according to @p __flags. If
+ * regex_error is thrown, *this remains unchanged.
*/
basic_regex&
assign(const _Ch_type* __p,
@@ -586,14 +588,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Assigns a new regular expression to a regex object from a
* C-style string containing a regular expression pattern.
*
- * @param p A pointer to a C-style string containing a
- * regular expression pattern.
- * @param len The length of the regular expression pattern string.
- * @param flags Syntax option flags.
+ * @param __p A pointer to a C-style string containing a
+ * regular expression pattern.
+ * @param __len The length of the regular expression pattern string.
+ * @param __flags Syntax option flags.
*
- * @throws regex_error if p does not contain a valid regular expression
- * pattern interpreted according to @p flags. If regex_error is thrown,
- * *this remains unchanged.
+ * @throws regex_error if p does not contain a valid regular
+ * expression pattern interpreted according to @p __flags. If
+ * regex_error is thrown, *this remains unchanged.
*/
basic_regex&
assign(const _Ch_type* __p, std::size_t __len, flag_type __flags)
@@ -603,19 +605,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Assigns a new regular expression to a regex object from a
* string containing a regular expression pattern.
*
- * @param s A string containing a regular expression pattern.
- * @param flags Syntax option flags.
+ * @param __s A string containing a regular expression pattern.
+ * @param __flags Syntax option flags.
*
- * @throws regex_error if p does not contain a valid regular expression
- * pattern interpreted according to @p flags. If regex_error is thrown,
- * *this remains unchanged.
+ * @throws regex_error if __s does not contain a valid regular
+ * expression pattern interpreted according to @p __flags. If
+ * regex_error is thrown, *this remains unchanged.
*/
template<typename _Ch_typeraits, typename _Allocator>
basic_regex&
assign(const basic_string<_Ch_type, _Ch_typeraits, _Allocator>& __s,
- flag_type __f = regex_constants::ECMAScript)
+ flag_type __flags = regex_constants::ECMAScript)
{
- basic_regex __tmp(__s, __f);
+ basic_regex __tmp(__s, __flags);
this->swap(__tmp);
return *this;
}
@@ -623,15 +625,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Assigns a new regular expression to a regex object.
*
- * @param first The start of a range containing a valid regular
- * expression.
- * @param last The end of a range containing a valid regular
- * expression.
- * @param flags Syntax option flags.
+ * @param __first The start of a range containing a valid regular
+ * expression.
+ * @param __last The end of a range containing a valid regular
+ * expression.
+ * @param __flags Syntax option flags.
*
- * @throws regex_error if p does not contain a valid regular expression
- * pattern interpreted according to @p flags. If regex_error is thrown,
- * the object remains unchanged.
+ * @throws regex_error if p does not contain a valid regular
+ * expression pattern interpreted according to @p __flags. If
+ * regex_error is thrown, the object remains unchanged.
*/
template<typename _InputIterator>
basic_regex&
@@ -642,17 +644,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Assigns a new regular expression to a regex object.
*
- * @param l An initializer list representing a regular expression.
- * @param flags Syntax option flags.
+ * @param __l An initializer list representing a regular expression.
+ * @param __flags Syntax option flags.
*
- * @throws regex_error if @p l does not contain a valid regular
- * expression pattern interpreted according to @p flags. If regex_error
- * is thrown, the object remains unchanged.
+ * @throws regex_error if @p __l does not contain a valid
+ * regular expression pattern interpreted according to @p
+ * __flags. If regex_error is thrown, the object remains
+ * unchanged.
*/
basic_regex&
assign(initializer_list<_Ch_type> __l,
- flag_type __f = regex_constants::ECMAScript)
- { return this->assign(__l.begin(), __l.end(), __f); }
+ flag_type __flags = regex_constants::ECMAScript)
+ { return this->assign(__l.begin(), __l.end(), __flags); }
// [7.8.4] const operations
/**
@@ -675,7 +678,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Imbues the regular expression object with the given locale.
*
- * @param loc A locale.
+ * @param __loc A locale.
*/
locale_type
imbue(locale_type __loc)
@@ -693,7 +696,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Swaps the contents of two regular expression objects.
*
- * @param rhs Another regular expression object.
+ * @param __rhs Another regular expression object.
*/
void
swap(basic_regex& __rhs)
@@ -730,8 +733,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [7.8.6] basic_regex swap
/**
* @brief Swaps the contents of two regular expression objects.
- * @param lhs First regular expression.
- * @param rhs Second regular expression.
+ * @param __lhs First regular expression.
+ * @param __rhs Second regular expression.
*/
template<typename _Ch_type, typename _Rx_traits>
inline void
@@ -808,11 +811,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compares this and another matched sequence.
*
- * @param s Another matched sequence to compare to this one.
+ * @param __s Another matched sequence to compare to this one.
*
- * @retval <0 this matched sequence will collate before @p s.
- * @retval =0 this matched sequence is equivalent to @p s.
- * @retval <0 this matched sequence will collate after @p s.
+ * @retval <0 this matched sequence will collate before @p __s.
+ * @retval =0 this matched sequence is equivalent to @p __s.
+ * @retval <0 this matched sequence will collate after @p __s.
*/
int
compare(const sub_match& __s) const
@@ -821,11 +824,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compares this sub_match to a string.
*
- * @param s A string to compare to this sub_match.
+ * @param __s A string to compare to this sub_match.
*
- * @retval <0 this matched sequence will collate before @p s.
- * @retval =0 this matched sequence is equivalent to @p s.
- * @retval <0 this matched sequence will collate after @p s.
+ * @retval <0 this matched sequence will collate before @p __s.
+ * @retval =0 this matched sequence is equivalent to @p __s.
+ * @retval <0 this matched sequence will collate after @p __s.
*/
int
compare(const string_type& __s) const
@@ -834,11 +837,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compares this sub_match to a C-style string.
*
- * @param s A C-style string to compare to this sub_match.
+ * @param __s A C-style string to compare to this sub_match.
*
- * @retval <0 this matched sequence will collate before @p s.
- * @retval =0 this matched sequence is equivalent to @p s.
- * @retval <0 this matched sequence will collate after @p s.
+ * @retval <0 this matched sequence will collate before @p __s.
+ * @retval =0 this matched sequence is equivalent to @p __s.
+ * @retval <0 this matched sequence will collate after @p __s.
*/
int
compare(const value_type* __s) const
@@ -861,9 +864,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of two regular expression submatches.
- * @param lhs First regular expression submatch.
- * @param rhs Second regular expression submatch.
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs First regular expression submatch.
+ * @param __rhs Second regular expression submatch.
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _BiIter>
inline bool
@@ -873,9 +876,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of two regular expression submatches.
- * @param lhs First regular expression submatch.
- * @param rhs Second regular expression submatch.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs First regular expression submatch.
+ * @param __rhs Second regular expression submatch.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _BiIter>
inline bool
@@ -885,9 +888,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of two regular expression submatches.
- * @param lhs First regular expression submatch.
- * @param rhs Second regular expression submatch.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs First regular expression submatch.
+ * @param __rhs Second regular expression submatch.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _BiIter>
inline bool
@@ -897,9 +900,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of two regular expression submatches.
- * @param lhs First regular expression submatch.
- * @param rhs Second regular expression submatch.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs First regular expression submatch.
+ * @param __rhs Second regular expression submatch.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _BiIter>
inline bool
@@ -909,9 +912,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of two regular expression submatches.
- * @param lhs First regular expression submatch.
- * @param rhs Second regular expression submatch.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs First regular expression submatch.
+ * @param __rhs Second regular expression submatch.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _BiIter>
inline bool
@@ -921,9 +924,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of two regular expression submatches.
- * @param lhs First regular expression submatch.
- * @param rhs Second regular expression submatch.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs First regular expression submatch.
+ * @param __rhs Second regular expression submatch.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _BiIter>
inline bool
@@ -934,9 +937,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of a string and a regular expression
* submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -949,9 +952,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of a string and a regular expression
* submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -962,9 +965,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -975,9 +978,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -988,9 +991,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -1001,9 +1004,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -1015,9 +1018,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of a regular expression submatch and a
* string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -1030,9 +1033,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of a regular expression submatch and a
* string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
inline bool
@@ -1044,9 +1047,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
inline bool
@@ -1058,9 +1061,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
inline bool
@@ -1072,9 +1075,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
inline bool
@@ -1086,9 +1089,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
inline bool
@@ -1101,9 +1104,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of a C string and a regular expression
* submatch.
- * @param lhs A C string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs A C string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1114,9 +1117,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of an iterator value and a regular
* expression submatch.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1126,9 +1129,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1138,9 +1141,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1150,9 +1153,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1162,9 +1165,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1175,9 +1178,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of a regular expression submatch and a
* string.
- * @param lhs A regular expression submatch.
- * @param rhs A pointer to a string?
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A pointer to a string?
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1188,9 +1191,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of a regular expression submatch and a
* string.
- * @param lhs A regular expression submatch.
- * @param rhs A pointer to a string.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A pointer to a string.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1200,9 +1203,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1212,9 +1215,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1224,9 +1227,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1236,9 +1239,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A string.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A string.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1249,9 +1252,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of a string and a regular expression
* submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1265,9 +1268,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of a string and a regular expression
* submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1277,9 +1280,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1292,9 +1295,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1304,9 +1307,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1316,9 +1319,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a string and a regular expression submatch.
- * @param lhs A string.
- * @param rhs A regular expression submatch.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs A string.
+ * @param __rhs A regular expression submatch.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1329,9 +1332,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the equivalence of a regular expression submatch and a
* string.
- * @param lhs A regular expression submatch.
- * @param rhs A const string reference.
- * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A const string reference.
+ * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1345,9 +1348,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the inequivalence of a regular expression submatch and a
* string.
- * @param lhs A regular expression submatch.
- * @param rhs A const string reference.
- * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A const string reference.
+ * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1357,9 +1360,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A const string reference.
- * @returns true if @a lhs precedes @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A const string reference.
+ * @returns true if @a __lhs precedes @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1372,9 +1375,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A const string reference.
- * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A const string reference.
+ * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1384,9 +1387,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A const string reference.
- * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A const string reference.
+ * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1396,9 +1399,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Tests the ordering of a regular expression submatch and a string.
- * @param lhs A regular expression submatch.
- * @param rhs A const string reference.
- * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ * @param __lhs A regular expression submatch.
+ * @param __rhs A const string reference.
+ * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
*/
template<typename _Bi_iter>
inline bool
@@ -1409,8 +1412,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Inserts a matched string into an output stream.
*
- * @param os The output stream.
- * @param m A submatch string.
+ * @param __os The output stream.
+ * @param __m A submatch string.
*
* @returns the output stream with the submatch string inserted.
*/
@@ -1487,8 +1490,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef const_iterator iterator;
typedef typename std::iterator_traits<_Bi_iter>::difference_type
difference_type;
- /* TODO: needs allocator_traits */
- typedef typename _Allocator::size_type size_type;
+ typedef typename allocator_traits<_Allocator>::size_type
+ size_type;
typedef _Allocator allocator_type;
typedef typename std::iterator_traits<_Bi_iter>::value_type
char_type;
@@ -1603,11 +1606,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets the length of the indicated submatch.
- * @param sub indicates the submatch.
+ * @param __sub indicates the submatch.
* @pre ready() == true
*
* This function returns the length of the indicated submatch, or the
- * length of the entire match if @p sub is zero (the default).
+ * length of the entire match if @p __sub is zero (the default).
*/
difference_type
length(size_type __sub = 0) const
@@ -1615,16 +1618,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets the offset of the beginning of the indicated submatch.
- * @param sub indicates the submatch.
+ * @param __sub indicates the submatch.
* @pre ready() == true
*
* This function returns the offset from the beginning of the target
- * sequence to the beginning of the submatch, unless the value of @p sub
+ * sequence to the beginning of the submatch, unless the value of @p __sub
* is zero (the default), in which case this function returns the offset
* from the beginning of the target sequence to the beginning of the
* match.
*
- * Returns -1 if @p sub is out of range.
+ * Returns -1 if @p __sub is out of range.
*/
difference_type
position(size_type __sub = 0) const
@@ -1635,11 +1638,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets the match or submatch converted to a string type.
- * @param sub indicates the submatch.
+ * @param __sub indicates the submatch.
* @pre ready() == true
*
- * This function gets the submatch (or match, if @p sub is zero) extracted
- * from the target range and converted to the associated string type.
+ * This function gets the submatch (or match, if @p __sub is
+ * zero) extracted from the target range and converted to the
+ * associated string type.
*/
string_type
str(size_type __sub = 0) const
@@ -1647,13 +1651,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Gets a %sub_match reference for the match or submatch.
- * @param sub indicates the submatch.
+ * @param __sub indicates the submatch.
* @pre ready() == true
*
- * This function gets a reference to the indicated submatch, or the entire
- * match if @p sub is zero.
+ * This function gets a reference to the indicated submatch, or
+ * the entire match if @p __sub is zero.
*
- * If @p sub >= size() then this function returns a %sub_match with a
+ * If @p __sub >= size() then this function returns a %sub_match with a
* special value indicating no submatch.
*/
const_reference
@@ -1872,8 +1876,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [7.10.6] match_results swap
/**
* @brief Swaps two match results.
- * @param lhs A match result.
- * @param rhs A match result.
+ * @param __lhs A match result.
+ * @param __rhs A match result.
*
* The contents of the two match_results objects are swapped.
*/
@@ -1893,11 +1897,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Determines if there is a match between the regular expression @p e
* and all of the character sequence [first, last).
*
- * @param s Start of the character sequence to match.
- * @param e One-past-the-end of the character sequence to match.
- * @param m The match results.
- * @param re The regular expression.
- * @param flags Controls how the regular expression is matched.
+ * @param __s Start of the character sequence to match.
+ * @param __e One-past-the-end of the character sequence to match.
+ * @param __m The match results.
+ * @param __re The regular expression.
+ * @param __flags Controls how the regular expression is matched.
*
* @retval true A match exists.
* @retval false Otherwise.
@@ -1928,10 +1932,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Indicates if there is a match between the regular expression @p e
* and all of the character sequence [first, last).
*
- * @param first Beginning of the character sequence to match.
- * @param last One-past-the-end of the character sequence to match.
- * @param re The regular expression.
- * @param flags Controls how the regular expression is matched.
+ * @param __first Beginning of the character sequence to match.
+ * @param __last One-past-the-end of the character sequence to match.
+ * @param __re The regular expression.
+ * @param __flags Controls how the regular expression is matched.
*
* @retval true A match exists.
* @retval false Otherwise.
@@ -1953,10 +1957,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Determines if there is a match between the regular expression @p e
* and a C-style null-terminated string.
*
- * @param s The C-style null-terminated string to match.
- * @param m The match results.
- * @param re The regular expression.
- * @param f Controls how the regular expression is matched.
+ * @param __s The C-style null-terminated string to match.
+ * @param __m The match results.
+ * @param __re The regular expression.
+ * @param __f Controls how the regular expression is matched.
*
* @retval true A match exists.
* @retval false Otherwise.
@@ -1976,10 +1980,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Determines if there is a match between the regular expression @p e
* and a string.
*
- * @param s The string to match.
- * @param m The match results.
- * @param re The regular expression.
- * @param flags Controls how the regular expression is matched.
+ * @param __s The string to match.
+ * @param __m The match results.
+ * @param __re The regular expression.
+ * @param __flags Controls how the regular expression is matched.
*
* @retval true A match exists.
* @retval false Otherwise.
@@ -2001,9 +2005,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Indicates if there is a match between the regular expression @p e
* and a C-style null-terminated string.
*
- * @param s The C-style null-terminated string to match.
- * @param re The regular expression.
- * @param f Controls how the regular expression is matched.
+ * @param __s The C-style null-terminated string to match.
+ * @param __re The regular expression.
+ * @param __f Controls how the regular expression is matched.
*
* @retval true A match exists.
* @retval false Otherwise.
@@ -2022,9 +2026,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Indicates if there is a match between the regular expression @p e
* and a string.
*
- * @param s [IN] The string to match.
- * @param re [IN] The regular expression.
- * @param flags [IN] Controls how the regular expression is matched.
+ * @param __s [IN] The string to match.
+ * @param __re [IN] The regular expression.
+ * @param __flags [IN] Controls how the regular expression is matched.
*
* @retval true A match exists.
* @retval false Otherwise.
@@ -2043,11 +2047,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [7.11.3] Function template regex_search
/**
* Searches for a regular expression within a range.
- * @param first [IN] The start of the string to search.
- * @param last [IN] One-past-the-end of the string to search.
- * @param m [OUT] The match results.
- * @param re [IN] The regular expression to search for.
- * @param flags [IN] Search policy flags.
+ * @param __first [IN] The start of the string to search.
+ * @param __last [IN] One-past-the-end of the string to search.
+ * @param __m [OUT] The match results.
+ * @param __re [IN] The regular expression to search for.
+ * @param __flags [IN] Search policy flags.
* @retval true A match was found within the string.
* @retval false No match was found within the string, the content of %m is
* undefined.
@@ -2068,10 +2072,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Searches for a regular expression within a range.
- * @param first [IN] The start of the string to search.
- * @param last [IN] One-past-the-end of the string to search.
- * @param re [IN] The regular expression to search for.
- * @param flags [IN] Search policy flags.
+ * @param __first [IN] The start of the string to search.
+ * @param __last [IN] One-past-the-end of the string to search.
+ * @param __re [IN] The regular expression to search for.
+ * @param __flags [IN] Search policy flags.
* @retval true A match was found within the string.
* @retval false No match was found within the string.
* @doctodo
@@ -2091,10 +2095,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Searches for a regular expression within a C-string.
- * @param s [IN] A C-string to search for the regex.
- * @param m [OUT] The set of regex matches.
- * @param e [IN] The regex to search for in @p s.
- * @param f [IN] The search flags.
+ * @param __s [IN] A C-string to search for the regex.
+ * @param __m [OUT] The set of regex matches.
+ * @param __e [IN] The regex to search for in @p s.
+ * @param __f [IN] The search flags.
* @retval true A match was found within the string.
* @retval false No match was found within the string, the content of %m is
* undefined.
@@ -2113,9 +2117,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Searches for a regular expression within a C-string.
- * @param s [IN] The C-string to search.
- * @param e [IN] The regular expression to search for.
- * @param f [IN] Search policy flags.
+ * @param __s [IN] The C-string to search.
+ * @param __e [IN] The regular expression to search for.
+ * @param __f [IN] Search policy flags.
* @retval true A match was found within the string.
* @retval false No match was found within the string.
* @doctodo
@@ -2132,9 +2136,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Searches for a regular expression within a string.
- * @param s [IN] The string to search.
- * @param e [IN] The regular expression to search for.
- * @param flags [IN] Search policy flags.
+ * @param __s [IN] The string to search.
+ * @param __e [IN] The regular expression to search for.
+ * @param __flags [IN] Search policy flags.
* @retval true A match was found within the string.
* @retval false No match was found within the string.
* @doctodo
@@ -2153,10 +2157,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Searches for a regular expression within a string.
- * @param s [IN] A C++ string to search for the regex.
- * @param m [OUT] The set of regex matches.
- * @param e [IN] The regex to search for in @p s.
- * @param f [IN] The search flags.
+ * @param __s [IN] A C++ string to search for the regex.
+ * @param __m [OUT] The set of regex matches.
+ * @param __e [IN] The regex to search for in @p s.
+ * @param __f [IN] The search flags.
* @retval true A match was found within the string.
* @retval false No match was found within the string, the content of %m is
* undefined.
@@ -2178,12 +2182,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// std [28.11.4] Function template regex_replace
/**
* @doctodo
- * @param out
- * @param first
- * @param last
- * @param e
- * @param fmt
- * @param flags
+ * @param __out
+ * @param __first
+ * @param __last
+ * @param __e
+ * @param __fmt
+ * @param __flags
*
* @returns out
* @throws an exception of type regex_error.
@@ -2202,10 +2206,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @doctodo
- * @param s
- * @param e
- * @param fmt
- * @param flags
+ * @param __s
+ * @param __e
+ * @param __fmt
+ * @param __flags
*
* @returns a copy of string @p s with replacements.
*
@@ -2219,7 +2223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
regex_constants::match_flag_type __flags
= regex_constants::match_default)
{
- std::string __result;
+ basic_string<_Ch_type> __result;
regex_replace(std::back_inserter(__result),
__s.begin(), __s.end(), __e, __fmt, __flags);
return __result;
@@ -2256,10 +2260,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Constructs a %regex_iterator...
- * @param a [IN] The start of a text range to search.
- * @param b [IN] One-past-the-end of the text range to search.
- * @param re [IN] The regular expression to match.
- * @param m [IN] Policy flags for match rules.
+ * @param __a [IN] The start of a text range to search.
+ * @param __b [IN] One-past-the-end of the text range to search.
+ * @param __re [IN] The regular expression to match.
+ * @param __m [IN] Policy flags for match rules.
* @todo Implement this function.
* @doctodo
*/
@@ -2373,10 +2377,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Constructs a %regex_token_iterator...
- * @param a [IN] The start of the text to search.
- * @param b [IN] One-past-the-end of the text to search.
- * @param re [IN] The regular expression to search for.
- * @param submatch [IN] Which submatch to return. There are some
+ * @param __a [IN] The start of the text to search.
+ * @param __b [IN] One-past-the-end of the text to search.
+ * @param __re [IN] The regular expression to search for.
+ * @param __submatch [IN] Which submatch to return. There are some
* special values for this parameter:
* - -1 each enumerated subexpression does NOT
* match the regular expression (aka field
@@ -2386,7 +2390,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* within the text.
* - >0 enumerates only the indicated
* subexpression from a match within the text.
- * @param m [IN] Policy flags for match rules.
+ * @param __m [IN] Policy flags for match rules.
*
* @todo Implement this function.
* @doctodo
@@ -2398,12 +2402,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Constructs a %regex_token_iterator...
- * @param a [IN] The start of the text to search.
- * @param b [IN] One-past-the-end of the text to search.
- * @param re [IN] The regular expression to search for.
- * @param submatches [IN] A list of subexpressions to return for each
+ * @param __a [IN] The start of the text to search.
+ * @param __b [IN] One-past-the-end of the text to search.
+ * @param __re [IN] The regular expression to search for.
+ * @param __submatches [IN] A list of subexpressions to return for each
* regular expression match within the text.
- * @param m [IN] Policy flags for match rules.
+ * @param __m [IN] Policy flags for match rules.
*
* @todo Implement this function.
* @doctodo
@@ -2416,12 +2420,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Constructs a %regex_token_iterator...
- * @param a [IN] The start of the text to search.
- * @param b [IN] One-past-the-end of the text to search.
- * @param re [IN] The regular expression to search for.
- * @param submatches [IN] A list of subexpressions to return for each
- * regular expression match within the text.
- * @param m [IN] Policy flags for match rules.
+ * @param __a [IN] The start of the text to search.
+ * @param __b [IN] One-past-the-end of the text to search.
+ * @param __re [IN] The regular expression to search for.
+ * @param __submatches [IN] A list of subexpressions to return for each
+ * regular expression match within the text.
+ * @param __m [IN] Policy flags for match rules.
* @todo Implement this function.
* @doctodo
@@ -2435,14 +2439,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy constructs a %regex_token_iterator.
- * @param rhs [IN] A %regex_token_iterator to copy.
+ * @param __rhs [IN] A %regex_token_iterator to copy.
* @todo Implement this function.
*/
regex_token_iterator(const regex_token_iterator& __rhs);
/**
* @brief Assigns a %regex_token_iterator to another.
- * @param rhs [IN] A %regex_token_iterator to copy.
+ * @param __rhs [IN] A %regex_token_iterator to copy.
* @todo Implement this function.
*/
regex_token_iterator&
diff --git a/libstdc++-v3/include/bits/regex_error.h b/libstdc++-v3/include/bits/regex_error.h
index c37a0fac6d..567c08ef4e 100644
--- a/libstdc++-v3/include/bits/regex_error.h
+++ b/libstdc++-v3/include/bits/regex_error.h
@@ -99,7 +99,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static constexpr error_type error_space(_S_error_space);
/**
- * One of <em>*?+{<em> was not preceded by a valid regular expression.
+ * One of <em>*?+{</em> was not preceded by a valid regular expression.
*/
static constexpr error_type error_badrepeat(_S_error_badrepeat);
@@ -136,7 +136,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Constructs a regex_error object.
*
- * @param ecode the regex error code.
+ * @param __ecode the regex error code.
*/
explicit
regex_error(regex_constants::error_type __ecode);
diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h
index 8d323315fd..070d2d1360 100644
--- a/libstdc++-v3/include/bits/shared_ptr.h
+++ b/libstdc++-v3/include/bits/shared_ptr.h
@@ -73,7 +73,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// 2.2.3.10 shared_ptr get_deleter (experimental)
template<typename _Del, typename _Tp, _Lock_policy _Lp>
inline _Del*
- get_deleter(const __shared_ptr<_Tp, _Lp>& __p)
+ get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept
{
#ifdef __GXX_RTTI
return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
@@ -97,9 +97,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Construct an empty %shared_ptr.
* @post use_count()==0 && get()==0
*/
- constexpr shared_ptr()
+ constexpr shared_ptr() noexcept
: __shared_ptr<_Tp>() { }
+ shared_ptr(const shared_ptr&) noexcept = default;
+
/**
* @brief Construct a %shared_ptr that owns the pointer @a __p.
* @param __p A pointer that is convertible to element_type*.
@@ -201,7 +203,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @endcode
*/
template<typename _Tp1>
- shared_ptr(const shared_ptr<_Tp1>& __r, _Tp* __p)
+ shared_ptr(const shared_ptr<_Tp1>& __r, _Tp* __p) noexcept
: __shared_ptr<_Tp>(__r, __p) { }
/**
@@ -213,7 +215,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- shared_ptr(const shared_ptr<_Tp1>& __r)
+ shared_ptr(const shared_ptr<_Tp1>& __r) noexcept
: __shared_ptr<_Tp>(__r) { }
/**
@@ -221,7 +223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __r A %shared_ptr rvalue.
* @post *this contains the old value of @a __r, @a __r is empty.
*/
- shared_ptr(shared_ptr&& __r)
+ shared_ptr(shared_ptr&& __r) noexcept
: __shared_ptr<_Tp>(std::move(__r)) { }
/**
@@ -231,7 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- shared_ptr(shared_ptr<_Tp1>&& __r)
+ shared_ptr(shared_ptr<_Tp1>&& __r) noexcept
: __shared_ptr<_Tp>(std::move(__r)) { }
/**
@@ -261,12 +263,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __p A null pointer constant.
* @post use_count() == 0 && get() == nullptr
*/
- constexpr shared_ptr(nullptr_t __p)
+ constexpr shared_ptr(nullptr_t __p) noexcept
: __shared_ptr<_Tp>(__p) { }
+ shared_ptr& operator=(const shared_ptr&) noexcept = default;
+
template<typename _Tp1>
shared_ptr&
- operator=(const shared_ptr<_Tp1>& __r) // never throws
+ operator=(const shared_ptr<_Tp1>& __r) noexcept
{
this->__shared_ptr<_Tp>::operator=(__r);
return *this;
@@ -283,7 +287,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
shared_ptr&
- operator=(shared_ptr&& __r)
+ operator=(shared_ptr&& __r) noexcept
{
this->__shared_ptr<_Tp>::operator=(std::move(__r));
return *this;
@@ -291,7 +295,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<class _Tp1>
shared_ptr&
- operator=(shared_ptr<_Tp1>&& __r)
+ operator=(shared_ptr<_Tp1>&& __r) noexcept
{
this->__shared_ptr<_Tp>::operator=(std::move(__r));
return *this;
@@ -321,38 +325,102 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 20.8.13.2.7 shared_ptr comparisons
template<typename _Tp1, typename _Tp2>
inline bool
- operator==(const shared_ptr<_Tp1>& __a, const shared_ptr<_Tp2>& __b)
+ operator==(const shared_ptr<_Tp1>& __a,
+ const shared_ptr<_Tp2>& __b) noexcept
{ return __a.get() == __b.get(); }
template<typename _Tp>
inline bool
- operator==(const shared_ptr<_Tp>& __a, nullptr_t)
- { return __a.get() == nullptr; }
+ operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+ { return !__a; }
template<typename _Tp>
inline bool
- operator==(nullptr_t, const shared_ptr<_Tp>& __b)
- { return nullptr == __b.get(); }
+ operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+ { return !__a; }
template<typename _Tp1, typename _Tp2>
inline bool
- operator!=(const shared_ptr<_Tp1>& __a, const shared_ptr<_Tp2>& __b)
+ operator!=(const shared_ptr<_Tp1>& __a,
+ const shared_ptr<_Tp2>& __b) noexcept
{ return __a.get() != __b.get(); }
template<typename _Tp>
inline bool
- operator!=(const shared_ptr<_Tp>& __a, nullptr_t)
- { return __a.get() != nullptr; }
+ operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+ { return (bool)__a; }
template<typename _Tp>
inline bool
- operator!=(nullptr_t, const shared_ptr<_Tp>& __b)
- { return nullptr != __b.get(); }
+ operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+ { return (bool)__a; }
template<typename _Tp1, typename _Tp2>
inline bool
- operator<(const shared_ptr<_Tp1>& __a, const shared_ptr<_Tp2>& __b)
- { return __a.get() < __b.get(); }
+ operator<(const shared_ptr<_Tp1>& __a,
+ const shared_ptr<_Tp2>& __b) noexcept
+ {
+ typedef typename std::common_type<_Tp1*, _Tp2*>::type _CT;
+ return std::less<_CT>()(__a.get(), __b.get());
+ }
+
+ template<typename _Tp>
+ inline bool
+ operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+ { return std::less<_Tp*>()(__a.get(), nullptr); }
+
+ template<typename _Tp>
+ inline bool
+ operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+ { return std::less<_Tp*>()(nullptr, __a.get()); }
+
+ template<typename _Tp1, typename _Tp2>
+ inline bool
+ operator<=(const shared_ptr<_Tp1>& __a,
+ const shared_ptr<_Tp2>& __b) noexcept
+ { return !(__b < __a); }
+
+ template<typename _Tp>
+ inline bool
+ operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+ { return !(nullptr < __a); }
+
+ template<typename _Tp>
+ inline bool
+ operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+ { return !(__a < nullptr); }
+
+ template<typename _Tp1, typename _Tp2>
+ inline bool
+ operator>(const shared_ptr<_Tp1>& __a,
+ const shared_ptr<_Tp2>& __b) noexcept
+ { return (__b < __a); }
+
+ template<typename _Tp>
+ inline bool
+ operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+ { return std::less<_Tp*>()(nullptr, __a.get()); }
+
+ template<typename _Tp>
+ inline bool
+ operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+ { return std::less<_Tp*>()(__a.get(), nullptr); }
+
+ template<typename _Tp1, typename _Tp2>
+ inline bool
+ operator>=(const shared_ptr<_Tp1>& __a,
+ const shared_ptr<_Tp2>& __b) noexcept
+ { return !(__a < __b); }
+
+ template<typename _Tp>
+ inline bool
+ operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+ { return !(__a < nullptr); }
+
+ template<typename _Tp>
+ inline bool
+ operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+ { return !(nullptr < __a); }
template<typename _Tp>
struct less<shared_ptr<_Tp>> : public _Sp_less<shared_ptr<_Tp>>
@@ -361,23 +429,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 20.8.13.2.9 shared_ptr specialized algorithms.
template<typename _Tp>
inline void
- swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b)
+ swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept
{ __a.swap(__b); }
// 20.8.13.2.10 shared_ptr casts.
template<typename _Tp, typename _Tp1>
inline shared_ptr<_Tp>
- static_pointer_cast(const shared_ptr<_Tp1>& __r)
+ static_pointer_cast(const shared_ptr<_Tp1>& __r) noexcept
{ return shared_ptr<_Tp>(__r, static_cast<_Tp*>(__r.get())); }
template<typename _Tp, typename _Tp1>
inline shared_ptr<_Tp>
- const_pointer_cast(const shared_ptr<_Tp1>& __r)
+ const_pointer_cast(const shared_ptr<_Tp1>& __r) noexcept
{ return shared_ptr<_Tp>(__r, const_cast<_Tp*>(__r.get())); }
template<typename _Tp, typename _Tp1>
inline shared_ptr<_Tp>
- dynamic_pointer_cast(const shared_ptr<_Tp1>& __r)
+ dynamic_pointer_cast(const shared_ptr<_Tp1>& __r) noexcept
{
if (_Tp* __p = dynamic_cast<_Tp*>(__r.get()))
return shared_ptr<_Tp>(__r, __p);
@@ -394,22 +462,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class weak_ptr : public __weak_ptr<_Tp>
{
public:
- constexpr weak_ptr()
+ constexpr weak_ptr() noexcept
: __weak_ptr<_Tp>() { }
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- weak_ptr(const weak_ptr<_Tp1>& __r)
+ weak_ptr(const weak_ptr<_Tp1>& __r) noexcept
: __weak_ptr<_Tp>(__r) { }
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- weak_ptr(const shared_ptr<_Tp1>& __r)
+ weak_ptr(const shared_ptr<_Tp1>& __r) noexcept
: __weak_ptr<_Tp>(__r) { }
template<typename _Tp1>
weak_ptr&
- operator=(const weak_ptr<_Tp1>& __r) // never throws
+ operator=(const weak_ptr<_Tp1>& __r) noexcept
{
this->__weak_ptr<_Tp>::operator=(__r);
return *this;
@@ -417,14 +485,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp1>
weak_ptr&
- operator=(const shared_ptr<_Tp1>& __r) // never throws
+ operator=(const shared_ptr<_Tp1>& __r) noexcept
{
this->__weak_ptr<_Tp>::operator=(__r);
return *this;
}
shared_ptr<_Tp>
- lock() const // never throws
+ lock() const noexcept
{
#ifdef __GTHREADS
if (this->expired())
@@ -447,7 +515,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 20.8.13.3.7 weak_ptr specialized algorithms.
template<typename _Tp>
inline void
- swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b)
+ swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept
{ __a.swap(__b); }
@@ -474,12 +542,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class enable_shared_from_this
{
protected:
- constexpr enable_shared_from_this() { }
+ constexpr enable_shared_from_this() noexcept { }
- enable_shared_from_this(const enable_shared_from_this&) { }
+ enable_shared_from_this(const enable_shared_from_this&) noexcept { }
enable_shared_from_this&
- operator=(const enable_shared_from_this&)
+ operator=(const enable_shared_from_this&) noexcept
{ return *this; }
~enable_shared_from_this() { }
@@ -496,14 +564,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
template<typename _Tp1>
void
- _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const
+ _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept
{ _M_weak_this._M_assign(__p, __n); }
template<typename _Tp1>
friend void
__enable_shared_from_this_helper(const __shared_count<>& __pn,
const enable_shared_from_this* __pe,
- const _Tp1* __px)
+ const _Tp1* __px) noexcept
{
if (__pe != 0)
__pe->_M_weak_assign(const_cast<_Tp1*>(__px), __pn);
@@ -550,10 +618,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// std::hash specialization for shared_ptr.
template<typename _Tp>
struct hash<shared_ptr<_Tp>>
- : public std::unary_function<shared_ptr<_Tp>, size_t>
+ : public __hash_base<size_t, shared_ptr<_Tp>>
{
size_t
- operator()(const shared_ptr<_Tp>& __s) const
+ operator()(const shared_ptr<_Tp>& __s) const noexcept
{ return std::hash<_Tp*>()(__s.get()); }
};
diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h
index 156f7d2979..0d60eeffa5 100644
--- a/libstdc++-v3/include/bits/shared_ptr_base.h
+++ b/libstdc++-v3/include/bits/shared_ptr_base.h
@@ -1,6 +1,7 @@
// shared_ptr and weak_ptr implementation details -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -61,9 +62,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
virtual char const*
- what() const throw();
+ what() const noexcept;
- virtual ~bad_weak_ptr() throw();
+ virtual ~bad_weak_ptr() noexcept;
};
// Substitute for bad_weak_ptr object in the case of -fno-exceptions.
@@ -108,21 +109,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public _Mutex_base<_Lp>
{
public:
- _Sp_counted_base()
+ _Sp_counted_base() noexcept
: _M_use_count(1), _M_weak_count(1) { }
virtual
- ~_Sp_counted_base() // nothrow
+ ~_Sp_counted_base() noexcept
{ }
// Called when _M_use_count drops to zero, to release the resources
// managed by *this.
virtual void
- _M_dispose() = 0; // nothrow
+ _M_dispose() noexcept = 0;
// Called when _M_weak_count drops to zero.
virtual void
- _M_destroy() // nothrow
+ _M_destroy() noexcept
{ delete this; }
virtual void*
@@ -136,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_add_ref_lock();
void
- _M_release() // nothrow
+ _M_release() noexcept
{
// Be race-detector-friendly. For more info see bits/c++config.
_GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count);
@@ -166,11 +167,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- _M_weak_add_ref() // nothrow
+ _M_weak_add_ref() noexcept
{ __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
void
- _M_weak_release() // nothrow
+ _M_weak_release() noexcept
{
// Be race-detector-friendly. For more info see bits/c++config.
_GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
@@ -189,16 +190,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
long
- _M_get_use_count() const // nothrow
+ _M_get_use_count() const noexcept
{
// No memory barrier is used here so there is no synchronization
// with other threads.
- return const_cast<const volatile _Atomic_word&>(_M_use_count);
+ return __atomic_load_n(&_M_use_count, __ATOMIC_RELAXED);
}
private:
- _Sp_counted_base(_Sp_counted_base const&);
- _Sp_counted_base& operator=(_Sp_counted_base const&);
+ _Sp_counted_base(_Sp_counted_base const&) = delete;
+ _Sp_counted_base& operator=(_Sp_counted_base const&) = delete;
_Atomic_word _M_use_count; // #shared
_Atomic_word _M_weak_count; // #weak + (#shared != 0)
@@ -235,18 +236,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_add_ref_lock()
{
// Perform lock-free add-if-not-zero operation.
- _Atomic_word __count;
+ _Atomic_word __count = _M_use_count;
do
{
- __count = _M_use_count;
if (__count == 0)
__throw_bad_weak_ptr();
-
// Replace the current counter value with the old value + 1, as
// long as it's not changed meanwhile.
}
- while (!__sync_bool_compare_and_swap(&_M_use_count, __count,
- __count + 1));
+ while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
+ true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED));
}
@@ -281,7 +281,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Counted ptr with no deleter or allocator support
template<typename _Ptr, _Lock_policy _Lp>
- class _Sp_counted_ptr : public _Sp_counted_base<_Lp>
+ class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
{
public:
explicit
@@ -289,11 +289,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: _M_ptr(__p) { }
virtual void
- _M_dispose() // nothrow
+ _M_dispose() noexcept
{ delete _M_ptr; }
virtual void
- _M_destroy() // nothrow
+ _M_destroy() noexcept
{ delete this; }
virtual void*
@@ -309,32 +309,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<>
inline void
- _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() { }
+ _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }
template<>
inline void
- _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() { }
+ _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }
template<>
inline void
- _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() { }
+ _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }
// Support for custom deleter and/or allocator
template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
- class _Sp_counted_deleter : public _Sp_counted_base<_Lp>
+ class _Sp_counted_deleter final : public _Sp_counted_base<_Lp>
{
- typedef typename _Alloc::template
- rebind<_Sp_counted_deleter>::other _My_alloc_type;
-
// Helper class that stores the Deleter and also acts as an allocator.
// Used to dispose of the owned pointer and the internal refcount
// Requires that copies of _Alloc can free each other's memory.
struct _My_Deleter
- : public _My_alloc_type // copy constructor must not throw
+ : public _Alloc // copy constructor must not throw
{
- _Deleter _M_del; // copy constructor must not throw
+ _Deleter _M_del; // copy constructor must not throw
_My_Deleter(_Deleter __d, const _Alloc& __a)
- : _My_alloc_type(__a), _M_del(__d) { }
+ : _Alloc(__a), _M_del(__d) { }
};
public:
@@ -346,16 +343,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a)
: _M_ptr(__p), _M_del(__d, __a) { }
+ ~_Sp_counted_deleter() noexcept { }
+
virtual void
- _M_dispose() // nothrow
+ _M_dispose() noexcept
{ _M_del._M_del(_M_ptr); }
virtual void
- _M_destroy() // nothrow
+ _M_destroy() noexcept
{
- _My_alloc_type __a(_M_del);
- this->~_Sp_counted_deleter();
- __a.deallocate(this, 1);
+ typedef typename allocator_traits<_Alloc>::template
+ rebind_traits<_Sp_counted_deleter> _Alloc_traits;
+ typename _Alloc_traits::allocator_type __a(_M_del);
+ _Alloc_traits::destroy(__a, this);
+ _Alloc_traits::deallocate(__a, this, 1);
}
virtual void*
@@ -375,67 +376,65 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// helpers for make_shared / allocate_shared
- template<typename _Tp>
- struct _Sp_destroy_inplace
- {
- void operator()(_Tp* __p) const { if (__p) __p->~_Tp(); }
- };
-
struct _Sp_make_shared_tag { };
template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
- class _Sp_counted_ptr_inplace
- : public _Sp_counted_deleter<_Tp*, _Sp_destroy_inplace<_Tp>, _Alloc, _Lp>
+ class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp>
{
- typedef _Sp_counted_deleter<_Tp*, _Sp_destroy_inplace<_Tp>, _Alloc, _Lp>
- _Base_type;
-
- public:
- explicit
- _Sp_counted_ptr_inplace(_Alloc __a)
- : _Base_type(static_cast<_Tp*>(0), _Sp_destroy_inplace<_Tp>(), __a)
- , _M_storage()
+ // Helper class that stores the pointer and also acts as an allocator.
+ // Used to dispose of the owned pointer and the internal refcount
+ // Requires that copies of _Alloc can free each other's memory.
+ struct _Impl
+ : public _Alloc // copy constructor must not throw
{
- void* __p = &_M_storage;
- ::new (__p) _Tp(); // might throw
- _Base_type::_M_ptr = static_cast<_Tp*>(__p);
- }
+ _Impl(_Alloc __a) : _Alloc(__a), _M_ptr() { }
+ _Tp* _M_ptr;
+ };
+ public:
template<typename... _Args>
_Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
- : _Base_type(static_cast<_Tp*>(0), _Sp_destroy_inplace<_Tp>(), __a)
- , _M_storage()
+ : _M_impl(__a), _M_storage()
{
- void* __p = &_M_storage;
- ::new (__p) _Tp(std::forward<_Args>(__args)...); // might throw
- _Base_type::_M_ptr = static_cast<_Tp*>(__p);
+ _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 2070. allocate_shared should use allocator_traits<A>::construct
+ allocator_traits<_Alloc>::construct(__a, _M_impl._M_ptr,
+ std::forward<_Args>(__args)...); // might throw
}
+ ~_Sp_counted_ptr_inplace() noexcept { }
+
+ virtual void
+ _M_dispose() noexcept
+ { allocator_traits<_Alloc>::destroy(_M_impl, _M_impl._M_ptr); }
+
// Override because the allocator needs to know the dynamic type
virtual void
- _M_destroy() // nothrow
+ _M_destroy() noexcept
{
- typedef typename _Alloc::template
- rebind<_Sp_counted_ptr_inplace>::other _My_alloc_type;
- _My_alloc_type __a(_Base_type::_M_del);
- this->~_Sp_counted_ptr_inplace();
- __a.deallocate(this, 1);
+ typedef typename allocator_traits<_Alloc>::template
+ rebind_traits<_Sp_counted_ptr_inplace> _Alloc_traits;
+ typename _Alloc_traits::allocator_type __a(_M_impl);
+ _Alloc_traits::destroy(__a, this);
+ _Alloc_traits::deallocate(__a, this, 1);
}
// Sneaky trick so __shared_ptr can get the managed pointer
virtual void*
- _M_get_deleter(const std::type_info& __ti)
+ _M_get_deleter(const std::type_info& __ti) noexcept
{
#ifdef __GXX_RTTI
return __ti == typeid(_Sp_make_shared_tag)
? static_cast<void*>(&_M_storage)
- : _Base_type::_M_get_deleter(__ti);
+ : 0;
#else
return 0;
#endif
}
private:
+ _Impl _M_impl;
typename aligned_storage<sizeof(_Tp), alignment_of<_Tp>::value>::type
_M_storage;
};
@@ -444,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __shared_count
{
public:
- constexpr __shared_count() : _M_pi(0) // nothrow
+ constexpr __shared_count() noexcept : _M_pi(0)
{ }
template<typename _Ptr>
@@ -468,18 +467,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// The allocator's value_type doesn't matter, will rebind it anyway.
typedef std::allocator<int> _Alloc;
typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type;
- typedef std::allocator<_Sp_cd_type> _Alloc2;
- _Alloc2 __a2;
+ typedef typename allocator_traits<_Alloc>::template
+ rebind_traits<_Sp_cd_type> _Alloc_traits;
+ typename _Alloc_traits::allocator_type __a;
+ _Sp_cd_type* __mem = 0;
__try
{
- _M_pi = __a2.allocate(1);
- ::new(static_cast<void*>(_M_pi)) _Sp_cd_type(__p, __d);
+ __mem = _Alloc_traits::allocate(__a, 1);
+ _Alloc_traits::construct(__a, __mem, __p, std::move(__d));
+ _M_pi = __mem;
}
__catch(...)
{
__d(__p); // Call _Deleter on __p.
- if (_M_pi)
- __a2.deallocate(static_cast<_Sp_cd_type*>(_M_pi), 1);
+ if (__mem)
+ _Alloc_traits::deallocate(__a, __mem, 1);
__throw_exception_again;
}
}
@@ -488,18 +490,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0)
{
typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type;
- typedef typename _Alloc::template rebind<_Sp_cd_type>::other _Alloc2;
- _Alloc2 __a2(__a);
+ typedef typename allocator_traits<_Alloc>::template
+ rebind_traits<_Sp_cd_type> _Alloc_traits;
+ typename _Alloc_traits::allocator_type __a2(__a);
+ _Sp_cd_type* __mem = 0;
__try
{
- _M_pi = __a2.allocate(1);
- ::new(static_cast<void*>(_M_pi)) _Sp_cd_type(__p, __d, __a);
+ __mem = _Alloc_traits::allocate(__a2, 1);
+ _Alloc_traits::construct(__a2, __mem,
+ __p, std::move(__d), std::move(__a));
+ _M_pi = __mem;
}
__catch(...)
{
__d(__p); // Call _Deleter on __p.
- if (_M_pi)
- __a2.deallocate(static_cast<_Sp_cd_type*>(_M_pi), 1);
+ if (__mem)
+ _Alloc_traits::deallocate(__a2, __mem, 1);
__throw_exception_again;
}
}
@@ -510,18 +516,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: _M_pi(0)
{
typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type;
- typedef typename _Alloc::template rebind<_Sp_cp_type>::other _Alloc2;
- _Alloc2 __a2(__a);
+ typedef typename allocator_traits<_Alloc>::template
+ rebind_traits<_Sp_cp_type> _Alloc_traits;
+ typename _Alloc_traits::allocator_type __a2(__a);
+ _Sp_cp_type* __mem = _Alloc_traits::allocate(__a2, 1);
__try
{
- _M_pi = __a2.allocate(1);
- ::new(static_cast<void*>(_M_pi)) _Sp_cp_type(__a,
+ _Alloc_traits::construct(__a2, __mem, std::move(__a),
std::forward<_Args>(__args)...);
+ _M_pi = __mem;
}
__catch(...)
{
- if (_M_pi)
- __a2.deallocate(static_cast<_Sp_cp_type*>(_M_pi), 1);
+ _Alloc_traits::deallocate(__a2, __mem, 1);
__throw_exception_again;
}
}
@@ -545,21 +552,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Throw bad_weak_ptr when __r._M_get_use_count() == 0.
explicit __shared_count(const __weak_count<_Lp>& __r);
- ~__shared_count() // nothrow
+ ~__shared_count() noexcept
{
if (_M_pi != 0)
_M_pi->_M_release();
}
- __shared_count(const __shared_count& __r)
- : _M_pi(__r._M_pi) // nothrow
+ __shared_count(const __shared_count& __r) noexcept
+ : _M_pi(__r._M_pi)
{
if (_M_pi != 0)
_M_pi->_M_add_ref_copy();
}
__shared_count&
- operator=(const __shared_count& __r) // nothrow
+ operator=(const __shared_count& __r) noexcept
{
_Sp_counted_base<_Lp>* __tmp = __r._M_pi;
if (__tmp != _M_pi)
@@ -574,7 +581,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- _M_swap(__shared_count& __r) // nothrow
+ _M_swap(__shared_count& __r) noexcept
{
_Sp_counted_base<_Lp>* __tmp = __r._M_pi;
__r._M_pi = _M_pi;
@@ -582,28 +589,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
long
- _M_get_use_count() const // nothrow
+ _M_get_use_count() const noexcept
{ return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; }
bool
- _M_unique() const // nothrow
+ _M_unique() const noexcept
{ return this->_M_get_use_count() == 1; }
void*
- _M_get_deleter(const std::type_info& __ti) const
+ _M_get_deleter(const std::type_info& __ti) const noexcept
{ return _M_pi ? _M_pi->_M_get_deleter(__ti) : 0; }
bool
- _M_less(const __shared_count& __rhs) const
+ _M_less(const __shared_count& __rhs) const noexcept
{ return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
bool
- _M_less(const __weak_count<_Lp>& __rhs) const
+ _M_less(const __weak_count<_Lp>& __rhs) const noexcept
{ return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
// Friend function injected into enclosing namespace and found by ADL
friend inline bool
- operator==(const __shared_count& __a, const __shared_count& __b)
+ operator==(const __shared_count& __a, const __shared_count& __b) noexcept
{ return __a._M_pi == __b._M_pi; }
private:
@@ -614,7 +621,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_create_from_up(std::unique_ptr<_Tp, _Del>&& __r,
typename std::enable_if<!std::is_reference<_Del>::value>::type* = 0)
{
- return new _Sp_counted_deleter<_Tp*, _Del, std::allocator<_Tp>,
+ return new _Sp_counted_deleter<_Tp*, _Del, std::allocator<void>,
_Lp>(__r.get(), __r.get_deleter());
}
@@ -625,7 +632,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
typedef typename std::remove_reference<_Del>::type _Del1;
typedef std::reference_wrapper<_Del1> _Del2;
- return new _Sp_counted_deleter<_Tp*, _Del2, std::allocator<_Tp>,
+ return new _Sp_counted_deleter<_Tp*, _Del2, std::allocator<void>,
_Lp>(__r.get(), std::ref(__r.get_deleter()));
}
@@ -637,29 +644,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __weak_count
{
public:
- constexpr __weak_count() : _M_pi(0) // nothrow
+ constexpr __weak_count() noexcept : _M_pi(0)
{ }
- __weak_count(const __shared_count<_Lp>& __r) : _M_pi(__r._M_pi) // nothrow
+ __weak_count(const __shared_count<_Lp>& __r) noexcept
+ : _M_pi(__r._M_pi)
{
if (_M_pi != 0)
_M_pi->_M_weak_add_ref();
}
- __weak_count(const __weak_count<_Lp>& __r) : _M_pi(__r._M_pi) // nothrow
+ __weak_count(const __weak_count<_Lp>& __r) noexcept
+ : _M_pi(__r._M_pi)
{
if (_M_pi != 0)
_M_pi->_M_weak_add_ref();
}
- ~__weak_count() // nothrow
+ ~__weak_count() noexcept
{
if (_M_pi != 0)
_M_pi->_M_weak_release();
}
__weak_count<_Lp>&
- operator=(const __shared_count<_Lp>& __r) // nothrow
+ operator=(const __shared_count<_Lp>& __r) noexcept
{
_Sp_counted_base<_Lp>* __tmp = __r._M_pi;
if (__tmp != 0)
@@ -671,7 +680,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
__weak_count<_Lp>&
- operator=(const __weak_count<_Lp>& __r) // nothrow
+ operator=(const __weak_count<_Lp>& __r) noexcept
{
_Sp_counted_base<_Lp>* __tmp = __r._M_pi;
if (__tmp != 0)
@@ -683,7 +692,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- _M_swap(__weak_count<_Lp>& __r) // nothrow
+ _M_swap(__weak_count<_Lp>& __r) noexcept
{
_Sp_counted_base<_Lp>* __tmp = __r._M_pi;
__r._M_pi = _M_pi;
@@ -691,20 +700,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
long
- _M_get_use_count() const // nothrow
+ _M_get_use_count() const noexcept
{ return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; }
bool
- _M_less(const __weak_count& __rhs) const
+ _M_less(const __weak_count& __rhs) const noexcept
{ return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
bool
- _M_less(const __shared_count<_Lp>& __rhs) const
+ _M_less(const __shared_count<_Lp>& __rhs) const noexcept
{ return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
// Friend function injected into enclosing namespace and found by ADL
friend inline bool
- operator==(const __weak_count& __a, const __weak_count& __b)
+ operator==(const __weak_count& __a, const __weak_count& __b) noexcept
{ return __a._M_pi == __b._M_pi; }
private:
@@ -732,18 +741,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
__enable_shared_from_this_helper(const __shared_count<_Lp>&,
const __enable_shared_from_this<_Tp1,
- _Lp>*, const _Tp2*);
+ _Lp>*, const _Tp2*) noexcept;
// Friend of enable_shared_from_this.
template<typename _Tp1, typename _Tp2>
void
__enable_shared_from_this_helper(const __shared_count<>&,
const enable_shared_from_this<_Tp1>*,
- const _Tp2*);
+ const _Tp2*) noexcept;
template<_Lock_policy _Lp>
inline void
- __enable_shared_from_this_helper(const __shared_count<_Lp>&, ...)
+ __enable_shared_from_this_helper(const __shared_count<_Lp>&, ...) noexcept
{ }
@@ -753,8 +762,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
typedef _Tp element_type;
- constexpr __shared_ptr()
- : _M_ptr(0), _M_refcount() // never throws
+ constexpr __shared_ptr() noexcept
+ : _M_ptr(0), _M_refcount()
{ }
template<typename _Tp1>
@@ -795,20 +804,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ }
template<typename _Tp1>
- __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, _Tp* __p)
+ __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, _Tp* __p) noexcept
: _M_ptr(__p), _M_refcount(__r._M_refcount) // never throws
{ }
- // generated copy constructor, assignment, destructor are fine.
+ __shared_ptr(const __shared_ptr&) noexcept = default;
+ __shared_ptr& operator=(const __shared_ptr&) noexcept = default;
+ ~__shared_ptr() = default;
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r)
- : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
+ __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+ : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
{ }
- __shared_ptr(__shared_ptr&& __r)
- : _M_ptr(__r._M_ptr), _M_refcount() // never throws
+ __shared_ptr(__shared_ptr&& __r) noexcept
+ : _M_ptr(__r._M_ptr), _M_refcount()
{
_M_refcount._M_swap(__r._M_refcount);
__r._M_ptr = 0;
@@ -816,8 +827,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- __shared_ptr(__shared_ptr<_Tp1, _Lp>&& __r)
- : _M_ptr(__r._M_ptr), _M_refcount() // never throws
+ __shared_ptr(__shared_ptr<_Tp1, _Lp>&& __r) noexcept
+ : _M_ptr(__r._M_ptr), _M_refcount()
{
_M_refcount._M_swap(__r._M_refcount);
__r._M_ptr = 0;
@@ -860,13 +871,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
/* TODO: use delegating constructor */
- constexpr __shared_ptr(nullptr_t)
- : _M_ptr(0), _M_refcount() // never throws
+ constexpr __shared_ptr(nullptr_t) noexcept
+ : _M_ptr(0), _M_refcount()
{ }
template<typename _Tp1>
__shared_ptr&
- operator=(const __shared_ptr<_Tp1, _Lp>& __r) // never throws
+ operator=(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
{
_M_ptr = __r._M_ptr;
_M_refcount = __r._M_refcount; // __shared_count::op= doesn't throw
@@ -884,7 +895,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
__shared_ptr&
- operator=(__shared_ptr&& __r)
+ operator=(__shared_ptr&& __r) noexcept
{
__shared_ptr(std::move(__r)).swap(*this);
return *this;
@@ -892,7 +903,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<class _Tp1>
__shared_ptr&
- operator=(__shared_ptr<_Tp1, _Lp>&& __r)
+ operator=(__shared_ptr<_Tp1, _Lp>&& __r) noexcept
{
__shared_ptr(std::move(__r)).swap(*this);
return *this;
@@ -907,7 +918,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- reset() // never throws
+ reset() noexcept
{ __shared_ptr().swap(*this); }
template<typename _Tp1>
@@ -931,36 +942,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow class instantiation when _Tp is [cv-qual] void.
typename std::add_lvalue_reference<_Tp>::type
- operator*() const // never throws
+ operator*() const noexcept
{
_GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
return *_M_ptr;
}
_Tp*
- operator->() const // never throws
+ operator->() const noexcept
{
_GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
return _M_ptr;
}
_Tp*
- get() const // never throws
+ get() const noexcept
{ return _M_ptr; }
explicit operator bool() const // never throws
{ return _M_ptr == 0 ? false : true; }
bool
- unique() const // never throws
+ unique() const noexcept
{ return _M_refcount._M_unique(); }
long
- use_count() const // never throws
+ use_count() const noexcept
{ return _M_refcount._M_get_use_count(); }
void
- swap(__shared_ptr<_Tp, _Lp>& __other) // never throws
+ swap(__shared_ptr<_Tp, _Lp>& __other) noexcept
{
std::swap(_M_ptr, __other._M_ptr);
_M_refcount._M_swap(__other._M_refcount);
@@ -997,8 +1008,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
void operator()(_Tp* __ptr)
{
- _M_alloc.destroy(__ptr);
- _M_alloc.deallocate(__ptr, 1);
+ typedef allocator_traits<_Alloc> _Alloc_traits;
+ _Alloc_traits::destroy(_M_alloc, __ptr);
+ _Alloc_traits::deallocate(_M_alloc, __ptr, 1);
}
_Alloc _M_alloc;
};
@@ -1010,14 +1022,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
typedef typename _Alloc::template rebind<_Tp>::other _Alloc2;
_Deleter<_Alloc2> __del = { _Alloc2(__a) };
- _M_ptr = __del._M_alloc.allocate(1);
+ typedef allocator_traits<_Alloc2> __traits;
+ _M_ptr = __traits::allocate(__del._M_alloc, 1);
__try
{
- __del._M_alloc.construct(_M_ptr, std::forward<_Args>(__args)...);
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 2070. allocate_shared should use allocator_traits<A>::construct
+ __traits::construct(__del._M_alloc, _M_ptr,
+ std::forward<_Args>(__args)...);
}
__catch(...)
{
- __del._M_alloc.deallocate(_M_ptr, 1);
+ __traits::deallocate(__del._M_alloc, _M_ptr, 1);
__throw_exception_again;
}
__shared_count<_Lp> __count(_M_ptr, __del, __del._M_alloc);
@@ -1033,14 +1049,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
void*
- _M_get_deleter(const std::type_info& __ti) const
+ _M_get_deleter(const std::type_info& __ti) const noexcept
{ return _M_refcount._M_get_deleter(__ti); }
template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
template<typename _Del, typename _Tp1, _Lock_policy _Lp1>
- friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&);
+ friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept;
_Tp* _M_ptr; // Contained pointer.
__shared_count<_Lp> _M_refcount; // Reference counter.
@@ -1051,46 +1067,107 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
inline bool
operator==(const __shared_ptr<_Tp1, _Lp>& __a,
- const __shared_ptr<_Tp2, _Lp>& __b)
+ const __shared_ptr<_Tp2, _Lp>& __b) noexcept
{ return __a.get() == __b.get(); }
template<typename _Tp, _Lock_policy _Lp>
inline bool
- operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t)
- { return __a.get() == nullptr; }
+ operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+ { return !__a; }
template<typename _Tp, _Lock_policy _Lp>
inline bool
- operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __b)
- { return nullptr == __b.get(); }
+ operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+ { return !__a; }
template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
inline bool
operator!=(const __shared_ptr<_Tp1, _Lp>& __a,
- const __shared_ptr<_Tp2, _Lp>& __b)
+ const __shared_ptr<_Tp2, _Lp>& __b) noexcept
{ return __a.get() != __b.get(); }
template<typename _Tp, _Lock_policy _Lp>
inline bool
- operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t)
- { return __a.get() != nullptr; }
+ operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+ { return (bool)__a; }
template<typename _Tp, _Lock_policy _Lp>
inline bool
- operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __b)
- { return nullptr != __b.get(); }
+ operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+ { return (bool)__a; }
template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
inline bool
operator<(const __shared_ptr<_Tp1, _Lp>& __a,
- const __shared_ptr<_Tp2, _Lp>& __b)
- { return __a.get() < __b.get(); }
+ const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+ {
+ typedef typename std::common_type<_Tp1*, _Tp2*>::type _CT;
+ return std::less<_CT>()(__a.get(), __b.get());
+ }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+ { return std::less<_Tp*>()(__a.get(), nullptr); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+ { return std::less<_Tp*>()(nullptr, __a.get()); }
+
+ template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+ inline bool
+ operator<=(const __shared_ptr<_Tp1, _Lp>& __a,
+ const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+ { return !(__b < __a); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+ { return !(nullptr < __a); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+ { return !(__a < nullptr); }
+
+ template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+ inline bool
+ operator>(const __shared_ptr<_Tp1, _Lp>& __a,
+ const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+ { return (__b < __a); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+ { return std::less<_Tp*>()(nullptr, __a.get()); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+ { return std::less<_Tp*>()(__a.get(), nullptr); }
+
+ template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+ inline bool
+ operator>=(const __shared_ptr<_Tp1, _Lp>& __a,
+ const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+ { return !(__a < __b); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+ { return !(__a < nullptr); }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+ { return !(nullptr < __a); }
template<typename _Sp>
struct _Sp_less : public binary_function<_Sp, _Sp, bool>
{
bool
- operator()(const _Sp& __lhs, const _Sp& __rhs) const
+ operator()(const _Sp& __lhs, const _Sp& __rhs) const noexcept
{
typedef typename _Sp::element_type element_type;
return std::less<element_type*>()(__lhs.get(), __rhs.get());
@@ -1105,7 +1182,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 2.2.3.8 shared_ptr specialized algorithms.
template<typename _Tp, _Lock_policy _Lp>
inline void
- swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b)
+ swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept
{ __a.swap(__b); }
// 2.2.3.9 shared_ptr casts
@@ -1117,7 +1194,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// static_pointer_cast
template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
inline __shared_ptr<_Tp, _Lp>
- static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r)
+ static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
{ return __shared_ptr<_Tp, _Lp>(__r, static_cast<_Tp*>(__r.get())); }
// The seemingly equivalent code:
@@ -1127,7 +1204,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// const_pointer_cast
template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
inline __shared_ptr<_Tp, _Lp>
- const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r)
+ const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
{ return __shared_ptr<_Tp, _Lp>(__r, const_cast<_Tp*>(__r.get())); }
// The seemingly equivalent code:
@@ -1137,7 +1214,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// dynamic_pointer_cast
template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
inline __shared_ptr<_Tp, _Lp>
- dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r)
+ dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
{
if (_Tp* __p = dynamic_cast<_Tp*>(__r.get()))
return __shared_ptr<_Tp, _Lp>(__r, __p);
@@ -1151,11 +1228,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
typedef _Tp element_type;
- constexpr __weak_ptr()
- : _M_ptr(0), _M_refcount() // never throws
+ constexpr __weak_ptr() noexcept
+ : _M_ptr(0), _M_refcount()
{ }
- // Generated copy constructor, assignment, destructor are fine.
+ __weak_ptr(const __weak_ptr&) noexcept = default;
+ __weak_ptr& operator=(const __weak_ptr&) noexcept = default;
+ ~__weak_ptr() = default;
// The "obvious" converting constructor implementation:
//
@@ -1173,19 +1252,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// in multithreaded programs __r._M_ptr may be invalidated at any point.
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- __weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r)
- : _M_refcount(__r._M_refcount) // never throws
+ __weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r) noexcept
+ : _M_refcount(__r._M_refcount)
{ _M_ptr = __r.lock().get(); }
template<typename _Tp1, typename = typename
std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
- __weak_ptr(const __shared_ptr<_Tp1, _Lp>& __r)
- : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
+ __weak_ptr(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+ : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
{ }
template<typename _Tp1>
__weak_ptr&
- operator=(const __weak_ptr<_Tp1, _Lp>& __r) // never throws
+ operator=(const __weak_ptr<_Tp1, _Lp>& __r) noexcept
{
_M_ptr = __r.lock().get();
_M_refcount = __r._M_refcount;
@@ -1194,7 +1273,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp1>
__weak_ptr&
- operator=(const __shared_ptr<_Tp1, _Lp>& __r) // never throws
+ operator=(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
{
_M_ptr = __r._M_ptr;
_M_refcount = __r._M_refcount;
@@ -1202,7 +1281,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
__shared_ptr<_Tp, _Lp>
- lock() const // never throws
+ lock() const noexcept
{
#ifdef __GTHREADS
// Optimization: avoid throw overhead.
@@ -1230,11 +1309,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
} // XXX MT
long
- use_count() const // never throws
+ use_count() const noexcept
{ return _M_refcount._M_get_use_count(); }
bool
- expired() const // never throws
+ expired() const noexcept
{ return _M_refcount._M_get_use_count() == 0; }
template<typename _Tp1>
@@ -1248,11 +1327,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return _M_refcount._M_less(__rhs._M_refcount); }
void
- reset() // never throws
+ reset() noexcept
{ __weak_ptr().swap(*this); }
void
- swap(__weak_ptr& __s) // never throws
+ swap(__weak_ptr& __s) noexcept
{
std::swap(_M_ptr, __s._M_ptr);
_M_refcount._M_swap(__s._M_refcount);
@@ -1261,7 +1340,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
// Used by __enable_shared_from_this.
void
- _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount)
+ _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept
{
_M_ptr = __ptr;
_M_refcount = __refcount;
@@ -1279,7 +1358,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 20.8.13.3.7 weak_ptr specialized algorithms.
template<typename _Tp, _Lock_policy _Lp>
inline void
- swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b)
+ swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept
{ __a.swap(__b); }
template<typename _Tp, typename _Tp1>
@@ -1313,12 +1392,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __enable_shared_from_this
{
protected:
- constexpr __enable_shared_from_this() { }
+ constexpr __enable_shared_from_this() noexcept { }
- __enable_shared_from_this(const __enable_shared_from_this&) { }
+ __enable_shared_from_this(const __enable_shared_from_this&) noexcept { }
__enable_shared_from_this&
- operator=(const __enable_shared_from_this&)
+ operator=(const __enable_shared_from_this&) noexcept
{ return *this; }
~__enable_shared_from_this() { }
@@ -1335,14 +1414,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
template<typename _Tp1>
void
- _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const
+ _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept
{ _M_weak_this._M_assign(__p, __n); }
template<typename _Tp1>
friend void
__enable_shared_from_this_helper(const __shared_count<_Lp>& __pn,
const __enable_shared_from_this* __pe,
- const _Tp1* __px)
+ const _Tp1* __px) noexcept
{
if (__pe != 0)
__pe->_M_weak_assign(const_cast<_Tp1*>(__px), __pn);
@@ -1372,10 +1451,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// std::hash specialization for __shared_ptr.
template<typename _Tp, _Lock_policy _Lp>
struct hash<__shared_ptr<_Tp, _Lp>>
- : public std::unary_function<__shared_ptr<_Tp, _Lp>, size_t>
+ : public __hash_base<size_t, __shared_ptr<_Tp, _Lp>>
{
size_t
- operator()(const __shared_ptr<_Tp, _Lp>& __s) const
+ operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept
{ return std::hash<_Tp*>()(__s.get()); }
};
diff --git a/libstdc++-v3/include/bits/slice_array.h b/libstdc++-v3/include/bits/slice_array.h
index 3afae22d6c..d3fe7d8128 100644
--- a/libstdc++-v3/include/bits/slice_array.h
+++ b/libstdc++-v3/include/bits/slice_array.h
@@ -1,7 +1,7 @@
// The template and inlines for the -*- C++ -*- slice_array class.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2009,
-// 2010 Free Software Foundation, Inc.
+// 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -66,11 +66,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Construct a slice.
*
- * @param o Offset in array of first element.
- * @param d Number of elements in slice.
- * @param s Stride between array elements.
+ * @param __o Offset in array of first element.
+ * @param __d Number of elements in slice.
+ * @param __s Stride between array elements.
*/
- slice(size_t, size_t, size_t);
+ slice(size_t __o, size_t __d, size_t __s);
/// Return array offset of first slice element.
size_t start() const;
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h
index 8391d3e485..f337e0c07a 100644
--- a/libstdc++-v3/include/bits/stl_algo.h
+++ b/libstdc++-v3/include/bits/stl_algo.h
@@ -244,7 +244,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
}
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
/// This is an overload used by find_if_not() for the Input Iterator case.
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
@@ -303,7 +302,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __last;
}
}
-#endif
+
+ /// Provided for stable_partition to use.
+ template<typename _InputIterator, typename _Predicate>
+ inline _InputIterator
+ __find_if_not(_InputIterator __first, _InputIterator __last,
+ _Predicate __pred)
+ {
+ return std::__find_if_not(__first, __last, __pred,
+ std::__iterator_category(__first));
+ }
+
+ /// Like find_if_not(), but uses and updates a count of the
+ /// remaining range length instead of comparing against an end
+ /// iterator.
+ template<typename _InputIterator, typename _Predicate, typename _Distance>
+ _InputIterator
+ __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
+ {
+ for (; __len; --__len, ++__first)
+ if (!bool(__pred(*__first)))
+ break;
+ return __first;
+ }
// set_difference
// set_intersection
@@ -624,27 +645,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find last matching subsequence in a sequence.
* @ingroup non_mutating_algorithms
- * @param first1 Start of range to search.
- * @param last1 End of range to search.
- * @param first2 Start of sequence to match.
- * @param last2 End of sequence to match.
+ * @param __first1 Start of range to search.
+ * @param __last1 End of range to search.
+ * @param __first2 Start of sequence to match.
+ * @param __last2 End of sequence to match.
* @return The last iterator @c i in the range
- * @p [first1,last1-(last2-first2)) such that @c *(i+N) == @p *(first2+N)
- * for each @c N in the range @p [0,last2-first2), or @p last1 if no
- * such iterator exists.
+ * @p [__first1,__last1-(__last2-__first2)) such that @c *(i+N) ==
+ * @p *(__first2+N) for each @c N in the range @p
+ * [0,__last2-__first2), or @p __last1 if no such iterator exists.
*
- * Searches the range @p [first1,last1) for a sub-sequence that compares
- * equal value-by-value with the sequence given by @p [first2,last2) and
- * returns an iterator to the first element of the sub-sequence, or
- * @p last1 if the sub-sequence is not found. The sub-sequence will be the
- * last such subsequence contained in [first,last1).
+ * Searches the range @p [__first1,__last1) for a sub-sequence that
+ * compares equal value-by-value with the sequence given by @p
+ * [__first2,__last2) and returns an iterator to the __first
+ * element of the sub-sequence, or @p __last1 if the sub-sequence
+ * is not found. The sub-sequence will be the last such
+ * subsequence contained in [__first,__last1).
*
- * Because the sub-sequence must lie completely within the range
- * @p [first1,last1) it must start at a position less than
- * @p last1-(last2-first2) where @p last2-first2 is the length of the
- * sub-sequence.
- * This means that the returned iterator @c i will be in the range
- * @p [first1,last1-(last2-first2))
+ * Because the sub-sequence must lie completely within the range @p
+ * [__first1,__last1) it must start at a position less than @p
+ * __last1-(__last2-__first2) where @p __last2-__first2 is the
+ * length of the sub-sequence. This means that the returned
+ * iterator @c i will be in the range @p
+ * [__first1,__last1-(__last2-__first2))
*/
template<typename _ForwardIterator1, typename _ForwardIterator2>
inline _ForwardIterator1
@@ -668,29 +690,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find last matching subsequence in a sequence using a predicate.
* @ingroup non_mutating_algorithms
- * @param first1 Start of range to search.
- * @param last1 End of range to search.
- * @param first2 Start of sequence to match.
- * @param last2 End of sequence to match.
- * @param comp The predicate to use.
- * @return The last iterator @c i in the range
- * @p [first1,last1-(last2-first2)) such that @c predicate(*(i+N), @p
- * (first2+N)) is true for each @c N in the range @p [0,last2-first2), or
- * @p last1 if no such iterator exists.
+ * @param __first1 Start of range to search.
+ * @param __last1 End of range to search.
+ * @param __first2 Start of sequence to match.
+ * @param __last2 End of sequence to match.
+ * @param __comp The predicate to use.
+ * @return The last iterator @c i in the range @p
+ * [__first1,__last1-(__last2-__first2)) such that @c
+ * predicate(*(i+N), @p (__first2+N)) is true for each @c N in the
+ * range @p [0,__last2-__first2), or @p __last1 if no such iterator
+ * exists.
*
- * Searches the range @p [first1,last1) for a sub-sequence that compares
- * equal value-by-value with the sequence given by @p [first2,last2) using
- * comp as a predicate and returns an iterator to the first element of the
- * sub-sequence, or @p last1 if the sub-sequence is not found. The
- * sub-sequence will be the last such subsequence contained in
- * [first,last1).
+ * Searches the range @p [__first1,__last1) for a sub-sequence that
+ * compares equal value-by-value with the sequence given by @p
+ * [__first2,__last2) using comp as a predicate and returns an
+ * iterator to the first element of the sub-sequence, or @p __last1
+ * if the sub-sequence is not found. The sub-sequence will be the
+ * last such subsequence contained in [__first,__last1).
*
- * Because the sub-sequence must lie completely within the range
- * @p [first1,last1) it must start at a position less than
- * @p last1-(last2-first2) where @p last2-first2 is the length of the
- * sub-sequence.
- * This means that the returned iterator @c i will be in the range
- * @p [first1,last1-(last2-first2))
+ * Because the sub-sequence must lie completely within the range @p
+ * [__first1,__last1) it must start at a position less than @p
+ * __last1-(__last2-__first2) where @p __last2-__first2 is the
+ * length of the sub-sequence. This means that the returned
+ * iterator @c i will be in the range @p
+ * [__first1,__last1-(__last2-__first2))
*/
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
@@ -719,13 +742,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Checks that a predicate is true for all the elements
* of a sequence.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
* @return True if the check is true, false otherwise.
*
- * Returns true if @p pred is true for each element in the range
- * @p [first,last), and false otherwise.
+ * Returns true if @p __pred is true for each element in the range
+ * @p [__first,__last), and false otherwise.
*/
template<typename _InputIterator, typename _Predicate>
inline bool
@@ -736,13 +759,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Checks that a predicate is false for all the elements
* of a sequence.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
* @return True if the check is true, false otherwise.
*
- * Returns true if @p pred is false for each element in the range
- * @p [first,last), and false otherwise.
+ * Returns true if @p __pred is false for each element in the range
+ * @p [__first,__last), and false otherwise.
*/
template<typename _InputIterator, typename _Predicate>
inline bool
@@ -753,13 +776,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Checks that a predicate is false for at least an element
* of a sequence.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
* @return True if the check is true, false otherwise.
*
- * Returns true if an element exists in the range @p [first,last) such that
- * @p pred is true, and false otherwise.
+ * Returns true if an element exists in the range @p
+ * [__first,__last) such that @p __pred is true, and false
+ * otherwise.
*/
template<typename _InputIterator, typename _Predicate>
inline bool
@@ -770,11 +794,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Find the first element in a sequence for which a
* predicate is false.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
- * @return The first iterator @c i in the range @p [first,last)
- * such that @p pred(*i) is false, or @p last if no such iterator exists.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
+ * @return The first iterator @c i in the range @p [__first,__last)
+ * such that @p __pred(*i) is false, or @p __last if no such iterator exists.
*/
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
@@ -786,18 +810,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
typename iterator_traits<_InputIterator>::value_type>)
__glibcxx_requires_valid_range(__first, __last);
- return std::__find_if_not(__first, __last, __pred,
- std::__iterator_category(__first));
+ return std::__find_if_not(__first, __last, __pred);
}
/**
* @brief Checks whether the sequence is partitioned.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
- * @return True if the range @p [first,last) is partioned by @p pred,
- * i.e. if all elements that satisfy @p pred appear before those that
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
+ * @return True if the range @p [__first,__last) is partioned by @p __pred,
+ * i.e. if all elements that satisfy @p __pred appear before those that
* do not.
*/
template<typename _InputIterator, typename _Predicate>
@@ -812,11 +835,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find the partition point of a partitioned range.
* @ingroup mutating_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param pred A predicate.
- * @return An iterator @p mid such that @p all_of(first, mid, pred)
- * and @p none_of(mid, last, pred) are both true.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __pred A predicate.
+ * @return An iterator @p mid such that @p all_of(__first, mid, __pred)
+ * and @p none_of(mid, __last, __pred) are both true.
*/
template<typename _ForwardIterator, typename _Predicate>
_ForwardIterator
@@ -860,16 +883,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy a sequence, removing elements of a given value.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param value The value to be removed.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __value The value to be removed.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies each element in the range @p [first,last) not equal to @p value
- * to the range beginning at @p result.
- * remove_copy() is stable, so the relative order of elements that are
- * copied is unchanged.
+ * Copies each element in the range @p [__first,__last) not equal
+ * to @p __value to the range beginning at @p __result.
+ * remove_copy() is stable, so the relative order of elements that
+ * are copied is unchanged.
*/
template<typename _InputIterator, typename _OutputIterator, typename _Tp>
_OutputIterator
@@ -896,14 +919,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy a sequence, removing elements for which a predicate is true.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param pred A predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __pred A predicate.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies each element in the range @p [first,last) for which
- * @p pred returns false to the range beginning at @p result.
+ * Copies each element in the range @p [__first,__last) for which
+ * @p __pred returns false to the range beginning at @p __result.
*
* remove_copy_if() is stable, so the relative order of elements that are
* copied is unchanged.
@@ -935,14 +958,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy the elements of a sequence for which a predicate is true.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param pred A predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __pred A predicate.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies each element in the range @p [first,last) for which
- * @p pred returns true to the range beginning at @p result.
+ * Copies each element in the range @p [__first,__last) for which
+ * @p __pred returns true to the range beginning at @p __result.
*
* copy_if() is stable, so the relative order of elements that are
* copied is unchanged.
@@ -976,11 +999,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__copy_n(_InputIterator __first, _Size __n,
_OutputIterator __result, input_iterator_tag)
{
- for (; __n > 0; --__n)
+ if (__n > 0)
{
- *__result = *__first;
- ++__first;
- ++__result;
+ while (true)
+ {
+ *__result = *__first;
+ ++__result;
+ if (--__n > 0)
+ ++__first;
+ else
+ break;
+ }
}
return __result;
}
@@ -995,9 +1024,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,first+n) into [result,result+n).
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param n The number of elements to copy.
- * @param result An output iterator.
+ * @param __first An input iterator.
+ * @param __n The number of elements to copy.
+ * @param __result An output iterator.
* @return result+n.
*
* This inline function will boil down to a call to @c memmove whenever
@@ -1022,16 +1051,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Copy the elements of a sequence to separate output sequences
* depending on the truth value of a predicate.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param out_true An output iterator.
- * @param out_false An output iterator.
- * @param pred A predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __out_true An output iterator.
+ * @param __out_false An output iterator.
+ * @param __pred A predicate.
* @return A pair designating the ends of the resulting sequences.
*
- * Copies each element in the range @p [first,last) for which
- * @p pred returns true to the range beginning at @p out_true
- * and each element for which @p pred returns false to @p out_false.
+ * Copies each element in the range @p [__first,__last) for which
+ * @p __pred returns true to the range beginning at @p out_true
+ * and each element for which @p __pred returns false to @p __out_false.
*/
template<typename _InputIterator, typename _OutputIterator1,
typename _OutputIterator2, typename _Predicate>
@@ -1069,18 +1098,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove elements from a sequence.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param value The value to be removed.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __value The value to be removed.
* @return An iterator designating the end of the resulting sequence.
*
- * All elements equal to @p value are removed from the range
- * @p [first,last).
+ * All elements equal to @p __value are removed from the range
+ * @p [__first,__last).
*
* remove() is stable, so the relative order of elements that are
* not removed is unchanged.
*
- * Elements between the end of the resulting sequence and @p last
+ * Elements between the end of the resulting sequence and @p __last
* are still present, but their value is unspecified.
*/
template<typename _ForwardIterator, typename _Tp>
@@ -1112,18 +1141,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove elements from a sequence using a predicate.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param pred A predicate.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __pred A predicate.
* @return An iterator designating the end of the resulting sequence.
*
- * All elements for which @p pred returns true are removed from the range
- * @p [first,last).
+ * All elements for which @p __pred returns true are removed from the range
+ * @p [__first,__last).
*
* remove_if() is stable, so the relative order of elements that are
* not removed is unchanged.
*
- * Elements between the end of the resulting sequence and @p last
+ * Elements between the end of the resulting sequence and @p __last
* are still present, but their value is unspecified.
*/
template<typename _ForwardIterator, typename _Predicate>
@@ -1155,15 +1184,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove consecutive duplicate values from a sequence.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
* @return An iterator designating the end of the resulting sequence.
*
* Removes all but the first element from each group of consecutive
* values that compare equal.
* unique() is stable, so the relative order of elements that are
* not removed is unchanged.
- * Elements between the end of the resulting sequence and @p last
+ * Elements between the end of the resulting sequence and @p __last
* are still present, but their value is unspecified.
*/
template<typename _ForwardIterator>
@@ -1194,16 +1223,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Remove consecutive values from a sequence using a predicate.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param binary_pred A binary predicate.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __binary_pred A binary predicate.
* @return An iterator designating the end of the resulting sequence.
*
* Removes all but the first element from each group of consecutive
- * values for which @p binary_pred returns true.
+ * values for which @p __binary_pred returns true.
* unique() is stable, so the relative order of elements that are
* not removed is unchanged.
- * Elements between the end of the resulting sequence and @p last
+ * Elements between the end of the resulting sequence and @p __last
* are still present, but their value is unspecified.
*/
template<typename _ForwardIterator, typename _BinaryPredicate>
@@ -1425,14 +1454,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Reverse a sequence.
* @ingroup mutating_algorithms
- * @param first A bidirectional iterator.
- * @param last A bidirectional iterator.
+ * @param __first A bidirectional iterator.
+ * @param __last A bidirectional iterator.
* @return reverse() returns no value.
*
- * Reverses the order of the elements in the range @p [first,last),
+ * Reverses the order of the elements in the range @p [__first,__last),
* so that the first element becomes the last etc.
- * For every @c i such that @p 0<=i<=(last-first)/2), @p reverse()
- * swaps @p *(first+i) and @p *(last-(i+1))
+ * For every @c i such that @p 0<=i<=(__last-__first)/2), @p reverse()
+ * swaps @p *(__first+i) and @p *(__last-(i+1))
*/
template<typename _BidirectionalIterator>
inline void
@@ -1448,18 +1477,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy a sequence, reversing its elements.
* @ingroup mutating_algorithms
- * @param first A bidirectional iterator.
- * @param last A bidirectional iterator.
- * @param result An output iterator.
+ * @param __first A bidirectional iterator.
+ * @param __last A bidirectional iterator.
+ * @param __result An output iterator.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies the elements in the range @p [first,last) to the range
- * @p [result,result+(last-first)) such that the order of the
- * elements is reversed.
- * For every @c i such that @p 0<=i<=(last-first), @p reverse_copy()
- * performs the assignment @p *(result+(last-first)-i) = *(first+i).
- * The ranges @p [first,last) and @p [result,result+(last-first))
- * must not overlap.
+ * Copies the elements in the range @p [__first,__last) to the
+ * range @p [__result,__result+(__last-__first)) such that the
+ * order of the elements is reversed. For every @c i such that @p
+ * 0<=i<=(__last-__first), @p reverse_copy() performs the
+ * assignment @p *(__result+(__last-__first)-i) = *(__first+i).
+ * The ranges @p [__first,__last) and @p
+ * [__result,__result+(__last-__first)) must not overlap.
*/
template<typename _BidirectionalIterator, typename _OutputIterator>
_OutputIterator
@@ -1649,21 +1678,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Rotate the elements of a sequence.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param middle A forward iterator.
- * @param last A forward iterator.
+ * @param __first A forward iterator.
+ * @param __middle A forward iterator.
+ * @param __last A forward iterator.
* @return Nothing.
*
- * Rotates the elements of the range @p [first,last) by @p (middle-first)
- * positions so that the element at @p middle is moved to @p first, the
- * element at @p middle+1 is moved to @first+1 and so on for each element
- * in the range @p [first,last).
+ * Rotates the elements of the range @p [__first,__last) by
+ * @p (__middle - __first) positions so that the element at @p __middle
+ * is moved to @p __first, the element at @p __middle+1 is moved to
+ * @p __first+1 and so on for each element in the range
+ * @p [__first,__last).
*
- * This effectively swaps the ranges @p [first,middle) and
- * @p [middle,last).
+ * This effectively swaps the ranges @p [__first,__middle) and
+ * @p [__middle,__last).
*
- * Performs @p *(first+(n+(last-middle))%(last-first))=*(first+n) for
- * each @p n in the range @p [0,last-first).
+ * Performs
+ * @p *(__first+(n+(__last-__middle))%(__last-__first))=*(__first+n)
+ * for each @p n in the range @p [0,__last-__first).
*/
template<typename _ForwardIterator>
inline void
@@ -1684,20 +1715,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy a sequence, rotating its elements.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param middle A forward iterator.
- * @param last A forward iterator.
- * @param result An output iterator.
+ * @param __first A forward iterator.
+ * @param __middle A forward iterator.
+ * @param __last A forward iterator.
+ * @param __result An output iterator.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies the elements of the range @p [first,last) to the range
- * beginning at @result, rotating the copied elements by @p (middle-first)
- * positions so that the element at @p middle is moved to @p result, the
- * element at @p middle+1 is moved to @result+1 and so on for each element
- * in the range @p [first,last).
+ * Copies the elements of the range @p [__first,__last) to the
+ * range beginning at @result, rotating the copied elements by
+ * @p (__middle-__first) positions so that the element at @p __middle
+ * is moved to @p __result, the element at @p __middle+1 is moved
+ * to @p __result+1 and so on for each element in the range @p
+ * [__first,__last).
*
- * Performs @p *(result+(n+(last-middle))%(last-first))=*(first+n) for
- * each @p n in the range @p [0,last-first).
+ * Performs
+ * @p *(__result+(n+(__last-__middle))%(__last-__first))=*(__first+n)
+ * for each @p n in the range @p [0,__last-__first).
*/
template<typename _ForwardIterator, typename _OutputIterator>
_OutputIterator
@@ -1771,30 +1804,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// partition
/// This is a helper function...
+ /// Requires __len != 0 and !__pred(*__first),
+ /// same as __stable_partition_adaptive.
template<typename _ForwardIterator, typename _Predicate, typename _Distance>
_ForwardIterator
__inplace_stable_partition(_ForwardIterator __first,
- _ForwardIterator __last,
_Predicate __pred, _Distance __len)
{
if (__len == 1)
- return __pred(*__first) ? __last : __first;
+ return __first;
_ForwardIterator __middle = __first;
std::advance(__middle, __len / 2);
- _ForwardIterator __begin = std::__inplace_stable_partition(__first,
- __middle,
- __pred,
- __len / 2);
- _ForwardIterator __end = std::__inplace_stable_partition(__middle, __last,
- __pred,
- __len
- - __len / 2);
- std::rotate(__begin, __middle, __end);
- std::advance(__begin, std::distance(__middle, __end));
- return __begin;
+ _ForwardIterator __left_split =
+ std::__inplace_stable_partition(__first, __pred, __len / 2);
+ // Advance past true-predicate values to satisfy this
+ // function's preconditions.
+ _Distance __right_len = __len - __len / 2;
+ _ForwardIterator __right_split =
+ std::__find_if_not_n(__middle, __right_len, __pred);
+ if (__right_len)
+ __right_split = std::__inplace_stable_partition(__middle,
+ __pred,
+ __right_len);
+ std::rotate(__left_split, __middle, __right_split);
+ std::advance(__left_split, std::distance(__middle, __right_split));
+ return __left_split;
}
/// This is a helper function...
+ /// Requires __first != __last and !__pred(*__first)
+ /// and __len == distance(__first, __last).
+ ///
+ /// !__pred(*__first) allows us to guarantee that we don't
+ /// move-assign an element onto itself.
template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
typename _Distance>
_ForwardIterator
@@ -1808,6 +1850,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_ForwardIterator __result1 = __first;
_Pointer __result2 = __buffer;
+ // The precondition guarantees that !__pred(*__first), so
+ // move that element to the buffer before starting the loop.
+ // This ensures that we only call __pred once per element.
+ *__result2 = _GLIBCXX_MOVE(*__first);
+ ++__result2;
+ ++__first;
for (; __first != __last; ++__first)
if (__pred(*__first))
{
@@ -1826,17 +1874,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_ForwardIterator __middle = __first;
std::advance(__middle, __len / 2);
- _ForwardIterator __begin =
+ _ForwardIterator __left_split =
std::__stable_partition_adaptive(__first, __middle, __pred,
__len / 2, __buffer,
__buffer_size);
- _ForwardIterator __end =
- std::__stable_partition_adaptive(__middle, __last, __pred,
- __len - __len / 2,
- __buffer, __buffer_size);
- std::rotate(__begin, __middle, __end);
- std::advance(__begin, std::distance(__middle, __end));
- return __begin;
+ // Advance past true-predicate values to satisfy this
+ // function's preconditions.
+ _Distance __right_len = __len - __len / 2;
+ _ForwardIterator __right_split =
+ std::__find_if_not_n(__middle, __right_len, __pred);
+ if (__right_len)
+ __right_split =
+ std::__stable_partition_adaptive(__right_split, __last, __pred,
+ __right_len,
+ __buffer, __buffer_size);
+ std::rotate(__left_split, __middle, __right_split);
+ std::advance(__left_split, std::distance(__middle, __right_split));
+ return __left_split;
}
}
@@ -1844,17 +1898,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Move elements for which a predicate is true to the beginning
* of a sequence, preserving relative ordering.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param pred A predicate functor.
- * @return An iterator @p middle such that @p pred(i) is true for each
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __pred A predicate functor.
+ * @return An iterator @p middle such that @p __pred(i) is true for each
* iterator @p i in the range @p [first,middle) and false for each @p i
* in the range @p [middle,last).
*
* Performs the same function as @p partition() with the additional
* guarantee that the relative ordering of elements in each group is
* preserved, so any two elements @p x and @p y in the range
- * @p [first,last) such that @p pred(x)==pred(y) will have the same
+ * @p [__first,__last) such that @p __pred(x)==__pred(y) will have the same
* relative ordering after calling @p stable_partition().
*/
template<typename _ForwardIterator, typename _Predicate>
@@ -1869,6 +1923,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typename iterator_traits<_ForwardIterator>::value_type>)
__glibcxx_requires_valid_range(__first, __last);
+ __first = std::__find_if_not(__first, __last, __pred);
+
if (__first == __last)
return __first;
else
@@ -1888,7 +1944,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_DistanceType(__buf.size()));
else
return
- std::__inplace_stable_partition(__first, __last, __pred,
+ std::__inplace_stable_partition(__first, __pred,
_DistanceType(__buf.requested_size()));
}
}
@@ -1924,20 +1980,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy the smallest elements of a sequence.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param result_first A random-access iterator.
- * @param result_last Another random-access iterator.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __result_first A random-access iterator.
+ * @param __result_last Another random-access iterator.
* @return An iterator indicating the end of the resulting sequence.
*
- * Copies and sorts the smallest N values from the range @p [first,last)
- * to the range beginning at @p result_first, where the number of
- * elements to be copied, @p N, is the smaller of @p (last-first) and
- * @p (result_last-result_first).
- * After the sort if @p i and @j are iterators in the range
- * @p [result_first,result_first+N) such that @i precedes @j then
- * @p *j<*i is false.
- * The value returned is @p result_first+N.
+ * Copies and sorts the smallest N values from the range @p [__first,__last)
+ * to the range beginning at @p __result_first, where the number of
+ * elements to be copied, @p N, is the smaller of @p (__last-__first) and
+ * @p (__result_last-__result_first).
+ * After the sort if @e i and @e j are iterators in the range
+ * @p [__result_first,__result_first+N) such that i precedes j then
+ * *j<*i is false.
+ * The value returned is @p __result_first+N.
*/
template<typename _InputIterator, typename _RandomAccessIterator>
_RandomAccessIterator
@@ -1989,21 +2045,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Copy the smallest elements of a sequence using a predicate for
* comparison.
* @ingroup sorting_algorithms
- * @param first An input iterator.
- * @param last Another input iterator.
- * @param result_first A random-access iterator.
- * @param result_last Another random-access iterator.
- * @param comp A comparison functor.
+ * @param __first An input iterator.
+ * @param __last Another input iterator.
+ * @param __result_first A random-access iterator.
+ * @param __result_last Another random-access iterator.
+ * @param __comp A comparison functor.
* @return An iterator indicating the end of the resulting sequence.
*
- * Copies and sorts the smallest N values from the range @p [first,last)
+ * Copies and sorts the smallest N values from the range @p [__first,__last)
* to the range beginning at @p result_first, where the number of
- * elements to be copied, @p N, is the smaller of @p (last-first) and
- * @p (result_last-result_first).
- * After the sort if @p i and @j are iterators in the range
- * @p [result_first,result_first+N) such that @i precedes @j then
- * @p comp(*j,*i) is false.
- * The value returned is @p result_first+N.
+ * elements to be copied, @p N, is the smaller of @p (__last-__first) and
+ * @p (__result_last-__result_first).
+ * After the sort if @e i and @e j are iterators in the range
+ * @p [__result_first,__result_first+N) such that i precedes j then
+ * @p __comp(*j,*i) is false.
+ * The value returned is @p __result_first+N.
*/
template<typename _InputIterator, typename _RandomAccessIterator, typename _Compare>
_RandomAccessIterator
@@ -2374,16 +2430,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// lower_bound moved to stl_algobase.h
/**
- * @brief Finds the first position in which @a val could be inserted
+ * @brief Finds the first position in which @p __val could be inserted
* without changing the ordering.
* @ingroup binary_search_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
- * @param comp A functor to use for comparisons.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
+ * @param __comp A functor to use for comparisons.
* @return An iterator pointing to the first element <em>not less
- * than</em> @a val, or end() if every element is less
- * than @a val.
+ * than</em> @p __val, or end() if every element is less
+ * than @p __val.
* @ingroup binary_search_algorithms
*
* The comparison function should have the same effects on ordering as
@@ -2426,14 +2482,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Finds the last position in which @a val could be inserted
+ * @brief Finds the last position in which @p __val could be inserted
* without changing the ordering.
* @ingroup binary_search_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
- * @return An iterator pointing to the first element greater than @a val,
- * or end() if no elements are greater than @a val.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
+ * @return An iterator pointing to the first element greater than @p __val,
+ * or end() if no elements are greater than @p __val.
* @ingroup binary_search_algorithms
*/
template<typename _ForwardIterator, typename _Tp>
@@ -2471,15 +2527,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Finds the last position in which @a val could be inserted
+ * @brief Finds the last position in which @p __val could be inserted
* without changing the ordering.
* @ingroup binary_search_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
- * @param comp A functor to use for comparisons.
- * @return An iterator pointing to the first element greater than @a val,
- * or end() if no elements are greater than @a val.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
+ * @param __comp A functor to use for comparisons.
+ * @return An iterator pointing to the first element greater than @p __val,
+ * or end() if no elements are greater than @p __val.
* @ingroup binary_search_algorithms
*
* The comparison function should have the same effects on ordering as
@@ -2522,19 +2578,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Finds the largest subrange in which @a val could be inserted
+ * @brief Finds the largest subrange in which @p __val could be inserted
* at any place in it without changing the ordering.
* @ingroup binary_search_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
* @return An pair of iterators defining the subrange.
* @ingroup binary_search_algorithms
*
* This is equivalent to
* @code
- * std::make_pair(lower_bound(first, last, val),
- * upper_bound(first, last, val))
+ * std::make_pair(lower_bound(__first, __last, __val),
+ * upper_bound(__first, __last, __val))
* @endcode
* but does not actually call those functions.
*/
@@ -2584,19 +2640,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Finds the largest subrange in which @a val could be inserted
+ * @brief Finds the largest subrange in which @p __val could be inserted
* at any place in it without changing the ordering.
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
- * @param comp A functor to use for comparisons.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
+ * @param __comp A functor to use for comparisons.
* @return An pair of iterators defining the subrange.
* @ingroup binary_search_algorithms
*
* This is equivalent to
* @code
- * std::make_pair(lower_bound(first, last, val, comp),
- * upper_bound(first, last, val, comp))
+ * std::make_pair(lower_bound(__first, __last, __val, __comp),
+ * upper_bound(__first, __last, __val, __comp))
* @endcode
* but does not actually call those functions.
*/
@@ -2652,12 +2708,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines whether an element exists in a range.
* @ingroup binary_search_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
- * @return True if @a val (or its equivalent) is in [@a first,@a last ].
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
+ * @return True if @p __val (or its equivalent) is in [@p
+ * __first,@p __last ].
*
- * Note that this does not actually return an iterator to @a val. For
+ * Note that this does not actually return an iterator to @p __val. For
* that, use std::find or a container's specialized find member functions.
*/
template<typename _ForwardIterator, typename _Tp>
@@ -2681,13 +2738,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines whether an element exists in a range.
* @ingroup binary_search_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
- * @param comp A functor to use for comparisons.
- * @return True if @a val (or its equivalent) is in [@a first,@a last ].
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
+ * @param __comp A functor to use for comparisons.
+ * @return True if @p __val (or its equivalent) is in @p [__first,__last].
*
- * Note that this does not actually return an iterator to @a val. For
+ * Note that this does not actually return an iterator to @p __val. For
* that, use std::find or a container's specialized find member functions.
*
* The comparison function should have the same effects on ordering as
@@ -3102,20 +3159,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Merges two sorted ranges in place.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param middle Another iterator.
- * @param last Another iterator.
+ * @param __first An iterator.
+ * @param __middle Another iterator.
+ * @param __last Another iterator.
* @return Nothing.
*
- * Merges two sorted and consecutive ranges, [first,middle) and
- * [middle,last), and puts the result in [first,last). The output will
- * be sorted. The sort is @e stable, that is, for equivalent
- * elements in the two ranges, elements from the first range will always
- * come before elements from the second.
+ * Merges two sorted and consecutive ranges, [__first,__middle) and
+ * [__middle,__last), and puts the result in [__first,__last). The
+ * output will be sorted. The sort is @e stable, that is, for
+ * equivalent elements in the two ranges, elements from the first
+ * range will always come before elements from the second.
*
- * If enough additional memory is available, this takes (last-first)-1
+ * If enough additional memory is available, this takes (__last-__first)-1
* comparisons. Otherwise an NlogN algorithm is used, where N is
- * distance(first,last).
+ * distance(__first,__last).
*/
template<typename _BidirectionalIterator>
void
@@ -3153,21 +3210,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Merges two sorted ranges in place.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param middle Another iterator.
- * @param last Another iterator.
- * @param comp A functor to use for comparisons.
+ * @param __first An iterator.
+ * @param __middle Another iterator.
+ * @param __last Another iterator.
+ * @param __comp A functor to use for comparisons.
* @return Nothing.
*
- * Merges two sorted and consecutive ranges, [first,middle) and
- * [middle,last), and puts the result in [first,last). The output will
+ * Merges two sorted and consecutive ranges, [__first,__middle) and
+ * [middle,last), and puts the result in [__first,__last). The output will
* be sorted. The sort is @e stable, that is, for equivalent
* elements in the two ranges, elements from the first range will always
* come before elements from the second.
*
- * If enough additional memory is available, this takes (last-first)-1
+ * If enough additional memory is available, this takes (__last-__first)-1
* comparisons. Otherwise an NlogN algorithm is used, where N is
- * distance(first,last).
+ * distance(__first,__last).
*
* The comparison function should have the same effects on ordering as
* the function used for the initial sort.
@@ -3496,19 +3553,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines whether all elements of a sequence exists in a range.
- * @param first1 Start of search range.
- * @param last1 End of search range.
- * @param first2 Start of sequence
- * @param last2 End of sequence.
- * @return True if each element in [first2,last2) is contained in order
- * within [first1,last1). False otherwise.
+ * @param __first1 Start of search range.
+ * @param __last1 End of search range.
+ * @param __first2 Start of sequence
+ * @param __last2 End of sequence.
+ * @return True if each element in [__first2,__last2) is contained in order
+ * within [__first1,__last1). False otherwise.
* @ingroup set_algorithms
*
- * This operation expects both [first1,last1) and [first2,last2) to be
- * sorted. Searches for the presence of each element in [first2,last2)
- * within [first1,last1). The iterators over each range only move forward,
- * so this is a linear algorithm. If an element in [first2,last2) is not
- * found before the search iterator reaches @a last2, false is returned.
+ * This operation expects both [__first1,__last1) and
+ * [__first2,__last2) to be sorted. Searches for the presence of
+ * each element in [__first2,__last2) within [__first1,__last1).
+ * The iterators over each range only move forward, so this is a
+ * linear algorithm. If an element in [__first2,__last2) is not
+ * found before the search iterator reaches @p __last2, false is
+ * returned.
*/
template<typename _InputIterator1, typename _InputIterator2>
bool
@@ -3543,21 +3602,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Determines whether all elements of a sequence exists in a range
* using comparison.
* @ingroup set_algorithms
- * @param first1 Start of search range.
- * @param last1 End of search range.
- * @param first2 Start of sequence
- * @param last2 End of sequence.
- * @param comp Comparison function to use.
- * @return True if each element in [first2,last2) is contained in order
- * within [first1,last1) according to comp. False otherwise.
- * @ingroup set_algorithms
+ * @param __first1 Start of search range.
+ * @param __last1 End of search range.
+ * @param __first2 Start of sequence
+ * @param __last2 End of sequence.
+ * @param __comp Comparison function to use.
+ * @return True if each element in [__first2,__last2) is contained
+ * in order within [__first1,__last1) according to comp. False
+ * otherwise. @ingroup set_algorithms
*
- * This operation expects both [first1,last1) and [first2,last2) to be
- * sorted. Searches for the presence of each element in [first2,last2)
- * within [first1,last1), using comp to decide. The iterators over each
- * range only move forward, so this is a linear algorithm. If an element
- * in [first2,last2) is not found before the search iterator reaches @a
- * last2, false is returned.
+ * This operation expects both [__first1,__last1) and
+ * [__first2,__last2) to be sorted. Searches for the presence of
+ * each element in [__first2,__last2) within [__first1,__last1),
+ * using comp to decide. The iterators over each range only move
+ * forward, so this is a linear algorithm. If an element in
+ * [__first2,__last2) is not found before the search iterator
+ * reaches @p __last2, false is returned.
*/
template<typename _InputIterator1, typename _InputIterator2,
typename _Compare>
@@ -3603,13 +3663,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// max_element
/**
- * @brief Permute range into the next @a dictionary ordering.
+ * @brief Permute range into the next @e dictionary ordering.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return False if wrapped to first permutation, true otherwise.
*
- * Treats all permutations of the range as a set of @a dictionary sorted
+ * Treats all permutations of the range as a set of @e dictionary sorted
* sequences. Permutes the current sequence into the next one of this set.
* Returns true if there are more sequences to generate. If the sequence
* is the largest of the set, the smallest is generated and false returned.
@@ -3657,16 +3717,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Permute range into the next @a dictionary ordering using
+ * @brief Permute range into the next @e dictionary ordering using
* comparison functor.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
- * @param comp A comparison functor.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp A comparison functor.
* @return False if wrapped to first permutation, true otherwise.
*
- * Treats all permutations of the range [first,last) as a set of
- * @a dictionary sorted sequences ordered by @a comp. Permutes the current
+ * Treats all permutations of the range [__first,__last) as a set of
+ * @e dictionary sorted sequences ordered by @p __comp. Permutes the current
* sequence into the next one of this set. Returns true if there are more
* sequences to generate. If the sequence is the largest of the set, the
* smallest is generated and false returned.
@@ -3715,13 +3775,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Permute range into the previous @a dictionary ordering.
+ * @brief Permute range into the previous @e dictionary ordering.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return False if wrapped to last permutation, true otherwise.
*
- * Treats all permutations of the range as a set of @a dictionary sorted
+ * Treats all permutations of the range as a set of @e dictionary sorted
* sequences. Permutes the current sequence into the previous one of this
* set. Returns true if there are more sequences to generate. If the
* sequence is the smallest of the set, the largest is generated and false
@@ -3770,16 +3830,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Permute range into the previous @a dictionary ordering using
+ * @brief Permute range into the previous @e dictionary ordering using
* comparison functor.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
- * @param comp A comparison functor.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp A comparison functor.
* @return False if wrapped to last permutation, true otherwise.
*
- * Treats all permutations of the range [first,last) as a set of
- * @a dictionary sorted sequences ordered by @a comp. Permutes the current
+ * Treats all permutations of the range [__first,__last) as a set of
+ * @e dictionary sorted sequences ordered by @p __comp. Permutes the current
* sequence into the previous one of this set. Returns true if there are
* more sequences to generate. If the sequence is the smallest of the set,
* the largest is generated and false returned.
@@ -3833,16 +3893,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copy a sequence, replacing each element of one value with another
* value.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param old_value The value to be replaced.
- * @param new_value The replacement value.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __old_value The value to be replaced.
+ * @param __new_value The replacement value.
* @return The end of the output sequence, @p result+(last-first).
*
- * Copies each element in the input range @p [first,last) to the
- * output range @p [result,result+(last-first)) replacing elements
- * equal to @p old_value with @p new_value.
+ * Copies each element in the input range @p [__first,__last) to the
+ * output range @p [__result,__result+(__last-__first)) replacing elements
+ * equal to @p __old_value with @p __new_value.
*/
template<typename _InputIterator, typename _OutputIterator, typename _Tp>
_OutputIterator
@@ -3870,16 +3930,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Copy a sequence, replacing each value for which a predicate
* returns true with another value.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param pred A predicate.
- * @param new_value The replacement value.
- * @return The end of the output sequence, @p result+(last-first).
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __pred A predicate.
+ * @param __new_value The replacement value.
+ * @return The end of the output sequence, @p __result+(__last-__first).
*
- * Copies each element in the range @p [first,last) to the range
- * @p [result,result+(last-first)) replacing elements for which
- * @p pred returns true with @p new_value.
+ * Copies each element in the range @p [__first,__last) to the range
+ * @p [__result,__result+(__last-__first)) replacing elements for which
+ * @p __pred returns true with @p __new_value.
*/
template<typename _InputIterator, typename _OutputIterator,
typename _Predicate, typename _Tp>
@@ -3908,8 +3968,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines whether the elements of a sequence are sorted.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
+ * @param __first An iterator.
+ * @param __last Another iterator.
* @return True if the elements are sorted, false otherwise.
*/
template<typename _ForwardIterator>
@@ -3921,9 +3981,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Determines whether the elements of a sequence are sorted
* according to a comparison functor.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param comp A comparison functor.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __comp A comparison functor.
* @return True if the elements are sorted, false otherwise.
*/
template<typename _ForwardIterator, typename _Compare>
@@ -3935,10 +3995,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines the end of a sorted sequence.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @return An iterator pointing to the last iterator i in [first, last)
- * for which the range [first, i) is sorted.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @return An iterator pointing to the last iterator i in [__first, __last)
+ * for which the range [__first, i) is sorted.
*/
template<typename _ForwardIterator>
_ForwardIterator
@@ -3963,11 +4023,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines the end of a sorted sequence using comparison functor.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param comp A comparison functor.
- * @return An iterator pointing to the last iterator i in [first, last)
- * for which the range [first, i) is sorted.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __comp A comparison functor.
+ * @return An iterator pointing to the last iterator i in [__first, __last)
+ * for which the range [__first, i) is sorted.
*/
template<typename _ForwardIterator, typename _Compare>
_ForwardIterator
@@ -3994,9 +4054,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines min and max at once as an ordered pair.
* @ingroup sorting_algorithms
- * @param a A thing of arbitrary type.
- * @param b Another thing of arbitrary type.
- * @return A pair(b, a) if b is smaller than a, pair(a, b) otherwise.
+ * @param __a A thing of arbitrary type.
+ * @param __b Another thing of arbitrary type.
+ * @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
+ * __b) otherwise.
*/
template<typename _Tp>
inline pair<const _Tp&, const _Tp&>
@@ -4012,10 +4073,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines min and max at once as an ordered pair.
* @ingroup sorting_algorithms
- * @param a A thing of arbitrary type.
- * @param b Another thing of arbitrary type.
- * @param comp A @link comparison_functor comparison functor@endlink.
- * @return A pair(b, a) if b is smaller than a, pair(a, b) otherwise.
+ * @param __a A thing of arbitrary type.
+ * @param __b Another thing of arbitrary type.
+ * @param __comp A @link comparison_functors comparison functor @endlink.
+ * @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
+ * __b) otherwise.
*/
template<typename _Tp, typename _Compare>
inline pair<const _Tp&, const _Tp&>
@@ -4029,11 +4091,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Return a pair of iterators pointing to the minimum and maximum
* elements in a range.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return make_pair(m, M), where m is the first iterator i in
- * [first, last) such that no other element in the range is
- * smaller, and where M is the last iterator i in [first, last)
+ * [__first, __last) such that no other element in the range is
+ * smaller, and where M is the last iterator i in [__first, __last)
* such that no other element in the range is larger.
*/
template<typename _ForwardIterator>
@@ -4104,12 +4166,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Return a pair of iterators pointing to the minimum and maximum
* elements in a range.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
- * @param comp Comparison functor.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp Comparison functor.
* @return make_pair(m, M), where m is the first iterator i in
- * [first, last) such that no other element in the range is
- * smaller, and where M is the last iterator i in [first, last)
+ * [__first, __last) such that no other element in the range is
+ * smaller, and where M is the last iterator i in [__first, __last)
* such that no other element in the range is larger.
*/
template<typename _ForwardIterator, typename _Compare>
@@ -4221,12 +4283,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Checks whether a permutaion of the second sequence is equal
* to the first sequence.
* @ingroup non_mutating_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
* @return true if there exists a permutation of the elements in the range
- * [first2, first2 + (last1 - first1)), beginning with
- * ForwardIterator2 begin, such that equal(first1, last1, begin)
+ * [__first2, __first2 + (__last1 - __first1)), beginning with
+ * ForwardIterator2 begin, such that equal(__first1, __last1, begin)
* returns true; otherwise, returns false.
*/
template<typename _ForwardIterator1, typename _ForwardIterator2>
@@ -4264,14 +4326,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Checks whether a permutation of the second sequence is equal
* to the first sequence.
* @ingroup non_mutating_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param pred A binary predicate.
- * @return true if there exists a permutation of the elements in the range
- * [first2, first2 + (last1 - first1)), beginning with
- * ForwardIterator2 begin, such that equal(first1, last1, begin,
- * pred) returns true; otherwise, returns false.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __pred A binary predicate.
+ * @return true if there exists a permutation of the elements in
+ * the range [__first2, __first2 + (__last1 - __first1)),
+ * beginning with ForwardIterator2 begin, such that
+ * equal(__first1, __last1, __begin, __pred) returns true;
+ * otherwise, returns false.
*/
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
@@ -4315,12 +4378,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Shuffle the elements of a sequence using a uniform random
* number generator.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param g A UniformRandomNumberGenerator (26.5.1.3).
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __g A UniformRandomNumberGenerator (26.5.1.3).
* @return Nothing.
*
- * Reorders the elements in the range @p [first,last) using @p g to
+ * Reorders the elements in the range @p [__first,__last) using @p __g to
* provide random numbers.
*/
template<typename _RandomAccessIterator,
@@ -4359,14 +4422,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Apply a function to every element of a sequence.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param f A unary function object.
- * @return @p f (std::move(@p f) in C++0x).
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __f A unary function object.
+ * @return @p __f (std::move(@p __f) in C++0x).
*
- * Applies the function object @p f to each element in the range
- * @p [first,last). @p f must not modify the order of the sequence.
- * If @p f has a return value it is ignored.
+ * Applies the function object @p __f to each element in the range
+ * @p [first,last). @p __f must not modify the order of the sequence.
+ * If @p __f has a return value it is ignored.
*/
template<typename _InputIterator, typename _Function>
_Function
@@ -4383,11 +4446,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Find the first occurrence of a value in a sequence.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param val The value to find.
- * @return The first iterator @c i in the range @p [first,last)
- * such that @c *i == @p val, or @p last if no such iterator exists.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __val The value to find.
+ * @return The first iterator @c i in the range @p [__first,__last)
+ * such that @c *i == @p __val, or @p __last if no such iterator exists.
*/
template<typename _InputIterator, typename _Tp>
inline _InputIterator
@@ -4407,11 +4470,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Find the first element in a sequence for which a
* predicate is true.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
- * @return The first iterator @c i in the range @p [first,last)
- * such that @p pred(*i) is true, or @p last if no such iterator exists.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
+ * @return The first iterator @c i in the range @p [__first,__last)
+ * such that @p __pred(*i) is true, or @p __last if no such iterator exists.
*/
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
@@ -4430,17 +4493,18 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Find element from a set in a sequence.
* @ingroup non_mutating_algorithms
- * @param first1 Start of range to search.
- * @param last1 End of range to search.
- * @param first2 Start of match candidates.
- * @param last2 End of match candidates.
+ * @param __first1 Start of range to search.
+ * @param __last1 End of range to search.
+ * @param __first2 Start of match candidates.
+ * @param __last2 End of match candidates.
* @return The first iterator @c i in the range
- * @p [first1,last1) such that @c *i == @p *(i2) such that i2 is an
- * iterator in [first2,last2), or @p last1 if no such iterator exists.
+ * @p [__first1,__last1) such that @c *i == @p *(i2) such that i2 is an
+ * iterator in [__first2,__last2), or @p __last1 if no such iterator exists.
*
- * Searches the range @p [first1,last1) for an element that is equal to
- * some element in the range [first2,last2). If found, returns an iterator
- * in the range [first1,last1), otherwise returns @p last1.
+ * Searches the range @p [__first1,__last1) for an element that is
+ * equal to some element in the range [__first2,__last2). If
+ * found, returns an iterator in the range [__first1,__last1),
+ * otherwise returns @p __last1.
*/
template<typename _InputIterator, typename _ForwardIterator>
_InputIterator
@@ -4466,20 +4530,21 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Find element from a set in a sequence using a predicate.
* @ingroup non_mutating_algorithms
- * @param first1 Start of range to search.
- * @param last1 End of range to search.
- * @param first2 Start of match candidates.
- * @param last2 End of match candidates.
- * @param comp Predicate to use.
+ * @param __first1 Start of range to search.
+ * @param __last1 End of range to search.
+ * @param __first2 Start of match candidates.
+ * @param __last2 End of match candidates.
+ * @param __comp Predicate to use.
* @return The first iterator @c i in the range
- * @p [first1,last1) such that @c comp(*i, @p *(i2)) is true and i2 is an
- * iterator in [first2,last2), or @p last1 if no such iterator exists.
+ * @p [__first1,__last1) such that @c comp(*i, @p *(i2)) is true
+ * and i2 is an iterator in [__first2,__last2), or @p __last1 if no
+ * such iterator exists.
*
- * Searches the range @p [first1,last1) for an element that is
- * equal to some element in the range [first2,last2). If found,
- * returns an iterator in the range [first1,last1), otherwise
- * returns @p last1.
+ * Searches the range @p [__first1,__last1) for an element that is
+ * equal to some element in the range [__first2,__last2). If
+ * found, returns an iterator in the range [__first1,__last1),
+ * otherwise returns @p __last1.
*/
template<typename _InputIterator, typename _ForwardIterator,
typename _BinaryPredicate>
@@ -4507,11 +4572,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Find two adjacent values in a sequence that are equal.
* @ingroup non_mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
* @return The first iterator @c i such that @c i and @c i+1 are both
- * valid iterators in @p [first,last) and such that @c *i == @c *(i+1),
- * or @p last if no such iterator exists.
+ * valid iterators in @p [__first,__last) and such that @c *i == @c *(i+1),
+ * or @p __last if no such iterator exists.
*/
template<typename _ForwardIterator>
_ForwardIterator
@@ -4537,12 +4602,12 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Find two adjacent values in a sequence using a predicate.
* @ingroup non_mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param binary_pred A binary predicate.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __binary_pred A binary predicate.
* @return The first iterator @c i such that @c i and @c i+1 are both
- * valid iterators in @p [first,last) and such that
- * @p binary_pred(*i,*(i+1)) is true, or @p last if no such iterator
+ * valid iterators in @p [__first,__last) and such that
+ * @p __binary_pred(*i,*(i+1)) is true, or @p __last if no such iterator
* exists.
*/
template<typename _ForwardIterator, typename _BinaryPredicate>
@@ -4571,11 +4636,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Count the number of copies of a value in a sequence.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param value The value to be counted.
- * @return The number of iterators @c i in the range @p [first,last)
- * for which @c *i == @p value
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __value The value to be counted.
+ * @return The number of iterators @c i in the range @p [__first,__last)
+ * for which @c *i == @p __value
*/
template<typename _InputIterator, typename _Tp>
typename iterator_traits<_InputIterator>::difference_type
@@ -4596,11 +4661,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Count the elements of a sequence for which a predicate is true.
* @ingroup non_mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param pred A predicate.
- * @return The number of iterators @c i in the range @p [first,last)
- * for which @p pred(*i) is true.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __pred A predicate.
+ * @return The number of iterators @c i in the range @p [__first,__last)
+ * for which @p __pred(*i) is true.
*/
template<typename _InputIterator, typename _Predicate>
typename iterator_traits<_InputIterator>::difference_type
@@ -4621,26 +4686,28 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Search a sequence for a matching sub-sequence.
* @ingroup non_mutating_algorithms
- * @param first1 A forward iterator.
- * @param last1 A forward iterator.
- * @param first2 A forward iterator.
- * @param last2 A forward iterator.
- * @return The first iterator @c i in the range
- * @p [first1,last1-(last2-first2)) such that @c *(i+N) == @p *(first2+N)
- * for each @c N in the range @p [0,last2-first2), or @p last1 if no
- * such iterator exists.
+ * @param __first1 A forward iterator.
+ * @param __last1 A forward iterator.
+ * @param __first2 A forward iterator.
+ * @param __last2 A forward iterator.
+ * @return The first iterator @c i in the range @p
+ * [__first1,__last1-(__last2-__first2)) such that @c *(i+N) == @p
+ * *(__first2+N) for each @c N in the range @p
+ * [0,__last2-__first2), or @p __last1 if no such iterator exists.
*
- * Searches the range @p [first1,last1) for a sub-sequence that compares
- * equal value-by-value with the sequence given by @p [first2,last2) and
- * returns an iterator to the first element of the sub-sequence, or
- * @p last1 if the sub-sequence is not found.
+ * Searches the range @p [__first1,__last1) for a sub-sequence that
+ * compares equal value-by-value with the sequence given by @p
+ * [__first2,__last2) and returns an iterator to the first element
+ * of the sub-sequence, or @p __last1 if the sub-sequence is not
+ * found.
+ *
+ * Because the sub-sequence must lie completely within the range @p
+ * [__first1,__last1) it must start at a position less than @p
+ * __last1-(__last2-__first2) where @p __last2-__first2 is the
+ * length of the sub-sequence.
*
- * Because the sub-sequence must lie completely within the range
- * @p [first1,last1) it must start at a position less than
- * @p last1-(last2-first2) where @p last2-first2 is the length of the
- * sub-sequence.
* This means that the returned iterator @c i will be in the range
- * @p [first1,last1-(last2-first2))
+ * @p [__first1,__last1-(__last2-__first2))
*/
template<typename _ForwardIterator1, typename _ForwardIterator2>
_ForwardIterator1
@@ -4695,21 +4762,21 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Search a sequence for a matching sub-sequence using a predicate.
* @ingroup non_mutating_algorithms
- * @param first1 A forward iterator.
- * @param last1 A forward iterator.
- * @param first2 A forward iterator.
- * @param last2 A forward iterator.
- * @param predicate A binary predicate.
+ * @param __first1 A forward iterator.
+ * @param __last1 A forward iterator.
+ * @param __first2 A forward iterator.
+ * @param __last2 A forward iterator.
+ * @param __predicate A binary predicate.
* @return The first iterator @c i in the range
- * @p [first1,last1-(last2-first2)) such that
- * @p predicate(*(i+N),*(first2+N)) is true for each @c N in the range
- * @p [0,last2-first2), or @p last1 if no such iterator exists.
+ * @p [__first1,__last1-(__last2-__first2)) such that
+ * @p __predicate(*(i+N),*(__first2+N)) is true for each @c N in the range
+ * @p [0,__last2-__first2), or @p __last1 if no such iterator exists.
*
- * Searches the range @p [first1,last1) for a sub-sequence that compares
- * equal value-by-value with the sequence given by @p [first2,last2),
- * using @p predicate to determine equality, and returns an iterator
- * to the first element of the sub-sequence, or @p last1 if no such
- * iterator exists.
+ * Searches the range @p [__first1,__last1) for a sub-sequence that
+ * compares equal value-by-value with the sequence given by @p
+ * [__first2,__last2), using @p __predicate to determine equality,
+ * and returns an iterator to the first element of the
+ * sub-sequence, or @p __last1 if no such iterator exists.
*
* @see search(_ForwardIter1, _ForwardIter1, _ForwardIter2, _ForwardIter2)
*/
@@ -4776,16 +4843,17 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Search a sequence for a number of consecutive values.
* @ingroup non_mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param count The number of consecutive values.
- * @param val The value to find.
- * @return The first iterator @c i in the range @p [first,last-count)
- * such that @c *(i+N) == @p val for each @c N in the range @p [0,count),
- * or @p last if no such iterator exists.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __count The number of consecutive values.
+ * @param __val The value to find.
+ * @return The first iterator @c i in the range @p
+ * [__first,__last-__count) such that @c *(i+N) == @p __val for
+ * each @c N in the range @p [0,__count), or @p __last if no such
+ * iterator exists.
*
- * Searches the range @p [first,last) for @p count consecutive elements
- * equal to @p val.
+ * Searches the range @p [__first,__last) for @p count consecutive elements
+ * equal to @p __val.
*/
template<typename _ForwardIterator, typename _Integer, typename _Tp>
_ForwardIterator
@@ -4811,17 +4879,18 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Search a sequence for a number of consecutive values using a
* predicate.
* @ingroup non_mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param count The number of consecutive values.
- * @param val The value to find.
- * @param binary_pred A binary predicate.
- * @return The first iterator @c i in the range @p [first,last-count)
- * such that @p binary_pred(*(i+N),val) is true for each @c N in the
- * range @p [0,count), or @p last if no such iterator exists.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __count The number of consecutive values.
+ * @param __val The value to find.
+ * @param __binary_pred A binary predicate.
+ * @return The first iterator @c i in the range @p
+ * [__first,__last-__count) such that @p
+ * __binary_pred(*(i+N),__val) is true for each @c N in the range
+ * @p [0,__count), or @p __last if no such iterator exists.
*
- * Searches the range @p [first,last) for @p count consecutive elements
- * for which the predicate returns true.
+ * Searches the range @p [__first,__last) for @p __count
+ * consecutive elements for which the predicate returns true.
*/
template<typename _ForwardIterator, typename _Integer, typename _Tp,
typename _BinaryPredicate>
@@ -4852,16 +4921,16 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Perform an operation on a sequence.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param unary_op A unary operator.
- * @return An output iterator equal to @p result+(last-first).
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __unary_op A unary operator.
+ * @return An output iterator equal to @p __result+(__last-__first).
*
* Applies the operator to each element in the input range and assigns
* the results to successive elements of the output sequence.
- * Evaluates @p *(result+N)=unary_op(*(first+N)) for each @c N in the
- * range @p [0,last-first).
+ * Evaluates @p *(__result+N)=unary_op(*(__first+N)) for each @c N in the
+ * range @p [0,__last-__first).
*
* @p unary_op must not alter its argument.
*/
@@ -4886,18 +4955,19 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Perform an operation on corresponding elements of two sequences.
* @ingroup mutating_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
- * @param result An output iterator.
- * @param binary_op A binary operator.
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
+ * @param __result An output iterator.
+ * @param __binary_op A binary operator.
* @return An output iterator equal to @p result+(last-first).
*
* Applies the operator to the corresponding elements in the two
* input ranges and assigns the results to successive elements of the
* output sequence.
- * Evaluates @p *(result+N)=binary_op(*(first1+N),*(first2+N)) for each
- * @c N in the range @p [0,last1-first1).
+ * Evaluates @p
+ * *(__result+N)=__binary_op(*(__first1+N),*(__first2+N)) for each
+ * @c N in the range @p [0,__last1-__first1).
*
* @p binary_op must not alter either of its arguments.
*/
@@ -4925,14 +4995,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Replace each occurrence of one value in a sequence with another
* value.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param old_value The value to be replaced.
- * @param new_value The replacement value.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __old_value The value to be replaced.
+ * @param __new_value The replacement value.
* @return replace() returns no value.
*
- * For each iterator @c i in the range @p [first,last) if @c *i ==
- * @p old_value then the assignment @c *i = @p new_value is performed.
+ * For each iterator @c i in the range @p [__first,__last) if @c *i ==
+ * @p __old_value then the assignment @c *i = @p __new_value is performed.
*/
template<typename _ForwardIterator, typename _Tp>
void
@@ -4957,14 +5027,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Replace each value in a sequence for which a predicate returns
* true with another value.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param pred A predicate.
- * @param new_value The replacement value.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __pred A predicate.
+ * @param __new_value The replacement value.
* @return replace_if() returns no value.
*
- * For each iterator @c i in the range @p [first,last) if @p pred(*i)
- * is true then the assignment @c *i = @p new_value is performed.
+ * For each iterator @c i in the range @p [__first,__last) if @p __pred(*i)
+ * is true then the assignment @c *i = @p __new_value is performed.
*/
template<typename _ForwardIterator, typename _Predicate, typename _Tp>
void
@@ -4989,14 +5059,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Assign the result of a function object to each value in a
* sequence.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param gen A function object taking no arguments and returning
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __gen A function object taking no arguments and returning
* std::iterator_traits<_ForwardIterator>::value_type
* @return generate() returns no value.
*
- * Performs the assignment @c *i = @p gen() for each @c i in the range
- * @p [first,last).
+ * Performs the assignment @c *i = @p __gen() for each @c i in the range
+ * @p [__first,__last).
*/
template<typename _ForwardIterator, typename _Generator>
void
@@ -5017,14 +5087,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Assign the result of a function object to each value in a
* sequence.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param n The length of the sequence.
- * @param gen A function object taking no arguments and returning
+ * @param __first A forward iterator.
+ * @param __n The length of the sequence.
+ * @param __gen A function object taking no arguments and returning
* std::iterator_traits<_ForwardIterator>::value_type
- * @return The end of the sequence, @p first+n
+ * @return The end of the sequence, @p __first+__n
*
- * Performs the assignment @c *i = @p gen() for each @c i in the range
- * @p [first,first+n).
+ * Performs the assignment @c *i = @p __gen() for each @c i in the range
+ * @p [__first,__first+__n).
*
* _GLIBCXX_RESOLVE_LIB_DEFECTS
* DR 865. More algorithms that throw away information
@@ -5048,13 +5118,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Copy a sequence, removing consecutive duplicate values.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies each element in the range @p [first,last) to the range
- * beginning at @p result, except that only the first element is copied
+ * Copies each element in the range @p [__first,__last) to the range
+ * beginning at @p __result, except that only the first element is copied
* from groups of consecutive elements that compare equal.
* unique_copy() is stable, so the relative order of elements that are
* copied is unchanged.
@@ -5089,15 +5159,15 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Copy a sequence, removing consecutive values using a predicate.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @param binary_pred A binary predicate.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @param __binary_pred A binary predicate.
* @return An iterator designating the end of the resulting sequence.
*
- * Copies each element in the range @p [first,last) to the range
- * beginning at @p result, except that only the first element is copied
- * from groups of consecutive elements for which @p binary_pred returns
+ * Copies each element in the range @p [__first,__last) to the range
+ * beginning at @p __result, except that only the first element is copied
+ * from groups of consecutive elements for which @p __binary_pred returns
* true.
* unique_copy() is stable, so the relative order of elements that are
* copied is unchanged.
@@ -5129,11 +5199,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Randomly shuffle the elements of a sequence.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
* @return Nothing.
*
- * Reorder the elements in the range @p [first,last) using a random
+ * Reorder the elements in the range @p [__first,__last) using a random
* distribution, so that every possible ordering of the sequence is
* equally likely.
*/
@@ -5155,13 +5225,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Shuffle the elements of a sequence using a random number
* generator.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param rand The RNG functor or function.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __rand The RNG functor or function.
* @return Nothing.
*
- * Reorders the elements in the range @p [first,last) using @p rand to
- * provide a random distribution. Calling @p rand(N) for a positive
+ * Reorders the elements in the range @p [__first,__last) using @p __rand to
+ * provide a random distribution. Calling @p __rand(N) for a positive
* integer @p N should return a randomly chosen integer from the
* range [0,N).
*/
@@ -5190,14 +5260,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Move elements for which a predicate is true to the beginning
* of a sequence.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param pred A predicate functor.
- * @return An iterator @p middle such that @p pred(i) is true for each
- * iterator @p i in the range @p [first,middle) and false for each @p i
- * in the range @p [middle,last).
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __pred A predicate functor.
+ * @return An iterator @p middle such that @p __pred(i) is true for each
+ * iterator @p i in the range @p [__first,middle) and false for each @p i
+ * in the range @p [middle,__last).
*
- * @p pred must not modify its operand. @p partition() does not preserve
+ * @p __pred must not modify its operand. @p partition() does not preserve
* the relative ordering of elements in each group, use
* @p stable_partition() if this is needed.
*/
@@ -5222,18 +5292,18 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Sort the smallest elements of a sequence.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param middle Another iterator.
- * @param last Another iterator.
+ * @param __first An iterator.
+ * @param __middle Another iterator.
+ * @param __last Another iterator.
* @return Nothing.
*
- * Sorts the smallest @p (middle-first) elements in the range
- * @p [first,last) and moves them to the range @p [first,middle). The
- * order of the remaining elements in the range @p [middle,last) is
+ * Sorts the smallest @p (__middle-__first) elements in the range
+ * @p [first,last) and moves them to the range @p [__first,__middle). The
+ * order of the remaining elements in the range @p [__middle,__last) is
* undefined.
- * After the sort if @p i and @j are iterators in the range
- * @p [first,middle) such that @i precedes @j and @k is an iterator in
- * the range @p [middle,last) then @p *j<*i and @p *k<*i are both false.
+ * After the sort if @e i and @e j are iterators in the range
+ * @p [__first,__middle) such that i precedes j and @e k is an iterator in
+ * the range @p [__middle,__last) then *j<*i and *k<*i are both false.
*/
template<typename _RandomAccessIterator>
inline void
@@ -5259,19 +5329,19 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Sort the smallest elements of a sequence using a predicate
* for comparison.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param middle Another iterator.
- * @param last Another iterator.
- * @param comp A comparison functor.
+ * @param __first An iterator.
+ * @param __middle Another iterator.
+ * @param __last Another iterator.
+ * @param __comp A comparison functor.
* @return Nothing.
*
- * Sorts the smallest @p (middle-first) elements in the range
- * @p [first,last) and moves them to the range @p [first,middle). The
- * order of the remaining elements in the range @p [middle,last) is
+ * Sorts the smallest @p (__middle-__first) elements in the range
+ * @p [__first,__last) and moves them to the range @p [__first,__middle). The
+ * order of the remaining elements in the range @p [__middle,__last) is
* undefined.
- * After the sort if @p i and @j are iterators in the range
- * @p [first,middle) such that @i precedes @j and @k is an iterator in
- * the range @p [middle,last) then @p *comp(j,*i) and @p comp(*k,*i)
+ * After the sort if @e i and @e j are iterators in the range
+ * @p [__first,__middle) such that i precedes j and @e k is an iterator in
+ * the range @p [__middle,__last) then @p *__comp(j,*i) and @p __comp(*k,*i)
* are both false.
*/
template<typename _RandomAccessIterator, typename _Compare>
@@ -5299,18 +5369,17 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Sort a sequence just enough to find a particular position.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param nth Another iterator.
- * @param last Another iterator.
+ * @param __first An iterator.
+ * @param __nth Another iterator.
+ * @param __last Another iterator.
* @return Nothing.
*
- * Rearranges the elements in the range @p [first,last) so that @p *nth
+ * Rearranges the elements in the range @p [__first,__last) so that @p *__nth
* is the same element that would have been in that position had the
- * whole sequence been sorted.
- * whole sequence been sorted. The elements either side of @p *nth are
- * not completely sorted, but for any iterator @i in the range
- * @p [first,nth) and any iterator @j in the range @p [nth,last) it
- * holds that @p *j<*i is false.
+ * whole sequence been sorted. The elements either side of @p *__nth are
+ * not completely sorted, but for any iterator @e i in the range
+ * @p [__first,__nth) and any iterator @e j in the range @p [__nth,__last) it
+ * holds that *j < *i is false.
*/
template<typename _RandomAccessIterator>
inline void
@@ -5338,18 +5407,18 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Sort a sequence just enough to find a particular position
* using a predicate for comparison.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param nth Another iterator.
- * @param last Another iterator.
- * @param comp A comparison functor.
+ * @param __first An iterator.
+ * @param __nth Another iterator.
+ * @param __last Another iterator.
+ * @param __comp A comparison functor.
* @return Nothing.
*
- * Rearranges the elements in the range @p [first,last) so that @p *nth
+ * Rearranges the elements in the range @p [__first,__last) so that @p *__nth
* is the same element that would have been in that position had the
- * whole sequence been sorted. The elements either side of @p *nth are
- * not completely sorted, but for any iterator @i in the range
- * @p [first,nth) and any iterator @j in the range @p [nth,last) it
- * holds that @p comp(*j,*i) is false.
+ * whole sequence been sorted. The elements either side of @p *__nth are
+ * not completely sorted, but for any iterator @e i in the range
+ * @p [__first,__nth) and any iterator @e j in the range @p [__nth,__last) it
+ * holds that @p __comp(*j,*i) is false.
*/
template<typename _RandomAccessIterator, typename _Compare>
inline void
@@ -5378,13 +5447,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Sort the elements of a sequence.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
+ * @param __first An iterator.
+ * @param __last Another iterator.
* @return Nothing.
*
- * Sorts the elements in the range @p [first,last) in ascending order,
- * such that @p *(i+1)<*i is false for each iterator @p i in the range
- * @p [first,last-1).
+ * Sorts the elements in the range @p [__first,__last) in ascending order,
+ * such that for each iterator @e i in the range @p [__first,__last-1),
+ * *(i+1)<*i is false.
*
* The relative ordering of equivalent elements is not preserved, use
* @p stable_sort() if this is needed.
@@ -5413,14 +5482,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Sort the elements of a sequence using a predicate for comparison.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param comp A comparison functor.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __comp A comparison functor.
* @return Nothing.
*
- * Sorts the elements in the range @p [first,last) in ascending order,
- * such that @p comp(*(i+1),*i) is false for every iterator @p i in the
- * range @p [first,last-1).
+ * Sorts the elements in the range @p [__first,__last) in ascending order,
+ * such that @p __comp(*(i+1),*i) is false for every iterator @e i in the
+ * range @p [__first,__last-1).
*
* The relative ordering of equivalent elements is not preserved, use
* @p stable_sort() if this is needed.
@@ -5451,20 +5520,21 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Merges two sorted ranges.
* @ingroup sorting_algorithms
- * @param first1 An iterator.
- * @param first2 Another iterator.
- * @param last1 Another iterator.
- * @param last2 Another iterator.
- * @param result An iterator pointing to the end of the merged range.
+ * @param __first1 An iterator.
+ * @param __first2 Another iterator.
+ * @param __last1 Another iterator.
+ * @param __last2 Another iterator.
+ * @param __result An iterator pointing to the end of the merged range.
* @return An iterator pointing to the first element <em>not less
- * than</em> @a val.
+ * than</em> @e val.
*
- * Merges the ranges [first1,last1) and [first2,last2) into the sorted range
- * [result, result + (last1-first1) + (last2-first2)). Both input ranges
- * must be sorted, and the output range must not overlap with either of
- * the input ranges. The sort is @e stable, that is, for equivalent
- * elements in the two ranges, elements from the first range will always
- * come before elements from the second.
+ * Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
+ * the sorted range @p [__result, __result + (__last1-__first1) +
+ * (__last2-__first2)). Both input ranges must be sorted, and the
+ * output range must not overlap with either of the input ranges.
+ * The sort is @e stable, that is, for equivalent elements in the
+ * two ranges, elements from the first range will always come
+ * before elements from the second.
*/
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator>
@@ -5510,21 +5580,22 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Merges two sorted ranges.
* @ingroup sorting_algorithms
- * @param first1 An iterator.
- * @param first2 Another iterator.
- * @param last1 Another iterator.
- * @param last2 Another iterator.
- * @param result An iterator pointing to the end of the merged range.
- * @param comp A functor to use for comparisons.
+ * @param __first1 An iterator.
+ * @param __first2 Another iterator.
+ * @param __last1 Another iterator.
+ * @param __last2 Another iterator.
+ * @param __result An iterator pointing to the end of the merged range.
+ * @param __comp A functor to use for comparisons.
* @return An iterator pointing to the first element "not less
- * than" @a val.
+ * than" @e val.
*
- * Merges the ranges [first1,last1) and [first2,last2) into the sorted range
- * [result, result + (last1-first1) + (last2-first2)). Both input ranges
- * must be sorted, and the output range must not overlap with either of
- * the input ranges. The sort is @e stable, that is, for equivalent
- * elements in the two ranges, elements from the first range will always
- * come before elements from the second.
+ * Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
+ * the sorted range @p [__result, __result + (__last1-__first1) +
+ * (__last2-__first2)). Both input ranges must be sorted, and the
+ * output range must not overlap with either of the input ranges.
+ * The sort is @e stable, that is, for equivalent elements in the
+ * two ranges, elements from the first range will always come
+ * before elements from the second.
*
* The comparison function should have the same effects on ordering as
* the function used for the initial sort.
@@ -5576,16 +5647,16 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Sort the elements of a sequence, preserving the relative order
* of equivalent elements.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
+ * @param __first An iterator.
+ * @param __last Another iterator.
* @return Nothing.
*
- * Sorts the elements in the range @p [first,last) in ascending order,
- * such that @p *(i+1)<*i is false for each iterator @p i in the range
- * @p [first,last-1).
+ * Sorts the elements in the range @p [__first,__last) in ascending order,
+ * such that for each iterator @p i in the range @p [__first,__last-1),
+ * @p *(i+1)<*i is false.
*
* The relative ordering of equivalent elements is preserved, so any two
- * elements @p x and @p y in the range @p [first,last) such that
+ * elements @p x and @p y in the range @p [__first,__last) such that
* @p x<y is false and @p y<x is false will have the same relative
* ordering after calling @p stable_sort().
*/
@@ -5617,18 +5688,18 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Sort the elements of a sequence using a predicate for comparison,
* preserving the relative order of equivalent elements.
* @ingroup sorting_algorithms
- * @param first An iterator.
- * @param last Another iterator.
- * @param comp A comparison functor.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __comp A comparison functor.
* @return Nothing.
*
- * Sorts the elements in the range @p [first,last) in ascending order,
- * such that @p comp(*(i+1),*i) is false for each iterator @p i in the
- * range @p [first,last-1).
+ * Sorts the elements in the range @p [__first,__last) in ascending order,
+ * such that for each iterator @p i in the range @p [__first,__last-1),
+ * @p __comp(*(i+1),*i) is false.
*
* The relative ordering of equivalent elements is preserved, so any two
- * elements @p x and @p y in the range @p [first,last) such that
- * @p comp(x,y) is false and @p comp(y,x) is false will have the same
+ * elements @p x and @p y in the range @p [__first,__last) such that
+ * @p __comp(x,y) is false and @p __comp(y,x) is false will have the same
* relative ordering after calling @p stable_sort().
*/
template<typename _RandomAccessIterator, typename _Compare>
@@ -5662,10 +5733,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the union of two sorted ranges.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
* @return End of the output range.
* @ingroup set_algorithms
*
@@ -5728,19 +5799,19 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the union of two sorted ranges using a comparison functor.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
- * @param comp The comparison functor.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
+ * @param __comp The comparison functor.
* @return End of the output range.
* @ingroup set_algorithms
*
* This operation iterates over both ranges, copying elements present in
* each range in order to the output range. Iterators increment for each
* range. When the current element of one range is less than the other
- * according to @a comp, that element is copied and the iterator advanced.
- * If an equivalent element according to @a comp is contained in both
+ * according to @p __comp, that element is copied and the iterator advanced.
+ * If an equivalent element according to @p __comp is contained in both
* ranges, the element from the first range is copied and both ranges
* advance. The output range may not overlap either input range.
*/
@@ -5797,10 +5868,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the intersection of two sorted ranges.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
* @return End of the output range.
* @ingroup set_algorithms
*
@@ -5852,19 +5923,19 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Return the intersection of two sorted ranges using comparison
* functor.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
- * @param comp The comparison functor.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
+ * @param __comp The comparison functor.
* @return End of the output range.
* @ingroup set_algorithms
*
* This operation iterates over both ranges, copying elements present in
* both ranges in order to the output range. Iterators increment for each
* range. When the current element of one range is less than the other
- * according to @a comp, that iterator advances. If an element is
- * contained in both ranges according to @a comp, the element from the
+ * according to @p __comp, that iterator advances. If an element is
+ * contained in both ranges according to @p __comp, the element from the
* first range is copied and both ranges advance. The output range may not
* overlap either input range.
*/
@@ -5910,10 +5981,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the difference of two sorted ranges.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
* @return End of the output range.
* @ingroup set_algorithms
*
@@ -5969,21 +6040,21 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Return the difference of two sorted ranges using comparison
* functor.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
- * @param comp The comparison functor.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
+ * @param __comp The comparison functor.
* @return End of the output range.
* @ingroup set_algorithms
*
* This operation iterates over both ranges, copying elements present in
* the first range but not the second in order to the output range.
* Iterators increment for each range. When the current element of the
- * first range is less than the second according to @a comp, that element
+ * first range is less than the second according to @p __comp, that element
* is copied and the iterator advances. If the current element of the
* second range is less, no element is copied and the iterator advances.
- * If an element is contained in both ranges according to @a comp, no
+ * If an element is contained in both ranges according to @p __comp, no
* elements are copied and both ranges advance. The output range may not
* overlap either input range.
*/
@@ -6031,10 +6102,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the symmetric difference of two sorted ranges.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
* @return End of the output range.
* @ingroup set_algorithms
*
@@ -6095,20 +6166,20 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Return the symmetric difference of two sorted ranges using
* comparison functor.
* @ingroup set_algorithms
- * @param first1 Start of first range.
- * @param last1 End of first range.
- * @param first2 Start of second range.
- * @param last2 End of second range.
- * @param comp The comparison functor.
+ * @param __first1 Start of first range.
+ * @param __last1 End of first range.
+ * @param __first2 Start of second range.
+ * @param __last2 End of second range.
+ * @param __comp The comparison functor.
* @return End of the output range.
* @ingroup set_algorithms
*
* This operation iterates over both ranges, copying elements present in
* one range but not the other in order to the output range. Iterators
* increment for each range. When the current element of one range is less
- * than the other according to @a comp, that element is copied and the
+ * than the other according to @p comp, that element is copied and the
* iterator advances. If an element is contained in both ranges according
- * to @a comp, no elements are copied and both ranges advance. The output
+ * to @p __comp, no elements are copied and both ranges advance. The output
* range may not overlap either input range.
*/
template<typename _InputIterator1, typename _InputIterator2,
@@ -6164,8 +6235,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the minimum element in a range.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return Iterator referencing the first instance of the smallest value.
*/
template<typename _ForwardIterator>
@@ -6190,11 +6261,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the minimum element in a range using comparison functor.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
- * @param comp Comparison functor.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp Comparison functor.
* @return Iterator referencing the first instance of the smallest value
- * according to comp.
+ * according to __comp.
*/
template<typename _ForwardIterator, typename _Compare>
_ForwardIterator
@@ -6220,8 +6291,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the maximum element in a range.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return Iterator referencing the first instance of the largest value.
*/
template<typename _ForwardIterator>
@@ -6246,11 +6317,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return the maximum element in a range using comparison functor.
* @ingroup sorting_algorithms
- * @param first Start of range.
- * @param last End of range.
- * @param comp Comparison functor.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp Comparison functor.
* @return Iterator referencing the first instance of the largest value
- * according to comp.
+ * according to __comp.
*/
template<typename _ForwardIterator, typename _Compare>
_ForwardIterator
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index aecdcb9c6d..5cee10ac01 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -106,8 +106,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Swaps the contents of two iterators.
* @ingroup mutating_algorithms
- * @param a An iterator.
- * @param b Another iterator.
+ * @param __a An iterator.
+ * @param __b Another iterator.
* @return Nothing.
*
* This function swaps the values pointed to by two iterators, not the
@@ -145,9 +145,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Swap the elements of two sequences.
* @ingroup mutating_algorithms
- * @param first1 A forward iterator.
- * @param last1 A forward iterator.
- * @param first2 A forward iterator.
+ * @param __first1 A forward iterator.
+ * @param __last1 A forward iterator.
+ * @param __first2 A forward iterator.
* @return An iterator equal to @p first2+(last1-first1).
*
* Swaps each element in the range @p [first1,last1) with the
@@ -174,8 +174,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief This does what you think it does.
* @ingroup sorting_algorithms
- * @param a A thing of arbitrary type.
- * @param b Another thing of arbitrary type.
+ * @param __a A thing of arbitrary type.
+ * @param __b Another thing of arbitrary type.
* @return The lesser of the parameters.
*
* This is the simple classic generic implementation. It will work on
@@ -197,8 +197,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief This does what you think it does.
* @ingroup sorting_algorithms
- * @param a A thing of arbitrary type.
- * @param b Another thing of arbitrary type.
+ * @param __a A thing of arbitrary type.
+ * @param __b Another thing of arbitrary type.
* @return The greater of the parameters.
*
* This is the simple classic generic implementation. It will work on
@@ -220,9 +220,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief This does what you think it does.
* @ingroup sorting_algorithms
- * @param a A thing of arbitrary type.
- * @param b Another thing of arbitrary type.
- * @param comp A @link comparison_functors comparison functor@endlink.
+ * @param __a A thing of arbitrary type.
+ * @param __b Another thing of arbitrary type.
+ * @param __comp A @link comparison_functors comparison functor@endlink.
* @return The lesser of the parameters.
*
* This will work on temporary expressions, since they are only evaluated
@@ -241,9 +241,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief This does what you think it does.
* @ingroup sorting_algorithms
- * @param a A thing of arbitrary type.
- * @param b Another thing of arbitrary type.
- * @param comp A @link comparison_functors comparison functor@endlink.
+ * @param __a A thing of arbitrary type.
+ * @param __b Another thing of arbitrary type.
+ * @param __comp A @link comparison_functors comparison functor@endlink.
* @return The greater of the parameters.
*
* This will work on temporary expressions, since they are only evaluated
@@ -425,9 +425,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,last) into result.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
* @return result + (first - last)
*
* This inline function will boil down to a call to @c memmove whenever
@@ -458,9 +458,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Moves the range [first,last) into result.
* @ingroup mutating_algorithms
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
* @return result + (first - last)
*
* This inline function will boil down to a call to @c memmove whenever
@@ -593,9 +593,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,last) into result.
* @ingroup mutating_algorithms
- * @param first A bidirectional iterator.
- * @param last A bidirectional iterator.
- * @param result A bidirectional iterator.
+ * @param __first A bidirectional iterator.
+ * @param __last A bidirectional iterator.
+ * @param __result A bidirectional iterator.
* @return result - (first - last)
*
* The function has the same effect as copy, but starts at the end of the
@@ -629,9 +629,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Moves the range [first,last) into result.
* @ingroup mutating_algorithms
- * @param first A bidirectional iterator.
- * @param last A bidirectional iterator.
- * @param result A bidirectional iterator.
+ * @param __first A bidirectional iterator.
+ * @param __last A bidirectional iterator.
+ * @param __result A bidirectional iterator.
* @return result - (first - last)
*
* The function has the same effect as move, but starts at the end of the
@@ -701,9 +701,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Fills the range [first,last) with copies of value.
* @ingroup mutating_algorithms
- * @param first A forward iterator.
- * @param last A forward iterator.
- * @param value A reference-to-const of arbitrary type.
+ * @param __first A forward iterator.
+ * @param __last A forward iterator.
+ * @param __value A reference-to-const of arbitrary type.
* @return Nothing.
*
* This function fills a range with copies of the same value. For char
@@ -758,9 +758,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Fills the range [first,first+n) with copies of value.
* @ingroup mutating_algorithms
- * @param first An output iterator.
- * @param n The count of copies to perform.
- * @param value A reference-to-const of arbitrary type.
+ * @param __first An output iterator.
+ * @param __n The count of copies to perform.
+ * @param __value A reference-to-const of arbitrary type.
* @return The iterator at first+n.
*
* This function fills a range with copies of the same value. For char
@@ -812,7 +812,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
typedef typename iterator_traits<_II1>::value_type _ValueType1;
typedef typename iterator_traits<_II2>::value_type _ValueType2;
- const bool __simple = (__is_integer<_ValueType1>::__value
+ const bool __simple = ((__is_integer<_ValueType1>::__value
+ || __is_pointer<_ValueType1>::__value)
&& __is_pointer<_II1>::__value
&& __is_pointer<_II2>::__value
&& __are_same<_ValueType1, _ValueType2>::__value);
@@ -923,9 +924,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Finds the first position in which @a val could be inserted
* without changing the ordering.
- * @param first An iterator.
- * @param last Another iterator.
- * @param val The search term.
+ * @param __first An iterator.
+ * @param __last Another iterator.
+ * @param __val The search term.
* @return An iterator pointing to the first element <em>not less
* than</em> @a val, or end() if every element is less than
* @a val.
@@ -981,14 +982,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__lg(int __n)
{ return sizeof(int) * __CHAR_BIT__ - 1 - __builtin_clz(__n); }
+ inline unsigned
+ __lg(unsigned __n)
+ { return sizeof(int) * __CHAR_BIT__ - 1 - __builtin_clz(__n); }
+
inline long
__lg(long __n)
{ return sizeof(long) * __CHAR_BIT__ - 1 - __builtin_clzl(__n); }
+ inline unsigned long
+ __lg(unsigned long __n)
+ { return sizeof(long) * __CHAR_BIT__ - 1 - __builtin_clzl(__n); }
+
inline long long
__lg(long long __n)
{ return sizeof(long long) * __CHAR_BIT__ - 1 - __builtin_clzll(__n); }
+ inline unsigned long long
+ __lg(unsigned long long __n)
+ { return sizeof(long long) * __CHAR_BIT__ - 1 - __builtin_clzll(__n); }
+
_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_ALGO
@@ -996,9 +1009,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Tests a range for element-wise equality.
* @ingroup non_mutating_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
* @return A boolean true or false.
*
* This compares the elements of two ranges using @c == and returns true or
@@ -1025,10 +1038,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Tests a range for element-wise equality.
* @ingroup non_mutating_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
- * @param binary_pred A binary predicate @link functors
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
+ * @param __binary_pred A binary predicate @link functors
* functor@endlink.
* @return A boolean true or false.
*
@@ -1056,10 +1069,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Performs @b dictionary comparison on ranges.
* @ingroup sorting_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
- * @param last2 An input iterator.
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
+ * @param __last2 An input iterator.
* @return A boolean true or false.
*
* <em>Returns true if the sequence of elements defined by the range
@@ -1092,11 +1105,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Performs @b dictionary comparison on ranges.
* @ingroup sorting_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
- * @param last2 An input iterator.
- * @param comp A @link comparison_functors comparison functor@endlink.
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
+ * @param __last2 An input iterator.
+ * @param __comp A @link comparison_functors comparison functor@endlink.
* @return A boolean true or false.
*
* The same as the four-parameter @c lexicographical_compare, but uses the
@@ -1132,9 +1145,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Finds the places in ranges which don't match.
* @ingroup non_mutating_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
* @return A pair of iterators pointing to the first mismatch.
*
* This compares the elements of two ranges using @c == and returns a pair
@@ -1166,10 +1179,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Finds the places in ranges which don't match.
* @ingroup non_mutating_algorithms
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
- * @param binary_pred A binary predicate @link functors
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
+ * @param __binary_pred A binary predicate @link functors
* functor@endlink.
* @return A pair of iterators pointing to the first mismatch.
*
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index b2f221f3ec..bec63ff03f 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -57,7 +57,9 @@
#ifndef _STL_BVECTOR_H
#define _STL_BVECTOR_H 1
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -74,13 +76,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Bit_reference(_Bit_type * __x, _Bit_type __y)
: _M_p(__x), _M_mask(__y) { }
- _Bit_reference() : _M_p(0), _M_mask(0) { }
+ _Bit_reference() _GLIBCXX_NOEXCEPT : _M_p(0), _M_mask(0) { }
- operator bool() const
+ operator bool() const _GLIBCXX_NOEXCEPT
{ return !!(*_M_p & _M_mask); }
_Bit_reference&
- operator=(bool __x)
+ operator=(bool __x) _GLIBCXX_NOEXCEPT
{
if (__x)
*_M_p |= _M_mask;
@@ -90,7 +92,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
_Bit_reference&
- operator=(const _Bit_reference& __x)
+ operator=(const _Bit_reference& __x) _GLIBCXX_NOEXCEPT
{ return *this = bool(__x); }
bool
@@ -102,7 +104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return !bool(*this) && bool(__x); }
void
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{ *_M_p ^= _M_mask; }
};
@@ -392,21 +394,28 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Bvector_impl(const _Bit_alloc_type& __a)
: _Bit_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage(0)
{ }
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _Bvector_impl(_Bit_alloc_type&& __a)
+ : _Bit_alloc_type(std::move(__a)), _M_start(), _M_finish(),
+ _M_end_of_storage(0)
+ { }
+#endif
};
public:
typedef _Alloc allocator_type;
_Bit_alloc_type&
- _M_get_Bit_allocator()
+ _M_get_Bit_allocator() _GLIBCXX_NOEXCEPT
{ return *static_cast<_Bit_alloc_type*>(&this->_M_impl); }
const _Bit_alloc_type&
- _M_get_Bit_allocator() const
+ _M_get_Bit_allocator() const _GLIBCXX_NOEXCEPT
{ return *static_cast<const _Bit_alloc_type*>(&this->_M_impl); }
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return allocator_type(_M_get_Bit_allocator()); }
_Bvector_base()
@@ -416,8 +425,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
: _M_impl(__a) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- _Bvector_base(_Bvector_base&& __x)
- : _M_impl(__x._M_get_Bit_allocator())
+ _Bvector_base(_Bvector_base&& __x) noexcept
+ : _M_impl(std::move(__x._M_get_Bit_allocator()))
{
this->_M_impl._M_start = __x._M_impl._M_start;
this->_M_impl._M_finish = __x._M_impl._M_finish;
@@ -436,8 +445,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Bit_type*
_M_allocate(size_t __n)
- { return _M_impl.allocate((__n + int(_S_word_bit) - 1)
- / int(_S_word_bit)); }
+ { return _M_impl.allocate(_S_nword(__n)); }
void
_M_deallocate()
@@ -446,6 +454,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_impl.deallocate(_M_impl._M_start._M_p,
_M_impl._M_end_of_storage - _M_impl._M_start._M_p);
}
+
+ static size_t
+ _S_nword(size_t __n)
+ { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); }
};
_GLIBCXX_END_NAMESPACE_CONTAINER
@@ -504,6 +516,7 @@ template<typename _Alloc>
protected:
using _Base::_M_allocate;
using _Base::_M_deallocate;
+ using _Base::_S_nword;
using _Base::_M_get_Bit_allocator;
public:
@@ -532,7 +545,7 @@ template<typename _Alloc>
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- vector(vector&& __x)
+ vector(vector&& __x) noexcept
: _Base(std::move(__x)) { }
vector(initializer_list<bool> __l,
@@ -553,7 +566,7 @@ template<typename _Alloc>
_M_initialize_dispatch(__first, __last, _Integral());
}
- ~vector() { }
+ ~vector() _GLIBCXX_NOEXCEPT { }
vector&
operator=(const vector& __x)
@@ -612,61 +625,61 @@ template<typename _Alloc>
#endif
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_start; }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_start; }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_finish; }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_finish; }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return this->_M_impl._M_start; }
const_iterator
- cend() const
+ cend() const noexcept
{ return this->_M_impl._M_finish; }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return size_type(end() - begin()); }
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{
const size_type __isize =
__gnu_cxx::__numeric_traits<difference_type>::__max
@@ -677,12 +690,12 @@ template<typename _Alloc>
}
size_type
- capacity() const
+ capacity() const _GLIBCXX_NOEXCEPT
{ return size_type(const_iterator(this->_M_impl._M_end_of_storage, 0)
- begin()); }
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return begin() == end(); }
reference
@@ -717,7 +730,13 @@ template<typename _Alloc>
{ _M_range_check(__n); return (*this)[__n]; }
void
- reserve(size_type __n);
+ reserve(size_type __n)
+ {
+ if (__n > max_size())
+ __throw_length_error(__N("vector::reserve"));
+ if (capacity() < __n)
+ _M_reallocate(__n);
+ }
reference
front()
@@ -741,7 +760,7 @@ template<typename _Alloc>
// here due to the way we are implementing DR 464 in the debug-mode
// vector class.
void
- data() { }
+ data() _GLIBCXX_NOEXCEPT { }
void
push_back(bool __x)
@@ -768,7 +787,7 @@ template<typename _Alloc>
// [23.2.5]/1, third-to-last entry in synopsis listing
static void
- swap(reference __x, reference __y)
+ swap(reference __x, reference __y) _GLIBCXX_NOEXCEPT
{
bool __tmp = __x;
__x = __y;
@@ -838,11 +857,11 @@ template<typename _Alloc>
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void
shrink_to_fit()
- { std::__shrink_to_fit<vector>::_S_do_it(*this); }
+ { _M_shrink_to_fit(); }
#endif
void
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
for (_Bit_type * __p = this->_M_impl._M_start._M_p;
__p != this->_M_impl._M_end_of_storage; ++__p)
@@ -850,7 +869,7 @@ template<typename _Alloc>
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_erase_at_end(begin()); }
@@ -869,13 +888,19 @@ template<typename _Alloc>
_M_initialize(size_type __n)
{
_Bit_type* __q = this->_M_allocate(__n);
- this->_M_impl._M_end_of_storage = (__q
- + ((__n + int(_S_word_bit) - 1)
- / int(_S_word_bit)));
+ this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
this->_M_impl._M_start = iterator(__q, 0);
this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n);
}
+ void
+ _M_reallocate(size_type __n);
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ bool
+ _M_shrink_to_fit();
+#endif
+
// Check whether it's an integral type. If so, it's not an iterator.
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -1050,7 +1075,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, _GLIBCXX_STD_C::vector<bool, _Alloc>>
{
size_t
- operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>& __b) const;
+ operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>&) const noexcept;
};
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h
index 2efba9378b..8aaaab8057 100644
--- a/libstdc++-v3/include/bits/stl_construct.h
+++ b/libstdc++-v3/include/bits/stl_construct.h
@@ -1,7 +1,7 @@
// nonstandard construct and destroy functions -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-// 2009, 2010
+// 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -60,6 +60,7 @@
#include <new>
#include <bits/move.h>
+#include <ext/alloc_traits.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -141,8 +142,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Destroy(_ForwardIterator __first, _ForwardIterator __last,
_Allocator& __alloc)
{
+ typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __first != __last; ++__first)
- __alloc.destroy(std::__addressof(*__first));
+ __traits::destroy(__alloc, std::__addressof(*__first));
}
template<typename _ForwardIterator, typename _Tp>
diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h
index 0d9b5b44cb..b924917935 100644
--- a/libstdc++-v3/include/bits/stl_deque.h
+++ b/libstdc++-v3/include/bits/stl_deque.h
@@ -60,7 +60,9 @@
#include <bits/concept_check.h>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_iterator_base_funcs.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -68,7 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief This function controls the size of memory nodes.
- * @param size The size of an element.
+ * @param __size The size of an element.
* @return The number (not byte size) of elements per node.
*
* This function started off as a compiler kludge from SGI, but
@@ -441,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef _Alloc allocator_type;
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return allocator_type(_M_get_Tp_allocator()); }
typedef _Deque_iterator<_Tp, _Tp&, _Tp*> iterator;
@@ -465,7 +467,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
_Deque_base(_Deque_base&& __x)
- : _M_impl(__x._M_get_Tp_allocator())
+ : _M_impl(std::move(__x._M_get_Tp_allocator()))
{
_M_initialize_map(0);
if (__x._M_impl._M_map)
@@ -505,18 +507,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
: _Tp_alloc_type(__a), _M_map(0), _M_map_size(0),
_M_start(), _M_finish()
{ }
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _Deque_impl(_Tp_alloc_type&& __a)
+ : _Tp_alloc_type(std::move(__a)), _M_map(0), _M_map_size(0),
+ _M_start(), _M_finish()
+ { }
+#endif
};
_Tp_alloc_type&
- _M_get_Tp_allocator()
+ _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
{ return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
const _Tp_alloc_type&
- _M_get_Tp_allocator() const
+ _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
{ return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
_Map_alloc_type
- _M_get_map_allocator() const
+ _M_get_map_allocator() const _GLIBCXX_NOEXCEPT
{ return _Map_alloc_type(_M_get_Tp_allocator()); }
_Tp*
@@ -562,7 +571,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Layout storage.
- * @param num_elements The count of T's for which to allocate space
+ * @param __num_elements The count of T's for which to allocate space
* at first.
* @return Nothing.
*
@@ -657,7 +666,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* - iterator _M_start, _M_finish
*
* map_size is at least 8. %map is an array of map_size
- * pointers-to-@anodes. (The name %map has nothing to do with the
+ * pointers-to-@a nodes. (The name %map has nothing to do with the
* std::map class, and @b nodes should not be confused with
* std::list's usage of @a node.)
*
@@ -773,7 +782,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %deque with no elements.
- * @param a An allocator object.
+ * @param __a An allocator object.
*/
explicit
deque(const allocator_type& __a)
@@ -782,7 +791,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Creates a %deque with default constructed elements.
- * @param n The number of elements to initially create.
+ * @param __n The number of elements to initially create.
*
* This constructor fills the %deque with @a n default
* constructed elements.
@@ -794,11 +803,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %deque with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param a An allocator.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __a An allocator.
*
- * This constructor fills the %deque with @a n copies of @a value.
+ * This constructor fills the %deque with @a __n copies of @a __value.
*/
deque(size_type __n, const value_type& __value,
const allocator_type& __a = allocator_type())
@@ -807,11 +816,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Creates a %deque with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param a An allocator.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __a An allocator.
*
- * This constructor fills the %deque with @a n copies of @a value.
+ * This constructor fills the %deque with @a __n copies of @a __value.
*/
explicit
deque(size_type __n, const value_type& __value = value_type(),
@@ -822,10 +831,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Deque copy constructor.
- * @param x A %deque of identical element and allocator types.
+ * @param __x A %deque of identical element and allocator types.
*
* The newly-created %deque uses a copy of the allocation object used
- * by @a x.
+ * by @a __x.
*/
deque(const deque& __x)
: _Base(__x._M_get_Tp_allocator(), __x.size())
@@ -836,24 +845,24 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Deque move constructor.
- * @param x A %deque of identical element and allocator types.
+ * @param __x A %deque of identical element and allocator types.
*
- * The newly-created %deque contains the exact contents of @a x.
- * The contents of @a x are a valid, but unspecified %deque.
+ * The newly-created %deque contains the exact contents of @a __x.
+ * The contents of @a __x are a valid, but unspecified %deque.
*/
deque(deque&& __x)
: _Base(std::move(__x)) { }
/**
* @brief Builds a %deque from an initializer list.
- * @param l An initializer_list.
- * @param a An allocator object.
+ * @param __l An initializer_list.
+ * @param __a An allocator object.
*
* Create a %deque consisting of copies of the elements in the
- * initializer_list @a l.
+ * initializer_list @a __l.
*
* This will call the element type's copy constructor N times
- * (where N is l.size()) and do no memory reallocation.
+ * (where N is __l.size()) and do no memory reallocation.
*/
deque(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
@@ -866,16 +875,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Builds a %deque from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param a An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __a An allocator object.
*
- * Create a %deque consisting of copies of the elements from [first,
- * last).
+ * Create a %deque consisting of copies of the elements from [__first,
+ * __last).
*
* If the iterators are forward, bidirectional, or random-access, then
* this will call the elements' copy constructor N times (where N is
- * distance(first,last)) and do no memory reallocation. But if only
+ * distance(__first,__last)) and do no memory reallocation. But if only
* input iterators are used, then this will do at most 2N calls to the
* copy constructor, and logN memory reallocations.
*/
@@ -894,12 +903,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* themselves are pointers, the pointed-to memory is not touched in any
* way. Managing the pointer is the user's responsibility.
*/
- ~deque()
+ ~deque() _GLIBCXX_NOEXCEPT
{ _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); }
/**
* @brief %Deque assignment operator.
- * @param x A %deque of identical element and allocator types.
+ * @param __x A %deque of identical element and allocator types.
*
* All the elements of @a x are copied, but unlike the copy constructor,
* the allocator object is not copied.
@@ -910,10 +919,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Deque move assignment operator.
- * @param x A %deque of identical element and allocator types.
+ * @param __x A %deque of identical element and allocator types.
*
- * The contents of @a x are moved into this deque (without copying).
- * @a x is a valid, but unspecified %deque.
+ * The contents of @a __x are moved into this deque (without copying).
+ * @a __x is a valid, but unspecified %deque.
*/
deque&
operator=(deque&& __x)
@@ -927,10 +936,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns an initializer list to a %deque.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %deque with copies of the elements in the
- * initializer_list @a l.
+ * initializer_list @a __l.
*
* Note that the assignment completely changes the %deque and that the
* resulting %deque's size is the same as the number of elements
@@ -946,8 +955,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a given value to a %deque.
- * @param n Number of elements to be assigned.
- * @param val Value to be assigned.
+ * @param __n Number of elements to be assigned.
+ * @param __val Value to be assigned.
*
* This function fills a %deque with @a n copies of the given
* value. Note that the assignment completely changes the
@@ -960,11 +969,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a range to a %deque.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function fills a %deque with copies of the elements in the
- * range [first,last).
+ * range [__first,__last).
*
* Note that the assignment completely changes the %deque and that the
* resulting %deque's size is the same as the number of elements
@@ -981,10 +990,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Assigns an initializer list to a %deque.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %deque with copies of the elements in the
- * initializer_list @a l.
+ * initializer_list @a __l.
*
* Note that the assignment completely changes the %deque and that the
* resulting %deque's size is the same as the number of elements
@@ -997,7 +1006,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Get a copy of the memory allocation object.
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return _Base::get_allocator(); }
// iterators
@@ -1006,7 +1015,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* %deque. Iteration is done in ordinary element order.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_start; }
/**
@@ -1014,7 +1023,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element in the %deque. Iteration is done in ordinary element order.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_start; }
/**
@@ -1023,7 +1032,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_finish; }
/**
@@ -1032,7 +1041,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* ordinary element order.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_finish; }
/**
@@ -1041,7 +1050,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(this->_M_impl._M_finish); }
/**
@@ -1050,7 +1059,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* reverse element order.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(this->_M_impl._M_finish); }
/**
@@ -1059,7 +1068,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* in reverse element order.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(this->_M_impl._M_start); }
/**
@@ -1068,7 +1077,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* done in reverse element order.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(this->_M_impl._M_start); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -1077,7 +1086,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element in the %deque. Iteration is done in ordinary element order.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return this->_M_impl._M_start; }
/**
@@ -1086,7 +1095,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* ordinary element order.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return this->_M_impl._M_finish; }
/**
@@ -1095,7 +1104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* reverse element order.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(this->_M_impl._M_finish); }
/**
@@ -1104,25 +1113,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* done in reverse element order.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(this->_M_impl._M_start); }
#endif
// [23.2.1.2] capacity
/** Returns the number of elements in the %deque. */
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_finish - this->_M_impl._M_start; }
/** Returns the size() of the largest possible %deque. */
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_get_Tp_allocator().max_size(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Resizes the %deque to the specified number of elements.
- * @param new_size Number of elements the %deque should contain.
+ * @param __new_size Number of elements the %deque should contain.
*
* This function will %resize the %deque to the specified
* number of elements. If the number is smaller than the
@@ -1142,8 +1151,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Resizes the %deque to the specified number of elements.
- * @param new_size Number of elements the %deque should contain.
- * @param x Data with which new elements should be populated.
+ * @param __new_size Number of elements the %deque should contain.
+ * @param __x Data with which new elements should be populated.
*
* This function will %resize the %deque to the specified
* number of elements. If the number is smaller than the
@@ -1164,8 +1173,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Resizes the %deque to the specified number of elements.
- * @param new_size Number of elements the %deque should contain.
- * @param x Data with which new elements should be populated.
+ * @param __new_size Number of elements the %deque should contain.
+ * @param __x Data with which new elements should be populated.
*
* This function will %resize the %deque to the specified
* number of elements. If the number is smaller than the
@@ -1189,7 +1198,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/** A non-binding request to reduce memory use. */
void
shrink_to_fit()
- { std::__shrink_to_fit<deque>::_S_do_it(*this); }
+ { _M_shrink_to_fit(); }
#endif
/**
@@ -1197,13 +1206,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* equal end().)
*/
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_finish == this->_M_impl._M_start; }
// element access
/**
* @brief Subscript access to the data contained in the %deque.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read/write reference to data.
*
@@ -1218,7 +1227,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Subscript access to the data contained in the %deque.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read-only (constant) reference to data.
*
@@ -1243,10 +1252,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
public:
/**
* @brief Provides access to the data contained in the %deque.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read/write reference to data.
- * @throw std::out_of_range If @a n is an invalid index.
+ * @throw std::out_of_range If @a __n is an invalid index.
*
* This function provides for safer data access. The parameter
* is first checked that it is in the range of the deque. The
@@ -1261,10 +1270,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Provides access to the data contained in the %deque.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read-only (constant) reference to data.
- * @throw std::out_of_range If @a n is an invalid index.
+ * @throw std::out_of_range If @a __n is an invalid index.
*
* This function provides for safer data access. The parameter is first
* checked that it is in the range of the deque. The function throws
@@ -1320,7 +1329,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// [23.2.1.2] modifiers
/**
* @brief Add data to the front of the %deque.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical stack operation. The function creates an
* element at the front of the %deque and assigns the given
@@ -1351,7 +1360,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Add data to the end of the %deque.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical stack operation. The function creates an
* element at the end of the %deque and assigns the given data
@@ -1426,8 +1435,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Inserts an object in %deque before specified iterator.
- * @param position An iterator into the %deque.
- * @param args Arguments.
+ * @param __position An iterator into the %deque.
+ * @param __args Arguments.
* @return An iterator that points to the inserted data.
*
* This function will insert an object of type T constructed
@@ -1440,8 +1449,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts given value into %deque before specified iterator.
- * @param position An iterator into the %deque.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %deque.
+ * @param __x Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given value before the
@@ -1453,8 +1462,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Inserts given rvalue into %deque before specified iterator.
- * @param position An iterator into the %deque.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %deque.
+ * @param __x Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given rvalue before the
@@ -1466,12 +1475,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts an initializer list into the %deque.
- * @param p An iterator into the %deque.
- * @param l An initializer_list.
+ * @param __p An iterator into the %deque.
+ * @param __l An initializer_list.
*
* This function will insert copies of the data in the
- * initializer_list @a l into the %deque before the location
- * specified by @a p. This is known as <em>list insert</em>.
+ * initializer_list @a __l into the %deque before the location
+ * specified by @a __p. This is known as <em>list insert</em>.
*/
void
insert(iterator __p, initializer_list<value_type> __l)
@@ -1480,12 +1489,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a number of copies of given data into the %deque.
- * @param position An iterator into the %deque.
- * @param n Number of elements to be inserted.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %deque.
+ * @param __n Number of elements to be inserted.
+ * @param __x Data to be inserted.
*
* This function will insert a specified number of copies of the given
- * data before the location specified by @a position.
+ * data before the location specified by @a __position.
*/
void
insert(iterator __position, size_type __n, const value_type& __x)
@@ -1493,13 +1502,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a range into the %deque.
- * @param position An iterator into the %deque.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __position An iterator into the %deque.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function will insert copies of the data in the range
- * [first,last) into the %deque before the location specified
- * by @a pos. This is known as <em>range insert</em>.
+ * [__first,__last) into the %deque before the location specified
+ * by @a __position. This is known as <em>range insert</em>.
*/
template<typename _InputIterator>
void
@@ -1513,7 +1522,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove element at given position.
- * @param position Iterator pointing to element to be erased.
+ * @param __position Iterator pointing to element to be erased.
* @return An iterator pointing to the next element (or end()).
*
* This function will erase the element at the given position and thus
@@ -1529,14 +1538,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove a range of elements.
- * @param first Iterator pointing to the first element to be erased.
- * @param last Iterator pointing to one past the last element to be
+ * @param __first Iterator pointing to the first element to be erased.
+ * @param __last Iterator pointing to one past the last element to be
* erased.
* @return An iterator pointing to the element pointed to by @a last
* prior to erasing (or end()).
*
- * This function will erase the elements in the range [first,last) and
- * shorten the %deque accordingly.
+ * This function will erase the elements in the range
+ * [__first,__last) and shorten the %deque accordingly.
*
* The user is cautioned that
* this function only erases the elements, and that if the elements
@@ -1548,7 +1557,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Swaps data with another %deque.
- * @param x A %deque of the same element and allocator types.
+ * @param __x A %deque of the same element and allocator types.
*
* This exchanges the elements between two deques in constant time.
* (Four pointers, so it should be quite fast.)
@@ -1576,7 +1585,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_erase_at_end(begin()); }
protected:
@@ -1609,8 +1618,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Fills the deque with whatever is in [first,last).
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
* @return Nothing.
*
* If the iterators are actually forward iterators (or better), then the
@@ -1631,7 +1640,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Fills the %deque with copies of value.
- * @param value Initial value.
+ * @param __value Initial value.
* @return Nothing.
* @pre _M_start and _M_finish have already been initialized,
* but none of the %deque's elements have yet been constructed.
@@ -1840,6 +1849,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// Called by resize(sz).
void
_M_default_append(size_type __n);
+
+ bool
+ _M_shrink_to_fit();
#endif
//@{
@@ -1904,8 +1916,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Deque equality comparison.
- * @param x A %deque.
- * @param y A %deque of the same type as @a x.
+ * @param __x A %deque.
+ * @param __y A %deque of the same type as @a __x.
* @return True iff the size and elements of the deques are equal.
*
* This is an equivalence relation. It is linear in the size of the
@@ -1921,9 +1933,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Deque ordering relation.
- * @param x A %deque.
- * @param y A %deque of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %deque.
+ * @param __y A %deque of the same type as @a __x.
+ * @return True iff @a x is lexicographically less than @a __y.
*
* This is a total ordering relation. It is linear in the size of the
* deques. The elements must be comparable with @c <.
diff --git a/libstdc++-v3/include/bits/stl_function.h b/libstdc++-v3/include/bits/stl_function.h
index 88655fc55c..33d5e70962 100644
--- a/libstdc++-v3/include/bits/stl_function.h
+++ b/libstdc++-v3/include/bits/stl_function.h
@@ -1,6 +1,7 @@
// Functor implementations -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+// 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -471,7 +472,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/** @} */
template<typename _Tp>
- struct _Identity : public unary_function<_Tp,_Tp>
+ struct _Identity
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+ // unary_function itself is deprecated in C++11 and deriving from
+ // it can even be a nuisance (see PR 52942).
+ : public unary_function<_Tp,_Tp>
+#endif
{
_Tp&
operator()(_Tp& __x) const
@@ -483,8 +489,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
template<typename _Pair>
- struct _Select1st : public unary_function<_Pair,
- typename _Pair::first_type>
+ struct _Select1st
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+ : public unary_function<_Pair, typename _Pair::first_type>
+#endif
{
typename _Pair::first_type&
operator()(_Pair& __x) const
@@ -508,8 +516,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
template<typename _Pair>
- struct _Select2nd : public unary_function<_Pair,
- typename _Pair::second_type>
+ struct _Select2nd
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+ : public unary_function<_Pair, typename _Pair::second_type>
+#endif
{
typename _Pair::second_type&
operator()(_Pair& __x) const
diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h
index b00fc69fcb..f185610d9e 100644
--- a/libstdc++-v3/include/bits/stl_heap.h
+++ b/libstdc++-v3/include/bits/stl_heap.h
@@ -1,7 +1,7 @@
// Heap implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+// 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -144,12 +144,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Push an element onto a heap.
- * @param first Start of heap.
- * @param last End of heap + element.
+ * @param __first Start of heap.
+ * @param __last End of heap + element.
* @ingroup heap_algorithms
*
- * This operation pushes the element at last-1 onto the valid heap over the
- * range [first,last-1). After completion, [first,last) is a valid heap.
+ * This operation pushes the element at last-1 onto the valid heap
+ * over the range [__first,__last-1). After completion,
+ * [__first,__last) is a valid heap.
*/
template<typename _RandomAccessIterator>
inline void
@@ -191,14 +192,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Push an element onto a heap using comparison functor.
- * @param first Start of heap.
- * @param last End of heap + element.
- * @param comp Comparison functor.
+ * @param __first Start of heap.
+ * @param __last End of heap + element.
+ * @param __comp Comparison functor.
* @ingroup heap_algorithms
*
- * This operation pushes the element at last-1 onto the valid heap over the
- * range [first,last-1). After completion, [first,last) is a valid heap.
- * Compare operations are performed using comp.
+ * This operation pushes the element at __last-1 onto the valid
+ * heap over the range [__first,__last-1). After completion,
+ * [__first,__last) is a valid heap. Compare operations are
+ * performed using comp.
*/
template<typename _RandomAccessIterator, typename _Compare>
inline void
@@ -266,12 +268,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Pop an element off a heap.
- * @param first Start of heap.
- * @param last End of heap.
+ * @param __first Start of heap.
+ * @param __last End of heap.
+ * @pre [__first, __last) is a valid, non-empty range.
* @ingroup heap_algorithms
*
- * This operation pops the top of the heap. The elements first and last-1
- * are swapped and [first,last-1) is made into a heap.
+ * This operation pops the top of the heap. The elements __first
+ * and __last-1 are swapped and [__first,__last-1) is made into a
+ * heap.
*/
template<typename _RandomAccessIterator>
inline void
@@ -284,6 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
_RandomAccessIterator>)
__glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
+ __glibcxx_requires_non_empty_range(__first, __last);
__glibcxx_requires_valid_range(__first, __last);
__glibcxx_requires_heap(__first, __last);
@@ -338,14 +343,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Pop an element off a heap using comparison functor.
- * @param first Start of heap.
- * @param last End of heap.
- * @param comp Comparison functor to use.
+ * @param __first Start of heap.
+ * @param __last End of heap.
+ * @param __comp Comparison functor to use.
* @ingroup heap_algorithms
*
- * This operation pops the top of the heap. The elements first and last-1
- * are swapped and [first,last-1) is made into a heap. Comparisons are
- * made using comp.
+ * This operation pops the top of the heap. The elements __first
+ * and __last-1 are swapped and [__first,__last-1) is made into a
+ * heap. Comparisons are made using comp.
*/
template<typename _RandomAccessIterator, typename _Compare>
inline void
@@ -356,6 +361,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
_RandomAccessIterator>)
__glibcxx_requires_valid_range(__first, __last);
+ __glibcxx_requires_non_empty_range(__first, __last);
__glibcxx_requires_heap_pred(__first, __last, __comp);
--__last;
@@ -364,11 +370,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Construct a heap over a range.
- * @param first Start of heap.
- * @param last End of heap.
+ * @param __first Start of heap.
+ * @param __last End of heap.
* @ingroup heap_algorithms
*
- * This operation makes the elements in [first,last) into a heap.
+ * This operation makes the elements in [__first,__last) into a heap.
*/
template<typename _RandomAccessIterator>
void
@@ -402,13 +408,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Construct a heap over a range using comparison functor.
- * @param first Start of heap.
- * @param last End of heap.
- * @param comp Comparison functor to use.
+ * @param __first Start of heap.
+ * @param __last End of heap.
+ * @param __comp Comparison functor to use.
* @ingroup heap_algorithms
*
- * This operation makes the elements in [first,last) into a heap.
- * Comparisons are made using comp.
+ * This operation makes the elements in [__first,__last) into a heap.
+ * Comparisons are made using __comp.
*/
template<typename _RandomAccessIterator, typename _Compare>
void
@@ -443,11 +449,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Sort a heap.
- * @param first Start of heap.
- * @param last End of heap.
+ * @param __first Start of heap.
+ * @param __last End of heap.
* @ingroup heap_algorithms
*
- * This operation sorts the valid heap in the range [first,last).
+ * This operation sorts the valid heap in the range [__first,__last).
*/
template<typename _RandomAccessIterator>
void
@@ -470,13 +476,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Sort a heap using comparison functor.
- * @param first Start of heap.
- * @param last End of heap.
- * @param comp Comparison functor to use.
+ * @param __first Start of heap.
+ * @param __last End of heap.
+ * @param __comp Comparison functor to use.
* @ingroup heap_algorithms
*
- * This operation sorts the valid heap in the range [first,last).
- * Comparisons are made using comp.
+ * This operation sorts the valid heap in the range [__first,__last).
+ * Comparisons are made using __comp.
*/
template<typename _RandomAccessIterator, typename _Compare>
void
@@ -499,13 +505,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Search the end of a heap.
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return An iterator pointing to the first element not in the heap.
* @ingroup heap_algorithms
*
- * This operation returns the last iterator i in [first, last) for which
- * the range [first, i) is a heap.
+ * This operation returns the last iterator i in [__first, __last) for which
+ * the range [__first, i) is a heap.
*/
template<typename _RandomAccessIterator>
inline _RandomAccessIterator
@@ -524,14 +530,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Search the end of a heap using comparison functor.
- * @param first Start of range.
- * @param last End of range.
- * @param comp Comparison functor to use.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp Comparison functor to use.
* @return An iterator pointing to the first element not in the heap.
* @ingroup heap_algorithms
*
- * This operation returns the last iterator i in [first, last) for which
- * the range [first, i) is a heap. Comparisons are made using comp.
+ * This operation returns the last iterator i in [__first, __last) for which
+ * the range [__first, i) is a heap. Comparisons are made using __comp.
*/
template<typename _RandomAccessIterator, typename _Compare>
inline _RandomAccessIterator
@@ -550,8 +556,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines whether a range is a heap.
- * @param first Start of range.
- * @param last End of range.
+ * @param __first Start of range.
+ * @param __last End of range.
* @return True if range is a heap, false otherwise.
* @ingroup heap_algorithms
*/
@@ -562,9 +568,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Determines whether a range is a heap using comparison functor.
- * @param first Start of range.
- * @param last End of range.
- * @param comp Comparison functor to use.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __comp Comparison functor to use.
* @return True if range is a heap, false otherwise.
* @ingroup heap_algorithms
*/
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index b23107d357..100d30e300 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -1,6 +1,7 @@
// Iterators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -113,7 +114,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename __traits_type::reference reference;
/**
- * The default constructor default-initializes member @p current.
+ * The default constructor value-initializes member @p current.
* If it is a pointer, that means it is zero-initialized.
*/
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -133,8 +134,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: current(__x.current) { }
/**
- * A reverse_iterator across other types can be copied in the normal
- * fashion.
+ * A %reverse_iterator across other types can be copied if the
+ * underlying %iterator can be converted to the type of @c current.
*/
template<typename _Iter>
reverse_iterator(const reverse_iterator<_Iter>& __x)
@@ -148,9 +149,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return current; }
/**
- * @return TODO
+ * @return A reference to the value at @c --current
*
- * @doctodo
+ * This requires that @c --current is dereferenceable.
+ *
+ * @warning This implementation requires that for an iterator of the
+ * underlying iterator type, @c x, a reference obtained by
+ * @c *x remains valid after @c x has been modified or
+ * destroyed. This is a bug: http://gcc.gnu.org/PR51823
*/
reference
operator*() const
@@ -160,18 +166,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return A pointer to the value at @c --current
*
- * @doctodo
+ * This requires that @c --current is dereferenceable.
*/
pointer
operator->() const
{ return &(operator*()); }
/**
- * @return TODO
+ * @return @c *this
*
- * @doctodo
+ * Decrements the underlying iterator.
*/
reverse_iterator&
operator++()
@@ -181,9 +187,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return The original value of @c *this
*
- * @doctodo
+ * Decrements the underlying iterator.
*/
reverse_iterator
operator++(int)
@@ -194,9 +200,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return @c *this
*
- * @doctodo
+ * Increments the underlying iterator.
*/
reverse_iterator&
operator--()
@@ -206,9 +212,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return A reverse_iterator with the previous value of @c *this
*
- * @doctodo
+ * Increments the underlying iterator.
*/
reverse_iterator
operator--(int)
@@ -219,18 +225,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return A reverse_iterator that refers to @c current - @a __n
*
- * @doctodo
+ * The underlying iterator must be a Random Access Iterator.
*/
reverse_iterator
operator+(difference_type __n) const
{ return reverse_iterator(current - __n); }
/**
- * @return TODO
+ * @return *this
*
- * @doctodo
+ * Moves the underlying iterator backwards @a __n steps.
+ * The underlying iterator must be a Random Access Iterator.
*/
reverse_iterator&
operator+=(difference_type __n)
@@ -240,18 +247,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return A reverse_iterator that refers to @c current - @a __n
*
- * @doctodo
+ * The underlying iterator must be a Random Access Iterator.
*/
reverse_iterator
operator-(difference_type __n) const
{ return reverse_iterator(current + __n); }
/**
- * @return TODO
+ * @return *this
*
- * @doctodo
+ * Moves the underlying iterator forwards @a __n steps.
+ * The underlying iterator must be a Random Access Iterator.
*/
reverse_iterator&
operator-=(difference_type __n)
@@ -261,9 +269,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @return TODO
+ * @return The value at @c current - @a __n - 1
*
- * @doctodo
+ * The underlying iterator must be a Random Access Iterator.
*/
reference
operator[](difference_type __n) const
@@ -272,8 +280,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
//@{
/**
- * @param x A %reverse_iterator.
- * @param y A %reverse_iterator.
+ * @param __x A %reverse_iterator.
+ * @param __y A %reverse_iterator.
* @return A simple bool.
*
* Reverse iterators forward many operations to their underlying base()
@@ -408,7 +416,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
back_insert_iterator(_Container& __x) : container(&__x) { }
/**
- * @param value An instance of whatever type
+ * @param __value An instance of whatever type
* container_type::const_reference is; presumably a
* reference-to-const T for container<T>.
* @return This %iterator, for chained operations.
@@ -458,8 +466,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/**
- * @param x A container of arbitrary type.
- * @return An instance of back_insert_iterator working on @p x.
+ * @param __x A container of arbitrary type.
+ * @return An instance of back_insert_iterator working on @p __x.
*
* This wrapper function helps in creating back_insert_iterator instances.
* Typing the name of the %iterator requires knowing the precise full
@@ -498,7 +506,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit front_insert_iterator(_Container& __x) : container(&__x) { }
/**
- * @param value An instance of whatever type
+ * @param __value An instance of whatever type
* container_type::const_reference is; presumably a
* reference-to-const T for container<T>.
* @return This %iterator, for chained operations.
@@ -548,7 +556,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/**
- * @param x A container of arbitrary type.
+ * @param __x A container of arbitrary type.
* @return An instance of front_insert_iterator working on @p x.
*
* This wrapper function helps in creating front_insert_iterator instances.
@@ -597,7 +605,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: container(&__x), iter(__i) {}
/**
- * @param value An instance of whatever type
+ * @param __value An instance of whatever type
* container_type::const_reference is; presumably a
* reference-to-const T for container<T>.
* @return This %iterator, for chained operations.
@@ -662,8 +670,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/**
- * @param x A container of arbitrary type.
- * @return An instance of insert_iterator working on @p x.
+ * @param __x A container of arbitrary type.
+ * @return An instance of insert_iterator working on @p __x.
*
* This wrapper function helps in creating insert_iterator instances.
* Typing the name of the %iterator requires knowing the precise full
@@ -1115,17 +1123,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Iterator>
inline move_iterator<_Iterator>
- make_move_iterator(const _Iterator& __i)
+ make_move_iterator(_Iterator __i)
{ return move_iterator<_Iterator>(__i); }
+ template<typename _Iterator, typename _ReturnType
+ = typename conditional<__move_if_noexcept_cond
+ <typename iterator_traits<_Iterator>::value_type>::value,
+ _Iterator, move_iterator<_Iterator>>::type>
+ inline _ReturnType
+ __make_move_if_noexcept_iterator(_Iterator __i)
+ { return _ReturnType(__i); }
+
// @} group iterators
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
+#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \
+ std::__make_move_if_noexcept_iterator(_Iter)
#else
#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter)
+#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter)
#endif // __GXX_EXPERIMENTAL_CXX0X__
#endif
diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
index 836aa9223b..8028fbb087 100644
--- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
+++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
@@ -98,12 +98,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief A generalization of pointer arithmetic.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
* @return The distance between them.
*
- * Returns @c n such that first + n == last. This requires that @p last
- * must be reachable from @p first. Note that @c n may be negative.
+ * Returns @c n such that __first + n == __last. This requires
+ * that @p __last must be reachable from @p __first. Note that @c
+ * n may be negative.
*
* For random access iterators, this uses their @c + and @c - operations
* and are constant time. For other %iterator classes they are linear time.
@@ -156,12 +157,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief A generalization of pointer arithmetic.
- * @param i An input iterator.
- * @param n The @a delta by which to change @p i.
+ * @param __i An input iterator.
+ * @param __n The @a delta by which to change @p __i.
* @return Nothing.
*
* This increments @p i by @p n. For bidirectional and random access
- * iterators, @p n may be negative, in which case @p i is decremented.
+ * iterators, @p __n may be negative, in which case @p __i is decremented.
*
* For random access iterators, this uses their @c + and @c - operations
* and are constant time. For other %iterator classes they are linear time.
diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h
index 126de00b3b..46a944311d 100644
--- a/libstdc++-v3/include/bits/stl_list.h
+++ b/libstdc++-v3/include/bits/stl_list.h
@@ -1,7 +1,7 @@
// List implementation -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -58,7 +58,9 @@
#define _STL_LIST_H 1
#include <bits/concept_check.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -77,22 +79,22 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_List_node_base* _M_next;
_List_node_base* _M_prev;
-
+
static void
- swap(_List_node_base& __x, _List_node_base& __y) throw ();
-
+ swap(_List_node_base& __x, _List_node_base& __y) _GLIBCXX_USE_NOEXCEPT;
+
void
_M_transfer(_List_node_base* const __first,
- _List_node_base* const __last) throw ();
-
+ _List_node_base* const __last) _GLIBCXX_USE_NOEXCEPT;
+
void
- _M_reverse() throw ();
-
+ _M_reverse() _GLIBCXX_USE_NOEXCEPT;
+
void
- _M_hook(_List_node_base* const __position) throw ();
-
+ _M_hook(_List_node_base* const __position) _GLIBCXX_USE_NOEXCEPT;
+
void
- _M_unhook() throw ();
+ _M_unhook() _GLIBCXX_USE_NOEXCEPT;
};
_GLIBCXX_END_NAMESPACE_VERSION
@@ -306,7 +308,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
- struct _List_impl
+ struct _List_impl
: public _Node_alloc_type
{
__detail::_List_node_base _M_node;
@@ -318,6 +320,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_List_impl(const _Node_alloc_type& __a)
: _Node_alloc_type(__a), _M_node()
{ }
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _List_impl(_Node_alloc_type&& __a)
+ : _Node_alloc_type(std::move(__a)), _M_node()
+ { }
+#endif
};
_List_impl _M_impl;
@@ -325,50 +333,49 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_List_node<_Tp>*
_M_get_node()
{ return _M_impl._Node_alloc_type::allocate(1); }
-
+
void
_M_put_node(_List_node<_Tp>* __p)
{ _M_impl._Node_alloc_type::deallocate(__p, 1); }
-
+
public:
typedef _Alloc allocator_type;
_Node_alloc_type&
- _M_get_Node_allocator()
- { return *static_cast<_Node_alloc_type*>(&this->_M_impl); }
+ _M_get_Node_allocator() _GLIBCXX_NOEXCEPT
+ { return *static_cast<_Node_alloc_type*>(&_M_impl); }
const _Node_alloc_type&
- _M_get_Node_allocator() const
- { return *static_cast<const _Node_alloc_type*>(&this->_M_impl); }
+ _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT
+ { return *static_cast<const _Node_alloc_type*>(&_M_impl); }
_Tp_alloc_type
- _M_get_Tp_allocator() const
+ _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
{ return _Tp_alloc_type(_M_get_Node_allocator()); }
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return allocator_type(_M_get_Node_allocator()); }
_List_base()
: _M_impl()
{ _M_init(); }
- _List_base(const allocator_type& __a)
+ _List_base(const _Node_alloc_type& __a)
: _M_impl(__a)
{ _M_init(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
_List_base(_List_base&& __x)
- : _M_impl(__x._M_get_Node_allocator())
+ : _M_impl(std::move(__x._M_get_Node_allocator()))
{
_M_init();
- __detail::_List_node_base::swap(this->_M_impl._M_node,
- __x._M_impl._M_node);
+ __detail::_List_node_base::swap(_M_impl._M_node, __x._M_impl._M_node);
}
#endif
// This is what actually destroys the list.
- ~_List_base()
+ ~_List_base() _GLIBCXX_NOEXCEPT
{ _M_clear(); }
void
@@ -435,6 +442,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef _List_base<_Tp, _Alloc> _Base;
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+ typedef typename _Base::_Node_alloc_type _Node_alloc_type;
public:
typedef _Tp value_type;
@@ -462,9 +470,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
using _Base::_M_get_Node_allocator;
/**
- * @param x An instance of user data.
+ * @param __args An instance of user data.
*
- * Allocates space for a new node and constructs a copy of @a x in it.
+ * Allocates space for a new node and constructs a copy of
+ * @a __args in it.
*/
#ifndef __GXX_EXPERIMENTAL_CXX0X__
_Node*
@@ -514,18 +523,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %list with no elements.
- * @param a An allocator object.
+ * @param __a An allocator object.
*/
explicit
list(const allocator_type& __a)
- : _Base(__a) { }
+ : _Base(_Node_alloc_type(__a)) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Creates a %list with default constructed elements.
- * @param n The number of elements to initially create.
+ * @param __n The number of elements to initially create.
*
- * This constructor fills the %list with @a n default
+ * This constructor fills the %list with @a __n default
* constructed elements.
*/
explicit
@@ -535,38 +544,38 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %list with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param a An allocator object.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __a An allocator object.
*
- * This constructor fills the %list with @a n copies of @a value.
+ * This constructor fills the %list with @a __n copies of @a __value.
*/
list(size_type __n, const value_type& __value,
const allocator_type& __a = allocator_type())
- : _Base(__a)
+ : _Base(_Node_alloc_type(__a))
{ _M_fill_initialize(__n, __value); }
#else
/**
* @brief Creates a %list with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param a An allocator object.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __a An allocator object.
*
- * This constructor fills the %list with @a n copies of @a value.
+ * This constructor fills the %list with @a __n copies of @a __value.
*/
explicit
list(size_type __n, const value_type& __value = value_type(),
const allocator_type& __a = allocator_type())
- : _Base(__a)
+ : _Base(_Node_alloc_type(__a))
{ _M_fill_initialize(__n, __value); }
#endif
/**
* @brief %List copy constructor.
- * @param x A %list of identical element and allocator types.
+ * @param __x A %list of identical element and allocator types.
*
* The newly-created %list uses a copy of the allocation object used
- * by @a x.
+ * by @a __x.
*/
list(const list& __x)
: _Base(__x._M_get_Node_allocator())
@@ -575,42 +584,42 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %List move constructor.
- * @param x A %list of identical element and allocator types.
+ * @param __x A %list of identical element and allocator types.
*
- * The newly-created %list contains the exact contents of @a x.
- * The contents of @a x are a valid, but unspecified %list.
+ * The newly-created %list contains the exact contents of @a __x.
+ * The contents of @a __x are a valid, but unspecified %list.
*/
- list(list&& __x)
+ list(list&& __x) noexcept
: _Base(std::move(__x)) { }
/**
* @brief Builds a %list from an initializer_list
- * @param l An initializer_list of value_type.
- * @param a An allocator object.
+ * @param __l An initializer_list of value_type.
+ * @param __a An allocator object.
*
* Create a %list consisting of copies of the elements in the
- * initializer_list @a l. This is linear in l.size().
+ * initializer_list @a __l. This is linear in __l.size().
*/
list(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
- : _Base(__a)
+ : _Base(_Node_alloc_type(__a))
{ _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); }
#endif
/**
* @brief Builds a %list from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param a An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __a An allocator object.
*
* Create a %list consisting of copies of the elements from
- * [@a first,@a last). This is linear in N (where N is
- * distance(@a first,@a last)).
+ * [@a __first,@a __last). This is linear in N (where N is
+ * distance(@a __first,@a __last)).
*/
template<typename _InputIterator>
list(_InputIterator __first, _InputIterator __last,
const allocator_type& __a = allocator_type())
- : _Base(__a)
+ : _Base(_Node_alloc_type(__a))
{
// Check whether it's an integral type. If so, it's not an iterator.
typedef typename std::__is_integer<_InputIterator>::__type _Integral;
@@ -627,9 +636,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %List assignment operator.
- * @param x A %list of identical element and allocator types.
+ * @param __x A %list of identical element and allocator types.
*
- * All the elements of @a x are copied, but unlike the copy
+ * All the elements of @a __x are copied, but unlike the copy
* constructor, the allocator object is not copied.
*/
list&
@@ -638,10 +647,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %List move assignment operator.
- * @param x A %list of identical element and allocator types.
+ * @param __x A %list of identical element and allocator types.
*
- * The contents of @a x are moved into this %list (without copying).
- * @a x is a valid, but unspecified %list
+ * The contents of @a __x are moved into this %list (without copying).
+ * @a __x is a valid, but unspecified %list
*/
list&
operator=(list&& __x)
@@ -655,10 +664,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %List initializer list assignment operator.
- * @param l An initializer_list of value_type.
+ * @param __l An initializer_list of value_type.
*
* Replace the contents of the %list with copies of the elements
- * in the initializer_list @a l. This is linear in l.size().
+ * in the initializer_list @a __l. This is linear in l.size().
*/
list&
operator=(initializer_list<value_type> __l)
@@ -670,10 +679,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a given value to a %list.
- * @param n Number of elements to be assigned.
- * @param val Value to be assigned.
+ * @param __n Number of elements to be assigned.
+ * @param __val Value to be assigned.
*
- * This function fills a %list with @a n copies of the given
+ * This function fills a %list with @a __n copies of the given
* value. Note that the assignment completely changes the %list
* and that the resulting %list's size is the same as the number
* of elements assigned. Old data may be lost.
@@ -684,11 +693,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a range to a %list.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function fills a %list with copies of the elements in the
- * range [@a first,@a last).
+ * range [@a __first,@a __last).
*
* Note that the assignment completely changes the %list and
* that the resulting %list's size is the same as the number of
@@ -706,10 +715,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Assigns an initializer_list to a %list.
- * @param l An initializer_list of value_type.
+ * @param __l An initializer_list of value_type.
*
* Replace the contents of the %list with copies of the elements
- * in the initializer_list @a l. This is linear in l.size().
+ * in the initializer_list @a __l. This is linear in __l.size().
*/
void
assign(initializer_list<value_type> __l)
@@ -718,7 +727,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Get a copy of the memory allocation object.
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return _Base::get_allocator(); }
// iterators
@@ -727,7 +736,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* %list. Iteration is done in ordinary element order.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(this->_M_impl._M_node._M_next); }
/**
@@ -736,7 +745,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(this->_M_impl._M_node._M_next); }
/**
@@ -745,7 +754,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* order.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(&this->_M_impl._M_node); }
/**
@@ -754,7 +763,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(&this->_M_impl._M_node); }
/**
@@ -763,7 +772,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* order.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
/**
@@ -772,7 +781,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
/**
@@ -781,7 +790,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* reverse element order.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
/**
@@ -790,7 +799,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -800,7 +809,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(this->_M_impl._M_node._M_next); }
/**
@@ -809,7 +818,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(&this->_M_impl._M_node); }
/**
@@ -818,7 +827,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
/**
@@ -827,7 +836,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -837,23 +846,23 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* end().)
*/
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; }
/** Returns the number of elements in the %list. */
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return std::distance(begin(), end()); }
/** Returns the size() of the largest possible %list. */
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_get_Node_allocator().max_size(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Resizes the %list to the specified number of elements.
- * @param new_size Number of elements the %list should contain.
+ * @param __new_size Number of elements the %list should contain.
*
* This function will %resize the %list to the specified number
* of elements. If the number is smaller than the %list's
@@ -865,8 +874,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Resizes the %list to the specified number of elements.
- * @param new_size Number of elements the %list should contain.
- * @param x Data with which new elements should be populated.
+ * @param __new_size Number of elements the %list should contain.
+ * @param __x Data with which new elements should be populated.
*
* This function will %resize the %list to the specified number
* of elements. If the number is smaller than the %list's
@@ -878,8 +887,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Resizes the %list to the specified number of elements.
- * @param new_size Number of elements the %list should contain.
- * @param x Data with which new elements should be populated.
+ * @param __new_size Number of elements the %list should contain.
+ * @param __x Data with which new elements should be populated.
*
* This function will %resize the %list to the specified number
* of elements. If the number is smaller than the %list's
@@ -934,7 +943,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// [23.2.2.3] modifiers
/**
* @brief Add data to the front of the %list.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical stack operation. The function creates an
* element at the front of the %list and assigns the given data
@@ -975,7 +984,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Add data to the end of the %list.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical stack operation. The function creates an
* element at the end of the %list and assigns the given data to
@@ -1016,8 +1025,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Constructs object in %list before specified iterator.
- * @param position A const_iterator into the %list.
- * @param args Arguments.
+ * @param __position A const_iterator into the %list.
+ * @param __args Arguments.
* @return An iterator that points to the inserted data.
*
* This function will insert an object of type T constructed
@@ -1033,8 +1042,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts given value into %list before specified iterator.
- * @param position An iterator into the %list.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %list.
+ * @param __x Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given value before
@@ -1048,8 +1057,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Inserts given rvalue into %list before specified iterator.
- * @param position An iterator into the %list.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %list.
+ * @param __x Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given rvalue before
@@ -1064,8 +1073,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts the contents of an initializer_list into %list
* before specified iterator.
- * @param p An iterator into the %list.
- * @param l An initializer_list of value_type.
+ * @param __p An iterator into the %list.
+ * @param __l An initializer_list of value_type.
*
* This function will insert copies of the data in the
* initializer_list @a l into the %list before the location
@@ -1081,9 +1090,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a number of copies of given data into the %list.
- * @param position An iterator into the %list.
- * @param n Number of elements to be inserted.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %list.
+ * @param __n Number of elements to be inserted.
+ * @param __x Data to be inserted.
*
* This function will insert a specified number of copies of the
* given data before the location specified by @a position.
@@ -1093,16 +1102,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*/
void
insert(iterator __position, size_type __n, const value_type& __x)
- {
- list __tmp(__n, __x, _M_get_Node_allocator());
+ {
+ list __tmp(__n, __x, get_allocator());
splice(__position, __tmp);
}
/**
* @brief Inserts a range into the %list.
- * @param position An iterator into the %list.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __position An iterator into the %list.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function will insert copies of the data in the range [@a
* first,@a last) into the %list before the location specified by
@@ -1116,13 +1125,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
insert(iterator __position, _InputIterator __first,
_InputIterator __last)
{
- list __tmp(__first, __last, _M_get_Node_allocator());
+ list __tmp(__first, __last, get_allocator());
splice(__position, __tmp);
}
/**
* @brief Remove element at given position.
- * @param position Iterator pointing to element to be erased.
+ * @param __position Iterator pointing to element to be erased.
* @return An iterator pointing to the next element (or end()).
*
* This function will erase the element at the given position and thus
@@ -1140,8 +1149,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove a range of elements.
- * @param first Iterator pointing to the first element to be erased.
- * @param last Iterator pointing to one past the last element to be
+ * @param __first Iterator pointing to the first element to be erased.
+ * @param __last Iterator pointing to one past the last element to be
* erased.
* @return An iterator pointing to the element pointed to by @a last
* prior to erasing (or end()).
@@ -1166,7 +1175,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Swaps data with another %list.
- * @param x A %list of the same element and allocator types.
+ * @param __x A %list of the same element and allocator types.
*
* This exchanges the elements between two lists in constant
* time. Note that the global std::swap() function is
@@ -1192,7 +1201,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* Managing the pointer is the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_Base::_M_clear();
_Base::_M_init();
@@ -1201,14 +1210,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// [23.2.2.4] list operations
/**
* @brief Insert contents of another %list.
- * @param position Iterator referencing the element to insert before.
- * @param x Source list.
+ * @param __position Iterator referencing the element to insert before.
+ * @param __x Source list.
*
- * The elements of @a x are inserted in constant time in front of
- * the element referenced by @a position. @a x becomes an empty
+ * The elements of @a __x are inserted in constant time in front of
+ * the element referenced by @a __position. @a __x becomes an empty
* list.
*
- * Requires this != @a x.
+ * Requires this != @a __x.
*/
void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -1233,12 +1242,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Insert element from another %list.
- * @param position Iterator referencing the element to insert before.
- * @param x Source list.
- * @param i Iterator referencing the element to move.
+ * @param __position Iterator referencing the element to insert before.
+ * @param __x Source list.
+ * @param __i Iterator referencing the element to move.
*
- * Removes the element in list @a x referenced by @a i and
- * inserts it into the current list before @a position.
+ * Removes the element in list @a __x referenced by @a __i and
+ * inserts it into the current list before @a __position.
*/
void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -1266,15 +1275,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Insert range from another %list.
- * @param position Iterator referencing the element to insert before.
- * @param x Source list.
- * @param first Iterator referencing the start of range in x.
- * @param last Iterator referencing the end of range in x.
+ * @param __position Iterator referencing the element to insert before.
+ * @param __x Source list.
+ * @param __first Iterator referencing the start of range in x.
+ * @param __last Iterator referencing the end of range in x.
*
- * Removes elements in the range [first,last) and inserts them
- * before @a position in constant time.
+ * Removes elements in the range [__first,__last) and inserts them
+ * before @a __position in constant time.
*
- * Undefined if @a position is in [first,last).
+ * Undefined if @a __position is in [__first,__last).
*/
void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -1302,7 +1311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove all elements equal to value.
- * @param value The value to remove.
+ * @param __value The value to remove.
*
* Removes every element in the list equal to @a value.
* Remaining elements stay in list order. Note that this
@@ -1316,7 +1325,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove all elements satisfying a predicate.
- * @param Predicate Unary predicate function or object.
+ * @tparam _Predicate Unary predicate function or object.
*
* Removes every element in the list for which the predicate
* returns true. Remaining elements stay in list order. Note
@@ -1344,7 +1353,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove consecutive elements satisfying a predicate.
- * @param BinaryPredicate Binary predicate function or object.
+ * @tparam _BinaryPredicate Binary predicate function or object.
*
* For each consecutive set of elements [first,last) that
* satisfy predicate(first,i) where i is an iterator in
@@ -1360,12 +1369,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Merge sorted lists.
- * @param x Sorted list to merge.
+ * @param __x Sorted list to merge.
*
- * Assumes that both @a x and this list are sorted according to
- * operator<(). Merges elements of @a x into this list in
- * sorted order, leaving @a x empty when complete. Elements in
- * this list precede elements in @a x that are equal.
+ * Assumes that both @a __x and this list are sorted according to
+ * operator<(). Merges elements of @a __x into this list in
+ * sorted order, leaving @a __x empty when complete. Elements in
+ * this list precede elements in @a __x that are equal.
*/
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void
@@ -1381,20 +1390,21 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Merge sorted lists according to comparison function.
- * @param x Sorted list to merge.
- * @param StrictWeakOrdering Comparison function defining
+ * @tparam _StrictWeakOrdering Comparison function defining
* sort order.
+ * @param __x Sorted list to merge.
+ * @param __comp Comparison functor.
*
- * Assumes that both @a x and this list are sorted according to
- * StrictWeakOrdering. Merges elements of @a x into this list
- * in sorted order, leaving @a x empty when complete. Elements
- * in this list precede elements in @a x that are equivalent
+ * Assumes that both @a __x and this list are sorted according to
+ * StrictWeakOrdering. Merges elements of @a __x into this list
+ * in sorted order, leaving @a __x empty when complete. Elements
+ * in this list precede elements in @a __x that are equivalent
* according to StrictWeakOrdering().
*/
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _StrictWeakOrdering>
void
- merge(list&&, _StrictWeakOrdering);
+ merge(list&& __x, _StrictWeakOrdering __comp);
template<typename _StrictWeakOrdering>
void
@@ -1403,7 +1413,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
template<typename _StrictWeakOrdering>
void
- merge(list&, _StrictWeakOrdering);
+ merge(list& __x, _StrictWeakOrdering __comp);
#endif
/**
@@ -1412,7 +1422,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* Reverse the order of elements in the list in linear time.
*/
void
- reverse()
+ reverse() _GLIBCXX_NOEXCEPT
{ this->_M_impl._M_node._M_reverse(); }
/**
@@ -1551,8 +1561,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief List equality comparison.
- * @param x A %list.
- * @param y A %list of the same type as @a x.
+ * @param __x A %list.
+ * @param __y A %list of the same type as @a __x.
* @return True iff the size and elements of the lists are equal.
*
* This is an equivalence relation. It is linear in the size of
@@ -1579,9 +1589,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief List ordering relation.
- * @param x A %list.
- * @param y A %list of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %list.
+ * @param __y A %list of the same type as @a __x.
+ * @return True iff @a __x is lexicographically less than @a __y.
*
* This is a total ordering relation. It is linear in the size of the
* lists. The elements must be comparable with @c <.
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h
index a84b4b61df..dd2fdd2398 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -1,7 +1,7 @@
// Map implementation -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,7 +59,9 @@
#include <bits/functexcept.h>
#include <bits/concept_check.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -154,20 +156,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %map with no elements.
- * @param comp A comparison object.
- * @param a An allocator object.
+ * @param __comp A comparison object.
+ * @param __a An allocator object.
*/
explicit
map(const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { }
+ : _M_t(__comp, _Pair_alloc_type(__a)) { }
/**
* @brief %Map copy constructor.
- * @param x A %map of identical element and allocator types.
+ * @param __x A %map of identical element and allocator types.
*
* The newly-created %map uses a copy of the allocation object
- * used by @a x.
+ * used by @a __x.
*/
map(const map& __x)
: _M_t(__x._M_t) { }
@@ -175,40 +177,42 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Map move constructor.
- * @param x A %map of identical element and allocator types.
+ * @param __x A %map of identical element and allocator types.
*
- * The newly-created %map contains the exact contents of @a x.
- * The contents of @a x are a valid, but unspecified %map.
+ * The newly-created %map contains the exact contents of @a __x.
+ * The contents of @a __x are a valid, but unspecified %map.
*/
map(map&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %map from an initializer_list.
- * @param l An initializer_list.
- * @param comp A comparison object.
- * @param a An allocator object.
+ * @param __l An initializer_list.
+ * @param __comp A comparison object.
+ * @param __a An allocator object.
*
* Create a %map consisting of copies of the elements in the
- * initializer_list @a l.
+ * initializer_list @a __l.
* This is linear in N if the range is already sorted, and NlogN
- * otherwise (where N is @a l.size()).
+ * otherwise (where N is @a __l.size()).
*/
map(initializer_list<value_type> __l,
- const _Compare& __c = _Compare(),
+ const _Compare& __comp = _Compare(),
const allocator_type& __a = allocator_type())
- : _M_t(__c, __a)
+ : _M_t(__comp, _Pair_alloc_type(__a))
{ _M_t._M_insert_unique(__l.begin(), __l.end()); }
#endif
/**
* @brief Builds a %map from a range.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
- * Create a %map consisting of copies of the elements from [first,last).
- * This is linear in N if the range is already sorted, and NlogN
- * otherwise (where N is distance(first,last)).
+ * Create a %map consisting of copies of the elements from
+ * [__first,__last). This is linear in N if the range is
+ * already sorted, and NlogN otherwise (where N is
+ * distance(__first,__last)).
*/
template<typename _InputIterator>
map(_InputIterator __first, _InputIterator __last)
@@ -217,20 +221,21 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Builds a %map from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
- * Create a %map consisting of copies of the elements from [first,last).
- * This is linear in N if the range is already sorted, and NlogN
- * otherwise (where N is distance(first,last)).
+ * Create a %map consisting of copies of the elements from
+ * [__first,__last). This is linear in N if the range is
+ * already sorted, and NlogN otherwise (where N is
+ * distance(__first,__last)).
*/
template<typename _InputIterator>
map(_InputIterator __first, _InputIterator __last,
const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
+ : _M_t(__comp, _Pair_alloc_type(__a))
{ _M_t._M_insert_unique(__first, __last); }
// FIXME There is no dtor declared, but we should have something
@@ -244,10 +249,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Map assignment operator.
- * @param x A %map of identical element and allocator types.
+ * @param __x A %map of identical element and allocator types.
*
- * All the elements of @a x are copied, but unlike the copy constructor,
- * the allocator object is not copied.
+ * All the elements of @a __x are copied, but unlike the copy
+ * constructor, the allocator object is not copied.
*/
map&
operator=(const map& __x)
@@ -259,10 +264,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Map move assignment operator.
- * @param x A %map of identical element and allocator types.
+ * @param __x A %map of identical element and allocator types.
*
- * The contents of @a x are moved into this map (without copying).
- * @a x is a valid, but unspecified %map.
+ * The contents of @a __x are moved into this map (without copying).
+ * @a __x is a valid, but unspecified %map.
*/
map&
operator=(map&& __x)
@@ -276,10 +281,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Map list assignment operator.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %map with copies of the elements in the
- * initializer list @a l.
+ * initializer list @a __l.
*
* Note that the assignment completely changes the %map and
* that the resulting %map's size is the same as the number
@@ -296,8 +301,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Get a copy of the memory allocation object.
allocator_type
- get_allocator() const
- { return _M_t.get_allocator(); }
+ get_allocator() const _GLIBCXX_NOEXCEPT
+ { return allocator_type(_M_t.get_allocator()); }
// iterators
/**
@@ -306,7 +311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* Iteration is done in ascending order according to the keys.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return _M_t.begin(); }
/**
@@ -315,7 +320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* keys.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return _M_t.begin(); }
/**
@@ -324,7 +329,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return _M_t.end(); }
/**
@@ -333,7 +338,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the keys.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return _M_t.end(); }
/**
@@ -342,7 +347,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* keys.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return _M_t.rbegin(); }
/**
@@ -351,7 +356,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return _M_t.rbegin(); }
/**
@@ -360,7 +365,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return _M_t.rend(); }
/**
@@ -369,7 +374,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* order according to the keys.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return _M_t.rend(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -379,7 +384,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* keys.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return _M_t.begin(); }
/**
@@ -388,7 +393,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the keys.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return _M_t.end(); }
/**
@@ -397,7 +402,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return _M_t.rbegin(); }
/**
@@ -406,7 +411,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* order according to the keys.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return _M_t.rend(); }
#endif
@@ -415,23 +420,23 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* end().)
*/
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return _M_t.empty(); }
/** Returns the size of the %map. */
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _M_t.size(); }
/** Returns the maximum size of the %map. */
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_t.max_size(); }
// [23.3.1.2] element access
/**
* @brief Subscript ( @c [] ) access to %map data.
- * @param k The key for which data should be retrieved.
+ * @param __k The key for which data should be retrieved.
* @return A reference to the data of the (key,data) %pair.
*
* Allows for easy lookup with the subscript ( @c [] )
@@ -473,8 +478,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 464. Suggestion for new member functions in standard containers.
/**
* @brief Access to %map data.
- * @param k The key for which data should be retrieved.
- * @return A reference to the data whose key is equivalent to @a k, if
+ * @param __k The key for which data should be retrieved.
+ * @return A reference to the data whose key is equivalent to @a __k, if
* such a data is present in the %map.
* @throw std::out_of_range If no such data is present.
*/
@@ -500,9 +505,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Attempts to insert a std::pair into the %map.
- * @param x Pair to be inserted (see std::make_pair for easy creation
- * of pairs).
-
+ * @param __x Pair to be inserted (see std::make_pair for easy
+ * creation of pairs).
+ *
* @return A pair, of which the first element is an iterator that
* points to the possibly inserted pair, and the second is
* a bool that is true if the pair was actually inserted.
@@ -519,8 +524,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
std::pair<iterator, bool>
insert(_Pair&& __x)
{ return _M_t._M_insert_unique(std::forward<_Pair>(__x)); }
@@ -529,8 +534,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Attempts to insert a list of std::pairs into the %map.
- * @param list A std::initializer_list<value_type> of pairs to be
- * inserted.
+ * @param __list A std::initializer_list<value_type> of pairs to be
+ * inserted.
*
* Complexity similar to that of the range constructor.
*/
@@ -541,12 +546,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Attempts to insert a std::pair into the %map.
- * @param position An iterator that serves as a hint as to where the
+ * @param __position An iterator that serves as a hint as to where the
* pair should be inserted.
- * @param x Pair to be inserted (see std::make_pair for easy creation
- * of pairs).
- * @return An iterator that points to the element with key of @a x (may
- * or may not be the %pair passed in).
+ * @param __x Pair to be inserted (see std::make_pair for easy creation
+ * of pairs).
+ * @return An iterator that points to the element with key of
+ * @a __x (may or may not be the %pair passed in).
*
* This function is not concerned about whether the insertion
@@ -572,8 +577,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __position, _Pair&& __x)
{ return _M_t._M_insert_unique_(__position,
@@ -582,9 +587,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Template function that attempts to insert a range of elements.
- * @param first Iterator pointing to the start of the range to be
- * inserted.
- * @param last Iterator pointing to the end of the range.
+ * @param __first Iterator pointing to the start of the range to be
+ * inserted.
+ * @param __last Iterator pointing to the end of the range.
*
* Complexity similar to that of the range constructor.
*/
@@ -598,7 +603,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases an element from a %map.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
* @return An iterator pointing to the element immediately following
* @a position prior to the element being erased. If no such
* element exists, end() is returned.
@@ -612,10 +617,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
iterator
erase(const_iterator __position)
{ return _M_t.erase(__position); }
+
+ // LWG 2059.
+ iterator
+ erase(iterator __position)
+ { return _M_t.erase(__position); }
#else
/**
* @brief Erases an element from a %map.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
*
* This function erases an element, pointed to by the given
* iterator, from a %map. Note that this function only erases
@@ -630,7 +640,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Erases elements according to the provided key.
- * @param x Key of element to be erased.
+ * @param __x Key of element to be erased.
* @return The number of elements erased.
*
* This function erases all the elements located by the given key from
@@ -648,10 +658,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases a [first,last) range of elements from a %map.
- * @param first Iterator pointing to the start of the range to be
- * erased.
- * @param last Iterator pointing to the end of the range to be erased.
- * @return The iterator @a last.
+ * @param __first Iterator pointing to the start of the range to be
+ * erased.
+ * @param __last Iterator pointing to the end of the range to
+ * be erased.
+ * @return The iterator @a __last.
*
* This function erases a sequence of elements from a %map.
* Note that this function only erases the element, and that if
@@ -663,10 +674,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t.erase(__first, __last); }
#else
/**
- * @brief Erases a [first,last) range of elements from a %map.
- * @param first Iterator pointing to the start of the range to be
- * erased.
- * @param last Iterator pointing to the end of the range to be erased.
+ * @brief Erases a [__first,__last) range of elements from a %map.
+ * @param __first Iterator pointing to the start of the range to be
+ * erased.
+ * @param __last Iterator pointing to the end of the range to
+ * be erased.
*
* This function erases a sequence of elements from a %map.
* Note that this function only erases the element, and that if
@@ -680,7 +692,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Swaps data with another %map.
- * @param x A %map of the same element and allocator types.
+ * @param __x A %map of the same element and allocator types.
*
* This exchanges the elements between two maps in constant
* time. (It is only swapping a pointer, an integer, and an
@@ -700,7 +712,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* Managing the pointer is the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_t.clear(); }
// observers
@@ -723,7 +735,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// [23.3.1.3] map operations
/**
* @brief Tries to locate an element in a %map.
- * @param x Key of (key, value) %pair to be located.
+ * @param __x Key of (key, value) %pair to be located.
* @return Iterator pointing to sought-after element, or end() if not
* found.
*
@@ -738,7 +750,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Tries to locate an element in a %map.
- * @param x Key of (key, value) %pair to be located.
+ * @param __x Key of (key, value) %pair to be located.
* @return Read-only (constant) iterator pointing to sought-after
* element, or end() if not found.
*
@@ -753,7 +765,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the number of elements with given key.
- * @param x Key of (key, value) pairs to be located.
+ * @param __x Key of (key, value) pairs to be located.
* @return Number of elements with specified key.
*
* This function only makes sense for multimaps; for map the result will
@@ -765,7 +777,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the beginning of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Iterator pointing to first element equal to or greater
* than key, or end().
*
@@ -780,7 +792,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the beginning of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Read-only (constant) iterator pointing to first element
* equal to or greater than key, or end().
*
@@ -795,7 +807,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the end of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Iterator pointing to the first element
* greater than key, or end().
*/
@@ -805,7 +817,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the end of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Read-only (constant) iterator pointing to first iterator
* greater than key, or end().
*/
@@ -815,7 +827,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds a subsequence matching given key.
- * @param x Key of (key, value) pairs to be located.
+ * @param __x Key of (key, value) pairs to be located.
* @return Pair of iterators that possibly points to the subsequence
* matching given key.
*
@@ -834,7 +846,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds a subsequence matching given key.
- * @param x Key of (key, value) pairs to be located.
+ * @param __x Key of (key, value) pairs to be located.
* @return Pair of read-only (constant) iterators that possibly points
* to the subsequence matching given key.
*
@@ -864,8 +876,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Map equality comparison.
- * @param x A %map.
- * @param y A %map of the same type as @a x.
+ * @param __x A %map.
+ * @param __y A %map of the same type as @a x.
* @return True iff the size and elements of the maps are equal.
*
* This is an equivalence relation. It is linear in the size of the
@@ -880,8 +892,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Map ordering relation.
- * @param x A %map.
- * @param y A %map of the same type as @a x.
+ * @param __x A %map.
+ * @param __y A %map of the same type as @a x.
* @return True iff @a x is lexicographically less than @a y.
*
* This is a total ordering relation. It is linear in the size of the
diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h
index ca37f359e1..fd52aacd03 100644
--- a/libstdc++-v3/include/bits/stl_multimap.h
+++ b/libstdc++-v3/include/bits/stl_multimap.h
@@ -1,7 +1,7 @@
// Multimap implementation -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -58,7 +58,9 @@
#define _STL_MULTIMAP_H 1
#include <bits/concept_check.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -152,20 +154,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %multimap with no elements.
- * @param comp A comparison object.
- * @param a An allocator object.
+ * @param __comp A comparison object.
+ * @param __a An allocator object.
*/
explicit
multimap(const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { }
+ : _M_t(__comp, _Pair_alloc_type(__a)) { }
/**
* @brief %Multimap copy constructor.
- * @param x A %multimap of identical element and allocator types.
+ * @param __x A %multimap of identical element and allocator types.
*
* The newly-created %multimap uses a copy of the allocation object
- * used by @a x.
+ * used by @a __x.
*/
multimap(const multimap& __x)
: _M_t(__x._M_t) { }
@@ -173,19 +175,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Multimap move constructor.
- * @param x A %multimap of identical element and allocator types.
+ * @param __x A %multimap of identical element and allocator types.
*
- * The newly-created %multimap contains the exact contents of @a x.
- * The contents of @a x are a valid, but unspecified %multimap.
+ * The newly-created %multimap contains the exact contents of @a __x.
+ * The contents of @a __x are a valid, but unspecified %multimap.
*/
multimap(multimap&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %multimap from an initializer_list.
- * @param l An initializer_list.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __l An initializer_list.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
* Create a %multimap consisting of copies of the elements from
* the initializer_list. This is linear in N if the list is already
@@ -194,18 +197,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
multimap(initializer_list<value_type> __l,
const _Compare& __comp = _Compare(),
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
+ : _M_t(__comp, _Pair_alloc_type(__a))
{ _M_t._M_insert_equal(__l.begin(), __l.end()); }
#endif
/**
* @brief Builds a %multimap from a range.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* Create a %multimap consisting of copies of the elements from
- * [first,last). This is linear in N if the range is already sorted,
- * and NlogN otherwise (where N is distance(first,last)).
+ * [__first,__last). This is linear in N if the range is already sorted,
+ * and NlogN otherwise (where N is distance(__first,__last)).
*/
template<typename _InputIterator>
multimap(_InputIterator __first, _InputIterator __last)
@@ -214,20 +217,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Builds a %multimap from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
* Create a %multimap consisting of copies of the elements from
- * [first,last). This is linear in N if the range is already sorted,
- * and NlogN otherwise (where N is distance(first,last)).
+ * [__first,__last). This is linear in N if the range is already sorted,
+ * and NlogN otherwise (where N is distance(__first,__last)).
*/
template<typename _InputIterator>
multimap(_InputIterator __first, _InputIterator __last,
const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
+ : _M_t(__comp, _Pair_alloc_type(__a))
{ _M_t._M_insert_equal(__first, __last); }
// FIXME There is no dtor declared, but we should have something generated
@@ -241,10 +244,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Multimap assignment operator.
- * @param x A %multimap of identical element and allocator types.
+ * @param __x A %multimap of identical element and allocator types.
*
- * All the elements of @a x are copied, but unlike the copy constructor,
- * the allocator object is not copied.
+ * All the elements of @a __x are copied, but unlike the copy
+ * constructor, the allocator object is not copied.
*/
multimap&
operator=(const multimap& __x)
@@ -256,10 +259,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Multimap move assignment operator.
- * @param x A %multimap of identical element and allocator types.
+ * @param __x A %multimap of identical element and allocator types.
*
- * The contents of @a x are moved into this multimap (without copying).
- * @a x is a valid, but unspecified multimap.
+ * The contents of @a __x are moved into this multimap (without copying).
+ * @a __x is a valid, but unspecified multimap.
*/
multimap&
operator=(multimap&& __x)
@@ -273,10 +276,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Multimap list assignment operator.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %multimap with copies of the elements
- * in the initializer list @a l.
+ * in the initializer list @a __l.
*
* Note that the assignment completely changes the %multimap and
* that the resulting %multimap's size is the same as the number
@@ -293,8 +296,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Get a copy of the memory allocation object.
allocator_type
- get_allocator() const
- { return _M_t.get_allocator(); }
+ get_allocator() const _GLIBCXX_NOEXCEPT
+ { return allocator_type(_M_t.get_allocator()); }
// iterators
/**
@@ -303,7 +306,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* keys.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return _M_t.begin(); }
/**
@@ -312,7 +315,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the keys.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return _M_t.begin(); }
/**
@@ -321,7 +324,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* keys.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return _M_t.end(); }
/**
@@ -330,7 +333,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return _M_t.end(); }
/**
@@ -339,7 +342,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* keys.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return _M_t.rbegin(); }
/**
@@ -348,7 +351,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return _M_t.rbegin(); }
/**
@@ -357,7 +360,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return _M_t.rend(); }
/**
@@ -366,7 +369,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* descending order according to the keys.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return _M_t.rend(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -376,7 +379,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the keys.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return _M_t.begin(); }
/**
@@ -385,7 +388,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return _M_t.end(); }
/**
@@ -394,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return _M_t.rbegin(); }
/**
@@ -403,30 +406,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* descending order according to the keys.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return _M_t.rend(); }
#endif
// capacity
/** Returns true if the %multimap is empty. */
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return _M_t.empty(); }
/** Returns the size of the %multimap. */
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _M_t.size(); }
/** Returns the maximum size of the %multimap. */
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_t.max_size(); }
// modifiers
/**
* @brief Inserts a std::pair into the %multimap.
- * @param x Pair to be inserted (see std::make_pair for easy creation
+ * @param __x Pair to be inserted (see std::make_pair for easy creation
* of pairs).
* @return An iterator that points to the inserted (key,value) pair.
*
@@ -442,8 +445,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(_Pair&& __x)
{ return _M_t._M_insert_equal(std::forward<_Pair>(__x)); }
@@ -451,10 +454,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a std::pair into the %multimap.
- * @param position An iterator that serves as a hint as to where the
- * pair should be inserted.
- * @param x Pair to be inserted (see std::make_pair for easy creation
- * of pairs).
+ * @param __position An iterator that serves as a hint as to where the
+ * pair should be inserted.
+ * @param __x Pair to be inserted (see std::make_pair for easy creation
+ * of pairs).
* @return An iterator that points to the inserted (key,value) pair.
*
* This function inserts a (key, value) pair into the %multimap.
@@ -479,8 +482,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __position, _Pair&& __x)
{ return _M_t._M_insert_equal_(__position,
@@ -490,9 +493,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief A template function that attempts to insert a range
* of elements.
- * @param first Iterator pointing to the start of the range to be
- * inserted.
- * @param last Iterator pointing to the end of the range.
+ * @param __first Iterator pointing to the start of the range to be
+ * inserted.
+ * @param __last Iterator pointing to the end of the range.
*
* Complexity similar to that of the range constructor.
*/
@@ -504,8 +507,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Attempts to insert a list of std::pairs into the %multimap.
- * @param list A std::initializer_list<value_type> of pairs to be
- * inserted.
+ * @param __l A std::initializer_list<value_type> of pairs to be
+ * inserted.
*
* Complexity similar to that of the range constructor.
*/
@@ -519,7 +522,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases an element from a %multimap.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
* @return An iterator pointing to the element immediately following
* @a position prior to the element being erased. If no such
* element exists, end() is returned.
@@ -533,10 +536,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
iterator
erase(const_iterator __position)
{ return _M_t.erase(__position); }
+
+ // LWG 2059.
+ iterator
+ erase(iterator __position)
+ { return _M_t.erase(__position); }
#else
/**
* @brief Erases an element from a %multimap.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
*
* This function erases an element, pointed to by the given iterator,
* from a %multimap. Note that this function only erases the element,
@@ -551,7 +559,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Erases elements according to the provided key.
- * @param x Key of element to be erased.
+ * @param __x Key of element to be erased.
* @return The number of elements erased.
*
* This function erases all elements located by the given key from a
@@ -569,10 +577,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases a [first,last) range of elements from a %multimap.
- * @param first Iterator pointing to the start of the range to be
- * erased.
- * @param last Iterator pointing to the end of the range to be erased.
- * @return The iterator @a last.
+ * @param __first Iterator pointing to the start of the range to be
+ * erased.
+ * @param __last Iterator pointing to the end of the range to be
+ * erased .
+ * @return The iterator @a __last.
*
* This function erases a sequence of elements from a %multimap.
* Note that this function only erases the elements, and that if
@@ -588,9 +597,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases a [first,last) range of elements from a %multimap.
- * @param first Iterator pointing to the start of the range to be
+ * @param __first Iterator pointing to the start of the range to be
* erased.
- * @param last Iterator pointing to the end of the range to be erased.
+ * @param __last Iterator pointing to the end of the range to
+ * be erased.
*
* This function erases a sequence of elements from a %multimap.
* Note that this function only erases the elements, and that if
@@ -605,7 +615,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Swaps data with another %multimap.
- * @param x A %multimap of the same element and allocator types.
+ * @param __x A %multimap of the same element and allocator types.
*
* This exchanges the elements between two multimaps in constant time.
* (It is only swapping a pointer, an integer, and an instance of
@@ -625,7 +635,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* is the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_t.clear(); }
// observers
@@ -648,7 +658,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// multimap operations
/**
* @brief Tries to locate an element in a %multimap.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Iterator pointing to sought-after element,
* or end() if not found.
*
@@ -663,7 +673,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Tries to locate an element in a %multimap.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Read-only (constant) iterator pointing to sought-after
* element, or end() if not found.
*
@@ -678,7 +688,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the number of elements with given key.
- * @param x Key of (key, value) pairs to be located.
+ * @param __x Key of (key, value) pairs to be located.
* @return Number of elements with specified key.
*/
size_type
@@ -687,7 +697,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the beginning of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Iterator pointing to first element equal to or greater
* than key, or end().
*
@@ -702,14 +712,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the beginning of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Read-only (constant) iterator pointing to first element
* equal to or greater than key, or end().
*
- * This function returns the first element of a subsequence of elements
- * that matches the given key. If unsuccessful the iterator will point
- * to the next greatest element or, if no such greater element exists, to
- * end().
+ * This function returns the first element of a subsequence of
+ * elements that matches the given key. If unsuccessful the
+ * iterator will point to the next greatest element or, if no
+ * such greater element exists, to end().
*/
const_iterator
lower_bound(const key_type& __x) const
@@ -717,7 +727,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the end of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Iterator pointing to the first element
* greater than key, or end().
*/
@@ -727,7 +737,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds the end of a subsequence matching given key.
- * @param x Key of (key, value) pair to be located.
+ * @param __x Key of (key, value) pair to be located.
* @return Read-only (constant) iterator pointing to first iterator
* greater than key, or end().
*/
@@ -737,7 +747,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds a subsequence matching given key.
- * @param x Key of (key, value) pairs to be located.
+ * @param __x Key of (key, value) pairs to be located.
* @return Pair of iterators that possibly points to the subsequence
* matching given key.
*
@@ -754,7 +764,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Finds a subsequence matching given key.
- * @param x Key of (key, value) pairs to be located.
+ * @param __x Key of (key, value) pairs to be located.
* @return Pair of read-only (constant) iterators that possibly points
* to the subsequence matching given key.
*
@@ -782,8 +792,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Multimap equality comparison.
- * @param x A %multimap.
- * @param y A %multimap of the same type as @a x.
+ * @param __x A %multimap.
+ * @param __y A %multimap of the same type as @a __x.
* @return True iff the size and elements of the maps are equal.
*
* This is an equivalence relation. It is linear in the size of the
@@ -798,8 +808,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Multimap ordering relation.
- * @param x A %multimap.
- * @param y A %multimap of the same type as @a x.
+ * @param __x A %multimap.
+ * @param __y A %multimap of the same type as @a __x.
* @return True iff @a x is lexicographically less than @a y.
*
* This is a total ordering relation. It is linear in the size of the
diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h
index 9a48916c3c..ab467c80dc 100644
--- a/libstdc++-v3/include/bits/stl_multiset.h
+++ b/libstdc++-v3/include/bits/stl_multiset.h
@@ -58,7 +58,9 @@
#define _STL_MULTISET_H 1
#include <bits/concept_check.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -133,22 +135,22 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %multiset with no elements.
- * @param comp Comparator to use.
- * @param a An allocator object.
+ * @param __comp Comparator to use.
+ * @param __a An allocator object.
*/
explicit
multiset(const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { }
+ : _M_t(__comp, _Key_alloc_type(__a)) { }
/**
* @brief Builds a %multiset from a range.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* Create a %multiset consisting of copies of the elements from
* [first,last). This is linear in N if the range is already sorted,
- * and NlogN otherwise (where N is distance(first,last)).
+ * and NlogN otherwise (where N is distance(__first,__last)).
*/
template<typename _InputIterator>
multiset(_InputIterator __first, _InputIterator __last)
@@ -157,28 +159,28 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Builds a %multiset from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
* Create a %multiset consisting of copies of the elements from
- * [first,last). This is linear in N if the range is already sorted,
- * and NlogN otherwise (where N is distance(first,last)).
+ * [__first,__last). This is linear in N if the range is already sorted,
+ * and NlogN otherwise (where N is distance(__first,__last)).
*/
template<typename _InputIterator>
multiset(_InputIterator __first, _InputIterator __last,
const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
+ : _M_t(__comp, _Key_alloc_type(__a))
{ _M_t._M_insert_equal(__first, __last); }
/**
* @brief %Multiset copy constructor.
- * @param x A %multiset of identical element and allocator types.
+ * @param __x A %multiset of identical element and allocator types.
*
* The newly-created %multiset uses a copy of the allocation object used
- * by @a x.
+ * by @a __x.
*/
multiset(const multiset& __x)
: _M_t(__x._M_t) { }
@@ -186,37 +188,38 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Multiset move constructor.
- * @param x A %multiset of identical element and allocator types.
+ * @param __x A %multiset of identical element and allocator types.
*
- * The newly-created %multiset contains the exact contents of @a x.
- * The contents of @a x are a valid, but unspecified %multiset.
+ * The newly-created %multiset contains the exact contents of @a __x.
+ * The contents of @a __x are a valid, but unspecified %multiset.
*/
multiset(multiset&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %multiset from an initializer_list.
- * @param l An initializer_list.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __l An initializer_list.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
* Create a %multiset consisting of copies of the elements from
* the list. This is linear in N if the list is already sorted,
- * and NlogN otherwise (where N is @a l.size()).
+ * and NlogN otherwise (where N is @a __l.size()).
*/
multiset(initializer_list<value_type> __l,
const _Compare& __comp = _Compare(),
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
+ : _M_t(__comp, _Key_alloc_type(__a))
{ _M_t._M_insert_equal(__l.begin(), __l.end()); }
#endif
/**
* @brief %Multiset assignment operator.
- * @param x A %multiset of identical element and allocator types.
+ * @param __x A %multiset of identical element and allocator types.
*
- * All the elements of @a x are copied, but unlike the copy constructor,
- * the allocator object is not copied.
+ * All the elements of @a __x are copied, but unlike the copy
+ * constructor, the allocator object is not copied.
*/
multiset&
operator=(const multiset& __x)
@@ -228,10 +231,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Multiset move assignment operator.
- * @param x A %multiset of identical element and allocator types.
+ * @param __x A %multiset of identical element and allocator types.
*
- * The contents of @a x are moved into this %multiset (without copying).
- * @a x is a valid, but unspecified %multiset.
+ * The contents of @a __x are moved into this %multiset
+ * (without copying). @a __x is a valid, but unspecified
+ * %multiset.
*/
multiset&
operator=(multiset&& __x)
@@ -245,10 +249,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Multiset list assignment operator.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %multiset with copies of the elements in the
- * initializer list @a l.
+ * initializer list @a __l.
*
* Note that the assignment completely changes the %multiset and
* that the resulting %multiset's size is the same as the number
@@ -275,8 +279,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t.key_comp(); }
/// Returns the memory allocation object.
allocator_type
- get_allocator() const
- { return _M_t.get_allocator(); }
+ get_allocator() const _GLIBCXX_NOEXCEPT
+ { return allocator_type(_M_t.get_allocator()); }
/**
* Returns a read-only (constant) iterator that points to the first
@@ -284,7 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return _M_t.begin(); }
/**
@@ -293,7 +297,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return _M_t.end(); }
/**
@@ -302,7 +306,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return _M_t.rbegin(); }
/**
@@ -311,7 +315,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return _M_t.rend(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -321,7 +325,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
iterator
- cbegin() const
+ cbegin() const noexcept
{ return _M_t.begin(); }
/**
@@ -330,7 +334,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
iterator
- cend() const
+ cend() const noexcept
{ return _M_t.end(); }
/**
@@ -339,7 +343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return _M_t.rbegin(); }
/**
@@ -348,28 +352,28 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- crend() const
+ crend() const noexcept
{ return _M_t.rend(); }
#endif
/// Returns true if the %set is empty.
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return _M_t.empty(); }
/// Returns the size of the %set.
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _M_t.size(); }
/// Returns the maximum size of the %set.
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_t.max_size(); }
/**
* @brief Swaps data with another %multiset.
- * @param x A %multiset of the same element and allocator types.
+ * @param __x A %multiset of the same element and allocator types.
*
* This exchanges the elements between two multisets in constant time.
* (It is only swapping a pointer, an integer, and an instance of the @c
@@ -385,7 +389,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// insert/erase
/**
* @brief Inserts an element into the %multiset.
- * @param x Element to be inserted.
+ * @param __x Element to be inserted.
* @return An iterator that points to the inserted element.
*
* This function inserts an element into the %multiset. Contrary
@@ -406,9 +410,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts an element into the %multiset.
- * @param position An iterator that serves as a hint as to where the
+ * @param __position An iterator that serves as a hint as to where the
* element should be inserted.
- * @param x Element to be inserted.
+ * @param __x Element to be inserted.
* @return An iterator that points to the inserted element.
*
* This function inserts an element into the %multiset. Contrary
@@ -436,9 +440,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief A template function that tries to insert a range of elements.
- * @param first Iterator pointing to the start of the range to be
- * inserted.
- * @param last Iterator pointing to the end of the range.
+ * @param __first Iterator pointing to the start of the range to be
+ * inserted.
+ * @param __last Iterator pointing to the end of the range.
*
* Complexity similar to that of the range constructor.
*/
@@ -450,8 +454,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Attempts to insert a list of elements into the %multiset.
- * @param list A std::initializer_list<value_type> of elements
- * to be inserted.
+ * @param __l A std::initializer_list<value_type> of elements
+ * to be inserted.
*
* Complexity similar to that of the range constructor.
*/
@@ -465,7 +469,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases an element from a %multiset.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
* @return An iterator pointing to the element immediately following
* @a position prior to the element being erased. If no such
* element exists, end() is returned.
@@ -482,7 +486,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Erases an element from a %multiset.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
*
* This function erases an element, pointed to by the given iterator,
* from a %multiset. Note that this function only erases the element,
@@ -497,7 +501,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Erases elements according to the provided key.
- * @param x Key of element to be erased.
+ * @param __x Key of element to be erased.
* @return The number of elements erased.
*
* This function erases all elements located by the given key from a
@@ -515,9 +519,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases a [first,last) range of elements from a %multiset.
- * @param first Iterator pointing to the start of the range to be
- * erased.
- * @param last Iterator pointing to the end of the range to be erased.
+ * @param __first Iterator pointing to the start of the range to be
+ * erased.
+ * @param __last Iterator pointing to the end of the range to
+ * be erased.
* @return The iterator @a last.
*
* This function erases a sequence of elements from a %multiset.
@@ -554,14 +559,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* is the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_t.clear(); }
// multiset operations:
/**
* @brief Finds the number of elements with given key.
- * @param x Key of elements to be located.
+ * @param __x Key of elements to be located.
* @return Number of elements with specified key.
*/
size_type
@@ -573,7 +578,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Tries to locate an element in a %set.
- * @param x Element to be located.
+ * @param __x Element to be located.
* @return Iterator pointing to sought-after element, or end() if not
* found.
*
@@ -594,7 +599,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Finds the beginning of a subsequence matching given key.
- * @param x Key to be located.
+ * @param __x Key to be located.
* @return Iterator pointing to first element equal to or greater
* than key, or end().
*
@@ -615,7 +620,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Finds the end of a subsequence matching given key.
- * @param x Key to be located.
+ * @param __x Key to be located.
* @return Iterator pointing to the first element
* greater than key, or end().
*/
@@ -631,7 +636,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Finds a subsequence matching given key.
- * @param x Key to be located.
+ * @param __x Key to be located.
* @return Pair of iterators that possibly points to the subsequence
* matching given key.
*
@@ -651,6 +656,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
std::pair<const_iterator, const_iterator>
equal_range(const key_type& __x) const
{ return _M_t.equal_range(__x); }
+ //@}
template<typename _K1, typename _C1, typename _A1>
friend bool
@@ -665,8 +671,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Multiset equality comparison.
- * @param x A %multiset.
- * @param y A %multiset of the same type as @a x.
+ * @param __x A %multiset.
+ * @param __y A %multiset of the same type as @a __x.
* @return True iff the size and elements of the multisets are equal.
*
* This is an equivalence relation. It is linear in the size of the
@@ -682,9 +688,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Multiset ordering relation.
- * @param x A %multiset.
- * @param y A %multiset of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %multiset.
+ * @param __y A %multiset of the same type as @a __x.
+ * @return True iff @a __x is lexicographically less than @a __y.
*
* This is a total ordering relation. It is linear in the size of the
* maps. The elements must be comparable with @c <.
diff --git a/libstdc++-v3/include/bits/stl_numeric.h b/libstdc++-v3/include/bits/stl_numeric.h
index 1b6998d973..3b97d63601 100644
--- a/libstdc++-v3/include/bits/stl_numeric.h
+++ b/libstdc++-v3/include/bits/stl_numeric.h
@@ -73,9 +73,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* For each element in the range @p [first,last) assigns @p value and
* increments @p value as if by @p ++value.
*
- * @param first Start of range.
- * @param last End of range.
- * @param value Starting value.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __value Starting value.
* @return Nothing.
*/
template<typename _ForwardIterator, typename _Tp>
@@ -111,9 +111,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* Accumulates the values in the range [first,last) using operator+(). The
* initial value is @a init. The values are processed in order.
*
- * @param first Start of range.
- * @param last End of range.
- * @param init Starting value to add other values to.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __init Starting value to add other values to.
* @return The final sum.
*/
template<typename _InputIterator, typename _Tp>
@@ -133,13 +133,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Accumulate values in a range with operation.
*
* Accumulates the values in the range [first,last) using the function
- * object @a binary_op. The initial value is @a init. The values are
+ * object @p __binary_op. The initial value is @p __init. The values are
* processed in order.
*
- * @param first Start of range.
- * @param last End of range.
- * @param init Starting value to add other values to.
- * @param binary_op Function object to accumulate with.
+ * @param __first Start of range.
+ * @param __last End of range.
+ * @param __init Starting value to add other values to.
+ * @param __binary_op Function object to accumulate with.
* @return The final sum.
*/
template<typename _InputIterator, typename _Tp, typename _BinaryOperation>
@@ -159,15 +159,15 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Compute inner product of two ranges.
*
- * Starting with an initial value of @a init, multiplies successive
+ * Starting with an initial value of @p __init, multiplies successive
* elements from the two ranges and adds each product into the accumulated
* value using operator+(). The values in the ranges are processed in
* order.
*
- * @param first1 Start of range 1.
- * @param last1 End of range 1.
- * @param first2 Start of range 2.
- * @param init Starting value to add other values to.
+ * @param __first1 Start of range 1.
+ * @param __last1 End of range 1.
+ * @param __first2 Start of range 2.
+ * @param __init Starting value to add other values to.
* @return The final inner product.
*/
template<typename _InputIterator1, typename _InputIterator2, typename _Tp>
@@ -188,17 +188,17 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Compute inner product of two ranges.
*
- * Starting with an initial value of @a init, applies @a binary_op2 to
+ * Starting with an initial value of @p __init, applies @p __binary_op2 to
* successive elements from the two ranges and accumulates each result into
- * the accumulated value using @a binary_op1. The values in the ranges are
+ * the accumulated value using @p __binary_op1. The values in the ranges are
* processed in order.
*
- * @param first1 Start of range 1.
- * @param last1 End of range 1.
- * @param first2 Start of range 2.
- * @param init Starting value to add other values to.
- * @param binary_op1 Function object to accumulate with.
- * @param binary_op2 Function object to apply to pairs of input values.
+ * @param __first1 Start of range 1.
+ * @param __last1 End of range 1.
+ * @param __first2 Start of range 2.
+ * @param __init Starting value to add other values to.
+ * @param __binary_op1 Function object to accumulate with.
+ * @param __binary_op2 Function object to apply to pairs of input values.
* @return The final inner product.
*/
template<typename _InputIterator1, typename _InputIterator2, typename _Tp,
@@ -222,16 +222,16 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return list of partial sums
*
- * Accumulates the values in the range [first,last) using operator+().
+ * Accumulates the values in the range [first,last) using the @c + operator.
* As each successive input value is added into the total, that partial sum
- * is written to @a result. Therefore, the first value in result is the
- * first value of the input, the second value in result is the sum of the
- * first and second input values, and so on.
+ * is written to @p __result. Therefore, the first value in @p __result is
+ * the first value of the input, the second value in @p __result is the sum
+ * of the first and second input values, and so on.
*
- * @param first Start of input range.
- * @param last End of input range.
- * @param result Output to write sums to.
- * @return Iterator pointing just beyond the values written to result.
+ * @param __first Start of input range.
+ * @param __last End of input range.
+ * @param __result Output sum.
+ * @return Iterator pointing just beyond the values written to __result.
*/
template<typename _InputIterator, typename _OutputIterator>
_OutputIterator
@@ -261,16 +261,17 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
* @brief Return list of partial sums
*
- * Accumulates the values in the range [first,last) using operator+().
+ * Accumulates the values in the range [first,last) using @p __binary_op.
* As each successive input value is added into the total, that partial sum
- * is written to @a result. Therefore, the first value in result is the
- * first value of the input, the second value in result is the sum of the
- * first and second input values, and so on.
+ * is written to @p __result. Therefore, the first value in @p __result is
+ * the first value of the input, the second value in @p __result is the sum
+ * of the first and second input values, and so on.
*
- * @param first Start of input range.
- * @param last End of input range.
- * @param result Output to write sums to.
- * @return Iterator pointing just beyond the values written to result.
+ * @param __first Start of input range.
+ * @param __last End of input range.
+ * @param __result Output sum.
+ * @param __binary_op Function object.
+ * @return Iterator pointing just beyond the values written to __result.
*/
template<typename _InputIterator, typename _OutputIterator,
typename _BinaryOperation>
@@ -302,11 +303,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Return differences between adjacent values.
*
* Computes the difference between adjacent values in the range
- * [first,last) using operator-() and writes the result to @a result.
+ * [first,last) using operator-() and writes the result to @p __result.
*
- * @param first Start of input range.
- * @param last End of input range.
- * @param result Output to write sums to.
+ * @param __first Start of input range.
+ * @param __last End of input range.
+ * @param __result Output sums.
* @return Iterator pointing just beyond the values written to result.
*
* _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -342,12 +343,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
* @brief Return differences between adjacent values.
*
* Computes the difference between adjacent values in the range
- * [first,last) using the function object @a binary_op and writes the
- * result to @a result.
+ * [__first,__last) using the function object @p __binary_op and writes the
+ * result to @p __result.
*
- * @param first Start of input range.
- * @param last End of input range.
- * @param result Output to write sums to.
+ * @param __first Start of input range.
+ * @param __last End of input range.
+ * @param __result Output sum.
+ * @param __binary_op Function object.
* @return Iterator pointing just beyond the values written to result.
*
* _GLIBCXX_RESOLVE_LIB_DEFECTS
diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h
index 8d137b29a1..09c21eb274 100644
--- a/libstdc++-v3/include/bits/stl_pair.h
+++ b/libstdc++-v3/include/bits/stl_pair.h
@@ -1,6 +1,7 @@
// Pair implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -78,7 +79,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename...>
class tuple;
- template<int...>
+ template<std::size_t...>
struct _Index_tuple;
#endif
@@ -104,43 +105,46 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: first(__a), second(__b) { }
/** There is also a templated copy ctor for the @c pair class itself. */
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
template<class _U1, class _U2>
- _GLIBCXX_CONSTEXPR pair(const pair<_U1, _U2>& __p)
+ pair(const pair<_U1, _U2>& __p)
+ : first(__p.first), second(__p.second) { }
+#else
+ template<class _U1, class _U2, class = typename
+ enable_if<__and_<is_convertible<const _U1&, _T1>,
+ is_convertible<const _U2&, _T2>>::value>::type>
+ constexpr pair(const pair<_U1, _U2>& __p)
: first(__p.first), second(__p.second) { }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
constexpr pair(const pair&) = default;
-
- // Implicit.
- // pair(pair&&) = default;
+ constexpr pair(pair&&) = default;
// DR 811.
template<class _U1, class = typename
- std::enable_if<std::is_convertible<_U1, _T1>::value>::type>
- pair(_U1&& __x, const _T2& __y)
+ enable_if<is_convertible<_U1, _T1>::value>::type>
+ constexpr pair(_U1&& __x, const _T2& __y)
: first(std::forward<_U1>(__x)), second(__y) { }
template<class _U2, class = typename
- std::enable_if<std::is_convertible<_U2, _T2>::value>::type>
- pair(const _T1& __x, _U2&& __y)
+ enable_if<is_convertible<_U2, _T2>::value>::type>
+ constexpr pair(const _T1& __x, _U2&& __y)
: first(__x), second(std::forward<_U2>(__y)) { }
template<class _U1, class _U2, class = typename
- std::enable_if<std::is_convertible<_U1, _T1>::value
- && std::is_convertible<_U2, _T2>::value>::type>
- pair(_U1&& __x, _U2&& __y)
+ enable_if<__and_<is_convertible<_U1, _T1>,
+ is_convertible<_U2, _T2>>::value>::type>
+ constexpr pair(_U1&& __x, _U2&& __y)
: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
- template<class _U1, class _U2>
- pair(pair<_U1, _U2>&& __p)
+ template<class _U1, class _U2, class = typename
+ enable_if<__and_<is_convertible<_U1, _T1>,
+ is_convertible<_U2, _T2>>::value>::type>
+ constexpr pair(pair<_U1, _U2>&& __p)
: first(std::forward<_U1>(__p.first)),
second(std::forward<_U2>(__p.second)) { }
- template<class... _Args1, class... _Args2>
- pair(piecewise_construct_t,
- tuple<_Args1...> __first, tuple<_Args2...> __second)
- : first(__cons<first_type>(std::move(__first))),
- second(__cons<second_type>(std::move(__second))) { }
+ template<typename... _Args1, typename... _Args2>
+ pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
pair&
operator=(const pair& __p)
@@ -152,9 +156,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pair&
operator=(pair&& __p)
+ noexcept(__and_<is_nothrow_move_assignable<_T1>,
+ is_nothrow_move_assignable<_T2>>::value)
{
- first = std::move(__p.first);
- second = std::move(__p.second);
+ first = std::forward<first_type>(__p.first);
+ second = std::forward<second_type>(__p.second);
return *this;
}
@@ -171,13 +177,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pair&
operator=(pair<_U1, _U2>&& __p)
{
- first = std::move(__p.first);
- second = std::move(__p.second);
+ first = std::forward<_U1>(__p.first);
+ second = std::forward<_U2>(__p.second);
return *this;
}
void
swap(pair& __p)
+ noexcept(noexcept(swap(first, __p.first))
+ && noexcept(swap(second, __p.second)))
{
using std::swap;
swap(first, __p.first);
@@ -185,13 +193,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
private:
- template<typename _Tp, typename... _Args>
- static _Tp
- __cons(tuple<_Args...>&&);
-
- template<typename _Tp, typename... _Args, int... _Indexes>
- static _Tp
- __do_cons(tuple<_Args...>&&, const _Index_tuple<_Indexes...>&);
+ template<typename... _Args1, std::size_t... _Indexes1,
+ typename... _Args2, std::size_t... _Indexes2>
+ pair(tuple<_Args1...>&, tuple<_Args2...>&,
+ _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
#endif
};
@@ -239,13 +244,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<class _T1, class _T2>
inline void
swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
+ noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
#endif
/**
* @brief A convenience wrapper for creating a pair from two objects.
- * @param x The first object.
- * @param y The second object.
+ * @param __x The first object.
+ * @param __y The second object.
* @return A newly-constructed pair<> object of the appropriate type.
*
* The standard requires that the objects be passed by reference-to-const,
@@ -257,8 +263,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
// NB: DR 706.
template<class _T1, class _T2>
- inline pair<typename __decay_and_strip<_T1>::__type,
- typename __decay_and_strip<_T2>::__type>
+ constexpr pair<typename __decay_and_strip<_T1>::__type,
+ typename __decay_and_strip<_T2>::__type>
make_pair(_T1&& __x, _T2&& __y)
{
typedef typename __decay_and_strip<_T1>::__type __ds_type1;
diff --git a/libstdc++-v3/include/bits/stl_queue.h b/libstdc++-v3/include/bits/stl_queue.h
index 5f20072b62..fe65e9b1cb 100644
--- a/libstdc++-v3/include/bits/stl_queue.h
+++ b/libstdc++-v3/include/bits/stl_queue.h
@@ -200,7 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Add data to the end of the %queue.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical %queue operation. The function creates an
* element at the end of the %queue and assigns the given data
@@ -243,6 +243,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void
swap(queue& __q)
+ noexcept(noexcept(swap(c, __q.c)))
{
using std::swap;
swap(c, __q.c);
@@ -252,8 +253,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Queue equality comparison.
- * @param x A %queue.
- * @param y A %queue of the same type as @a x.
+ * @param __x A %queue.
+ * @param __y A %queue of the same type as @a __x.
* @return True iff the size and elements of the queues are equal.
*
* This is an equivalence relation. Complexity and semantics depend on the
@@ -268,9 +269,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Queue ordering relation.
- * @param x A %queue.
- * @param y A %queue of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %queue.
+ * @param __y A %queue of the same type as @a x.
+ * @return True iff @a __x is lexicographically less than @a __y.
*
* This is an total ordering relation. Complexity and semantics
* depend on the underlying sequence type, but the expected rules
@@ -312,6 +313,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp, typename _Seq>
inline void
swap(queue<_Tp, _Seq>& __x, queue<_Tp, _Seq>& __y)
+ noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
template<typename _Tp, typename _Seq, typename _Alloc>
@@ -405,14 +407,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Builds a %queue from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param x A comparison functor describing a strict weak ordering.
- * @param s An initial sequence with which to start.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __x A comparison functor describing a strict weak ordering.
+ * @param __s An initial sequence with which to start.
*
- * Begins by copying @a s, inserting a copy of the elements
- * from @a [first,last) into the copy of @a s, then ordering
- * the copy according to @a x.
+ * Begins by copying @a __s, inserting a copy of the elements
+ * from @a [first,last) into the copy of @a __s, then ordering
+ * the copy according to @a __x.
*
* For more information on function objects, see the
* documentation on @link functors functor base
@@ -478,7 +480,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Add data to the %queue.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical %queue operation.
* The time complexity of the operation depends on the underlying
@@ -530,6 +532,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void
swap(priority_queue& __pq)
+ noexcept(noexcept(swap(c, __pq.c)) && noexcept(swap(comp, __pq.comp)))
{
using std::swap;
swap(c, __pq.c);
@@ -545,6 +548,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline void
swap(priority_queue<_Tp, _Sequence, _Compare>& __x,
priority_queue<_Tp, _Sequence, _Compare>& __y)
+ noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
template<typename _Tp, typename _Sequence, typename _Compare,
diff --git a/libstdc++-v3/include/bits/stl_relops.h b/libstdc++-v3/include/bits/stl_relops.h
index 4e79e54b35..757d4bc323 100644
--- a/libstdc++-v3/include/bits/stl_relops.h
+++ b/libstdc++-v3/include/bits/stl_relops.h
@@ -77,9 +77,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
/**
* @brief Defines @c != for arbitrary types, in terms of @c ==.
- * @param x A thing.
- * @param y Another thing.
- * @return x != y
+ * @param __x A thing.
+ * @param __y Another thing.
+ * @return __x != __y
*
* This function uses @c == to determine its result.
*/
@@ -90,9 +90,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
/**
* @brief Defines @c > for arbitrary types, in terms of @c <.
- * @param x A thing.
- * @param y Another thing.
- * @return x > y
+ * @param __x A thing.
+ * @param __y Another thing.
+ * @return __x > __y
*
* This function uses @c < to determine its result.
*/
@@ -103,9 +103,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
/**
* @brief Defines @c <= for arbitrary types, in terms of @c <.
- * @param x A thing.
- * @param y Another thing.
- * @return x <= y
+ * @param __x A thing.
+ * @param __y Another thing.
+ * @return __x <= __y
*
* This function uses @c < to determine its result.
*/
@@ -116,9 +116,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
/**
* @brief Defines @c >= for arbitrary types, in terms of @c <.
- * @param x A thing.
- * @param y Another thing.
- * @return x >= y
+ * @param __x A thing.
+ * @param __y Another thing.
+ * @return __x >= __y
*
* This function uses @c < to determine its result.
*/
diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h
index 77d0f8022c..18fd1176a1 100644
--- a/libstdc++-v3/include/bits/stl_set.h
+++ b/libstdc++-v3/include/bits/stl_set.h
@@ -58,7 +58,9 @@
#define _STL_SET_H 1
#include <bits/concept_check.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -76,9 +78,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*
* Sets support bidirectional iterators.
*
- * @param Key Type of key objects.
- * @param Compare Comparison function object type, defaults to less<Key>.
- * @param Alloc Allocator type, defaults to allocator<Key>.
+ * @tparam _Key Type of key objects.
+ * @tparam _Compare Comparison function object type, defaults to less<Key>.
+ * @tparam _Alloc Allocator type, defaults to allocator<Key>.
*
* The private tree data is declared exactly the same way for set and
* multiset; the distinction is made entirely in how the tree functions are
@@ -140,22 +142,23 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %set with no elements.
- * @param comp Comparator to use.
- * @param a An allocator object.
+ * @param __comp Comparator to use.
+ * @param __a An allocator object.
*/
explicit
set(const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { }
+ : _M_t(__comp, _Key_alloc_type(__a)) { }
/**
* @brief Builds a %set from a range.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
- * Create a %set consisting of copies of the elements from [first,last).
- * This is linear in N if the range is already sorted, and NlogN
- * otherwise (where N is distance(first,last)).
+ * Create a %set consisting of copies of the elements from
+ * [__first,__last). This is linear in N if the range is
+ * already sorted, and NlogN otherwise (where N is
+ * distance(__first,__last)).
*/
template<typename _InputIterator>
set(_InputIterator __first, _InputIterator __last)
@@ -164,28 +167,29 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Builds a %set from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
- * Create a %set consisting of copies of the elements from [first,last).
- * This is linear in N if the range is already sorted, and NlogN
- * otherwise (where N is distance(first,last)).
+ * Create a %set consisting of copies of the elements from
+ * [__first,__last). This is linear in N if the range is
+ * already sorted, and NlogN otherwise (where N is
+ * distance(__first,__last)).
*/
template<typename _InputIterator>
set(_InputIterator __first, _InputIterator __last,
const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
- { _M_t._M_insert_unique(__first, __last); }
+ : _M_t(__comp, _Key_alloc_type(__a))
+ { _M_t._M_insert_unique(__first, __last); }
/**
* @brief %Set copy constructor.
- * @param x A %set of identical element and allocator types.
+ * @param __x A %set of identical element and allocator types.
*
* The newly-created %set uses a copy of the allocation object used
- * by @a x.
+ * by @a __x.
*/
set(const set& __x)
: _M_t(__x._M_t) { }
@@ -193,37 +197,38 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Set move constructor
- * @param x A %set of identical element and allocator types.
+ * @param __x A %set of identical element and allocator types.
*
* The newly-created %set contains the exact contents of @a x.
* The contents of @a x are a valid, but unspecified %set.
*/
set(set&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %set from an initializer_list.
- * @param l An initializer_list.
- * @param comp A comparison functor.
- * @param a An allocator object.
+ * @param __l An initializer_list.
+ * @param __comp A comparison functor.
+ * @param __a An allocator object.
*
* Create a %set consisting of copies of the elements in the list.
* This is linear in N if the list is already sorted, and NlogN
- * otherwise (where N is @a l.size()).
+ * otherwise (where N is @a __l.size()).
*/
set(initializer_list<value_type> __l,
const _Compare& __comp = _Compare(),
const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a)
+ : _M_t(__comp, _Key_alloc_type(__a))
{ _M_t._M_insert_unique(__l.begin(), __l.end()); }
#endif
/**
* @brief %Set assignment operator.
- * @param x A %set of identical element and allocator types.
+ * @param __x A %set of identical element and allocator types.
*
- * All the elements of @a x are copied, but unlike the copy constructor,
- * the allocator object is not copied.
+ * All the elements of @a __x are copied, but unlike the copy
+ * constructor, the allocator object is not copied.
*/
set&
operator=(const set& __x)
@@ -235,10 +240,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Set move assignment operator.
- * @param x A %set of identical element and allocator types.
+ * @param __x A %set of identical element and allocator types.
*
- * The contents of @a x are moved into this %set (without copying).
- * @a x is a valid, but unspecified %set.
+ * The contents of @a __x are moved into this %set (without copying).
+ * @a __x is a valid, but unspecified %set.
*/
set&
operator=(set&& __x)
@@ -252,10 +257,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Set list assignment operator.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %set with copies of the elements in the
- * initializer list @a l.
+ * initializer list @a __l.
*
* Note that the assignment completely changes the %set and
* that the resulting %set's size is the same as the number
@@ -282,8 +287,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t.key_comp(); }
/// Returns the allocator object with which the %set was constructed.
allocator_type
- get_allocator() const
- { return _M_t.get_allocator(); }
+ get_allocator() const _GLIBCXX_NOEXCEPT
+ { return allocator_type(_M_t.get_allocator()); }
/**
* Returns a read-only (constant) iterator that points to the first
@@ -291,7 +296,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return _M_t.begin(); }
/**
@@ -300,7 +305,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return _M_t.end(); }
/**
@@ -309,7 +314,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return _M_t.rbegin(); }
/**
@@ -318,7 +323,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return _M_t.rend(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -328,7 +333,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
iterator
- cbegin() const
+ cbegin() const noexcept
{ return _M_t.begin(); }
/**
@@ -337,7 +342,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
iterator
- cend() const
+ cend() const noexcept
{ return _M_t.end(); }
/**
@@ -346,7 +351,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* to the keys.
*/
reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return _M_t.rbegin(); }
/**
@@ -355,35 +360,35 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* according to the keys.
*/
reverse_iterator
- crend() const
+ crend() const noexcept
{ return _M_t.rend(); }
#endif
/// Returns true if the %set is empty.
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return _M_t.empty(); }
/// Returns the size of the %set.
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _M_t.size(); }
/// Returns the maximum size of the %set.
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_t.max_size(); }
/**
* @brief Swaps data with another %set.
- * @param x A %set of the same element and allocator types.
+ * @param __x A %set of the same element and allocator types.
*
- * This exchanges the elements between two sets in constant time.
- * (It is only swapping a pointer, an integer, and an instance of
- * the @c Compare type (which itself is often stateless and empty), so it
- * should be quite fast.)
- * Note that the global std::swap() function is specialized such that
- * std::swap(s1,s2) will feed to this function.
+ * This exchanges the elements between two sets in constant
+ * time. (It is only swapping a pointer, an integer, and an
+ * instance of the @c Compare type (which itself is often
+ * stateless and empty), so it should be quite fast.) Note
+ * that the global std::swap() function is specialized such
+ * that std::swap(s1,s2) will feed to this function.
*/
void
swap(set& __x)
@@ -392,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// insert/erase
/**
* @brief Attempts to insert an element into the %set.
- * @param x Element to be inserted.
+ * @param __x Element to be inserted.
* @return A pair, of which the first element is an iterator that points
* to the possibly inserted element, and the second is a bool
* that is true if the element was actually inserted.
@@ -423,11 +428,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Attempts to insert an element into the %set.
- * @param position An iterator that serves as a hint as to where the
+ * @param __position An iterator that serves as a hint as to where the
* element should be inserted.
- * @param x Element to be inserted.
- * @return An iterator that points to the element with key of @a x (may
- * or may not be the element passed in).
+ * @param __x Element to be inserted.
+ * @return An iterator that points to the element with key of
+ * @a __x (may or may not be the element passed in).
*
* This function is not concerned about whether the insertion took place,
* and thus does not return a boolean like the single-argument insert()
@@ -453,9 +458,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief A template function that attempts to insert a range
* of elements.
- * @param first Iterator pointing to the start of the range to be
- * inserted.
- * @param last Iterator pointing to the end of the range.
+ * @param __first Iterator pointing to the start of the range to be
+ * inserted.
+ * @param __last Iterator pointing to the end of the range.
*
* Complexity similar to that of the range constructor.
*/
@@ -467,8 +472,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Attempts to insert a list of elements into the %set.
- * @param list A std::initializer_list<value_type> of elements
- * to be inserted.
+ * @param __l A std::initializer_list<value_type> of elements
+ * to be inserted.
*
* Complexity similar to that of the range constructor.
*/
@@ -482,9 +487,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// DR 130. Associative erase should return an iterator.
/**
* @brief Erases an element from a %set.
- * @param position An iterator pointing to the element to be erased.
+ * @param __position An iterator pointing to the element to be erased.
* @return An iterator pointing to the element immediately following
- * @a position prior to the element being erased. If no such
+ * @a __position prior to the element being erased. If no such
* element exists, end() is returned.
*
* This function erases an element, pointed to by the given iterator,
@@ -514,7 +519,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Erases elements according to the provided key.
- * @param x Key of element to be erased.
+ * @param __x Key of element to be erased.
* @return The number of elements erased.
*
* This function erases all the elements located by the given key from
@@ -531,11 +536,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 130. Associative erase should return an iterator.
/**
- * @brief Erases a [first,last) range of elements from a %set.
- * @param first Iterator pointing to the start of the range to be
+ * @brief Erases a [__first,__last) range of elements from a %set.
+ * @param __first Iterator pointing to the start of the range to be
* erased.
- * @param last Iterator pointing to the end of the range to be erased.
- * @return The iterator @a last.
+
+ * @param __last Iterator pointing to the end of the range to
+ * be erased.
+ * @return The iterator @a __last.
*
* This function erases a sequence of elements from a %set.
* Note that this function only erases the element, and that if
@@ -548,9 +555,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Erases a [first,last) range of elements from a %set.
- * @param first Iterator pointing to the start of the range to be
+ * @param __first Iterator pointing to the start of the range to be
* erased.
- * @param last Iterator pointing to the end of the range to be erased.
+ * @param __last Iterator pointing to the end of the range to
+ * be erased.
*
* This function erases a sequence of elements from a %set.
* Note that this function only erases the element, and that if
@@ -569,14 +577,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_t.clear(); }
// set operations:
/**
* @brief Finds the number of elements.
- * @param x Element to located.
+ * @param __x Element to located.
* @return Number of elements with specified key.
*
* This function only makes sense for multisets; for set the result will
@@ -591,7 +599,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Tries to locate an element in a %set.
- * @param x Element to be located.
+ * @param __x Element to be located.
* @return Iterator pointing to sought-after element, or end() if not
* found.
*
@@ -612,7 +620,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Finds the beginning of a subsequence matching given key.
- * @param x Key to be located.
+ * @param __x Key to be located.
* @return Iterator pointing to first element equal to or greater
* than key, or end().
*
@@ -633,7 +641,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Finds the end of a subsequence matching given key.
- * @param x Key to be located.
+ * @param __x Key to be located.
* @return Iterator pointing to the first element
* greater than key, or end().
*/
@@ -649,7 +657,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Finds a subsequence matching given key.
- * @param x Key to be located.
+ * @param __x Key to be located.
* @return Pair of iterators that possibly points to the subsequence
* matching given key.
*
@@ -683,8 +691,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Set equality comparison.
- * @param x A %set.
- * @param y A %set of the same type as @a x.
+ * @param __x A %set.
+ * @param __y A %set of the same type as @a x.
* @return True iff the size and elements of the sets are equal.
*
* This is an equivalence relation. It is linear in the size of the sets.
@@ -699,9 +707,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Set ordering relation.
- * @param x A %set.
- * @param y A %set of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %set.
+ * @param __y A %set of the same type as @a x.
+ * @return True iff @a __x is lexicographically less than @a __y.
*
* This is a total ordering relation. It is linear in the size of the
* maps. The elements must be comparable with @c <.
diff --git a/libstdc++-v3/include/bits/stl_stack.h b/libstdc++-v3/include/bits/stl_stack.h
index 73c8bbd5d4..6b0f065966 100644
--- a/libstdc++-v3/include/bits/stl_stack.h
+++ b/libstdc++-v3/include/bits/stl_stack.h
@@ -174,7 +174,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Add data to the top of the %stack.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical %stack operation. The function creates an
* element at the top of the %stack and assigns the given data
@@ -217,6 +217,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void
swap(stack& __s)
+ noexcept(noexcept(swap(c, __s.c)))
{
using std::swap;
swap(c, __s.c);
@@ -226,8 +227,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Stack equality comparison.
- * @param x A %stack.
- * @param y A %stack of the same type as @a x.
+ * @param __x A %stack.
+ * @param __y A %stack of the same type as @a __x.
* @return True iff the size and elements of the stacks are equal.
*
* This is an equivalence relation. Complexity and semantics
@@ -243,9 +244,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Stack ordering relation.
- * @param x A %stack.
- * @param y A %stack of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %stack.
+ * @param __y A %stack of the same type as @a x.
+ * @return True iff @a x is lexicographically less than @a __y.
*
* This is an total ordering relation. Complexity and semantics
* depend on the underlying sequence type, but the expected rules
@@ -287,6 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp, typename _Seq>
inline void
swap(stack<_Tp, _Seq>& __x, stack<_Tp, _Seq>& __y)
+ noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
template<typename _Tp, typename _Seq, typename _Alloc>
diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h
index a99dac9309..b165273a3a 100644
--- a/libstdc++-v3/include/bits/stl_tempbuf.h
+++ b/libstdc++-v3/include/bits/stl_tempbuf.h
@@ -1,6 +1,7 @@
// Temporary buffer implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -66,15 +67,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Allocates a temporary buffer.
- * @param len The number of objects of type Tp.
+ * @param __len The number of objects of type Tp.
* @return See full description.
*
* Reinventing the wheel, but this time with prettier spokes!
*
- * This function tries to obtain storage for @c len adjacent Tp
+ * This function tries to obtain storage for @c __len adjacent Tp
* objects. The objects themselves are not constructed, of course.
* A pair<> is returned containing <em>the buffer s address and
- * capacity (in the units of sizeof(Tp)), or a pair of 0 values if
+ * capacity (in the units of sizeof(_Tp)), or a pair of 0 values if
* no storage can be obtained.</em> Note that the capacity obtained
* may be less than that requested if the memory is unavailable;
* you should compare len with the .second return value.
@@ -83,7 +84,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp>
pair<_Tp*, ptrdiff_t>
- get_temporary_buffer(ptrdiff_t __len)
+ get_temporary_buffer(ptrdiff_t __len) _GLIBCXX_NOEXCEPT
{
const ptrdiff_t __max =
__gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
@@ -103,10 +104,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief The companion to get_temporary_buffer().
- * @param p A buffer previously allocated by get_temporary_buffer.
+ * @param __p A buffer previously allocated by get_temporary_buffer.
* @return None.
*
- * Frees the memory pointed to by p.
+ * Frees the memory pointed to by __p.
*/
template<typename _Tp>
inline void
diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h
index 85681d2da3..ee56bbc752 100644
--- a/libstdc++-v3/include/bits/stl_tree.h
+++ b/libstdc++-v3/include/bits/stl_tree.h
@@ -352,15 +352,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Alloc allocator_type;
_Node_allocator&
- _M_get_Node_allocator()
+ _M_get_Node_allocator() _GLIBCXX_NOEXCEPT
{ return *static_cast<_Node_allocator*>(&this->_M_impl); }
const _Node_allocator&
- _M_get_Node_allocator() const
+ _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT
{ return *static_cast<const _Node_allocator*>(&this->_M_impl); }
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return allocator_type(_M_get_Node_allocator()); }
protected:
@@ -450,6 +450,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_node_count(0)
{ _M_initialize(); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)
+ : _Node_allocator(std::move(__a)), _M_key_compare(__comp),
+ _M_header(), _M_node_count(0)
+ { _M_initialize(); }
+#endif
+
private:
void
_M_initialize()
@@ -617,7 +624,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rb_tree(const _Compare& __comp,
const allocator_type& __a = allocator_type())
- : _M_impl(__comp, __a) { }
+ : _M_impl(__comp, _Node_allocator(__a)) { }
_Rb_tree(const _Rb_tree& __x)
: _M_impl(__x._M_impl._M_key_compare, __x._M_get_Node_allocator())
@@ -635,7 +642,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rb_tree(_Rb_tree&& __x);
#endif
- ~_Rb_tree()
+ ~_Rb_tree() _GLIBCXX_NOEXCEPT
{ _M_erase(_M_begin()); }
_Rb_tree&
@@ -647,56 +654,56 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return _M_impl._M_key_compare; }
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{
return iterator(static_cast<_Link_type>
(this->_M_impl._M_header._M_left));
}
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{
return const_iterator(static_cast<_Const_Link_type>
(this->_M_impl._M_header._M_left));
}
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(static_cast<_Link_type>(&this->_M_impl._M_header)); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{
return const_iterator(static_cast<_Const_Link_type>
(&this->_M_impl._M_header));
}
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return _M_impl._M_node_count == 0; }
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _M_impl._M_node_count; }
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return _M_get_Node_allocator().max_size(); }
void
@@ -760,6 +767,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_erase_aux(__position);
return __result._M_const_cast();
}
+
+ // LWG 2059.
+ iterator
+ erase(iterator __position)
+ {
+ iterator __result = __position;
+ ++__result;
+ _M_erase_aux(__position);
+ return __result;
+ }
#else
void
erase(iterator __position)
@@ -794,7 +811,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase(const key_type* __first, const key_type* __last);
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_M_erase(_M_begin());
_M_leftmost() = _M_end();
@@ -900,7 +917,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typename _Compare, typename _Alloc>
_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
_Rb_tree(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&& __x)
- : _M_impl(__x._M_impl._M_key_compare, __x._M_get_Node_allocator())
+ : _M_impl(__x._M_impl._M_key_compare,
+ std::move(__x._M_get_Node_allocator()))
{
if (__x._M_root() != 0)
{
diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h
index f15be3aee3..0d20335d21 100644
--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -1,7 +1,7 @@
// Raw memory manipulators -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-// 2009, 2010
+// 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -97,10 +97,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,last) into result.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @return result + (first - last)
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __result An output iterator.
+ * @return __result + (__first - __last)
*
* Like copy(), but does not require an initialized output range.
*/
@@ -154,9 +154,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the value x into the range [first,last).
- * @param first An input iterator.
- * @param last An input iterator.
- * @param x The source value.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __x The source value.
* @return Nothing.
*
* Like fill(), but does not require an initialized output range.
@@ -208,9 +208,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the value x into the range [first,first+n).
- * @param first An input iterator.
- * @param n The number of copies to make.
- * @param x The source value.
+ * @param __first An input iterator.
+ * @param __n The number of copies to make.
+ * @param __x The source value.
* @return Nothing.
*
* Like fill_n(), but does not require an initialized output range.
@@ -241,8 +241,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ForwardIterator __cur = __result;
__try
{
+ typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __first != __last; ++__first, ++__cur)
- __alloc.construct(std::__addressof(*__cur), *__first);
+ __traits::construct(__alloc, std::__addressof(*__cur), *__first);
return __cur;
}
__catch(...)
@@ -269,6 +270,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__result, __alloc);
}
+ template<typename _InputIterator, typename _ForwardIterator,
+ typename _Allocator>
+ inline _ForwardIterator
+ __uninitialized_move_if_noexcept_a(_InputIterator __first,
+ _InputIterator __last,
+ _ForwardIterator __result,
+ _Allocator& __alloc)
+ {
+ return std::__uninitialized_copy_a
+ (_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__first),
+ _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__last), __result, __alloc);
+ }
+
template<typename _ForwardIterator, typename _Tp, typename _Allocator>
void
__uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
@@ -277,8 +291,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ForwardIterator __cur = __first;
__try
{
+ typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __cur != __last; ++__cur)
- __alloc.construct(std::__addressof(*__cur), __x);
+ __traits::construct(__alloc, std::__addressof(*__cur), __x);
}
__catch(...)
{
@@ -302,8 +317,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ForwardIterator __cur = __first;
__try
{
+ typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __n > 0; --__n, ++__cur)
- __alloc.construct(std::__addressof(*__cur), __x);
+ __traits::construct(__alloc, std::__addressof(*__cur), __x);
}
__catch(...)
{
@@ -543,8 +559,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ForwardIterator __cur = __first;
__try
{
+ typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __cur != __last; ++__cur)
- __alloc.construct(std::__addressof(*__cur));
+ __traits::construct(__alloc, std::__addressof(*__cur));
}
__catch(...)
{
@@ -572,8 +589,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ForwardIterator __cur = __first;
__try
{
+ typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __n > 0; --__n, ++__cur)
- __alloc.construct(std::__addressof(*__cur));
+ __traits::construct(__alloc, std::__addressof(*__cur));
}
__catch(...)
{
@@ -619,10 +637,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,first+n) into result.
- * @param first An input iterator.
- * @param n The number of elements to copy.
- * @param result An output iterator.
- * @return result + n
+ * @param __first An input iterator.
+ * @param __n The number of elements to copy.
+ * @param __result An output iterator.
+ * @return __result + __n
*
* Like copy_n(), but does not require an initialized output range.
*/
diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h
index 5f71aa5cd0..c4c707c991 100644
--- a/libstdc++-v3/include/bits/stl_vector.h
+++ b/libstdc++-v3/include/bits/stl_vector.h
@@ -60,7 +60,9 @@
#include <bits/stl_iterator_base_funcs.h>
#include <bits/functexcept.h>
#include <bits/concept_check.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -70,14 +72,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
struct _Vector_base
{
- typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
+ typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+ rebind<_Tp>::other _Tp_alloc_type;
+ typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
+ pointer;
struct _Vector_impl
: public _Tp_alloc_type
{
- typename _Tp_alloc_type::pointer _M_start;
- typename _Tp_alloc_type::pointer _M_finish;
- typename _Tp_alloc_type::pointer _M_end_of_storage;
+ pointer _M_start;
+ pointer _M_finish;
+ pointer _M_end_of_storage;
_Vector_impl()
: _Tp_alloc_type(), _M_start(0), _M_finish(0), _M_end_of_storage(0)
@@ -86,21 +91,35 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Vector_impl(_Tp_alloc_type const& __a)
: _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
{ }
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _Vector_impl(_Tp_alloc_type&& __a)
+ : _Tp_alloc_type(std::move(__a)),
+ _M_start(0), _M_finish(0), _M_end_of_storage(0)
+ { }
+#endif
+
+ void _M_swap_data(_Vector_impl& __x)
+ {
+ std::swap(_M_start, __x._M_start);
+ std::swap(_M_finish, __x._M_finish);
+ std::swap(_M_end_of_storage, __x._M_end_of_storage);
+ }
};
public:
typedef _Alloc allocator_type;
_Tp_alloc_type&
- _M_get_Tp_allocator()
+ _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
{ return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
const _Tp_alloc_type&
- _M_get_Tp_allocator() const
+ _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
{ return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return allocator_type(_M_get_Tp_allocator()); }
_Vector_base()
@@ -111,30 +130,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Vector_base(size_t __n)
: _M_impl()
- {
- this->_M_impl._M_start = this->_M_allocate(__n);
- this->_M_impl._M_finish = this->_M_impl._M_start;
- this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
- }
+ { _M_create_storage(__n); }
_Vector_base(size_t __n, const allocator_type& __a)
: _M_impl(__a)
- {
- this->_M_impl._M_start = this->_M_allocate(__n);
- this->_M_impl._M_finish = this->_M_impl._M_start;
- this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
- }
+ { _M_create_storage(__n); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _Vector_base(_Tp_alloc_type&& __a)
+ : _M_impl(std::move(__a)) { }
+
_Vector_base(_Vector_base&& __x)
- : _M_impl(__x._M_get_Tp_allocator())
+ : _M_impl(std::move(__x._M_get_Tp_allocator()))
+ { this->_M_impl._M_swap_data(__x._M_impl); }
+
+ _Vector_base(_Vector_base&& __x, const allocator_type& __a)
+ : _M_impl(__a)
{
- this->_M_impl._M_start = __x._M_impl._M_start;
- this->_M_impl._M_finish = __x._M_impl._M_finish;
- this->_M_impl._M_end_of_storage = __x._M_impl._M_end_of_storage;
- __x._M_impl._M_start = 0;
- __x._M_impl._M_finish = 0;
- __x._M_impl._M_end_of_storage = 0;
+ if (__x.get_allocator() == __a)
+ this->_M_impl._M_swap_data(__x._M_impl);
+ else
+ {
+ size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start;
+ _M_create_storage(__n);
+ }
}
#endif
@@ -145,16 +164,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
public:
_Vector_impl _M_impl;
- typename _Tp_alloc_type::pointer
+ pointer
_M_allocate(size_t __n)
{ return __n != 0 ? _M_impl.allocate(__n) : 0; }
void
- _M_deallocate(typename _Tp_alloc_type::pointer __p, size_t __n)
+ _M_deallocate(pointer __p, size_t __n)
{
if (__p)
_M_impl.deallocate(__p, __n);
}
+
+ private:
+ void
+ _M_create_storage(size_t __n)
+ {
+ this->_M_impl._M_start = this->_M_allocate(__n);
+ this->_M_impl._M_finish = this->_M_impl._M_start;
+ this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+ }
};
@@ -186,13 +214,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef _Vector_base<_Tp, _Alloc> _Base;
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+ typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
public:
typedef _Tp value_type;
- typedef typename _Tp_alloc_type::pointer pointer;
- typedef typename _Tp_alloc_type::const_pointer const_pointer;
- typedef typename _Tp_alloc_type::reference reference;
- typedef typename _Tp_alloc_type::const_reference const_reference;
+ typedef typename _Base::pointer pointer;
+ typedef typename _Alloc_traits::const_pointer const_pointer;
+ typedef typename _Alloc_traits::reference reference;
+ typedef typename _Alloc_traits::const_reference const_reference;
typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
const_iterator;
@@ -219,7 +248,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %vector with no elements.
- * @param a An allocator object.
+ * @param __a An allocator object.
*/
explicit
vector(const allocator_type& __a)
@@ -228,9 +257,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Creates a %vector with default constructed elements.
- * @param n The number of elements to initially create.
+ * @param __n The number of elements to initially create.
*
- * This constructor fills the %vector with @a n default
+ * This constructor fills the %vector with @a __n default
* constructed elements.
*/
explicit
@@ -240,11 +269,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Creates a %vector with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param a An allocator.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __a An allocator.
*
- * This constructor fills the %vector with @a n copies of @a value.
+ * This constructor fills the %vector with @a __n copies of @a __value.
*/
vector(size_type __n, const value_type& __value,
const allocator_type& __a = allocator_type())
@@ -253,11 +282,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Creates a %vector with copies of an exemplar element.
- * @param n The number of elements to initially create.
- * @param value An element to copy.
- * @param a An allocator.
+ * @param __n The number of elements to initially create.
+ * @param __value An element to copy.
+ * @param __a An allocator.
*
- * This constructor fills the %vector with @a n copies of @a value.
+ * This constructor fills the %vector with @a __n copies of @a __value.
*/
explicit
vector(size_type __n, const value_type& __value = value_type(),
@@ -268,15 +297,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief %Vector copy constructor.
- * @param x A %vector of identical element and allocator types.
+ * @param __x A %vector of identical element and allocator types.
*
* The newly-created %vector uses a copy of the allocation
- * object used by @a x. All the elements of @a x are copied,
+ * object used by @a __x. All the elements of @a __x are copied,
* but any extra memory in
- * @a x (for fast expansion) will not be copied.
+ * @a __x (for fast expansion) will not be copied.
*/
vector(const vector& __x)
- : _Base(__x.size(), __x._M_get_Tp_allocator())
+ : _Base(__x.size(),
+ _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
{ this->_M_impl._M_finish =
std::__uninitialized_copy_a(__x.begin(), __x.end(),
this->_M_impl._M_start,
@@ -286,24 +316,47 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Vector move constructor.
- * @param x A %vector of identical element and allocator types.
+ * @param __x A %vector of identical element and allocator types.
*
- * The newly-created %vector contains the exact contents of @a x.
- * The contents of @a x are a valid, but unspecified %vector.
+ * The newly-created %vector contains the exact contents of @a __x.
+ * The contents of @a __x are a valid, but unspecified %vector.
*/
- vector(vector&& __x)
+ vector(vector&& __x) noexcept
: _Base(std::move(__x)) { }
+ /// Copy constructor with alternative allocator
+ vector(const vector& __x, const allocator_type& __a)
+ : _Base(__x.size(), __a)
+ { this->_M_impl._M_finish =
+ std::__uninitialized_copy_a(__x.begin(), __x.end(),
+ this->_M_impl._M_start,
+ _M_get_Tp_allocator());
+ }
+
+ /// Move constructor with alternative allocator
+ vector(vector&& __rv, const allocator_type& __m)
+ : _Base(std::move(__rv), __m)
+ {
+ if (__rv.get_allocator() != __m)
+ {
+ this->_M_impl._M_finish =
+ std::__uninitialized_move_a(__rv.begin(), __rv.end(),
+ this->_M_impl._M_start,
+ _M_get_Tp_allocator());
+ __rv.clear();
+ }
+ }
+
/**
* @brief Builds a %vector from an initializer list.
- * @param l An initializer_list.
- * @param a An allocator.
+ * @param __l An initializer_list.
+ * @param __a An allocator.
*
* Create a %vector consisting of copies of the elements in the
- * initializer_list @a l.
+ * initializer_list @a __l.
*
* This will call the element type's copy constructor N times
- * (where N is @a l.size()) and do no memory reallocation.
+ * (where N is @a __l.size()) and do no memory reallocation.
*/
vector(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
@@ -316,9 +369,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Builds a %vector from a range.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param a An allocator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
+ * @param __a An allocator.
*
* Create a %vector consisting of copies of the elements from
* [first,last).
@@ -346,16 +399,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* not touched in any way. Managing the pointer is the user's
* responsibility.
*/
- ~vector()
+ ~vector() _GLIBCXX_NOEXCEPT
{ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator()); }
/**
* @brief %Vector assignment operator.
- * @param x A %vector of identical element and allocator types.
+ * @param __x A %vector of identical element and allocator types.
*
- * All the elements of @a x are copied, but any extra memory in
- * @a x (for fast expansion) will not be copied. Unlike the
+ * All the elements of @a __x are copied, but any extra memory in
+ * @a __x (for fast expansion) will not be copied. Unlike the
* copy constructor, the allocator object is not copied.
*/
vector&
@@ -364,27 +417,29 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief %Vector move assignment operator.
- * @param x A %vector of identical element and allocator types.
+ * @param __x A %vector of identical element and allocator types.
*
- * The contents of @a x are moved into this %vector (without copying).
- * @a x is a valid, but unspecified %vector.
+ * The contents of @a __x are moved into this %vector (without copying,
+ * if the allocators permit it).
+ * @a __x is a valid, but unspecified %vector.
*/
vector&
- operator=(vector&& __x)
+ operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
{
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
+ constexpr bool __move_storage =
+ _Alloc_traits::_S_propagate_on_move_assign()
+ || _Alloc_traits::_S_always_equal();
+ _M_move_assign(std::move(__x),
+ integral_constant<bool, __move_storage>());
return *this;
}
/**
* @brief %Vector list assignment operator.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %vector with copies of the elements in the
- * initializer list @a l.
+ * initializer list @a __l.
*
* Note that the assignment completely changes the %vector and
* that the resulting %vector's size is the same as the number
@@ -400,10 +455,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a given value to a %vector.
- * @param n Number of elements to be assigned.
- * @param val Value to be assigned.
+ * @param __n Number of elements to be assigned.
+ * @param __val Value to be assigned.
*
- * This function fills a %vector with @a n copies of the given
+ * This function fills a %vector with @a __n copies of the given
* value. Note that the assignment completely changes the
* %vector and that the resulting %vector's size is the same as
* the number of elements assigned. Old data may be lost.
@@ -414,11 +469,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Assigns a range to a %vector.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function fills a %vector with copies of the elements in the
- * range [first,last).
+ * range [__first,__last).
*
* Note that the assignment completely changes the %vector and
* that the resulting %vector's size is the same as the number
@@ -436,10 +491,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Assigns an initializer list to a %vector.
- * @param l An initializer_list.
+ * @param __l An initializer_list.
*
* This function fills a %vector with copies of the elements in the
- * initializer list @a l.
+ * initializer list @a __l.
*
* Note that the assignment completely changes the %vector and
* that the resulting %vector's size is the same as the number
@@ -460,7 +515,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(this->_M_impl._M_start); }
/**
@@ -469,7 +524,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(this->_M_impl._M_start); }
/**
@@ -478,7 +533,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(this->_M_impl._M_finish); }
/**
@@ -487,7 +542,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* ordinary element order.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(this->_M_impl._M_finish); }
/**
@@ -496,7 +551,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
/**
@@ -505,7 +560,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* reverse element order.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
/**
@@ -514,7 +569,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* in reverse element order.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
/**
@@ -523,7 +578,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* is done in reverse element order.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -533,7 +588,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* element order.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(this->_M_impl._M_start); }
/**
@@ -542,7 +597,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* ordinary element order.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(this->_M_impl._M_finish); }
/**
@@ -551,7 +606,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* reverse element order.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
/**
@@ -560,25 +615,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* is done in reverse element order.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
// [23.2.4.2] capacity
/** Returns the number of elements in the %vector. */
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
/** Returns the size() of the largest possible %vector. */
size_type
- max_size() const
- { return _M_get_Tp_allocator().max_size(); }
+ max_size() const _GLIBCXX_NOEXCEPT
+ { return _Alloc_traits::max_size(_M_get_Tp_allocator()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Resizes the %vector to the specified number of elements.
- * @param new_size Number of elements the %vector should contain.
+ * @param __new_size Number of elements the %vector should contain.
*
* This function will %resize the %vector to the specified
* number of elements. If the number is smaller than the
@@ -596,8 +651,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Resizes the %vector to the specified number of elements.
- * @param new_size Number of elements the %vector should contain.
- * @param x Data with which new elements should be populated.
+ * @param __new_size Number of elements the %vector should contain.
+ * @param __x Data with which new elements should be populated.
*
* This function will %resize the %vector to the specified
* number of elements. If the number is smaller than the
@@ -616,8 +671,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
/**
* @brief Resizes the %vector to the specified number of elements.
- * @param new_size Number of elements the %vector should contain.
- * @param x Data with which new elements should be populated.
+ * @param __new_size Number of elements the %vector should contain.
+ * @param __x Data with which new elements should be populated.
*
* This function will %resize the %vector to the specified
* number of elements. If the number is smaller than the
@@ -639,7 +694,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/** A non-binding request to reduce capacity() to size(). */
void
shrink_to_fit()
- { std::__shrink_to_fit<vector>::_S_do_it(*this); }
+ { _M_shrink_to_fit(); }
#endif
/**
@@ -647,7 +702,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* hold before needing to allocate more memory.
*/
size_type
- capacity() const
+ capacity() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_end_of_storage
- this->_M_impl._M_start); }
@@ -656,13 +711,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* equal end().)
*/
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return begin() == end(); }
/**
* @brief Attempt to preallocate enough memory for specified number of
* elements.
- * @param n Number of elements required.
+ * @param __n Number of elements required.
* @throw std::length_error If @a n exceeds @c max_size().
*
* This function attempts to reserve enough memory for the
@@ -682,7 +737,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// element access
/**
* @brief Subscript access to the data contained in the %vector.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read/write reference to data.
*
@@ -697,7 +752,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Subscript access to the data contained in the %vector.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read-only (constant) reference to data.
*
@@ -722,10 +777,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
public:
/**
* @brief Provides access to the data contained in the %vector.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read/write reference to data.
- * @throw std::out_of_range If @a n is an invalid index.
+ * @throw std::out_of_range If @a __n is an invalid index.
*
* This function provides for safer data access. The parameter
* is first checked that it is in the range of the vector. The
@@ -740,10 +795,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Provides access to the data contained in the %vector.
- * @param n The index of the element for which data should be
+ * @param __n The index of the element for which data should be
* accessed.
* @return Read-only (constant) reference to data.
- * @throw std::out_of_range If @a n is an invalid index.
+ * @throw std::out_of_range If @a __n is an invalid index.
*
* This function provides for safer data access. The parameter
* is first checked that it is in the range of the vector. The
@@ -800,7 +855,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
pointer
#endif
- data()
+ data() _GLIBCXX_NOEXCEPT
{ return std::__addressof(front()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -808,13 +863,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#else
const_pointer
#endif
- data() const
+ data() const _GLIBCXX_NOEXCEPT
{ return std::__addressof(front()); }
// [23.2.4.3] modifiers
/**
* @brief Add data to the end of the %vector.
- * @param x Data to be added.
+ * @param __x Data to be added.
*
* This is a typical stack operation. The function creates an
* element at the end of the %vector and assigns the given data
@@ -827,11 +882,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
- this->_M_impl.construct(this->_M_impl._M_finish, __x);
+ _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+ __x);
++this->_M_impl._M_finish;
}
else
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _M_emplace_back_aux(__x);
+#else
_M_insert_aux(end(), __x);
+#endif
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -857,14 +917,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
pop_back()
{
--this->_M_impl._M_finish;
- this->_M_impl.destroy(this->_M_impl._M_finish);
+ _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Inserts an object in %vector before specified iterator.
- * @param position An iterator into the %vector.
- * @param args Arguments.
+ * @param __position An iterator into the %vector.
+ * @param __args Arguments.
* @return An iterator that points to the inserted data.
*
* This function will insert an object of type T constructed
@@ -880,8 +940,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts given value into %vector before specified iterator.
- * @param position An iterator into the %vector.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %vector.
+ * @param __x Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given value before
@@ -895,8 +955,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Inserts given rvalue into %vector before specified iterator.
- * @param position An iterator into the %vector.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %vector.
+ * @param __x Data to be inserted.
* @return An iterator that points to the inserted data.
*
* This function will insert a copy of the given rvalue before
@@ -910,8 +970,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts an initializer_list into the %vector.
- * @param position An iterator into the %vector.
- * @param l An initializer_list.
+ * @param __position An iterator into the %vector.
+ * @param __l An initializer_list.
*
* This function will insert copies of the data in the
* initializer_list @a l into the %vector before the location
@@ -928,9 +988,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a number of copies of given data into the %vector.
- * @param position An iterator into the %vector.
- * @param n Number of elements to be inserted.
- * @param x Data to be inserted.
+ * @param __position An iterator into the %vector.
+ * @param __n Number of elements to be inserted.
+ * @param __x Data to be inserted.
*
* This function will insert a specified number of copies of
* the given data before the location specified by @a position.
@@ -945,12 +1005,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Inserts a range into the %vector.
- * @param position An iterator into the %vector.
- * @param first An input iterator.
- * @param last An input iterator.
+ * @param __position An iterator into the %vector.
+ * @param __first An input iterator.
+ * @param __last An input iterator.
*
* This function will insert copies of the data in the range
- * [first,last) into the %vector before the location specified
+ * [__first,__last) into the %vector before the location specified
* by @a pos.
*
* Note that this kind of operation could be expensive for a
@@ -969,7 +1029,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove element at given position.
- * @param position Iterator pointing to element to be erased.
+ * @param __position Iterator pointing to element to be erased.
* @return An iterator pointing to the next element (or end()).
*
* This function will erase the element at the given position and thus
@@ -987,14 +1047,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Remove a range of elements.
- * @param first Iterator pointing to the first element to be erased.
- * @param last Iterator pointing to one past the last element to be
- * erased.
- * @return An iterator pointing to the element pointed to by @a last
+ * @param __first Iterator pointing to the first element to be erased.
+ * @param __last Iterator pointing to one past the last element to be
+ * erased.
+ * @return An iterator pointing to the element pointed to by @a __last
* prior to erasing (or end()).
*
- * This function will erase the elements in the range [first,last) and
- * shorten the %vector accordingly.
+ * This function will erase the elements in the range
+ * [__first,__last) and shorten the %vector accordingly.
*
* Note This operation could be expensive and if it is
* frequently used the user should consider using std::list.
@@ -1008,7 +1068,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Swaps data with another %vector.
- * @param x A %vector of the same element and allocator types.
+ * @param __x A %vector of the same element and allocator types.
*
* This exchanges the elements between two vectors in constant time.
* (Three pointers, so it should be quite fast.)
@@ -1017,16 +1077,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*/
void
swap(vector& __x)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(_Alloc_traits::_S_nothrow_swap())
+#endif
{
- std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
- std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
- std::swap(this->_M_impl._M_end_of_storage,
- __x._M_impl._M_end_of_storage);
-
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 431. Swapping containers with unequal allocators.
- std::__alloc_swap<_Tp_alloc_type>::_S_do_it(_M_get_Tp_allocator(),
- __x._M_get_Tp_allocator());
+ this->_M_impl._M_swap_data(__x._M_impl);
+ _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
+ __x._M_get_Tp_allocator());
}
/**
@@ -1036,7 +1093,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* the user's responsibility.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _M_erase_at_end(this->_M_impl._M_start); }
protected:
@@ -1222,6 +1279,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// Called by resize(n).
void
_M_default_append(size_type __n);
+
+ bool
+ _M_shrink_to_fit();
#endif
// Called by insert(p,x)
@@ -1232,6 +1292,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename... _Args>
void
_M_insert_aux(iterator __position, _Args&&... __args);
+
+ template<typename... _Args>
+ void
+ _M_emplace_back_aux(_Args&&... __args);
#endif
// Called by the latter.
@@ -1255,13 +1319,46 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
std::_Destroy(__pos, this->_M_impl._M_finish, _M_get_Tp_allocator());
this->_M_impl._M_finish = __pos;
}
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ private:
+ // Constant-time move assignment when source object's memory can be
+ // moved, either because the source's allocator will move too
+ // or because the allocators are equal.
+ void
+ _M_move_assign(vector&& __x, std::true_type) noexcept
+ {
+ const vector __tmp(std::move(*this));
+ this->_M_impl._M_swap_data(__x._M_impl);
+ if (_Alloc_traits::_S_propagate_on_move_assign())
+ std::__alloc_on_move(_M_get_Tp_allocator(),
+ __x._M_get_Tp_allocator());
+ }
+
+ // Do move assignment when it might not be possible to move source
+ // object's memory, resulting in a linear-time operation.
+ void
+ _M_move_assign(vector&& __x, std::false_type)
+ {
+ if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
+ _M_move_assign(std::move(__x), std::true_type());
+ else
+ {
+ // The rvalue's allocator cannot be moved and is not equal,
+ // so we need to individually move each element.
+ this->assign(std::__make_move_if_noexcept_iterator(__x.begin()),
+ std::__make_move_if_noexcept_iterator(__x.end()));
+ __x.clear();
+ }
+ }
+#endif
};
/**
* @brief Vector equality comparison.
- * @param x A %vector.
- * @param y A %vector of the same type as @a x.
+ * @param __x A %vector.
+ * @param __y A %vector of the same type as @a __x.
* @return True iff the size and elements of the vectors are equal.
*
* This is an equivalence relation. It is linear in the size of the
@@ -1276,9 +1373,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Vector ordering relation.
- * @param x A %vector.
- * @param y A %vector of the same type as @a x.
- * @return True iff @a x is lexicographically less than @a y.
+ * @param __x A %vector.
+ * @param __y A %vector of the same type as @a __x.
+ * @return True iff @a __x is lexicographically less than @a __y.
*
* This is a total ordering relation. It is linear in the size of the
* vectors. The elements must be comparable with @c <.
diff --git a/libstdc++-v3/include/bits/stream_iterator.h b/libstdc++-v3/include/bits/stream_iterator.h
index 57ca961114..60949a8b37 100644
--- a/libstdc++-v3/include/bits/stream_iterator.h
+++ b/libstdc++-v3/include/bits/stream_iterator.h
@@ -145,9 +145,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the only type written by this iterator and there must be an
* operator<<(Tp) defined.
*
- * @param Tp The type to write to the ostream.
- * @param CharT The ostream char_type.
- * @param Traits The ostream char_traits.
+ * @tparam _Tp The type to write to the ostream.
+ * @tparam _CharT The ostream char_type.
+ * @tparam _Traits The ostream char_traits.
*/
template<typename _Tp, typename _CharT = char,
typename _Traits = char_traits<_CharT> >
@@ -177,8 +177,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* written to the stream. The delimiter is not copied, and thus must
* not be destroyed while this iterator is in use.
*
- * @param s Underlying ostream to write to.
- * @param c CharT delimiter string to insert.
+ * @param __s Underlying ostream to write to.
+ * @param __c CharT delimiter string to insert.
*/
ostream_iterator(ostream_type& __s, const _CharT* __c)
: _M_stream(&__s), _M_string(__c) { }
diff --git a/libstdc++-v3/include/bits/streambuf_iterator.h b/libstdc++-v3/include/bits/streambuf_iterator.h
index 83ae6785c2..3c8014e89f 100644
--- a/libstdc++-v3/include/bits/streambuf_iterator.h
+++ b/libstdc++-v3/include/bits/streambuf_iterator.h
@@ -51,7 +51,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits>
class istreambuf_iterator
: public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
- _CharT*, _CharT&>
+ _CharT*,
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // LWG 445.
+ _CharT>
+#else
+ _CharT&>
+#endif
{
public:
// Types:
@@ -95,15 +101,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
/// Construct end of input stream iterator.
- _GLIBCXX_CONSTEXPR istreambuf_iterator() throw()
+ _GLIBCXX_CONSTEXPR istreambuf_iterator() _GLIBCXX_USE_NOEXCEPT
: _M_sbuf(0), _M_c(traits_type::eof()) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ istreambuf_iterator(const istreambuf_iterator&) noexcept = default;
+
+ ~istreambuf_iterator() = default;
+#endif
+
/// Construct start of input stream iterator.
- istreambuf_iterator(istream_type& __s) throw()
+ istreambuf_iterator(istream_type& __s) _GLIBCXX_USE_NOEXCEPT
: _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
/// Construct start of streambuf iterator.
- istreambuf_iterator(streambuf_type* __s) throw()
+ istreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT
: _M_sbuf(__s), _M_c(traits_type::eof()) { }
/// Return the current character pointed to by iterator. This returns
@@ -228,11 +240,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
/// Construct output iterator from ostream.
- ostreambuf_iterator(ostream_type& __s) throw ()
+ ostreambuf_iterator(ostream_type& __s) _GLIBCXX_USE_NOEXCEPT
: _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
/// Construct output iterator from streambuf.
- ostreambuf_iterator(streambuf_type* __s) throw ()
+ ostreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT
: _M_sbuf(__s), _M_failed(!_M_sbuf) { }
/// Write character to streambuf. Calls streambuf.sputc().
@@ -262,7 +274,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Return true if previous operator=() failed.
bool
- failed() const throw()
+ failed() const _GLIBCXX_USE_NOEXCEPT
{ return _M_failed; }
ostreambuf_iterator&
diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h
index 9d5d206bb0..23937daa29 100644
--- a/libstdc++-v3/include/bits/unique_ptr.h
+++ b/libstdc++-v3/include/bits/unique_ptr.h
@@ -49,11 +49,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct default_delete
{
- constexpr default_delete() = default;
+ constexpr default_delete() noexcept = default;
template<typename _Up, typename = typename
std::enable_if<std::is_convertible<_Up*, _Tp*>::value>::type>
- default_delete(const default_delete<_Up>&) { }
+ default_delete(const default_delete<_Up>&) noexcept { }
void
operator()(_Tp* __ptr) const
@@ -70,7 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct default_delete<_Tp[]>
{
- constexpr default_delete() = default;
+ constexpr default_delete() noexcept = default;
void
operator()(_Tp* __ptr) const
@@ -111,35 +111,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Dp deleter_type;
// Constructors.
- constexpr unique_ptr()
+ constexpr unique_ptr() noexcept
: _M_t()
{ static_assert(!std::is_pointer<deleter_type>::value,
"constructed with null function pointer deleter"); }
explicit
- unique_ptr(pointer __p)
+ unique_ptr(pointer __p) noexcept
: _M_t(__p, deleter_type())
{ static_assert(!std::is_pointer<deleter_type>::value,
"constructed with null function pointer deleter"); }
unique_ptr(pointer __p,
typename std::conditional<std::is_reference<deleter_type>::value,
- deleter_type, const deleter_type&>::type __d)
+ deleter_type, const deleter_type&>::type __d) noexcept
: _M_t(__p, __d) { }
unique_ptr(pointer __p,
- typename std::remove_reference<deleter_type>::type&& __d)
+ typename std::remove_reference<deleter_type>::type&& __d) noexcept
: _M_t(std::move(__p), std::move(__d))
{ static_assert(!std::is_reference<deleter_type>::value,
"rvalue deleter bound to reference"); }
- constexpr unique_ptr(nullptr_t)
+ constexpr unique_ptr(nullptr_t) noexcept
: _M_t()
{ static_assert(!std::is_pointer<deleter_type>::value,
"constructed with null function pointer deleter"); }
// Move constructors.
- unique_ptr(unique_ptr&& __u)
+ unique_ptr(unique_ptr&& __u) noexcept
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
template<typename _Up, typename _Ep, typename = typename
@@ -152,7 +152,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|| (!std::is_reference<_Dp>::value
&& std::is_convertible<_Ep, _Dp>::value))>
::type>
- unique_ptr(unique_ptr<_Up, _Ep>&& __u)
+ unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
: _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
{ }
@@ -161,16 +161,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::enable_if<std::is_convertible<_Up*, _Tp*>::value
&& std::is_same<_Dp,
default_delete<_Tp>>::value>::type>
- unique_ptr(auto_ptr<_Up>&& __u)
+ unique_ptr(auto_ptr<_Up>&& __u) noexcept
: _M_t(__u.release(), deleter_type()) { }
#endif
// Destructor.
- ~unique_ptr() { reset(); }
+ ~unique_ptr() noexcept
+ {
+ auto& __ptr = std::get<0>(_M_t);
+ if (__ptr != nullptr)
+ get_deleter()(__ptr);
+ __ptr = pointer();
+ }
// Assignment.
unique_ptr&
- operator=(unique_ptr&& __u)
+ operator=(unique_ptr&& __u) noexcept
{
reset(__u.release());
get_deleter() = std::forward<deleter_type>(__u.get_deleter());
@@ -183,7 +189,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pointer>::value
&& !std::is_array<_Up>::value>::type>
unique_ptr&
- operator=(unique_ptr<_Up, _Ep>&& __u)
+ operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
{
reset(__u.release());
get_deleter() = std::forward<_Ep>(__u.get_deleter());
@@ -191,7 +197,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
unique_ptr&
- operator=(nullptr_t)
+ operator=(nullptr_t) noexcept
{
reset();
return *this;
@@ -206,30 +212,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
pointer
- operator->() const
+ operator->() const noexcept
{
_GLIBCXX_DEBUG_ASSERT(get() != pointer());
return get();
}
pointer
- get() const
+ get() const noexcept
{ return std::get<0>(_M_t); }
deleter_type&
- get_deleter()
+ get_deleter() noexcept
{ return std::get<1>(_M_t); }
const deleter_type&
- get_deleter() const
+ get_deleter() const noexcept
{ return std::get<1>(_M_t); }
- explicit operator bool() const
+ explicit operator bool() const noexcept
{ return get() == pointer() ? false : true; }
// Modifiers.
pointer
- release()
+ release() noexcept
{
pointer __p = get();
std::get<0>(_M_t) = pointer();
@@ -237,7 +243,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- reset(pointer __p = pointer())
+ reset(pointer __p = pointer()) noexcept
{
using std::swap;
swap(std::get<0>(_M_t), __p);
@@ -246,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- swap(unique_ptr& __u)
+ swap(unique_ptr& __u) noexcept
{
using std::swap;
swap(_M_t, __u._M_t);
@@ -273,48 +279,54 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Dp deleter_type;
// Constructors.
- constexpr unique_ptr()
+ constexpr unique_ptr() noexcept
: _M_t()
{ static_assert(!std::is_pointer<deleter_type>::value,
"constructed with null function pointer deleter"); }
explicit
- unique_ptr(pointer __p)
+ unique_ptr(pointer __p) noexcept
: _M_t(__p, deleter_type())
{ static_assert(!std::is_pointer<deleter_type>::value,
"constructed with null function pointer deleter"); }
unique_ptr(pointer __p,
typename std::conditional<std::is_reference<deleter_type>::value,
- deleter_type, const deleter_type&>::type __d)
+ deleter_type, const deleter_type&>::type __d) noexcept
: _M_t(__p, __d) { }
- unique_ptr(pointer __p,
- typename std::remove_reference<deleter_type>::type && __d)
+ unique_ptr(pointer __p, typename
+ std::remove_reference<deleter_type>::type && __d) noexcept
: _M_t(std::move(__p), std::move(__d))
{ static_assert(!std::is_reference<deleter_type>::value,
"rvalue deleter bound to reference"); }
- constexpr unique_ptr(nullptr_t)
+ constexpr unique_ptr(nullptr_t) noexcept
: _M_t()
{ static_assert(!std::is_pointer<deleter_type>::value,
"constructed with null function pointer deleter"); }
// Move constructors.
- unique_ptr(unique_ptr&& __u)
+ unique_ptr(unique_ptr&& __u) noexcept
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
template<typename _Up, typename _Ep>
- unique_ptr(unique_ptr<_Up, _Ep>&& __u)
+ unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
: _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
{ }
// Destructor.
- ~unique_ptr() { reset(); }
+ ~unique_ptr()
+ {
+ auto& __ptr = std::get<0>(_M_t);
+ if (__ptr != nullptr)
+ get_deleter()(__ptr);
+ __ptr = pointer();
+ }
// Assignment.
unique_ptr&
- operator=(unique_ptr&& __u)
+ operator=(unique_ptr&& __u) noexcept
{
reset(__u.release());
get_deleter() = std::forward<deleter_type>(__u.get_deleter());
@@ -323,7 +335,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Up, typename _Ep>
unique_ptr&
- operator=(unique_ptr<_Up, _Ep>&& __u)
+ operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
{
reset(__u.release());
get_deleter() = std::forward<_Ep>(__u.get_deleter());
@@ -331,7 +343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
unique_ptr&
- operator=(nullptr_t)
+ operator=(nullptr_t) noexcept
{
reset();
return *this;
@@ -346,23 +358,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
pointer
- get() const
+ get() const noexcept
{ return std::get<0>(_M_t); }
deleter_type&
- get_deleter()
+ get_deleter() noexcept
{ return std::get<1>(_M_t); }
const deleter_type&
- get_deleter() const
+ get_deleter() const noexcept
{ return std::get<1>(_M_t); }
- explicit operator bool() const
+ explicit operator bool() const noexcept
{ return get() == pointer() ? false : true; }
// Modifiers.
pointer
- release()
+ release() noexcept
{
pointer __p = get();
std::get<0>(_M_t) = pointer();
@@ -370,7 +382,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- reset(pointer __p = pointer())
+ reset(pointer __p = pointer()) noexcept
{
using std::swap;
swap(std::get<0>(_M_t), __p);
@@ -379,7 +391,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- reset(nullptr_t)
+ reset(nullptr_t) noexcept
{
pointer __p = get();
std::get<0>(_M_t) = pointer();
@@ -392,7 +404,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void reset(_Up) = delete;
void
- swap(unique_ptr& __u)
+ swap(unique_ptr& __u) noexcept
{
using std::swap;
swap(_M_t, __u._M_t);
@@ -420,12 +432,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit
unique_ptr(_Up*, typename std::enable_if<std::is_convertible<_Up*,
pointer>::value>::type* = 0) = delete;
- };
+ };
template<typename _Tp, typename _Dp>
inline void
swap(unique_ptr<_Tp, _Dp>& __x,
- unique_ptr<_Tp, _Dp>& __y)
+ unique_ptr<_Tp, _Dp>& __y) noexcept
{ __x.swap(__y); }
template<typename _Tp, typename _Dp,
@@ -437,66 +449,115 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp, typename _Dp>
inline bool
- operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
- { return __x.get() == nullptr; }
+ operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
+ { return !__x; }
template<typename _Tp, typename _Dp>
inline bool
- operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __y)
- { return nullptr == __y.get(); }
+ operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
+ { return !__x; }
template<typename _Tp, typename _Dp,
typename _Up, typename _Ep>
inline bool
operator!=(const unique_ptr<_Tp, _Dp>& __x,
const unique_ptr<_Up, _Ep>& __y)
- { return !(__x.get() == __y.get()); }
+ { return __x.get() != __y.get(); }
template<typename _Tp, typename _Dp>
inline bool
- operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
- { return __x.get() != nullptr; }
+ operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
+ { return (bool)__x; }
template<typename _Tp, typename _Dp>
inline bool
- operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __y)
- { return nullptr != __y.get(); }
+ operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
+ { return (bool)__x; }
template<typename _Tp, typename _Dp,
typename _Up, typename _Ep>
inline bool
operator<(const unique_ptr<_Tp, _Dp>& __x,
const unique_ptr<_Up, _Ep>& __y)
- { return __x.get() < __y.get(); }
+ {
+ typedef typename
+ std::common_type<typename unique_ptr<_Tp, _Dp>::pointer,
+ typename unique_ptr<_Up, _Ep>::pointer>::type _CT;
+ return std::less<_CT>()(__x.get(), __y.get());
+ }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+ { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
+ nullptr); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+ { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
+ __x.get()); }
template<typename _Tp, typename _Dp,
typename _Up, typename _Ep>
inline bool
operator<=(const unique_ptr<_Tp, _Dp>& __x,
const unique_ptr<_Up, _Ep>& __y)
- { return !(__y.get() < __x.get()); }
+ { return !(__y < __x); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+ { return !(nullptr < __x); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+ { return !(__x < nullptr); }
template<typename _Tp, typename _Dp,
typename _Up, typename _Ep>
inline bool
operator>(const unique_ptr<_Tp, _Dp>& __x,
const unique_ptr<_Up, _Ep>& __y)
- { return __y.get() < __x.get(); }
+ { return (__y < __x); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+ { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
+ __x.get()); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+ { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
+ nullptr); }
template<typename _Tp, typename _Dp,
typename _Up, typename _Ep>
inline bool
operator>=(const unique_ptr<_Tp, _Dp>& __x,
const unique_ptr<_Up, _Ep>& __y)
- { return !(__x.get() < __y.get()); }
+ { return !(__x < __y); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+ { return !(__x < nullptr); }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+ { return !(nullptr < __x); }
/// std::hash specialization for unique_ptr.
template<typename _Tp, typename _Dp>
struct hash<unique_ptr<_Tp, _Dp>>
- : public std::unary_function<unique_ptr<_Tp, _Dp>, size_t>
+ : public __hash_base<size_t, unique_ptr<_Tp, _Dp>>
{
size_t
- operator()(const unique_ptr<_Tp, _Dp>& __u) const
+ operator()(const unique_ptr<_Tp, _Dp>& __u) const noexcept
{
typedef unique_ptr<_Tp, _Dp> _UP;
return std::hash<typename _UP::pointer>()(__u.get());
diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h
index c77bab12fb..37e570f1dc 100644
--- a/libstdc++-v3/include/bits/unordered_map.h
+++ b/libstdc++-v3/include/bits/unordered_map.h
@@ -1,6 +1,6 @@
// unordered_map implementation -*- C++ -*-
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,14 +40,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
class _Hash = hash<_Key>,
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
- bool __cache_hash_code = false>
+ bool __cache_hash_code =
+ __not_<__and_<is_integral<_Key>, is_empty<_Hash>,
+ integral_constant<bool, !__is_final(_Hash)>,
+ __detail::__is_noexcept_hash<_Key, _Hash>>>::value>
class __unordered_map
: public _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
- __cache_hash_code, false, true>
+ __cache_hash_code, false, true>,
+ __check_copy_constructible<_Alloc>
{
typedef _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
@@ -109,7 +113,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
class _Hash = hash<_Key>,
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
- bool __cache_hash_code = false>
+ bool __cache_hash_code =
+ __not_<__and_<is_integral<_Key>, is_empty<_Hash>,
+ integral_constant<bool, !__is_final(_Hash)>,
+ __detail::__is_noexcept_hash<_Key, _Hash>>>::value>
class __unordered_multimap
: public _Hashtable<_Key, std::pair<const _Key, _Tp>,
_Alloc,
@@ -117,7 +124,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
- __cache_hash_code, false, false>
+ __cache_hash_code, false, false>,
+ __check_copy_constructible<_Alloc>
{
typedef _Hashtable<_Key, std::pair<const _Key, _Tp>,
_Alloc,
diff --git a/libstdc++-v3/include/bits/unordered_set.h b/libstdc++-v3/include/bits/unordered_set.h
index 38350bc390..d65c79ccea 100644
--- a/libstdc++-v3/include/bits/unordered_set.h
+++ b/libstdc++-v3/include/bits/unordered_set.h
@@ -1,6 +1,6 @@
// unordered_set implementation -*- C++ -*-
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,14 +40,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
class _Hash = hash<_Value>,
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value>,
- bool __cache_hash_code = false>
+ bool __cache_hash_code =
+ __not_<__and_<is_integral<_Value>, is_empty<_Hash>,
+ integral_constant<bool, !__is_final(_Hash)>,
+ __detail::__is_noexcept_hash<_Value, _Hash>>>::value>
class __unordered_set
: public _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
- __cache_hash_code, true, true>
+ __cache_hash_code, true, true>,
+ __check_copy_constructible<_Alloc>
{
typedef _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
@@ -63,7 +67,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
-
+ typedef typename _Base::iterator iterator;
+ typedef typename _Base::const_iterator const_iterator;
+
explicit
__unordered_set(size_type __n = 10,
const hasher& __hf = hasher(),
@@ -103,20 +109,34 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
this->insert(__l.begin(), __l.end());
return *this;
}
+
+ using _Base::insert;
+
+ std::pair<iterator, bool>
+ insert(value_type&& __v)
+ { return this->_M_insert(std::move(__v), std::true_type()); }
+
+ iterator
+ insert(const_iterator, value_type&& __v)
+ { return insert(std::move(__v)).first; }
};
template<class _Value,
class _Hash = hash<_Value>,
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value>,
- bool __cache_hash_code = false>
+ bool __cache_hash_code =
+ __not_<__and_<is_integral<_Value>, is_empty<_Hash>,
+ integral_constant<bool, !__is_final(_Hash)>,
+ __detail::__is_noexcept_hash<_Value, _Hash>>>::value>
class __unordered_multiset
: public _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
- __cache_hash_code, true, false>
+ __cache_hash_code, true, false>,
+ __check_copy_constructible<_Alloc>
{
typedef _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
@@ -132,7 +152,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
-
+ typedef typename _Base::iterator iterator;
+ typedef typename _Base::const_iterator const_iterator;
+
explicit
__unordered_multiset(size_type __n = 10,
const hasher& __hf = hasher(),
@@ -173,6 +195,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
this->insert(__l.begin(), __l.end());
return *this;
}
+
+ using _Base::insert;
+
+ iterator
+ insert(value_type&& __v)
+ { return this->_M_insert(std::move(__v), std::false_type()); }
+
+ iterator
+ insert(const_iterator, value_type&& __v)
+ { return insert(std::move(__v)); }
};
template<class _Value, class _Hash, class _Pred, class _Alloc,
diff --git a/libstdc++-v3/include/bits/uses_allocator.h b/libstdc++-v3/include/bits/uses_allocator.h
new file mode 100644
index 0000000000..49b5409c15
--- /dev/null
+++ b/libstdc++-v3/include/bits/uses_allocator.h
@@ -0,0 +1,109 @@
+// Uses-allocator Construction -*- C++ -*-
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef _USES_ALLOCATOR_H
+#define _USES_ALLOCATOR_H 1
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/c++0x_warning.h>
+#else
+
+#include <type_traits>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /// [allocator.tag]
+ struct allocator_arg_t { };
+
+ constexpr allocator_arg_t allocator_arg = allocator_arg_t();
+
+_GLIBCXX_HAS_NESTED_TYPE(allocator_type)
+
+ template<typename _Tp, typename _Alloc,
+ bool = __has_allocator_type<_Tp>::value>
+ struct __uses_allocator_helper
+ : public false_type { };
+
+ template<typename _Tp, typename _Alloc>
+ struct __uses_allocator_helper<_Tp, _Alloc, true>
+ : public integral_constant<bool, is_convertible<_Alloc,
+ typename _Tp::allocator_type>::value>
+ { };
+
+ /// [allocator.uses.trait]
+ template<typename _Tp, typename _Alloc>
+ struct uses_allocator
+ : public integral_constant<bool,
+ __uses_allocator_helper<_Tp, _Alloc>::value>
+ { };
+
+ template<typename _Tp, typename _Alloc, typename... _Args>
+ struct __uses_allocator_arg
+ : is_constructible<_Tp, _Alloc, _Args...>
+ { static_assert( uses_allocator<_Tp, _Alloc>::value, "uses allocator" ); };
+
+ struct __uses_alloc_base { };
+ struct __uses_alloc0 : __uses_alloc_base
+ { struct _Anything { _Anything(...) { } } _M_a; };
+ template<typename _Alloc>
+ struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; };
+ template<typename _Alloc>
+ struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; };
+
+ template<bool, typename _Alloc, typename... _Args>
+ struct __uses_alloc;
+
+ template<typename _Tp, typename _Alloc, typename... _Args>
+ struct __uses_alloc<true, _Tp, _Alloc, _Args...>
+ : conditional<
+ is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>::value,
+ __uses_alloc1<_Alloc>,
+ __uses_alloc2<_Alloc>>::type
+ { };
+
+ template<typename _Tp, typename _Alloc, typename... _Args>
+ struct __uses_alloc<false, _Tp, _Alloc, _Args...>
+ : __uses_alloc0 { };
+
+ template<typename _Tp, typename _Alloc, typename... _Args>
+ struct __uses_alloc_impl
+ : __uses_alloc<uses_allocator<_Tp, _Alloc>::value, _Tp, _Alloc, _Args...>
+ { };
+
+ template<typename _Tp, typename _Alloc, typename... _Args>
+ __uses_alloc_impl<_Tp, _Alloc, _Args...>
+ __use_alloc(const _Alloc& __a)
+ {
+ __uses_alloc_impl<_Tp, _Alloc, _Args...> __ret;
+ __ret._M_a = &__a;
+ return __ret;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif
+#endif
diff --git a/libstdc++-v3/include/bits/vector.tcc b/libstdc++-v3/include/bits/vector.tcc
index 7871af2d7f..efa82ee374 100644
--- a/libstdc++-v3/include/bits/vector.tcc
+++ b/libstdc++-v3/include/bits/vector.tcc
@@ -72,8 +72,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
const size_type __old_size = size();
pointer __tmp = _M_allocate_and_copy(__n,
- _GLIBCXX_MAKE_MOVE_ITERATOR(this->_M_impl._M_start),
- _GLIBCXX_MAKE_MOVE_ITERATOR(this->_M_impl._M_finish));
+ _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_start),
+ _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_finish));
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
@@ -94,12 +94,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
- this->_M_impl.construct(this->_M_impl._M_finish,
- std::forward<_Args>(__args)...);
+ _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+ std::forward<_Args>(__args)...);
++this->_M_impl._M_finish;
}
else
- _M_insert_aux(end(), std::forward<_Args>(__args)...);
+ _M_emplace_back_aux(std::forward<_Args>(__args)...);
}
#endif
@@ -112,7 +112,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
&& __position == end())
{
- this->_M_impl.construct(this->_M_impl._M_finish, __x);
+ _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, __x);
++this->_M_impl._M_finish;
}
else
@@ -138,7 +138,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (__position + 1 != end())
_GLIBCXX_MOVE3(__position + 1, end(), __position);
--this->_M_impl._M_finish;
- this->_M_impl.destroy(this->_M_impl._M_finish);
+ _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
return __position;
}
@@ -163,6 +163,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (&__x != this)
{
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ if (_Alloc_traits::_S_propagate_on_copy_assign())
+ {
+ if (!_Alloc_traits::_S_always_equal()
+ && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
+ {
+ // replacement allocator cannot free existing storage
+ this->clear();
+ _M_deallocate(this->_M_impl._M_start,
+ this->_M_impl._M_end_of_storage
+ - this->_M_impl._M_start);
+ this->_M_impl._M_start = nullptr;
+ this->_M_impl._M_finish = nullptr;
+ this->_M_impl._M_end_of_storage = nullptr;
+ }
+ std::__alloc_on_copy(_M_get_Tp_allocator(),
+ __x._M_get_Tp_allocator());
+ }
+#endif
const size_type __xlen = __x.size();
if (__xlen > capacity())
{
@@ -280,8 +299,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
&& __position == end())
{
- this->_M_impl.construct(this->_M_impl._M_finish,
- std::forward<_Args>(__args)...);
+ _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+ std::forward<_Args>(__args)...);
++this->_M_impl._M_finish;
}
else
@@ -303,9 +322,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
- this->_M_impl.construct(this->_M_impl._M_finish,
- _GLIBCXX_MOVE(*(this->_M_impl._M_finish
- - 1)));
+ _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+ _GLIBCXX_MOVE(*(this->_M_impl._M_finish
+ - 1)));
++this->_M_impl._M_finish;
#ifndef __GXX_EXPERIMENTAL_CXX0X__
_Tp __x_copy = __x;
@@ -332,30 +351,32 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// case, where the moves could alter a new element belonging
// to the existing vector. This is an issue only for callers
// taking the element by const lvalue ref (see 23.1/13).
- this->_M_impl.construct(__new_start + __elems_before,
+ _Alloc_traits::construct(this->_M_impl,
+ __new_start + __elems_before,
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- std::forward<_Args>(__args)...);
+ std::forward<_Args>(__args)...);
#else
- __x);
+ __x);
#endif
__new_finish = 0;
- __new_finish =
- std::__uninitialized_move_a(this->_M_impl._M_start,
- __position.base(), __new_start,
- _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (this->_M_impl._M_start, __position.base(),
+ __new_start, _M_get_Tp_allocator());
+
++__new_finish;
- __new_finish =
- std::__uninitialized_move_a(__position.base(),
- this->_M_impl._M_finish,
- __new_finish,
- _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (__position.base(), this->_M_impl._M_finish,
+ __new_finish, _M_get_Tp_allocator());
}
__catch(...)
{
if (!__new_finish)
- this->_M_impl.destroy(__new_start + __elems_before);
+ _Alloc_traits::destroy(this->_M_impl,
+ __new_start + __elems_before);
else
std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
_M_deallocate(__new_start, __len);
@@ -372,6 +393,50 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Tp, typename _Alloc>
+ template<typename... _Args>
+ void
+ vector<_Tp, _Alloc>::
+ _M_emplace_back_aux(_Args&&... __args)
+ {
+ const size_type __len =
+ _M_check_len(size_type(1), "vector::_M_emplace_back_aux");
+ pointer __new_start(this->_M_allocate(__len));
+ pointer __new_finish(__new_start);
+ __try
+ {
+ _Alloc_traits::construct(this->_M_impl, __new_start + size(),
+ std::forward<_Args>(__args)...);
+ __new_finish = 0;
+
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (this->_M_impl._M_start, this->_M_impl._M_finish,
+ __new_start, _M_get_Tp_allocator());
+
+ ++__new_finish;
+ }
+ __catch(...)
+ {
+ if (!__new_finish)
+ _Alloc_traits::destroy(this->_M_impl, __new_start + size());
+ else
+ std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
+ _M_deallocate(__new_start, __len);
+ __throw_exception_again;
+ }
+ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+ _M_get_Tp_allocator());
+ _M_deallocate(this->_M_impl._M_start,
+ this->_M_impl._M_end_of_storage
+ - this->_M_impl._M_start);
+ this->_M_impl._M_start = __new_start;
+ this->_M_impl._M_finish = __new_finish;
+ this->_M_impl._M_end_of_storage = __new_start + __len;
+ }
+#endif
+
template<typename _Tp, typename _Alloc>
void
vector<_Tp, _Alloc>::
@@ -426,18 +491,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_get_Tp_allocator());
__new_finish = 0;
- __new_finish =
- std::__uninitialized_move_a(this->_M_impl._M_start,
- __position.base(),
- __new_start,
- _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (this->_M_impl._M_start, __position.base(),
+ __new_start, _M_get_Tp_allocator());
+
__new_finish += __n;
- __new_finish =
- std::__uninitialized_move_a(__position.base(),
- this->_M_impl._M_finish,
- __new_finish,
- _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (__position.base(), this->_M_impl._M_finish,
+ __new_finish, _M_get_Tp_allocator());
}
__catch(...)
{
@@ -487,11 +551,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
pointer __new_finish(__new_start);
__try
{
- __new_finish =
- std::__uninitialized_move_a(this->_M_impl._M_start,
- this->_M_impl._M_finish,
- __new_start,
- _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (this->_M_impl._M_start, this->_M_impl._M_finish,
+ __new_start, _M_get_Tp_allocator());
std::__uninitialized_default_n_a(__new_finish, __n,
_M_get_Tp_allocator());
__new_finish += __n;
@@ -514,6 +577,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
}
}
+
+ template<typename _Tp, typename _Alloc>
+ bool
+ vector<_Tp, _Alloc>::
+ _M_shrink_to_fit()
+ {
+ if (capacity() == size())
+ return false;
+ return std::__shrink_to_fit_aux<vector>::_S_do_it(*this);
+ }
#endif
template<typename _Tp, typename _Alloc>
@@ -580,20 +653,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
pointer __new_finish(__new_start);
__try
{
- __new_finish =
- std::__uninitialized_move_a(this->_M_impl._M_start,
- __position.base(),
- __new_start,
- _M_get_Tp_allocator());
- __new_finish =
- std::__uninitialized_copy_a(__first, __last,
- __new_finish,
- _M_get_Tp_allocator());
- __new_finish =
- std::__uninitialized_move_a(__position.base(),
- this->_M_impl._M_finish,
- __new_finish,
- _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (this->_M_impl._M_start, __position.base(),
+ __new_start, _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_copy_a(__first, __last,
+ __new_finish,
+ _M_get_Tp_allocator());
+ __new_finish
+ = std::__uninitialized_move_if_noexcept_a
+ (__position.base(), this->_M_impl._M_finish,
+ __new_finish, _M_get_Tp_allocator());
}
__catch(...)
{
@@ -616,24 +687,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// vector<bool>
-
template<typename _Alloc>
void
vector<bool, _Alloc>::
- reserve(size_type __n)
+ _M_reallocate(size_type __n)
{
- if (__n > this->max_size())
- __throw_length_error(__N("vector::reserve"));
- if (this->capacity() < __n)
- {
- _Bit_type* __q = this->_M_allocate(__n);
- this->_M_impl._M_finish = _M_copy_aligned(begin(), end(),
- iterator(__q, 0));
- this->_M_deallocate();
- this->_M_impl._M_start = iterator(__q, 0);
- this->_M_impl._M_end_of_storage = (__q + (__n + int(_S_word_bit) - 1)
- / int(_S_word_bit));
- }
+ _Bit_type* __q = this->_M_allocate(__n);
+ this->_M_impl._M_finish = _M_copy_aligned(begin(), end(),
+ iterator(__q, 0));
+ this->_M_deallocate();
+ this->_M_impl._M_start = iterator(__q, 0);
+ this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
}
template<typename _Alloc>
@@ -661,9 +725,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
this->_M_impl._M_finish = std::copy(__position, end(),
__i + difference_type(__n));
this->_M_deallocate();
- this->_M_impl._M_end_of_storage = (__q + ((__len
- + int(_S_word_bit) - 1)
- / int(_S_word_bit)));
+ this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
this->_M_impl._M_start = iterator(__q, 0);
}
}
@@ -696,10 +758,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
__i = std::copy(__first, __last, __i);
this->_M_impl._M_finish = std::copy(__position, end(), __i);
this->_M_deallocate();
- this->_M_impl._M_end_of_storage = (__q
- + ((__len
- + int(_S_word_bit) - 1)
- / int(_S_word_bit)));
+ this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
this->_M_impl._M_start = iterator(__q, 0);
}
}
@@ -727,13 +786,29 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*__i++ = __x;
this->_M_impl._M_finish = std::copy(__position, end(), __i);
this->_M_deallocate();
- this->_M_impl._M_end_of_storage = (__q + ((__len
- + int(_S_word_bit) - 1)
- / int(_S_word_bit)));
+ this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
this->_M_impl._M_start = iterator(__q, 0);
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Alloc>
+ bool
+ vector<bool, _Alloc>::
+ _M_shrink_to_fit()
+ {
+ if (capacity() - size() < int(_S_word_bit))
+ return false;
+ __try
+ {
+ _M_reallocate(size());
+ return true;
+ }
+ __catch(...)
+ { return false; }
+ }
+#endif
+
_GLIBCXX_END_NAMESPACE_CONTAINER
} // namespace std
@@ -746,7 +821,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Alloc>
size_t
hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>::
- operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>& __b) const
+ operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>& __b) const noexcept
{
size_t __hash = 0;
using _GLIBCXX_STD_C::_S_word_bit;
diff --git a/libstdc++-v3/include/c_global/cinttypes b/libstdc++-v3/include/c_global/cinttypes
index df733407bd..030962bdf3 100644
--- a/libstdc++-v3/include/c_global/cinttypes
+++ b/libstdc++-v3/include/c_global/cinttypes
@@ -1,6 +1,6 @@
// <cinttypes> -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,7 +37,7 @@
#include <cstdint>
-// For 8.11.1/1 (see C99, Note 184)
+// For 27.9.2/3 (see C99, Note 184)
#if _GLIBCXX_HAVE_INTTYPES_H
# ifndef __STDC_FORMAT_MACROS
# define _UNDEF__STDC_FORMAT_MACROS
@@ -59,16 +59,10 @@ namespace std
// functions
using ::imaxabs;
-
- // May collide with _Longlong abs(_Longlong), and is not described
- // anywhere outside the synopsis. Likely, a defect.
- //
- // intmax_t abs(intmax_t)
-
using ::imaxdiv;
- // Likewise, with lldiv_t div(_Longlong, _Longlong).
- //
+ // GCC does not support extended integer types
+ // intmax_t abs(intmax_t)
// imaxdiv_t div(intmax_t, intmax_t)
using ::strtoimax;
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
index a333eb583c..75d1a02e1e 100644
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -1,7 +1,7 @@
// -*- C++ -*- C forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -78,88 +78,102 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- inline double
+#if !defined(__CORRECT_ISO_CPP_MATH_H_PROTO1) \
+ && !defined(__CORRECT_ISO_CPP_MATH_H_PROTO2)
+ inline _GLIBCXX_CONSTEXPR double
abs(double __x)
{ return __builtin_fabs(__x); }
+#endif
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
abs(float __x)
{ return __builtin_fabsf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
abs(long double __x)
{ return __builtin_fabsl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
abs(_Tp __x)
{ return __builtin_fabs(__x); }
using ::acos;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
acos(float __x)
{ return __builtin_acosf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
acos(long double __x)
{ return __builtin_acosl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
acos(_Tp __x)
{ return __builtin_acos(__x); }
using ::asin;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
asin(float __x)
{ return __builtin_asinf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
asin(long double __x)
{ return __builtin_asinl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
asin(_Tp __x)
{ return __builtin_asin(__x); }
using ::atan;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
atan(float __x)
{ return __builtin_atanf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
atan(long double __x)
{ return __builtin_atanl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
atan(_Tp __x)
{ return __builtin_atan(__x); }
using ::atan2;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
atan2(float __y, float __x)
{ return __builtin_atan2f(__y, __x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
atan2(long double __y, long double __x)
{ return __builtin_atan2l(__y, __x); }
+#endif
template<typename _Tp, typename _Up>
- inline
- typename __gnu_cxx::__promote_2<
- typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value,
- _Tp>::__type, _Up>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
atan2(_Tp __y, _Up __x)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
@@ -168,112 +182,142 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using ::ceil;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
ceil(float __x)
{ return __builtin_ceilf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
ceil(long double __x)
{ return __builtin_ceill(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
ceil(_Tp __x)
{ return __builtin_ceil(__x); }
using ::cos;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
cos(float __x)
{ return __builtin_cosf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
cos(long double __x)
{ return __builtin_cosl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
cos(_Tp __x)
{ return __builtin_cos(__x); }
using ::cosh;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
cosh(float __x)
{ return __builtin_coshf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
cosh(long double __x)
{ return __builtin_coshl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
cosh(_Tp __x)
{ return __builtin_cosh(__x); }
using ::exp;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
exp(float __x)
{ return __builtin_expf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
exp(long double __x)
{ return __builtin_expl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
exp(_Tp __x)
{ return __builtin_exp(__x); }
using ::fabs;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
fabs(float __x)
{ return __builtin_fabsf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
fabs(long double __x)
{ return __builtin_fabsl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
fabs(_Tp __x)
{ return __builtin_fabs(__x); }
using ::floor;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
floor(float __x)
{ return __builtin_floorf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
floor(long double __x)
{ return __builtin_floorl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
floor(_Tp __x)
{ return __builtin_floor(__x); }
using ::fmod;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
fmod(float __x, float __y)
{ return __builtin_fmodf(__x, __y); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
fmod(long double __x, long double __y)
{ return __builtin_fmodl(__x, __y); }
+#endif
+
+ template<typename _Tp, typename _Up>
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ fmod(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return fmod(__type(__x), __type(__y));
+ }
using ::frexp;
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
inline float
frexp(float __x, int* __exp)
{ return __builtin_frexpf(__x, __exp); }
@@ -281,63 +325,75 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline long double
frexp(long double __x, int* __exp)
{ return __builtin_frexpl(__x, __exp); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
frexp(_Tp __x, int* __exp)
{ return __builtin_frexp(__x, __exp); }
using ::ldexp;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
ldexp(float __x, int __exp)
{ return __builtin_ldexpf(__x, __exp); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
ldexp(long double __x, int __exp)
{ return __builtin_ldexpl(__x, __exp); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- ldexp(_Tp __x, int __exp)
- { return __builtin_ldexp(__x, __exp); }
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ ldexp(_Tp __x, int __exp)
+ { return __builtin_ldexp(__x, __exp); }
using ::log;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
log(float __x)
{ return __builtin_logf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
log(long double __x)
{ return __builtin_logl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
log(_Tp __x)
{ return __builtin_log(__x); }
using ::log10;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
log10(float __x)
{ return __builtin_log10f(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
log10(long double __x)
{ return __builtin_log10l(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
log10(_Tp __x)
{ return __builtin_log10(__x); }
using ::modf;
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
inline float
modf(float __x, float* __iptr)
{ return __builtin_modff(__x, __iptr); }
@@ -345,14 +401,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline long double
modf(long double __x, long double* __iptr)
{ return __builtin_modfl(__x, __iptr); }
+#endif
using ::pow;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
pow(float __x, float __y)
{ return __builtin_powf(__x, __y); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
pow(long double __x, long double __y)
{ return __builtin_powl(__x, __y); }
@@ -371,13 +429,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pow(long double __x, int __n)
{ return __builtin_powil(__x, __n); }
#endif
+#endif
template<typename _Tp, typename _Up>
- inline
- typename __gnu_cxx::__promote_2<
- typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value,
- _Tp>::__type, _Up>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
pow(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
@@ -386,81 +442,96 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using ::sin;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
sin(float __x)
{ return __builtin_sinf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
sin(long double __x)
{ return __builtin_sinl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
sin(_Tp __x)
{ return __builtin_sin(__x); }
using ::sinh;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
sinh(float __x)
{ return __builtin_sinhf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
sinh(long double __x)
{ return __builtin_sinhl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
sinh(_Tp __x)
{ return __builtin_sinh(__x); }
using ::sqrt;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
sqrt(float __x)
{ return __builtin_sqrtf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
sqrt(long double __x)
{ return __builtin_sqrtl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
sqrt(_Tp __x)
{ return __builtin_sqrt(__x); }
using ::tan;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
tan(float __x)
{ return __builtin_tanf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
tan(long double __x)
{ return __builtin_tanl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
tan(_Tp __x)
{ return __builtin_tan(__x); }
using ::tanh;
- inline float
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+ inline _GLIBCXX_CONSTEXPR float
tanh(float __x)
{ return __builtin_tanhf(__x); }
- inline long double
+ inline _GLIBCXX_CONSTEXPR long double
tanh(long double __x)
{ return __builtin_tanhl(__x); }
+#endif
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
tanh(_Tp __x)
{ return __builtin_tanh(__x); }
@@ -489,131 +560,131 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- inline int
+ constexpr int
fpclassify(float __x)
{ return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
FP_SUBNORMAL, FP_ZERO, __x); }
- inline int
+ constexpr int
fpclassify(double __x)
{ return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
FP_SUBNORMAL, FP_ZERO, __x); }
- inline int
+ constexpr int
fpclassify(long double __x)
{ return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
FP_SUBNORMAL, FP_ZERO, __x); }
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- int>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ int>::__type
fpclassify(_Tp __x)
{ return __x != 0 ? FP_NORMAL : FP_ZERO; }
- inline bool
+ constexpr bool
isfinite(float __x)
{ return __builtin_isfinite(__x); }
- inline bool
+ constexpr bool
isfinite(double __x)
{ return __builtin_isfinite(__x); }
- inline bool
+ constexpr bool
isfinite(long double __x)
{ return __builtin_isfinite(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
isfinite(_Tp __x)
{ return true; }
- inline bool
+ constexpr bool
isinf(float __x)
{ return __builtin_isinf(__x); }
- inline bool
+ constexpr bool
isinf(double __x)
{ return __builtin_isinf(__x); }
- inline bool
+ constexpr bool
isinf(long double __x)
{ return __builtin_isinf(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
isinf(_Tp __x)
{ return false; }
- inline bool
+ constexpr bool
isnan(float __x)
{ return __builtin_isnan(__x); }
- inline bool
+ constexpr bool
isnan(double __x)
{ return __builtin_isnan(__x); }
- inline bool
+ constexpr bool
isnan(long double __x)
{ return __builtin_isnan(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
isnan(_Tp __x)
{ return false; }
- inline bool
+ constexpr bool
isnormal(float __x)
{ return __builtin_isnormal(__x); }
- inline bool
+ constexpr bool
isnormal(double __x)
{ return __builtin_isnormal(__x); }
- inline bool
+ constexpr bool
isnormal(long double __x)
{ return __builtin_isnormal(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
isnormal(_Tp __x)
{ return __x != 0 ? true : false; }
- inline bool
+ constexpr bool
signbit(float __x)
{ return __builtin_signbit(__x); }
- inline bool
+ constexpr bool
signbit(double __x)
{ return __builtin_signbit(__x); }
- inline bool
+ constexpr bool
signbit(long double __x)
{ return __builtin_signbit(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
signbit(_Tp __x)
{ return __x < 0 ? true : false; }
- inline bool
+ constexpr bool
isgreater(float __x, float __y)
{ return __builtin_isgreater(__x, __y); }
- inline bool
+ constexpr bool
isgreater(double __x, double __y)
{ return __builtin_isgreater(__x, __y); }
- inline bool
+ constexpr bool
isgreater(long double __x, long double __y)
{ return __builtin_isgreater(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename
+ constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isgreater(_Tp __x, _Up __y)
@@ -622,20 +693,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __builtin_isgreater(__type(__x), __type(__y));
}
- inline bool
+ constexpr bool
isgreaterequal(float __x, float __y)
{ return __builtin_isgreaterequal(__x, __y); }
- inline bool
+ constexpr bool
isgreaterequal(double __x, double __y)
{ return __builtin_isgreaterequal(__x, __y); }
- inline bool
+ constexpr bool
isgreaterequal(long double __x, long double __y)
{ return __builtin_isgreaterequal(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename
+ constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isgreaterequal(_Tp __x, _Up __y)
@@ -644,20 +715,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __builtin_isgreaterequal(__type(__x), __type(__y));
}
- inline bool
+ constexpr bool
isless(float __x, float __y)
{ return __builtin_isless(__x, __y); }
- inline bool
+ constexpr bool
isless(double __x, double __y)
{ return __builtin_isless(__x, __y); }
- inline bool
+ constexpr bool
isless(long double __x, long double __y)
{ return __builtin_isless(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename
+ constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isless(_Tp __x, _Up __y)
@@ -666,20 +737,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __builtin_isless(__type(__x), __type(__y));
}
- inline bool
+ constexpr bool
islessequal(float __x, float __y)
{ return __builtin_islessequal(__x, __y); }
- inline bool
+ constexpr bool
islessequal(double __x, double __y)
{ return __builtin_islessequal(__x, __y); }
- inline bool
+ constexpr bool
islessequal(long double __x, long double __y)
{ return __builtin_islessequal(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename
+ constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
islessequal(_Tp __x, _Up __y)
@@ -688,20 +759,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __builtin_islessequal(__type(__x), __type(__y));
}
- inline bool
+ constexpr bool
islessgreater(float __x, float __y)
{ return __builtin_islessgreater(__x, __y); }
- inline bool
+ constexpr bool
islessgreater(double __x, double __y)
{ return __builtin_islessgreater(__x, __y); }
- inline bool
+ constexpr bool
islessgreater(long double __x, long double __y)
{ return __builtin_islessgreater(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename
+ constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
islessgreater(_Tp __x, _Up __y)
@@ -710,20 +781,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __builtin_islessgreater(__type(__x), __type(__y));
}
- inline bool
+ constexpr bool
isunordered(float __x, float __y)
{ return __builtin_isunordered(__x, __y); }
- inline bool
+ constexpr bool
isunordered(double __x, double __y)
{ return __builtin_isunordered(__x, __y); }
- inline bool
+ constexpr bool
isunordered(long double __x, long double __y)
{ return __builtin_isunordered(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename
+ constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isunordered(_Tp __x, _Up __y)
@@ -1111,433 +1182,396 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using ::truncl;
/// Additional overloads.
- inline float
+ constexpr float
acosh(float __x)
{ return __builtin_acoshf(__x); }
- inline long double
+ constexpr long double
acosh(long double __x)
{ return __builtin_acoshl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
acosh(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return acosh(__type(__x));
- }
+ { return __builtin_acosh(__x); }
- inline float
+ constexpr float
asinh(float __x)
{ return __builtin_asinhf(__x); }
- inline long double
+ constexpr long double
asinh(long double __x)
{ return __builtin_asinhl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
asinh(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return asinh(__type(__x));
- }
+ { return __builtin_asinh(__x); }
- inline float
+ constexpr float
atanh(float __x)
{ return __builtin_atanhf(__x); }
- inline long double
+ constexpr long double
atanh(long double __x)
{ return __builtin_atanhl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
atanh(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return atanh(__type(__x));
- }
+ { return __builtin_atanh(__x); }
- inline float
+ constexpr float
cbrt(float __x)
{ return __builtin_cbrtf(__x); }
- inline long double
+ constexpr long double
cbrt(long double __x)
{ return __builtin_cbrtl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
cbrt(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return cbrt(__type(__x));
- }
+ { return __builtin_cbrt(__x); }
- inline float
+ constexpr float
copysign(float __x, float __y)
{ return __builtin_copysignf(__x, __y); }
- inline long double
+ constexpr long double
copysign(long double __x, long double __y)
{ return __builtin_copysignl(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
copysign(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return copysign(__type(__x), __type(__y));
}
- inline float
+ constexpr float
erf(float __x)
{ return __builtin_erff(__x); }
- inline long double
+ constexpr long double
erf(long double __x)
{ return __builtin_erfl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
erf(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return erf(__type(__x));
- }
+ { return __builtin_erf(__x); }
- inline float
+ constexpr float
erfc(float __x)
{ return __builtin_erfcf(__x); }
- inline long double
+ constexpr long double
erfc(long double __x)
{ return __builtin_erfcl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
erfc(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return erfc(__type(__x));
- }
+ { return __builtin_erfc(__x); }
- inline float
+ constexpr float
exp2(float __x)
{ return __builtin_exp2f(__x); }
- inline long double
+ constexpr long double
exp2(long double __x)
{ return __builtin_exp2l(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
exp2(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return exp2(__type(__x));
- }
+ { return __builtin_exp2(__x); }
- inline float
+ constexpr float
expm1(float __x)
{ return __builtin_expm1f(__x); }
- inline long double
+ constexpr long double
expm1(long double __x)
{ return __builtin_expm1l(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
expm1(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return expm1(__type(__x));
- }
+ { return __builtin_expm1(__x); }
- inline float
+ constexpr float
fdim(float __x, float __y)
{ return __builtin_fdimf(__x, __y); }
- inline long double
+ constexpr long double
fdim(long double __x, long double __y)
{ return __builtin_fdiml(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fdim(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fdim(__type(__x), __type(__y));
}
- inline float
+ constexpr float
fma(float __x, float __y, float __z)
{ return __builtin_fmaf(__x, __y, __z); }
- inline long double
+ constexpr long double
fma(long double __x, long double __y, long double __z)
{ return __builtin_fmal(__x, __y, __z); }
template<typename _Tp, typename _Up, typename _Vp>
- inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
+ constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
fma(_Tp __x, _Up __y, _Vp __z)
{
typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
return fma(__type(__x), __type(__y), __type(__z));
}
- inline float
+ constexpr float
fmax(float __x, float __y)
{ return __builtin_fmaxf(__x, __y); }
- inline long double
+ constexpr long double
fmax(long double __x, long double __y)
{ return __builtin_fmaxl(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fmax(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fmax(__type(__x), __type(__y));
}
- inline float
+ constexpr float
fmin(float __x, float __y)
{ return __builtin_fminf(__x, __y); }
- inline long double
+ constexpr long double
fmin(long double __x, long double __y)
{ return __builtin_fminl(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fmin(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fmin(__type(__x), __type(__y));
}
- inline float
+ constexpr float
hypot(float __x, float __y)
{ return __builtin_hypotf(__x, __y); }
- inline long double
+ constexpr long double
hypot(long double __x, long double __y)
{ return __builtin_hypotl(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
hypot(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return hypot(__type(__x), __type(__y));
}
- inline int
+ constexpr int
ilogb(float __x)
{ return __builtin_ilogbf(__x); }
- inline int
+ constexpr int
ilogb(long double __x)
{ return __builtin_ilogbl(__x); }
template<typename _Tp>
- inline int
+ constexpr
+ typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ int>::__type
ilogb(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return ilogb(__type(__x));
- }
+ { return __builtin_ilogb(__x); }
- inline float
+ constexpr float
lgamma(float __x)
{ return __builtin_lgammaf(__x); }
- inline long double
+ constexpr long double
lgamma(long double __x)
{ return __builtin_lgammal(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
lgamma(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return lgamma(__type(__x));
- }
+ { return __builtin_lgamma(__x); }
- inline long long
+ constexpr long long
llrint(float __x)
{ return __builtin_llrintf(__x); }
- inline long long
+ constexpr long long
llrint(long double __x)
{ return __builtin_llrintl(__x); }
template<typename _Tp>
- inline long long
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long long>::__type
llrint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return llrint(__type(__x));
- }
+ { return __builtin_llrint(__x); }
- inline long long
+ constexpr long long
llround(float __x)
{ return __builtin_llroundf(__x); }
- inline long long
+ constexpr long long
llround(long double __x)
{ return __builtin_llroundl(__x); }
template<typename _Tp>
- inline long long
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long long>::__type
llround(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return llround(__type(__x));
- }
+ { return __builtin_llround(__x); }
- inline float
+ constexpr float
log1p(float __x)
{ return __builtin_log1pf(__x); }
- inline long double
+ constexpr long double
log1p(long double __x)
{ return __builtin_log1pl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
log1p(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return log1p(__type(__x));
- }
+ { return __builtin_log1p(__x); }
// DR 568.
- inline float
+ constexpr float
log2(float __x)
{ return __builtin_log2f(__x); }
- inline long double
+ constexpr long double
log2(long double __x)
{ return __builtin_log2l(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
log2(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return log2(__type(__x));
- }
+ { return __builtin_log2(__x); }
- inline float
+ constexpr float
logb(float __x)
{ return __builtin_logbf(__x); }
- inline long double
+ constexpr long double
logb(long double __x)
{ return __builtin_logbl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
logb(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return logb(__type(__x));
- }
+ { return __builtin_logb(__x); }
- inline long
+ constexpr long
lrint(float __x)
{ return __builtin_lrintf(__x); }
- inline long
+ constexpr long
lrint(long double __x)
{ return __builtin_lrintl(__x); }
template<typename _Tp>
- inline long
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long>::__type
lrint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return lrint(__type(__x));
- }
+ { return __builtin_lrint(__x); }
- inline long
+ constexpr long
lround(float __x)
{ return __builtin_lroundf(__x); }
- inline long
+ constexpr long
lround(long double __x)
{ return __builtin_lroundl(__x); }
template<typename _Tp>
- inline long
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long>::__type
lround(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return lround(__type(__x));
- }
+ { return __builtin_lround(__x); }
- inline float
+ constexpr float
nearbyint(float __x)
{ return __builtin_nearbyintf(__x); }
- inline long double
+ constexpr long double
nearbyint(long double __x)
{ return __builtin_nearbyintl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
nearbyint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return nearbyint(__type(__x));
- }
+ { return __builtin_nearbyint(__x); }
- inline float
+ constexpr float
nextafter(float __x, float __y)
{ return __builtin_nextafterf(__x, __y); }
- inline long double
+ constexpr long double
nextafter(long double __x, long double __y)
{ return __builtin_nextafterl(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
nextafter(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return nextafter(__type(__x), __type(__y));
}
- inline float
+ constexpr float
nexttoward(float __x, long double __y)
{ return __builtin_nexttowardf(__x, __y); }
- inline long double
+ constexpr long double
nexttoward(long double __x, long double __y)
{ return __builtin_nexttowardl(__x, __y); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
nexttoward(_Tp __x, long double __y)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return nexttoward(__type(__x), __y);
- }
+ { return __builtin_nexttoward(__x, __y); }
- inline float
+ constexpr float
remainder(float __x, float __y)
{ return __builtin_remainderf(__x, __y); }
- inline long double
+ constexpr long double
remainder(long double __x, long double __y)
{ return __builtin_remainderl(__x, __y); }
template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+ constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
remainder(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
@@ -1560,101 +1594,89 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return remquo(__type(__x), __type(__y), __pquo);
}
- inline float
+ constexpr float
rint(float __x)
{ return __builtin_rintf(__x); }
- inline long double
+ constexpr long double
rint(long double __x)
{ return __builtin_rintl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
rint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return rint(__type(__x));
- }
+ { return __builtin_rint(__x); }
- inline float
+ constexpr float
round(float __x)
{ return __builtin_roundf(__x); }
- inline long double
+ constexpr long double
round(long double __x)
{ return __builtin_roundl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
round(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return round(__type(__x));
- }
+ { return __builtin_round(__x); }
- inline float
+ constexpr float
scalbln(float __x, long __ex)
{ return __builtin_scalblnf(__x, __ex); }
- inline long double
+ constexpr long double
scalbln(long double __x, long __ex)
{ return __builtin_scalblnl(__x, __ex); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
scalbln(_Tp __x, long __ex)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return scalbln(__type(__x), __ex);
- }
+ { return __builtin_scalbln(__x, __ex); }
- inline float
+ constexpr float
scalbn(float __x, int __ex)
{ return __builtin_scalbnf(__x, __ex); }
- inline long double
+ constexpr long double
scalbn(long double __x, int __ex)
{ return __builtin_scalbnl(__x, __ex); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
scalbn(_Tp __x, int __ex)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return scalbn(__type(__x), __ex);
- }
+ { return __builtin_scalbn(__x, __ex); }
- inline float
+ constexpr float
tgamma(float __x)
{ return __builtin_tgammaf(__x); }
- inline long double
+ constexpr long double
tgamma(long double __x)
{ return __builtin_tgammal(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
tgamma(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return tgamma(__type(__x));
- }
+ { return __builtin_tgamma(__x); }
- inline float
+ constexpr float
trunc(float __x)
{ return __builtin_truncf(__x); }
- inline long double
+ constexpr long double
trunc(long double __x)
{ return __builtin_truncl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
trunc(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return trunc(__type(__x));
- }
+ { return __builtin_trunc(__x); }
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/c_global/cstdalign b/libstdc++-v3/include/c_global/cstdalign
new file mode 100644
index 0000000000..31f0c1b384
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstdalign
@@ -0,0 +1,44 @@
+// <cstdalign> -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file include/cstdalign
+ * This is a Standard C++ Library header.
+ */
+
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CSTDALIGN
+#define _GLIBCXX_CSTDALIGN 1
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/c++0x_warning.h>
+#else
+# include <bits/c++config.h>
+# if _GLIBCXX_HAVE_STDALIGN_H
+# include <stdalign.h>
+# endif
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/cstdio b/libstdc++-v3/include/c_global/cstdio
index 049704d83b..e6484759d5 100644
--- a/libstdc++-v3/include/c_global/cstdio
+++ b/libstdc++-v3/include/c_global/cstdio
@@ -1,7 +1,7 @@
// -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,6 +46,10 @@
#ifndef _GLIBCXX_CSTDIO
#define _GLIBCXX_CSTDIO 1
+#ifndef _GLIBCXX_HAVE_GETS
+extern "C" char* gets (char* __s) __attribute__((deprecated));
+#endif
+
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef clearerr
#undef fclose
@@ -67,7 +71,6 @@
#undef ftell
#undef fwrite
#undef getc
-#undef getchar
#undef gets
#undef perror
#undef printf
diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
index aa7530d380..f4785b4ad9 100644
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -1,7 +1,7 @@
// -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -135,11 +135,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using ::wctomb;
#endif // _GLIBCXX_USE_WCHAR_T
+#ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO
inline long
abs(long __i) { return labs(__i); }
inline ldiv_t
div(long __i, long __j) { return ldiv(__i, __j); }
+#endif
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/c_std/cmath b/libstdc++-v3/include/c_std/cmath
index 13eef40840..c367fceed6 100644
--- a/libstdc++-v3/include/c_std/cmath
+++ b/libstdc++-v3/include/c_std/cmath
@@ -268,6 +268,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
fmod(long double __x, long double __y)
{ return __builtin_fmodl(__x, __y); }
+ template<typename _Tp, typename _Up>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value
+ && __is_integer<_Up>::__value,
+ double>::__type
+ fmod(_Tp __x, _Up __y)
+ { return __builtin_fmod(__x, __y); }
+
using ::frexp;
inline float
diff --git a/libstdc++-v3/include/c_std/cstdio b/libstdc++-v3/include/c_std/cstdio
index 510f599d87..d4f473252e 100644
--- a/libstdc++-v3/include/c_std/cstdio
+++ b/libstdc++-v3/include/c_std/cstdio
@@ -1,7 +1,7 @@
// -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2009, 2010 Free Software Foundation, Inc.
+// 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -45,6 +45,10 @@
#include <bits/c++config.h>
#include <stdio.h>
+#ifndef _GLIBCXX_HAVE_GETS
+extern "C" char* gets (char* __s) __attribute__((deprecated));
+#endif
+
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef clearerr
#undef fclose
diff --git a/libstdc++-v3/include/debug/bitset b/libstdc++-v3/include/debug/bitset
index c187545425..3d865c1c1c 100644
--- a/libstdc++-v3/include/debug/bitset
+++ b/libstdc++-v3/include/debug/bitset
@@ -1,6 +1,6 @@
// Debugging bitset implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -51,7 +51,7 @@ namespace __debug
public:
// In C++0x we rely on normal reference type to preserve the property
// of bitset to be use as a literal.
- // TODO: Find an other solution.
+ // TODO: Find another solution.
#ifdef __GXX_EXPERIMENTAL_CXX0X__
typedef typename _Base::reference reference;
#else
@@ -66,19 +66,19 @@ namespace __debug
reference();
reference(const _Base_ref& __base,
- bitset* __seq __attribute__((__unused__)))
+ bitset* __seq __attribute__((__unused__))) _GLIBCXX_NOEXCEPT
: _Base_ref(__base)
, _Safe_iterator_base(__seq, false)
{ }
public:
- reference(const reference& __x)
+ reference(const reference& __x) _GLIBCXX_NOEXCEPT
: _Base_ref(__x)
, _Safe_iterator_base(__x, false)
{ }
reference&
- operator=(bool __x)
+ operator=(bool __x) _GLIBCXX_NOEXCEPT
{
_GLIBCXX_DEBUG_VERIFY(! this->_M_singular(),
_M_message(__gnu_debug::__msg_bad_bitset_write)
@@ -88,7 +88,7 @@ namespace __debug
}
reference&
- operator=(const reference& __x)
+ operator=(const reference& __x) _GLIBCXX_NOEXCEPT
{
_GLIBCXX_DEBUG_VERIFY(! __x._M_singular(),
_M_message(__gnu_debug::__msg_bad_bitset_read)
@@ -101,7 +101,7 @@ namespace __debug
}
bool
- operator~() const
+ operator~() const _GLIBCXX_NOEXCEPT
{
_GLIBCXX_DEBUG_VERIFY(! this->_M_singular(),
_M_message(__gnu_debug::__msg_bad_bitset_read)
@@ -109,7 +109,7 @@ namespace __debug
return ~(*static_cast<const _Base_ref*>(this));
}
- operator bool() const
+ operator bool() const _GLIBCXX_NOEXCEPT
{
_GLIBCXX_DEBUG_VERIFY(! this->_M_singular(),
_M_message(__gnu_debug::__msg_bad_bitset_read)
@@ -118,7 +118,7 @@ namespace __debug
}
reference&
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
_GLIBCXX_DEBUG_VERIFY(! this->_M_singular(),
_M_message(__gnu_debug::__msg_bad_bitset_flip)
@@ -130,10 +130,11 @@ namespace __debug
#endif
// 23.3.5.1 constructors:
- _GLIBCXX_CONSTEXPR bitset() : _Base() { }
+ _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
+ : _Base() { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- constexpr bitset(unsigned long long __val)
+ constexpr bitset(unsigned long long __val) noexcept
#else
bitset(unsigned long __val)
#endif
@@ -173,42 +174,42 @@ namespace __debug
// 23.3.5.2 bitset operations:
bitset<_Nb>&
- operator&=(const bitset<_Nb>& __rhs)
+ operator&=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
_M_base() &= __rhs;
return *this;
}
bitset<_Nb>&
- operator|=(const bitset<_Nb>& __rhs)
+ operator|=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
_M_base() |= __rhs;
return *this;
}
bitset<_Nb>&
- operator^=(const bitset<_Nb>& __rhs)
+ operator^=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
_M_base() ^= __rhs;
return *this;
}
bitset<_Nb>&
- operator<<=(size_t __pos)
+ operator<<=(size_t __pos) _GLIBCXX_NOEXCEPT
{
_M_base() <<= __pos;
return *this;
}
bitset<_Nb>&
- operator>>=(size_t __pos)
+ operator>>=(size_t __pos) _GLIBCXX_NOEXCEPT
{
_M_base() >>= __pos;
return *this;
}
bitset<_Nb>&
- set()
+ set() _GLIBCXX_NOEXCEPT
{
_Base::set();
return *this;
@@ -224,7 +225,7 @@ namespace __debug
}
bitset<_Nb>&
- reset()
+ reset() _GLIBCXX_NOEXCEPT
{
_Base::reset();
return *this;
@@ -237,10 +238,12 @@ namespace __debug
return *this;
}
- bitset<_Nb> operator~() const { return bitset(~_M_base()); }
+ bitset<_Nb>
+ operator~() const _GLIBCXX_NOEXCEPT
+ { return bitset(~_M_base()); }
bitset<_Nb>&
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
_Base::flip();
return *this;
@@ -269,11 +272,14 @@ namespace __debug
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 11. Bitset minor problems
- bool
+ _GLIBCXX_CONSTEXPR bool
operator[](size_t __pos) const
{
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+ // TODO: Check in debug-mode too.
__glibcxx_check_subscript(__pos);
- return _M_base()[__pos];
+#endif
+ return _Base::operator[](__pos);
}
using _Base::to_ulong;
@@ -346,11 +352,11 @@ namespace __debug
using _Base::size;
bool
- operator==(const bitset<_Nb>& __rhs) const
+ operator==(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
{ return _M_base() == __rhs; }
bool
- operator!=(const bitset<_Nb>& __rhs) const
+ operator!=(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
{ return _M_base() != __rhs; }
using _Base::test;
@@ -359,33 +365,35 @@ namespace __debug
using _Base::none;
bitset<_Nb>
- operator<<(size_t __pos) const
+ operator<<(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(_M_base() << __pos); }
bitset<_Nb>
- operator>>(size_t __pos) const
+ operator>>(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(_M_base() >> __pos); }
- _Base&
- _M_base() { return *this; }
+ _Base&
+ _M_base() _GLIBCXX_NOEXCEPT
+ { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT
+ { return *this; }
};
template<size_t _Nb>
bitset<_Nb>
- operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(__x) &= __y; }
template<size_t _Nb>
bitset<_Nb>
- operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(__x) |= __y; }
template<size_t _Nb>
bitset<_Nb>
- operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(__x) ^= __y; }
template<typename _CharT, typename _Traits, size_t _Nb>
@@ -409,7 +417,7 @@ namespace __debug
: public __hash_base<size_t, __debug::bitset<_Nb>>
{
size_t
- operator()(const __debug::bitset<_Nb>& __b) const
+ operator()(const __debug::bitset<_Nb>& __b) const noexcept
{ return std::hash<_GLIBCXX_STD_C::bitset<_Nb>>()(__b._M_base()); }
};
#endif
diff --git a/libstdc++-v3/include/debug/debug.h b/libstdc++-v3/include/debug/debug.h
index 6ea8e2addb..e07fb127d2 100644
--- a/libstdc++-v3/include/debug/debug.h
+++ b/libstdc++-v3/include/debug/debug.h
@@ -1,6 +1,6 @@
// Debugging support implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -64,6 +64,7 @@ namespace __gnu_debug
# define _GLIBCXX_DEBUG_ONLY(_Statement) ;
# define __glibcxx_requires_cond(_Cond,_Msg)
# define __glibcxx_requires_valid_range(_First,_Last)
+# define __glibcxx_requires_non_empty_range(_First,_Last)
# define __glibcxx_requires_sorted(_First,_Last)
# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred)
# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2)
@@ -96,6 +97,8 @@ namespace __gnu_debug
# define __glibcxx_requires_cond(_Cond,_Msg) _GLIBCXX_DEBUG_VERIFY(_Cond,_Msg)
# define __glibcxx_requires_valid_range(_First,_Last) \
__glibcxx_check_valid_range(_First,_Last)
+# define __glibcxx_requires_non_empty_range(_First,_Last) \
+ __glibcxx_check_non_empty_range(_First,_Last)
# define __glibcxx_requires_sorted(_First,_Last) \
__glibcxx_check_sorted(_First,_Last)
# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) \
diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque
index fc4d8cb616..07b332b019 100644
--- a/libstdc++-v3/include/debug/deque
+++ b/libstdc++-v3/include/debug/deque
@@ -1,6 +1,6 @@
// Debugging deque implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,7 +45,6 @@ namespace __debug
public __gnu_debug::_Safe_sequence<deque<_Tp, _Allocator> >
{
typedef _GLIBCXX_STD_C::deque<_Tp, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<deque> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
@@ -98,22 +97,22 @@ namespace __debug
{ }
deque(const deque& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
deque(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
deque(deque&& __x)
- : _Base(std::move(__x)), _Safe_base()
+ : _Base(std::move(__x))
{ this->_M_swap(__x); }
deque(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
- : _Base(__l, __a), _Safe_base() { }
+ : _Base(__l, __a) { }
#endif
- ~deque() { }
+ ~deque() _GLIBCXX_NOEXCEPT { }
deque&
operator=(const deque& __x)
@@ -173,52 +172,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -277,7 +276,12 @@ namespace __debug
#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- using _Base::shrink_to_fit;
+ void
+ shrink_to_fit()
+ {
+ if (_Base::_M_shrink_to_fit())
+ this->_M_invalidate_all();
+ }
#endif
using _Base::empty;
@@ -500,17 +504,17 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_Base::clear();
this->_M_invalidate_all();
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
};
template<typename _Tp, typename _Alloc>
diff --git a/libstdc++-v3/include/debug/formatter.h b/libstdc++-v3/include/debug/formatter.h
index 065a50274c..d22a173e3f 100644
--- a/libstdc++-v3/include/debug/formatter.h
+++ b/libstdc++-v3/include/debug/formatter.h
@@ -1,6 +1,6 @@
// Debug-mode error formatting implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,6 +46,9 @@ namespace __gnu_debug
template<typename _Iterator, typename _Sequence>
class _Safe_iterator;
+ template<typename _Iterator, typename _Sequence>
+ class _Safe_local_iterator;
+
template<typename _Sequence>
class _Safe_sequence;
@@ -103,7 +106,10 @@ namespace __gnu_debug
// forward_list
__msg_insert_after_end,
__msg_erase_after_bad,
- __msg_valid_range2
+ __msg_valid_range2,
+ // unordered sequence local iterators
+ __msg_local_iter_compare_bad,
+ __msg_non_empty_range
};
class _Error_formatter
@@ -236,6 +242,42 @@ namespace __gnu_debug
}
}
+ template<typename _Iterator, typename _Sequence>
+ _Parameter(const _Safe_local_iterator<_Iterator, _Sequence>& __it,
+ const char* __name, _Is_iterator)
+ : _M_kind(__iterator), _M_variant()
+ {
+ _M_variant._M_iterator._M_name = __name;
+ _M_variant._M_iterator._M_address = &__it;
+#ifdef __GXX_RTTI
+ _M_variant._M_iterator._M_type = &typeid(__it);
+#else
+ _M_variant._M_iterator._M_type = 0;
+#endif
+ _M_variant._M_iterator._M_constness =
+ std::__are_same<_Safe_local_iterator<_Iterator, _Sequence>,
+ typename _Sequence::local_iterator>::
+ __value ? __mutable_iterator : __const_iterator;
+ _M_variant._M_iterator._M_sequence = __it._M_get_sequence();
+#ifdef __GXX_RTTI
+ _M_variant._M_iterator._M_seq_type = &typeid(_Sequence);
+#else
+ _M_variant._M_iterator._M_seq_type = 0;
+#endif
+
+ if (__it._M_singular())
+ _M_variant._M_iterator._M_state = __singular;
+ else
+ {
+ if (__it._M_is_end())
+ _M_variant._M_iterator._M_state = __end;
+ else if (__it._M_is_begin())
+ _M_variant._M_iterator._M_state = __begin;
+ else
+ _M_variant._M_iterator._M_state = __middle;
+ }
+ }
+
template<typename _Type>
_Parameter(const _Type*& __it, const char* __name, _Is_iterator)
: _M_kind(__iterator), _M_variant()
diff --git a/libstdc++-v3/include/debug/forward_list b/libstdc++-v3/include/debug/forward_list
index 70bd75a86b..be9c792587 100644
--- a/libstdc++-v3/include/debug/forward_list
+++ b/libstdc++-v3/include/debug/forward_list
@@ -46,7 +46,6 @@ namespace __debug
public __gnu_debug::_Safe_sequence<forward_list<_Tp, _Alloc> >
{
typedef _GLIBCXX_STD_C::forward_list<_Tp, _Alloc> _Base;
- typedef __gnu_debug::_Safe_sequence<forward_list> _Safe_base;
typedef typename _Base::iterator _Base_iterator;
typedef typename _Base::const_iterator _Base_const_iterator;
@@ -104,7 +103,7 @@ namespace __debug
: _Base(__list)
{ }
- forward_list(forward_list&& __list)
+ forward_list(forward_list&& __list) noexcept
: _Base(std::move(__list._M_base()))
{
this->_M_swap(__list);
@@ -115,7 +114,7 @@ namespace __debug
: _Base(__il, __al)
{ }
- ~forward_list()
+ ~forward_list() noexcept
{ }
forward_list&
@@ -173,39 +172,39 @@ namespace __debug
// iterators:
iterator
- before_begin()
+ before_begin() noexcept
{ return iterator(_Base::before_begin(), this); }
const_iterator
- before_begin() const
+ before_begin() const noexcept
{ return const_iterator(_Base::before_begin(), this); }
iterator
- begin()
+ begin() noexcept
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const noexcept
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() noexcept
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const noexcept
{ return const_iterator(_Base::end(), this); }
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::cbegin(), this); }
const_iterator
- cbefore_begin() const
+ cbefore_begin() const noexcept
{ return const_iterator(_Base::cbefore_begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::cend(), this); }
using _Base::empty;
@@ -392,7 +391,7 @@ namespace __debug
}
void
- clear()
+ clear() noexcept
{
_Base::clear();
this->_M_invalidate_all();
@@ -415,6 +414,10 @@ namespace __debug
}
void
+ splice_after(const_iterator __pos, forward_list& __list)
+ { splice_after(__pos, std::move(__list)); }
+
+ void
splice_after(const_iterator __pos, forward_list&& __list,
const_iterator __i)
{
@@ -437,6 +440,11 @@ namespace __debug
}
void
+ splice_after(const_iterator __pos, forward_list& __list,
+ const_iterator __i)
+ { splice_after(__pos, std::move(__list), __i); }
+
+ void
splice_after(const_iterator __pos, forward_list&& __list,
const_iterator __before, const_iterator __last)
{
@@ -482,6 +490,11 @@ namespace __debug
}
void
+ splice_after(const_iterator __pos, forward_list& __list,
+ const_iterator __before, const_iterator __last)
+ { splice_after(__pos, std::move(__list), __before, __last); }
+
+ void
remove(const _Tp& __val)
{
_Base_iterator __x = _Base::before_begin();
@@ -562,6 +575,10 @@ namespace __debug
}
}
+ void
+ merge(forward_list& __list)
+ { merge(std::move(__list)); }
+
template<typename _Comp>
void
merge(forward_list&& __list, _Comp __comp)
@@ -581,14 +598,19 @@ namespace __debug
}
}
+ template<typename _Comp>
+ void
+ merge(forward_list& __list, _Comp __comp)
+ { merge(std::move(__list), __comp); }
+
using _Base::sort;
using _Base::reverse;
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const noexcept { return *this; }
private:
void
@@ -669,7 +691,8 @@ namespace __debug
_Safe_iterator_base* __this_its = this->_M_iterators;
_M_swap_aux(__list, __list._M_iterators, *this, this->_M_iterators);
_Safe_iterator_base* __this_const_its = this->_M_const_iterators;
- _M_swap_aux(__list, __list._M_const_iterators, *this, this->_M_const_iterators);
+ _M_swap_aux(__list, __list._M_const_iterators, *this,
+ this->_M_const_iterators);
_M_swap_aux(*this, __this_its, __list, __list._M_iterators);
_M_swap_aux(*this, __this_const_its, __list, __list._M_const_iterators);
}
@@ -733,8 +756,12 @@ namespace __gnu_debug
typedef typename _It::iterator_type _BaseIt;
static bool
- _M_Is(_BaseIt __it, const _Sequence* __seq)
+ _S_Is(_BaseIt __it, const _Sequence* __seq)
{ return __it == __seq->_M_base().cbefore_begin(); }
+
+ static bool
+ _S_Is_Beginnest(_BaseIt __it, const _Sequence* __seq)
+ { return _S_Is(__it, __seq); }
};
}
diff --git a/libstdc++-v3/include/debug/functions.h b/libstdc++-v3/include/debug/functions.h
index 75ed9ef057..ea12589e3c 100644
--- a/libstdc++-v3/include/debug/functions.h
+++ b/libstdc++-v3/include/debug/functions.h
@@ -1,6 +1,6 @@
// Debugging support implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -144,6 +144,13 @@ namespace __gnu_debug
const _Safe_iterator<_Iterator, _Sequence>& __last)
{ return __first._M_valid_range(__last); }
+ /** Safe local iterators know how to check if they form a valid range. */
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ __valid_range(const _Safe_local_iterator<_Iterator, _Sequence>& __first,
+ const _Safe_local_iterator<_Iterator, _Sequence>& __last)
+ { return __first._M_valid_range(__last); }
+
/* Checks that [first, last) is a valid range, and then returns
* __first. This routine is useful when we can't use a separate
* assertion statement because, e.g., we are in a constructor.
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index a7a2c54991..3931a3d3b6 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -1,6 +1,6 @@
// Debugging list implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,7 +45,6 @@ namespace __debug
public __gnu_debug::_Safe_sequence<list<_Tp, _Allocator> >
{
typedef _GLIBCXX_STD_C::list<_Tp, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<list> _Safe_base;
typedef typename _Base::iterator _Base_iterator;
typedef typename _Base::const_iterator _Base_const_iterator;
@@ -100,22 +99,22 @@ namespace __debug
list(const list& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
list(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- list(list&& __x)
- : _Base(std::move(__x)), _Safe_base()
+ list(list&& __x) noexcept
+ : _Base(std::move(__x))
{ this->_M_swap(__x); }
list(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
- : _Base(__l, __a), _Safe_base() { }
+ : _Base(__l, __a) { }
#endif
- ~list() { }
+ ~list() _GLIBCXX_NOEXCEPT { }
list&
operator=(const list& __x)
@@ -173,52 +172,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -395,7 +394,7 @@ namespace __debug
insert(iterator __p, initializer_list<value_type> __l)
{
__glibcxx_check_insert(__p);
- _Base::insert(__p, __l);
+ _Base::insert(__p.base(), __l);
}
#endif
@@ -457,7 +456,7 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_Base::clear();
this->_M_invalidate_all();
@@ -684,10 +683,10 @@ namespace __debug
using _Base::reverse;
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
private:
void
diff --git a/libstdc++-v3/include/debug/macros.h b/libstdc++-v3/include/debug/macros.h
index c90bec5cf0..07d714d353 100644
--- a/libstdc++-v3/include/debug/macros.h
+++ b/libstdc++-v3/include/debug/macros.h
@@ -1,6 +1,6 @@
// Debugging support implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -39,14 +39,17 @@
* the user error and where the error is reported.
*
*/
-#define _GLIBCXX_DEBUG_VERIFY(_Condition,_ErrorMessage) \
- do \
+#define _GLIBCXX_DEBUG_VERIFY_AT(_Condition,_ErrorMessage,_File,_Line) \
+ do \
{ \
if (! (_Condition)) \
- __gnu_debug::_Error_formatter::_M_at(__FILE__, __LINE__) \
+ __gnu_debug::_Error_formatter::_M_at(_File, _Line) \
._ErrorMessage._M_error(); \
} while (false)
+#define _GLIBCXX_DEBUG_VERIFY(_Condition,_ErrorMessage) \
+ _GLIBCXX_DEBUG_VERIFY_AT(_Condition,_ErrorMessage,__FILE__,__LINE__)
+
// Verify that [_First, _Last) forms a valid iterator range.
#define __glibcxx_check_valid_range(_First,_Last) \
_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last), \
@@ -54,6 +57,13 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last), \
._M_iterator(_First, #_First) \
._M_iterator(_Last, #_Last))
+// Verify that [_First, _Last) forms a non-empty iterator range.
+#define __glibcxx_check_non_empty_range(_First,_Last) \
+_GLIBCXX_DEBUG_VERIFY(_First != _Last, \
+ _M_message(__gnu_debug::__msg_non_empty_range) \
+ ._M_iterator(_First, #_First) \
+ ._M_iterator(_Last, #_Last))
+
/** Verify that we can insert into *this with the iterator _Position.
* Insertion into a container at a specific position requires that
* the iterator be nonsingular, either dereferenceable or past-the-end,
diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index 31085197f3..421ff0c3f5 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -46,7 +46,6 @@ namespace __debug
public __gnu_debug::_Safe_sequence<map<_Key, _Tp, _Compare, _Allocator> >
{
typedef _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<map> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
@@ -61,9 +60,9 @@ namespace __debug
typedef typename _Base::reference reference;
typedef typename _Base::const_reference const_reference;
- typedef __gnu_debug::_Safe_iterator<typename _Base::iterator, map>
+ typedef __gnu_debug::_Safe_iterator<_Base_iterator, map>
iterator;
- typedef __gnu_debug::_Safe_iterator<typename _Base::const_iterator, map>
+ typedef __gnu_debug::_Safe_iterator<_Base_const_iterator, map>
const_iterator;
typedef typename _Base::size_type size_type;
@@ -85,26 +84,27 @@ namespace __debug
: _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
__last)),
__gnu_debug::__base(__last),
- __comp, __a), _Safe_base() { }
+ __comp, __a) { }
map(const map& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
map(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
map(map&& __x)
- : _Base(std::move(__x)), _Safe_base()
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
+ : _Base(std::move(__x))
{ this->_M_swap(__x); }
map(initializer_list<value_type> __l,
const _Compare& __c = _Compare(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __c, __a), _Safe_base() { }
+ : _Base(__l, __c, __a) { }
#endif
- ~map() { }
+ ~map() _GLIBCXX_NOEXCEPT { }
map&
operator=(const map& __x)
@@ -140,52 +140,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -205,7 +205,6 @@ namespace __debug
std::pair<iterator, bool>
insert(const value_type& __x)
{
- typedef typename _Base::iterator _Base_iterator;
std::pair<_Base_iterator, bool> __res = _Base::insert(__x);
return std::pair<iterator, bool>(iterator(__res.first, this),
__res.second);
@@ -213,12 +212,11 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
std::pair<iterator, bool>
insert(_Pair&& __x)
{
- typedef typename _Base::iterator _Base_iterator;
std::pair<_Base_iterator, bool> __res
= _Base::insert(std::forward<_Pair>(__x));
return std::pair<iterator, bool>(iterator(__res.first, this),
@@ -245,8 +243,8 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __position, _Pair&& __x)
{
@@ -273,6 +271,10 @@ namespace __debug
this->_M_invalidate_if(_Equal(__position.base()));
return iterator(_Base::erase(__position.base()), this);
}
+
+ iterator
+ erase(iterator __position)
+ { return erase(const_iterator(__position)); }
#else
void
erase(iterator __position)
@@ -343,7 +345,7 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
this->_M_invalidate_all();
_Base::clear();
@@ -383,7 +385,6 @@ namespace __debug
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
- typedef typename _Base::iterator _Base_iterator;
std::pair<_Base_iterator, _Base_iterator> __res =
_Base::equal_range(__x);
return std::make_pair(iterator(__res.first, this),
@@ -393,24 +394,22 @@ namespace __debug
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
- typedef typename _Base::const_iterator _Base_const_iterator;
std::pair<_Base_const_iterator, _Base_const_iterator> __res =
_Base::equal_range(__x);
return std::make_pair(const_iterator(__res.first, this),
const_iterator(__res.second, this));
}
- _Base&
- _M_base() { return *this; }
+ _Base&
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
private:
void
_M_invalidate_all()
{
- typedef typename _Base::const_iterator _Base_const_iterator;
typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
this->_M_invalidate_if(_Not_equal(_M_base().end()));
}
diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h
index 3c22517b28..2f56217867 100644
--- a/libstdc++-v3/include/debug/multimap.h
+++ b/libstdc++-v3/include/debug/multimap.h
@@ -47,7 +47,6 @@ namespace __debug
_Compare, _Allocator> >
{
typedef _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<multimap> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
@@ -89,23 +88,24 @@ namespace __debug
__comp, __a) { }
multimap(const multimap& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
multimap(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multimap(multimap&& __x)
- : _Base(std::move(__x)), _Safe_base()
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
+ : _Base(std::move(__x))
{ this->_M_swap(__x); }
multimap(initializer_list<value_type> __l,
const _Compare& __c = _Compare(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __c, __a), _Safe_base() { }
+ : _Base(__l, __c, __a) { }
#endif
- ~multimap() { }
+ ~multimap() _GLIBCXX_NOEXCEPT { }
multimap&
operator=(const multimap& __x)
@@ -139,52 +139,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -200,8 +200,8 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(_Pair&& __x)
{ return iterator(_Base::insert(std::forward<_Pair>(__x)), this); }
@@ -226,8 +226,8 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __position, _Pair&& __x)
{
@@ -254,6 +254,10 @@ namespace __debug
this->_M_invalidate_if(_Equal(__position.base()));
return iterator(_Base::erase(__position.base()), this);
}
+
+ iterator
+ erase(iterator __position)
+ { return erase(const_iterator(__position)); }
#else
void
erase(iterator __position)
@@ -326,7 +330,7 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
this->_M_invalidate_all();
_Base::clear();
@@ -382,10 +386,10 @@ namespace __debug
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
private:
void
diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h
index 6808fb8041..9f510000d4 100644
--- a/libstdc++-v3/include/debug/multiset.h
+++ b/libstdc++-v3/include/debug/multiset.h
@@ -1,6 +1,6 @@
// Debugging multiset implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,7 +46,6 @@ namespace __debug
public __gnu_debug::_Safe_sequence<multiset<_Key, _Compare, _Allocator> >
{
typedef _GLIBCXX_STD_C::multiset<_Key, _Compare, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<multiset> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
@@ -88,23 +87,24 @@ namespace __debug
__comp, __a) { }
multiset(const multiset& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
multiset(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multiset(multiset&& __x)
- : _Base(std::move(__x)), _Safe_base()
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
+ : _Base(std::move(__x))
{ this->_M_swap(__x); }
multiset(initializer_list<value_type> __l,
const _Compare& __comp = _Compare(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __comp, __a), _Safe_base() { }
+ : _Base(__l, __comp, __a) { }
#endif
- ~multiset() { }
+ ~multiset() _GLIBCXX_NOEXCEPT { }
multiset&
operator=(const multiset& __x)
@@ -138,52 +138,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -315,7 +315,7 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
this->_M_invalidate_all();
_Base::clear();
@@ -379,10 +379,10 @@ namespace __debug
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
private:
void
diff --git a/libstdc++-v3/include/debug/safe_base.h b/libstdc++-v3/include/debug/safe_base.h
index 1348004cb5..a1aa53687b 100644
--- a/libstdc++-v3/include/debug/safe_base.h
+++ b/libstdc++-v3/include/debug/safe_base.h
@@ -79,7 +79,7 @@ namespace __gnu_debug
{ }
/** Initialize the iterator to reference the sequence pointed to
- * by @p__seq. @p __constant is true when we are initializing a
+ * by @p __seq. @p __constant is true when we are initializing a
* constant iterator, and false if it is a mutable iterator. Note
* that @p __seq may be NULL, in which case the iterator will be
* singular. Otherwise, the iterator will reference @p __seq and
diff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h
index 127c3ba72d..b16cdeaa4d 100644
--- a/libstdc++-v3/include/debug/safe_iterator.h
+++ b/libstdc++-v3/include/debug/safe_iterator.h
@@ -1,6 +1,6 @@
// Safe iterator implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011
+// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -50,8 +50,12 @@ namespace __gnu_debug
typedef typename _It::iterator_type _BaseIt;
static bool
- _M_Is(_BaseIt __it, const _Sequence* __seq)
+ _S_Is(_BaseIt, const _Sequence*)
{ return false; }
+
+ static bool
+ _S_Is_Beginnest(_BaseIt __it, const _Sequence* __seq)
+ { return __it == __seq->_M_base().begin(); }
};
/** Iterators that derive from _Safe_iterator_base but that aren't
@@ -62,6 +66,43 @@ namespace __gnu_debug
__check_singular_aux(const _Safe_iterator_base* __x)
{ return __x->_M_singular(); }
+ /** The precision to which we can calculate the distance between
+ * two iterators.
+ */
+ enum _Distance_precision
+ {
+ __dp_equality, //< Can compare iterator equality, only
+ __dp_sign, //< Can determine equality and ordering
+ __dp_exact //< Can determine distance precisely
+ };
+
+ /** Determine the distance between two iterators with some known
+ * precision.
+ */
+ template<typename _Iterator1, typename _Iterator2>
+ inline std::pair<typename std::iterator_traits<_Iterator1>::difference_type,
+ _Distance_precision>
+ __get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs,
+ std::random_access_iterator_tag)
+ { return std::make_pair(__rhs - __lhs, __dp_exact); }
+
+ template<typename _Iterator1, typename _Iterator2>
+ inline std::pair<typename std::iterator_traits<_Iterator1>::difference_type,
+ _Distance_precision>
+ __get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs,
+ std::forward_iterator_tag)
+ { return std::make_pair(__lhs == __rhs? 0 : 1, __dp_equality); }
+
+ template<typename _Iterator1, typename _Iterator2>
+ inline std::pair<typename std::iterator_traits<_Iterator1>::difference_type,
+ _Distance_precision>
+ __get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs)
+ {
+ typedef typename std::iterator_traits<_Iterator1>::iterator_category
+ _Category;
+ return __get_distance(__lhs, __rhs, _Category());
+ }
+
/** \brief Safe iterator wrapper.
*
* The class template %_Safe_iterator is a wrapper around an
@@ -78,16 +119,6 @@ namespace __gnu_debug
{
typedef _Safe_iterator _Self;
- /** The precision to which we can calculate the distance between
- * two iterators.
- */
- enum _Distance_precision
- {
- __dp_equality, //< Can compare iterator equality, only
- __dp_sign, //< Can determine equality and ordering
- __dp_exact //< Can determine distance precisely
- };
-
/// The underlying iterator
_Iterator _M_current;
@@ -142,6 +173,24 @@ namespace __gnu_debug
._M_iterator(__x, "other"));
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Move construction.
+ * @post __x is singular and unattached
+ */
+ _Safe_iterator(_Safe_iterator&& __x) : _M_current()
+ {
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
+ || __x._M_current == _Iterator(),
+ _M_message(__msg_init_copy_singular)
+ ._M_iterator(*this, "this")
+ ._M_iterator(__x, "other"));
+ std::swap(_M_current, __x._M_current);
+ this->_M_attach(__x._M_sequence);
+ __x._M_detach();
+ }
+#endif
+
/**
* @brief Converting constructor from a mutable iterator to a
* constant iterator.
@@ -181,6 +230,27 @@ namespace __gnu_debug
return *this;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Move assignment.
+ * @post __x is singular and unattached
+ */
+ _Safe_iterator&
+ operator=(_Safe_iterator&& __x)
+ {
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
+ || __x._M_current == _Iterator(),
+ _M_message(__msg_copy_singular)
+ ._M_iterator(*this, "this")
+ ._M_iterator(__x, "other"));
+ _M_current = __x._M_current;
+ _M_attach(__x._M_sequence);
+ __x._M_detach();
+ __x._M_current = _Iterator();
+ return *this;
+ }
+#endif
+
/**
* @brief Iterator dereference.
* @pre iterator is dereferenceable
@@ -353,8 +423,12 @@ namespace __gnu_debug
bool
_M_before_dereferenceable() const
{
- _Self __it = *this;
- return __it._M_incrementable() && (++__it)._M_dereferenceable();
+ if (this->_M_incrementable())
+ {
+ _Iterator __base = base();
+ return ++__base != _M_get_sequence()->_M_base().end();
+ }
+ return false;
}
/// Is the iterator incrementable?
@@ -380,30 +454,6 @@ namespace __gnu_debug
_M_get_sequence() const
{ return static_cast<const _Sequence*>(_M_sequence); }
- /** Determine the distance between two iterators with some known
- * precision.
- */
- template<typename _Iterator1, typename _Iterator2>
- static std::pair<difference_type, _Distance_precision>
- _M_get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs)
- {
- typedef typename std::iterator_traits<_Iterator1>::iterator_category
- _Category;
- return _M_get_distance(__lhs, __rhs, _Category());
- }
-
- template<typename _Iterator1, typename _Iterator2>
- static std::pair<difference_type, _Distance_precision>
- _M_get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs,
- std::random_access_iterator_tag)
- { return std::make_pair(__rhs - __lhs, __dp_exact); }
-
- template<typename _Iterator1, typename _Iterator2>
- static std::pair<difference_type, _Distance_precision>
- _M_get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs,
- std::forward_iterator_tag)
- { return std::make_pair(__lhs == __rhs? 0 : 1, __dp_equality); }
-
/// Is this iterator equal to the sequence's begin() iterator?
bool _M_is_begin() const
{ return base() == _M_get_sequence()->_M_base().begin(); }
@@ -415,7 +465,17 @@ namespace __gnu_debug
/// Is this iterator equal to the sequence's before_begin() iterator if
/// any?
bool _M_is_before_begin() const
- { return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); }
+ {
+ return _BeforeBeginHelper<_Sequence>::_S_Is(base(), _M_get_sequence());
+ }
+
+ /// Is this iterator equal to the sequence's before_begin() iterator if
+ /// any or begin() otherwise?
+ bool _M_is_beginnest() const
+ {
+ return _BeforeBeginHelper<_Sequence>::_S_Is_Beginnest(base(),
+ _M_get_sequence());
+ }
};
template<typename _IteratorL, typename _IteratorR, typename _Sequence>
diff --git a/libstdc++-v3/include/debug/safe_iterator.tcc b/libstdc++-v3/include/debug/safe_iterator.tcc
index 942640c651..f01252bf6c 100644
--- a/libstdc++-v3/include/debug/safe_iterator.tcc
+++ b/libstdc++-v3/include/debug/safe_iterator.tcc
@@ -1,6 +1,6 @@
// Debugging iterator implementation (out of line) -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,7 +48,7 @@ namespace __gnu_debug
{
const_iterator __begin = _M_get_sequence()->_M_base().begin();
std::pair<difference_type, _Distance_precision> __dist =
- this->_M_get_distance(__begin, base());
+ __get_distance(__begin, base());
bool __ok = ((__dist.second == __dp_exact && __dist.first >= -__n)
|| (__dist.second != __dp_exact && __dist.first > 0));
return __ok;
@@ -57,7 +57,7 @@ namespace __gnu_debug
{
const_iterator __end = _M_get_sequence()->_M_base().end();
std::pair<difference_type, _Distance_precision> __dist =
- this->_M_get_distance(base(), __end);
+ __get_distance(base(), __end);
bool __ok = ((__dist.second == __dp_exact && __dist.first >= __n)
|| (__dist.second != __dp_exact && __dist.first > 0));
return __ok;
@@ -76,7 +76,7 @@ namespace __gnu_debug
/* Determine if we can order the iterators without the help of
the container */
std::pair<difference_type, _Distance_precision> __dist =
- this->_M_get_distance(base(), __rhs.base());
+ __get_distance(base(), __rhs.base());
switch (__dist.second) {
case __dp_equality:
if (__dist.first == 0)
@@ -91,10 +91,11 @@ namespace __gnu_debug
/* We can only test for equality, but check if one of the
iterators is at an extreme. */
/* Optim for classic [begin, it) or [it, end) ranges, limit checks
- * when code is valid. */
- if (_M_is_begin() || __rhs._M_is_end())
+ * when code is valid. Note, for the special case of forward_list,
+ * before_begin replaces the role of begin. */
+ if (_M_is_beginnest() || __rhs._M_is_end())
return true;
- if (_M_is_end() || __rhs._M_is_begin())
+ if (_M_is_end() || __rhs._M_is_beginnest())
return false;
// Assume that this is a valid range; we can't check anything else
diff --git a/libstdc++-v3/include/debug/safe_local_iterator.h b/libstdc++-v3/include/debug/safe_local_iterator.h
new file mode 100644
index 0000000000..de0cbee2a6
--- /dev/null
+++ b/libstdc++-v3/include/debug/safe_local_iterator.h
@@ -0,0 +1,369 @@
+// Safe iterator implementation -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file debug/safe_local_iterator.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_SAFE_LOCAL_ITERATOR_H
+#define _GLIBCXX_DEBUG_SAFE_LOCAL_ITERATOR_H 1
+
+#include <debug/debug.h>
+#include <debug/macros.h>
+#include <debug/functions.h>
+#include <debug/safe_unordered_base.h>
+#include <ext/type_traits.h>
+
+namespace __gnu_debug
+{
+ /** \brief Safe iterator wrapper.
+ *
+ * The class template %_Safe_local_iterator is a wrapper around an
+ * iterator that tracks the iterator's movement among sequences and
+ * checks that operations performed on the "safe" iterator are
+ * legal. In additional to the basic iterator operations (which are
+ * validated, and then passed to the underlying iterator),
+ * %_Safe_local_iterator has member functions for iterator invalidation,
+ * attaching/detaching the iterator from sequences, and querying
+ * the iterator's state.
+ */
+ template<typename _Iterator, typename _Sequence>
+ class _Safe_local_iterator : public _Safe_local_iterator_base
+ {
+ typedef _Safe_local_iterator _Self;
+ typedef typename _Sequence::size_type size_type;
+
+ /// The underlying iterator
+ _Iterator _M_current;
+
+ /// The bucket this local iterator belongs to
+ size_type _M_bucket;
+
+ /// Determine if this is a constant iterator.
+ bool
+ _M_constant() const
+ {
+ typedef typename _Sequence::const_local_iterator const_iterator;
+ return std::__are_same<const_iterator, _Safe_local_iterator>::__value;
+ }
+
+ typedef std::iterator_traits<_Iterator> _Traits;
+
+ public:
+ typedef _Iterator iterator_type;
+ typedef typename _Traits::iterator_category iterator_category;
+ typedef typename _Traits::value_type value_type;
+ typedef typename _Traits::difference_type difference_type;
+ typedef typename _Traits::reference reference;
+ typedef typename _Traits::pointer pointer;
+
+ /// @post the iterator is singular and unattached
+ _Safe_local_iterator() : _M_current() { }
+
+ /**
+ * @brief Safe iterator construction from an unsafe iterator and
+ * its sequence.
+ *
+ * @pre @p seq is not NULL
+ * @post this is not singular
+ */
+ _Safe_local_iterator(const _Iterator& __i, size_type __bucket,
+ const _Sequence* __seq)
+ : _Safe_local_iterator_base(__seq, _M_constant()), _M_current(__i),
+ _M_bucket(__bucket)
+ {
+ _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
+ _M_message(__msg_init_singular)
+ ._M_iterator(*this, "this"));
+ }
+
+ /**
+ * @brief Copy construction.
+ */
+ _Safe_local_iterator(const _Safe_local_iterator& __x)
+ : _Safe_local_iterator_base(__x, _M_constant()),
+ _M_current(__x._M_current), _M_bucket(__x._M_bucket)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // DR 408. Is vector<reverse_iterator<char*> > forbidden?
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
+ || __x._M_current == _Iterator(),
+ _M_message(__msg_init_copy_singular)
+ ._M_iterator(*this, "this")
+ ._M_iterator(__x, "other"));
+ }
+
+ /**
+ * @brief Converting constructor from a mutable iterator to a
+ * constant iterator.
+ */
+ template<typename _MutableIterator>
+ _Safe_local_iterator(
+ const _Safe_local_iterator<_MutableIterator,
+ typename __gnu_cxx::__enable_if<std::__are_same<
+ _MutableIterator,
+ typename _Sequence::local_iterator::iterator_type>::__value,
+ _Sequence>::__type>& __x)
+ : _Safe_local_iterator_base(__x, _M_constant()),
+ _M_current(__x.base()), _M_bucket(__x._M_bucket)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // DR 408. Is vector<reverse_iterator<char*> > forbidden?
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
+ || __x.base() == _Iterator(),
+ _M_message(__msg_init_const_singular)
+ ._M_iterator(*this, "this")
+ ._M_iterator(__x, "other"));
+ }
+
+ /**
+ * @brief Copy assignment.
+ */
+ _Safe_local_iterator&
+ operator=(const _Safe_local_iterator& __x)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // DR 408. Is vector<reverse_iterator<char*> > forbidden?
+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
+ || __x._M_current == _Iterator(),
+ _M_message(__msg_copy_singular)
+ ._M_iterator(*this, "this")
+ ._M_iterator(__x, "other"));
+ _M_current = __x._M_current;
+ _M_bucket = __x._M_bucket;
+ this->_M_attach(__x._M_sequence);
+ return *this;
+ }
+
+ /**
+ * @brief Iterator dereference.
+ * @pre iterator is dereferenceable
+ */
+ reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(),
+ _M_message(__msg_bad_deref)
+ ._M_iterator(*this, "this"));
+ return *_M_current;
+ }
+
+ /**
+ * @brief Iterator dereference.
+ * @pre iterator is dereferenceable
+ * @todo Make this correct w.r.t. iterators that return proxies
+ * @todo Use addressof() instead of & operator
+ */
+ pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(),
+ _M_message(__msg_bad_deref)
+ ._M_iterator(*this, "this"));
+ return &*_M_current;
+ }
+
+ // ------ Input iterator requirements ------
+ /**
+ * @brief Iterator preincrement
+ * @pre iterator is incrementable
+ */
+ _Safe_local_iterator&
+ operator++()
+ {
+ _GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(),
+ _M_message(__msg_bad_inc)
+ ._M_iterator(*this, "this"));
+ ++_M_current;
+ return *this;
+ }
+
+ /**
+ * @brief Iterator postincrement
+ * @pre iterator is incrementable
+ */
+ _Safe_local_iterator
+ operator++(int)
+ {
+ _GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(),
+ _M_message(__msg_bad_inc)
+ ._M_iterator(*this, "this"));
+ _Safe_local_iterator __tmp(*this);
+ ++_M_current;
+ return __tmp;
+ }
+
+ // ------ Utilities ------
+ /**
+ * @brief Return the underlying iterator
+ */
+ _Iterator
+ base() const { return _M_current; }
+
+ /**
+ * @brief Return the bucket
+ */
+ size_type
+ bucket() const { return _M_bucket; }
+
+ /**
+ * @brief Conversion to underlying non-debug iterator to allow
+ * better interaction with non-debug containers.
+ */
+ operator _Iterator() const { return _M_current; }
+
+ /** Attach iterator to the given sequence. */
+ void
+ _M_attach(_Safe_sequence_base* __seq)
+ { _Safe_iterator_base::_M_attach(__seq, _M_constant()); }
+
+ /** Likewise, but not thread-safe. */
+ void
+ _M_attach_single(_Safe_sequence_base* __seq)
+ { _Safe_iterator_base::_M_attach_single(__seq, _M_constant()); }
+
+ /// Is the iterator dereferenceable?
+ bool
+ _M_dereferenceable() const
+ { return !this->_M_singular() && !_M_is_end(); }
+
+ /// Is the iterator incrementable?
+ bool
+ _M_incrementable() const
+ { return !this->_M_singular() && !_M_is_end(); }
+
+ // Is the iterator range [*this, __rhs) valid?
+ template<typename _Other>
+ bool
+ _M_valid_range(const _Safe_local_iterator<_Other,
+ _Sequence>& __rhs) const;
+
+ // The sequence this iterator references.
+ const _Sequence*
+ _M_get_sequence() const
+ { return static_cast<const _Sequence*>(_M_sequence); }
+
+ /// Is this iterator equal to the sequence's begin() iterator?
+ bool _M_is_begin() const
+ { return base() == _M_get_sequence()->_M_base().begin(_M_bucket); }
+
+ /// Is this iterator equal to the sequence's end() iterator?
+ bool _M_is_end() const
+ { return base() == _M_get_sequence()->_M_base().end(_M_bucket); }
+
+ /// Is this iterator part of the same bucket as the other one?
+ template <typename _Other>
+ bool _M_in_same_bucket(const _Safe_local_iterator<_Other,
+ _Sequence>& __other) const
+ { return _M_bucket == __other.bucket(); }
+ };
+
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator==(const _Safe_local_iterator<_IteratorL, _Sequence>& __lhs,
+ const _Safe_local_iterator<_IteratorR, _Sequence>& __rhs)
+ {
+ _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
+ _M_message(__msg_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),
+ _M_message(__msg_compare_different)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),
+ _M_message(__msg_compare_different)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_in_same_bucket(__rhs),
+ _M_message(__msg_local_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ return __lhs.base() == __rhs.base();
+ }
+
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator==(const _Safe_local_iterator<_Iterator, _Sequence>& __lhs,
+ const _Safe_local_iterator<_Iterator, _Sequence>& __rhs)
+ {
+ _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
+ _M_message(__msg_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),
+ _M_message(__msg_compare_different)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_in_same_bucket(__rhs),
+ _M_message(__msg_local_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ return __lhs.base() == __rhs.base();
+ }
+
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator!=(const _Safe_local_iterator<_IteratorL, _Sequence>& __lhs,
+ const _Safe_local_iterator<_IteratorR, _Sequence>& __rhs)
+ {
+ _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
+ _M_message(__msg_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),
+ _M_message(__msg_compare_different)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_in_same_bucket(__rhs),
+ _M_message(__msg_local_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ return __lhs.base() != __rhs.base();
+ }
+
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator!=(const _Safe_local_iterator<_Iterator, _Sequence>& __lhs,
+ const _Safe_local_iterator<_Iterator, _Sequence>& __rhs)
+ {
+ _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
+ _M_message(__msg_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),
+ _M_message(__msg_compare_different)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ _GLIBCXX_DEBUG_VERIFY(__lhs._M_in_same_bucket(__rhs),
+ _M_message(__msg_local_iter_compare_bad)
+ ._M_iterator(__lhs, "lhs")
+ ._M_iterator(__rhs, "rhs"));
+ return __lhs.base() != __rhs.base();
+ }
+} // namespace __gnu_debug
+
+#include <debug/safe_local_iterator.tcc>
+
+#endif
diff --git a/libstdc++-v3/include/debug/safe_local_iterator.tcc b/libstdc++-v3/include/debug/safe_local_iterator.tcc
new file mode 100644
index 0000000000..47af968fe9
--- /dev/null
+++ b/libstdc++-v3/include/debug/safe_local_iterator.tcc
@@ -0,0 +1,75 @@
+// Debugging iterator implementation (out of line) -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file debug/safe_local_iterator.tcc
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_SAFE_LOCAL_ITERATOR_TCC
+#define _GLIBCXX_DEBUG_SAFE_LOCAL_ITERATOR_TCC 1
+
+namespace __gnu_debug
+{
+ template<typename _Iterator, typename _Sequence>
+ template<typename _Other>
+ bool
+ _Safe_local_iterator<_Iterator, _Sequence>::
+ _M_valid_range(const _Safe_local_iterator<_Other, _Sequence>& __rhs) const
+ {
+ if (!_M_can_compare(__rhs))
+ return false;
+ if (_M_bucket != __rhs._M_bucket)
+ return false;
+
+ /* Determine if we can order the iterators without the help of
+ the container */
+ std::pair<difference_type, _Distance_precision> __dist =
+ __get_distance(base(), __rhs.base());
+ switch (__dist.second)
+ {
+ case __dp_equality:
+ if (__dist.first == 0)
+ return true;
+ break;
+
+ case __dp_sign:
+ case __dp_exact:
+ return __dist.first >= 0;
+ }
+
+ /* We can only test for equality, but check if one of the
+ iterators is at an extreme. */
+ /* Optim for classic [begin, it) or [it, end) ranges, limit checks
+ * when code is valid. */
+ if (_M_is_begin() || __rhs._M_is_end())
+ return true;
+ if (_M_is_end() || __rhs._M_is_begin())
+ return false;
+
+ // Assume that this is a valid range; we can't check anything else
+ return true;
+ }
+} // namespace __gnu_debug
+
+#endif
diff --git a/libstdc++-v3/include/debug/safe_sequence.h b/libstdc++-v3/include/debug/safe_sequence.h
index cc1f4c10df..8693f72487 100644
--- a/libstdc++-v3/include/debug/safe_sequence.h
+++ b/libstdc++-v3/include/debug/safe_sequence.h
@@ -104,7 +104,7 @@ namespace __gnu_debug
* may only be used by deriving from it and passing the name of the
* derived class as its template parameter via the curiously
* recurring template pattern. The derived class must have @c
- * iterator and @const_iterator types that are instantiations of
+ * iterator and @c const_iterator types that are instantiations of
* class template _Safe_iterator for this sequence. Iterators will
* then be tracked automatically.
*/
@@ -113,16 +113,16 @@ namespace __gnu_debug
{
public:
/** Invalidates all iterators @c x that reference this sequence,
- are not singular, and for which @c pred(x) returns @c
- true. @c pred will be invoked with the normal iterators nested
+ are not singular, and for which @c __pred(x) returns @c
+ true. @c __pred will be invoked with the normal iterators nested
in the safe ones. */
template<typename _Predicate>
void
_M_invalidate_if(_Predicate __pred);
/** Transfers all iterators @c x that reference @c from sequence,
- are not singular, and for which @c pred(x) returns @c
- true. @c pred will be invoked with the normal iterators nested
+ are not singular, and for which @c __pred(x) returns @c
+ true. @c __pred will be invoked with the normal iterators nested
in the safe ones. */
template<typename _Predicate>
void
diff --git a/libstdc++-v3/include/debug/safe_unordered_base.h b/libstdc++-v3/include/debug/safe_unordered_base.h
new file mode 100644
index 0000000000..f88e656321
--- /dev/null
+++ b/libstdc++-v3/include/debug/safe_unordered_base.h
@@ -0,0 +1,175 @@
+// Safe container/iterator base implementation -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file debug/safe_unordered_base.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_SAFE_UNORDERED_BASE_H
+#define _GLIBCXX_DEBUG_SAFE_UNORDERED_BASE_H 1
+
+#include <debug/safe_base.h>
+
+namespace __gnu_debug
+{
+ class _Safe_unordered_container_base;
+
+ /** \brief Basic functionality for a @a safe iterator.
+ *
+ * The %_Safe_local_iterator_base base class implements the functionality
+ * of a safe local iterator that is not specific to a particular iterator
+ * type. It contains a pointer back to the container it references
+ * along with iterator version information and pointers to form a
+ * doubly-linked list of local iterators referenced by the container.
+ *
+ * This class must not perform any operations that can throw an
+ * exception, or the exception guarantees of derived iterators will
+ * be broken.
+ */
+ class _Safe_local_iterator_base : public _Safe_iterator_base
+ {
+ protected:
+ /** Initializes the iterator and makes it singular. */
+ _Safe_local_iterator_base()
+ { }
+
+ /** Initialize the iterator to reference the container pointed to
+ * by @p __seq. @p __constant is true when we are initializing a
+ * constant local iterator, and false if it is a mutable local iterator.
+ * Note that @p __seq may be NULL, in which case the iterator will be
+ * singular. Otherwise, the iterator will reference @p __seq and
+ * be nonsingular.
+ */
+ _Safe_local_iterator_base(const _Safe_sequence_base* __seq, bool __constant)
+ { this->_M_attach(const_cast<_Safe_sequence_base*>(__seq), __constant); }
+
+ /** Initializes the iterator to reference the same container that
+ @p __x does. @p __constant is true if this is a constant
+ iterator, and false if it is mutable. */
+ _Safe_local_iterator_base(const _Safe_local_iterator_base& __x,
+ bool __constant)
+ { this->_M_attach(__x._M_sequence, __constant); }
+
+ _Safe_local_iterator_base&
+ operator=(const _Safe_local_iterator_base&);
+
+ explicit
+ _Safe_local_iterator_base(const _Safe_local_iterator_base&);
+
+ ~_Safe_local_iterator_base() { this->_M_detach(); }
+
+ _Safe_unordered_container_base*
+ _M_get_container() const _GLIBCXX_NOEXCEPT;
+
+ public:
+ /** Attaches this iterator to the given container, detaching it
+ * from whatever container it was attached to originally. If the
+ * new container is the NULL pointer, the iterator is left
+ * unattached.
+ */
+ void _M_attach(_Safe_sequence_base* __seq, bool __constant);
+
+ /** Likewise, but not thread-safe. */
+ void _M_attach_single(_Safe_sequence_base* __seq, bool __constant) throw ();
+
+ /** Detach the iterator for whatever container it is attached to,
+ * if any.
+ */
+ void _M_detach();
+
+ /** Likewise, but not thread-safe. */
+ void _M_detach_single() throw ();
+ };
+
+ /**
+ * @brief Base class that supports tracking of local iterators that
+ * reference an unordered container.
+ *
+ * The %_Safe_unordered_container_base class provides basic support for
+ * tracking iterators into an unordered container. Containers that track
+ * iterators must derived from %_Safe_unordered_container_base publicly, so
+ * that safe iterators (which inherit _Safe_iterator_base) can
+ * attach to them. This class contains four linked lists of
+ * iterators, one for constant iterators, one for mutable
+ * iterators, one for constant local iterators, one for mutable local
+ * iterators and a version number that allows very fast
+ * invalidation of all iterators that reference the container.
+ *
+ * This class must ensure that no operation on it may throw an
+ * exception, otherwise @a safe containers may fail to provide the
+ * exception-safety guarantees required by the C++ standard.
+ */
+ class _Safe_unordered_container_base : public _Safe_sequence_base
+ {
+ typedef _Safe_sequence_base _Base;
+ public:
+ /// The list of mutable local iterators that reference this container
+ _Safe_iterator_base* _M_local_iterators;
+
+ /// The list of constant local iterators that reference this container
+ _Safe_iterator_base* _M_const_local_iterators;
+
+ protected:
+ // Initialize with a version number of 1 and no iterators
+ _Safe_unordered_container_base()
+ : _M_local_iterators(0), _M_const_local_iterators(0)
+ { }
+
+ /** Notify all iterators that reference this container that the
+ container is being destroyed. */
+ ~_Safe_unordered_container_base()
+ { this->_M_detach_all(); }
+
+ /** Detach all iterators, leaving them singular. */
+ void
+ _M_detach_all();
+
+ /** Swap this container with the given container. This operation
+ * also swaps ownership of the iterators, so that when the
+ * operation is complete all iterators that originally referenced
+ * one container now reference the other container.
+ */
+ void
+ _M_swap(_Safe_unordered_container_base& __x);
+
+ public:
+ /** Attach an iterator to this container. */
+ void
+ _M_attach_local(_Safe_iterator_base* __it, bool __constant);
+
+ /** Likewise but not thread safe. */
+ void
+ _M_attach_local_single(_Safe_iterator_base* __it, bool __constant) throw ();
+
+ /** Detach an iterator from this container */
+ void
+ _M_detach_local(_Safe_iterator_base* __it);
+
+ /** Likewise but not thread safe. */
+ void
+ _M_detach_local_single(_Safe_iterator_base* __it) throw ();
+ };
+} // namespace __gnu_debug
+
+#endif
diff --git a/libstdc++-v3/include/debug/safe_unordered_container.h b/libstdc++-v3/include/debug/safe_unordered_container.h
new file mode 100644
index 0000000000..e65650a0d7
--- /dev/null
+++ b/libstdc++-v3/include/debug/safe_unordered_container.h
@@ -0,0 +1,81 @@
+// Safe container implementation -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file debug/safe_unordered_container.h
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_SAFE_UNORDERED_CONTAINER_H
+#define _GLIBCXX_DEBUG_SAFE_UNORDERED_CONTAINER_H 1
+
+#include <debug/debug.h>
+#include <debug/macros.h>
+#include <debug/functions.h>
+#include <debug/safe_unordered_base.h>
+
+namespace __gnu_debug
+{
+ /**
+ * @brief Base class for constructing a @a safe unordered container type
+ * that tracks iterators that reference it.
+ *
+ * The class template %_Safe_unordered_container simplifies the
+ * construction of @a safe unordered containers that track the iterators
+ * that reference the container, so that the iterators are notified of
+ * changes in the container that may affect their operation, e.g., if
+ * the container invalidates its iterators or is destructed. This class
+ * template may only be used by deriving from it and passing the name
+ * of the derived class as its template parameter via the curiously
+ * recurring template pattern. The derived class must have @c
+ * iterator and @c const_iterator types that are instantiations of
+ * class template _Safe_iterator for this container and @c local_iterator
+ * and @c const_local_iterator types that are instantiations of class
+ * template _Safe_local_iterator for this container. Iterators will
+ * then be tracked automatically.
+ */
+ template<typename _Container>
+ class _Safe_unordered_container : public _Safe_unordered_container_base
+ {
+ public:
+ /** Invalidates all iterators @c x that reference this container,
+ are not singular, and for which @c __pred(x) returns @c
+ true. @c __pred will be invoked with the normal iterators nested
+ in the safe ones. */
+ template<typename _Predicate>
+ void
+ _M_invalidate_if(_Predicate __pred);
+
+ /** Invalidates all local iterators @c x that reference this container,
+ are not singular, and for which @c __pred(x) returns @c
+ true. @c __pred will be invoked with the normal ilocal iterators
+ nested in the safe ones. */
+ template<typename _Predicate>
+ void
+ _M_invalidate_local_if(_Predicate __pred);
+ };
+} // namespace __gnu_debug
+
+#include <debug/safe_unordered_container.tcc>
+
+#endif
diff --git a/libstdc++-v3/include/debug/safe_unordered_container.tcc b/libstdc++-v3/include/debug/safe_unordered_container.tcc
new file mode 100644
index 0000000000..69aafa8e81
--- /dev/null
+++ b/libstdc++-v3/include/debug/safe_unordered_container.tcc
@@ -0,0 +1,100 @@
+// Safe container implementation -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file debug/safe_unordered_container.tcc
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_DEBUG_SAFE_UNORDERED_CONTAINER_TCC
+#define _GLIBCXX_DEBUG_SAFE_UNORDERED_CONTAINER_TCC 1
+
+namespace __gnu_debug
+{
+ template<typename _Container>
+ template<typename _Predicate>
+ void
+ _Safe_unordered_container<_Container>::
+ _M_invalidate_if(_Predicate __pred)
+ {
+ typedef typename _Container::iterator iterator;
+ typedef typename _Container::const_iterator const_iterator;
+
+ __gnu_cxx::__scoped_lock sentry(this->_M_get_mutex());
+ for (_Safe_iterator_base* __iter = _M_iterators; __iter;)
+ {
+ iterator* __victim = static_cast<iterator*>(__iter);
+ __iter = __iter->_M_next;
+ if (!__victim->_M_singular() && __pred(__victim->base()))
+ {
+ __victim->_M_invalidate();
+ }
+ }
+
+ for (_Safe_iterator_base* __iter2 = _M_const_iterators; __iter2;)
+ {
+ const_iterator* __victim = static_cast<const_iterator*>(__iter2);
+ __iter2 = __iter2->_M_next;
+ if (!__victim->_M_singular() && __pred(__victim->base()))
+ {
+ __victim->_M_invalidate();
+ }
+ }
+ }
+
+
+ template<typename _Container>
+ template<typename _Predicate>
+ void
+ _Safe_unordered_container<_Container>::
+ _M_invalidate_local_if(_Predicate __pred)
+ {
+ typedef typename _Container::local_iterator local_iterator;
+ typedef typename _Container::const_local_iterator const_local_iterator;
+
+ __gnu_cxx::__scoped_lock sentry(this->_M_get_mutex());
+ for (_Safe_iterator_base* __iter = _M_local_iterators; __iter;)
+ {
+ local_iterator* __victim = static_cast<local_iterator*>(__iter);
+ __iter = __iter->_M_next;
+ if (!__victim->_M_singular() && __pred(__victim->base()))
+ {
+ __victim->_M_invalidate();
+ }
+ }
+
+ for (_Safe_iterator_base* __iter2 = _M_const_local_iterators; __iter2;)
+ {
+ const_local_iterator* __victim =
+ static_cast<const_local_iterator*>(__iter2);
+ __iter2 = __iter2->_M_next;
+ if (!__victim->_M_singular() && __pred(__victim->base()))
+ {
+ __victim->_M_invalidate();
+ }
+ }
+ }
+
+} // namespace __gnu_debug
+
+#endif
diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h
index 7ca4c77888..9846ec865f 100644
--- a/libstdc++-v3/include/debug/set.h
+++ b/libstdc++-v3/include/debug/set.h
@@ -1,6 +1,6 @@
// Debugging set implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,7 +46,6 @@ namespace __debug
public __gnu_debug::_Safe_sequence<set<_Key, _Compare, _Allocator> >
{
typedef _GLIBCXX_STD_C::set<_Key, _Compare, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<set> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
@@ -88,23 +87,24 @@ namespace __debug
__comp, __a) { }
set(const set& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
set(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
set(set&& __x)
- : _Base(std::move(__x)), _Safe_base()
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
+ : _Base(std::move(__x))
{ this->_M_swap(__x); }
set(initializer_list<value_type> __l,
const _Compare& __comp = _Compare(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __comp, __a), _Safe_base() { }
+ : _Base(__l, __comp, __a) { }
#endif
- ~set() { }
+ ~set() _GLIBCXX_NOEXCEPT { }
set&
operator=(const set& __x)
@@ -138,52 +138,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -205,7 +205,6 @@ namespace __debug
std::pair<iterator, bool>
insert(value_type&& __x)
{
- typedef typename _Base::iterator _Base_iterator;
std::pair<_Base_iterator, bool> __res
= _Base::insert(std::move(__x));
return std::pair<iterator, bool>(iterator(__res.first, this),
@@ -323,7 +322,7 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
this->_M_invalidate_all();
_Base::clear();
@@ -387,10 +386,10 @@ namespace __debug
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
private:
void
diff --git a/libstdc++-v3/include/debug/string b/libstdc++-v3/include/debug/string
index fe073f21c7..6350f6de5e 100644
--- a/libstdc++-v3/include/debug/string
+++ b/libstdc++-v3/include/debug/string
@@ -1,6 +1,6 @@
// Debugging string implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -75,12 +75,12 @@ namespace __gnu_debug
{ }
// Provides conversion from a release-mode string to a debug-mode string
- basic_string(const _Base& __base) : _Base(__base), _Safe_base() { }
+ basic_string(const _Base& __base) : _Base(__base) { }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 42. string ctors specify wrong default allocator
basic_string(const basic_string& __str)
- : _Base(__str, 0, _Base::npos, __str.get_allocator()), _Safe_base()
+ : _Base(__str, 0, _Base::npos, __str.get_allocator())
{ }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -114,7 +114,7 @@ namespace __gnu_debug
{ }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- basic_string(basic_string&& __str)
+ basic_string(basic_string&& __str) noexcept
: _Base(std::move(__str))
{ }
@@ -124,7 +124,7 @@ namespace __gnu_debug
{ }
#endif // __GXX_EXPERIMENTAL_CXX0X__
- ~basic_string() { }
+ ~basic_string() _GLIBCXX_NOEXCEPT { }
basic_string&
operator=(const basic_string& __str)
@@ -171,37 +171,55 @@ namespace __gnu_debug
// 21.3.2 iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ const_iterator
+ cbegin() const noexcept
+ { return const_iterator(_Base::begin(), this); }
+
+ const_iterator
+ cend() const noexcept
+ { return const_iterator(_Base::end(), this); }
+
+ const_reverse_iterator
+ crbegin() const noexcept
+ { return const_reverse_iterator(end()); }
+
+ const_reverse_iterator
+ crend() const noexcept
+ { return const_reverse_iterator(begin()); }
+#endif
+
// 21.3.3 capacity:
using _Base::size;
using _Base::length;
@@ -219,14 +237,27 @@ namespace __gnu_debug
{ this->resize(__n, _CharT()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- using _Base::shrink_to_fit;
+ void
+ shrink_to_fit()
+ {
+ if (capacity() > size())
+ {
+ __try
+ {
+ reserve(0);
+ this->_M_invalidate_all();
+ }
+ __catch(...)
+ { }
+ }
+ }
#endif
using _Base::capacity;
using _Base::reserve;
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_Base::clear();
this->_M_invalidate_all();
@@ -549,6 +580,16 @@ namespace __gnu_debug
return iterator(__res, this);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ pop_back()
+ {
+ __glibcxx_check_nonempty();
+ _Base::pop_back();
+ this->_M_invalidate_all();
+ }
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
basic_string&
replace(size_type __pos1, size_type __n1, const basic_string& __str)
{
@@ -672,7 +713,7 @@ namespace __gnu_debug
// 21.3.6 string operations:
const _CharT*
- c_str() const
+ c_str() const _GLIBCXX_NOEXCEPT
{
const _CharT* __res = _Base::c_str();
this->_M_invalidate_all();
@@ -680,7 +721,7 @@ namespace __gnu_debug
}
const _CharT*
- data() const
+ data() const _GLIBCXX_NOEXCEPT
{
const _CharT* __res = _Base::data();
this->_M_invalidate_all();
@@ -691,6 +732,7 @@ namespace __gnu_debug
size_type
find(const basic_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::find(__str, __pos); }
size_type
@@ -708,11 +750,12 @@ namespace __gnu_debug
}
size_type
- find(_CharT __c, size_type __pos = 0) const
+ find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
{ return _Base::find(__c, __pos); }
size_type
rfind(const basic_string& __str, size_type __pos = _Base::npos) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::rfind(__str, __pos); }
size_type
@@ -730,11 +773,12 @@ namespace __gnu_debug
}
size_type
- rfind(_CharT __c, size_type __pos = _Base::npos) const
+ rfind(_CharT __c, size_type __pos = _Base::npos) const _GLIBCXX_NOEXCEPT
{ return _Base::rfind(__c, __pos); }
size_type
find_first_of(const basic_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::find_first_of(__str, __pos); }
size_type
@@ -752,12 +796,12 @@ namespace __gnu_debug
}
size_type
- find_first_of(_CharT __c, size_type __pos = 0) const
+ find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
{ return _Base::find_first_of(__c, __pos); }
size_type
find_last_of(const basic_string& __str,
- size_type __pos = _Base::npos) const
+ size_type __pos = _Base::npos) const _GLIBCXX_NOEXCEPT
{ return _Base::find_last_of(__str, __pos); }
size_type
@@ -776,10 +820,12 @@ namespace __gnu_debug
size_type
find_last_of(_CharT __c, size_type __pos = _Base::npos) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::find_last_of(__c, __pos); }
size_type
find_first_not_of(const basic_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::find_first_not_of(__str, __pos); }
size_type
@@ -797,12 +843,13 @@ namespace __gnu_debug
}
size_type
- find_first_not_of(_CharT __c, size_type __pos = 0) const
+ find_first_not_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
{ return _Base::find_first_not_of(__c, __pos); }
size_type
find_last_not_of(const basic_string& __str,
size_type __pos = _Base::npos) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::find_last_not_of(__str, __pos); }
size_type
@@ -821,6 +868,7 @@ namespace __gnu_debug
size_type
find_last_not_of(_CharT __c, size_type __pos = _Base::npos) const
+ _GLIBCXX_NOEXCEPT
{ return _Base::find_last_not_of(__c, __pos); }
basic_string
@@ -868,10 +916,10 @@ namespace __gnu_debug
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
using _Safe_base::_M_invalidate_all;
};
diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map
index 2d7e100c43..4c562af132 100644
--- a/libstdc++-v3/include/debug/unordered_map
+++ b/libstdc++-v3/include/debug/unordered_map
@@ -1,6 +1,6 @@
// Debugging unordered_map/unordered_multimap implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,8 +35,9 @@
#else
# include <unordered_map>
-#include <debug/safe_sequence.h>
+#include <debug/safe_unordered_container.h>
#include <debug/safe_iterator.h>
+#include <debug/safe_local_iterator.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -49,15 +50,16 @@ namespace __debug
typename _Alloc = std::allocator<_Key> >
class unordered_map
: public _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>,
- public __gnu_debug::_Safe_sequence<unordered_map<_Key, _Tp, _Hash,
- _Pred, _Alloc> >
+ public __gnu_debug::_Safe_unordered_container<unordered_map<_Key, _Tp,
+ _Hash, _Pred, _Alloc> >
{
typedef _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash,
_Pred, _Alloc> _Base;
- typedef __gnu_debug::_Safe_sequence<unordered_map> _Safe_base;
+ typedef __gnu_debug::_Safe_unordered_container<unordered_map> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
- typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+ typedef typename _Base::const_local_iterator _Base_const_local_iterator;
+ typedef typename _Base::local_iterator _Base_local_iterator;
public:
typedef typename _Base::size_type size_type;
@@ -72,6 +74,10 @@ namespace __debug
unordered_map> iterator;
typedef __gnu_debug::_Safe_iterator<_Base_const_iterator,
unordered_map> const_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<_Base_local_iterator,
+ unordered_map> local_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<_Base_const_local_iterator,
+ unordered_map> const_local_iterator;
explicit
unordered_map(size_type __n = 10,
@@ -81,7 +87,7 @@ namespace __debug
: _Base(__n, __hf, __eql, __a) { }
template<typename _InputIterator>
- unordered_map(_InputIterator __first, _InputIterator __last,
+ unordered_map(_InputIterator __first, _InputIterator __last,
size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
@@ -89,23 +95,23 @@ namespace __debug
: _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
__last)),
__gnu_debug::__base(__last), __n,
- __hf, __eql, __a), _Safe_base() { }
+ __hf, __eql, __a) { }
- unordered_map(const unordered_map& __x)
- : _Base(__x), _Safe_base() { }
+ unordered_map(const unordered_map& __x) = default;
unordered_map(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
- unordered_map(unordered_map&& __x)
- : _Base(std::move(__x)), _Safe_base() { }
+ unordered_map(unordered_map&& __x) = default;
unordered_map(initializer_list<value_type> __l,
size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __n, __hf, __eql, __a), _Safe_base() { }
+ : _Base(__l, __n, __hf, __eql, __a) { }
+
+ ~unordered_map() noexcept { }
unordered_map&
operator=(const unordered_map& __x)
@@ -141,46 +147,90 @@ namespace __debug
}
void
- clear()
+ clear() noexcept
{
_Base::clear();
this->_M_invalidate_all();
}
iterator
- begin()
+ begin() noexcept
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const noexcept
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() noexcept
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const noexcept
{ return const_iterator(_Base::end(), this); }
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
// local versions
- using _Base::begin;
- using _Base::end;
- using _Base::cbegin;
- using _Base::cend;
+ local_iterator
+ begin(size_type __b)
+ { return local_iterator(_Base::begin(__b), __b, this); }
+
+ local_iterator
+ end(size_type __b)
+ { return local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ begin(size_type __b) const
+ { return const_local_iterator(_Base::begin(__b), __b, this); }
+
+ const_local_iterator
+ end(size_type __b) const
+ { return const_local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ cbegin(size_type __b) const
+ { return const_local_iterator(_Base::cbegin(__b), __b, this); }
+
+ const_local_iterator
+ cend(size_type __b) const
+ { return const_local_iterator(_Base::cend(__b), __b, this); }
+
+ template<typename... _Args>
+ std::pair<iterator, bool>
+ emplace(_Args&&... __args)
+ {
+ size_type __bucket_count = this->bucket_count();
+ std::pair<_Base_iterator, bool> __res
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return std::make_pair(iterator(__res.first, this), __res.second);
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __hint, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__hint);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::emplace_hint(__hint.base(),
+ std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
std::pair<iterator, bool>
insert(const value_type& __obj)
{
+ size_type __bucket_count = this->bucket_count();
std::pair<_Base_iterator, bool> __res = _Base::insert(__obj);
+ _M_check_rehashed(__bucket_count);
return std::make_pair(iterator(__res.first, this), __res.second);
}
@@ -188,43 +238,56 @@ namespace __debug
insert(const_iterator __hint, const value_type& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(), __obj), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__hint.base(), __obj);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
- std::pair<iterator, bool>
- insert(_Pair&& __obj)
- {
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
+ std::pair<iterator, bool>
+ insert(_Pair&& __obj)
+ {
+ size_type __bucket_count = this->bucket_count();
std::pair<_Base_iterator, bool> __res =
_Base::insert(std::forward<_Pair>(__obj));
+ _M_check_rehashed(__bucket_count);
return std::make_pair(iterator(__res.first, this), __res.second);
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
- iterator
- insert(const_iterator __hint, _Pair&& __obj)
- {
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
+ iterator
+ insert(const_iterator __hint, _Pair&& __obj)
+ {
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(),
- std::forward<_Pair>(__obj)),
- this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it =
+ _Base::insert(__hint.base(), std::forward<_Pair>(__obj));
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
void
insert(std::initializer_list<value_type> __l)
- { _Base::insert(__l); }
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base::insert(__l);
+ _M_check_rehashed(__bucket_count);
+ }
template<typename _InputIterator>
- void
- insert(_InputIterator __first, _InputIterator __last)
- {
+ void
+ insert(_InputIterator __first, _InputIterator __last)
+ {
__glibcxx_check_valid_range(__first, __last);
+ size_type __bucket_count = this->bucket_count();
_Base::insert(__gnu_debug::__base(__first),
__gnu_debug::__base(__last));
+ _M_check_rehashed(__bucket_count);
}
iterator
@@ -260,8 +323,15 @@ namespace __debug
_Base_iterator __victim(_Base::find(__key));
if (__victim != _Base::end())
{
- this->_M_invalidate_if(_Equal(__victim));
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
+ size_type __bucket_count = this->bucket_count();
_Base::erase(__victim);
+ _M_check_rehashed(__bucket_count);
__ret = 1;
}
return __ret;
@@ -271,11 +341,24 @@ namespace __debug
erase(const_iterator __it)
{
__glibcxx_check_erase(__it);
- this->_M_invalidate_if(_Equal(__it.base()));
- return iterator(_Base::erase(__it.base()), this);
+ _Base_const_iterator __victim = __it.base();
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_const_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __next = _Base::erase(__it.base());
+ _M_check_rehashed(__bucket_count);
+ return iterator(__next, this);
}
iterator
+ erase(iterator __it)
+ { return erase(const_iterator(__it)); }
+
+ iterator
erase(const_iterator __first, const_iterator __last)
{
__glibcxx_check_erase_range(__first, __last);
@@ -286,24 +369,65 @@ namespace __debug
_M_message(__gnu_debug::__msg_valid_range)
._M_iterator(__first, "first")
._M_iterator(__last, "last"));
- this->_M_invalidate_if(_Equal(__tmp));
+ this->_M_invalidate_if([__tmp](_Base_const_iterator __it)
+ { return __it == __tmp; });
+ _Base_const_local_iterator __local_tmp = _S_to_local(__tmp);
+ this->_M_invalidate_local_if(
+ [__local_tmp](_Base_const_local_iterator __it)
+ { return __it == __local_tmp; });
}
- return iterator(_Base::erase(__first.base(),
- __last.base()), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __next = _Base::erase(__first.base(), __last.base());
+ _M_check_rehashed(__bucket_count);
+ return iterator(__next, this);
}
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const noexcept { return *this; }
private:
void
+ _M_invalidate_locals()
+ {
+ _Base_local_iterator __local_end = _Base::end(0);
+ this->_M_invalidate_local_if(
+ [__local_end](_Base_const_local_iterator __it)
+ { return __it != __local_end; });
+ }
+
+ void
_M_invalidate_all()
{
- typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
- this->_M_invalidate_if(_Not_equal(_Base::end()));
+ _Base_iterator __end = _Base::end();
+ this->_M_invalidate_if([__end](_Base_const_iterator __it)
+ { return __it != __end; });
+ _M_invalidate_locals();
+ }
+
+ void
+ _M_check_rehashed(size_type __prev_count)
+ {
+ if (__prev_count != this->bucket_count())
+ _M_invalidate_locals();
+ }
+
+ static _Base_local_iterator
+ _S_to_local(_Base_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_local_iterator(__it._M_cur, 0, 0);
+ }
+
+ static _Base_const_local_iterator
+ _S_to_local(_Base_const_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_const_local_iterator(__it._M_cur, 0, 0);
}
};
@@ -337,15 +461,17 @@ namespace __debug
class unordered_multimap
: public _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash,
_Pred, _Alloc>,
- public __gnu_debug::_Safe_sequence<unordered_multimap<_Key, _Tp, _Hash,
- _Pred, _Alloc> >
+ public __gnu_debug::_Safe_unordered_container<unordered_multimap<_Key,
+ _Tp, _Hash, _Pred, _Alloc> >
{
typedef _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash,
_Pred, _Alloc> _Base;
- typedef __gnu_debug::_Safe_sequence<unordered_multimap> _Safe_base;
+ typedef __gnu_debug::_Safe_unordered_container<unordered_multimap>
+ _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
- typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+ typedef typename _Base::const_local_iterator _Base_const_local_iterator;
+ typedef typename _Base::local_iterator _Base_local_iterator;
public:
typedef typename _Base::size_type size_type;
@@ -360,6 +486,10 @@ namespace __debug
unordered_multimap> iterator;
typedef __gnu_debug::_Safe_iterator<_Base_const_iterator,
unordered_multimap> const_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<
+ _Base_local_iterator, unordered_multimap> local_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<
+ _Base_const_local_iterator, unordered_multimap> const_local_iterator;
explicit
unordered_multimap(size_type __n = 10,
@@ -369,7 +499,7 @@ namespace __debug
: _Base(__n, __hf, __eql, __a) { }
template<typename _InputIterator>
- unordered_multimap(_InputIterator __first, _InputIterator __last,
+ unordered_multimap(_InputIterator __first, _InputIterator __last,
size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
@@ -377,23 +507,23 @@ namespace __debug
: _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
__last)),
__gnu_debug::__base(__last), __n,
- __hf, __eql, __a), _Safe_base() { }
+ __hf, __eql, __a) { }
- unordered_multimap(const unordered_multimap& __x)
- : _Base(__x), _Safe_base() { }
+ unordered_multimap(const unordered_multimap& __x) = default;
unordered_multimap(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
- unordered_multimap(unordered_multimap&& __x)
- : _Base(std::move(__x)), _Safe_base() { }
+ unordered_multimap(unordered_multimap&& __x) = default;
unordered_multimap(initializer_list<value_type> __l,
size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __n, __hf, __eql, __a), _Safe_base() { }
+ : _Base(__l, __n, __hf, __eql, __a) { }
+
+ ~unordered_multimap() noexcept { }
unordered_multimap&
operator=(const unordered_multimap& __x)
@@ -429,70 +559,127 @@ namespace __debug
}
void
- clear()
+ clear() noexcept
{
_Base::clear();
this->_M_invalidate_all();
}
iterator
- begin()
+ begin() noexcept
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const noexcept
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() noexcept
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const noexcept
{ return const_iterator(_Base::end(), this); }
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
// local versions
- using _Base::begin;
- using _Base::end;
- using _Base::cbegin;
- using _Base::cend;
+ local_iterator
+ begin(size_type __b)
+ { return local_iterator(_Base::begin(__b), __b, this); }
+
+ local_iterator
+ end(size_type __b)
+ { return local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ begin(size_type __b) const
+ { return const_local_iterator(_Base::begin(__b), __b, this); }
+
+ const_local_iterator
+ end(size_type __b) const
+ { return const_local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ cbegin(size_type __b) const
+ { return const_local_iterator(_Base::cbegin(__b), __b, this); }
+
+ const_local_iterator
+ cend(size_type __b) const
+ { return const_local_iterator(_Base::cend(__b), __b, this); }
+
+ template<typename... _Args>
+ iterator
+ emplace(_Args&&... __args)
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __hint, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__hint);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::emplace_hint(__hint.base(),
+ std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
iterator
insert(const value_type& __obj)
- { return iterator(_Base::insert(__obj), this); }
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__obj);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
iterator
insert(const_iterator __hint, const value_type& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(), __obj), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__hint.base(), __obj);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
- iterator
- insert(_Pair&& __obj)
- { return iterator(_Base::insert(std::forward<_Pair>(__obj)), this); }
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
+ iterator
+ insert(_Pair&& __obj)
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(std::forward<_Pair>(__obj));
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __hint, _Pair&& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(),
- std::forward<_Pair>(__obj)),
- this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it =
+ _Base::insert(__hint.base(), std::forward<_Pair>(__obj));
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
void
@@ -500,12 +687,14 @@ namespace __debug
{ _Base::insert(__l); }
template<typename _InputIterator>
- void
- insert(_InputIterator __first, _InputIterator __last)
- {
+ void
+ insert(_InputIterator __first, _InputIterator __last)
+ {
__glibcxx_check_valid_range(__first, __last);
+ size_type __bucket_count = this->bucket_count();
_Base::insert(__gnu_debug::__base(__first),
__gnu_debug::__base(__last));
+ _M_check_rehashed(__bucket_count);
}
iterator
@@ -538,14 +727,21 @@ namespace __debug
erase(const key_type& __key)
{
size_type __ret(0);
+ size_type __bucket_count = this->bucket_count();
std::pair<_Base_iterator, _Base_iterator> __pair =
_Base::equal_range(__key);
for (_Base_iterator __victim = __pair.first; __victim != __pair.second;)
{
- this->_M_invalidate_if(_Equal(__victim));
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
_Base::erase(__victim++);
++__ret;
}
+ _M_check_rehashed(__bucket_count);
return __ret;
}
@@ -553,11 +749,24 @@ namespace __debug
erase(const_iterator __it)
{
__glibcxx_check_erase(__it);
- this->_M_invalidate_if(_Equal(__it.base()));
- return iterator(_Base::erase(__it.base()), this);
+ _Base_const_iterator __victim = __it.base();
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_const_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __next = _Base::erase(__it.base());
+ _M_check_rehashed(__bucket_count);
+ return iterator(__next, this);
}
iterator
+ erase(iterator __it)
+ { return erase(const_iterator(__it)); }
+
+ iterator
erase(const_iterator __first, const_iterator __last)
{
__glibcxx_check_erase_range(__first, __last);
@@ -568,24 +777,65 @@ namespace __debug
_M_message(__gnu_debug::__msg_valid_range)
._M_iterator(__first, "first")
._M_iterator(__last, "last"));
- this->_M_invalidate_if(_Equal(__tmp));
+ this->_M_invalidate_if([__tmp](_Base_const_iterator __it)
+ { return __it == __tmp; });
+ _Base_const_local_iterator __local_tmp = _S_to_local(__tmp);
+ this->_M_invalidate_local_if(
+ [__local_tmp](_Base_const_local_iterator __it)
+ { return __it == __local_tmp; });
}
- return iterator(_Base::erase(__first.base(),
- __last.base()), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __next = _Base::erase(__first.base(), __last.base());
+ _M_check_rehashed(__bucket_count);
+ return iterator(__next, this);
}
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const noexcept { return *this; }
private:
void
+ _M_invalidate_locals()
+ {
+ _Base_local_iterator __local_end = _Base::end(0);
+ this->_M_invalidate_local_if(
+ [__local_end](_Base_const_local_iterator __it)
+ { return __it != __local_end; });
+ }
+
+ void
_M_invalidate_all()
{
- typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
- this->_M_invalidate_if(_Not_equal(_Base::end()));
+ _Base_iterator __end = _Base::end();
+ this->_M_invalidate_if([__end](_Base_const_iterator __it)
+ { return __it != __end; });
+ _M_invalidate_locals();
+ }
+
+ void
+ _M_check_rehashed(size_type __prev_count)
+ {
+ if (__prev_count != this->bucket_count())
+ _M_invalidate_locals();
+ }
+
+ static _Base_local_iterator
+ _S_to_local(_Base_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_local_iterator(__it._M_cur, 0, 0);
+ }
+
+ static _Base_const_local_iterator
+ _S_to_local(_Base_const_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_const_local_iterator(__it._M_cur, 0, 0);
}
};
diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set
index e30f976d3d..b91a1781e6 100644
--- a/libstdc++-v3/include/debug/unordered_set
+++ b/libstdc++-v3/include/debug/unordered_set
@@ -1,6 +1,6 @@
// Debugging unordered_set/unordered_multiset implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,8 +35,9 @@
#else
# include <unordered_set>
-#include <debug/safe_sequence.h>
+#include <debug/safe_unordered_container.h>
#include <debug/safe_iterator.h>
+#include <debug/safe_local_iterator.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -49,15 +50,16 @@ namespace __debug
typename _Alloc = std::allocator<_Value> >
class unordered_set
: public _GLIBCXX_STD_C::unordered_set<_Value, _Hash, _Pred, _Alloc>,
- public __gnu_debug::_Safe_sequence<unordered_set<_Value, _Hash,
+ public __gnu_debug::_Safe_unordered_container<unordered_set<_Value, _Hash,
_Pred, _Alloc> >
{
typedef _GLIBCXX_STD_C::unordered_set<_Value, _Hash,
_Pred, _Alloc> _Base;
- typedef __gnu_debug::_Safe_sequence<unordered_set> _Safe_base;
+ typedef __gnu_debug::_Safe_unordered_container<unordered_set> _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
- typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+ typedef typename _Base::const_local_iterator _Base_const_local_iterator;
+ typedef typename _Base::local_iterator _Base_local_iterator;
public:
typedef typename _Base::size_type size_type;
@@ -72,6 +74,10 @@ namespace __debug
unordered_set> iterator;
typedef __gnu_debug::_Safe_iterator<_Base_const_iterator,
unordered_set> const_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<_Base_local_iterator,
+ unordered_set> local_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<_Base_const_local_iterator,
+ unordered_set> const_local_iterator;
explicit
unordered_set(size_type __n = 10,
@@ -89,23 +95,23 @@ namespace __debug
: _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
__last)),
__gnu_debug::__base(__last), __n,
- __hf, __eql, __a), _Safe_base() { }
+ __hf, __eql, __a) { }
- unordered_set(const unordered_set& __x)
- : _Base(__x), _Safe_base() { }
+ unordered_set(const unordered_set& __x) = default;
unordered_set(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
- unordered_set(unordered_set&& __x)
- : _Base(std::move(__x)), _Safe_base() { }
+ unordered_set(unordered_set&& __x) = default;
unordered_set(initializer_list<value_type> __l,
size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __n, __hf, __eql, __a), _Safe_base() { }
+ : _Base(__l, __n, __hf, __eql, __a) { }
+
+ ~unordered_set() noexcept { }
unordered_set&
operator=(const unordered_set& __x)
@@ -141,47 +147,91 @@ namespace __debug
}
void
- clear()
+ clear() noexcept
{
_Base::clear();
this->_M_invalidate_all();
}
iterator
- begin()
+ begin() noexcept
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const noexcept
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() noexcept
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const noexcept
{ return const_iterator(_Base::end(), this); }
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
// local versions
- using _Base::begin;
- using _Base::end;
- using _Base::cbegin;
- using _Base::cend;
+ local_iterator
+ begin(size_type __b)
+ { return local_iterator(_Base::begin(__b), __b, this); }
+
+ local_iterator
+ end(size_type __b)
+ { return local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ begin(size_type __b) const
+ { return const_local_iterator(_Base::begin(__b), __b, this); }
+
+ const_local_iterator
+ end(size_type __b) const
+ { return const_local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ cbegin(size_type __b) const
+ { return const_local_iterator(_Base::cbegin(__b), __b, this); }
+
+ const_local_iterator
+ cend(size_type __b) const
+ { return const_local_iterator(_Base::cend(__b), __b, this); }
+
+ template<typename... _Args>
+ std::pair<iterator, bool>
+ emplace(_Args&&... __args)
+ {
+ size_type __bucket_count = this->bucket_count();
+ std::pair<_Base_iterator, bool> __res
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return std::make_pair(iterator(__res.first, this), __res.second);
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __hint, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__hint);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::emplace_hint(__hint.base(),
+ std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
std::pair<iterator, bool>
insert(const value_type& __obj)
{
+ size_type __bucket_count = this->bucket_count();
typedef std::pair<_Base_iterator, bool> __pair_type;
- __pair_type __res = _Base::insert(__obj);
+ __pair_type __res = _Base::insert(__obj);
+ _M_check_rehashed(__bucket_count);
return std::make_pair(iterator(__res.first, this), __res.second);
}
@@ -189,14 +239,19 @@ namespace __debug
insert(const_iterator __hint, const value_type& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(), __obj), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__hint.base(), __obj);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
std::pair<iterator, bool>
insert(value_type&& __obj)
{
+ size_type __bucket_count = this->bucket_count();
typedef std::pair<typename _Base::iterator, bool> __pair_type;
- __pair_type __res = _Base::insert(std::move(__obj));
+ __pair_type __res = _Base::insert(std::move(__obj));
+ _M_check_rehashed(__bucket_count);
return std::make_pair(iterator(__res.first, this), __res.second);
}
@@ -204,20 +259,29 @@ namespace __debug
insert(const_iterator __hint, value_type&& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(), std::move(__obj)), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__hint.base(), std::move(__obj));
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
void
insert(std::initializer_list<value_type> __l)
- { _Base::insert(__l); }
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base::insert(__l);
+ _M_check_rehashed(__bucket_count);
+ }
template<typename _InputIterator>
- void
- insert(_InputIterator __first, _InputIterator __last)
- {
+ void
+ insert(_InputIterator __first, _InputIterator __last)
+ {
__glibcxx_check_valid_range(__first, __last);
+ size_type __bucket_count = this->bucket_count();
_Base::insert(__gnu_debug::__base(__first),
__gnu_debug::__base(__last));
+ _M_check_rehashed(__bucket_count);
}
iterator
@@ -253,8 +317,16 @@ namespace __debug
_Base_iterator __victim(_Base::find(__key));
if (__victim != _Base::end())
{
- this->_M_invalidate_if(_Equal(__victim));
+ this->_M_invalidate_if(
+ [__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
+ size_type __bucket_count = this->bucket_count();
_Base::erase(__victim);
+ _M_check_rehashed(__bucket_count);
__ret = 1;
}
return __ret;
@@ -264,11 +336,25 @@ namespace __debug
erase(const_iterator __it)
{
__glibcxx_check_erase(__it);
- this->_M_invalidate_if(_Equal(__it.base()));
- return iterator(_Base::erase(__it.base()), this);
+ _Base_const_iterator __victim = __it.base();
+ this->_M_invalidate_if(
+ [__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_const_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __next = _Base::erase(__it.base());
+ _M_check_rehashed(__bucket_count);
+ return iterator(__next, this);
}
iterator
+ erase(iterator __it)
+ { return erase(const_iterator(__it)); }
+
+ iterator
erase(const_iterator __first, const_iterator __last)
{
__glibcxx_check_erase_range(__first, __last);
@@ -279,24 +365,68 @@ namespace __debug
_M_message(__gnu_debug::__msg_valid_range)
._M_iterator(__first, "first")
._M_iterator(__last, "last"));
- this->_M_invalidate_if(_Equal(__tmp));
+ this->_M_invalidate_if(
+ [__tmp](_Base_const_iterator __it)
+ { return __it == __tmp; });
+ _Base_const_local_iterator __local_tmp = _S_to_local(__tmp);
+ this->_M_invalidate_local_if(
+ [__local_tmp](_Base_const_local_iterator __it)
+ { return __it == __local_tmp; });
}
- return iterator(_Base::erase(__first.base(),
- __last.base()), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __next = _Base::erase(__first.base(),
+ __last.base());
+ _M_check_rehashed(__bucket_count);
+ return iterator(__next, this);
}
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const noexcept { return *this; }
private:
void
+ _M_invalidate_locals()
+ {
+ _Base_local_iterator __local_end = _Base::end(0);
+ this->_M_invalidate_local_if(
+ [__local_end](_Base_const_local_iterator __it)
+ { return __it != __local_end; });
+ }
+
+ void
_M_invalidate_all()
{
- typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
- this->_M_invalidate_if(_Not_equal(_Base::end()));
+ _Base_iterator __end = _Base::end();
+ this->_M_invalidate_if(
+ [__end](_Base_const_iterator __it)
+ { return __it != __end; });
+ _M_invalidate_locals();
+ }
+
+ void
+ _M_check_rehashed(size_type __prev_count)
+ {
+ if (__prev_count != this->bucket_count())
+ _M_invalidate_locals();
+ }
+
+ static _Base_local_iterator
+ _S_to_local(_Base_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_local_iterator(__it._M_cur, 0, 0);
+ }
+
+ static _Base_const_local_iterator
+ _S_to_local(_Base_const_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_const_local_iterator(__it._M_cur, 0, 0);
}
};
@@ -326,15 +456,17 @@ namespace __debug
typename _Alloc = std::allocator<_Value> >
class unordered_multiset
: public _GLIBCXX_STD_C::unordered_multiset<_Value, _Hash, _Pred, _Alloc>,
- public __gnu_debug::_Safe_sequence<unordered_multiset<_Value, _Hash,
- _Pred, _Alloc> >
+ public __gnu_debug::_Safe_unordered_container<
+ unordered_multiset<_Value, _Hash, _Pred, _Alloc> >
{
typedef _GLIBCXX_STD_C::unordered_multiset<_Value, _Hash,
_Pred, _Alloc> _Base;
- typedef __gnu_debug::_Safe_sequence<unordered_multiset> _Safe_base;
+ typedef __gnu_debug::_Safe_unordered_container<unordered_multiset>
+ _Safe_base;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef typename _Base::iterator _Base_iterator;
- typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+ typedef typename _Base::const_local_iterator _Base_const_local_iterator;
+ typedef typename _Base::local_iterator _Base_local_iterator;
public:
typedef typename _Base::size_type size_type;
@@ -349,6 +481,10 @@ namespace __debug
unordered_multiset> iterator;
typedef __gnu_debug::_Safe_iterator<_Base_const_iterator,
unordered_multiset> const_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<
+ _Base_local_iterator, unordered_multiset> local_iterator;
+ typedef __gnu_debug::_Safe_local_iterator<
+ _Base_const_local_iterator, unordered_multiset> const_local_iterator;
explicit
unordered_multiset(size_type __n = 10,
@@ -366,23 +502,23 @@ namespace __debug
: _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
__last)),
__gnu_debug::__base(__last), __n,
- __hf, __eql, __a), _Safe_base() { }
+ __hf, __eql, __a) { }
- unordered_multiset(const unordered_multiset& __x)
- : _Base(__x), _Safe_base() { }
+ unordered_multiset(const unordered_multiset& __x) = default;
unordered_multiset(const _Base& __x)
- : _Base(__x), _Safe_base() { }
+ : _Base(__x) { }
- unordered_multiset(unordered_multiset&& __x)
- : _Base(std::move(__x)), _Safe_base() { }
+ unordered_multiset(unordered_multiset&& __x) = default;
unordered_multiset(initializer_list<value_type> __l,
size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l, __n, __hf, __eql, __a), _Safe_base() { }
+ : _Base(__l, __n, __hf, __eql, __a) { }
+
+ ~unordered_multiset() noexcept { }
unordered_multiset&
operator=(const unordered_multiset& __x)
@@ -418,75 +554,139 @@ namespace __debug
}
void
- clear()
+ clear() noexcept
{
_Base::clear();
this->_M_invalidate_all();
}
iterator
- begin()
+ begin() noexcept
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const noexcept
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() noexcept
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const noexcept
{ return const_iterator(_Base::end(), this); }
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
// local versions
- using _Base::begin;
- using _Base::end;
- using _Base::cbegin;
- using _Base::cend;
+ local_iterator
+ begin(size_type __b)
+ { return local_iterator(_Base::begin(__b), __b, this); }
+
+ local_iterator
+ end(size_type __b)
+ { return local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ begin(size_type __b) const
+ { return const_local_iterator(_Base::begin(__b), __b, this); }
+
+ const_local_iterator
+ end(size_type __b) const
+ { return const_local_iterator(_Base::end(__b), __b, this); }
+
+ const_local_iterator
+ cbegin(size_type __b) const
+ { return const_local_iterator(_Base::cbegin(__b), __b, this); }
+
+ const_local_iterator
+ cend(size_type __b) const
+ { return const_local_iterator(_Base::cend(__b), __b, this); }
+
+ template<typename... _Args>
+ iterator
+ emplace(_Args&&... __args)
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __hint, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__hint);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::emplace_hint(__hint.base(),
+ std::forward<_Args>(__args)...);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
iterator
insert(const value_type& __obj)
- { return iterator(_Base::insert(__obj), this); }
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__obj);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
iterator
insert(const_iterator __hint, const value_type& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(), __obj), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__hint.base(), __obj);
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
iterator
insert(value_type&& __obj)
- { return iterator(_Base::insert(std::move(__obj)), this); }
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(std::move(__obj));
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
+ }
iterator
insert(const_iterator __hint, value_type&& __obj)
{
__glibcxx_check_insert(__hint);
- return iterator(_Base::insert(__hint.base(), std::move(__obj)), this);
+ size_type __bucket_count = this->bucket_count();
+ _Base_iterator __it = _Base::insert(__hint.base(), std::move(__obj));
+ _M_check_rehashed(__bucket_count);
+ return iterator(__it, this);
}
void
insert(std::initializer_list<value_type> __l)
- { _Base::insert(__l); }
+ {
+ size_type __bucket_count = this->bucket_count();
+ _Base::insert(__l);
+ _M_check_rehashed(__bucket_count);
+ }
template<typename _InputIterator>
- void
- insert(_InputIterator __first, _InputIterator __last)
- {
+ void
+ insert(_InputIterator __first, _InputIterator __last)
+ {
__glibcxx_check_valid_range(__first, __last);
+ size_type __bucket_count = this->bucket_count();
_Base::insert(__gnu_debug::__base(__first),
__gnu_debug::__base(__last));
+ _M_check_rehashed(__bucket_count);
}
iterator
@@ -523,7 +723,12 @@ namespace __debug
_Base::equal_range(__key);
for (_Base_iterator __victim = __pair.first; __victim != __pair.second;)
{
- this->_M_invalidate_if(_Equal(__victim));
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
_Base::erase(__victim++);
++__ret;
}
@@ -534,11 +739,21 @@ namespace __debug
erase(const_iterator __it)
{
__glibcxx_check_erase(__it);
- this->_M_invalidate_if(_Equal(__it.base()));
+ _Base_const_iterator __victim = __it.base();
+ this->_M_invalidate_if([__victim](_Base_const_iterator __it)
+ { return __it == __victim; });
+ _Base_const_local_iterator __local_victim = _S_to_local(__victim);
+ this->_M_invalidate_local_if(
+ [__local_victim](_Base_const_local_iterator __it)
+ { return __it == __local_victim; });
return iterator(_Base::erase(__it.base()), this);
}
iterator
+ erase(iterator __it)
+ { return erase(const_iterator(__it)); }
+
+ iterator
erase(const_iterator __first, const_iterator __last)
{
__glibcxx_check_erase_range(__first, __last);
@@ -549,24 +764,63 @@ namespace __debug
_M_message(__gnu_debug::__msg_valid_range)
._M_iterator(__first, "first")
._M_iterator(__last, "last"));
- this->_M_invalidate_if(_Equal(__tmp));
+ this->_M_invalidate_if([__tmp](_Base_const_iterator __it)
+ { return __it == __tmp; });
+ _Base_const_local_iterator __local_tmp = _S_to_local(__tmp);
+ this->_M_invalidate_local_if(
+ [__local_tmp](_Base_const_local_iterator __it)
+ { return __it == __local_tmp; });
}
return iterator(_Base::erase(__first.base(),
__last.base()), this);
}
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const noexcept { return *this; }
private:
void
+ _M_invalidate_locals()
+ {
+ _Base_local_iterator __local_end = _Base::end(0);
+ this->_M_invalidate_local_if(
+ [__local_end](_Base_const_local_iterator __it)
+ { return __it != __local_end; });
+ }
+
+ void
_M_invalidate_all()
{
- typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
- this->_M_invalidate_if(_Not_equal(_Base::end()));
+ _Base_iterator __end = _Base::end();
+ this->_M_invalidate_if([__end](_Base_const_iterator __it)
+ { return __it != __end; });
+ _M_invalidate_locals();
+ }
+
+ void
+ _M_check_rehashed(size_type __prev_count)
+ {
+ if (__prev_count != this->bucket_count())
+ _M_invalidate_locals();
+ }
+
+ static _Base_local_iterator
+ _S_to_local(_Base_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_local_iterator(__it._M_cur, 0, 0);
+ }
+
+ static _Base_const_local_iterator
+ _S_to_local(_Base_const_iterator __it)
+ {
+ // The returned local iterator will not be incremented so we don't
+ // need to compute __it's node bucket
+ return _Base_const_local_iterator(__it._M_cur, 0, 0);
}
};
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index b5daaa46fa..5ee0fabc32 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -1,6 +1,6 @@
// Debugging vector implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -47,12 +47,15 @@ namespace __debug
public __gnu_debug::_Safe_sequence<vector<_Tp, _Allocator> >
{
typedef _GLIBCXX_STD_C::vector<_Tp, _Allocator> _Base;
- typedef __gnu_debug::_Safe_sequence<vector> _Safe_base;
typedef typename _Base::iterator _Base_iterator;
typedef typename _Base::const_iterator _Base_const_iterator;
typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ typedef __gnu_cxx::__alloc_traits<_Allocator> _Alloc_traits;
+#endif
+
public:
typedef typename _Base::reference reference;
typedef typename _Base::const_reference const_reference;
@@ -102,28 +105,39 @@ namespace __debug
{ _M_update_guaranteed_capacity(); }
vector(const vector& __x)
- : _Base(__x), _Safe_base(), _M_guaranteed_capacity(__x.size()) { }
+ : _Base(__x), _M_guaranteed_capacity(__x.size()) { }
/// Construction from a release-mode vector
vector(const _Base& __x)
- : _Base(__x), _Safe_base(), _M_guaranteed_capacity(__x.size()) { }
+ : _Base(__x), _M_guaranteed_capacity(__x.size()) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- vector(vector&& __x)
- : _Base(std::move(__x)), _Safe_base(),
+ vector(vector&& __x) noexcept
+ : _Base(std::move(__x)),
_M_guaranteed_capacity(this->size())
{
this->_M_swap(__x);
__x._M_guaranteed_capacity = 0;
}
+ vector(const vector& __x, const allocator_type& __a)
+ : _Base(__x, __a), _M_guaranteed_capacity(__x.size()) { }
+
+ vector(vector&& __x, const allocator_type& __a)
+ : _Base(std::move(__x), __a),
+ _M_guaranteed_capacity(this->size())
+ {
+ __x._M_invalidate_all();
+ __x._M_guaranteed_capacity = 0;
+ }
+
vector(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
- : _Base(__l, __a), _Safe_base(),
+ : _Base(__l, __a),
_M_guaranteed_capacity(__l.size()) { }
#endif
- ~vector() { }
+ ~vector() _GLIBCXX_NOEXCEPT { }
vector&
operator=(const vector& __x)
@@ -136,12 +150,13 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
vector&
- operator=(vector&& __x)
+ operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
{
- // NB: DR 1204.
- // NB: DR 675.
- clear();
- swap(__x);
+ _Base::operator=(std::move(__x));
+ this->_M_invalidate_all();
+ _M_update_guaranteed_capacity();
+ __x._M_invalidate_all();
+ __x._M_guaranteed_capacity = 0;
return *this;
}
@@ -188,52 +203,52 @@ namespace __debug
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -280,11 +295,19 @@ namespace __debug
#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- using _Base::shrink_to_fit;
+ void
+ shrink_to_fit()
+ {
+ if (_Base::_M_shrink_to_fit())
+ {
+ _M_guaranteed_capacity = _Base::capacity();
+ this->_M_invalidate_all();
+ }
+ }
#endif
size_type
- capacity() const
+ capacity() const _GLIBCXX_NOEXCEPT
{
#ifdef _GLIBCXX_DEBUG_PEDANTIC
return _M_guaranteed_capacity;
@@ -506,6 +529,9 @@ namespace __debug
void
swap(vector& __x)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(_Alloc_traits::_S_nothrow_swap())
+#endif
{
_Base::swap(__x);
this->_M_swap(__x);
@@ -513,7 +539,7 @@ namespace __debug
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_Base::clear();
this->_M_invalidate_all();
@@ -521,10 +547,10 @@ namespace __debug
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
private:
size_type _M_guaranteed_capacity;
@@ -599,7 +625,7 @@ namespace __debug
: public __hash_base<size_t, __debug::vector<bool, _Alloc>>
{
size_t
- operator()(const __debug::vector<bool, _Alloc>& __b) const
+ operator()(const __debug::vector<bool, _Alloc>& __b) const noexcept
{ return std::hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>()
(__b._M_base()); }
};
diff --git a/libstdc++-v3/include/decimal/decimal.h b/libstdc++-v3/include/decimal/decimal.h
index f8f05734ba..6bc9e6a930 100644
--- a/libstdc++-v3/include/decimal/decimal.h
+++ b/libstdc++-v3/include/decimal/decimal.h
@@ -288,7 +288,7 @@ namespace decimal
inline _Tp operator _Op(_Tp __rhs) \
{ \
_Tp __tmp; \
- __tmp.__setval(0 _Op __rhs.__getval()); \
+ __tmp.__setval(_Op __rhs.__getval()); \
return __tmp; \
}
diff --git a/libstdc++-v3/include/ext/algorithm b/libstdc++-v3/include/ext/algorithm
index 417a03ab97..e9a48dbd0c 100644
--- a/libstdc++-v3/include/ext/algorithm
+++ b/libstdc++-v3/include/ext/algorithm
@@ -105,9 +105,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,first+count) into [result,result+count).
- * @param first An input iterator.
- * @param count The number of elements to copy.
- * @param result An output iterator.
+ * @param __first An input iterator.
+ * @param __count The number of elements to copy.
+ * @param __result An output iterator.
* @return A std::pair composed of first+count and result+count.
*
* This is an SGI extension.
@@ -185,10 +185,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief @c memcmp on steroids.
- * @param first1 An input iterator.
- * @param last1 An input iterator.
- * @param first2 An input iterator.
- * @param last2 An input iterator.
+ * @param __first1 An input iterator.
+ * @param __last1 An input iterator.
+ * @param __first2 An input iterator.
+ * @param __last2 An input iterator.
* @return An int, as with @c memcmp.
*
* The return value will be less than zero if the first range is
@@ -533,9 +533,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find the median of three values.
- * @param a A value.
- * @param b A value.
- * @param c A value.
+ * @param __a A value.
+ * @param __b A value.
+ * @param __c A value.
* @return One of @p a, @p b or @p c.
*
* If @c {l,m,n} is some convolution of @p {a,b,c} such that @c l<=m<=n
@@ -566,10 +566,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Find the median of three values using a predicate for comparison.
- * @param a A value.
- * @param b A value.
- * @param c A value.
- * @param comp A binary predicate.
+ * @param __a A value.
+ * @param __b A value.
+ * @param __c A value.
+ * @param __comp A binary predicate.
* @return One of @p a, @p b or @p c.
*
* If @c {l,m,n} is some convolution of @p {a,b,c} such that @p comp(l,m)
diff --git a/libstdc++-v3/include/ext/alloc_traits.h b/libstdc++-v3/include/ext/alloc_traits.h
new file mode 100644
index 0000000000..e2c35c96d8
--- /dev/null
+++ b/libstdc++-v3/include/ext/alloc_traits.h
@@ -0,0 +1,229 @@
+// Allocator traits -*- C++ -*-
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ext/alloc_traits.h
+ * This file is a GNU extension to the Standard C++ Library.
+ */
+
+#ifndef _EXT_ALLOC_TRAITS_H
+#define _EXT_ALLOC_TRAITS_H 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/move.h>
+# include <bits/alloc_traits.h>
+#else
+# include <bits/allocator.h> // for __alloc_swap
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ template<typename> struct allocator;
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Alloc>
+ struct __allocator_always_compares_equal
+ { static const bool value = false; };
+
+ template<typename _Alloc>
+ const bool __allocator_always_compares_equal<_Alloc>::value;
+
+ template<typename _Tp>
+ struct __allocator_always_compares_equal<std::allocator<_Tp>>
+ { static const bool value = true; };
+
+ template<typename _Tp>
+ const bool __allocator_always_compares_equal<std::allocator<_Tp>>::value;
+
+ template<typename, typename> struct array_allocator;
+
+ template<typename _Tp, typename _Array>
+ struct __allocator_always_compares_equal<array_allocator<_Tp, _Array>>
+ { static const bool value = true; };
+
+ template<typename _Tp, typename _Array>
+ const bool
+ __allocator_always_compares_equal<array_allocator<_Tp, _Array>>::value;
+
+ template<typename> struct mt_allocator;
+
+ template<typename _Tp>
+ struct __allocator_always_compares_equal<mt_allocator<_Tp>>
+ { static const bool value = true; };
+
+ template<typename _Tp>
+ const bool __allocator_always_compares_equal<mt_allocator<_Tp>>::value;
+
+ template<typename> struct new_allocator;
+
+ template<typename _Tp>
+ struct __allocator_always_compares_equal<new_allocator<_Tp>>
+ { static const bool value = true; };
+
+ template<typename _Tp>
+ const bool __allocator_always_compares_equal<new_allocator<_Tp>>::value;
+
+ template<typename> struct pool_allocator;
+
+ template<typename _Tp>
+ struct __allocator_always_compares_equal<pool_allocator<_Tp>>
+ { static const bool value = true; };
+
+ template<typename _Tp>
+ const bool __allocator_always_compares_equal<pool_allocator<_Tp>>::value;
+#endif
+
+/**
+ * @brief Uniform interface to C++98 and C++0x allocators.
+ * @ingroup allocators
+*/
+template<typename _Alloc>
+ struct __alloc_traits
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ : std::allocator_traits<_Alloc>
+#endif
+ {
+ typedef _Alloc allocator_type;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ typedef std::allocator_traits<_Alloc> _Base_type;
+ typedef typename _Base_type::value_type value_type;
+ typedef typename _Base_type::pointer pointer;
+ typedef typename _Base_type::const_pointer const_pointer;
+ typedef typename _Base_type::size_type size_type;
+ // C++0x allocators do not define reference or const_reference
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ using _Base_type::allocate;
+ using _Base_type::deallocate;
+ using _Base_type::construct;
+ using _Base_type::destroy;
+ using _Base_type::max_size;
+
+ private:
+ template<typename _Ptr>
+ struct __is_custom_pointer
+ : std::integral_constant<bool, std::is_same<pointer, _Ptr>::value
+ && !std::is_pointer<_Ptr>::value>
+ { };
+
+ public:
+ // overload construct for non-standard pointer types
+ template<typename _Ptr, typename... _Args>
+ static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
+ construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
+ {
+ _Base_type::construct(__a, std::addressof(*__p),
+ std::forward<_Args>(__args)...);
+ }
+
+ // overload destroy for non-standard pointer types
+ template<typename _Ptr>
+ static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
+ destroy(_Alloc& __a, _Ptr __p)
+ { _Base_type::destroy(__a, std::addressof(*__p)); }
+
+ static _Alloc _S_select_on_copy(const _Alloc& __a)
+ { return _Base_type::select_on_container_copy_construction(__a); }
+
+ static void _S_on_swap(_Alloc& __a, _Alloc& __b)
+ { std::__alloc_on_swap(__a, __b); }
+
+ static constexpr bool _S_propagate_on_copy_assign()
+ { return _Base_type::propagate_on_container_copy_assignment::value; }
+
+ static constexpr bool _S_propagate_on_move_assign()
+ { return _Base_type::propagate_on_container_move_assignment::value; }
+
+ static constexpr bool _S_propagate_on_swap()
+ { return _Base_type::propagate_on_container_swap::value; }
+
+ static constexpr bool _S_always_equal()
+ { return __allocator_always_compares_equal<_Alloc>::value; }
+
+ static constexpr bool _S_nothrow_move()
+ { return _S_propagate_on_move_assign() || _S_always_equal(); }
+
+ static constexpr bool _S_nothrow_swap()
+ {
+ using std::swap;
+ return !_S_propagate_on_swap()
+ || noexcept(swap(std::declval<_Alloc&>(), std::declval<_Alloc&>()));
+ }
+
+ template<typename _Tp>
+ struct rebind
+ { typedef typename _Base_type::template rebind_alloc<_Tp> other; };
+#else
+
+ typedef typename _Alloc::pointer pointer;
+ typedef typename _Alloc::const_pointer const_pointer;
+ typedef typename _Alloc::value_type value_type;
+ typedef typename _Alloc::reference reference;
+ typedef typename _Alloc::const_reference const_reference;
+ typedef typename _Alloc::size_type size_type;
+
+ static pointer
+ allocate(_Alloc& __a, size_type __n)
+ { return __a.allocate(__n); }
+
+ static void deallocate(_Alloc& __a, pointer __p, size_type __n)
+ { __a.deallocate(__p, __n); }
+
+ template<typename _Tp>
+ static void construct(_Alloc& __a, pointer __p, const _Tp& __arg)
+ { __a.construct(__p, __arg); }
+
+ static void destroy(_Alloc& __a, pointer __p)
+ { __a.destroy(__p); }
+
+ static size_type max_size(const _Alloc& __a)
+ { return __a.max_size(); }
+
+ static const _Alloc& _S_select_on_copy(const _Alloc& __a) { return __a; }
+
+ static void _S_on_swap(_Alloc& __a, _Alloc& __b)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 431. Swapping containers with unequal allocators.
+ std::__alloc_swap<_Alloc>::_S_do_it(__a, __b);
+ }
+
+ template<typename _Tp>
+ struct rebind
+ { typedef typename _Alloc::template rebind<_Tp>::other other; };
+#endif
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+#endif
diff --git a/libstdc++-v3/include/ext/array_allocator.h b/libstdc++-v3/include/ext/array_allocator.h
index 9c61d7431b..2c9666a724 100644
--- a/libstdc++-v3/include/ext/array_allocator.h
+++ b/libstdc++-v3/include/ext/array_allocator.h
@@ -1,6 +1,6 @@
// array allocator -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -57,10 +57,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Tp value_type;
pointer
- address(reference __x) const { return std::__addressof(__x); }
+ address(reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return std::__addressof(__x); }
+ address(const_reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
void
deallocate(pointer, size_type)
@@ -69,24 +71,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_t(-1) / sizeof(_Tp); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p) { __p->~_Up(); }
+#else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
{ ::new((void *)__p) value_type(__val); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p) { __p->~_Tp(); }
+#endif
};
/**
@@ -116,17 +122,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef array_allocator<_Tp1, _Array1> other; };
- array_allocator(array_type* __array = 0) throw()
+ array_allocator(array_type* __array = 0) _GLIBCXX_USE_NOEXCEPT
: _M_array(__array), _M_used(size_type()) { }
- array_allocator(const array_allocator& __o) throw()
+ array_allocator(const array_allocator& __o) _GLIBCXX_USE_NOEXCEPT
: _M_array(__o._M_array), _M_used(__o._M_used) { }
template<typename _Tp1, typename _Array1>
- array_allocator(const array_allocator<_Tp1, _Array1>&) throw()
+ array_allocator(const array_allocator<_Tp1, _Array1>&)
+ _GLIBCXX_USE_NOEXCEPT
: _M_array(0), _M_used(size_type()) { }
- ~array_allocator() throw() { }
+ ~array_allocator() _GLIBCXX_USE_NOEXCEPT { }
pointer
allocate(size_type __n, const void* = 0)
diff --git a/libstdc++-v3/include/ext/atomicity.h b/libstdc++-v3/include/ext/atomicity.h
index f0c775216c..c603063265 100644
--- a/libstdc++-v3/include/ext/atomicity.h
+++ b/libstdc++-v3/include/ext/atomicity.h
@@ -1,6 +1,6 @@
// Support for atomic operations -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010
+// Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -42,14 +42,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// To abstract locking primitives across all thread policies, use:
// __exchange_and_add_dispatch
// __atomic_add_dispatch
-#ifdef _GLIBCXX_ATOMIC_BUILTINS_4
+#ifdef _GLIBCXX_ATOMIC_BUILTINS
static inline _Atomic_word
__exchange_and_add(volatile _Atomic_word* __mem, int __val)
- { return __sync_fetch_and_add(__mem, __val); }
+ { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
static inline void
__atomic_add(volatile _Atomic_word* __mem, int __val)
- { __sync_fetch_and_add(__mem, __val); }
+ { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
#else
_Atomic_word
__attribute__ ((__unused__))
diff --git a/libstdc++-v3/include/ext/bitmap_allocator.h b/libstdc++-v3/include/ext/bitmap_allocator.h
index 4993c2c578..cb6fc38f71 100644
--- a/libstdc++-v3/include/ext/bitmap_allocator.h
+++ b/libstdc++-v3/include/ext/bitmap_allocator.h
@@ -59,7 +59,6 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
* It is to be used only for built-in types or PODs. Notable
* differences are:
*
- * @detail
* 1. Not all accessor functions are present.
* 2. Used ONLY for PODs.
* 3. No Allocator template argument. Uses ::operator new() to get
@@ -238,8 +237,6 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
__lower_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
- typedef typename __mv_iter_traits<_ForwardIterator>::value_type
- _ValueType;
typedef typename __mv_iter_traits<_ForwardIterator>::difference_type
_DistanceType;
@@ -560,7 +557,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __addr The pointer to the memory block to be
* validated.
*
- * @detail Validates the memory block passed to this function and
+ * Validates the memory block passed to this function and
* appropriately performs the action of managing the free list of
* blocks by adding this block to the free list or deleting this
* or larger blocks from the free list.
@@ -757,7 +754,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* @throw std::bad_alloc. If memory can not be allocated.
*
- * @detail Complexity: O(1), but internally depends upon the
+ * Complexity: O(1), but internally depends upon the
* complexity of the function free_list::_M_get. The part where
* the bitmap headers are written has complexity: O(X),where X
* is the number of blocks of size sizeof(value_type) within
@@ -813,7 +810,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* @throw std::bad_alloc. If memory can not be allocated.
*
- * @detail Complexity: Worst case complexity is O(N), but that
+ * Complexity: Worst case complexity is O(N), but that
* is hardly ever hit. If and when this particular case is
* encountered, the next few cases are guaranteed to have a
* worst case complexity of O(1)! That's why this function
@@ -906,7 +903,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/** @brief Deallocates memory that belongs to a single object of
* size sizeof(_Tp).
*
- * @detail Complexity: O(lg(N)), but the worst case is not hit
+ * Complexity: O(lg(N)), but the worst case is not hit
* often! This is because containers usually deallocate memory
* close to each other and this case is handled in O(1) time by
* the deallocate function.
@@ -997,17 +994,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
public:
- bitmap_allocator() throw()
+ bitmap_allocator() _GLIBCXX_USE_NOEXCEPT
{ }
- bitmap_allocator(const bitmap_allocator&)
+ bitmap_allocator(const bitmap_allocator&) _GLIBCXX_USE_NOEXCEPT
{ }
template<typename _Tp1>
- bitmap_allocator(const bitmap_allocator<_Tp1>&) throw()
+ bitmap_allocator(const bitmap_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT
{ }
- ~bitmap_allocator() throw()
+ ~bitmap_allocator() _GLIBCXX_USE_NOEXCEPT
{ }
pointer
@@ -1042,31 +1039,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
pointer
- address(reference __r) const
+ address(reference __r) const _GLIBCXX_NOEXCEPT
{ return std::__addressof(__r); }
const_pointer
- address(const_reference __r) const
+ address(const_reference __r) const _GLIBCXX_NOEXCEPT
{ return std::__addressof(__r); }
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_type(-1) / sizeof(value_type); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p)
+ { __p->~_Up(); }
+#else
void
construct(pointer __p, const_reference __data)
{ ::new((void *)__p) value_type(__data); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p)
{ __p->~value_type(); }
+#endif
};
template<typename _Tp1, typename _Tp2>
diff --git a/libstdc++-v3/include/ext/cast.h b/libstdc++-v3/include/ext/cast.h
index f3384f9a59..de6faab39c 100644
--- a/libstdc++-v3/include/ext/cast.h
+++ b/libstdc++-v3/include/ext/cast.h
@@ -118,4 +118,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
-#endif // __GLIBCXX_CAST_H
+#endif // _GLIBCXX_CAST_H
diff --git a/libstdc++-v3/include/ext/concurrence.h b/libstdc++-v3/include/ext/concurrence.h
index fc8f63f827..18a38368df 100644
--- a/libstdc++-v3/include/ext/concurrence.h
+++ b/libstdc++-v3/include/ext/concurrence.h
@@ -1,6 +1,6 @@
// Support for concurrent programing -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -143,7 +143,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __mutex
{
private:
+#if __GTHREADS && defined __GTHREAD_MUTEX_INIT
+ __gthread_mutex_t _M_mutex = __GTHREAD_MUTEX_INIT;
+#else
__gthread_mutex_t _M_mutex;
+#endif
__mutex(const __mutex&);
__mutex& operator=(const __mutex&);
@@ -151,17 +155,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
__mutex()
{
-#if __GTHREADS
+#if __GTHREADS && ! defined __GTHREAD_MUTEX_INIT
if (__gthread_active_p())
- {
-#if defined __GTHREAD_MUTEX_INIT
- __gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT;
- _M_mutex = __tmp;
-#else
- __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
+ __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
#endif
- }
-#endif
}
#if __GTHREADS && ! defined __GTHREAD_MUTEX_INIT
@@ -201,7 +198,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __recursive_mutex
{
private:
+#if __GTHREADS && defined __GTHREAD_RECURSIVE_MUTEX_INIT
+ __gthread_recursive_mutex_t _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT;
+#else
__gthread_recursive_mutex_t _M_mutex;
+#endif
__recursive_mutex(const __recursive_mutex&);
__recursive_mutex& operator=(const __recursive_mutex&);
@@ -209,17 +210,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
__recursive_mutex()
{
-#if __GTHREADS
+#if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT
if (__gthread_active_p())
- {
-#if defined __GTHREAD_RECURSIVE_MUTEX_INIT
- __gthread_recursive_mutex_t __tmp = __GTHREAD_RECURSIVE_MUTEX_INIT;
- _M_mutex = __tmp;
-#else
- __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
+ __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
#endif
- }
-#endif
}
#if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT
@@ -270,7 +264,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// matches a gthr-win32.h recursive mutex
template<typename _Rm>
- static typename __enable_if<sizeof(&_Rm::sema), void>::__type
+ static typename __enable_if<(bool)sizeof(&_Rm::sema), void>::__type
_S_destroy(_Rm* __mx)
{
__gthread_mutex_t __tmp;
@@ -279,7 +273,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// matches a recursive mutex with a member 'actual'
template<typename _Rm>
- static typename __enable_if<sizeof(&_Rm::actual), void>::__type
+ static typename __enable_if<(bool)sizeof(&_Rm::actual), void>::__type
_S_destroy(_Rm* __mx)
{ __gthread_mutex_destroy(&__mx->actual); }
@@ -319,7 +313,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __cond
{
private:
+#if __GTHREADS && defined __GTHREAD_COND_INIT
+ __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
+#else
__gthread_cond_t _M_cond;
+#endif
__cond(const __cond&);
__cond& operator=(const __cond&);
@@ -327,17 +325,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
__cond()
{
-#if __GTHREADS
+#if __GTHREADS && ! defined __GTHREAD_COND_INIT
if (__gthread_active_p())
- {
-#if defined __GTHREAD_COND_INIT
- __gthread_cond_t __tmp = __GTHREAD_COND_INIT;
- _M_cond = __tmp;
-#else
- __GTHREAD_COND_INIT_FUNCTION(&_M_cond);
+ __GTHREAD_COND_INIT_FUNCTION(&_M_cond);
#endif
- }
-#endif
}
#if __GTHREADS && ! defined __GTHREAD_COND_INIT
diff --git a/libstdc++-v3/include/ext/extptr_allocator.h b/libstdc++-v3/include/ext/extptr_allocator.h
index dfb76ac095..21b1282dbc 100644
--- a/libstdc++-v3/include/ext/extptr_allocator.h
+++ b/libstdc++-v3/include/ext/extptr_allocator.h
@@ -1,6 +1,6 @@
// <extptr_allocator.h> -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,7 +37,7 @@
#define _EXTPTR_ALLOCATOR_H 1
#include <memory>
-#include <limits>
+#include <ext/numeric_traits.h>
#include <ext/pointer.h>
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
@@ -72,23 +72,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef _ExtPtr_allocator<_Up> other; };
- _ExtPtr_allocator() throw()
+ _ExtPtr_allocator() _GLIBCXX_USE_NOEXCEPT
: _M_real_alloc() { }
- _ExtPtr_allocator(const _ExtPtr_allocator &__rarg) throw()
+ _ExtPtr_allocator(const _ExtPtr_allocator& __rarg) _GLIBCXX_USE_NOEXCEPT
: _M_real_alloc(__rarg._M_real_alloc) { }
template<typename _Up>
- _ExtPtr_allocator(const _ExtPtr_allocator<_Up>& __rarg) throw()
+ _ExtPtr_allocator(const _ExtPtr_allocator<_Up>& __rarg)
+ _GLIBCXX_USE_NOEXCEPT
: _M_real_alloc(__rarg._M_getUnderlyingImp()) { }
- ~_ExtPtr_allocator() throw()
+ ~_ExtPtr_allocator() _GLIBCXX_USE_NOEXCEPT
{ }
- pointer address(reference __x) const
+ pointer address(reference __x) const _GLIBCXX_NOEXCEPT
{ return std::__addressof(__x); }
- const_pointer address(const_reference __x) const
+ const_pointer address(const_reference __x) const _GLIBCXX_NOEXCEPT
{ return std::__addressof(__x); }
pointer allocate(size_type __n, void* __hint = 0)
@@ -97,21 +98,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void deallocate(pointer __p, size_type __n)
{ _M_real_alloc.deallocate(__p.get(), __n); }
- size_type max_size() const throw()
- { return std::numeric_limits<size_type>::max() / sizeof(_Tp); }
-
- void construct(pointer __p, const _Tp& __val)
- { ::new(__p.get()) _Tp(__val); }
+ size_type max_size() const _GLIBCXX_USE_NOEXCEPT
+ { return __numeric_traits<size_type>::__max / sizeof(_Tp); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
template<typename... _Args>
void
construct(pointer __p, _Args&&... __args)
- { ::new(__p.get()) _Tp(std::forward<_Args>(__args)...); }
-#endif
+ { construct(__p.get(), std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p)
+ { __p->~_Up(); }
+
+ void destroy(pointer __p)
+ { destroy(__p.get()); }
+
+#else
+
+ void construct(pointer __p, const _Tp& __val)
+ { ::new(__p.get()) _Tp(__val); }
void destroy(pointer __p)
{ __p->~_Tp(); }
+#endif
template<typename _Up>
inline bool
diff --git a/libstdc++-v3/include/ext/functional b/libstdc++-v3/include/ext/functional
index 7e8acdfb4e..f8402c16dc 100644
--- a/libstdc++-v3/include/ext/functional
+++ b/libstdc++-v3/include/ext/functional
@@ -1,6 +1,6 @@
// Functional extensions -*- C++ -*-
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -104,7 +104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* @c binary_compose is constructed from three functors, @c f, @c g1,
* and @c g2. Its @c operator() returns @c f(g1(x),g2(x)). The function
- * @compose2 takes f, g1, and g2, and constructs the @c binary_compose
+ * compose2 takes f, g1, and g2, and constructs the @c binary_compose
* instance for you. For example, if @c f returns an int, then
* \code
* int answer = (compose2(f,g1,g2))(x);
@@ -183,7 +183,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @addtogroup SGIextensions
*/
template <class _Tp>
- struct identity : public std::_Identity<_Tp> {};
+ struct identity
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ : public std::unary_function<_Tp,_Tp>,
+ public std::_Identity<_Tp> {};
+#else
+ : public std::_Identity<_Tp> {};
+#endif
/** @c select1st and @c select2nd are extensions provided by SGI. Their
* @c operator()s
@@ -197,11 +203,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
/// An \link SGIextensions SGI extension \endlink.
template <class _Pair>
- struct select1st : public std::_Select1st<_Pair> {};
+ struct select1st
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ : public std::unary_function<_Pair, typename _Pair::first_type>,
+ public std::_Select1st<_Pair> {};
+#else
+ : public std::_Select1st<_Pair> {};
+#endif
/// An \link SGIextensions SGI extension \endlink.
template <class _Pair>
- struct select2nd : public std::_Select2nd<_Pair> {};
+ struct select2nd
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ : public std::unary_function<_Pair, typename _Pair::second_type>,
+ public std::_Select2nd<_Pair> {};
+#else
+ : public std::_Select2nd<_Pair> {};
+#endif
/** @} */
// extension documented next
diff --git a/libstdc++-v3/include/ext/malloc_allocator.h b/libstdc++-v3/include/ext/malloc_allocator.h
index 3aa994d9f7..4900723399 100644
--- a/libstdc++-v3/include/ext/malloc_allocator.h
+++ b/libstdc++-v3/include/ext/malloc_allocator.h
@@ -1,6 +1,7 @@
// Allocator that wraps "C" malloc -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -66,20 +67,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef malloc_allocator<_Tp1> other; };
- malloc_allocator() throw() { }
+ malloc_allocator() _GLIBCXX_USE_NOEXCEPT { }
- malloc_allocator(const malloc_allocator&) throw() { }
+ malloc_allocator(const malloc_allocator&) _GLIBCXX_USE_NOEXCEPT { }
template<typename _Tp1>
- malloc_allocator(const malloc_allocator<_Tp1>&) throw() { }
+ malloc_allocator(const malloc_allocator<_Tp1>&)
+ _GLIBCXX_USE_NOEXCEPT { }
- ~malloc_allocator() throw() { }
+ ~malloc_allocator() _GLIBCXX_USE_NOEXCEPT { }
pointer
- address(reference __x) const { return std::__addressof(__x); }
+ address(reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return std::__addressof(__x); }
+ address(const_reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
// NB: __n is permitted to be 0. The C++ standard says nothing
// about what the return value is when __n == 0.
@@ -101,24 +105,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ std::free(static_cast<void*>(__p)); }
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_t(-1) / sizeof(_Tp); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p) { __p->~_Up(); }
+#else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
{ ::new((void *)__p) value_type(__val); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p) { __p->~_Tp(); }
+#endif
};
template<typename _Tp>
diff --git a/libstdc++-v3/include/ext/memory b/libstdc++-v3/include/ext/memory
index ddcfe22b5b..0f2e82e76b 100644
--- a/libstdc++-v3/include/ext/memory
+++ b/libstdc++-v3/include/ext/memory
@@ -110,10 +110,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Copies the range [first,last) into result.
- * @param first An input iterator.
- * @param last An input iterator.
- * @param result An output iterator.
- * @return result + (first - last)
+ * @param __first An input iterator.
+ * @param __count Length
+ * @param __result An output iterator.
+ * @return __result + (__first + __count)
* @ingroup SGIextensions
*
* Like copy(), but does not require an initialized output range.
diff --git a/libstdc++-v3/include/ext/mt_allocator.h b/libstdc++-v3/include/ext/mt_allocator.h
index 91eac24f22..069476bafe 100644
--- a/libstdc++-v3/include/ext/mt_allocator.h
+++ b/libstdc++-v3/include/ext/mt_allocator.h
@@ -1,6 +1,6 @@
// MT-optimized allocator -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -577,32 +577,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Tp value_type;
pointer
- address(reference __x) const
+ address(reference __x) const _GLIBCXX_NOEXCEPT
{ return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const
+ address(const_reference __x) const _GLIBCXX_NOEXCEPT
{ return std::__addressof(__x); }
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_t(-1) / sizeof(_Tp); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p) { __p->~_Up(); }
+#else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
{ ::new((void *)__p) _Tp(__val); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p) { __p->~_Tp(); }
+#endif
};
#ifdef __GTHREADS
@@ -644,14 +648,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef __mt_alloc<_Tp1, pol_type> other;
};
- __mt_alloc() throw() { }
+ __mt_alloc() _GLIBCXX_USE_NOEXCEPT { }
- __mt_alloc(const __mt_alloc&) throw() { }
+ __mt_alloc(const __mt_alloc&) _GLIBCXX_USE_NOEXCEPT { }
template<typename _Tp1, typename _Poolp1>
- __mt_alloc(const __mt_alloc<_Tp1, _Poolp1>&) throw() { }
+ __mt_alloc(const __mt_alloc<_Tp1, _Poolp1>&) _GLIBCXX_USE_NOEXCEPT { }
- ~__mt_alloc() throw() { }
+ ~__mt_alloc() _GLIBCXX_USE_NOEXCEPT { }
pointer
allocate(size_type __n, const void* = 0);
diff --git a/libstdc++-v3/include/ext/new_allocator.h b/libstdc++-v3/include/ext/new_allocator.h
index 35d5cdccd5..0c82bd0ae9 100644
--- a/libstdc++-v3/include/ext/new_allocator.h
+++ b/libstdc++-v3/include/ext/new_allocator.h
@@ -66,20 +66,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef new_allocator<_Tp1> other; };
- new_allocator() throw() { }
+ new_allocator() _GLIBCXX_USE_NOEXCEPT { }
- new_allocator(const new_allocator&) throw() { }
+ new_allocator(const new_allocator&) _GLIBCXX_USE_NOEXCEPT { }
template<typename _Tp1>
- new_allocator(const new_allocator<_Tp1>&) throw() { }
+ new_allocator(const new_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { }
- ~new_allocator() throw() { }
+ ~new_allocator() _GLIBCXX_USE_NOEXCEPT { }
pointer
- address(reference __x) const { return std::__addressof(__x); }
+ address(reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return std::__addressof(__x); }
+ address(const_reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
// NB: __n is permitted to be 0. The C++ standard says nothing
// about what the return value is when __n == 0.
@@ -98,24 +100,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ ::operator delete(__p); }
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_t(-1) / sizeof(_Tp); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p) { __p->~_Up(); }
+#else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
{ ::new((void *)__p) _Tp(__val); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p) { __p->~_Tp(); }
+#endif
};
template<typename _Tp>
diff --git a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
index 9cec3b72c5..8196fc9e1c 100644
--- a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -46,92 +46,52 @@
#include <ext/pb_ds/tag_and_trait.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/detail/container_base_dispatch.hpp>
-#include <ext/pb_ds/detail/basic_tree_policy/traits.hpp>
+#include <ext/pb_ds/detail/branch_policy/traits.hpp>
namespace __gnu_pbds
{
- /** @defgroup pbds Policy-Based Data Structures
- * @ingroup extensions
- *
- * This is a library of policy-based elementary data structures:
- * associative containers and priority queues. It is designed for
- * high-performance, flexibility, semantic safety, and conformance
- * to the corresponding containers in std (except for some points
- * where it differs by design).
- *
- * For details, see:
- * http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
- *
+ /**
+ * @defgroup containers-pbds Containers
+ * @ingroup pbds
* @{
*/
-
-#define PB_DS_BASE_C_DEC \
- detail::container_base_dispatch<Key, Mapped, Tag, Policy_Tl, Allocator>::type
-
- /// An abstract basic associative container.
- template<typename Key,
- typename Mapped,
- typename Tag,
- typename Policy_Tl,
- typename Allocator>
- class container_base : public PB_DS_BASE_C_DEC
- {
- private:
- typedef typename PB_DS_BASE_C_DEC base_type;
- public:
- typedef Tag container_category;
- typedef Allocator allocator_type;
- typedef typename allocator_type::size_type size_type;
- typedef typename allocator_type::difference_type difference_type;
-
- // key_type
- typedef typename allocator_type::template rebind<Key>::other::value_type key_type;
- typedef typename allocator_type::template rebind<key_type>::other key_rebind;
- typedef typename key_rebind::reference key_reference;
- typedef typename key_rebind::const_reference const_key_reference;
- typedef typename key_rebind::pointer key_pointer;
- typedef typename key_rebind::const_pointer const_key_pointer;
-
- // mapped_type
- typedef Mapped mapped_type;
- typedef typename allocator_type::template rebind<mapped_type>::other mapped_rebind;
- typedef typename mapped_rebind::reference mapped_reference;
- typedef typename mapped_rebind::const_reference const_mapped_reference;
- typedef typename mapped_rebind::pointer mapped_pointer;
- typedef typename mapped_rebind::const_pointer const_mapped_pointer;
-
- // value_type
- typedef typename base_type::value_type value_type;
- typedef typename allocator_type::template rebind<value_type>::other value_rebind;
- typedef typename value_rebind::reference reference;
- typedef typename value_rebind::const_reference const_reference;
- typedef typename value_rebind::pointer pointer;
- typedef typename value_rebind::const_pointer const_pointer;
-
- // iterators
- typedef typename base_type::iterator iterator;
- typedef typename base_type::const_iterator const_iterator;
- typedef typename base_type::point_iterator point_iterator;
- typedef typename base_type::const_point_iterator const_point_iterator;
-
- virtual
- ~container_base() { }
-
- protected:
-#define PB_DS_CLASS_NAME container_base
-#include <ext/pb_ds/detail/constructors_destructor_fn_imps.hpp>
-#undef PB_DS_CLASS_NAME
- };
-
-#undef PB_DS_BASE_C_DEC
-
-
-#define PB_DS_BASE_C_DEC \
- container_base<Key, Mapped, Tag, typename __gnu_cxx::typelist::append< \
- typename __gnu_cxx::typelist::create4<Hash_Fn, Eq_Fn, Resize_Policy, detail::integral_constant<int, Store_Hash> >::type, Policy_TL>::type, Allocator>
+ /**
+ * @defgroup hash-based
+ * @ingroup containers-pbds
+ * @{
+ */
+#define PB_DS_HASH_BASE \
+ detail::container_base_dispatch<Key, Mapped, _Alloc, Tag, \
+ typename __gnu_cxx::typelist::append< \
+ typename __gnu_cxx::typelist::create4<Hash_Fn, Eq_Fn, Resize_Policy, \
+ detail::integral_constant<int, Store_Hash> >::type, Policy_Tl>::type>::type
+
+ /**
+ * @defgroup hash-detail Base and Policy Classes
+ * @ingroup hash-based
+ */
- /// An abstract basic hash-based associative container.
+ /**
+ * A hashed container abstraction.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam Hash_Fn Hashing functor.
+ * @tparam Eq_Fn Equal functor.
+ * @tparam Resize_Policy Resizes hash.
+ * @tparam Store_Hash Indicates whether the hash value
+ * will be stored along with each key.
+ * @tparam Tag Instantiating data structure type,
+ * see container_tag.
+ * @tparam Policy_TL Policy typelist.
+ * @tparam _Alloc Allocator type.
+ *
+ * Base is dispatched at compile time via Tag, from the following
+ * choices: cc_hash_tag, gp_hash_tag, and descendants of basic_hash_tag.
+ *
+ * Base choices are: detail::cc_ht_map, detail::gp_ht_map
+ */
template<typename Key,
typename Mapped,
typename Hash_Fn,
@@ -139,36 +99,100 @@ namespace __gnu_pbds
typename Resize_Policy,
bool Store_Hash,
typename Tag,
- typename Policy_TL,
- typename Allocator>
- class basic_hash_table : public PB_DS_BASE_C_DEC
+ typename Policy_Tl,
+ typename _Alloc>
+ class basic_hash_table : public PB_DS_HASH_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef typename PB_DS_HASH_BASE base_type;
public:
virtual
~basic_hash_table() { }
protected:
-#define PB_DS_CLASS_NAME basic_hash_table
-#include <ext/pb_ds/detail/constructors_destructor_fn_imps.hpp>
-#undef PB_DS_CLASS_NAME
+ basic_hash_table() { }
+
+ basic_hash_table(const basic_hash_table& other)
+ : base_type((const base_type&)other) { }
+
+ template<typename T0>
+ basic_hash_table(T0 t0) : base_type(t0) { }
+
+ template<typename T0, typename T1>
+ basic_hash_table(T0 t0, T1 t1) : base_type(t0, t1) { }
+
+ template<typename T0, typename T1, typename T2>
+ basic_hash_table(T0 t0, T1 t1, T2 t2) : base_type(t0, t1, t2) { }
+
+ template<typename T0, typename T1, typename T2, typename T3>
+ basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3)
+ : base_type(t0, t1, t2, t3) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4>
+ basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4)
+ : base_type(t0, t1, t2, t3, t4) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5>
+ basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
+ : base_type(t0, t1, t2, t3, t4, t5) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6>
+ basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
+ : base_type(t0, t1, t2, t3, t4, t5, t6) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7>
+ basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
+ : base_type(t0, t1, t2, t3, t4, t5, t6, t7) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8>
+ basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6,
+ T7 t7, T8 t8)
+ : base_type(t0, t1, t2, t3, t4, t5, t6, t7, t8)
+ { }
private:
- basic_hash_table&
+ basic_hash_table&
operator=(const base_type&);
};
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_HASH_BASE
-#define PB_DS_BASE_C_DEC \
+#define PB_DS_CC_HASH_BASE \
basic_hash_table<Key, Mapped, Hash_Fn, Eq_Fn, Resize_Policy, Store_Hash, \
cc_hash_tag, \
- typename __gnu_cxx::typelist::create1<Comb_Hash_Fn>::type, Allocator>
+ typename __gnu_cxx::typelist::create1<Comb_Hash_Fn>::type, _Alloc>
- /// A concrete collision-chaining hash-based associative container.
+
+ /**
+ * A collision-chaining hash-based associative container.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam Hash_Fn Hashing functor.
+ * @tparam Eq_Fn Equal functor.
+ * @tparam Comb_Hash_Fn Combining hash functor.
+ * If Hash_Fn is not null_type, then this
+ * is the ranged-hash functor; otherwise,
+ * this is the range-hashing functor.
+ * XXX(See Design::Hash-Based Containers::Hash Policies.)
+ * @tparam Resize_Policy Resizes hash.
+ * @tparam Store_Hash Indicates whether the hash value
+ * will be stored along with each key.
+ * If Hash_Fn is null_type, then the
+ * container will not compile if this
+ * value is true
+ * @tparam _Alloc Allocator type.
+ *
+ * Base tag choices are: cc_hash_tag.
+ *
+ * Base is basic_hash_table.
+ */
template<typename Key,
typename Mapped,
typename Hash_Fn = typename detail::default_hash_fn<Key>::type,
@@ -176,103 +200,104 @@ namespace __gnu_pbds
typename Comb_Hash_Fn = detail::default_comb_hash_fn::type,
typename Resize_Policy = typename detail::default_resize_policy<Comb_Hash_Fn>::type,
bool Store_Hash = detail::default_store_hash,
- typename Allocator = std::allocator<char> >
- class cc_hash_table : public PB_DS_BASE_C_DEC
+ typename _Alloc = std::allocator<char> >
+ class cc_hash_table : public PB_DS_CC_HASH_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_CC_HASH_BASE base_type;
public:
- typedef Hash_Fn hash_fn;
- typedef Eq_Fn eq_fn;
- typedef Resize_Policy resize_policy;
- typedef Comb_Hash_Fn comb_hash_fn;
+ typedef cc_hash_tag container_category;
+ typedef Hash_Fn hash_fn;
+ typedef Eq_Fn eq_fn;
+ typedef Resize_Policy resize_policy;
+ typedef Comb_Hash_Fn comb_hash_fn;
- // Default constructor.
+ /// Default constructor.
cc_hash_table() { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the Hash_Fn object of the container object.
- cc_hash_table(const hash_fn& h)
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the Hash_Fn object of the container object.
+ cc_hash_table(const hash_fn& h)
: base_type(h) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, and
- // r_eq_fn will be copied by the eq_fn object of the container
- // object.
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, and
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object.
cc_hash_table(const hash_fn& h, const eq_fn& e)
: base_type(h, e) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, r_eq_fn
- // will be copied by the eq_fn object of the container object, and
- // r_comb_hash_fn will be copied by the comb_hash_fn object of the
- // container object.
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, r_eq_fn
+ /// will be copied by the eq_fn object of the container object,
+ /// and r_comb_hash_fn will be copied by the comb_hash_fn object
+ /// of the container object.
cc_hash_table(const hash_fn& h, const eq_fn& e, const comb_hash_fn& ch)
: base_type(h, e, ch) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, r_eq_fn
- // will be copied by the eq_fn object of the container object,
- // r_comb_hash_fn will be copied by the comb_hash_fn object of the
- // container object, and r_resize_policy will be copied by the
- // resize_policy object of the container object.
- cc_hash_table(const hash_fn& h, const eq_fn& e, const comb_hash_fn& ch,
- const resize_policy& rp)
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, r_eq_fn
+ /// will be copied by the eq_fn object of the container object,
+ /// r_comb_hash_fn will be copied by the comb_hash_fn object of
+ /// the container object, and r_resize_policy will be copied by
+ /// the resize_policy object of the container object.
+ cc_hash_table(const hash_fn& h, const eq_fn& e, const comb_hash_fn& ch,
+ const resize_policy& rp)
: base_type(h, e, ch, rp) { }
- // Constructor taking __iterators to a range of value_types. The
- // value_types between first_it and last_it will be inserted into
- // the container object.
+ /// Constructor taking __iterators to a range of value_types. The
+ /// value_types between first_it and last_it will be inserted into
+ /// the container object.
template<typename It>
cc_hash_table(It first, It last)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object.
template<typename It>
cc_hash_table(It first, It last, const hash_fn& h)
: base_type(h)
- { copy_from_range(first, last); }
-
- // Constructor taking __iterators to a range of value_types and
- // some policy objects The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // and r_eq_fn will be copied by the eq_fn object of the container
- // object.
+ { this->copy_from_range(first, last); }
+
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// and r_eq_fn will be copied by the eq_fn object of the
+ /// container object.
template<typename It>
cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e)
: base_type(h, e)
- { copy_from_range(first, last); }
-
- // Constructor taking __iterators to a range of value_types and
- // some policy objects The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // r_eq_fn will be copied by the eq_fn object of the container
- // object, and r_comb_hash_fn will be copied by the comb_hash_fn
- // object of the container object.
+ { this->copy_from_range(first, last); }
+
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object, and r_comb_hash_fn will be copied by the comb_hash_fn
+ /// object of the container object.
template<typename It>
cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
const comb_hash_fn& ch)
: base_type(h, e, ch)
- { copy_from_range(first, last); }
-
- // Constructor taking __iterators to a range of value_types and
- // some policy objects The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // r_eq_fn will be copied by the eq_fn object of the container
- // object, r_comb_hash_fn will be copied by the comb_hash_fn
- // object of the container object, and r_resize_policy will be
- // copied by the resize_policy object of the container object.
+ { this->copy_from_range(first, last); }
+
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object, r_comb_hash_fn will be copied by the comb_hash_fn
+ /// object of the container object, and r_resize_policy will be
+ /// copied by the resize_policy object of the container object.
template<typename It>
- cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
+ cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
const comb_hash_fn& ch, const resize_policy& rp)
: base_type(h, e, ch, rp)
- { copy_from_range(first, last); }
+ { this->copy_from_range(first, last); }
cc_hash_table(const cc_hash_table& other)
: base_type((const base_type&)other)
@@ -281,7 +306,7 @@ namespace __gnu_pbds
virtual
~cc_hash_table() { }
- cc_hash_table&
+ cc_hash_table&
operator=(const cc_hash_table& other)
{
if (this != &other)
@@ -297,15 +322,40 @@ namespace __gnu_pbds
{ base_type::swap(other); }
};
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_CC_HASH_BASE
-#define PB_DS_BASE_C_DEC \
+#define PB_DS_GP_HASH_BASE \
basic_hash_table<Key, Mapped, Hash_Fn, Eq_Fn, Resize_Policy, Store_Hash, \
gp_hash_tag, \
- typename __gnu_cxx::typelist::create2<Comb_Probe_Fn, Probe_Fn>::type, Allocator>
+ typename __gnu_cxx::typelist::create2<Comb_Probe_Fn, Probe_Fn>::type, _Alloc>
+
- /// A concrete general-probing hash-based associative container.
+ /**
+ * A general-probing hash-based associative container.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam Hash_Fn Hashing functor.
+ * @tparam Eq_Fn Equal functor.
+ * @tparam Comb_Probe_Fn Combining probe functor.
+ * If Hash_Fn is not null_type, then this
+ * is the ranged-probe functor; otherwise,
+ * this is the range-hashing functor.
+ * XXX See Design::Hash-Based Containers::Hash Policies.
+ * @tparam Probe_Fn Probe functor.
+ * @tparam Resize_Policy Resizes hash.
+ * @tparam Store_Hash Indicates whether the hash value
+ * will be stored along with each key.
+ * If Hash_Fn is null_type, then the
+ * container will not compile if this
+ * value is true
+ * @tparam _Alloc Allocator type.
+ *
+ * Base tag choices are: gp_hash_tag.
+ *
+ * Base is basic_hash_table.
+ */
template<typename Key,
typename Mapped,
typename Hash_Fn = typename detail::default_hash_fn<Key>::type,
@@ -314,130 +364,132 @@ namespace __gnu_pbds
typename Probe_Fn = typename detail::default_probe_fn<Comb_Probe_Fn>::type,
typename Resize_Policy = typename detail::default_resize_policy<Comb_Probe_Fn>::type,
bool Store_Hash = detail::default_store_hash,
- typename Allocator = std::allocator<char> >
- class gp_hash_table : public PB_DS_BASE_C_DEC
+ typename _Alloc = std::allocator<char> >
+ class gp_hash_table : public PB_DS_GP_HASH_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_GP_HASH_BASE base_type;
public:
- typedef Hash_Fn hash_fn;
- typedef Eq_Fn eq_fn;
- typedef Comb_Probe_Fn comb_probe_fn;
- typedef Probe_Fn probe_fn;
- typedef Resize_Policy resize_policy;
-
- // Default constructor.
+ typedef gp_hash_tag container_category;
+ typedef Hash_Fn hash_fn;
+ typedef Eq_Fn eq_fn;
+ typedef Comb_Probe_Fn comb_probe_fn;
+ typedef Probe_Fn probe_fn;
+ typedef Resize_Policy resize_policy;
+
+ /// Default constructor.
gp_hash_table() { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object.
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object.
gp_hash_table(const hash_fn& h)
: base_type(h) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, and
- // r_eq_fn will be copied by the eq_fn object of the container
- // object.
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, and
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object.
gp_hash_table(const hash_fn& h, const eq_fn& e)
: base_type(h, e) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, r_eq_fn
- // will be copied by the eq_fn object of the container object, and
- // r_comb_probe_fn will be copied by the comb_probe_fn object of
- // the container object.
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, r_eq_fn
+ /// will be copied by the eq_fn object of the container object,
+ /// and r_comb_probe_fn will be copied by the comb_probe_fn object
+ /// of the container object.
gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp)
: base_type(h, e, cp) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, r_eq_fn
- // will be copied by the eq_fn object of the container object,
- // r_comb_probe_fn will be copied by the comb_probe_fn object of
- // the container object, and r_probe_fn will be copied by the
- // probe_fn object of the container object.
- gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp,
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, r_eq_fn
+ /// will be copied by the eq_fn object of the container object,
+ /// r_comb_probe_fn will be copied by the comb_probe_fn object of
+ /// the container object, and r_probe_fn will be copied by the
+ /// probe_fn object of the container object.
+ gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp,
const probe_fn& p)
: base_type(h, e, cp, p) { }
- // Constructor taking some policy objects. r_hash_fn will be
- // copied by the hash_fn object of the container object, r_eq_fn
- // will be copied by the eq_fn object of the container object,
- // r_comb_probe_fn will be copied by the comb_probe_fn object of
- // the container object, r_probe_fn will be copied by the probe_fn
- // object of the container object, and r_resize_policy will be
- // copied by the Resize_Policy object of the container object.
- gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp,
+ /// Constructor taking some policy objects. r_hash_fn will be
+ /// copied by the hash_fn object of the container object, r_eq_fn
+ /// will be copied by the eq_fn object of the container object,
+ /// r_comb_probe_fn will be copied by the comb_probe_fn object of
+ /// the container object, r_probe_fn will be copied by the
+ /// probe_fn object of the container object, and r_resize_policy
+ /// will be copied by the Resize_Policy object of the container
+ /// object.
+ gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp,
const probe_fn& p, const resize_policy& rp)
: base_type(h, e, cp, p, rp) { }
- // Constructor taking __iterators to a range of value_types. The
- // value_types between first_it and last_it will be inserted into
- // the container object.
+ /// Constructor taking __iterators to a range of value_types. The
+ /// value_types between first_it and last_it will be inserted into
+ /// the container object.
template<typename It>
gp_hash_table(It first, It last)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object.
template<typename It>
gp_hash_table(It first, It last, const hash_fn& h)
: base_type(h)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // and r_eq_fn will be copied by the eq_fn object of the container
- // object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// and r_eq_fn will be copied by the eq_fn object of the
+ /// container object.
template<typename It>
gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e)
: base_type(h, e)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // r_eq_fn will be copied by the eq_fn object of the container
- // object, and r_comb_probe_fn will be copied by the comb_probe_fn
- // object of the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object, and r_comb_probe_fn will be copied by the
+ /// comb_probe_fn object of the container object.
template<typename It>
- gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
+ gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
const comb_probe_fn& cp)
: base_type(h, e, cp)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // r_eq_fn will be copied by the eq_fn object of the container
- // object, r_comb_probe_fn will be copied by the comb_probe_fn
- // object of the container object, and r_probe_fn will be copied
- // by the probe_fn object of the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object, r_comb_probe_fn will be copied by the comb_probe_fn
+ /// object of the container object, and r_probe_fn will be copied
+ /// by the probe_fn object of the container object.
template<typename It>
- gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
+ gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
const comb_probe_fn& cp, const probe_fn& p)
: base_type(h, e, cp, p)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object. r_hash_fn
- // will be copied by the hash_fn object of the container object,
- // r_eq_fn will be copied by the eq_fn object of the container
- // object, r_comb_probe_fn will be copied by the comb_probe_fn
- // object of the container object, r_probe_fn will be copied by
- // the probe_fn object of the container object, and
- // r_resize_policy will be copied by the resize_policy object of
- // the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object. r_hash_fn
+ /// will be copied by the hash_fn object of the container object,
+ /// r_eq_fn will be copied by the eq_fn object of the container
+ /// object, r_comb_probe_fn will be copied by the comb_probe_fn
+ /// object of the container object, r_probe_fn will be copied by
+ /// the probe_fn object of the container object, and
+ /// r_resize_policy will be copied by the resize_policy object of
+ /// the container object.
template<typename It>
- gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
- const comb_probe_fn& cp, const probe_fn& p,
+ gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
+ const comb_probe_fn& cp, const probe_fn& p,
const resize_policy& rp)
: base_type(h, e, cp, p, rp)
{ base_type::copy_from_range(first, last); }
@@ -449,7 +501,7 @@ namespace __gnu_pbds
virtual
~gp_hash_table() { }
- gp_hash_table&
+ gp_hash_table&
operator=(const gp_hash_table& other)
{
if (this != &other)
@@ -464,79 +516,152 @@ namespace __gnu_pbds
swap(gp_hash_table& other)
{ base_type::swap(other); }
};
+ //@} hash-based
+#undef PB_DS_GP_HASH_BASE
-#undef PB_DS_BASE_C_DEC
+ /**
+ * @defgroup branch-based
+ * @ingroup containers-pbds
+ * @{
+ */
+#define PB_DS_BRANCH_BASE \
+ detail::container_base_dispatch<Key, Mapped, _Alloc, Tag, Policy_Tl>::type
-#define PB_DS_BASE_C_DEC \
- container_base<Key, Mapped, Tag, Policy_Tl, Allocator>
+ /**
+ * @defgroup branch-detail Base and Policy Classes
+ * @ingroup branch-based
+ */
- /// An abstract basic tree-like (tree, trie) associative container.
- template<typename Key, typename Mapped, typename Tag,
- typename Node_Update, typename Policy_Tl, typename Allocator>
- class basic_tree : public PB_DS_BASE_C_DEC
+ /**
+ * A branched, tree-like (tree, trie) container abstraction.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam Tag Instantiating data structure type,
+ * see container_tag.
+ * @tparam Node_Update Updates nodes, restores invariants.
+ * @tparam Policy_TL Policy typelist.
+ * @tparam _Alloc Allocator type.
+ *
+ * Base is dispatched at compile time via Tag, from the following
+ * choices: tree_tag, trie_tag, and their descendants.
+ *
+ * Base choices are: detail::ov_tree_map, detail::rb_tree_map,
+ * detail::splay_tree_map, and detail::pat_trie_map.
+ */
+ template<typename Key, typename Mapped, typename Tag,
+ typename Node_Update, typename Policy_Tl, typename _Alloc>
+ class basic_branch : public PB_DS_BRANCH_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef typename PB_DS_BRANCH_BASE base_type;
public:
- typedef Node_Update node_update;
+ typedef Node_Update node_update;
virtual
- ~basic_tree() { }
+ ~basic_branch() { }
protected:
-#define PB_DS_CLASS_NAME basic_tree
-#include <ext/pb_ds/detail/constructors_destructor_fn_imps.hpp>
-#undef PB_DS_CLASS_NAME
+ basic_branch() { }
+
+ basic_branch(const basic_branch& other)
+ : base_type((const base_type&)other) { }
+
+ template<typename T0>
+ basic_branch(T0 t0) : base_type(t0) { }
+
+ template<typename T0, typename T1>
+ basic_branch(T0 t0, T1 t1) : base_type(t0, t1) { }
+
+ template<typename T0, typename T1, typename T2>
+ basic_branch(T0 t0, T1 t1, T2 t2) : base_type(t0, t1, t2) { }
+
+ template<typename T0, typename T1, typename T2, typename T3>
+ basic_branch(T0 t0, T1 t1, T2 t2, T3 t3)
+ : base_type(t0, t1, t2, t3) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4>
+ basic_branch(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4)
+ : base_type(t0, t1, t2, t3, t4) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5>
+ basic_branch(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
+ : base_type(t0, t1, t2, t3, t4, t5) { }
+
+ template<typename T0, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6>
+ basic_branch(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
+ : base_type(t0, t1, t2, t3, t4, t5, t6) { }
};
+#undef PB_DS_BRANCH_BASE
-#undef PB_DS_BASE_C_DEC
+#define PB_DS_TREE_NODE_AND_IT_TRAITS \
+ detail::tree_traits<Key, Mapped,Cmp_Fn,Node_Update,Tag,_Alloc>
-#define PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC \
- detail::tree_traits<Key, Mapped,Cmp_Fn,Node_Update,Tag, Allocator>
+#define PB_DS_TREE_BASE \
+ basic_branch<Key,Mapped, Tag, \
+ typename PB_DS_TREE_NODE_AND_IT_TRAITS::node_update, \
+ typename __gnu_cxx::typelist::create2<Cmp_Fn, \
+ PB_DS_TREE_NODE_AND_IT_TRAITS>::type, _Alloc>
-#define PB_DS_BASE_C_DEC \
- basic_tree<Key,Mapped,Tag,typename PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC::node_update, \
- typename __gnu_cxx::typelist::create2<Cmp_Fn, PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC >::type, Allocator>
- /// A concrete basic tree-based associative container.
+ /**
+ * A tree-based container.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam Cmp_Fn Comparison functor.
+ * @tparam Tag Instantiating data structure type,
+ * see container_tag.
+ * @tparam Node_Update Updates nodes,
+ * restores invariants when invalidated.
+ * XXX See design::tree-based-containers::node invariants.
+ * @tparam _Alloc Allocator type.
+ *
+ * Base tag choices are: ov_tree_tag, rb_tree_tag, splay_tree_tag.
+ *
+ * Base is basic_branch.
+ */
template<typename Key, typename Mapped, typename Cmp_Fn = std::less<Key>,
typename Tag = rb_tree_tag,
- template<typename Const_Node_Iterator, typename Node_Iterator, typename Cmp_Fn_, typename Allocator_>
- class Node_Update = __gnu_pbds::null_tree_node_update,
- typename Allocator = std::allocator<char> >
- class tree : public PB_DS_BASE_C_DEC
+ template<typename Node_CItr, typename Node_Itr,
+ typename Cmp_Fn_, typename _Alloc_>
+ class Node_Update = null_node_update,
+ typename _Alloc = std::allocator<char> >
+ class tree : public PB_DS_TREE_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_TREE_BASE base_type;
public:
- // Comparison functor type.
- typedef Cmp_Fn cmp_fn;
+ /// Comparison functor type.
+ typedef Cmp_Fn cmp_fn;
tree() { }
- // Constructor taking some policy objects. r_cmp_fn will be copied
- // by the Cmp_Fn object of the container object.
+ /// Constructor taking some policy objects. r_cmp_fn will be
+ /// copied by the Cmp_Fn object of the container object.
tree(const cmp_fn& c)
: base_type(c) { }
- // Constructor taking __iterators to a range of value_types. The
- // value_types between first_it and last_it will be inserted into
- // the container object.
+ /// Constructor taking __iterators to a range of value_types. The
+ /// value_types between first_it and last_it will be inserted into
+ /// the container object.
template<typename It>
tree(It first, It last)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects The value_types between first_it and
- // last_it will be inserted into the container object. r_cmp_fn
- // will be copied by the cmp_fn object of the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects The value_types between first_it and
+ /// last_it will be inserted into the container object. r_cmp_fn
+ /// will be copied by the cmp_fn object of the container object.
template<typename It>
tree(It first, It last, const cmp_fn& c)
- : base_type(c)
+ : base_type(c)
{ base_type::copy_from_range(first, last); }
tree(const tree& other)
@@ -545,7 +670,7 @@ namespace __gnu_pbds
virtual
~tree() { }
- tree&
+ tree&
operator=(const tree& other)
{
if (this != &other)
@@ -561,57 +686,76 @@ namespace __gnu_pbds
{ base_type::swap(other); }
};
-#undef PB_DS_BASE_C_DEC
-#undef PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC
+#undef PB_DS_TREE_BASE
+#undef PB_DS_TREE_NODE_AND_IT_TRAITS
-#define PB_DS_TRIE_NODE_AND_ITS_TRAITS \
- detail::trie_traits<Key,Mapped,E_Access_Traits,Node_Update,Tag,Allocator>
+#define PB_DS_TRIE_NODE_AND_IT_TRAITS \
+ detail::trie_traits<Key,Mapped,_ATraits,Node_Update,Tag,_Alloc>
-#define PB_DS_BASE_C_DEC \
- basic_tree<Key,Mapped,Tag, typename PB_DS_TRIE_NODE_AND_ITS_TRAITS::node_update, \
- typename __gnu_cxx::typelist::create2<E_Access_Traits, PB_DS_TRIE_NODE_AND_ITS_TRAITS >::type, Allocator>
+#define PB_DS_TRIE_BASE \
+ basic_branch<Key,Mapped,Tag, \
+ typename PB_DS_TRIE_NODE_AND_IT_TRAITS::node_update, \
+ typename __gnu_cxx::typelist::create2<_ATraits, \
+ PB_DS_TRIE_NODE_AND_IT_TRAITS >::type, _Alloc>
- /// A concrete basic trie-based associative container.
+
+ /**
+ * A trie-based container.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam _ATraits Element access traits.
+ * @tparam Tag Instantiating data structure type,
+ * see container_tag.
+ * @tparam Node_Update Updates trie nodes,
+ * restores invariants when invalidated.
+ * XXX See design::tree-based-containers::node invariants.
+ * @tparam _Alloc Allocator type.
+ *
+ * Base tag choice is pat_trie_tag.
+ *
+ * Base is basic_branch.
+ */
template<typename Key,
typename Mapped,
- typename E_Access_Traits = typename detail::default_trie_e_access_traits<Key>::type,
+ typename _ATraits = \
+ typename detail::default_trie_access_traits<Key>::type,
typename Tag = pat_trie_tag,
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- typename E_Access_Traits_,
- typename Allocator_>
- class Node_Update = null_trie_node_update,
- typename Allocator = std::allocator<char> >
- class trie : public PB_DS_BASE_C_DEC
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename _ATraits_,
+ typename _Alloc_>
+ class Node_Update = null_node_update,
+ typename _Alloc = std::allocator<char> >
+ class trie : public PB_DS_TRIE_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_TRIE_BASE base_type;
public:
- // Element access traits type.
- typedef E_Access_Traits e_access_traits;
+ /// Element access traits type.
+ typedef _ATraits access_traits;
trie() { }
- // Constructor taking some policy objects. r_e_access_traits will
- // be copied by the E_Access_Traits object of the container
- // object.
- trie(const e_access_traits& t)
+ /// Constructor taking some policy objects. r_access_traits will
+ /// be copied by the _ATraits object of the container object.
+ trie(const access_traits& t)
: base_type(t) { }
- // Constructor taking __iterators to a range of value_types. The
- // value_types between first_it and last_it will be inserted into
- // the container object.
+ /// Constructor taking __iterators to a range of value_types. The
+ /// value_types between first_it and last_it will be inserted into
+ /// the container object.
template<typename It>
trie(It first, It last)
{ base_type::copy_from_range(first, last); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects. The value_types between first_it and
- // last_it will be inserted into the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects. The value_types between first_it and
+ /// last_it will be inserted into the container object.
template<typename It>
- trie(It first, It last, const e_access_traits& t)
+ trie(It first, It last, const access_traits& t)
: base_type(t)
{ base_type::copy_from_range(first, last); }
@@ -621,7 +765,7 @@ namespace __gnu_pbds
virtual
~trie() { }
- trie&
+ trie&
operator=(const trie& other)
{
if (this != &other)
@@ -636,36 +780,53 @@ namespace __gnu_pbds
swap(trie& other)
{ base_type::swap(other); }
};
+ //@} branch-based
+#undef PB_DS_TRIE_BASE
+#undef PB_DS_TRIE_NODE_AND_IT_TRAITS
-#undef PB_DS_BASE_C_DEC
-#undef PB_DS_TRIE_NODE_AND_ITS_TRAITS
+ /**
+ * @defgroup list-based
+ * @ingroup containers-pbds
+ * @{
+ */
+#define PB_DS_LU_BASE \
+ detail::container_base_dispatch<Key, Mapped, _Alloc, list_update_tag, \
+ typename __gnu_cxx::typelist::create2<Eq_Fn, Update_Policy>::type>::type
-#define PB_DS_BASE_C_DEC \
- container_base<Key, Mapped, list_update_tag, \
- typename __gnu_cxx::typelist::create2<Eq_Fn, Update_Policy>::type, Allocator>
- /// A list-update based associative container.
+ /**
+ * A list-update based associative container.
+ *
+ * @tparam Key Key type.
+ * @tparam Mapped Map type.
+ * @tparam Eq_Fn Equal functor.
+ * @tparam Update_Policy Update policy, determines when an element
+ * will be moved to the front of the list.
+ * @tparam _Alloc Allocator type.
+ *
+ * Base is detail::lu_map.
+ */
template<typename Key,
typename Mapped,
class Eq_Fn = typename detail::default_eq_fn<Key>::type,
class Update_Policy = detail::default_update_policy::type,
- class Allocator = std::allocator<char> >
- class list_update : public PB_DS_BASE_C_DEC
+ class _Alloc = std::allocator<char> >
+ class list_update : public PB_DS_LU_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef typename PB_DS_LU_BASE base_type;
public:
- typedef Eq_Fn eq_fn;
- typedef Update_Policy update_policy;
- typedef Allocator allocator;
+ typedef list_update_tag container_category;
+ typedef Eq_Fn eq_fn;
+ typedef Update_Policy update_policy;
list_update() { }
- // Constructor taking __iterators to a range of value_types. The
- // value_types between first_it and last_it will be inserted into
- // the container object.
+ /// Constructor taking __iterators to a range of value_types. The
+ /// value_types between first_it and last_it will be inserted into
+ /// the container object.
template<typename It>
list_update(It first, It last)
{ base_type::copy_from_range(first, last); }
@@ -676,7 +837,7 @@ namespace __gnu_pbds
virtual
~list_update() { }
- list_update&
+ list_update&
operator=(const list_update& other)
{
if (this !=& other)
@@ -691,10 +852,10 @@ namespace __gnu_pbds
swap(list_update& other)
{ base_type::swap(other); }
};
+ //@} list-based
+#undef PB_DS_LU_BASE
-#undef PB_DS_BASE_C_DEC
-
- // @} group pbds
+ // @} group containers-pbds
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp
deleted file mode 100644
index 0ca90dbc79..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file basic_tree_policy_base.hpp
- * Contains a base class for tree_like policies.
- */
-
-#ifndef PB_DS_TREE_LIKE_POLICY_BASE_HPP
-#define PB_DS_TREE_LIKE_POLICY_BASE_HPP
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
-#define PB_DS_CLASS_C_DEC \
- basic_tree_policy_base< \
- Const_Node_Iterator, \
- Node_Iterator, \
- Allocator>
-
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- typename Allocator>
- struct basic_tree_policy_base
- {
- protected:
- typedef typename Node_Iterator::value_type it_type;
-
- typedef typename std::iterator_traits< it_type>::value_type value_type;
-
- typedef typename value_type::first_type key_type;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- key_type>::type>::other::const_reference
- const_key_reference;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- value_type>::type>::other::const_reference
- const_reference;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- value_type>::type>::other::reference
- reference;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- value_type>::type>::other::const_pointer
- const_pointer;
-
- static inline const_key_reference
- extract_key(const_reference r_val)
- {
- return (r_val.first);
- }
-
- virtual it_type
- end() = 0;
-
- it_type
- end_iterator() const
- {
- return (const_cast<PB_DS_CLASS_C_DEC* >(this)->end());
- }
-
- virtual
- ~basic_tree_policy_base()
- { }
- };
-
- template<typename Const_Node_Iterator, typename Allocator>
- struct basic_tree_policy_base<
- Const_Node_Iterator,
- Const_Node_Iterator,
- Allocator>
- {
- protected:
- typedef typename Const_Node_Iterator::value_type it_type;
-
- typedef typename std::iterator_traits< it_type>::value_type value_type;
-
- typedef value_type key_type;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- key_type>::type>::other::const_reference
- const_key_reference;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- value_type>::type>::other::const_reference
- const_reference;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- value_type>::type>::other::reference
- reference;
-
- typedef
- typename Allocator::template rebind<
- typename remove_const<
- value_type>::type>::other::const_pointer
- const_pointer;
-
- static inline const_key_reference
- extract_key(const_reference r_val)
- {
- return (r_val);
- }
-
- virtual it_type
- end() const = 0;
-
- it_type
- end_iterator() const
- {
- return (end());
- }
-
- virtual
- ~basic_tree_policy_base()
- { }
- };
-
-#undef PB_DS_CLASS_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif // #ifndef PB_DS_TREE_LIKE_POLICY_BASE_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
deleted file mode 100644
index e600f2ca36..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file null_node_metadata.hpp
- * Contains an implementation class for tree-like classes.
- */
-
-#ifndef PB_DS_0_NODE_METADATA_HPP
-#define PB_DS_0_NODE_METADATA_HPP
-
-#include <ext/pb_ds/detail/types_traits.hpp>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
- template<typename Key, class Data, class Allocator>
- struct dumconst_node_iterator
- {
- private:
- typedef typename types_traits<Key, Data, Allocator, false>::pointer const_iterator;
-
- public:
- typedef const_iterator value_type;
- typedef const_iterator const_reference;
- typedef const_reference reference;
- };
-
- struct null_node_metadata
- { };
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/traits.hpp
deleted file mode 100644
index b30829a813..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/traits.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file traits.hpp
- * Contains an implementation class for tree-like classes.
- */
-
-#ifndef PB_DS_NODE_AND_IT_TRAITS_HPP
-#define PB_DS_NODE_AND_IT_TRAITS_HPP
-
-#include <ext/pb_ds/detail/types_traits.hpp>
-#include <ext/pb_ds/detail/bin_search_tree_/traits.hpp>
-#include <ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp>
-#include <ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
- template<typename Key,
- typename Data,
- class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn_,
- class Allocator>
- class Node_Update,
- class Tag,
- class Allocator>
- struct tree_traits;
-
- template<typename Key,
- typename Data,
- class E_Access_Traits,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class E_Access_Traits_,
- class Allocator>
- class Node_Update,
- class Tag,
- class Allocator>
- struct trie_traits;
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#include <ext/pb_ds/detail/rb_tree_map_/traits.hpp>
-#include <ext/pb_ds/detail/splay_tree_/traits.hpp>
-#include <ext/pb_ds/detail/ov_tree_map_/traits.hpp>
-#include <ext/pb_ds/detail/pat_trie_/traits.hpp>
-
-#endif // #ifndef PB_DS_NODE_AND_IT_TRAITS_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp b/libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp
deleted file mode 100644
index aac1397ddf..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file basic_types.hpp
- * Contains basic types used by containers.
- */
-
-#ifndef PB_DS_BASIC_TYPES_HPP
-#define PB_DS_BASIC_TYPES_HPP
-
-#include <algorithm>
-#include <utility>
-#include <ext/pb_ds/tag_and_trait.hpp>
-#include <ext/pb_ds/detail/type_utils.hpp>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
- template<typename Key, typename Mapped, typename Allocator, bool Store_Hash>
- struct value_type_base;
-
- /**
- * Specialization of value_type_base for the case where the hash value
- * is not stored alongside each value.
- **/
- template<typename Key, typename Mapped, typename Allocator>
- struct value_type_base<Key, Mapped, Allocator, false>
- {
- typedef typename Allocator::template rebind<Mapped>::other mapped_type_allocator;
- typedef typename mapped_type_allocator::value_type mapped_type;
- typedef typename mapped_type_allocator::pointer mapped_pointer;
- typedef typename mapped_type_allocator::const_pointer const_mapped_pointer;
- typedef typename mapped_type_allocator::reference mapped_reference;
- typedef typename mapped_type_allocator::const_reference const_mapped_reference;
-
- typedef typename Allocator::template rebind<std::pair<const Key, Mapped> >::other value_type_allocator;
- typedef typename value_type_allocator::value_type value_type;
- typedef typename value_type_allocator::pointer pointer;
- typedef typename value_type_allocator::const_pointer const_pointer;
- typedef typename value_type_allocator::reference reference;
- typedef typename value_type_allocator::const_reference const_reference;
-
- struct stored_value_type
- {
- value_type m_value;
- };
- };
-
- /**
- * Specialization of value_type_base for the case where the hash value
- * is stored alongside each value.
- **/
- template<typename Key, typename Mapped, typename Allocator>
- struct value_type_base<Key, Mapped, Allocator, true>
- {
- typedef typename Allocator::template rebind<Mapped>::other mapped_type_allocator;
- typedef typename mapped_type_allocator::value_type mapped_type;
- typedef typename mapped_type_allocator::pointer mapped_pointer;
- typedef typename mapped_type_allocator::const_pointer const_mapped_pointer;
- typedef typename mapped_type_allocator::reference mapped_reference;
- typedef typename mapped_type_allocator::const_reference const_mapped_reference;
-
- typedef typename Allocator::template rebind<std::pair<const Key, Mapped> >::other value_type_allocator;
- typedef typename value_type_allocator::value_type value_type;
- typedef typename value_type_allocator::pointer pointer;
- typedef typename value_type_allocator::const_pointer const_pointer;
- typedef typename value_type_allocator::reference reference;
- typedef typename value_type_allocator::const_reference const_reference;
-
- struct stored_value_type
- {
- value_type m_value;
- typename Allocator::size_type m_hash;
- };
- };
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- value_type_base<Key, null_mapped_type, Allocator, false>
-
- /**
- * Specialization of value_type_base for the case where the hash value
- * is not stored alongside each value.
- **/
- template<typename Key, typename Allocator>
- struct value_type_base<Key, null_mapped_type, Allocator, false>
- {
- typedef typename Allocator::template rebind<null_mapped_type>::other mapped_type_allocator;
- typedef typename mapped_type_allocator::value_type mapped_type;
- typedef typename mapped_type_allocator::pointer mapped_pointer;
- typedef typename mapped_type_allocator::const_pointer const_mapped_pointer;
- typedef typename mapped_type_allocator::reference mapped_reference;
- typedef typename mapped_type_allocator::const_reference const_mapped_reference;
-
- typedef Key value_type;
-
- typedef typename Allocator::template rebind<value_type>::other value_type_allocator;
- typedef typename value_type_allocator::pointer pointer;
- typedef typename value_type_allocator::const_pointer const_pointer;
- typedef typename value_type_allocator::reference reference;
- typedef typename value_type_allocator::const_reference const_reference;
-
- struct stored_value_type
- {
- value_type m_value;
- };
-
- static null_mapped_type s_null_mapped;
- };
-
- PB_DS_CLASS_T_DEC
- null_mapped_type PB_DS_CLASS_C_DEC::s_null_mapped;
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- value_type_base<Key, null_mapped_type, Allocator, true>
-
- /**
- * Specialization of value_type_base for the case where the hash value
- * is stored alongside each value.
- **/
- template<typename Key, typename Allocator>
- struct value_type_base<Key, null_mapped_type, Allocator, true>
- {
- typedef typename Allocator::template rebind<null_mapped_type>::other mapped_type_allocator;
- typedef typename mapped_type_allocator::value_type mapped_type;
- typedef typename mapped_type_allocator::pointer mapped_pointer;
- typedef typename mapped_type_allocator::const_pointer const_mapped_pointer;
- typedef typename mapped_type_allocator::reference mapped_reference;
- typedef typename mapped_type_allocator::const_reference const_mapped_reference;
-
- typedef Key value_type;
-
- typedef typename Allocator::template rebind<value_type>::other value_type_allocator;
- typedef typename value_type_allocator::pointer pointer;
- typedef typename value_type_allocator::const_pointer const_pointer;
- typedef typename value_type_allocator::reference reference;
- typedef typename value_type_allocator::const_reference const_reference;
-
- struct stored_value_type
- {
- value_type m_value;
- typename Allocator::size_type m_hash;
- };
-
- static null_mapped_type s_null_mapped;
- };
-
- PB_DS_CLASS_T_DEC
- null_mapped_type PB_DS_CLASS_C_DEC::s_null_mapped;
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
- template<typename Key, typename Mapped>
- struct no_throw_copies
- {
- typedef integral_constant<int, is_simple<Key>::value && is_simple<Mapped>::value> indicator;
- };
-
- template<typename Key>
- struct no_throw_copies<Key, null_mapped_type>
- {
- typedef integral_constant<int, is_simple<Key>::value> indicator;
- };
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
index ec836922a3..4f847083ba 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,22 +34,20 @@
// warranty.
/**
- * @file bin_search_tree_.hpp
- * Contains an implementation class for bin_search_tree_.
- */
-/*
- * This implementation uses an idea from the SGI STL (using a @a header node
- * which is needed for efficient iteration).
+ * @file bin_search_tree_/bin_search_tree_.hpp
+ * Contains an implementation class for binary search tree.
*/
#include <ext/pb_ds/exception.hpp>
+#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/eq_fn/eq_by_less.hpp>
#include <ext/pb_ds/detail/types_traits.hpp>
-#include <ext/pb_ds/detail/debug_map_base.hpp>
-#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/cond_dealtor.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/tree_trace_base.hpp>
+#ifdef _GLIBCXX_DEBUG
+#include <ext/pb_ds/detail/debug_map_base.hpp>
+#endif
#include <utility>
#include <functional>
#include <debug/debug.h>
@@ -58,201 +56,129 @@ namespace __gnu_pbds
{
namespace detail
{
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Mapped, class Cmp_Fn, \
- class Node_And_It_Traits, class Allocator>
-
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME \
- bin_search_tree_data_
-#endif
+#define PB_DS_BIN_TREE_NAME bin_search_tree_map
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME \
- bin_search_tree_no_data_
-#endif
-
-#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME< \
- Key, \
- Mapped, \
- Cmp_Fn, \
- Node_And_It_Traits, \
- Allocator>
-
-#define PB_DS_TYPES_TRAITS_C_DEC \
- types_traits< \
- Key, \
- Mapped, \
- Allocator, \
- false>
+#define PB_DS_BIN_TREE_NAME bin_search_tree_set
+#endif
-#ifdef _GLIBCXX_DEBUG
-#define PB_DS_DEBUG_MAP_BASE_C_DEC \
- debug_map_base<Key, eq_by_less<Key, Cmp_Fn>, \
- typename Allocator::template rebind<Key>::other::const_reference>
-#endif
+#define PB_DS_CLASS_T_DEC \
+ template<typename Key, typename Mapped, typename Cmp_Fn, \
+ typename Node_And_It_Traits, typename _Alloc>
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#define PB_DS_EP2VP(X)& ((X)->m_value)
-#endif
+#define PB_DS_CLASS_C_DEC \
+ PB_DS_BIN_TREE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc>
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#define PB_DS_EP2VP(X)& ((X)->m_value.first)
-#endif
+#define PB_DS_BIN_TREE_TRAITS_BASE \
+ types_traits<Key, Mapped, _Alloc, false>
+
+#ifdef _GLIBCXX_DEBUG
+#define PB_DS_DEBUG_MAP_BASE_C_DEC \
+ debug_map_base<Key, eq_by_less<Key, Cmp_Fn>, \
+ typename _Alloc::template rebind<Key>::other::const_reference>
+#endif
#ifdef PB_DS_TREE_TRACE
-#define PB_DS_TREE_TRACE_BASE_C_DEC \
- tree_trace_base< \
- typename Node_And_It_Traits::const_node_iterator, \
- typename Node_And_It_Traits::node_iterator, \
- Cmp_Fn, \
- true, \
- Allocator>
-#endif
-
- /**
- * class description = "8i|\|4ree $34rc|-| 7r33 74813.">
- **/
- template<typename Key,
- typename Mapped,
- class Cmp_Fn,
- class Node_And_It_Traits,
- class Allocator>
- class PB_DS_CLASS_NAME :
+#define PB_DS_TREE_TRACE_BASE_C_DEC \
+ tree_trace_base<typename Node_And_It_Traits::node_const_iterator, \
+ typename Node_And_It_Traits::node_iterator, \
+ Cmp_Fn, true, _Alloc>
+#endif
+
+
+ /*
+ * @brief Binary search tree (BST).
+ *
+ * This implementation uses an idea from the SGI STL (using a @a
+ * header node which is needed for efficient iteration).
+ */
+ template<typename Key, typename Mapped, typename Cmp_Fn,
+ typename Node_And_It_Traits, typename _Alloc>
+ class PB_DS_BIN_TREE_NAME :
#ifdef _GLIBCXX_DEBUG
public PB_DS_DEBUG_MAP_BASE_C_DEC,
-#endif
+#endif
#ifdef PB_DS_TREE_TRACE
public PB_DS_TREE_TRACE_BASE_C_DEC,
-#endif
+#endif
public Cmp_Fn,
- public PB_DS_TYPES_TRAITS_C_DEC,
+ public PB_DS_BIN_TREE_TRAITS_BASE,
public Node_And_It_Traits::node_update
{
+ typedef Node_And_It_Traits traits_type;
protected:
+ typedef PB_DS_BIN_TREE_TRAITS_BASE traits_base;
+
typedef
- typename Allocator::template rebind<
- typename Node_And_It_Traits::node>::other
+ typename _Alloc::template rebind<typename traits_type::node>::other
node_allocator;
- typedef typename node_allocator::value_type node;
+ typedef typename node_allocator::value_type node;
+ typedef typename node_allocator::pointer node_pointer;
- typedef typename node_allocator::pointer node_pointer;
-
- typedef PB_DS_TYPES_TRAITS_C_DEC traits_base;
-
- typedef
- typename Node_And_It_Traits::null_node_update_pointer
+ typedef typename traits_type::null_node_update_pointer
null_node_update_pointer;
private:
- typedef cond_dealtor< node, Allocator> cond_dealtor_t;
+ typedef cond_dealtor<node, _Alloc> cond_dealtor_t;
#ifdef _GLIBCXX_DEBUG
- typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
-#endif
+ typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
+#endif
public:
-
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::key_type key_type;
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::key_pointer key_pointer;
-
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::const_key_pointer
- const_key_pointer;
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::key_reference key_reference;
-
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::const_key_reference
- const_key_reference;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef typename traits_base::key_type key_type;
+ typedef typename traits_base::key_pointer key_pointer;
+ typedef typename traits_base::key_const_pointer key_const_pointer;
+ typedef typename traits_base::key_reference key_reference;
+ typedef typename traits_base::key_const_reference key_const_reference;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::mapped_type mapped_type;
-
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::mapped_pointer
- mapped_pointer;
-
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::const_mapped_pointer
- const_mapped_pointer;
+ typedef typename traits_base::mapped_type mapped_type;
+ typedef typename traits_base::mapped_pointer mapped_pointer;
+ typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
+ typedef typename traits_base::mapped_reference mapped_reference;
+ typedef typename traits_base::mapped_const_reference mapped_const_reference;
+#endif
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::mapped_reference
- mapped_reference;
-
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::const_mapped_reference
- const_mapped_reference;
-#endif
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::value_type value_type;
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::pointer pointer;
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::const_pointer const_pointer;
-
- typedef typename PB_DS_TYPES_TRAITS_C_DEC::reference reference;
-
- typedef
- typename PB_DS_TYPES_TRAITS_C_DEC::const_reference
- const_reference;
-
- typedef
- typename Node_And_It_Traits::const_point_iterator
- const_point_iterator;
-
- typedef const_point_iterator const_iterator;
-
- typedef typename Node_And_It_Traits::point_iterator point_iterator;
-
- typedef point_iterator iterator;
-
- typedef
- typename Node_And_It_Traits::const_reverse_iterator
- const_reverse_iterator;
+ typedef typename traits_base::value_type value_type;
+ typedef typename traits_base::pointer pointer;
+ typedef typename traits_base::const_pointer const_pointer;
+ typedef typename traits_base::reference reference;
+ typedef typename traits_base::const_reference const_reference;
+ typedef typename traits_type::point_const_iterator point_const_iterator;
- typedef typename Node_And_It_Traits::reverse_iterator reverse_iterator;
+ typedef point_const_iterator const_iterator;
+ typedef typename traits_type::point_iterator point_iterator;
+ typedef point_iterator iterator;
- typedef
- typename Node_And_It_Traits::const_node_iterator
- const_node_iterator;
-
- typedef typename Node_And_It_Traits::node_iterator node_iterator;
-
- typedef Cmp_Fn cmp_fn;
-
- typedef Allocator allocator_type;
+ typedef typename traits_type::const_reverse_iterator const_reverse_iterator;
- typedef typename Node_And_It_Traits::node_update node_update;
+ typedef typename traits_type::reverse_iterator reverse_iterator;
+ typedef typename traits_type::node_const_iterator node_const_iterator;
+ typedef typename traits_type::node_iterator node_iterator;
+ typedef typename traits_type::node_update node_update;
- public:
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
- PB_DS_CLASS_NAME();
+ PB_DS_BIN_TREE_NAME();
- PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn);
+ PB_DS_BIN_TREE_NAME(const Cmp_Fn&);
- PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_update);
+ PB_DS_BIN_TREE_NAME(const Cmp_Fn&, const node_update&);
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other);
+ PB_DS_BIN_TREE_NAME(const PB_DS_CLASS_C_DEC&);
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
- ~PB_DS_CLASS_NAME();
+ ~PB_DS_BIN_TREE_NAME();
inline bool
empty() const;
@@ -263,29 +189,29 @@ namespace __gnu_pbds
inline size_type
max_size() const;
- Cmp_Fn&
+ Cmp_Fn&
get_cmp_fn();
- const Cmp_Fn&
+ const Cmp_Fn&
get_cmp_fn() const;
inline point_iterator
- lower_bound(const_key_reference r_key);
+ lower_bound(key_const_reference);
- inline const_point_iterator
- lower_bound(const_key_reference r_key) const;
+ inline point_const_iterator
+ lower_bound(key_const_reference) const;
inline point_iterator
- upper_bound(const_key_reference r_key);
+ upper_bound(key_const_reference);
- inline const_point_iterator
- upper_bound(const_key_reference r_key) const;
+ inline point_const_iterator
+ upper_bound(key_const_reference) const;
inline point_iterator
- find(const_key_reference r_key);
+ find(key_const_reference);
- inline const_point_iterator
- find(const_key_reference r_key) const;
+ inline point_const_iterator
+ find(key_const_reference) const;
inline iterator
begin();
@@ -311,15 +237,23 @@ namespace __gnu_pbds
inline const_reverse_iterator
rend() const;
- inline const_node_iterator
+ /// Returns a const node_iterator corresponding to the node at the
+ /// root of the tree.
+ inline node_const_iterator
node_begin() const;
+ /// Returns a node_iterator corresponding to the node at the
+ /// root of the tree.
inline node_iterator
node_begin();
- inline const_node_iterator
+ /// Returns a const node_iterator corresponding to a node just
+ /// after a leaf of the tree.
+ inline node_const_iterator
node_end() const;
+ /// Returns a node_iterator corresponding to a node just
+ /// after a leaf of the tree.
inline node_iterator
node_end();
@@ -327,142 +261,146 @@ namespace __gnu_pbds
clear();
protected:
-
void
- value_swap(PB_DS_CLASS_C_DEC& other);
+ value_swap(PB_DS_CLASS_C_DEC&);
void
initialize_min_max();
inline iterator
- insert_imp_empty(const_reference r_value);
+ insert_imp_empty(const_reference);
inline iterator
- insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd);
+ insert_leaf_new(const_reference, node_pointer, bool);
inline node_pointer
- get_new_node_for_leaf_insert(const_reference r_val, false_type);
+ get_new_node_for_leaf_insert(const_reference, false_type);
inline node_pointer
- get_new_node_for_leaf_insert(const_reference r_val, true_type);
+ get_new_node_for_leaf_insert(const_reference, true_type);
inline void
- actual_erase_node(node_pointer p_nd);
+ actual_erase_node(node_pointer);
inline std::pair<node_pointer, bool>
- erase(node_pointer p_nd);
+ erase(node_pointer);
inline void
- update_min_max_for_erased_node(node_pointer p_nd);
+ update_min_max_for_erased_node(node_pointer);
static void
- clear_imp(node_pointer p_nd);
+ clear_imp(node_pointer);
- inline std::pair<
- point_iterator,
- bool>
- insert_leaf(const_reference r_value);
+ inline std::pair<point_iterator, bool>
+ insert_leaf(const_reference);
inline void
- rotate_left(node_pointer p_x);
+ rotate_left(node_pointer);
inline void
- rotate_right(node_pointer p_y);
+ rotate_right(node_pointer);
inline void
- rotate_parent(node_pointer p_nd);
+ rotate_parent(node_pointer);
inline void
- apply_update(node_pointer p_nd, null_node_update_pointer);
+ apply_update(node_pointer, null_node_update_pointer);
template<typename Node_Update_>
- inline void
- apply_update(node_pointer p_nd, Node_Update_* p_update);
+ inline void
+ apply_update(node_pointer, Node_Update_*);
inline void
- update_to_top(node_pointer p_nd, null_node_update_pointer);
+ update_to_top(node_pointer, null_node_update_pointer);
template<typename Node_Update_>
- inline void
- update_to_top(node_pointer p_nd, Node_Update_* p_update);
+ inline void
+ update_to_top(node_pointer, Node_Update_*);
bool
- join_prep(PB_DS_CLASS_C_DEC& other);
+ join_prep(PB_DS_CLASS_C_DEC&);
void
- join_finish(PB_DS_CLASS_C_DEC& other);
+ join_finish(PB_DS_CLASS_C_DEC&);
bool
- split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other);
+ split_prep(key_const_reference, PB_DS_CLASS_C_DEC&);
void
- split_finish(PB_DS_CLASS_C_DEC& other);
+ split_finish(PB_DS_CLASS_C_DEC&);
size_type
- recursive_count(node_pointer p_nd) const;
+ recursive_count(node_pointer) const;
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
void
- structure_only_assert_valid() const;
+ structure_only_assert_valid(const char*, int) const;
void
- assert_node_consistent(const node_pointer p_nd) const;
-#endif
+ assert_node_consistent(const node_pointer, const char*, int) const;
+#endif
private:
#ifdef _GLIBCXX_DEBUG
void
- assert_iterators() const;
+ assert_iterators(const char*, int) const;
void
- assert_consistent_with_debug_base() const;
+ assert_consistent_with_debug_base(const char*, int) const;
void
- assert_node_consistent_with_left(const node_pointer p_nd) const;
+ assert_node_consistent_with_left(const node_pointer,
+ const char*, int) const;
void
- assert_node_consistent_with_right(const node_pointer p_nd) const;
+ assert_node_consistent_with_right(const node_pointer,
+ const char*, int) const;
void
- assert_consistent_with_debug_base(const node_pointer p_nd) const;
+ assert_consistent_with_debug_base(const node_pointer,
+ const char*, int) const;
void
- assert_min() const;
+ assert_min(const char*, int) const;
void
- assert_min_imp(const node_pointer p_nd) const;
+ assert_min_imp(const node_pointer, const char*, int) const;
void
- assert_max() const;
+ assert_max(const char*, int) const;
void
- assert_max_imp(const node_pointer p_nd) const;
+ assert_max_imp(const node_pointer, const char*, int) const;
void
- assert_size() const;
+ assert_size(const char*, int) const;
- typedef std::pair< const_pointer, const_pointer> node_consistent_t;
+ typedef std::pair<const_pointer, const_pointer> node_consistent_t;
node_consistent_t
- assert_node_consistent_(const node_pointer p_nd) const;
-#endif
+ assert_node_consistent_(const node_pointer, const char*, int) const;
+#endif
void
initialize();
node_pointer
- recursive_copy_node(const node_pointer p_nd);
+ recursive_copy_node(const node_pointer);
protected:
- node_pointer m_p_head;
+ node_pointer m_p_head;
+ size_type m_size;
+ static node_allocator s_node_allocator;
+ };
- size_type m_size;
+#define PB_DS_STRUCT_ONLY_ASSERT_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X.structure_only_assert_valid(__FILE__, __LINE__);)
- static node_allocator s_node_allocator;
- };
+#define PB_DS_ASSERT_NODE_CONSISTENT(_Node) \
+ _GLIBCXX_DEBUG_ONLY(assert_node_consistent(_Node, __FILE__, __LINE__);)
#include <ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp>
@@ -475,23 +413,16 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp>
#include <ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp>
+#undef PB_DS_ASSERT_NODE_CONSISTENT
+#undef PB_DS_STRUCT_ONLY_ASSERT_VALID
#undef PB_DS_CLASS_C_DEC
-
#undef PB_DS_CLASS_T_DEC
-
-#undef PB_DS_CLASS_NAME
-
-#undef PB_DS_TYPES_TRAITS_C_DEC
-
+#undef PB_DS_BIN_TREE_NAME
+#undef PB_DS_BIN_TREE_TRAITS_BASE
#undef PB_DS_DEBUG_MAP_BASE_C_DEC
#ifdef PB_DS_TREE_TRACE
#undef PB_DS_TREE_TRACE_BASE_C_DEC
-#endif
-
-#undef PB_DS_V2F
-#undef PB_DS_EP2VP
-#undef PB_DS_V2S
-
+#endif
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp
deleted file mode 100644
index 370574c908..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file cond_dtor_entry_dealtor.hpp
- * Contains a binary tree container conditional deallocator
- */
-
-class bin_search_tree_cond_dtor_entry_dealtor_
-{
-public:
- inline
- bin_search_tree_cond_dtor_entry_dealtor_(node_pointer p_nd) : m_p_nd(p_nd),
- m_no_action_dtor(false)
- { }
-
- inline void
- set_no_action_dtor()
- {
- m_no_action_dtor = true;
- }
-
- inline
- ~bin_search_tree_cond_dtor_entry_dealtor_()
- {
- if (m_no_action_dtor)
- return;
-
- typename Allocator::template rebind<Node>::other().
- deallocate(m_p_nd, 1);
- }
-
-protected:
- node_pointer m_p_nd;
-
- bool m_no_action_dtor;
-};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
deleted file mode 100644
index 612ecebbe9..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file cond_key_dtor_entry_dealtor.hpp
- * Contains a binary tree container conditional deallocator
- */
-
-class bin_seach_tree_cond_key_dtor_entry_dealtor_
-{
-public:
- inline
- bin_seach_tree_cond_key_dtor_entry_dealtor_(node_pointer p_nd) : m_p_nd(p_nd),
- m_no_action_dtor(false),
- m_key_destruct(false)
- { }
-
- inline void
- set_no_action_dtor()
- {
- m_no_action_dtor = true;
- }
-
- inline void
- set_key_destruct()
- {
- m_key_destruct = true;
- }
-
- inline
- ~bin_seach_tree_cond_key_dtor_entry_dealtor_()
- {
- if (m_no_action_dtor)
- return;
-
- if (m_key_destruct)
- m_p_nd->m_value.first.~Key();
-
- bin_tree_base::s_alloc.deallocate(m_p_nd, 1);
- }
-
-protected:
- node_pointer m_p_nd;
-
- bool m_no_action_dtor;
-
- bool m_key_destruct;
-};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
index 1aa2fd4763..2815b4274a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file bin_search_tree_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -45,36 +45,36 @@ PB_DS_CLASS_C_DEC::s_node_allocator;
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME() : m_p_head(s_node_allocator.allocate(1)), m_size(0)
+PB_DS_BIN_TREE_NAME() : m_p_head(s_node_allocator.allocate(1)), m_size(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) :
+PB_DS_BIN_TREE_NAME(const Cmp_Fn& r_cmp_fn) :
Cmp_Fn(r_cmp_fn), m_p_head(s_node_allocator.allocate(1)), m_size(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
+PB_DS_BIN_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
Cmp_Fn(r_cmp_fn),
node_update(r_node_update),
m_p_head(s_node_allocator.allocate(1)),
m_size(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
+PB_DS_BIN_TREE_NAME(const PB_DS_CLASS_C_DEC& other) :
#ifdef _GLIBCXX_DEBUG
debug_base(other),
#endif
@@ -88,7 +88,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
{
initialize();
m_size = other.m_size;
- _GLIBCXX_DEBUG_ONLY(other.structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
__try
{
@@ -104,7 +104,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
s_node_allocator.deallocate(m_p_head, 1);
__throw_exception_again;
}
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -112,12 +112,12 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
value_swap(other);
std::swap((Cmp_Fn& )(*this), (Cmp_Fn& )other);
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -132,7 +132,7 @@ value_swap(PB_DS_CLASS_C_DEC& other)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~PB_DS_CLASS_NAME()
+~PB_DS_BIN_TREE_NAME()
{
clear();
s_node_allocator.deallocate(m_p_head, 1);
@@ -187,7 +187,7 @@ recursive_copy_node(const node_pointer p_nd)
if (p_ret->m_p_right != 0)
p_ret->m_p_right->m_p_parent = p_ret;
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_ret);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_ret)
return p_ret;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
index 2d3001a2a1..1f77e31cf3 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file bin_search_tree_/debug_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -43,230 +43,235 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- structure_only_assert_valid();
- assert_consistent_with_debug_base();
- assert_size();
- assert_iterators();
+ structure_only_assert_valid(__file, __line);
+ assert_consistent_with_debug_base(__file, __line);
+ assert_size(__file, __line);
+ assert_iterators(__file, __line);
if (m_p_head->m_p_parent == 0)
{
- _GLIBCXX_DEBUG_ASSERT(m_size == 0);
+ PB_DS_DEBUG_VERIFY(m_size == 0);
}
else
{
- _GLIBCXX_DEBUG_ASSERT(m_size > 0);
+ PB_DS_DEBUG_VERIFY(m_size > 0);
}
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-structure_only_assert_valid() const
+structure_only_assert_valid(const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head != 0);
+ PB_DS_DEBUG_VERIFY(m_p_head != 0);
if (m_p_head->m_p_parent == 0)
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_left == m_p_head);
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_right == m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_left == m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_right == m_p_head);
}
else
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent->m_p_parent == m_p_head);
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_left != m_p_head);
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_right != m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_parent->m_p_parent == m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_left != m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_right != m_p_head);
}
if (m_p_head->m_p_parent != 0)
- assert_node_consistent(m_p_head->m_p_parent);
- assert_min();
- assert_max();
+ assert_node_consistent(m_p_head->m_p_parent, __file, __line);
+ assert_min(__file, __line);
+ assert_max(__file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_node_consistent(const node_pointer p_nd) const
+assert_node_consistent(const node_pointer p_nd,
+ const char* __file, int __line) const
{
- assert_node_consistent_(p_nd);
+ assert_node_consistent_(p_nd, __file, __line);
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_consistent_t
PB_DS_CLASS_C_DEC::
-assert_node_consistent_(const node_pointer p_nd) const
+assert_node_consistent_(const node_pointer p_nd,
+ const char* __file, int __line) const
{
if (p_nd == 0)
return (std::make_pair((const_pointer)0,(const_pointer)0));
- assert_node_consistent_with_left(p_nd);
- assert_node_consistent_with_right(p_nd);
+ assert_node_consistent_with_left(p_nd, __file, __line);
+ assert_node_consistent_with_right(p_nd, __file, __line);
const std::pair<const_pointer, const_pointer>
- l_range = assert_node_consistent_(p_nd->m_p_left);
+ l_range = assert_node_consistent_(p_nd->m_p_left, __file, __line);
if (l_range.second != 0)
- _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(*l_range.second),
- PB_DS_V2F(p_nd->m_value)));
+ PB_DS_DEBUG_VERIFY(Cmp_Fn::operator()(PB_DS_V2F(*l_range.second),
+ PB_DS_V2F(p_nd->m_value)));
const std::pair<const_pointer, const_pointer>
- r_range = assert_node_consistent_(p_nd->m_p_right);
+ r_range = assert_node_consistent_(p_nd->m_p_right, __file, __line);
if (r_range.first != 0)
- _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
+ PB_DS_DEBUG_VERIFY(Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
PB_DS_V2F(*r_range.first)));
- return (std::make_pair((l_range.first != 0)? l_range.first :& p_nd->m_value,(r_range.second != 0)? r_range.second :& p_nd->m_value));
+ return std::make_pair((l_range.first != 0) ? l_range.first : &p_nd->m_value,
+ (r_range.second != 0)? r_range.second : &p_nd->m_value);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_node_consistent_with_left(const node_pointer p_nd) const
+assert_node_consistent_with_left(const node_pointer p_nd,
+ const char* __file, int __line) const
{
if (p_nd->m_p_left == 0)
return;
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left->m_p_parent == p_nd);
- _GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
- PB_DS_V2F(p_nd->m_p_left->m_value)));
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_left->m_p_parent == p_nd);
+ PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
+ PB_DS_V2F(p_nd->m_p_left->m_value)));
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_node_consistent_with_right(const node_pointer p_nd) const
+assert_node_consistent_with_right(const node_pointer p_nd,
+ const char* __file, int __line) const
{
if (p_nd->m_p_right == 0)
return;
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_right->m_p_parent == p_nd);
- _GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_p_right->m_value),
- PB_DS_V2F(p_nd->m_value)));
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_right->m_p_parent == p_nd);
+ PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_p_right->m_value),
+ PB_DS_V2F(p_nd->m_value)));
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_min() const
+assert_min(const char* __file, int __line) const
{
- assert_min_imp(m_p_head->m_p_parent);
+ assert_min_imp(m_p_head->m_p_parent, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_min_imp(const node_pointer p_nd) const
+assert_min_imp(const node_pointer p_nd, const char* __file, int __line) const
{
if (p_nd == 0)
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_left == m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_left == m_p_head);
return;
}
if (p_nd->m_p_left == 0)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd == m_p_head->m_p_left);
+ PB_DS_DEBUG_VERIFY(p_nd == m_p_head->m_p_left);
return;
}
- assert_min_imp(p_nd->m_p_left);
+ assert_min_imp(p_nd->m_p_left, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_max() const
+assert_max(const char* __file, int __line) const
{
- assert_max_imp(m_p_head->m_p_parent);
+ assert_max_imp(m_p_head->m_p_parent, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_max_imp(const node_pointer p_nd) const
+assert_max_imp(const node_pointer p_nd,
+ const char* __file, int __line) const
{
if (p_nd == 0)
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_right == m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_right == m_p_head);
return;
}
if (p_nd->m_p_right == 0)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd == m_p_head->m_p_right);
+ PB_DS_DEBUG_VERIFY(p_nd == m_p_head->m_p_right);
return;
}
- assert_max_imp(p_nd->m_p_right);
+ assert_max_imp(p_nd->m_p_right, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_iterators() const
+assert_iterators(const char* __file, int __line) const
{
size_type iterated_num = 0;
const_iterator prev_it = end();
for (const_iterator it = begin(); it != end(); ++it)
{
++iterated_num;
- _GLIBCXX_DEBUG_ASSERT(lower_bound(PB_DS_V2F(*it)).m_p_nd == it.m_p_nd);
+ PB_DS_DEBUG_VERIFY(lower_bound(PB_DS_V2F(*it)).m_p_nd == it.m_p_nd);
const_iterator upper_bound_it = upper_bound(PB_DS_V2F(*it));
--upper_bound_it;
- _GLIBCXX_DEBUG_ASSERT(upper_bound_it.m_p_nd == it.m_p_nd);
+ PB_DS_DEBUG_VERIFY(upper_bound_it.m_p_nd == it.m_p_nd);
if (prev_it != end())
- _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(*prev_it),
- PB_DS_V2F(*it)));
+ PB_DS_DEBUG_VERIFY(Cmp_Fn::operator()(PB_DS_V2F(*prev_it),
+ PB_DS_V2F(*it)));
prev_it = it;
}
- _GLIBCXX_DEBUG_ASSERT(iterated_num == m_size);
+ PB_DS_DEBUG_VERIFY(iterated_num == m_size);
size_type reverse_iterated_num = 0;
const_reverse_iterator reverse_prev_it = rend();
for (const_reverse_iterator reverse_it = rbegin(); reverse_it != rend();
++reverse_it)
{
++reverse_iterated_num;
- _GLIBCXX_DEBUG_ASSERT(lower_bound(
+ PB_DS_DEBUG_VERIFY(lower_bound(
PB_DS_V2F(*reverse_it)).m_p_nd == reverse_it.m_p_nd);
const_iterator upper_bound_it = upper_bound(PB_DS_V2F(*reverse_it));
--upper_bound_it;
- _GLIBCXX_DEBUG_ASSERT(upper_bound_it.m_p_nd == reverse_it.m_p_nd);
+ PB_DS_DEBUG_VERIFY(upper_bound_it.m_p_nd == reverse_it.m_p_nd);
if (reverse_prev_it != rend())
- _GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(PB_DS_V2F(*reverse_prev_it),
- PB_DS_V2F(*reverse_it)));
+ PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(PB_DS_V2F(*reverse_prev_it),
+ PB_DS_V2F(*reverse_it)));
reverse_prev_it = reverse_it;
}
- _GLIBCXX_DEBUG_ASSERT(reverse_iterated_num == m_size);
+ PB_DS_DEBUG_VERIFY(reverse_iterated_num == m_size);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_consistent_with_debug_base() const
+assert_consistent_with_debug_base(const char* __file, int __line) const
{
- debug_base::check_size(m_size);
- assert_consistent_with_debug_base(m_p_head->m_p_parent);
+ debug_base::check_size(m_size, __file, __line);
+ assert_consistent_with_debug_base(m_p_head->m_p_parent, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_consistent_with_debug_base(const node_pointer p_nd) const
+assert_consistent_with_debug_base(const node_pointer p_nd,
+ const char* __file, int __line) const
{
if (p_nd == 0)
return;
- debug_base::check_key_exists(PB_DS_V2F(p_nd->m_value));
- assert_consistent_with_debug_base(p_nd->m_p_left);
- assert_consistent_with_debug_base(p_nd->m_p_right);
+ debug_base::check_key_exists(PB_DS_V2F(p_nd->m_value), __file, __line);
+ assert_consistent_with_debug_base(p_nd->m_p_left, __file, __line);
+ assert_consistent_with_debug_base(p_nd->m_p_right, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_size() const
-{
- _GLIBCXX_DEBUG_ASSERT(recursive_count(m_p_head->m_p_parent) == m_size);
-}
+assert_size(const char* __file, int __line) const
+{ PB_DS_DEBUG_VERIFY(recursive_count(m_p_head->m_p_parent) == m_size); }
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
index 86a663ee62..1d1b17040d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file bin_search_tree_/erase_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -45,11 +45,8 @@ actual_erase_node(node_pointer p_z)
{
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
--m_size;
-
- _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value)));
-
+ _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(p_z->m_value));)
p_z->~node();
-
s_node_allocator.deallocate(p_z, 1);
}
@@ -61,24 +58,19 @@ update_min_max_for_erased_node(node_pointer p_z)
if (m_size == 1)
{
m_p_head->m_p_left = m_p_head->m_p_right = m_p_head;
-
return;
}
if (m_p_head->m_p_left == p_z)
{
iterator it(p_z);
-
++it;
-
m_p_head->m_p_left = it.m_p_nd;
}
else if (m_p_head->m_p_right == p_z)
{
iterator it(p_z);
-
--it;
-
m_p_head->m_p_right = it.m_p_nd;
}
}
@@ -88,18 +80,13 @@ void
PB_DS_CLASS_C_DEC::
clear()
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
-
- clear_imp(m_p_head->m_p_parent);
-
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ clear_imp(m_p_head->m_p_parent);
m_size = 0;
-
initialize();
-
_GLIBCXX_DEBUG_ONLY(debug_base::clear();)
-
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
- }
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
void
@@ -110,11 +97,7 @@ clear_imp(node_pointer p_nd)
return;
clear_imp(p_nd->m_p_left);
-
clear_imp(p_nd->m_p_right);
-
p_nd->~node();
-
s_node_allocator.deallocate(p_nd, 1);
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
index 082c7f0f79..03b7fe8941 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,149 +34,138 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file bin_search_tree_/find_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-lower_bound(const_key_reference r_key) const
+lower_bound(key_const_reference r_key) const
{
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
while (p_nd != 0)
- if (Cmp_Fn::operator()(
- PB_DS_V2F(p_nd->m_value),
- r_key))
+ if (Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
p_nd = p_nd->m_p_right;
else
{
p_pot = p_nd;
-
p_nd = p_nd->m_p_left;
}
-
- return (iterator(p_pot));
+ return iterator(p_pot);
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-lower_bound(const_key_reference r_key)
+lower_bound(key_const_reference r_key)
{
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
while (p_nd != 0)
- if (Cmp_Fn::operator()(
- PB_DS_V2F(p_nd->m_value),
- r_key))
+ if (Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
p_nd = p_nd->m_p_right;
else
{
p_pot = p_nd;
-
p_nd = p_nd->m_p_left;
}
-
- return (iterator(p_pot));
+ return iterator(p_pot);
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-upper_bound(const_key_reference r_key) const
+upper_bound(key_const_reference r_key) const
{
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
while (p_nd != 0)
- if (Cmp_Fn::operator()(r_key,
- PB_DS_V2F(p_nd->m_value)))
+ if (Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value)))
{
- p_pot = p_nd,
-
- p_nd = p_nd->m_p_left;
+ p_pot = p_nd;
+ p_nd = p_nd->m_p_left;
}
else
p_nd = p_nd->m_p_right;
-
- return (const_iterator(p_pot));
+ return const_iterator(p_pot);
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-upper_bound(const_key_reference r_key)
+upper_bound(key_const_reference r_key)
{
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
while (p_nd != 0)
- if (Cmp_Fn::operator()(r_key,
- PB_DS_V2F(p_nd->m_value)))
+ if (Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value)))
{
- p_pot = p_nd,
-
- p_nd = p_nd->m_p_left;
+ p_pot = p_nd;
+ p_nd = p_nd->m_p_left;
}
else
p_nd = p_nd->m_p_right;
-
- return (point_iterator(p_pot));
+ return point_iterator(p_pot);
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key)
+find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
-
- node_pointer p_pot = m_p_head;
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
{
p_pot = p_nd;
-
p_nd = p_nd->m_p_left;
}
else
p_nd = p_nd->m_p_right;
- return point_iterator((p_pot != m_p_head&& Cmp_Fn::operator()(
- r_key,
- PB_DS_V2F(p_pot->m_value)))?
- m_p_head : p_pot);
+ node_pointer ret = p_pot;
+ if (p_pot != m_p_head)
+ {
+ const bool __cmp = Cmp_Fn::operator()(r_key, PB_DS_V2F(p_pot->m_value));
+ if (__cmp)
+ ret = m_p_head;
+ }
+ return point_iterator(ret);
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key) const
+find(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
-
- node_pointer p_pot = m_p_head;
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
{
p_pot = p_nd;
-
p_nd = p_nd->m_p_left;
}
else
p_nd = p_nd->m_p_right;
- return const_point_iterator((p_pot != m_p_head&& Cmp_Fn::operator()(
- r_key,
- PB_DS_V2F(p_pot->m_value)))?
- m_p_head : p_pot);
+ node_pointer ret = p_pot;
+ if (p_pot != m_p_head)
+ {
+ const bool __cmp = Cmp_Fn::operator()(r_key, PB_DS_V2F(p_pot->m_value));
+ if (__cmp)
+ ret = m_p_head;
+ }
+ return point_const_iterator(ret);
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
index b3e46112fb..54cd52e04b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file bin_search_tree_/info_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
index 0c25ad2356..5a9a03e867 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file bin_search_tree_/insert_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -43,19 +43,17 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert_leaf(const_reference r_value)
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
- if (m_size == 0)
- return (std::make_pair(
- insert_imp_empty(r_value),
- true));
+ if (m_size == 0)
+ return std::make_pair(insert_imp_empty(r_value),
+ true);
node_pointer p_nd = m_p_head->m_p_parent;
node_pointer p_pot = m_p_head;
while (p_nd != 0)
- if (!Cmp_Fn::operator()(
- PB_DS_V2F(p_nd->m_value),
+ if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
PB_DS_V2F(r_value)))
{
p_pot = p_nd;
@@ -66,37 +64,29 @@ insert_leaf(const_reference r_value)
p_nd = p_nd->m_p_right;
if (p_pot == m_p_head)
- return (std::make_pair(
- insert_leaf_new(r_value, m_p_head->m_p_right, false),
- true));
+ return std::make_pair(insert_leaf_new(r_value, m_p_head->m_p_right, false),
+ true);
- if (!Cmp_Fn::operator()(
- PB_DS_V2F(r_value),
+ if (!Cmp_Fn::operator()(PB_DS_V2F(r_value),
PB_DS_V2F(p_pot->m_value)))
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
-
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(
- PB_DS_V2F(r_value)));
-
- return (std::make_pair(p_pot, false));
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ PB_DS_CHECK_KEY_EXISTS(PB_DS_V2F(r_value))
+ return std::make_pair(p_pot, false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(
- PB_DS_V2F(r_value)));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_value))
p_nd = p_pot->m_p_left;
if (p_nd == 0)
- return (std::make_pair(
- insert_leaf_new(r_value, p_pot, true),
- true));
+ return std::make_pair(insert_leaf_new(r_value, p_pot, true),
+ true);
while (p_nd->m_p_right != 0)
p_nd = p_nd->m_p_right;
- return (std::make_pair(
- insert_leaf_new(r_value, p_nd, false),
- true));
+ return std::make_pair(insert_leaf_new(r_value, p_nd, false),
+ true);
}
PB_DS_CLASS_T_DEC
@@ -105,45 +95,37 @@ PB_DS_CLASS_C_DEC::
insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd)
{
node_pointer p_new_nd =
- get_new_node_for_leaf_insert( r_value, traits_base::m_no_throw_copies_indicator);
+ get_new_node_for_leaf_insert(r_value,
+ traits_base::m_no_throw_copies_indicator);
if (left_nd)
{
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left == 0);
- _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(
- PB_DS_V2F(r_value),
- PB_DS_V2F(p_nd->m_value)));
+ _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(r_value),
+ PB_DS_V2F(p_nd->m_value)));
p_nd->m_p_left = p_new_nd;
-
if (m_p_head->m_p_left == p_nd)
m_p_head->m_p_left = p_new_nd;
}
else
{
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_right == 0);
- _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(
- PB_DS_V2F(p_nd->m_value),
- PB_DS_V2F(r_value)));
+ _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
+ PB_DS_V2F(r_value)));
p_nd->m_p_right = p_new_nd;
-
if (m_p_head->m_p_right == p_nd)
m_p_head->m_p_right = p_new_nd;
}
p_new_nd->m_p_parent = p_nd;
-
p_new_nd->m_p_left = p_new_nd->m_p_right = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_nd));
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd)
update_to_top(p_new_nd, (node_update* )this);
-
- _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(
- PB_DS_V2F(r_value)));
-
- return (iterator(p_new_nd));
+ _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_value));)
+ return iterator(p_new_nd);
}
PB_DS_CLASS_T_DEC
@@ -152,21 +134,17 @@ PB_DS_CLASS_C_DEC::
insert_imp_empty(const_reference r_value)
{
node_pointer p_new_node =
- get_new_node_for_leaf_insert( r_value, traits_base::m_no_throw_copies_indicator);
+ get_new_node_for_leaf_insert(r_value, traits_base::m_no_throw_copies_indicator);
m_p_head->m_p_left = m_p_head->m_p_right =
m_p_head->m_p_parent = p_new_node;
p_new_node->m_p_parent = m_p_head;
-
p_new_node->m_p_left = p_new_node->m_p_right = 0;
+ _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_value));)
- _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(
- PB_DS_V2F(r_value)));
-
- update_to_top(m_p_head->m_p_parent, (node_update* )this);
-
- return (iterator(p_new_node));
+ update_to_top(m_p_head->m_p_parent, (node_update*)this);
+ return iterator(p_new_node);
}
PB_DS_CLASS_T_DEC
@@ -175,20 +153,15 @@ PB_DS_CLASS_C_DEC::
get_new_node_for_leaf_insert(const_reference r_val, false_type)
{
node_pointer p_new_nd = s_node_allocator.allocate(1);
-
cond_dealtor_t cond(p_new_nd);
- new (const_cast<void* >(
- static_cast<const void* >(&p_new_nd->m_value)))
+ new (const_cast<void* >(static_cast<const void* >(&p_new_nd->m_value)))
typename node::value_type(r_val);
cond.set_no_action();
-
p_new_nd->m_p_left = p_new_nd->m_p_right = 0;
-
++m_size;
-
- return (p_new_nd);
+ return p_new_nd;
}
PB_DS_CLASS_T_DEC
@@ -198,14 +171,10 @@ get_new_node_for_leaf_insert(const_reference r_val, true_type)
{
node_pointer p_new_nd = s_node_allocator.allocate(1);
- new (const_cast<void* >(
- static_cast<const void* >(&p_new_nd->m_value)))
+ new (const_cast<void* >(static_cast<const void* >(&p_new_nd->m_value)))
typename node::value_type(r_val);
p_new_nd->m_p_left = p_new_nd->m_p_right = 0;
-
++m_size;
-
- return (p_new_nd);
+ return p_new_nd;
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
index e5f6a4d736..8076084aef 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
+ * @file bin_search_tree_/iterators_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -103,11 +103,11 @@ rend() const
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
node_begin() const
{
- return (const_node_iterator(m_p_head->m_p_parent));
+ return (node_const_iterator(m_p_head->m_p_parent));
}
PB_DS_CLASS_T_DEC
@@ -119,11 +119,11 @@ node_begin()
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
node_end() const
{
- return (const_node_iterator(0));
+ return (node_const_iterator(0));
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
index b4ea45376a..8fa80b73b7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file node_iterators.hpp
+ * @file bin_search_tree_/node_iterators.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -47,191 +47,143 @@ namespace __gnu_pbds
{
namespace detail
{
+#define PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC \
+ bin_search_tree_const_node_it_<Node, Const_Iterator, Iterator, _Alloc>
-#define PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC \
- bin_search_tree_const_node_it_< \
- Node, \
- Const_Iterator, \
- Iterator, \
- Allocator>
-
- // Const node iterator.
+ /// Const node iterator.
template<typename Node,
class Const_Iterator,
class Iterator,
- class Allocator>
+ typename _Alloc>
class bin_search_tree_const_node_it_
{
private:
-
- private:
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Node>::other::pointer
node_pointer;
public:
-
- // Category.
+ /// Category.
typedef trivial_iterator_tag iterator_category;
- // Difference type.
+ /// Difference type.
typedef trivial_iterator_difference_type difference_type;
- // __Iterator's value type.
+ /// Iterator's value type.
typedef Const_Iterator value_type;
- // __Iterator's reference type.
+ /// Iterator's reference type.
typedef Const_Iterator reference;
- // __Iterator's __const reference type.
+ /// Iterator's __const reference type.
typedef Const_Iterator const_reference;
- // Metadata type.
+ /// Metadata type.
typedef typename Node::metadata_type metadata_type;
- // Const metadata reference type.
+ /// Const metadata reference type.
typedef
- typename Allocator::template rebind<
- metadata_type>::other::const_reference
- const_metadata_reference;
+ typename _Alloc::template rebind<metadata_type>::other::const_reference
+ metadata_const_reference;
- public:
-
- // Default constructor.
- /*
- inline
- bin_search_tree_const_node_it_()
- */
- inline
- bin_search_tree_const_node_it_(const node_pointer p_nd = 0) : m_p_nd(const_cast<node_pointer>(p_nd))
+ bin_search_tree_const_node_it_(const node_pointer p_nd = 0)
+ : m_p_nd(const_cast<node_pointer>(p_nd))
{ }
- // Access.
- inline const_reference
+ /// Access.
+ const_reference
operator*() const
- {
- return (Const_Iterator(m_p_nd));
- }
+ { return Const_Iterator(m_p_nd); }
- // Metadata access.
- inline const_metadata_reference
+ /// Metadata access.
+ metadata_const_reference
get_metadata() const
- {
- return (m_p_nd->get_metadata());
- }
+ { return m_p_nd->get_metadata(); }
- // Returns the __const node iterator associated with the left node.
- inline PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
+ /// Returns the __const node iterator associated with the left node.
+ PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
get_l_child() const
- {
- return (PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(m_p_nd->m_p_left));
- }
+ { return PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(m_p_nd->m_p_left); }
- // Returns the __const node iterator associated with the right node.
- inline PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
+ /// Returns the __const node iterator associated with the right node.
+ PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
get_r_child() const
- {
- return (PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(m_p_nd->m_p_right));
- }
+ { return PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(m_p_nd->m_p_right); }
- // Compares to a different iterator object.
- inline bool
+ /// Compares to a different iterator object.
+ bool
operator==(const PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC& other) const
- {
- return (m_p_nd == other.m_p_nd);
- }
+ { return m_p_nd == other.m_p_nd; }
- // Compares (negatively) to a different iterator object.
- inline bool
+ /// Compares (negatively) to a different iterator object.
+ bool
operator!=(const PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC& other) const
- {
- return (m_p_nd != other.m_p_nd);
- }
+ { return m_p_nd != other.m_p_nd; }
- public:
node_pointer m_p_nd;
};
-#define PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC \
- bin_search_tree_node_it_< \
- Node, \
- Const_Iterator, \
- Iterator, \
- Allocator>
+#define PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC \
+ bin_search_tree_node_it_<Node, Const_Iterator, Iterator, _Alloc>
- // Node iterator.
+ /// Node iterator.
template<typename Node,
class Const_Iterator,
class Iterator,
- class Allocator>
- class bin_search_tree_node_it_ :
- public PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
-
+ typename _Alloc>
+ class bin_search_tree_node_it_
+ : public PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
{
-
private:
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Node>::other::pointer
node_pointer;
public:
-
- // __Iterator's value type.
+ /// Iterator's value type.
typedef Iterator value_type;
- // __Iterator's reference type.
+ /// Iterator's reference type.
typedef Iterator reference;
- // __Iterator's __const reference type.
+ /// Iterator's __const reference type.
typedef Iterator const_reference;
- public:
-
- // Default constructor.
- /*
- inline
- bin_search_tree_node_it_();
- */
-
inline
- bin_search_tree_node_it_(const node_pointer p_nd = 0) : PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(
- const_cast<node_pointer>(p_nd))
+ bin_search_tree_node_it_(const node_pointer p_nd = 0)
+ : PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(const_cast<node_pointer>(p_nd))
{ }
- // Access.
- inline Iterator
+ /// Access.
+ Iterator
operator*() const
- {
- return (Iterator(PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC::m_p_nd));
- }
+ { return Iterator(PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC::m_p_nd); }
- // Returns the node iterator associated with the left node.
- inline PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC
+ /// Returns the node iterator associated with the left node.
+ PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC
get_l_child() const
{
- return (PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC(
- PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC::m_p_nd->m_p_left));
+ return PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC(
+ PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC::m_p_nd->m_p_left);
}
- // Returns the node iterator associated with the right node.
- inline PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC
+ /// Returns the node iterator associated with the right node.
+ PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC
get_r_child() const
{
- return (PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC(
- PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC::m_p_nd->m_p_right));
+ return PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC(
+ PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC::m_p_nd->m_p_right);
}
};
#undef PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC
-
#undef PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC
} // namespace detail
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_BIN_SEARCH_TREE_NODE_ITERATORS_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
index 959df68a16..d99924878c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file point_iterators.hpp
+ * @file bin_search_tree_/point_iterators.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -58,7 +58,7 @@ namespace __gnu_pbds
Reference, \
Const_Reference, \
Is_Forward_Iterator, \
- Allocator>
+ _Alloc>
#define PB_DS_TREE_CONST_ODIR_IT_C_DEC \
bin_search_tree_const_it_< \
@@ -69,7 +69,7 @@ namespace __gnu_pbds
Reference, \
Const_Reference, \
!Is_Forward_Iterator, \
- Allocator>
+ _Alloc>
#define PB_DS_TREE_IT_C_DEC \
bin_search_tree_it_< \
@@ -80,7 +80,7 @@ namespace __gnu_pbds
Reference, \
Const_Reference, \
Is_Forward_Iterator, \
- Allocator>
+ _Alloc>
#define PB_DS_TREE_ODIR_IT_C_DEC \
bin_search_tree_it_< \
@@ -91,9 +91,9 @@ namespace __gnu_pbds
Reference, \
Const_Reference, \
!Is_Forward_Iterator, \
- Allocator>
+ _Alloc>
- // Const iterator.
+ /// Const iterator.
template<typename Node_Pointer,
typename Value_Type,
typename Pointer,
@@ -101,27 +101,17 @@ namespace __gnu_pbds
typename Reference,
typename Const_Reference,
bool Is_Forward_Iterator,
- class Allocator>
+ typename _Alloc>
class bin_search_tree_const_it_
{
-
- public:
-
- typedef std::bidirectional_iterator_tag iterator_category;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef Value_Type value_type;
-
- typedef Pointer pointer;
-
- typedef Const_Pointer const_pointer;
-
- typedef Reference reference;
-
- typedef Const_Reference const_reference;
-
public:
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef Value_Type value_type;
+ typedef Pointer pointer;
+ typedef Const_Pointer const_pointer;
+ typedef Reference reference;
+ typedef Const_Reference const_reference;
inline
bin_search_tree_const_it_(const Node_Pointer p_nd = 0)
@@ -280,7 +270,7 @@ namespace __gnu_pbds
Node_Pointer m_p_nd;
};
- // Iterator.
+ /// Iterator.
template<typename Node_Pointer,
typename Value_Type,
typename Pointer,
@@ -288,14 +278,10 @@ namespace __gnu_pbds
typename Reference,
typename Const_Reference,
bool Is_Forward_Iterator,
- class Allocator>
- class bin_search_tree_it_ :
- public PB_DS_TREE_CONST_IT_C_DEC
-
+ typename _Alloc>
+ class bin_search_tree_it_ : public PB_DS_TREE_CONST_IT_C_DEC
{
-
public:
-
inline
bin_search_tree_it_(const Node_Pointer p_nd = 0)
: PB_DS_TREE_CONST_IT_C_DEC((Node_Pointer)p_nd)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
index 63f307d39d..5b71c407f7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
+ * @file bin_search_tree_/policy_access_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -42,15 +42,11 @@ PB_DS_CLASS_T_DEC
Cmp_Fn&
PB_DS_CLASS_C_DEC::
get_cmp_fn()
-{
- return (*this);
-}
+{ return (*this); }
PB_DS_CLASS_T_DEC
const Cmp_Fn&
PB_DS_CLASS_C_DEC::
get_cmp_fn() const
-{
- return (*this);
-}
+{ return (*this); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
index 3bdd1ebff1..cfcccadb18 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file r_erase_fn_imps.hpp
+ * @file bin_search_tree_/r_erase_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -45,11 +45,8 @@ actual_erase_node(node_pointer p_z)
{
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
--m_size;
-
- _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value)));
-
+ _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value));)
p_z->~node();
-
s_node_allocator.deallocate(p_z, 1);
}
@@ -61,24 +58,19 @@ update_min_max_for_erased_node(node_pointer p_z)
if (m_size == 1)
{
m_p_head->m_p_left = m_p_head->m_p_right = m_p_head;
-
return;
}
if (m_p_head->m_p_left == p_z)
{
iterator it(p_z);
-
++it;
-
m_p_head->m_p_left = it.m_p_nd;
}
else if (m_p_head->m_p_right == p_z)
{
iterator it(p_z);
-
--it;
-
m_p_head->m_p_right = it.m_p_nd;
}
}
@@ -88,18 +80,13 @@ void
PB_DS_CLASS_C_DEC::
clear()
{
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
-
- clear_imp(m_p_head->m_p_parent);
-
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ clear_imp(m_p_head->m_p_parent);
m_size = 0;
-
initialize();
-
_GLIBCXX_DEBUG_ONLY(debug_base::clear();)
-
- _GLIBCXX_DEBUG_ONLY(structure_only_assert_valid();)
- }
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
void
@@ -110,11 +97,7 @@ clear_imp(node_pointer p_nd)
return;
clear_imp(p_nd->m_p_left);
-
clear_imp(p_nd->m_p_right);
-
p_nd->~Node();
-
s_node_allocator.deallocate(p_nd, 1);
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
index 6989ca6858..63c757cc13 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file rotate_fn_imps.hpp
+ * @file bin_search_tree_/rotate_fn_imps.hpp
* Contains imps for rotating nodes.
*/
@@ -62,10 +62,10 @@ rotate_left(node_pointer p_x)
p_y->m_p_left = p_x;
p_x->m_p_parent = p_y;
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_x);)
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_x)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y)
- apply_update(p_x, (node_update* )this);
+ apply_update(p_x, (node_update* )this);
apply_update(p_x->m_p_parent, (node_update* )this);
}
@@ -93,10 +93,10 @@ rotate_right(node_pointer p_x)
p_y->m_p_right = p_x;
p_x->m_p_parent = p_y;
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_x);)
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_x)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y)
- apply_update(p_x, (node_update* )this);
+ apply_update(p_x, (node_update* )this);
apply_update(p_x->m_p_parent, (node_update* )this);
}
@@ -129,9 +129,8 @@ inline void
PB_DS_CLASS_C_DEC::
apply_update(node_pointer p_nd, Node_Update_* /*p_update*/)
{
- node_update::operator()(
- node_iterator(p_nd),
- const_node_iterator(static_cast<node_pointer>(0)));
+ node_update::operator()(node_iterator(p_nd),
+ node_const_iterator(static_cast<node_pointer>(0)));
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
index 11dc30860a..be2fd344cc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file bin_search_tree_/split_join_fn_imps.hpp
* Contains an implementation class for bin_search_tree_.
*/
@@ -43,8 +43,8 @@ bool
PB_DS_CLASS_C_DEC::
join_prep(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (other.m_size == 0)
return false;
@@ -54,9 +54,13 @@ join_prep(PB_DS_CLASS_C_DEC& other)
return false;
}
- const bool greater = Cmp_Fn::operator()(PB_DS_V2F(m_p_head->m_p_right->m_value), PB_DS_V2F(other.m_p_head->m_p_left->m_value));
+ const bool greater =
+ Cmp_Fn::operator()(PB_DS_V2F(m_p_head->m_p_right->m_value),
+ PB_DS_V2F(other.m_p_head->m_p_left->m_value));
- const bool lesser = Cmp_Fn::operator()(PB_DS_V2F(other.m_p_head->m_p_right->m_value), PB_DS_V2F(m_p_head->m_p_left->m_value));
+ const bool lesser =
+ Cmp_Fn::operator()(PB_DS_V2F(other.m_p_head->m_p_right->m_value),
+ PB_DS_V2F(m_p_head->m_p_left->m_value));
if (!greater && !lesser)
__throw_join_error();
@@ -81,39 +85,39 @@ join_finish(PB_DS_CLASS_C_DEC& other)
PB_DS_CLASS_T_DEC
bool
PB_DS_CLASS_C_DEC::
-split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
+split_prep(key_const_reference r_key, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
other.clear();
if (m_size == 0)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return false;
}
if (Cmp_Fn::operator()(r_key, PB_DS_V2F(m_p_head->m_p_left->m_value)))
{
value_swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return false;
}
if (!Cmp_Fn::operator()(r_key, PB_DS_V2F(m_p_head->m_p_right->m_value)))
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return false;
}
if (m_size == 1)
{
value_swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return false;
}
@@ -130,8 +134,8 @@ split_finish(PB_DS_CLASS_C_DEC& other)
other.m_size = std::distance(other.begin(), other.end());
m_size -= other.m_size;
initialize_min_max();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp
index 58c30c3fe5..416815e762 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file traits.hpp
+ * @file bin_search_tree_/traits.hpp
* Contains an implementation for bin_search_tree_.
*/
@@ -48,34 +48,29 @@ namespace __gnu_pbds
{
namespace detail
{
-
+ /// Binary search tree traits, primary template
+ /// @ingroup traits
template<typename Key,
typename Mapped,
class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
+ template<typename Node_CItr,
+ class Node_Itr,
class Cmp_Fn,
- class Allocator>
- class Node_Update,
+ typename _Alloc>
+ class Node_Update,
class Node,
- class Allocator>
+ typename _Alloc>
struct bin_search_tree_traits
{
private:
- typedef
- types_traits<
- Key,
- Mapped,
- Allocator,
- false>
- type_traits;
+ typedef types_traits<Key, Mapped, _Alloc, false> type_traits;
public:
typedef Node node;
typedef
bin_search_tree_const_it_<
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
@@ -83,12 +78,12 @@ namespace __gnu_pbds
typename type_traits::reference,
typename type_traits::const_reference,
true,
- Allocator>
- const_point_iterator;
+ _Alloc>
+ point_const_iterator;
typedef
bin_search_tree_it_<
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
@@ -96,12 +91,12 @@ namespace __gnu_pbds
typename type_traits::reference,
typename type_traits::const_reference,
true,
- Allocator>
+ _Alloc>
point_iterator;
typedef
bin_search_tree_const_it_<
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
@@ -109,12 +104,12 @@ namespace __gnu_pbds
typename type_traits::reference,
typename type_traits::const_reference,
false,
- Allocator>
+ _Alloc>
const_reverse_iterator;
typedef
bin_search_tree_it_<
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
@@ -122,74 +117,72 @@ namespace __gnu_pbds
typename type_traits::reference,
typename type_traits::const_reference,
false,
- Allocator>
+ _Alloc>
reverse_iterator;
+ /// This is an iterator to an iterator: it iterates over nodes,
+ /// and de-referencing it returns one of the tree's iterators.
typedef
bin_search_tree_const_node_it_<
Node,
- const_point_iterator,
+ point_const_iterator,
point_iterator,
- Allocator>
- const_node_iterator;
+ _Alloc>
+ node_const_iterator;
typedef
bin_search_tree_node_it_<
Node,
- const_point_iterator,
+ point_const_iterator,
point_iterator,
- Allocator>
+ _Alloc>
node_iterator;
typedef
Node_Update<
- const_node_iterator,
+ node_const_iterator,
node_iterator,
Cmp_Fn,
- Allocator>
+ _Alloc>
node_update;
typedef
- __gnu_pbds::null_tree_node_update<
- const_node_iterator,
+ __gnu_pbds::null_node_update<
+ node_const_iterator,
node_iterator,
Cmp_Fn,
- Allocator>*
+ _Alloc>*
null_node_update_pointer;
};
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
+ template<typename Node_CItr,
+ class Node_Itr,
class Cmp_Fn,
- class Allocator>
- class Node_Update,
+ typename _Alloc>
+ class Node_Update,
class Node,
- class Allocator>
+ typename _Alloc>
struct bin_search_tree_traits<
Key,
- null_mapped_type,
+ null_type,
Cmp_Fn,
Node_Update,
Node,
- Allocator>
+ _Alloc>
{
private:
- typedef
- types_traits<
- Key,
- null_mapped_type,
- Allocator,
- false>
- type_traits;
+ typedef types_traits<Key, null_type, _Alloc, false> type_traits;
public:
typedef Node node;
typedef
bin_search_tree_const_it_<
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
@@ -197,14 +190,14 @@ namespace __gnu_pbds
typename type_traits::reference,
typename type_traits::const_reference,
true,
- Allocator>
- const_point_iterator;
+ _Alloc>
+ point_const_iterator;
- typedef const_point_iterator point_iterator;
+ typedef point_const_iterator point_iterator;
typedef
bin_search_tree_const_it_<
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
@@ -212,35 +205,33 @@ namespace __gnu_pbds
typename type_traits::reference,
typename type_traits::const_reference,
false,
- Allocator>
+ _Alloc>
const_reverse_iterator;
typedef const_reverse_iterator reverse_iterator;
+ /// This is an iterator to an iterator: it iterates over nodes,
+ /// and de-referencing it returns one of the tree's iterators.
typedef
bin_search_tree_const_node_it_<
Node,
- const_point_iterator,
+ point_const_iterator,
point_iterator,
- Allocator>
- const_node_iterator;
+ _Alloc>
+ node_const_iterator;
- typedef const_node_iterator node_iterator;
+ typedef node_const_iterator node_iterator;
typedef
- Node_Update<
- const_node_iterator,
- node_iterator,
- Cmp_Fn,
- Allocator>
+ Node_Update<node_const_iterator, node_iterator, Cmp_Fn, _Alloc>
node_update;
typedef
- __gnu_pbds::null_tree_node_update<
- const_node_iterator,
+ __gnu_pbds::null_node_update<
+ node_const_iterator,
node_iterator,
Cmp_Fn,
- Allocator>*
+ _Alloc>*
null_node_update_pointer;
};
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
index 576cba265e..8d91c4ca0b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,17 +34,13 @@
// warranty.
/**
- * @file binary_heap_.hpp
+ * @file binary_heap_/binary_heap_.hpp
* Contains an implementation class for a binary heap.
*/
#ifndef PB_DS_BINARY_HEAP_HPP
#define PB_DS_BINARY_HEAP_HPP
-/*
- * Based on CLRS.
- */
-
#include <queue>
#include <algorithm>
#include <ext/pb_ds/detail/cond_dealtor.hpp>
@@ -53,7 +49,7 @@
#include <ext/pb_ds/detail/binary_heap_/entry_cmp.hpp>
#include <ext/pb_ds/detail/binary_heap_/entry_pred.hpp>
#include <ext/pb_ds/detail/binary_heap_/resize_policy.hpp>
-#include <ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp>
#include <ext/pb_ds/detail/binary_heap_/const_iterator.hpp>
#ifdef PB_DS_BINARY_HEAP_TRACE_
#include <iostream>
@@ -66,126 +62,87 @@ namespace __gnu_pbds
namespace detail
{
#define PB_DS_CLASS_T_DEC \
- template<typename Value_Type, class Cmp_Fn, class Allocator>
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- binary_heap_<Value_Type, Cmp_Fn, Allocator>
+ binary_heap<Value_Type, Cmp_Fn, _Alloc>
#define PB_DS_ENTRY_CMP_DEC \
- entry_cmp<Value_Type, Cmp_Fn, is_simple<Value_Type>::value, Allocator>::type
+ entry_cmp<Value_Type, Cmp_Fn, _Alloc, is_simple<Value_Type>::value>::type
#define PB_DS_RESIZE_POLICY_DEC \
- __gnu_pbds::detail::resize_policy<typename Allocator::size_type>
+ __gnu_pbds::detail::resize_policy<typename _Alloc::size_type>
/**
- * class description = "Base class for some types of h3ap$">
- **/
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- class binary_heap_ : public PB_DS_ENTRY_CMP_DEC,
- public PB_DS_RESIZE_POLICY_DEC
+ * Binary heaps composed of resize and compare policies.
+ *
+ * @ingroup heap-detail
+ *
+ * Based on CLRS.
+ */
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
+ class binary_heap
+ : public PB_DS_ENTRY_CMP_DEC, public PB_DS_RESIZE_POLICY_DEC
{
+ public:
+ typedef Value_Type value_type;
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef typename PB_DS_ENTRY_CMP_DEC entry_cmp;
+ typedef PB_DS_RESIZE_POLICY_DEC resize_policy;
+ typedef cond_dealtor<value_type, _Alloc> cond_dealtor_t;
private:
enum
{
- simple_value = is_simple<Value_Type>::value
+ simple_value = is_simple<value_type>::value
};
- typedef integral_constant<int, simple_value> no_throw_copies_t;
-
- typedef
- typename Allocator::template rebind<
- Value_Type>::other
- value_allocator;
-
- typedef
- typename __conditional_type<
- simple_value,
- Value_Type,
- typename value_allocator::pointer>::__type
- entry;
+ typedef integral_constant<int, simple_value> no_throw_copies_t;
- typedef
- typename Allocator::template rebind<
- entry>::other
- entry_allocator;
-
- typedef typename entry_allocator::pointer entry_pointer;
-
- typedef typename PB_DS_ENTRY_CMP_DEC entry_cmp;
-
- typedef PB_DS_RESIZE_POLICY_DEC resize_policy;
-
- typedef
- cond_dealtor<
- Value_Type,
- Allocator>
- cond_dealtor_t;
+ typedef typename _Alloc::template rebind<value_type> __rebind_v;
+ typedef typename __rebind_v::other value_allocator;
public:
+ typedef typename value_allocator::pointer pointer;
+ typedef typename value_allocator::const_pointer const_pointer;
+ typedef typename value_allocator::reference reference;
+ typedef typename value_allocator::const_reference const_reference;
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
+ typedef typename __conditional_type<simple_value,
+ value_type, pointer>::__type
+ entry;
- typedef Value_Type value_type;
+ typedef typename _Alloc::template rebind<entry>::other
+ entry_allocator;
- typedef
- typename Allocator::template rebind<
- value_type>::other::pointer
- pointer;
+ typedef typename entry_allocator::pointer entry_pointer;
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_pointer
- const_pointer;
+ typedef binary_heap_point_const_iterator_<value_type, entry,
+ simple_value, _Alloc>
+ point_const_iterator;
- typedef
- typename Allocator::template rebind<
- value_type>::other::reference
- reference;
+ typedef point_const_iterator point_iterator;
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_reference
- const_reference;
+ typedef binary_heap_const_iterator_<value_type, entry,
+ simple_value, _Alloc>
+ const_iterator;
- typedef
- binary_heap_const_point_iterator_<
- value_type,
- entry,
- simple_value,
- Allocator>
- const_point_iterator;
+ typedef const_iterator iterator;
- typedef const_point_iterator point_iterator;
- typedef
- binary_heap_const_iterator_<
- value_type,
- entry,
- simple_value,
- Allocator>
- const_iterator;
+ binary_heap();
- typedef const_iterator iterator;
+ binary_heap(const cmp_fn&);
- typedef Cmp_Fn cmp_fn;
-
- typedef Allocator allocator_type;
-
- public:
-
- binary_heap_();
-
- binary_heap_(const Cmp_Fn& r_cmp_fn);
-
- binary_heap_(const PB_DS_CLASS_C_DEC& other);
+ binary_heap(const binary_heap&);
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(binary_heap&);
- ~binary_heap_();
+ ~binary_heap();
inline bool
empty() const;
@@ -196,17 +153,17 @@ namespace __gnu_pbds
inline size_type
max_size() const;
- Cmp_Fn&
+ Cmp_Fn&
get_cmp_fn();
- const Cmp_Fn&
+ const Cmp_Fn&
get_cmp_fn() const;
inline point_iterator
- push(const_reference r_val);
+ push(const_reference);
void
- modify(point_iterator it, const_reference r_new_val);
+ modify(point_iterator, const_reference);
inline const_reference
top() const;
@@ -215,17 +172,17 @@ namespace __gnu_pbds
pop();
inline void
- erase(point_iterator it);
+ erase(point_iterator);
template<typename Pred>
- typename PB_DS_CLASS_C_DEC::size_type
- erase_if(Pred pred);
+ size_type
+ erase_if(Pred);
- inline static void
- erase_at(entry_pointer a_entries, size_type size, false_type);
+ inline void
+ erase_at(entry_pointer, size_type, false_type);
- inline static void
- erase_at(entry_pointer a_entries, size_type size, true_type);
+ inline void
+ erase_at(entry_pointer, size_type, true_type);
inline iterator
begin();
@@ -243,48 +200,43 @@ namespace __gnu_pbds
clear();
template<typename Pred>
- void
- split(Pred pred, PB_DS_CLASS_C_DEC& other);
+ void
+ split(Pred, binary_heap&);
void
- join(PB_DS_CLASS_C_DEC& other);
+ join(binary_heap&);
#ifdef PB_DS_BINARY_HEAP_TRACE_
void
trace() const;
-#endif
+#endif
protected:
-
template<typename It>
- void
- copy_from_range(It first_it, It last_it);
+ void
+ copy_from_range(It, It);
private:
-
void
- value_swap(PB_DS_CLASS_C_DEC& other);
-
- inline void
- insert_value(const_reference r_val, false_type);
+ value_swap(binary_heap&);
inline void
- insert_value(value_type val, true_type);
+ insert_value(const_reference, false_type);
inline void
- insert_entry(entry e);
+ insert_value(value_type, true_type);
inline void
resize_for_insert_if_needed();
inline void
- swap_value_imp(entry_pointer p_e, value_type new_val, true_type);
+ swap_value_imp(entry_pointer, value_type, true_type);
inline void
- swap_value_imp(entry_pointer p_e, const_reference r_new_val, false_type);
+ swap_value_imp(entry_pointer, const_reference, false_type);
void
- fix(entry_pointer p_e);
+ fix(entry_pointer);
inline const_reference
top_imp(true_type) const;
@@ -293,48 +245,91 @@ namespace __gnu_pbds
top_imp(false_type) const;
inline static size_type
- left_child(size_type i);
+ left_child(size_type);
inline static size_type
- right_child(size_type i);
+ right_child(size_type);
inline static size_type
- parent(size_type i);
+ parent(size_type);
inline void
resize_for_erase_if_needed();
template<typename Pred>
size_type
- partition(Pred pred);
+ partition(Pred);
-#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ make_heap()
+ {
+ const entry_cmp& m_cmp = static_cast<entry_cmp&>(*this);
+ entry_pointer end = m_a_entries + m_size;
+ std::make_heap(m_a_entries, end, m_cmp);
+ _GLIBCXX_DEBUG_ASSERT(is_heap());
+ }
-#ifdef PB_DS_BINARY_HEAP_TRACE_
void
- trace_entry(const entry& r_e, false_type) const;
+ push_heap()
+ {
+ if (!is_heap())
+ make_heap();
+ else
+ {
+ const entry_cmp& m_cmp = static_cast<entry_cmp&>(*this);
+ entry_pointer end = m_a_entries + m_size;
+ std::push_heap(m_a_entries, end, m_cmp);
+ }
+ }
void
- trace_entry(const entry& r_e, true_type) const;
-#endif
+ pop_heap()
+ {
+ const entry_cmp& m_cmp = static_cast<entry_cmp&>(*this);
+ entry_pointer end = m_a_entries + m_size;
+ std::pop_heap(m_a_entries, end, m_cmp);
+ }
+
+ bool
+ is_heap()
+ {
+ const entry_cmp& m_cmp = static_cast<entry_cmp&>(*this);
+ entry_pointer end = m_a_entries + m_size;
+ bool p = std::__is_heap(m_a_entries, end, m_cmp);
+ return p;
+ }
- private:
- static entry_allocator s_entry_allocator;
-
- static value_allocator s_value_allocator;
+#ifdef _GLIBCXX_DEBUG
+ void
+ assert_valid(const char*, int) const;
+#endif
- static no_throw_copies_t s_no_throw_copies_ind;
+#ifdef PB_DS_BINARY_HEAP_TRACE_
+ void
+ trace_entry(const entry&, false_type) const;
- size_type m_size;
+ void
+ trace_entry(const entry&, true_type) const;
+#endif
- size_type m_actual_size;
+ static entry_allocator s_entry_allocator;
+ static value_allocator s_value_allocator;
+ static no_throw_copies_t s_no_throw_copies_ind;
- entry_pointer m_a_entries;
+ size_type m_size;
+ size_type m_actual_size;
+ entry_pointer m_a_entries;
};
+#define PB_DS_ASSERT_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);)
+
+#define PB_DS_DEBUG_VERIFY(_Cond) \
+ _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \
+ _M_message(#_Cond" assertion from %1;:%2;") \
+ ._M_string(__FILE__)._M_integer(__LINE__) \
+ ,__file,__line)
+
#include <ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp>
#include <ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp>
@@ -354,4 +349,4 @@ namespace __gnu_pbds
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
index aa86f5ea4f..aaadd67e6f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file const_iterator.hpp
+ * @file binary_heap_/const_iterator.hpp
* Contains an iterator class returned by the table's const find and insert
* methods.
*/
@@ -42,87 +42,75 @@
#ifndef PB_DS_BINARY_HEAP_CONST_ITERATOR_HPP
#define PB_DS_BINARY_HEAP_CONST_ITERATOR_HPP
-#include <ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp>
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
+#define PB_DS_BIN_HEAP_CIT_BASE \
+ binary_heap_point_const_iterator_<Value_Type, Entry, Simple, _Alloc>
-#define PB_DS_CLASS_C_DEC \
- binary_heap_const_iterator_<Value_Type, Entry, Simple, Allocator>
-
-#define PB_DS_BASE_C_DEC \
- binary_heap_const_point_iterator_<Value_Type, Entry, Simple, Allocator>
-
- // Const point-type iterator.
+ /// Const point-type iterator.
template<typename Value_Type,
typename Entry,
bool Simple,
- class Allocator>
- class binary_heap_const_iterator_ : public PB_DS_BASE_C_DEC
+ typename _Alloc>
+ class binary_heap_const_iterator_ : public PB_DS_BIN_HEAP_CIT_BASE
{
-
private:
- typedef typename PB_DS_BASE_C_DEC::entry_pointer entry_pointer;
-
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_BIN_HEAP_CIT_BASE base_type;
+ typedef typename base_type::entry_pointer entry_pointer;
public:
+ /// Category.
+ typedef std::forward_iterator_tag iterator_category;
- // Category.
- typedef std::forward_iterator_tag iterator_category;
-
- // Difference type.
- typedef typename Allocator::difference_type difference_type;
+ /// Difference type.
+ typedef typename _Alloc::difference_type difference_type;
- // Iterator's value type.
- typedef typename base_type::value_type value_type;
+ /// Iterator's value type.
+ typedef typename base_type::value_type value_type;
- // Iterator's pointer type.
- typedef typename base_type::pointer pointer;
+ /// Iterator's pointer type.
+ typedef typename base_type::pointer pointer;
- // Iterator's const pointer type.
- typedef typename base_type::const_pointer const_pointer;
+ /// Iterator's const pointer type.
+ typedef typename base_type::const_pointer const_pointer;
- // Iterator's reference type.
- typedef typename base_type::reference reference;
+ /// Iterator's reference type.
+ typedef typename base_type::reference reference;
- // Iterator's const reference type.
- typedef typename base_type::const_reference const_reference;
-
- public:
+ /// Iterator's const reference type.
+ typedef typename base_type::const_reference const_reference;
inline
binary_heap_const_iterator_(entry_pointer p_e) : base_type(p_e)
{ }
- // Default constructor.
+ /// Default constructor.
inline
binary_heap_const_iterator_()
{ }
- // Copy constructor.
+ /// Copy constructor.
inline
- binary_heap_const_iterator_(const PB_DS_CLASS_C_DEC& other) : base_type(other)
+ binary_heap_const_iterator_(const binary_heap_const_iterator_& other)
+ : base_type(other)
{ }
- // Compares content to a different iterator object.
+ /// Compares content to a different iterator object.
inline bool
- operator==(const PB_DS_CLASS_C_DEC& other) const
- {
- return base_type::m_p_e == other.m_p_e;
- }
+ operator==(const binary_heap_const_iterator_& other) const
+ { return base_type::m_p_e == other.m_p_e; }
- // Compares content (negatively) to a different iterator object.
+ /// Compares content (negatively) to a different iterator object.
inline bool
- operator!=(const PB_DS_CLASS_C_DEC& other) const
- {
- return base_type::m_p_e != other.m_p_e;
- }
+ operator!=(const binary_heap_const_iterator_& other) const
+ { return base_type::m_p_e != other.m_p_e; }
- inline PB_DS_CLASS_C_DEC&
+ inline binary_heap_const_iterator_&
operator++()
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_p_e != 0);
@@ -130,10 +118,10 @@ namespace __gnu_pbds
return *this;
}
- inline PB_DS_CLASS_C_DEC
+ inline binary_heap_const_iterator_
operator++(int)
{
- PB_DS_CLASS_C_DEC ret_it(base_type::m_p_e);
+ binary_heap_const_iterator_ ret_it(base_type::m_p_e);
operator++();
return ret_it;
}
@@ -144,8 +132,7 @@ namespace __gnu_pbds
{ ++base_type::m_p_e; }
};
-#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_BIN_HEAP_CIT_BASE
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
deleted file mode 100644
index 3d75e86d45..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file const_point_iterator.hpp
- * Contains an iterator class returned by the table's const find and insert
- * methods.
- */
-
-#ifndef PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP
-#define PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP
-
-#include <ext/pb_ds/tag_and_trait.hpp>
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
- // Const point-type iterator.
- template<typename Value_Type, typename Entry, bool Simple,
- typename Allocator>
- class binary_heap_const_point_iterator_
- {
- protected:
- typedef typename Allocator::template rebind<Entry>::other::pointer entry_pointer;
-
- public:
- // Category.
- typedef trivial_iterator_tag iterator_category;
-
- // Difference type.
- typedef trivial_iterator_difference_type difference_type;
-
- // Iterator's value type.
- typedef Value_Type value_type;
-
- // Iterator's pointer type.
- typedef typename Allocator::template rebind<value_type>::other::pointer
- pointer;
-
- // Iterator's const pointer type.
- typedef
- typename Allocator::template rebind<value_type>::other::const_pointer
- const_pointer;
-
- // Iterator's reference type.
- typedef
- typename Allocator::template rebind<value_type>::other::reference
- reference;
-
- // Iterator's const reference type.
- typedef
- typename Allocator::template rebind<value_type>::other::const_reference
- const_reference;
-
- inline
- binary_heap_const_point_iterator_(entry_pointer p_e) : m_p_e(p_e)
- { }
-
- // Default constructor.
- inline
- binary_heap_const_point_iterator_() : m_p_e(0) { }
-
- // Copy constructor.
- inline
- binary_heap_const_point_iterator_(const binary_heap_const_point_iterator_& other)
- : m_p_e(other.m_p_e)
- { }
-
- // Access.
- inline const_pointer
- operator->() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_e != 0);
- return to_ptr(integral_constant<int, Simple>());
- }
-
- // Access.
- inline const_reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_e != 0);
- return *to_ptr(integral_constant<int, Simple>());
- }
-
- // Compares content to a different iterator object.
- inline bool
- operator==(const binary_heap_const_point_iterator_& other) const
- { return m_p_e == other.m_p_e; }
-
- // Compares content (negatively) to a different iterator object.
- inline bool
- operator!=(const binary_heap_const_point_iterator_& other) const
- { return m_p_e != other.m_p_e; }
-
- private:
- inline const_pointer
- to_ptr(true_type) const
- { return m_p_e; }
-
- inline const_pointer
- to_ptr(false_type) const
- { return *m_p_e; }
-
- public:
- entry_pointer m_p_e;
- };
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
index a77a02521b..9602385fbb 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +35,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file binary_heap_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for binary_heap_.
*/
@@ -61,55 +62,37 @@ copy_from_range(It first_it, It last_it)
insert_value(*first_it, s_no_throw_copies_ind);
++first_it;
}
-
- std::make_heap(m_a_entries, m_a_entries + m_size, static_cast<entry_cmp& >(*this));
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ make_heap();
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binary_heap_() :
- m_size(0),
- m_actual_size(resize_policy::min_size),
+binary_heap()
+: m_size(0), m_actual_size(resize_policy::min_size),
m_a_entries(s_entry_allocator.allocate(m_actual_size))
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-}
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binary_heap_(const Cmp_Fn& r_cmp_fn) :
- entry_cmp(r_cmp_fn),
- m_size(0),
- m_actual_size(resize_policy::min_size),
+binary_heap(const Cmp_Fn& r_cmp_fn)
+: entry_cmp(r_cmp_fn), m_size(0), m_actual_size(resize_policy::min_size),
m_a_entries(s_entry_allocator.allocate(m_actual_size))
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-}
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binary_heap_(const PB_DS_CLASS_C_DEC& other) :
- entry_cmp(other),
- resize_policy(other),
- m_size(0),
+binary_heap(const PB_DS_CLASS_C_DEC& other)
+: entry_cmp(other), resize_policy(other), m_size(0),
m_actual_size(other.m_actual_size),
m_a_entries(s_entry_allocator.allocate(m_actual_size))
{
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID(other)
_GLIBCXX_DEBUG_ASSERT(m_a_entries != other.m_a_entries);
- const_iterator first_it = other.begin();
- const_iterator last_it = other.end();
-
__try
{
- while (first_it != last_it)
- {
- insert_value(*first_it, s_no_throw_copies_ind);
- ++first_it;
- }
+ copy_from_range(other.begin(), other.end());
}
__catch(...)
{
@@ -119,7 +102,7 @@ binary_heap_(const PB_DS_CLASS_C_DEC& other) :
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
__throw_exception_again;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -127,14 +110,13 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
_GLIBCXX_DEBUG_ASSERT(m_a_entries != other.m_a_entries);
-
value_swap(other);
- std::swap((entry_cmp& )(*this), (entry_cmp& )other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ std::swap((entry_cmp&)(*this), (entry_cmp&)other);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -150,10 +132,9 @@ value_swap(PB_DS_CLASS_C_DEC& other)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~binary_heap_()
+~binary_heap()
{
for (size_type i = 0; i < m_size; ++i)
erase_at(m_a_entries, i, s_no_throw_copies_ind);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
index fcfecfd503..b1b0f5ba1b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file binary_heap_/debug_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -43,30 +43,30 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
#ifdef PB_DS_REGRESSION
s_entry_allocator.check_allocated(m_a_entries, m_actual_size);
-#endif
+#endif
- resize_policy::assert_valid();
- _GLIBCXX_DEBUG_ASSERT(m_size <= m_actual_size);
+ resize_policy::assert_valid(__file, __line);
+ PB_DS_DEBUG_VERIFY(m_size <= m_actual_size);
for (size_type i = 0; i < m_size; ++i)
{
#ifdef PB_DS_REGRESSION
s_value_allocator.check_allocated(m_a_entries[i], 1);
-#endif
+#endif
if (left_child(i) < m_size)
- _GLIBCXX_DEBUG_ASSERT(!entry_cmp::operator()(m_a_entries[i], m_a_entries[left_child(i)]));
+ PB_DS_DEBUG_VERIFY(!entry_cmp::operator()(m_a_entries[i], m_a_entries[left_child(i)]));
- _GLIBCXX_DEBUG_ASSERT(parent(left_child(i)) == i);
+ PB_DS_DEBUG_VERIFY(parent(left_child(i)) == i);
if (right_child(i) < m_size)
- _GLIBCXX_DEBUG_ASSERT(!entry_cmp::operator()(m_a_entries[i], m_a_entries[right_child(i)]));
+ PB_DS_DEBUG_VERIFY(!entry_cmp::operator()(m_a_entries[i], m_a_entries[right_child(i)]));
- _GLIBCXX_DEBUG_ASSERT(parent(right_child(i)) == i);
+ PB_DS_DEBUG_VERIFY(parent(right_child(i)) == i);
}
}
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
index b0a9b5b0d9..42e799fc8b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file entry_cmp.hpp
+ * @file binary_heap_/entry_cmp.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -45,48 +45,40 @@ namespace __gnu_pbds
{
namespace detail
{
+ /// Entry compare, primary template.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc, bool No_Throw>
+ struct entry_cmp;
- template<typename Value_Type,
- class Cmp_Fn,
- bool No_Throw,
- class Allocator>
- struct entry_cmp
- {
- typedef Cmp_Fn type;
- };
-
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- struct entry_cmp<
- Value_Type,
- Cmp_Fn,
- false,
- Allocator>
- {
- public:
- typedef
- typename Allocator::template rebind<
- Value_Type>::other::const_pointer
- entry;
-
- struct type : public Cmp_Fn
+ /// Specialization, true.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct entry_cmp<_VTp, Cmp_Fn, _Alloc, true>
{
- public:
- inline
- type()
- { }
+ /// Compare.
+ typedef Cmp_Fn type;
+ };
+
+ /// Specialization, false.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct entry_cmp<_VTp, Cmp_Fn, _Alloc, false>
+ {
+ private:
+ typedef typename _Alloc::template rebind<_VTp> __rebind_v;
- inline
- type(const Cmp_Fn& other) : Cmp_Fn(other)
- { }
+ public:
+ typedef typename __rebind_v::other::const_pointer entry;
- inline bool
- operator()(entry p_lhs, entry p_rhs) const
+ /// Compare plus entry.
+ struct type : public Cmp_Fn
{
- return Cmp_Fn::operator()(*p_lhs, * p_rhs);
- }
- };
- };
+ type() { }
+ type(const Cmp_Fn& other) : Cmp_Fn(other) { }
+
+ bool
+ operator()(entry lhs, entry rhs) const
+ { return Cmp_Fn::operator()(*lhs, *rhs); }
+ };
+ };
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
index 185529e15e..001876ef1f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file entry_pred.hpp
+ * @file binary_heap_/entry_pred.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -45,48 +45,40 @@ namespace __gnu_pbds
{
namespace detail
{
+ /// Entry predicate primary class template.
+ template<typename _VTp, typename Pred, typename _Alloc, bool No_Throw>
+ struct entry_pred;
- template<typename Value_Type,
- class Pred,
- bool No_Throw,
- class Allocator>
- struct entry_pred
- {
- typedef Pred type;
- };
-
- template<typename Value_Type, class Pred, class Allocator>
- struct entry_pred<
- Value_Type,
- Pred,
- false,
- Allocator>
- {
- public:
- typedef
- typename Allocator::template rebind<
- Value_Type>::other::const_pointer
- entry;
-
- struct type : public Pred
+ /// Specialization, true.
+ template<typename _VTp, typename Pred, typename _Alloc>
+ struct entry_pred<_VTp, Pred, _Alloc, true>
{
- public:
- inline
- type()
- { }
+ typedef Pred type;
+ };
+
+ /// Specialization, false.
+ template<typename _VTp, typename Pred, typename _Alloc>
+ struct entry_pred<_VTp, Pred, _Alloc, false>
+ {
+ private:
+ typedef typename _Alloc::template rebind<_VTp> __rebind_v;
- inline
- type(const Pred& other) : Pred(other)
- { }
+ public:
+ typedef typename __rebind_v::other::const_pointer entry;
- inline bool
- operator()(entry p_v) const
+ struct type : public Pred
{
- return Pred::operator()(*p_v);
- }
- };
- };
+ inline
+ type() { }
+ inline
+ type(const Pred& other) : Pred(other) { }
+
+ inline bool
+ operator()(entry p_v) const
+ { return Pred::operator()(*p_v); }
+ };
+ };
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
index a842651190..f204d81f60 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file binary_heap_/erase_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -49,24 +49,18 @@ clear()
__try
{
- const size_type actual_size = resize_policy::get_new_size_for_arbitrary(0);
-
- entry_pointer a_entries = s_entry_allocator.allocate(actual_size);
-
- resize_policy::notify_arbitrary(actual_size);
-
+ const size_type new_size = resize_policy::get_new_size_for_arbitrary(0);
+ entry_pointer new_entries = s_entry_allocator.allocate(new_size);
+ resize_policy::notify_arbitrary(new_size);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
-
- m_actual_size = actual_size;
-
- m_a_entries = a_entries;
+ m_actual_size = new_size;
+ m_a_entries = new_entries;
}
__catch(...)
{ }
m_size = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -89,20 +83,16 @@ inline void
PB_DS_CLASS_C_DEC::
pop()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!empty());
- erase_at(m_a_entries, 0, s_no_throw_copies_ind);
-
- std::pop_heap(m_a_entries, m_a_entries + m_size,
- static_cast<entry_cmp& >(*this));
-
+ pop_heap();
+ erase_at(m_a_entries, m_size - 1, s_no_throw_copies_ind);
resize_for_erase_if_needed();
-
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
--m_size;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -111,45 +101,34 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- typedef typename entry_pred<value_type, Pred, simple_value, Allocator>::type
+ typedef typename entry_pred<value_type, Pred, _Alloc, simple_value>::type
pred_t;
const size_type left = partition(pred_t(pred));
-
_GLIBCXX_DEBUG_ASSERT(m_size >= left);
-
const size_type ersd = m_size - left;
-
for (size_type i = left; i < m_size; ++i)
erase_at(m_a_entries, i, s_no_throw_copies_ind);
__try
{
- const size_type actual_size =
+ const size_type new_size =
resize_policy::get_new_size_for_arbitrary(left);
- entry_pointer a_entries = s_entry_allocator.allocate(actual_size);
-
- std::copy(m_a_entries, m_a_entries + left, a_entries);
-
+ entry_pointer new_entries = s_entry_allocator.allocate(new_size);
+ std::copy(m_a_entries, m_a_entries + left, new_entries);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
-
- m_actual_size = actual_size;
-
+ m_actual_size = new_size;
resize_policy::notify_arbitrary(m_actual_size);
}
__catch(...)
{ };
m_size = left;
-
- std::make_heap(m_a_entries, m_a_entries + m_size,
- static_cast<entry_cmp& >(*this));
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
+ make_heap();
+ PB_DS_ASSERT_VALID((*this))
return ersd;
}
@@ -158,26 +137,22 @@ inline void
PB_DS_CLASS_C_DEC::
erase(point_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!empty());
const size_type fix_pos = it.m_p_e - m_a_entries;
-
std::swap(*it.m_p_e, m_a_entries[m_size - 1]);
-
erase_at(m_a_entries, m_size - 1, s_no_throw_copies_ind);
-
resize_for_erase_if_needed();
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
--m_size;
-
_GLIBCXX_DEBUG_ASSERT(fix_pos <= m_size);
if (fix_pos != m_size)
fix(m_a_entries + fix_pos);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -190,21 +165,15 @@ resize_for_erase_if_needed()
__try
{
- const size_type new_actual_size =
- resize_policy::get_new_size_for_shrink();
-
- entry_pointer a_new_entries = s_entry_allocator.allocate(new_actual_size);
-
+ const size_type new_size = resize_policy::get_new_size_for_shrink();
+ entry_pointer new_entries = s_entry_allocator.allocate(new_size);
resize_policy::notify_shrink_resize();
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
- std::copy(m_a_entries, m_a_entries + m_size - 1, a_new_entries);
-
+ std::copy(m_a_entries, m_a_entries + m_size - 1, new_entries);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
-
- m_actual_size = new_actual_size;
-
- m_a_entries = a_new_entries;
+ m_actual_size = new_size;
+ m_a_entries = new_entries;
}
__catch(...)
{ }
@@ -230,9 +199,7 @@ partition(Pred pred)
else
{
_GLIBCXX_DEBUG_ASSERT(left < right);
-
std::swap(m_a_entries[left], m_a_entries[right]);
-
++left;
--right;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
index 28d4a8c80f..c445dc0c31 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file binary_heap_/find_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -43,9 +43,8 @@ inline typename PB_DS_CLASS_C_DEC::const_reference
PB_DS_CLASS_C_DEC::
top() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ASSERT(!empty());
-
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(!empty());
return top_imp(s_no_throw_copies_ind);
}
@@ -53,39 +52,28 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_reference
PB_DS_CLASS_C_DEC::
top_imp(true_type) const
-{
- return* m_a_entries;
-}
+{ return *m_a_entries; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_reference
PB_DS_CLASS_C_DEC::
top_imp(false_type) const
-{
- return** m_a_entries;
-}
+{ return **m_a_entries; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
left_child(size_type i)
-{
- return i* 2 + 1;
-}
+{ return i * 2 + 1; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
right_child(size_type i)
-{
- return i* 2 + 2;
-}
+{ return i * 2 + 2; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
parent(size_type i)
-{
- return (i - 1) / 2;
-}
-
+{ return (i - 1) / 2; }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
index d29279318f..ae36d3181a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file binary_heap_/info_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -42,23 +42,17 @@ PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
empty() const
-{
- return (m_size == 0);
-}
+{ return m_size == 0; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
size() const
-{
- return (m_size);
-}
+{ return m_size; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
max_size() const
-{
- return (s_entry_allocator.max_size());
-}
+{ return s_entry_allocator.max_size(); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
index f13a3cb198..1e1ed969e7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file binary_heap_/insert_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -43,11 +43,10 @@ inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
push(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
insert_value(r_val, s_no_throw_copies_ind);
- std::push_heap(m_a_entries, m_a_entries + m_size,
- static_cast<entry_cmp&>(*this));
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ push_heap();
+ PB_DS_ASSERT_VALID((*this))
return point_iterator(m_a_entries);
}
@@ -57,7 +56,6 @@ PB_DS_CLASS_C_DEC::
insert_value(value_type val, true_type)
{
resize_for_insert_if_needed();
-
m_a_entries[m_size++] = val;
}
@@ -77,15 +75,6 @@ insert_value(const_reference r_val, false_type)
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-insert_entry(entry e)
-{
- resize_for_insert_if_needed();
- m_a_entries[m_size++] = e;
-}
-
-PB_DS_CLASS_T_DEC
-inline void
-PB_DS_CLASS_C_DEC::
resize_for_insert_if_needed()
{
if (!resize_policy::resize_needed_for_grow(m_size))
@@ -94,13 +83,15 @@ resize_for_insert_if_needed()
return;
}
- const size_type new_actual_size = resize_policy::get_new_size_for_grow();
- entry_pointer a_new_entries = s_entry_allocator.allocate(new_actual_size);
+ const size_type new_size = resize_policy::get_new_size_for_grow();
+ entry_pointer new_entries = s_entry_allocator.allocate(new_size);
resize_policy::notify_grow_resize();
- std::copy(m_a_entries, m_a_entries + m_size, a_new_entries);
+
+ std::copy(m_a_entries, m_a_entries + m_size, new_entries);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
- m_actual_size = new_actual_size;
- m_a_entries = a_new_entries;
+ m_actual_size = new_size;
+ m_a_entries = new_entries;
+ make_heap();
}
PB_DS_CLASS_T_DEC
@@ -108,10 +99,11 @@ void
PB_DS_CLASS_C_DEC::
modify(point_iterator it, const_reference r_new_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
swap_value_imp(it.m_p_e, r_new_val, s_no_throw_copies_ind);
fix(it.m_p_e);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(is_heap());
}
PB_DS_CLASS_T_DEC
@@ -123,43 +115,44 @@ fix(entry_pointer p_e)
if (i > 0 && entry_cmp::operator()(m_a_entries[parent(i)], m_a_entries[i]))
{
size_type parent_i = parent(i);
- while (i > 0
+ while (i > 0
&& entry_cmp::operator()(m_a_entries[parent_i], m_a_entries[i]))
- {
+ {
std::swap(m_a_entries[i], m_a_entries[parent_i]);
i = parent_i;
parent_i = parent(i);
- }
+ }
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return;
}
while (i < m_size)
{
- const size_type left_child_i = left_child(i);
- const size_type right_child_i = right_child(i);
- _GLIBCXX_DEBUG_ASSERT(right_child_i > left_child_i);
- const bool smaller_than_left_child = left_child_i < m_size &&
- entry_cmp::operator()(m_a_entries[i], m_a_entries[left_child_i]);
-
- const bool smaller_than_right_child = right_child_i < m_size &&
- entry_cmp::operator()(m_a_entries[i], m_a_entries[right_child_i]);
-
- const bool swap_with_r_child = smaller_than_right_child && (!smaller_than_left_child || entry_cmp::operator()(m_a_entries[left_child_i], m_a_entries[right_child_i]));
-
- const bool swap_with_l_child = !swap_with_r_child && smaller_than_left_child;
-
- if (swap_with_l_child)
- {
- std::swap(m_a_entries[i], m_a_entries[left_child_i]);
- i = left_child_i;
- }
- else if (swap_with_r_child)
- {
- std::swap(m_a_entries[i], m_a_entries[right_child_i]);
- i = right_child_i;
- }
+ const size_type lchild_i = left_child(i);
+ const size_type rchild_i = right_child(i);
+ _GLIBCXX_DEBUG_ASSERT(rchild_i > lchild_i);
+
+ const bool smaller_than_lchild = lchild_i < m_size &&
+ entry_cmp::operator()(m_a_entries[i], m_a_entries[lchild_i]);
+
+ const bool smaller_than_rchild = rchild_i < m_size &&
+ entry_cmp::operator()(m_a_entries[i], m_a_entries[rchild_i]);
+
+ const bool swap_with_rchild = smaller_than_rchild && (!smaller_than_lchild || entry_cmp::operator()(m_a_entries[lchild_i], m_a_entries[rchild_i]));
+
+ const bool swap_with_lchild = !swap_with_rchild && smaller_than_lchild;
+
+ if (swap_with_lchild)
+ {
+ std::swap(m_a_entries[i], m_a_entries[lchild_i]);
+ i = lchild_i;
+ }
+ else if (swap_with_rchild)
+ {
+ std::swap(m_a_entries[i], m_a_entries[rchild_i]);
+ i = rchild_i;
+ }
else
i = m_size;
}
@@ -169,9 +162,7 @@ PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
swap_value_imp(entry_pointer p_e, value_type new_val, true_type)
-{
- * p_e = new_val;
-}
+{ *p_e = new_val; }
PB_DS_CLASS_T_DEC
inline void
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
index db0a64ea89..daaf2e4a7f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
+ * @file binary_heap_/iterators_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -42,31 +42,23 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
begin()
-{
- return (iterator(m_a_entries));
-}
+{ return iterator(m_a_entries); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
begin() const
-{
- return (const_iterator(m_a_entries));
-}
+{ return const_iterator(m_a_entries); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
end()
-{
- return (iterator(m_a_entries + m_size));
-}
+{ return iterator(m_a_entries + m_size); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
end() const
-{
- return (const_iterator(m_a_entries + m_size));
-}
+{ return const_iterator(m_a_entries + m_size); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
new file mode 100644
index 0000000000..f88dd4ae4e
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
@@ -0,0 +1,144 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file binary_heap_/point_const_iterator.hpp
+ * Contains an iterator class returned by the table's const find and insert
+ * methods.
+ */
+
+#ifndef PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP
+#define PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP
+
+#include <ext/pb_ds/tag_and_trait.hpp>
+#include <debug/debug.h>
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+ /// Const point-type iterator.
+ template<typename Value_Type, typename Entry, bool Simple,
+ typename _Alloc>
+ class binary_heap_point_const_iterator_
+ {
+ protected:
+ typedef typename _Alloc::template rebind<Entry>::other::pointer entry_pointer;
+
+ public:
+ /// Category.
+ typedef trivial_iterator_tag iterator_category;
+
+ /// Difference type.
+ typedef trivial_iterator_difference_type difference_type;
+
+ /// Iterator's value type.
+ typedef Value_Type value_type;
+
+ /// Iterator's pointer type.
+ typedef typename _Alloc::template rebind<value_type>::other::pointer
+ pointer;
+
+ /// Iterator's const pointer type.
+ typedef
+ typename _Alloc::template rebind<value_type>::other::const_pointer
+ const_pointer;
+
+ /// Iterator's reference type.
+ typedef
+ typename _Alloc::template rebind<value_type>::other::reference
+ reference;
+
+ /// Iterator's const reference type.
+ typedef
+ typename _Alloc::template rebind<value_type>::other::const_reference
+ const_reference;
+
+ inline
+ binary_heap_point_const_iterator_(entry_pointer p_e) : m_p_e(p_e)
+ { }
+
+ /// Default constructor.
+ inline
+ binary_heap_point_const_iterator_() : m_p_e(0) { }
+
+ /// Copy constructor.
+ inline
+ binary_heap_point_const_iterator_(const binary_heap_point_const_iterator_& other)
+ : m_p_e(other.m_p_e)
+ { }
+
+ /// Access.
+ inline const_pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_e != 0);
+ return to_ptr(integral_constant<int, Simple>());
+ }
+
+ /// Access.
+ inline const_reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_e != 0);
+ return *to_ptr(integral_constant<int, Simple>());
+ }
+
+ /// Compares content to a different iterator object.
+ inline bool
+ operator==(const binary_heap_point_const_iterator_& other) const
+ { return m_p_e == other.m_p_e; }
+
+ /// Compares content (negatively) to a different iterator object.
+ inline bool
+ operator!=(const binary_heap_point_const_iterator_& other) const
+ { return m_p_e != other.m_p_e; }
+
+ private:
+ inline const_pointer
+ to_ptr(true_type) const
+ { return m_p_e; }
+
+ inline const_pointer
+ to_ptr(false_type) const
+ { return *m_p_e; }
+
+ public:
+ entry_pointer m_p_e;
+ };
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
index 11a7b89158..f3782221b4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
+ * @file binary_heap_/policy_access_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
index 588fb3d1d8..ab9b0ecc0b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file resize_policy.hpp
+ * @file binary_heap_/resize_policy.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -47,40 +47,49 @@ namespace __gnu_pbds
{
namespace detail
{
-
-#define PB_DS_CLASS_T_DEC template<typename Size_Type>
-
-#define PB_DS_CLASS_C_DEC resize_policy<Size_Type>
-
- template<typename Size_Type>
+ /// Resize policy for binary heap.
+ template<typename _Tp>
class resize_policy
{
- public:
- typedef Size_Type size_type;
-
+ private:
enum
{
- min_size = 16
+ ratio = 8,
+ factor = 2
};
+ /// Next shrink size.
+ _Tp m_shrink_size;
+
+ /// Next grow size.
+ _Tp m_grow_size;
+
public:
- inline
- resize_policy();
+ typedef _Tp size_type;
+
+ static const _Tp min_size = 16;
+
+ resize_policy() : m_shrink_size(0), m_grow_size(min_size)
+ { PB_DS_ASSERT_VALID((*this)) }
+
+ resize_policy(const resize_policy& other)
+ : m_shrink_size(other.m_shrink_size), m_grow_size(other.m_grow_size)
+ { PB_DS_ASSERT_VALID((*this)) }
inline void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(resize_policy<_Tp>&);
inline bool
- resize_needed_for_grow(size_type size) const;
+ resize_needed_for_grow(size_type) const;
inline bool
- resize_needed_for_shrink(size_type size) const;
+ resize_needed_for_shrink(size_type) const;
inline bool
- grow_needed(size_type size) const;
+ grow_needed(size_type) const;
inline bool
- shrink_needed(size_type size) const;
+ shrink_needed(size_type) const;
inline size_type
get_new_size_for_grow() const;
@@ -88,8 +97,8 @@ namespace __gnu_pbds
inline size_type
get_new_size_for_shrink() const;
- size_type
- get_new_size_for_arbitrary(size_type size) const;
+ inline size_type
+ get_new_size_for_arbitrary(size_type) const;
inline void
notify_grow_resize();
@@ -98,83 +107,67 @@ namespace __gnu_pbds
notify_shrink_resize();
void
- notify_arbitrary(size_type actual_size);
+ notify_arbitrary(size_type);
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char*, int) const;
+#endif
#ifdef PB_DS_BINARY_HEAP_TRACE_
void
trace() const;
-#endif
-
- private:
- enum
- {
- ratio = 8,
- factor = 2
- };
-
- private:
- size_type m_next_shrink_size;
- size_type m_next_grow_size;
+#endif
};
- PB_DS_CLASS_T_DEC
- inline
- PB_DS_CLASS_C_DEC::
- resize_policy() :
- m_next_shrink_size(0),
- m_next_grow_size(min_size)
- { _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+ template<typename _Tp>
+ const _Tp resize_policy<_Tp>::min_size;
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
inline void
- PB_DS_CLASS_C_DEC::
- swap(PB_DS_CLASS_C_DEC& other)
+ resize_policy<_Tp>::
+ swap(resize_policy<_Tp>& other)
{
- std::swap(m_next_shrink_size, other.m_next_shrink_size);
- std::swap(m_next_grow_size, other.m_next_grow_size);
+ std::swap(m_shrink_size, other.m_shrink_size);
+ std::swap(m_grow_size, other.m_grow_size);
}
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
inline bool
- PB_DS_CLASS_C_DEC::
+ resize_policy<_Tp>::
resize_needed_for_grow(size_type size) const
{
- _GLIBCXX_DEBUG_ASSERT(size <= m_next_grow_size);
- return size == m_next_grow_size;
+ _GLIBCXX_DEBUG_ASSERT(size <= m_grow_size);
+ return size == m_grow_size;
}
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
inline bool
- PB_DS_CLASS_C_DEC::
+ resize_policy<_Tp>::
resize_needed_for_shrink(size_type size) const
{
- _GLIBCXX_DEBUG_ASSERT(size <= m_next_grow_size);
- return size == m_next_shrink_size;
+ _GLIBCXX_DEBUG_ASSERT(size <= m_grow_size);
+ return size == m_shrink_size;
}
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
+ template<typename _Tp>
+ inline typename resize_policy<_Tp>::size_type
+ resize_policy<_Tp>::
get_new_size_for_grow() const
- { return m_next_grow_size* factor; }
+ { return m_grow_size * factor; }
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
+ template<typename _Tp>
+ inline typename resize_policy<_Tp>::size_type
+ resize_policy<_Tp>::
get_new_size_for_shrink() const
{
- const size_type half_size = m_next_grow_size / factor;
- return std::max(static_cast<size_type>(min_size), half_size);
+ const size_type half_size = m_grow_size / factor;
+ return std::max(min_size, half_size);
}
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
+ template<typename _Tp>
+ inline typename resize_policy<_Tp>::size_type
+ resize_policy<_Tp>::
get_new_size_for_arbitrary(size_type size) const
{
size_type ret = min_size;
@@ -183,71 +176,65 @@ namespace __gnu_pbds
return ret;
}
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
inline void
- PB_DS_CLASS_C_DEC::
+ resize_policy<_Tp>::
notify_grow_resize()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ASSERT(m_next_grow_size >= min_size);
- m_next_grow_size *= factor;
- m_next_shrink_size = m_next_grow_size / ratio;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(m_grow_size >= min_size);
+ m_grow_size *= factor;
+ m_shrink_size = m_grow_size / ratio;
+ PB_DS_ASSERT_VALID((*this))
}
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
inline void
- PB_DS_CLASS_C_DEC::
+ resize_policy<_Tp>::
notify_shrink_resize()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- m_next_shrink_size /= factor;
- if (m_next_shrink_size == 1)
- m_next_shrink_size = 0;
-
- m_next_grow_size =
- std::max(m_next_grow_size / factor, static_cast<size_type>(min_size));
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ m_shrink_size /= factor;
+ if (m_shrink_size == 1)
+ m_shrink_size = 0;
+ m_grow_size = std::max(m_grow_size / factor, min_size);
+ PB_DS_ASSERT_VALID((*this))
}
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
inline void
- PB_DS_CLASS_C_DEC::
+ resize_policy<_Tp>::
notify_arbitrary(size_type actual_size)
{
- m_next_grow_size = actual_size;
- m_next_shrink_size = m_next_grow_size / ratio;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ m_grow_size = actual_size;
+ m_shrink_size = m_grow_size / ratio;
+ PB_DS_ASSERT_VALID((*this))
}
#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
void
- PB_DS_CLASS_C_DEC::
- assert_valid() const
+ resize_policy<_Tp>::
+ assert_valid(const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ASSERT(m_next_shrink_size == 0 ||
- m_next_shrink_size* ratio == m_next_grow_size);
-
- _GLIBCXX_DEBUG_ASSERT(m_next_grow_size >= min_size);
+ PB_DS_DEBUG_VERIFY(m_shrink_size == 0
+ || m_shrink_size * ratio == m_grow_size);
+ PB_DS_DEBUG_VERIFY(m_grow_size >= min_size);
}
-#endif
+#endif
#ifdef PB_DS_BINARY_HEAP_TRACE_
- PB_DS_CLASS_T_DEC
+ template<typename _Tp>
void
- PB_DS_CLASS_C_DEC::
+ resize_policy<_Tp>::
trace() const
{
- std::cerr << "shrink = " << m_next_shrink_size <<
- " grow = " << m_next_grow_size << std::endl;
+ std::cerr << "shrink = " << m_shrink_size
+ << " grow = " << m_grow_size << std::endl;
}
-#endif
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
+#endif
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
index a2974429f5..0d09b53573 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file binary_heap_/split_join_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
@@ -45,43 +45,33 @@ void
PB_DS_CLASS_C_DEC::
split(Pred pred, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- typedef
- typename entry_pred<
- value_type,
- Pred,
- simple_value,
- Allocator>::type
+ PB_DS_ASSERT_VALID((*this))
+
+ typedef
+ typename entry_pred<value_type, Pred, _Alloc, simple_value>::type
pred_t;
const size_type left = partition(pred_t(pred));
-
_GLIBCXX_DEBUG_ASSERT(m_size >= left);
const size_type ersd = m_size - left;
-
_GLIBCXX_DEBUG_ASSERT(m_size >= ersd);
- const size_type actual_size =
- resize_policy::get_new_size_for_arbitrary(left);
-
- const size_type other_actual_size =
- other.get_new_size_for_arbitrary(ersd);
+ const size_type new_size = resize_policy::get_new_size_for_arbitrary(left);
+ const size_type other_actual_size = other.get_new_size_for_arbitrary(ersd);
entry_pointer a_entries = 0;
entry_pointer a_other_entries = 0;
__try
{
- a_entries = s_entry_allocator.allocate(actual_size);
-
+ a_entries = s_entry_allocator.allocate(new_size);
a_other_entries = s_entry_allocator.allocate(other_actual_size);
}
__catch(...)
{
if (a_entries != 0)
- s_entry_allocator.deallocate(a_entries, actual_size);
+ s_entry_allocator.deallocate(a_entries, new_size);
if (a_other_entries != 0)
s_entry_allocator.deallocate(a_other_entries, other_actual_size);
@@ -92,14 +82,14 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
for (size_type i = 0; i < other.m_size; ++i)
erase_at(other.m_a_entries, i, s_no_throw_copies_ind);
- _GLIBCXX_DEBUG_ASSERT(actual_size >= left);
+ _GLIBCXX_DEBUG_ASSERT(new_size >= left);
std::copy(m_a_entries, m_a_entries + left, a_entries);
std::copy(m_a_entries + left, m_a_entries + m_size, a_other_entries);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
s_entry_allocator.deallocate(other.m_a_entries, other.m_actual_size);
- m_actual_size = actual_size;
+ m_actual_size = new_size;
other.m_actual_size = other_actual_size;
m_size = left;
@@ -108,39 +98,39 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
m_a_entries = a_entries;
other.m_a_entries = a_other_entries;
- std::make_heap(m_a_entries, m_a_entries + m_size, static_cast<entry_cmp& >(*this));
- std::make_heap(other.m_a_entries, other.m_a_entries + other.m_size, static_cast<entry_cmp& >(other));
+ make_heap();
+ other.make_heap();
resize_policy::notify_arbitrary(m_actual_size);
other.notify_arbitrary(other.m_actual_size);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
const size_type len = m_size + other.m_size;
- const size_type actual_size = resize_policy::get_new_size_for_arbitrary(len);
+ const size_type new_size = resize_policy::get_new_size_for_arbitrary(len);
entry_pointer a_entries = 0;
entry_pointer a_other_entries = 0;
__try
{
- a_entries = s_entry_allocator.allocate(actual_size);
+ a_entries = s_entry_allocator.allocate(new_size);
a_other_entries = s_entry_allocator.allocate(resize_policy::min_size);
}
__catch(...)
{
if (a_entries != 0)
- s_entry_allocator.deallocate(a_entries, actual_size);
+ s_entry_allocator.deallocate(a_entries, new_size);
if (a_other_entries != 0)
s_entry_allocator.deallocate(a_other_entries, resize_policy::min_size);
@@ -149,25 +139,23 @@ join(PB_DS_CLASS_C_DEC& other)
}
std::copy(m_a_entries, m_a_entries + m_size, a_entries);
- std::copy(other.m_a_entries, other.m_a_entries + other.m_size, a_entries + m_size);
+ std::copy(other.m_a_entries, other.m_a_entries + other.m_size,
+ a_entries + m_size);
s_entry_allocator.deallocate(m_a_entries, m_actual_size);
m_a_entries = a_entries;
m_size = len;
- m_actual_size = actual_size;
-
- resize_policy::notify_arbitrary(actual_size);
-
- std::make_heap(m_a_entries, m_a_entries + m_size, static_cast<entry_cmp& >(*this));
+ m_actual_size = new_size;
+ resize_policy::notify_arbitrary(new_size);
+ make_heap();
s_entry_allocator.deallocate(other.m_a_entries, other.m_actual_size);
other.m_a_entries = a_other_entries;
other.m_size = 0;
other.m_actual_size = resize_policy::min_size;
-
other.notify_arbitrary(resize_policy::min_size);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ other.make_heap();
+
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
index 36bd66f755..2704ec65c1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file binary_heap_/trace_fn_imps.hpp
* Contains an implementation class for a binary_heap.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
index 3b4d6e91e8..5f22f95823 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -53,64 +53,60 @@ namespace __gnu_pbds
{
namespace detail
{
-
#define PB_DS_CLASS_T_DEC \
- template<typename Value_Type, class Cmp_Fn, class Allocator>
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- binomial_heap_<Value_Type, Cmp_Fn, Allocator>
-
-#define PB_DS_BASE_C_DEC \
- binomial_heap_base_<Value_Type, Cmp_Fn, Allocator>
+ binomial_heap<Value_Type, Cmp_Fn, _Alloc>
/**
- * class description = "8y|\|0|\/|i41 h34p 74813">
- **/
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- class binomial_heap_ : public PB_DS_BASE_C_DEC
+ * Binomial heap.
+ *
+ * @ingroup heap-detail
+ */
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
+ class binomial_heap
+ : public binomial_heap_base<Value_Type, Cmp_Fn, _Alloc>
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
- typedef typename base_type::node_pointer node_pointer;
- typedef typename base_type::const_node_pointer const_node_pointer;
+ typedef binomial_heap_base<Value_Type, Cmp_Fn, _Alloc> base_type;
+ typedef typename base_type::node_pointer node_pointer;
+ typedef typename base_type::node_const_pointer node_const_pointer;
public:
- typedef Value_Type value_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
- typedef typename base_type::pointer pointer;
- typedef typename base_type::const_pointer const_pointer;
- typedef typename base_type::reference reference;
- typedef typename base_type::const_reference const_reference;
- typedef typename base_type::const_point_iterator const_point_iterator;
- typedef typename base_type::point_iterator point_iterator;
- typedef typename base_type::const_iterator const_iterator;
- typedef typename base_type::iterator iterator;
- typedef typename base_type::cmp_fn cmp_fn;
- typedef typename base_type::allocator_type allocator_type;
+ typedef Value_Type value_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef typename base_type::pointer pointer;
+ typedef typename base_type::const_pointer const_pointer;
+ typedef typename base_type::reference reference;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::point_const_iterator point_const_iterator;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::cmp_fn cmp_fn;
+ typedef typename base_type::allocator_type allocator_type;
- binomial_heap_();
+ binomial_heap();
- binomial_heap_(const Cmp_Fn& r_cmp_fn);
+ binomial_heap(const Cmp_Fn&);
- binomial_heap_(const PB_DS_CLASS_C_DEC& other);
+ binomial_heap(const binomial_heap&);
- ~binomial_heap_();
+ ~binomial_heap();
protected:
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char*, int) const;
+#endif
};
#include <ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp>
#undef PB_DS_CLASS_C_DEC
-
#undef PB_DS_CLASS_T_DEC
-
-#undef PB_DS_BASE_C_DEC
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
index ef0937e42e..ee8d89c9df 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,28 +34,27 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file detail/binomial_heap_/constructors_destructor_fn_imps.hpp
* Contains an implementation for binomial_heap_.
*/
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binomial_heap_()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+binomial_heap()
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binomial_heap_(const Cmp_Fn& r_cmp_fn) :
- PB_DS_BASE_C_DEC(r_cmp_fn)
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+binomial_heap(const Cmp_Fn& r_cmp_fn)
+: base_type(r_cmp_fn)
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binomial_heap_(const PB_DS_CLASS_C_DEC& other) :
- PB_DS_BASE_C_DEC(other)
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+binomial_heap(const PB_DS_CLASS_C_DEC& other)
+: base_type(other)
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~binomial_heap_() { }
-
+~binomial_heap() { }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
index 10bec6959b..12949aedb2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file detail/binomial_heap_/debug_fn_imps.hpp
* Contains an implementation for binomial_heap_.
*/
@@ -43,7 +43,7 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
-{ base_type::assert_valid(true); }
+assert_valid(const char* __file, int __line) const
+{ base_type::assert_valid(true, __file, __line); }
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
index 1d66d1b14b..9d260d0e17 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file binomial_heap_base_.hpp
+ * @file binomial_heap_base_/binomial_heap_base_.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -51,96 +51,65 @@
#include <ext/pb_ds/detail/cond_dealtor.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp>
-#include <ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp>
namespace __gnu_pbds
{
namespace detail
{
-
#define PB_DS_CLASS_T_DEC \
- template<typename Value_Type, class Cmp_Fn, class Allocator>
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- binomial_heap_base_<Value_Type, Cmp_Fn, Allocator>
+ binomial_heap_base<Value_Type, Cmp_Fn, _Alloc>
#ifdef _GLIBCXX_DEBUG
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_<Value_Type, Cmp_Fn, \
- typename Allocator::size_type, \
- Allocator, false>
-#else
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_<Value_Type, Cmp_Fn, \
- typename Allocator::size_type, Allocator>
-#endif
-
- /**
- * class description = "8y|\|0|\/|i41 h34p 74813">
- **/
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- class binomial_heap_base_ : public PB_DS_BASE_C_DEC
- {
+#define PB_DS_B_HEAP_BASE \
+ left_child_next_sibling_heap<Value_Type, Cmp_Fn, \
+ typename _Alloc::size_type, _Alloc, false>
+#else
+#define PB_DS_B_HEAP_BASE \
+ left_child_next_sibling_heap<Value_Type, Cmp_Fn, \
+ typename _Alloc::size_type, _Alloc>
+#endif
+ /// Base class for binomial heap.
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
+ class binomial_heap_base
+ : public PB_DS_B_HEAP_BASE
+ {
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef typename _Alloc::template rebind<Value_Type>::other __rebind_v;
+ typedef PB_DS_B_HEAP_BASE base_type;
protected:
- typedef typename base_type::node node;
-
- typedef typename base_type::node_pointer node_pointer;
-
- typedef typename base_type::const_node_pointer const_node_pointer;
+ typedef typename base_type::node node;
+ typedef typename base_type::node_pointer node_pointer;
+ typedef typename base_type::node_const_pointer node_const_pointer;
public:
-
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef Value_Type value_type;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::pointer
- pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_pointer
- const_pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::reference
- reference;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_reference
- const_reference;
-
- typedef
- typename PB_DS_BASE_C_DEC::const_point_iterator
- const_point_iterator;
-
- typedef typename PB_DS_BASE_C_DEC::point_iterator point_iterator;
-
- typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator;
-
- typedef typename PB_DS_BASE_C_DEC::iterator iterator;
-
- typedef Cmp_Fn cmp_fn;
-
- typedef Allocator allocator_type;
+ typedef Value_Type value_type;
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+
+ typedef typename __rebind_v::pointer pointer;
+ typedef typename __rebind_v::const_pointer const_pointer;
+ typedef typename __rebind_v::reference reference;
+ typedef typename __rebind_v::const_reference const_reference;
+
+ typedef typename base_type::point_const_iterator point_const_iterator;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::iterator iterator;
public:
inline point_iterator
- push(const_reference r_val);
+ push(const_reference);
void
- modify(point_iterator it, const_reference r_new_val);
+ modify(point_iterator, const_reference);
inline const_reference
top() const;
@@ -149,73 +118,81 @@ namespace __gnu_pbds
pop();
void
- erase(point_iterator it);
+ erase(point_iterator);
inline void
clear();
template<typename Pred>
size_type
- erase_if(Pred pred);
+ erase_if(Pred);
template<typename Pred>
void
- split(Pred pred, PB_DS_CLASS_C_DEC& other);
+ split(Pred, PB_DS_CLASS_C_DEC&);
void
- join(PB_DS_CLASS_C_DEC& other);
+ join(PB_DS_CLASS_C_DEC&);
protected:
- binomial_heap_base_();
+ binomial_heap_base();
- binomial_heap_base_(const Cmp_Fn& r_cmp_fn);
+ binomial_heap_base(const Cmp_Fn&);
- binomial_heap_base_(const PB_DS_CLASS_C_DEC& other);
+ binomial_heap_base(const PB_DS_CLASS_C_DEC&);
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
- ~binomial_heap_base_();
+ ~binomial_heap_base();
template<typename It>
void
- copy_from_range(It first_it, It last_it);
+ copy_from_range(It, It);
inline void
find_max();
#ifdef _GLIBCXX_DEBUG
void
- assert_valid(bool strictly_binomial) const;
+ assert_valid(bool, const char*, int) const;
void
- assert_max() const;
-#endif
+ assert_max(const char*, int) const;
+#endif
private:
inline node_pointer
- fix(node_pointer p_nd) const;
+ fix(node_pointer) const;
inline void
- insert_node(node_pointer p_nd);
+ insert_node(node_pointer);
inline void
- remove_parentless_node(node_pointer p_nd);
+ remove_parentless_node(node_pointer);
inline node_pointer
- join(node_pointer p_lhs, node_pointer p_rhs) const;
+ join(node_pointer, node_pointer) const;
#ifdef _GLIBCXX_DEBUG
void
- assert_node_consistent(const_node_pointer, bool, bool) const;
+ assert_node_consistent(node_const_pointer, bool, bool,
+ const char*, int) const;
#endif
protected:
- node_pointer m_p_max;
+ node_pointer m_p_max;
};
+#define PB_DS_ASSERT_VALID_COND(X, _StrictlyBinomial) \
+ _GLIBCXX_DEBUG_ONLY(X.assert_valid(_StrictlyBinomial,__FILE__, __LINE__);)
+
+#define PB_DS_ASSERT_BASE_NODE_CONSISTENT(_Node, _Bool) \
+ _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(_Node, _Bool, \
+ __FILE__, __LINE__);)
+
#include <ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp>
#include <ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp>
@@ -223,12 +200,12 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp>
#include <ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp>
+#undef PB_DS_ASSERT_BASE_NODE_CONSISTENT
+#undef PB_DS_ASSERT_VALID_COND
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_BASE_C_DEC
-
-
+#undef PB_DS_B_HEAP_BASE
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
index 08cc43738b..ef9d0e3b30 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file binomial_heap_base_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -46,52 +46,40 @@ copy_from_range(It first_it, It last_it)
{
while (first_it != last_it)
push(*(first_it++));
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),false)
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binomial_heap_base_() :
- m_p_max(0)
+binomial_heap_base() : m_p_max(0)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),false)
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binomial_heap_base_(const Cmp_Fn& r_cmp_fn) :
- PB_DS_BASE_C_DEC(r_cmp_fn),
- m_p_max(0)
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
- }
+binomial_heap_base(const Cmp_Fn& r_cmp_fn)
+: base_type(r_cmp_fn), m_p_max(0)
+{ PB_DS_ASSERT_VALID_COND((*this),false) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-binomial_heap_base_(const PB_DS_CLASS_C_DEC& other) :
- PB_DS_BASE_C_DEC(other),
- m_p_max(0)
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
- }
+binomial_heap_base(const PB_DS_CLASS_C_DEC& other)
+: base_type(other), m_p_max(0)
+{ PB_DS_ASSERT_VALID_COND((*this),false) }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
-
- base_type::swap(other);
-
+ PB_DS_ASSERT_VALID_COND((*this),false)
+ base_type::swap(other);
std::swap(m_p_max, other.m_p_max);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),false)
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~binomial_heap_base_()
+~binomial_heap_base()
{ }
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
index 6cf01e00c5..137ec4b0c6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file binomial_heap_base_/debug_fn_imps.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -44,54 +44,56 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid(bool strictly_binomial) const
+assert_valid(bool strictly_binomial, const char* __file, int __line) const
{
- base_type::assert_valid();
- assert_node_consistent(base_type::m_p_root, strictly_binomial, true);
- assert_max();
+ base_type::assert_valid(__file, __line);
+ assert_node_consistent(base_type::m_p_root, strictly_binomial, true,
+ __file, __line);
+ assert_max(__file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_max() const
+assert_max(const char* __file, int __line) const
{
if (m_p_max == 0)
return;
- _GLIBCXX_DEBUG_ASSERT(base_type::parent(m_p_max) == 0);
+ PB_DS_DEBUG_VERIFY(base_type::parent(m_p_max) == 0);
for (const_iterator it = base_type::begin(); it != base_type::end(); ++it)
- _GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(m_p_max->m_value,
- it.m_p_nd->m_value));
+ PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(m_p_max->m_value,
+ it.m_p_nd->m_value));
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_node_consistent(const_node_pointer p_nd, bool strictly_binomial,
- bool increasing) const
+assert_node_consistent(node_const_pointer p_nd, bool strictly_binomial,
+ bool increasing, const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ASSERT(increasing || strictly_binomial);
- base_type::assert_node_consistent(p_nd, false);
+ PB_DS_DEBUG_VERIFY(increasing || strictly_binomial);
+ base_type::assert_node_consistent(p_nd, false, __file, __line);
if (p_nd == 0)
return;
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == base_type::degree(p_nd));
- _GLIBCXX_DEBUG_ASSERT(base_type::size_under_node(p_nd) ==
+ PB_DS_DEBUG_VERIFY(p_nd->m_metadata == base_type::degree(p_nd));
+ PB_DS_DEBUG_VERIFY(base_type::size_under_node(p_nd) ==
static_cast<size_type>(1 << p_nd->m_metadata));
- assert_node_consistent(p_nd->m_p_next_sibling, strictly_binomial, increasing);
- assert_node_consistent(p_nd->m_p_l_child, true, false);
+ assert_node_consistent(p_nd->m_p_next_sibling, strictly_binomial, increasing,
+ __file, __line);
+ assert_node_consistent(p_nd->m_p_l_child, true, false, __file, __line);
if (p_nd->m_p_next_sibling != 0)
{
if (increasing)
{
if (strictly_binomial)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata
+ PB_DS_DEBUG_VERIFY(p_nd->m_metadata
< p_nd->m_p_next_sibling->m_metadata);
else
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata
+ PB_DS_DEBUG_VERIFY(p_nd->m_metadata
<= p_nd->m_p_next_sibling->m_metadata);
}
else
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata
+ PB_DS_DEBUG_VERIFY(p_nd->m_metadata
> p_nd->m_p_next_sibling->m_metadata);
}
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
index df0ea6bdcc..2cdc456dd7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file binomial_heap_base_/erase_fn_imps.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -43,24 +43,19 @@ void
PB_DS_CLASS_C_DEC::
pop()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
if (m_p_max == 0)
find_max();
_GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
-
node_pointer p_nd = m_p_max;
-
remove_parentless_node(m_p_max);
-
base_type::actual_erase_node(p_nd);
-
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),true)
+}
PB_DS_CLASS_T_DEC
void
@@ -71,8 +66,7 @@ remove_parentless_node(node_pointer p_nd)
_GLIBCXX_DEBUG_ASSERT(base_type::parent(p_nd) == 0);
node_pointer p_cur_root = p_nd == base_type::m_p_root?
- p_nd->m_p_next_sibling :
- base_type::m_p_root;
+ p_nd->m_p_next_sibling : base_type::m_p_root;
if (p_cur_root != 0)
p_cur_root->m_p_prev_or_parent = 0;
@@ -84,17 +78,14 @@ remove_parentless_node(node_pointer p_nd)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
node_pointer p_child = p_nd->m_p_l_child;
-
if (p_child != 0)
{
p_child->m_p_prev_or_parent = 0;
-
while (p_child->m_p_next_sibling != 0)
p_child = p_child->m_p_next_sibling;
}
m_p_max = 0;
-
base_type::m_p_root = join(p_cur_root, p_child);
}
@@ -104,7 +95,6 @@ PB_DS_CLASS_C_DEC::
clear()
{
base_type::clear();
-
m_p_max = 0;
}
@@ -113,19 +103,15 @@ void
PB_DS_CLASS_C_DEC::
erase(point_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
base_type::bubble_to_top(it.m_p_nd);
-
remove_parentless_node(it.m_p_nd);
-
base_type::actual_erase_node(it.m_p_nd);
-
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),true)
+}
PB_DS_CLASS_T_DEC
template<typename Pred>
@@ -133,60 +119,43 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
-
- if (base_type::empty())
- {
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
+ PB_DS_ASSERT_VALID_COND((*this),true)
- return 0;
- }
+ if (base_type::empty())
+ {
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ return 0;
+ }
base_type::to_linked_list();
-
node_pointer p_out = base_type::prune(pred);
-
size_type ersd = 0;
-
while (p_out != 0)
{
++ersd;
-
node_pointer p_next = p_out->m_p_next_sibling;
-
base_type::actual_erase_node(p_out);
-
p_out = p_next;
}
node_pointer p_cur = base_type::m_p_root;
-
base_type::m_p_root = 0;
-
while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
-
p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0;
-
p_cur->m_metadata = 0;
-
p_cur->m_p_next_sibling = base_type::m_p_root;
if (base_type::m_p_root != 0)
base_type::m_p_root->m_p_prev_or_parent = p_cur;
base_type::m_p_root = p_cur;
-
base_type::m_p_root = fix(base_type::m_p_root);
-
p_cur = p_next;
}
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
-
- return ersd;
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ return ersd;
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
index 48409d831e..8059917f9d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file binomial_heap_base_/find_fn_imps.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -43,8 +43,8 @@ inline typename PB_DS_CLASS_C_DEC::const_reference
PB_DS_CLASS_C_DEC::
top() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(false);)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
+ PB_DS_ASSERT_VALID_COND((*this),false)
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
if (m_p_max == 0)
const_cast<PB_DS_CLASS_C_DEC* >(this)->find_max();
@@ -59,14 +59,11 @@ PB_DS_CLASS_C_DEC::
find_max()
{
node_pointer p_cur = base_type::m_p_root;
-
m_p_max = p_cur;
-
while (p_cur != 0)
{
if (Cmp_Fn::operator()(m_p_max->m_value, p_cur->m_value))
m_p_max = p_cur;
-
p_cur = p_cur->m_p_next_sibling;
}
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
index 1ccaddf435..30f49db063 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file binomial_heap_base_/insert_fn_imps.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -43,17 +43,12 @@ inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
push(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
-
- node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
-
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
insert_node(p_nd);
-
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
-
- return point_iterator(p_nd);
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ return point_iterator(p_nd);
}
PB_DS_CLASS_T_DEC
@@ -63,60 +58,42 @@ insert_node(node_pointer p_nd)
{
if (base_type::m_p_root == 0)
{
- p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent =
- p_nd->m_p_l_child = 0;
-
+ p_nd->m_p_next_sibling = 0;
+ p_nd->m_p_prev_or_parent = 0;
+ p_nd->m_p_l_child = 0;
p_nd->m_metadata = 0;
-
base_type::m_p_root = p_nd;
-
return;
}
if (base_type::m_p_root->m_metadata > 0)
{
p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = 0;
-
p_nd->m_p_next_sibling = base_type::m_p_root;
-
base_type::m_p_root->m_p_prev_or_parent = p_nd;
-
base_type::m_p_root = p_nd;
-
p_nd->m_metadata = 0;
-
return;
}
if (Cmp_Fn::operator()(base_type::m_p_root->m_value, p_nd->m_value))
{
p_nd->m_p_next_sibling = base_type::m_p_root->m_p_next_sibling;
-
p_nd->m_p_prev_or_parent = 0;
-
p_nd->m_metadata = 1;
-
p_nd->m_p_l_child = base_type::m_p_root;
-
base_type::m_p_root->m_p_prev_or_parent = p_nd;
-
base_type::m_p_root->m_p_next_sibling = 0;
-
base_type::m_p_root = p_nd;
}
else
{
p_nd->m_p_next_sibling = 0;
-
p_nd->m_p_l_child = 0;
-
p_nd->m_p_prev_or_parent = base_type::m_p_root;
-
p_nd->m_metadata = 0;
-
_GLIBCXX_DEBUG_ASSERT(base_type::m_p_root->m_p_l_child == 0);
base_type::m_p_root->m_p_l_child = p_nd;
-
base_type::m_p_root->m_metadata = 1;
}
@@ -128,36 +105,31 @@ inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
fix(node_pointer p_nd) const
{
- while (p_nd->m_p_next_sibling != 0&&
+ while (p_nd->m_p_next_sibling != 0 &&
p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata)
{
node_pointer p_next = p_nd->m_p_next_sibling;
-
if (Cmp_Fn::operator()(p_nd->m_value, p_next->m_value))
- {
- p_next->m_p_prev_or_parent =
- p_nd->m_p_prev_or_parent;
+ {
+ p_next->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
if (p_nd->m_p_prev_or_parent != 0)
p_nd->m_p_prev_or_parent->m_p_next_sibling = p_next;
base_type::make_child_of(p_nd, p_next);
-
++p_next->m_metadata;
-
p_nd = p_next;
- }
+ }
else
- {
+ {
p_nd->m_p_next_sibling = p_next->m_p_next_sibling;
if (p_nd->m_p_next_sibling != 0)
p_next->m_p_next_sibling = 0;
base_type::make_child_of(p_next, p_nd);
-
++p_nd->m_metadata;
- }
+ }
}
if (p_nd->m_p_next_sibling != 0)
@@ -171,46 +143,36 @@ void
PB_DS_CLASS_C_DEC::
modify(point_iterator it, const_reference r_new_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- node_pointer p_nd = it.m_p_nd;
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ node_pointer p_nd = it.m_p_nd;
_GLIBCXX_DEBUG_ASSERT(p_nd != 0);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false);)
-
- const bool bubble_up = Cmp_Fn::operator()(p_nd->m_value, r_new_val);
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd, false)
+ const bool bubble_up = Cmp_Fn::operator()(p_nd->m_value, r_new_val);
p_nd->m_value = r_new_val;
if (bubble_up)
{
node_pointer p_parent = base_type::parent(p_nd);
-
- while (p_parent != 0&&
+ while (p_parent != 0 &&
Cmp_Fn::operator()(p_parent->m_value, p_nd->m_value))
- {
+ {
base_type::swap_with_parent(p_nd, p_parent);
-
p_parent = base_type::parent(p_nd);
- }
+ }
if (p_nd->m_p_prev_or_parent == 0)
base_type::m_p_root = p_nd;
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
-
- return;
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ return;
}
base_type::bubble_to_top(p_nd);
-
remove_parentless_node(p_nd);
-
insert_node(p_nd);
-
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- }
-
+ PB_DS_ASSERT_VALID_COND((*this),true)
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
index 9f7e36e2b8..44bc4ed7c4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file binomial_heap_base_/split_join_fn_imps.hpp
* Contains an implementation class for a base of binomial heaps.
*/
@@ -44,97 +44,76 @@ void
PB_DS_CLASS_C_DEC::
split(Pred pred, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
-
- other.clear();
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ PB_DS_ASSERT_VALID_COND(other,true)
+ other.clear();
if (base_type::empty())
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
-
- return;
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ PB_DS_ASSERT_VALID_COND(other,true)
+ return;
}
base_type::to_linked_list();
-
node_pointer p_out = base_type::prune(pred);
-
while (p_out != 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0);
--base_type::m_size;
-
++other.m_size;
node_pointer p_next = p_out->m_p_next_sibling;
-
p_out->m_p_l_child = p_out->m_p_prev_or_parent = 0;
-
p_out->m_metadata = 0;
p_out->m_p_next_sibling = other.m_p_root;
-
if (other.m_p_root != 0)
other.m_p_root->m_p_prev_or_parent = p_out;
other.m_p_root = p_out;
-
other.m_p_root = other.fix(other.m_p_root);
-
p_out = p_next;
}
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
-
- node_pointer p_cur = base_type::m_p_root;
-
+ PB_DS_ASSERT_VALID_COND(other,true)
+ node_pointer p_cur = base_type::m_p_root;
base_type::m_p_root = 0;
while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
-
p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0;
-
p_cur->m_metadata = 0;
-
p_cur->m_p_next_sibling = base_type::m_p_root;
if (base_type::m_p_root != 0)
base_type::m_p_root->m_p_prev_or_parent = p_cur;
base_type::m_p_root = p_cur;
-
base_type::m_p_root = fix(base_type::m_p_root);
-
p_cur = p_next;
}
m_p_max = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ PB_DS_ASSERT_VALID_COND(other,true)
+}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
-
- node_pointer p_other = other.m_p_root;
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ PB_DS_ASSERT_VALID_COND(other,true)
+ node_pointer p_other = other.m_p_root;
if (p_other != 0)
do
{
node_pointer p_next = p_other->m_p_next_sibling;
-
std::swap(p_other->m_p_next_sibling, p_other->m_p_prev_or_parent);
-
p_other = p_next;
}
while (p_other != 0);
@@ -147,9 +126,9 @@ join(PB_DS_CLASS_C_DEC& other)
other.m_size = 0;
other.m_p_max = 0;
- _GLIBCXX_DEBUG_ONLY(assert_valid(true);)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
- }
+ PB_DS_ASSERT_VALID_COND((*this),true)
+ PB_DS_ASSERT_VALID_COND(other,true)
+}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_pointer
@@ -157,68 +136,55 @@ PB_DS_CLASS_C_DEC::
join(node_pointer p_lhs, node_pointer p_rhs) const
{
node_pointer p_ret = 0;
-
node_pointer p_cur = 0;
while (p_lhs != 0 || p_rhs != 0)
{
if (p_rhs == 0)
- {
+ {
if (p_cur == 0)
p_ret = p_cur = p_lhs;
else
- {
+ {
p_cur->m_p_next_sibling = p_lhs;
-
p_lhs->m_p_prev_or_parent = p_cur;
- }
-
+ }
p_cur = p_lhs = 0;
- }
+ }
else if (p_lhs == 0 || p_rhs->m_metadata < p_lhs->m_metadata)
- {
+ {
if (p_cur == 0)
- {
+ {
p_ret = p_cur = p_rhs;
-
p_rhs = p_rhs->m_p_prev_or_parent;
- }
+ }
else
- {
+ {
p_cur->m_p_next_sibling = p_rhs;
-
p_rhs = p_rhs->m_p_prev_or_parent;
-
p_cur->m_p_next_sibling->m_p_prev_or_parent = p_cur;
-
p_cur = p_cur->m_p_next_sibling;
- }
- }
+ }
+ }
else if (p_lhs->m_metadata < p_rhs->m_metadata)
- {
+ {
if (p_cur == 0)
p_ret = p_cur = p_lhs;
else
- {
+ {
p_cur->m_p_next_sibling = p_lhs;
-
p_lhs->m_p_prev_or_parent = p_cur;
-
p_cur = p_cur->m_p_next_sibling;
- }
-
+ }
p_lhs = p_cur->m_p_next_sibling;
- }
+ }
else
- {
+ {
node_pointer p_next_rhs = p_rhs->m_p_prev_or_parent;
-
p_rhs->m_p_next_sibling = p_lhs;
-
p_lhs = fix(p_rhs);
-
p_rhs = p_next_rhs;
- }
+ }
}
if (p_cur != 0)
@@ -229,4 +195,3 @@ join(node_pointer p_lhs, node_pointer p_rhs) const
return p_ret;
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp
new file mode 100644
index 0000000000..3c90b49d1f
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp
@@ -0,0 +1,119 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file branch_policy/branch_policy.hpp
+ * Contains a base class for branch policies.
+ */
+
+#ifndef PB_DS_BRANCH_POLICY_BASE_HPP
+#define PB_DS_BRANCH_POLICY_BASE_HPP
+
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+ /// Primary template, base class for branch structure policies.
+ template<typename Node_CItr, typename Node_Itr, typename _Alloc>
+ struct branch_policy
+ {
+ protected:
+ typedef typename Node_Itr::value_type it_type;
+ typedef typename std::iterator_traits<it_type>::value_type value_type;
+ typedef typename value_type::first_type key_type;
+
+ typedef typename remove_const<value_type>::type rcvalue_type;
+ typedef typename remove_const<key_type>::type rckey_type;
+
+ typedef typename _Alloc::template rebind<rcvalue_type>::other rebind_v;
+ typedef typename _Alloc::template rebind<rckey_type>::other rebind_k;
+
+ typedef typename rebind_v::reference reference;
+ typedef typename rebind_v::const_reference const_reference;
+ typedef typename rebind_v::const_pointer const_pointer;
+
+ typedef typename rebind_k::const_reference key_const_reference;
+
+ static inline key_const_reference
+ extract_key(const_reference r_val)
+ { return r_val.first; }
+
+ virtual it_type
+ end() = 0;
+
+ it_type
+ end_iterator() const
+ { return const_cast<branch_policy*>(this)->end(); }
+
+ virtual
+ ~branch_policy() { }
+ };
+
+ /// Specialization for const iterators.
+ template<typename Node_CItr, typename _Alloc>
+ struct branch_policy<Node_CItr, Node_CItr, _Alloc>
+ {
+ protected:
+ typedef typename Node_CItr::value_type it_type;
+ typedef typename std::iterator_traits<it_type>::value_type value_type;
+ typedef typename remove_const<value_type>::type rcvalue_type;
+ typedef typename _Alloc::template rebind<rcvalue_type>::other rebind_v;
+ typedef typename rebind_v::reference reference;
+ typedef typename rebind_v::const_reference const_reference;
+ typedef typename rebind_v::const_pointer const_pointer;
+
+ typedef value_type key_type;
+ typedef typename rebind_v::const_reference key_const_reference;
+
+ static inline key_const_reference
+ extract_key(const_reference r_val)
+ { return r_val; }
+
+ virtual it_type
+ end() const = 0;
+
+ it_type
+ end_iterator() const
+ { return end(); }
+
+ virtual
+ ~branch_policy() { }
+ };
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#endif // #ifndef PB_DS_BRANCH_POLICY_BASE_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
new file mode 100644
index 0000000000..caa8dd738d
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file branch_policy/null_node_metadata.hpp
+ * Contains an implementation class for tree-like classes.
+ */
+
+#ifndef PB_DS_0_NODE_METADATA_HPP
+#define PB_DS_0_NODE_METADATA_HPP
+
+#include <ext/pb_ds/detail/types_traits.hpp>
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+ /// Constant node iterator.
+ template<typename Key, typename Data, typename _Alloc>
+ struct dumnode_const_iterator
+ {
+ private:
+ typedef types_traits<Key, Data, _Alloc, false> __traits_type;
+ typedef typename __traits_type::pointer const_iterator;
+
+ public:
+ typedef const_iterator value_type;
+ typedef const_iterator const_reference;
+ typedef const_reference reference;
+ };
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp
new file mode 100644
index 0000000000..92f9f44445
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file branch_policy/traits.hpp
+ * Contains an implementation class for tree-like classes.
+ */
+
+#ifndef PB_DS_NODE_AND_IT_TRAITS_HPP
+#define PB_DS_NODE_AND_IT_TRAITS_HPP
+
+#include <ext/pb_ds/detail/types_traits.hpp>
+#include <ext/pb_ds/detail/bin_search_tree_/traits.hpp>
+#include <ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp>
+#include <ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp>
+
+#define PB_DS_DEBUG_VERIFY(_Cond) \
+ _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \
+ _M_message(#_Cond" assertion from %1;:%2;") \
+ ._M_string(__FILE__)._M_integer(__LINE__) \
+ ,__file,__line)
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+ /// Tree traits class, primary template.
+ template<typename Key,
+ typename Data,
+ typename Cmp_Fn,
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename Cmp_Fn_,
+ typename _Alloc>
+ class Node_Update,
+ typename Tag,
+ typename _Alloc>
+ struct tree_traits;
+
+ /// Trie traits class, primary template.
+ template<typename Key,
+ typename Data,
+ typename _ATraits,
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename _ATraits_,
+ typename _Alloc>
+ class Node_Update,
+ typename Tag,
+ typename _Alloc>
+ struct trie_traits;
+
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#include <ext/pb_ds/detail/rb_tree_map_/traits.hpp>
+#include <ext/pb_ds/detail/splay_tree_/traits.hpp>
+#include <ext/pb_ds/detail/ov_tree_map_/traits.hpp>
+#include <ext/pb_ds/detail/pat_trie_/traits.hpp>
+
+#undef PB_DS_DEBUG_VERIFY
+
+#endif // #ifndef PB_DS_NODE_AND_IT_TRAITS_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
index 4529a15f4f..ee487ff76d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +35,7 @@
// warranty.
/**
- * @file cc_ht_map_.hpp
+ * @file cc_hash_table_map_/cc_ht_map_.hpp
* Contains an implementation class for cc_ht_map_.
*/
@@ -48,99 +49,126 @@
#include <ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp>
#ifdef _GLIBCXX_DEBUG
#include <ext/pb_ds/detail/debug_map_base.hpp>
-#endif
+#endif
#ifdef PB_DS_HT_MAP_TRACE_
#include <iostream>
-#endif
+#endif
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
+#ifdef PB_DS_DATA_TRUE_INDICATOR
+#define PB_DS_CC_HASH_NAME cc_ht_map
+#endif
+
+#ifdef PB_DS_DATA_FALSE_INDICATOR
+#define PB_DS_CC_HASH_NAME cc_ht_set
+#endif
#define PB_DS_CLASS_T_DEC \
template<typename Key, typename Mapped, typename Hash_Fn, \
- typename Eq_Fn, typename Allocator, bool Store_Hash, \
+ typename Eq_Fn, typename _Alloc, bool Store_Hash, \
typename Comb_Hash_Fn, typename Resize_Policy>
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME cc_ht_map_data_
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME cc_ht_map_no_data_
-#endif
-
#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME<Key, Mapped, Hash_Fn, Eq_Fn, Allocator, \
+ PB_DS_CC_HASH_NAME<Key, Mapped, Hash_Fn, Eq_Fn, _Alloc, \
Store_Hash, Comb_Hash_Fn, Resize_Policy>
#define PB_DS_HASH_EQ_FN_C_DEC \
- hash_eq_fn<Key, Eq_Fn, Allocator, Store_Hash>
+ hash_eq_fn<Key, Eq_Fn, _Alloc, Store_Hash>
#define PB_DS_RANGED_HASH_FN_C_DEC \
- ranged_hash_fn<Key, Hash_Fn, Allocator, Comb_Hash_Fn, Store_Hash>
+ ranged_hash_fn<Key, Hash_Fn, _Alloc, Comb_Hash_Fn, Store_Hash>
-#define PB_DS_TYPES_TRAITS_C_DEC \
- types_traits<Key, Mapped, Allocator, Store_Hash>
+#define PB_DS_CC_HASH_TRAITS_BASE \
+ types_traits<Key, Mapped, _Alloc, Store_Hash>
#ifdef _GLIBCXX_DEBUG
#define PB_DS_DEBUG_MAP_BASE_C_DEC \
- debug_map_base<Key, Eq_Fn, typename Allocator::template rebind<Key>::other::const_reference>
-#endif
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#endif
-
- // <011i$i0|\|-<|-|4i|\|i|\|g |-|4$|-| 74813.
+ debug_map_base<Key, Eq_Fn, \
+ typename _Alloc::template rebind<Key>::other::const_reference>
+#endif
+
+
+ /**
+ * A collision-chaining hash-based container.
+ *
+ *
+ * @ingroup hash-detail
+ *
+ * @tparam Key Key type.
+ *
+ * @tparam Mapped Map type.
+ *
+ * @tparam Hash_Fn Hashing functor.
+ * Default is __gnu_cxx::hash.
+ *
+ * @tparam Eq_Fn Equal functor.
+ * Default std::equal_to<Key>
+ *
+ * @tparam _Alloc Allocator type.
+ *
+ * @tparam Store_Hash If key type stores extra metadata.
+ * Defaults to false.
+ *
+ * @tparam Comb_Hash_Fn Combining hash functor.
+ * If Hash_Fn is not null_type, then this
+ * is the ranged-hash functor; otherwise,
+ * this is the range-hashing functor.
+ * XXX(See Design::Hash-Based Containers::Hash Policies.)
+ * Default direct_mask_range_hashing.
+ *
+ * @tparam Resize_Policy Resizes hash.
+ * Defaults to hash_standard_resize_policy,
+ * using hash_exponential_size_policy and
+ * hash_load_check_resize_trigger.
+ *
+ *
+ * Bases are: detail::hash_eq_fn, Resize_Policy, detail::ranged_hash_fn,
+ * detail::types_traits. (Optional: detail::debug_map_base.)
+ */
template<typename Key,
typename Mapped,
typename Hash_Fn,
typename Eq_Fn,
- typename Allocator,
+ typename _Alloc,
bool Store_Hash,
typename Comb_Hash_Fn,
typename Resize_Policy >
- class PB_DS_CLASS_NAME:
+ class PB_DS_CC_HASH_NAME:
#ifdef _GLIBCXX_DEBUG
protected PB_DS_DEBUG_MAP_BASE_C_DEC,
-#endif
+#endif
public PB_DS_HASH_EQ_FN_C_DEC,
public Resize_Policy,
public PB_DS_RANGED_HASH_FN_C_DEC,
- public PB_DS_TYPES_TRAITS_C_DEC
+ public PB_DS_CC_HASH_TRAITS_BASE
{
private:
- typedef PB_DS_TYPES_TRAITS_C_DEC traits_base;
- typedef typename traits_base::comp_hash comp_hash;
- typedef typename traits_base::value_type value_type_;
- typedef typename traits_base::pointer pointer_;
+ typedef PB_DS_CC_HASH_TRAITS_BASE traits_base;
+ typedef typename traits_base::comp_hash comp_hash;
+ typedef typename traits_base::value_type value_type_;
+ typedef typename traits_base::pointer pointer_;
typedef typename traits_base::const_pointer const_pointer_;
- typedef typename traits_base::reference reference_;
+ typedef typename traits_base::reference reference_;
typedef typename traits_base::const_reference const_reference_;
- struct entry : public traits_base::stored_value_type
+ struct entry : public traits_base::stored_data_type
{
- typename Allocator::template rebind<entry>::other::pointer m_p_next;
+ typename _Alloc::template rebind<entry>::other::pointer m_p_next;
};
- typedef cond_dealtor<entry, Allocator> cond_dealtor_t;
+ typedef cond_dealtor<entry, _Alloc> cond_dealtor_t;
- typedef typename Allocator::template rebind<entry>::other entry_allocator;
+ typedef typename _Alloc::template rebind<entry>::other entry_allocator;
typedef typename entry_allocator::pointer entry_pointer;
typedef typename entry_allocator::const_pointer const_entry_pointer;
typedef typename entry_allocator::reference entry_reference;
typedef typename entry_allocator::const_reference const_entry_reference;
- typedef typename Allocator::template rebind<entry_pointer>::other entry_pointer_allocator;
+ typedef typename _Alloc::template rebind<entry_pointer>::other entry_pointer_allocator;
typedef typename entry_pointer_allocator::pointer entry_pointer_array;
typedef PB_DS_RANGED_HASH_FN_C_DEC ranged_hash_fn_base;
@@ -148,12 +176,12 @@ namespace __gnu_pbds
typedef Resize_Policy resize_base;
#ifdef _GLIBCXX_DEBUG
- typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
-#endif
+ typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
+#endif
-#define PB_DS_GEN_POS std::pair<entry_pointer, typename Allocator::size_type>
+#define PB_DS_GEN_POS std::pair<entry_pointer, typename _Alloc::size_type>
-#include <ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/point_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/const_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/iterator.hpp>
@@ -161,14 +189,15 @@ namespace __gnu_pbds
#undef PB_DS_GEN_POS
public:
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
- typedef Hash_Fn hash_fn;
- typedef Eq_Fn eq_fn;
- typedef Comb_Hash_Fn comb_hash_fn;
- typedef Resize_Policy resize_policy;
-
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef Hash_Fn hash_fn;
+ typedef Eq_Fn eq_fn;
+ typedef Comb_Hash_Fn comb_hash_fn;
+ typedef Resize_Policy resize_policy;
+
+ /// Value stores hash, true or false.
enum
{
store_hash = Store_Hash
@@ -176,55 +205,55 @@ namespace __gnu_pbds
typedef typename traits_base::key_type key_type;
typedef typename traits_base::key_pointer key_pointer;
- typedef typename traits_base::const_key_pointer const_key_pointer;
+ typedef typename traits_base::key_const_pointer key_const_pointer;
typedef typename traits_base::key_reference key_reference;
- typedef typename traits_base::const_key_reference const_key_reference;
+ typedef typename traits_base::key_const_reference key_const_reference;
typedef typename traits_base::mapped_type mapped_type;
typedef typename traits_base::mapped_pointer mapped_pointer;
- typedef typename traits_base::const_mapped_pointer const_mapped_pointer;
+ typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
typedef typename traits_base::mapped_reference mapped_reference;
- typedef typename traits_base::const_mapped_reference const_mapped_reference;
- typedef typename traits_base::value_type value_type;
- typedef typename traits_base::pointer pointer;
+ typedef typename traits_base::mapped_const_reference mapped_const_reference;
+ typedef typename traits_base::value_type value_type;
+ typedef typename traits_base::pointer pointer;
typedef typename traits_base::const_pointer const_pointer;
- typedef typename traits_base::reference reference;
+ typedef typename traits_base::reference reference;
typedef typename traits_base::const_reference const_reference;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef point_iterator_ point_iterator;
-#endif
+ typedef point_iterator_ point_iterator;
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
- typedef const_point_iterator_ point_iterator;
-#endif
+ typedef point_const_iterator_ point_iterator;
+#endif
- typedef const_point_iterator_ const_point_iterator;
+ typedef point_const_iterator_ point_const_iterator;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef iterator_ iterator;
-#endif
+ typedef iterator_ iterator;
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
- typedef const_iterator_ iterator;
-#endif
+ typedef const_iterator_ iterator;
+#endif
- typedef const_iterator_ const_iterator;
+ typedef const_iterator_ const_iterator;
- PB_DS_CLASS_NAME();
+ PB_DS_CC_HASH_NAME();
- PB_DS_CLASS_NAME(const Hash_Fn&);
+ PB_DS_CC_HASH_NAME(const Hash_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&);
+ PB_DS_CC_HASH_NAME(const Hash_Fn&, const Eq_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&);
+ PB_DS_CC_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&,
+ PB_DS_CC_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&,
const Resize_Policy&);
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
+ PB_DS_CC_HASH_NAME(const PB_DS_CLASS_C_DEC&);
virtual
- ~PB_DS_CLASS_NAME();
+ ~PB_DS_CC_HASH_NAME();
void
swap(PB_DS_CLASS_C_DEC&);
@@ -242,31 +271,40 @@ namespace __gnu_pbds
inline size_type
max_size() const;
+ /// True if size() == 0.
inline bool
empty() const;
- Hash_Fn&
+ /// Return current hash_fn.
+ Hash_Fn&
get_hash_fn();
- const Hash_Fn&
+ /// Return current const hash_fn.
+ const Hash_Fn&
get_hash_fn() const;
- Eq_Fn&
+ /// Return current eq_fn.
+ Eq_Fn&
get_eq_fn();
- const Eq_Fn&
+ /// Return current const eq_fn.
+ const Eq_Fn&
get_eq_fn() const;
- Comb_Hash_Fn&
+ /// Return current comb_hash_fn.
+ Comb_Hash_Fn&
get_comb_hash_fn();
- const Comb_Hash_Fn&
+ /// Return current const comb_hash_fn.
+ const Comb_Hash_Fn&
get_comb_hash_fn() const;
- Resize_Policy&
+ /// Return current resize_policy.
+ Resize_Policy&
get_resize_policy();
- const Resize_Policy&
+ /// Return current const resize_policy.
+ const Resize_Policy&
get_resize_policy() const;
inline std::pair<point_iterator, bool>
@@ -274,30 +312,30 @@ namespace __gnu_pbds
{ return insert_imp(r_val, traits_base::m_store_extra_indicator); }
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
return (subscript_imp(r_key, traits_base::m_store_extra_indicator));
-#else
+#else
insert(r_key);
- return traits_base::s_null_mapped;
-#endif
+ return traits_base::s_null_type;
+#endif
}
inline point_iterator
- find(const_key_reference);
+ find(key_const_reference);
- inline const_point_iterator
- find(const_key_reference) const;
+ inline point_const_iterator
+ find(key_const_reference) const;
inline point_iterator
find_end();
- inline const_point_iterator
+ inline point_const_iterator
find_end() const;
inline bool
- erase(const_key_reference);
+ erase(key_const_reference);
template<typename Pred>
inline size_type
@@ -320,13 +358,13 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char*, int) const;
+#endif
#ifdef PB_DS_HT_MAP_TRACE_
void
trace() const;
-#endif
+#endif
private:
void
@@ -339,19 +377,23 @@ namespace __gnu_pbds
do_resize_if_needed_no_throw();
void
- resize_imp(size_type new_size);
+ resize_imp(size_type);
void
- do_resize(size_type new_size);
+ do_resize(size_type);
void
resize_imp_no_exceptions(size_type, entry_pointer_array, size_type);
inline entry_pointer
- resize_imp_no_exceptions_reassign_pointer(entry_pointer, entry_pointer_array, false_type);
+ resize_imp_no_exceptions_reassign_pointer(entry_pointer,
+ entry_pointer_array,
+ false_type);
inline entry_pointer
- resize_imp_no_exceptions_reassign_pointer(entry_pointer, entry_pointer_array, true_type);
+ resize_imp_no_exceptions_reassign_pointer(entry_pointer,
+ entry_pointer_array,
+ true_type);
void
deallocate_links_in_list(entry_pointer);
@@ -367,14 +409,14 @@ namespace __gnu_pbds
#ifdef PB_DS_DATA_TRUE_INDICATOR
inline mapped_reference
- subscript_imp(const_key_reference r_key, false_type)
+ subscript_imp(key_const_reference r_key, false_type)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- const size_type pos = ranged_hash_fn_base::operator()(r_key);
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
+ const size_type pos = ranged_hash_fn_base::operator()(r_key);
entry_pointer p_e = m_entries[pos];
resize_base::notify_insert_search_start();
- while (p_e != 0
+ while (p_e != 0
&& !hash_eq_fn_base::operator()(p_e->m_value.first, r_key))
{
resize_base::notify_insert_search_collision();
@@ -384,23 +426,24 @@ namespace __gnu_pbds
resize_base::notify_insert_search_end();
if (p_e != 0)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return (p_e->m_value.second);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return insert_new_imp(value_type(r_key, mapped_type()), pos)->second;
}
inline mapped_reference
- subscript_imp(const_key_reference r_key, true_type)
+ subscript_imp(key_const_reference r_key, true_type)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(r_key);
entry_pointer p_e = m_entries[pos_hash_pair.first];
resize_base::notify_insert_search_start();
- while (p_e != 0 &&
- !hash_eq_fn_base::operator()(p_e->m_value.first, p_e->m_hash, r_key, pos_hash_pair.second))
+ while (p_e != 0 &&
+ !hash_eq_fn_base::operator()(p_e->m_value.first, p_e->m_hash,
+ r_key, pos_hash_pair.second))
{
resize_base::notify_insert_search_collision();
p_e = p_e->m_p_next;
@@ -409,15 +452,15 @@ namespace __gnu_pbds
resize_base::notify_insert_search_end();
if (p_e != 0)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return p_e->m_value.second;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
- return insert_new_imp(value_type(r_key, mapped_type()),
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+ return insert_new_imp(value_type(r_key, mapped_type()),
pos_hash_pair)->second;
}
-#endif
+#endif
inline std::pair<point_iterator, bool>
insert_imp(const_reference, false_type);
@@ -432,7 +475,8 @@ namespace __gnu_pbds
pos = ranged_hash_fn_base::operator()(PB_DS_V2F(r_val));
// Following lines might throw an exception.
- entry_pointer p_e = get_entry(r_val, traits_base::m_no_throw_copies_indicator);
+ entry_pointer p_e = get_entry(r_val,
+ traits_base::m_no_throw_copies_indicator);
// At this point no exceptions can be thrown.
p_e->m_p_next = m_entries[pos];
@@ -440,7 +484,7 @@ namespace __gnu_pbds
resize_base::notify_inserted(++m_num_used_e);
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_val));)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return &p_e->m_value;
}
@@ -451,7 +495,8 @@ namespace __gnu_pbds
if (do_resize_if_needed())
r_pos_hash_pair = ranged_hash_fn_base::operator()(PB_DS_V2F(r_val));
- entry_pointer p_e = get_entry(r_val, traits_base::m_no_throw_copies_indicator);
+ entry_pointer p_e = get_entry(r_val,
+ traits_base::m_no_throw_copies_indicator);
// At this point no exceptions can be thrown.
p_e->m_hash = r_pos_hash_pair.second;
@@ -459,16 +504,16 @@ namespace __gnu_pbds
m_entries[r_pos_hash_pair.first] = p_e;
resize_base::notify_inserted(++m_num_used_e);
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_val));)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return &p_e->m_value;
}
inline pointer
- find_key_pointer(const_key_reference r_key, false_type)
+ find_key_pointer(key_const_reference r_key, false_type)
{
entry_pointer p_e = m_entries[ranged_hash_fn_base::operator()(r_key)];
resize_base::notify_find_search_start();
- while (p_e != 0 &&
+ while (p_e != 0 &&
!hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), r_key))
{
resize_base::notify_find_search_collision();
@@ -479,20 +524,20 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
if (p_e == 0)
- debug_base::check_key_does_not_exist(r_key);
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
else
- debug_base::check_key_exists(r_key);
-#endif
+ PB_DS_CHECK_KEY_EXISTS(r_key)
+#endif
return &p_e->m_value;
}
inline pointer
- find_key_pointer(const_key_reference r_key, true_type)
+ find_key_pointer(key_const_reference r_key, true_type)
{
comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(r_key);
entry_pointer p_e = m_entries[pos_hash_pair.first];
resize_base::notify_find_search_start();
- while (p_e != 0 &&
+ while (p_e != 0 &&
!hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value),
p_e->m_hash,
r_key, pos_hash_pair.second))
@@ -505,33 +550,33 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
if (p_e == 0)
- debug_base::check_key_does_not_exist(r_key);
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
else
- debug_base::check_key_exists(r_key);
-#endif
+ PB_DS_CHECK_KEY_EXISTS(r_key)
+#endif
return &p_e->m_value;
}
inline bool
- erase_in_pos_imp(const_key_reference, size_type);
+ erase_in_pos_imp(key_const_reference, size_type);
inline bool
- erase_in_pos_imp(const_key_reference, const comp_hash&);
+ erase_in_pos_imp(key_const_reference, const comp_hash&);
inline void
erase_entry_pointer(entry_pointer&);
#ifdef PB_DS_DATA_TRUE_INDICATOR
void
- inc_it_state(pointer& r_p_value,
+ inc_it_state(pointer& r_p_value,
std::pair<entry_pointer, size_type>& r_pos) const
{
- inc_it_state((const_mapped_pointer& )r_p_value, r_pos);
+ inc_it_state((mapped_const_pointer& )r_p_value, r_pos);
}
-#endif
+#endif
void
- inc_it_state(const_pointer& r_p_value,
+ inc_it_state(const_pointer& r_p_value,
std::pair<entry_pointer, size_type>& r_pos) const
{
_GLIBCXX_DEBUG_ASSERT(r_p_value != 0);
@@ -553,7 +598,7 @@ namespace __gnu_pbds
}
void
- get_start_it_state(pointer& r_p_value,
+ get_start_it_state(pointer& r_p_value,
std::pair<entry_pointer, size_type>& r_pos) const
{
for (r_pos.second = 0; r_pos.second < m_num_e; ++r_pos.second)
@@ -568,24 +613,27 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
void
- assert_entry_pointer_array_valid(const entry_pointer_array) const;
+ assert_entry_pointer_array_valid(const entry_pointer_array,
+ const char*, int) const;
void
- assert_entry_pointer_valid(const entry_pointer, true_type) const;
+ assert_entry_pointer_valid(const entry_pointer, true_type,
+ const char*, int) const;
void
- assert_entry_pointer_valid(const entry_pointer, false_type) const;
-#endif
+ assert_entry_pointer_valid(const entry_pointer, false_type,
+ const char*, int) const;
+#endif
#ifdef PB_DS_HT_MAP_TRACE_
void
trace_list(const_entry_pointer) const;
-#endif
+#endif
private:
#ifdef PB_DS_DATA_TRUE_INDICATOR
friend class iterator_;
-#endif
+#endif
friend class const_iterator_;
@@ -594,7 +642,7 @@ namespace __gnu_pbds
static iterator s_end_it;
static const_iterator s_const_end_it;
static point_iterator s_find_end_it;
- static const_point_iterator s_const_find_end_it;
+ static point_const_iterator s_const_find_end_it;
size_type m_num_e;
size_type m_num_used_e;
@@ -602,8 +650,8 @@ namespace __gnu_pbds
enum
{
- store_hash_ok = !Store_Hash
- || !is_same<Hash_Fn, __gnu_pbds::null_hash_fn>::value
+ store_hash_ok = !Store_Hash
+ || !is_same<Hash_Fn, __gnu_pbds::null_type>::value
};
PB_DS_STATIC_ASSERT(sth, store_hash_ok);
@@ -625,12 +673,8 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_HASH_EQ_FN_C_DEC
#undef PB_DS_RANGED_HASH_FN_C_DEC
-#undef PB_DS_TYPES_TRAITS_C_DEC
+#undef PB_DS_CC_HASH_TRAITS_BASE
#undef PB_DS_DEBUG_MAP_BASE_C_DEC
-#undef PB_DS_CLASS_NAME
-#undef PB_DS_V2F
-#undef PB_DS_V2S
-
+#undef PB_DS_CC_HASH_NAME
} // namespace detail
} // namespace __gnu_pbds
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
index c61eff99b9..4f7116f573 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file cmp_fn_imps.hpp
+ * @file cc_hash_table_map_/cmp_fn_imps.hpp
* Contains implementations of cc_ht_map_'s entire container comparison related
* functions.
*/
@@ -58,9 +58,9 @@ cmp_with_other(const Other_Map_Type& other) const
for (typename Other_Map_Type::const_iterator it = other.begin();
it != other.end(); ++it)
{
- const_key_reference r_key = const_key_reference(PB_DS_V2F(*it));
+ key_const_reference r_key = key_const_reference(PB_DS_V2F(*it));
- const_mapped_pointer p_mapped_value =
+ mapped_const_pointer p_mapped_value =
const_cast<PB_DS_CLASS_C_DEC& >(*this).
find_key_pointer(r_key, traits_base::m_store_extra_indicator);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
index fa3f31df00..5b2db9b0f6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file cond_key_dtor_entry_dealtor.hpp
+ * @file cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
* Contains a conditional key destructor, used for exception handling.
*/
@@ -42,65 +42,43 @@ namespace __gnu_pbds
{
namespace detail
{
-
-#define PB_DS_CLASS_T_DEC template<typename HT_Map>
-#define PB_DS_CLASS_C_DEC PB_DS_CKDED_CLASS_NAME<HT_Map>
-
- /**
- * A conditional key destructor, used for exception handling.
- **/
+ /// Conditional dey destructor, cc_hash.
template<typename HT_Map>
- class PB_DS_CKDED_CLASS_NAME
+ class cond_dealtor
{
public:
- typedef typename HT_Map::entry entry;
- typedef typename HT_Map::entry_allocator entry_allocator;
- typedef typename HT_Map::key_type key_type;
+ typedef typename HT_Map::entry entry;
+ typedef typename HT_Map::entry_allocator entry_allocator;
+ typedef typename HT_Map::key_type key_type;
- inline
- PB_DS_CKDED_CLASS_NAME(entry_allocator* p_a, entry* p_e);
+ cond_dealtor(entry_allocator* p_a, entry* p_e)
+ : m_p_a(p_a), m_p_e(p_e), m_key_destruct(false),
+ m_no_action_destructor(false)
+ { }
inline
- ~PB_DS_CKDED_CLASS_NAME();
+ ~cond_dealtor();
- inline void
- set_key_destruct();
+ void
+ set_key_destruct()
+ { m_key_destruct = true; }
- inline void
- set_no_action_destructor();
+ void
+ set_no_action_destructor()
+ { m_no_action_destructor = true; }
protected:
- entry_allocator* const m_p_a;
- entry* const m_p_e;
+ entry_allocator* const m_p_a;
+ entry* const m_p_e;
- bool m_key_destruct;
- bool m_no_action_destructor;
+ bool m_key_destruct;
+ bool m_no_action_destructor;
};
- PB_DS_CLASS_T_DEC
- inline
- PB_DS_CLASS_C_DEC::
- PB_DS_CKDED_CLASS_NAME(entry_allocator* p_a, entry* p_e)
- : m_p_a(p_a), m_p_e(p_e), m_key_destruct(false),
- m_no_action_destructor(false)
- { }
-
- PB_DS_CLASS_T_DEC
- inline void
- PB_DS_CLASS_C_DEC::
- set_key_destruct()
- { m_key_destruct = true; }
-
- PB_DS_CLASS_T_DEC
- inline void
- PB_DS_CLASS_C_DEC::
- set_no_action_destructor()
- { m_no_action_destructor = true; }
-
- PB_DS_CLASS_T_DEC
+ template<typename HT_Map>
inline
- PB_DS_CLASS_C_DEC::
- ~PB_DS_CKDED_CLASS_NAME()
+ cond_dealtor<HT_Map>::
+ ~cond_dealtor()
{
if (m_no_action_destructor)
return;
@@ -108,10 +86,5 @@ namespace __gnu_pbds
m_p_e->m_value.first.~key_type();
m_p_a->deallocate(m_p_e, 1);
}
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
} // namespace detail
} // namespace __gnu_pbds
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
index 88a5680039..9d37d9f86c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,9 +35,9 @@
// warranty.
/**
- * @file constructor_destructor_fn_imps.hpp
+ * @file cc_hash_table_map_/constructor_destructor_fn_imps.hpp
* Contains implementations of cc_ht_map_'s constructors, destructor,
- * and related functions.
+ * and related functions.
*/
PB_DS_CLASS_T_DEC
@@ -60,29 +60,29 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME() :
+PB_DS_CC_HASH_NAME() :
ranged_hash_fn_base(resize_base::get_nearest_larger_size(1)),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_pointer_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn) :
+PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn) :
ranged_hash_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_pointer_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) :
+PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) :
PB_DS_HASH_EQ_FN_C_DEC(r_eq_fn),
ranged_hash_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
@@ -91,12 +91,13 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) :
std::fill(m_entries, m_entries + m_num_e, (entry_pointer)0);
Resize_Policy::notify_cleared();
ranged_hash_fn_base::notify_resized(m_num_e);
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash_Fn& r_comb_hash_fn) :
+PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
+ const Comb_Hash_Fn& r_comb_hash_fn) :
PB_DS_HASH_EQ_FN_C_DEC(r_eq_fn),
ranged_hash_fn_base(resize_base::get_nearest_larger_size(1),
r_hash_fn, r_comb_hash_fn),
@@ -104,12 +105,14 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash
m_entries(s_entry_pointer_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash_Fn& r_comb_hash_fn, const Resize_Policy& r_resize_policy) :
+PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
+ const Comb_Hash_Fn& r_comb_hash_fn,
+ const Resize_Policy& r_resize_policy) :
PB_DS_HASH_EQ_FN_C_DEC(r_eq_fn),
Resize_Policy(r_resize_policy),
ranged_hash_fn_base(resize_base::get_nearest_larger_size(1),
@@ -118,37 +121,34 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash
m_entries(s_entry_pointer_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
-#ifdef _GLIBCXX_DEBUG
- debug_base(other),
-#endif
+PB_DS_CC_HASH_NAME(const PB_DS_CLASS_C_DEC& other) :
PB_DS_HASH_EQ_FN_C_DEC(other),
resize_base(other), ranged_hash_fn_base(other),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_pointer_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
__try
{
- copy_from_range(other.begin(), other.end());
+ copy_from_range(other.begin(), other.end());
}
__catch(...)
{
- deallocate_all();
- __throw_exception_again;
+ deallocate_all();
+ __throw_exception_again;
}
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~PB_DS_CLASS_NAME()
+~PB_DS_CC_HASH_NAME()
{ deallocate_all(); }
PB_DS_CLASS_T_DEC
@@ -156,8 +156,8 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
std::swap(m_entries, other.m_entries);
std::swap(m_num_e, other.m_num_e);
@@ -167,8 +167,8 @@ swap(PB_DS_CLASS_C_DEC& other)
resize_base::swap(other);
_GLIBCXX_DEBUG_ONLY(debug_base::swap(other));
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
index 4f1cce6480..1f68349d92 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructor_destructor_no_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s constructors, destructor,
* and related functions.
*/
@@ -42,7 +42,7 @@
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-constructor_insert_new_imp(const_mapped_reference r_val, size_type pos,
+constructor_insert_new_imp(mapped_const_reference r_val, size_type pos,
false_type)
{
// Following lines might throw an exception.
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
index a2b6fa1114..f6a73af6d6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file constructor_destructor_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s constructors, destructor,
- * and related functions.
+ * and related functions.
*/
PB_DS_CLASS_T_DEC
@@ -49,7 +49,7 @@ constructor_insert_new_imp(const_reference r_val, size_type pos, true_type)
// At this point no exceptions can be thrown.
p->m_p_next = m_entries[pos];
- p->m_hash = ranged_hash_fn_base::operator()((const_key_reference)(PB_DS_V2F(p->m_value))).second;
+ p->m_hash = ranged_hash_fn_base::operator()((key_const_reference)(PB_DS_V2F(p->m_value))).second;
m_entries[pos] = p;
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(r_key);)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
index b42ed7aa8a..c5af1d3ea4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file cc_hash_table_map_/debug_fn_imps.hpp
* Contains implementations of cc_ht_map_'s debug-mode functions.
*/
@@ -43,16 +43,17 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- debug_base::check_size(m_num_used_e);
- assert_entry_pointer_array_valid(m_entries);
+ debug_base::check_size(m_num_used_e, __file, __line);
+ assert_entry_pointer_array_valid(m_entries, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_entry_pointer_array_valid(const entry_pointer_array a_p_entries) const
+assert_entry_pointer_array_valid(const entry_pointer_array a_p_entries,
+ const char* __file, int __line) const
{
size_type iterated_num_used_e = 0;
for (size_type pos = 0; pos < m_num_e; ++pos)
@@ -61,11 +62,12 @@ assert_entry_pointer_array_valid(const entry_pointer_array a_p_entries) const
while (p_e != 0)
{
++iterated_num_used_e;
- assert_entry_pointer_valid(p_e, traits_base::m_store_extra_indicator);
+ assert_entry_pointer_valid(p_e, traits_base::m_store_extra_indicator,
+ __file, __line);
p_e = p_e->m_p_next;
}
}
- _GLIBCXX_DEBUG_ASSERT(iterated_num_used_e == m_num_used_e);
+ PB_DS_DEBUG_VERIFY(iterated_num_used_e == m_num_used_e);
}
#include <ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
index 770bed34ca..1c19cac959 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_no_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s debug-mode functions.
*/
@@ -43,7 +43,8 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_entry_pointer_valid(const entry_pointer p, false_type) const
-{ debug_base::check_key_exists(PB_DS_V2F(p->m_value)); }
+assert_entry_pointer_valid(const entry_pointer p, false_type,
+ const char* __file, int __line) const
+{ debug_base::check_key_exists(PB_DS_V2F(p->m_value), __file, __line); }
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
index 3d17671e91..76ad8c6bff 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/debug_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s debug-mode functions.
*/
@@ -43,11 +43,12 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_entry_pointer_valid(const entry_pointer p_e, true_type) const
+assert_entry_pointer_valid(const entry_pointer p_e, true_type,
+ const char* __file, int __line) const
{
- debug_base::check_key_exists(PB_DS_V2F(p_e->m_value));
+ debug_base::check_key_exists(PB_DS_V2F(p_e->m_value), __file, __line);
comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(PB_DS_V2F(p_e->m_value));
- _GLIBCXX_DEBUG_ASSERT(p_e->m_hash == pos_hash_pair.second);
+ PB_DS_DEBUG_VERIFY(p_e->m_hash == pos_hash_pair.second);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
index 0799911933..74404035f9 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file entry_list_fn_imps.hpp
+ * @file cc_hash_table_map_/entry_list_fn_imps.hpp
* Contains implementations of cc_ht_map_'s entry-list related functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
index c6febe421a..c9c4b1c745 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file cc_hash_table_map_/erase_fn_imps.hpp
* Contains implementations of cc_ht_map_'s erase related functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
index 4f513e998b..1e2661efa5 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_no_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s erase related functions,
* when the hash value is not stored.
*/
@@ -42,35 +42,35 @@
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return erase_in_pos_imp(r_key, ranged_hash_fn_base::operator()(r_key));
}
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase_in_pos_imp(const_key_reference r_key, size_type pos)
+erase_in_pos_imp(key_const_reference r_key, size_type pos)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
entry_pointer p_e = m_entries[pos];
resize_base::notify_erase_search_start();
if (p_e == 0)
{
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+ PB_DS_ASSERT_VALID((*this))
return false;
}
if (hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), r_key))
{
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base:: check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
erase_entry_pointer(m_entries[pos]);
do_resize_if_needed_no_throw();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return true;
}
@@ -78,24 +78,23 @@ erase_in_pos_imp(const_key_reference r_key, size_type pos)
{
entry_pointer p_next_e = p_e->m_p_next;
if (p_next_e == 0)
- {
+ {
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- return false;
- }
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+ PB_DS_ASSERT_VALID((*this))
+ return false;
+ }
if (hash_eq_fn_base::operator()(PB_DS_V2F(p_next_e->m_value), r_key))
- {
+ {
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
- erase_entry_pointer(p_e->m_p_next);
+ PB_DS_CHECK_KEY_EXISTS(r_key)
+ erase_entry_pointer(p_e->m_p_next);
do_resize_if_needed_no_throw();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- return true;
- }
+ PB_DS_ASSERT_VALID((*this))
+ return true;
+ }
resize_base::notify_erase_search_collision();
p_e = p_next_e;
}
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
index 6e21aceb98..a4cddeafb6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/erase_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s erase related functions,
* when the hash value is stored.
*/
@@ -42,16 +42,16 @@
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair)
+erase_in_pos_imp(key_const_reference r_key, const comp_hash& r_pos_hash_pair)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
entry_pointer p_e = m_entries[r_pos_hash_pair.first];
resize_base::notify_erase_search_start();
if (p_e == 0)
{
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base:: check_key_does_not_exist(r_key);)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+ PB_DS_ASSERT_VALID((*this))
return false;
}
@@ -59,10 +59,10 @@ erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair)
r_key, r_pos_hash_pair.second))
{
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
erase_entry_pointer(m_entries[r_pos_hash_pair.first]);
do_resize_if_needed_no_throw();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return true;
}
@@ -70,26 +70,25 @@ erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair)
{
entry_pointer p_next_e = p_e->m_p_next;
if (p_next_e == 0)
- {
+ {
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- return false;
- }
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+ PB_DS_ASSERT_VALID((*this))
+ return false;
+ }
if (hash_eq_fn_base::operator()(PB_DS_V2F(p_next_e->m_value),
p_next_e->m_hash, r_key,
r_pos_hash_pair.second))
- {
+ {
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
- erase_entry_pointer(p_e->m_p_next);
+ PB_DS_CHECK_KEY_EXISTS(r_key)
+ erase_entry_pointer(p_e->m_p_next);
do_resize_if_needed_no_throw();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- return true;
- }
+ PB_DS_ASSERT_VALID((*this))
+ return true;
+ }
resize_base::notify_erase_search_collision();
p_e = p_next_e;
}
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
index f884941804..e3f363f41e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,25 +34,25 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file cc_hash_table_map_/find_fn_imps.hpp
* Contains implementations of cc_ht_map_'s find related functions.
*/
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key)
+find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return find_key_pointer(r_key, traits_base::m_store_extra_indicator);
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key) const
+find(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return const_cast<PB_DS_CLASS_C_DEC& >(*this).find_key_pointer(r_key,
traits_base::m_store_extra_indicator);
}
@@ -64,7 +64,7 @@ find_end()
{ return 0; }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
find_end() const
{ return 0; }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
index 1db51c990a..d532c4f45b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/find_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s find related functions,
* when the hash value is stored.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
index 2b429960c0..99eea41c59 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file cc_hash_table_map_/info_fn_imps.hpp
* Contains implementations of cc_ht_map_'s entire container info related
* functions.
*/
@@ -76,8 +76,8 @@ cmp_with_other(const Other_Map_Type& other) const
for (typename Other_Map_Type::const_iterator it = other.begin();
it != other.end(); ++it)
{
- const_key_reference r_key =(const_key_reference)PB_DS_V2F(*it);
- const_mapped_pointer p_mapped_value =
+ key_const_reference r_key =(key_const_reference)PB_DS_V2F(*it);
+ mapped_const_pointer p_mapped_value =
const_cast<PB_DS_CLASS_C_DEC& >(*this).
find_key_pointer(r_key, traits_base::m_store_extra_indicator);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
index 0679dbe6e7..dc7d44cc50 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file cc_hash_table_map_/insert_fn_imps.hpp
* Contains implementations of cc_ht_map_'s insert related functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
index 1de42e8d60..ba89873958 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_no_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s insert related functions,
* when the hash value is not stored.
*/
@@ -44,8 +44,8 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert_imp(const_reference r_val, false_type)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- const_key_reference r_key = PB_DS_V2F(r_val);
+ PB_DS_ASSERT_VALID((*this))
+ key_const_reference r_key = PB_DS_V2F(r_val);
const size_type pos = ranged_hash_fn_base::operator()(r_key);
entry_pointer p_e = m_entries[pos];
resize_base::notify_insert_search_start();
@@ -60,11 +60,11 @@ insert_imp(const_reference r_val, false_type)
resize_base::notify_insert_search_end();
if (p_e != 0)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return std::make_pair(&p_e->m_value, false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return std::make_pair(insert_new_imp(r_val, pos), true);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
index c7b0bdc9a3..f4553976cf 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/insert_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s insert related functions,
* when the hash value is stored.
*/
@@ -44,8 +44,8 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert_imp(const_reference r_val, true_type)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- const_key_reference key = PB_DS_V2F(r_val);
+ PB_DS_ASSERT_VALID((*this))
+ key_const_reference key = PB_DS_V2F(r_val);
comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(key);
entry_pointer p_e = m_entries[pos_hash_pair.first];
resize_base::notify_insert_search_start();
@@ -61,11 +61,11 @@ insert_imp(const_reference r_val, true_type)
resize_base::notify_insert_search_end();
if (p_e != 0)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(key);)
+ PB_DS_CHECK_KEY_EXISTS(key)
return std::make_pair(&p_e->m_value, false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(key)
return std::make_pair(insert_new_imp(r_val, pos_hash_pair), true);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
index a7592b7f1f..5be4a9caab 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
+ * @file cc_hash_table_map_/iterators_fn_imps.hpp
* Contains implementations of cc_ht_map_'s iterators related functions, e.g.,
* begin().
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
index 9a661b3619..5bf12c8f16 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
+ * @file cc_hash_table_map_/policy_access_fn_imps.hpp
* Contains implementations of cc_ht_map_'s policy access
* functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
index 3db838bf82..66145b81da 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file resize_fn_imps.hpp
+ * @file cc_hash_table_map_/resize_fn_imps.hpp
* Contains implementations of cc_ht_map_'s resize related functions.
*/
@@ -71,7 +71,7 @@ do_resize_if_needed_no_throw()
__catch(...)
{ }
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -79,7 +79,7 @@ void
PB_DS_CLASS_C_DEC::
resize_imp(size_type new_size)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
if (new_size == m_num_e)
return;
@@ -104,7 +104,7 @@ resize_imp(size_type new_size)
// At this point no exceptions can be thrown.
resize_imp_no_exceptions(new_size, a_p_entries_resized, old_size);
Resize_Policy::notify_resized(new_size);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -123,10 +123,11 @@ resize_imp_no_exceptions(size_type new_size, entry_pointer_array a_p_entries_res
}
m_num_e = new_size;
- _GLIBCXX_DEBUG_ONLY(assert_entry_pointer_array_valid(a_p_entries_resized);)
+ _GLIBCXX_DEBUG_ONLY(assert_entry_pointer_array_valid(a_p_entries_resized,
+ __FILE__, __LINE__);)
s_entry_pointer_allocator.deallocate(m_entries, old_size);
m_entries = a_p_entries_resized;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
#include <ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
index 6577630f0f..f43850818b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file resize_no_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s resize related functions, when the
- * hash value is not stored.
+ * hash value is not stored.
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
index c1adb61b19..1901b80393 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file resize_store_hash_fn_imps.hpp
+ * @file cc_hash_table_map_/resize_store_hash_fn_imps.hpp
* Contains implementations of cc_ht_map_'s resize related functions, when the
- * hash value is stored.
+ * hash value is stored.
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
index 0d5ec85f2e..ff11890e69 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file size_fn_imps.hpp
+ * @file cc_hash_table_map_/size_fn_imps.hpp
* Contains implementations of cc_ht_map_'s entire container size related
- * functions.
+ * functions.
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp
index b9c1ee20e5..3c07f95a49 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file standard_policies.hpp
+ * @file cc_hash_table_map_/standard_policies.hpp
* Contains standard policies for cc_ht_map types.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
index 497977d97c..ede1d6a8fc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file cc_hash_table_map_/trace_fn_imps.hpp
* Contains implementations of cc_ht_map_'s trace-mode functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp
index 1ee48a2ac6..eb87bea9e2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file cond_dealtor.hpp
+ * @file detail/cond_dealtor.hpp
* Contains a conditional deallocator.
*/
@@ -43,83 +43,42 @@
namespace __gnu_pbds
{
-
namespace detail
{
-
-#define PB_DS_COND_DEALTOR_CLASS_T_DEC \
- template<typename Entry, class Allocator>
-
-#define PB_DS_COND_DEALTOR_CLASS_C_DEC \
- cond_dealtor< \
- Entry, \
- Allocator>
-
- template<typename Entry, class Allocator>
- class cond_dealtor
- {
- public:
- typedef
- typename Allocator::template rebind<Entry>::other
- entry_allocator;
-
- typedef typename entry_allocator::pointer entry_pointer;
-
- public:
- inline
- cond_dealtor(entry_pointer p_e);
-
- inline
- ~cond_dealtor();
-
- inline void
- set_no_action();
-
- private:
- entry_pointer m_p_e;
-
- bool m_no_action_destructor;
-
- static entry_allocator s_alloc;
- };
-
- PB_DS_COND_DEALTOR_CLASS_T_DEC
- typename PB_DS_COND_DEALTOR_CLASS_C_DEC::entry_allocator
- PB_DS_COND_DEALTOR_CLASS_C_DEC::s_alloc;
-
- PB_DS_COND_DEALTOR_CLASS_T_DEC
- inline
- PB_DS_COND_DEALTOR_CLASS_C_DEC::
- cond_dealtor(entry_pointer p_e) :
- m_p_e(p_e),
- m_no_action_destructor(false)
- { }
-
- PB_DS_COND_DEALTOR_CLASS_T_DEC
- inline void
- PB_DS_COND_DEALTOR_CLASS_C_DEC::
- set_no_action()
- {
- m_no_action_destructor = true;
- }
-
- PB_DS_COND_DEALTOR_CLASS_T_DEC
- inline
- PB_DS_COND_DEALTOR_CLASS_C_DEC::
- ~cond_dealtor()
- {
- if (m_no_action_destructor)
- return;
-
- s_alloc.deallocate(m_p_e, 1);
- }
-
-#undef PB_DS_COND_DEALTOR_CLASS_T_DEC
-#undef PB_DS_COND_DEALTOR_CLASS_C_DEC
-
+ /// Conditional deallocate constructor argument.
+ template<typename Entry, typename _Alloc>
+ class cond_dealtor
+ {
+ typedef typename _Alloc::template rebind<Entry> __rebind_e;
+
+ public:
+ typedef typename __rebind_e::other entry_allocator;
+ typedef typename entry_allocator::pointer entry_pointer;
+
+ cond_dealtor(entry_pointer p_e)
+ : m_p_e(p_e), m_no_action_destructor(false) { }
+
+ ~cond_dealtor()
+ {
+ if (m_no_action_destructor)
+ return;
+ s_alloc.deallocate(m_p_e, 1);
+ }
+
+ void
+ set_no_action()
+ { m_no_action_destructor = true; }
+
+ private:
+ entry_pointer m_p_e;
+ bool m_no_action_destructor;
+ static entry_allocator s_alloc;
+ };
+
+ template<typename Entry, class _Alloc>
+ typename cond_dealtor<Entry, _Alloc>::entry_allocator
+ cond_dealtor<Entry, _Alloc>::s_alloc;
} // namespace detail
-
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_COND_DEALTOR_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp
deleted file mode 100644
index 20c9988687..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file constructors_destructor_fn_imps.hpp
- * Contains constructors_destructor_fn_imps applicable to different containers.
- */
-
-inline
-PB_DS_CLASS_NAME()
-{ }
-
-inline
-PB_DS_CLASS_NAME(const PB_DS_CLASS_NAME& other)
-: base_type((const base_type&)other)
-{ }
-
-template<typename T0>
-inline
-PB_DS_CLASS_NAME(T0 t0) : base_type(t0)
-{ }
-
-template<typename T0, typename T1>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1) : base_type(t0, t1)
-{ }
-
-template<typename T0, typename T1, typename T2>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2) : base_type(t0, t1, t2)
-{ }
-
-template<typename T0, typename T1, typename T2, typename T3>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2, T3 t3)
-: base_type(t0, t1, t2, t3)
-{ }
-
-template<typename T0, typename T1, typename T2, typename T3, typename T4>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4)
-: base_type(t0, t1, t2, t3, t4)
-{ }
-
-template<typename T0, typename T1, typename T2, typename T3, typename T4,
- typename T5>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
-: base_type(t0, t1, t2, t3, t4, t5)
-{ }
-
-template<typename T0, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
-: base_type(t0, t1, t2, t3, t4, t5, t6)
-{ }
-
-template<typename T0, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
-: base_type(t0, t1, t2, t3, t4, t5, t6, t7)
-{ }
-
-template<typename T0, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8>
-inline
-PB_DS_CLASS_NAME(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
-: base_type(t0, t1, t2, t3, t4, t5, t6, t7, t8)
-{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp b/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp
index 7f8d87a3c2..37217d950b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -35,7 +35,7 @@
/**
* @file container_base_dispatch.hpp
- * Contains an associative container dispatching base.
+ * Contains associative container dispatching.
*/
#ifndef PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP
@@ -43,88 +43,85 @@
#include <ext/typelist.h>
-#define PB_DS_DATA_TRUE_INDICATOR
-#include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
-#undef PB_DS_DATA_TRUE_INDICATOR
+#define PB_DS_ASSERT_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);)
-#define PB_DS_DATA_FALSE_INDICATOR
-#include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
-#undef PB_DS_DATA_FALSE_INDICATOR
+#define PB_DS_DEBUG_VERIFY(_Cond) \
+ _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \
+ _M_message(#_Cond" assertion from %1;:%2;") \
+ ._M_string(__FILE__)._M_integer(__LINE__) \
+ ,__file,__line)
-#define PB_DS_DATA_TRUE_INDICATOR
-#include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
-#undef PB_DS_DATA_TRUE_INDICATOR
+#define PB_DS_CHECK_KEY_EXISTS(_Key) \
+ _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(_Key, __FILE__, __LINE__);)
-#define PB_DS_DATA_FALSE_INDICATOR
-#include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
-#undef PB_DS_DATA_FALSE_INDICATOR
+#define PB_DS_CHECK_KEY_DOES_NOT_EXIST(_Key) \
+ _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(_Key, \
+ __FILE__, __LINE__);)
#define PB_DS_DATA_TRUE_INDICATOR
+#define PB_DS_V2F(X) (X).first
+#define PB_DS_V2S(X) (X).second
+#define PB_DS_EP2VP(X)& ((X)->m_value)
+#include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
+#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
+#include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
#include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
-#undef PB_DS_DATA_TRUE_INDICATOR
-
-#define PB_DS_DATA_FALSE_INDICATOR
-#include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
-#undef PB_DS_DATA_FALSE_INDICATOR
-
-#define PB_DS_DATA_TRUE_INDICATOR
-#include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
-#undef PB_DS_DATA_TRUE_INDICATOR
-
-#define PB_DS_DATA_FALSE_INDICATOR
#include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
-#undef PB_DS_DATA_FALSE_INDICATOR
-
-#define PB_DS_DATA_TRUE_INDICATOR
-#include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
-#undef PB_DS_DATA_TRUE_INDICATOR
-
-#define PB_DS_DATA_FALSE_INDICATOR
#include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
-#undef PB_DS_DATA_FALSE_INDICATOR
-
-#define PB_DS_DATA_TRUE_INDICATOR
#include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
-#undef PB_DS_DATA_TRUE_INDICATOR
-
-#define PB_DS_DATA_FALSE_INDICATOR
-#include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
-#undef PB_DS_DATA_FALSE_INDICATOR
-
-#define PB_DS_DATA_TRUE_INDICATOR
#include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp>
#undef PB_DS_DATA_TRUE_INDICATOR
+#undef PB_DS_V2F
+#undef PB_DS_V2S
+#undef PB_DS_EP2VP
#define PB_DS_DATA_FALSE_INDICATOR
+#define PB_DS_V2F(X) (X)
+#define PB_DS_V2S(X) Mapped_Data()
+#define PB_DS_EP2VP(X)& ((X)->m_value.first)
+#include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
+#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
+#include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
+#include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
+#include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
+#include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
+#include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
#include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp>
#undef PB_DS_DATA_FALSE_INDICATOR
+#undef PB_DS_V2F
+#undef PB_DS_V2S
+#undef PB_DS_EP2VP
+
+#undef PB_DS_CHECK_KEY_DOES_NOT_EXIST
+#undef PB_DS_CHECK_KEY_EXISTS
+#undef PB_DS_DEBUG_VERIFY
+#undef PB_DS_ASSERT_VALID
namespace __gnu_pbds
{
namespace detail
{
- // Primary template.
- template<typename Key, typename Mapped, typename Data_Structure_Taq,
- typename Policy_Tl, typename Alloc>
- struct container_base_dispatch;
-
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, list_update_tag,
- Policy_Tl, Alloc>
+ /// Specialization for list-update map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, list_update_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
typedef typename at0::type at0t;
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
typedef typename at1::type at1t;
-
+
public:
- typedef lu_map_data_<Key, Mapped, at0t, Alloc, at1t> type;
+ /// Dispatched type.
+ typedef lu_map<Key, Mapped, at0t, _Alloc, at1t> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, list_update_tag,
- Policy_Tl, Alloc>
+ /// Specialization for list-update set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, list_update_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -133,34 +130,39 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef lu_map_no_data_<Key, null_mapped_type, at0t, Alloc, at1t> type;
+ /// Dispatched type.
+ typedef lu_set<Key, null_type, at0t, _Alloc, at1t> type;
};
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, pat_trie_tag, Policy_Tl, Alloc>
+ /// Specialization for PATRICIA trie map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, pat_trie_tag, Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
typedef typename at1::type at1t;
public:
- typedef pat_trie_data_<Key, Mapped, at1t, Alloc> type;
+ typedef pat_trie_map<Key, Mapped, at1t, _Alloc> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, pat_trie_tag,
- Policy_Tl, Alloc>
+ /// Specialization for PATRICIA trie set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, pat_trie_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
typedef typename at1::type at1t;
public:
- typedef pat_trie_no_data_<Key, null_mapped_type, at1t, Alloc> type;
+ /// Dispatched type.
+ typedef pat_trie_set<Key, null_type, at1t, _Alloc> type;
};
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, rb_tree_tag, Policy_Tl, Alloc>
+ /// Specialization for R-B tree map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, rb_tree_tag, Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -169,12 +171,14 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef rb_tree_data_<Key, Mapped, at0t, at1t, Alloc> type;
+ /// Dispatched type.
+ typedef rb_tree_map<Key, Mapped, at0t, at1t, _Alloc> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, rb_tree_tag,
- Policy_Tl, Alloc>
+ /// Specialization for R-B tree set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, rb_tree_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -183,12 +187,13 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef rb_tree_no_data_<Key, null_mapped_type, at0t, at1t, Alloc> type;
+ typedef rb_tree_set<Key, null_type, at0t, at1t, _Alloc> type;
};
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, splay_tree_tag,
- Policy_Tl, Alloc>
+ /// Specialization splay tree map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, splay_tree_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -197,12 +202,14 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef splay_tree_data_<Key, Mapped, at0t, at1t, Alloc> type;
+ /// Dispatched type.
+ typedef splay_tree_map<Key, Mapped, at0t, at1t, _Alloc> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, splay_tree_tag,
- Policy_Tl, Alloc>
+ /// Specialization splay tree set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, splay_tree_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -211,11 +218,13 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef splay_tree_no_data_<Key, null_mapped_type, at0t, at1t, Alloc> type;
+ /// Dispatched type.
+ typedef splay_tree_set<Key, null_type, at0t, at1t, _Alloc> type;
};
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, ov_tree_tag, Policy_Tl, Alloc>
+ /// Specialization ordered-vector tree map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, ov_tree_tag, Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -224,12 +233,14 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef ov_tree_data_<Key, Mapped, at0t, at1t, Alloc> type;
+ /// Dispatched type.
+ typedef ov_tree_map<Key, Mapped, at0t, at1t, _Alloc> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, ov_tree_tag,
- Policy_Tl, Alloc>
+ /// Specialization ordered-vector tree set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, ov_tree_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -238,11 +249,13 @@ namespace detail
typedef typename at1::type at1t;
public:
- typedef ov_tree_no_data_<Key, null_mapped_type, at0t, at1t, Alloc> type;
+ /// Dispatched type.
+ typedef ov_tree_set<Key, null_type, at0t, at1t, _Alloc> type;
};
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, cc_hash_tag, Policy_Tl, Alloc>
+ /// Specialization colision-chaining hash map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, cc_hash_tag, Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -257,13 +270,15 @@ namespace detail
typedef typename at4::type at4t;
public:
- typedef cc_ht_map_data_<Key, Mapped, at0t, at1t, Alloc, at3t::value,
- at4t, at2t> type;
+ /// Dispatched type.
+ typedef cc_ht_map<Key, Mapped, at0t, at1t, _Alloc,
+ at3t::value, at4t, at2t> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, cc_hash_tag,
- Policy_Tl, Alloc>
+ /// Specialization colision-chaining hash set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, cc_hash_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -278,12 +293,14 @@ namespace detail
typedef typename at4::type at4t;
public:
- typedef cc_ht_map_no_data_<Key, null_mapped_type, at0t, at1t, Alloc,
+ /// Dispatched type.
+ typedef cc_ht_set<Key, null_type, at0t, at1t, _Alloc,
at3t::value, at4t, at2t> type;
};
- template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, Mapped, gp_hash_tag, Policy_Tl, Alloc>
+ /// Specialization general-probe hash map.
+ template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, Mapped, _Alloc, gp_hash_tag, Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -300,13 +317,15 @@ namespace detail
typedef typename at5::type at5t;
public:
- typedef gp_ht_map_data_<Key, Mapped, at0t, at1t, Alloc, at3t::value,
- at4t, at5t, at2t> type;
+ /// Dispatched type.
+ typedef gp_ht_map<Key, Mapped, at0t, at1t, _Alloc,
+ at3t::value, at4t, at5t, at2t> type;
};
- template<typename Key, typename Policy_Tl, typename Alloc>
- struct container_base_dispatch<Key, null_mapped_type, gp_hash_tag,
- Policy_Tl, Alloc>
+ /// Specialization general-probe hash set.
+ template<typename Key, typename _Alloc, typename Policy_Tl>
+ struct container_base_dispatch<Key, null_type, _Alloc, gp_hash_tag,
+ Policy_Tl>
{
private:
typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
@@ -323,10 +342,11 @@ namespace detail
typedef typename at5::type at5t;
public:
- typedef gp_ht_map_no_data_<Key, null_mapped_type, at0t, at1t, Alloc,
- at3t::value, at4t, at5t, at2t> type;
+ /// Dispatched type.
+ typedef gp_ht_set<Key, null_type, at0t, at1t, _Alloc,
+ at3t::value, at4t, at5t, at2t> type;
};
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
index 9dc7635956..c1709ba452 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file debug_map_base.hpp
+ * @file detail/debug_map_base.hpp
* Contains a debug-mode base for all maps.
*/
@@ -63,105 +63,103 @@ namespace __gnu_pbds
{ return (__out << '(' << p.first << ',' << p.second << ')'); }
#define PB_DS_CLASS_T_DEC \
- template<typename Key, class Eq_Fn, typename Const_Key_Reference>
+ template<typename Key, typename Eq_Fn, typename Const_Key_Reference>
#define PB_DS_CLASS_C_DEC \
debug_map_base<Key, Eq_Fn, Const_Key_Reference>
- template<typename Key, class Eq_Fn, typename Const_Key_Reference>
+ /// Debug base class.
+ template<typename Key, typename Eq_Fn, typename Const_Key_Reference>
class debug_map_base
{
private:
- typedef typename std::allocator<Key> key_allocator;
- typedef typename key_allocator::size_type size_type;
- typedef Const_Key_Reference const_key_reference;
- typedef std::_GLIBCXX_STD_C::list<Key> key_set;
- typedef typename key_set::iterator key_set_iterator;
- typedef typename key_set::const_iterator const_key_set_iterator;
- typedef __gnu_cxx::throw_allocator_random<Key> key_db_allocator;
- typedef typename key_db_allocator::never_adjustor never_adjustor;
+ typedef Const_Key_Reference key_const_reference;
+ typedef std::_GLIBCXX_STD_C::list<Key> key_repository;
+ typedef typename key_repository::size_type size_type;
+ typedef typename key_repository::iterator iterator;
+ typedef typename key_repository::const_iterator const_iterator;
protected:
debug_map_base();
- debug_map_base(const PB_DS_CLASS_C_DEC& other);
+ debug_map_base(const PB_DS_CLASS_C_DEC&);
~debug_map_base();
inline void
- insert_new(const_key_reference r_key);
+ insert_new(key_const_reference);
inline void
- erase_existing(const_key_reference r_key);
+ erase_existing(key_const_reference);
void
clear();
inline void
- check_key_exists(const_key_reference r_key) const;
+ check_key_exists(key_const_reference, const char*, int) const;
inline void
- check_key_does_not_exist(const_key_reference r_key) const;
+ check_key_does_not_exist(key_const_reference, const char*, int) const;
inline void
- check_size(size_type size) const;
+ check_size(size_type, const char*, int) const;
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
template<typename Cmp_Fn>
void
- split(const_key_reference, Cmp_Fn, PB_DS_CLASS_C_DEC&);
+ split(key_const_reference, Cmp_Fn, PB_DS_CLASS_C_DEC&);
void
- join(PB_DS_CLASS_C_DEC& other);
+ join(PB_DS_CLASS_C_DEC&, bool with_cleanup = true);
private:
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
- const_key_set_iterator
- find(const_key_reference r_key) const;
+ const_iterator
+ find(key_const_reference) const;
- key_set_iterator
- find(const_key_reference r_key);
+ iterator
+ find(key_const_reference);
- key_set m_key_set;
- Eq_Fn m_eq;
+ key_repository m_keys;
+ Eq_Fn m_eq;
};
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
debug_map_base()
- { _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+ { PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
- debug_map_base(const PB_DS_CLASS_C_DEC& other) : m_key_set(other.m_key_set)
- { _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+ debug_map_base(const PB_DS_CLASS_C_DEC& other)
+ : m_keys(other.m_keys), m_eq(other.m_eq)
+ { PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
~debug_map_base()
- { _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+ { PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
- insert_new(const_key_reference r_key)
+ insert_new(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- if (find(r_key) != m_key_set.end())
+ if (find(r_key) != m_keys.end())
{
std::cerr << "insert_new key already present " << r_key << std::endl;
- std::abort;
+ std::abort();
}
- never_adjustor never;
__try
{
- m_key_set.push_back(r_key);
+ m_keys.push_back(r_key);
}
__catch(...)
{
@@ -169,23 +167,23 @@ namespace __gnu_pbds
std::abort();
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
- erase_existing(const_key_reference r_key)
+ erase_existing(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- key_set_iterator it = find(r_key);
- if (it == m_key_set.end())
+ PB_DS_ASSERT_VALID((*this))
+ iterator it = find(r_key);
+ if (it == m_keys.end())
{
std::cerr << "erase_existing" << r_key << std::endl;
std::abort();
}
- m_key_set.erase(it);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ m_keys.erase(it);
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -193,36 +191,39 @@ namespace __gnu_pbds
PB_DS_CLASS_C_DEC::
clear()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- m_key_set.clear();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ m_keys.clear();
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
- check_key_exists(const_key_reference r_key) const
+ check_key_exists(key_const_reference r_key,
+ const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- if (find(r_key) == m_key_set.end())
+ assert_valid(__file, __line);
+ if (find(r_key) == m_keys.end())
{
- std::cerr << "check_key_exists " << r_key << std::endl;
+ std::cerr << __file << ':' << __line << ": check_key_exists "
+ << r_key << std::endl;
std::abort();
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
- check_key_does_not_exist(const_key_reference r_key) const
+ check_key_does_not_exist(key_const_reference r_key,
+ const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- if (find(r_key) != m_key_set.end())
+ assert_valid(__file, __line);
+ if (find(r_key) != m_keys.end())
{
using std::cerr;
using std::endl;
- cerr << "check_key_does_not_exist " << r_key << endl;
+ cerr << __file << ':' << __line << ": check_key_does_not_exist "
+ << r_key << endl;
std::abort();
}
}
@@ -230,17 +231,16 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
- check_size(size_type size) const
+ check_size(size_type size, const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- const size_type key_set_size = m_key_set.size();
- if (size != key_set_size)
+ assert_valid(__file, __line);
+ const size_type keys_size = m_keys.size();
+ if (size != keys_size)
{
- std::cerr << "check_size " << size
- << " " << key_set_size << std::endl;
+ std::cerr << __file << ':' << __line << ": check_size "
+ << size << " != " << keys_size << std::endl;
std::abort();
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
}
PB_DS_CLASS_T_DEC
@@ -248,55 +248,55 @@ namespace __gnu_pbds
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- m_key_set.swap(other.m_key_set);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ m_keys.swap(other.m_keys);
+ std::swap(m_eq, other.m_eq);
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::const_key_set_iterator
+ typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
- find(const_key_reference r_key) const
+ find(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- typedef const_key_set_iterator iterator_type;
- for (iterator_type it = m_key_set.begin(); it != m_key_set.end(); ++it)
+ PB_DS_ASSERT_VALID((*this))
+ typedef const_iterator iterator_type;
+ for (iterator_type it = m_keys.begin(); it != m_keys.end(); ++it)
if (m_eq(*it, r_key))
return it;
- return m_key_set.end();
+ return m_keys.end();
}
PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::key_set_iterator
+ typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
- find(const_key_reference r_key)
+ find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- key_set_iterator it = m_key_set.begin();
- while (it != m_key_set.end())
+ PB_DS_ASSERT_VALID((*this))
+ iterator it = m_keys.begin();
+ while (it != m_keys.end())
{
if (m_eq(*it, r_key))
return it;
++it;
}
return it;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
- assert_valid() const
+ assert_valid(const char* __file, int __line) const
{
- const_key_set_iterator prime_it = m_key_set.begin();
- while (prime_it != m_key_set.end())
+ const_iterator prime_it = m_keys.begin();
+ while (prime_it != m_keys.end())
{
- const_key_set_iterator sec_it = prime_it;
+ const_iterator sec_it = prime_it;
++sec_it;
- while (sec_it != m_key_set.end())
+ while (sec_it != m_keys.end())
{
- _GLIBCXX_DEBUG_ASSERT(!m_eq(*sec_it, *prime_it));
- _GLIBCXX_DEBUG_ASSERT(!m_eq(*prime_it, *sec_it));
+ PB_DS_DEBUG_VERIFY(!m_eq(*sec_it, *prime_it));
+ PB_DS_DEBUG_VERIFY(!m_eq(*prime_it, *sec_it));
++sec_it;
}
++prime_it;
@@ -307,15 +307,15 @@ namespace __gnu_pbds
template<typename Cmp_Fn>
void
PB_DS_CLASS_C_DEC::
- split(const_key_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other)
+ split(key_const_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other)
{
other.clear();
- key_set_iterator it = m_key_set.begin();
- while (it != m_key_set.end())
- if (cmp_fn(r_key, * it))
+ iterator it = m_keys.begin();
+ while (it != m_keys.end())
+ if (cmp_fn(r_key, *it))
{
other.insert_new(*it);
- it = m_key_set.erase(it);
+ it = m_keys.erase(it);
}
else
++it;
@@ -324,15 +324,18 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
- join(PB_DS_CLASS_C_DEC& other)
+ join(PB_DS_CLASS_C_DEC& other, bool with_cleanup)
{
- key_set_iterator it = other.m_key_set.begin();
- while (it != other.m_key_set.end())
+ iterator it = other.m_keys.begin();
+ while (it != other.m_keys.end())
{
insert_new(*it);
- it = other.m_key_set.erase(it);
+ if (with_cleanup)
+ it = other.m_keys.erase(it);
+ else
+ ++it;
}
- _GLIBCXX_DEBUG_ASSERT(other.m_key_set.empty());
+ _GLIBCXX_DEBUG_ASSERT(!with_cleanup || other.m_keys.empty());
}
#undef PB_DS_CLASS_T_DEC
@@ -341,6 +344,7 @@ namespace __gnu_pbds
} // namespace detail
} // namespace __gnu_pbds
+
#endif
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
index ec95bca640..389bdcdb63 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -51,6 +51,7 @@ namespace __gnu_pbds
{
namespace detail
{
+ /// Equivalence function.
template<typename Key, class Cmp_Fn>
struct eq_by_less : private Cmp_Fn
{
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
index b21c252e2c..52844f6f9d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -36,7 +36,7 @@
/**
* @file hash_eq_fn.hpp
* Contains 2 eqivalence functions, one employing a hash value,
- * and one ignoring it.
+ * and one ignoring it.
*/
#ifndef PB_DS_HASH_EQ_FN_HPP
@@ -49,130 +49,61 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Key, class Eq_Fn, class Allocator, bool Store_Hash>
- struct hash_eq_fn;
+ /// Primary template.
+ template<typename Key, typename Eq_Fn, typename _Alloc, bool Store_Hash>
+ struct hash_eq_fn;
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, class Eq_Fn, class Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- hash_eq_fn<Key, Eq_Fn, Allocator, false>
-
- /**
- * Specialization 1- The client requests that hash values not be stored.
- **/
- template<typename Key, class Eq_Fn, class Allocator>
- struct hash_eq_fn<Key, Eq_Fn, Allocator, false> : public Eq_Fn
+ /// Specialization 1 - The client requests that hash values not be stored.
+ template<typename Key, typename Eq_Fn, typename _Alloc>
+ struct hash_eq_fn<Key, Eq_Fn, _Alloc, false> : public Eq_Fn
{
- typedef Eq_Fn eq_fn_base;
-
- typedef typename Allocator::template rebind<Key>::other key_allocator;
-
- typedef typename key_allocator::const_reference const_key_reference;
+ typedef Eq_Fn eq_fn_base;
+ typedef typename _Alloc::template rebind<Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
- hash_eq_fn();
+ hash_eq_fn() { }
- hash_eq_fn(const Eq_Fn& r_eq_fn);
+ hash_eq_fn(const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { }
- inline bool
- operator()(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const;
+ bool
+ operator()(key_const_reference r_lhs_key,
+ key_const_reference r_rhs_key) const
+ { return eq_fn_base::operator()(r_lhs_key, r_rhs_key); }
- inline void
- swap(const PB_DS_CLASS_C_DEC& other);
+ void
+ swap(const hash_eq_fn& other)
+ { std::swap((Eq_Fn&)(*this), (Eq_Fn&)other); }
};
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- hash_eq_fn()
- { }
-
- PB_DS_CLASS_T_DEC
- inline void
- PB_DS_CLASS_C_DEC::
- swap(const PB_DS_CLASS_C_DEC& other)
- { std::swap((Eq_Fn& )(*this), (Eq_Fn& )other); }
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- hash_eq_fn(const Eq_Fn& r_eq_fn) :
- Eq_Fn(r_eq_fn)
- { }
-
- PB_DS_CLASS_T_DEC
- inline bool
- PB_DS_CLASS_C_DEC::
- operator()(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const
- { return (eq_fn_base::operator()(r_lhs_key, r_rhs_key)); }
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, class Eq_Fn, class Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- hash_eq_fn<Key, Eq_Fn, Allocator, true>
-
- /**
- * Specialization 2- The client requests that hash values be stored.
- **/
- template<typename Key, class Eq_Fn, class Allocator>
- struct hash_eq_fn<Key, Eq_Fn, Allocator, true> :
- public Eq_Fn
- {
- typedef typename Allocator::size_type size_type;
-
- typedef Eq_Fn eq_fn_base;
- typedef typename Allocator::template rebind<Key>::other key_allocator;
+ /// Specialization 2 - The client requests that hash values be stored.
+ template<typename Key, class Eq_Fn, class _Alloc>
+ struct hash_eq_fn<Key, Eq_Fn, _Alloc, true> : public Eq_Fn
+ {
+ typedef typename _Alloc::size_type size_type;
+ typedef Eq_Fn eq_fn_base;
+ typedef typename _Alloc::template rebind<Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
- typedef typename key_allocator::const_reference const_key_reference;
+ hash_eq_fn() { }
- hash_eq_fn();
+ hash_eq_fn(const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { }
- hash_eq_fn(const Eq_Fn& r_eq_fn);
+ bool
+ operator()(key_const_reference r_lhs_key, size_type lhs_hash,
+ key_const_reference r_rhs_key, size_type rhs_hash) const
+ {
+ _GLIBCXX_DEBUG_ASSERT(!eq_fn_base::operator()(r_lhs_key, r_rhs_key)
+ || lhs_hash == rhs_hash);
- inline bool
- operator()(const_key_reference r_lhs_key, size_type lhs_hash,
- const_key_reference r_rhs_key, size_type rhs_hash) const;
+ return (lhs_hash == rhs_hash &&
+ eq_fn_base::operator()(r_lhs_key, r_rhs_key));
+ }
- inline void
- swap(const PB_DS_CLASS_C_DEC& other);
+ void
+ swap(const hash_eq_fn& other)
+ { std::swap((Eq_Fn&)(*this), (Eq_Fn&)(other)); }
};
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- hash_eq_fn()
- { }
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- hash_eq_fn(const Eq_Fn& r_eq_fn) :
- Eq_Fn(r_eq_fn)
- { }
-
- PB_DS_CLASS_T_DEC
- inline bool
- PB_DS_CLASS_C_DEC::
- operator()(const_key_reference r_lhs_key, size_type lhs_hash,
- const_key_reference r_rhs_key, size_type rhs_hash) const
- {
- _GLIBCXX_DEBUG_ASSERT(!eq_fn_base::operator()(r_lhs_key, r_rhs_key)
- || lhs_hash == rhs_hash);
-
- return (lhs_hash == rhs_hash &&
- eq_fn_base::operator()(r_lhs_key, r_rhs_key));
- }
-
- PB_DS_CLASS_T_DEC
- inline void
- PB_DS_CLASS_C_DEC::
- swap(const PB_DS_CLASS_C_DEC& other)
- { std::swap((Eq_Fn& )(*this), (Eq_Fn& )(other)); }
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
index 4ac145d3d5..8a51541b52 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,9 +35,9 @@
// warranty.
/**
- * @file constructor_destructor_fn_imps.hpp
+ * @file gp_hash_table_map_/constructor_destructor_fn_imps.hpp
* Contains implementations of gp_ht_map_'s constructors, destructor,
- * and related functions.
+ * and related functions.
*/
PB_DS_CLASS_T_DEC
@@ -55,41 +56,41 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME()
+PB_DS_GP_HASH_NAME()
: ranged_probe_fn_base(resize_base::get_nearest_larger_size(1)),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn)
+PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn)
: ranged_probe_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn)
+PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn)
: hash_eq_fn_base(r_eq_fn),
ranged_probe_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn),
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
+PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
const Comb_Probe_Fn& r_comb_hash_fn)
: hash_eq_fn_base(r_eq_fn),
ranged_probe_fn_base(resize_base::get_nearest_larger_size(1),
@@ -98,12 +99,12 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
m_entries(s_entry_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
+PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
const Comb_Probe_Fn& comb_hash_fn, const Probe_Fn& prober)
: hash_eq_fn_base(r_eq_fn),
ranged_probe_fn_base(resize_base::get_nearest_larger_size(1),
@@ -112,12 +113,12 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
m_entries(s_entry_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
+PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
const Comb_Probe_Fn& comb_hash_fn, const Probe_Fn& prober,
const Resize_Policy& r_resize_policy)
: hash_eq_fn_base(r_eq_fn), resize_base(r_resize_policy),
@@ -127,12 +128,12 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
m_entries(s_entry_allocator.allocate(m_num_e))
{
initialize();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
+PB_DS_GP_HASH_NAME(const PB_DS_CLASS_C_DEC& other) :
#ifdef _GLIBCXX_DEBUG
debug_base(other),
#endif
@@ -160,12 +161,12 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
deallocate_all();
__throw_exception_again;
}
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~PB_DS_CLASS_NAME()
+~PB_DS_GP_HASH_NAME()
{ deallocate_all(); }
PB_DS_CLASS_T_DEC
@@ -173,8 +174,8 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
std::swap(m_num_e, other.m_num_e);
std::swap(m_num_used_e, other.m_num_used_e);
std::swap(m_entries, other.m_entries);
@@ -182,8 +183,8 @@ swap(PB_DS_CLASS_C_DEC& other)
hash_eq_fn_base::swap(other);
resize_base::swap(other);
_GLIBCXX_DEBUG_ONLY(debug_base::swap(other));
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
index ec8069839b..d077cbf3ce 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructor_destructor_no_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s constructors, destructor,
* and related functions.
*/
@@ -42,7 +42,7 @@
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-constructor_insert_new_imp(const_mapped_reference r_val, size_type pos,
+constructor_insert_new_imp(mapped_const_reference r_val, size_type pos,
false_type)
{
_GLIBCXX_DEBUG_ASSERT(m_entries[pos].m_stat != valid_entry_status)k;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
index 5f30487590..ff83c20b8f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructor_destructor_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s constructors, destructor,
* and related functions.
*/
@@ -42,7 +42,7 @@
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-constructor_insert_new_imp(const_mapped_reference r_val, size_type pos,
+constructor_insert_new_imp(mapped_const_reference r_val, size_type pos,
true_type)
{
_GLIBCXX_DEBUG_ASSERT(m_entries[pos].m_stat != valid_entry_status);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
index d7018c62c4..cad9a733be 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file gp_hash_table_map_/debug_fn_imps.hpp
* Contains implementations of gp_ht_map_'s debug-mode functions.
*/
@@ -43,10 +43,11 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- debug_base::check_size(m_num_used_e);
- assert_entry_array_valid(m_entries, traits_base::m_store_extra_indicator);
+ debug_base::check_size(m_num_used_e, __file, __line);
+ assert_entry_array_valid(m_entries, traits_base::m_store_extra_indicator,
+ __file, __line);
}
#include <ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
index 86b4d7dafb..ff9bdae14a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_no_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s debug-mode functions.
*/
@@ -43,7 +43,8 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_entry_array_valid(const entry_array a_entries, false_type) const
+assert_entry_array_valid(const entry_array a_entries, false_type,
+ const char* __file, int __line) const
{
size_type iterated_num_used_e = 0;
for (size_type pos = 0; pos < m_num_e; ++pos)
@@ -56,16 +57,16 @@ assert_entry_array_valid(const entry_array a_entries, false_type) const
break;
case valid_entry_status:
{
- const_key_reference r_key = PB_DS_V2F(p_e->m_value);
- debug_base::check_key_exists(r_key);
+ key_const_reference r_key = PB_DS_V2F(p_e->m_value);
+ debug_base::check_key_exists(r_key, __file, __line);
++iterated_num_used_e;
break;
}
default:
- _GLIBCXX_DEBUG_ASSERT(0);
+ PB_DS_DEBUG_VERIFY(0);
};
}
- _GLIBCXX_DEBUG_ASSERT(iterated_num_used_e == m_num_used_e);
+ PB_DS_DEBUG_VERIFY(iterated_num_used_e == m_num_used_e);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
index 961f143617..488b6b9236 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/debug_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s debug-mode functions.
*/
@@ -43,7 +43,8 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_entry_array_valid(const entry_array a_entries, true_type) const
+assert_entry_array_valid(const entry_array a_entries, true_type,
+ const char* __file, int __line) const
{
size_type iterated_num_used_e = 0;
@@ -57,21 +58,21 @@ assert_entry_array_valid(const entry_array a_entries, true_type) const
break;
case valid_entry_status:
{
- const_key_reference r_key = PB_DS_V2F(p_e->m_value);
- debug_base::check_key_exists(r_key);
+ key_const_reference r_key = PB_DS_V2F(p_e->m_value);
+ debug_base::check_key_exists(r_key, __file, __line);
const comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(r_key);
- _GLIBCXX_DEBUG_ASSERT(p_e->m_hash == pos_hash_pair.second);
+ PB_DS_DEBUG_VERIFY(p_e->m_hash == pos_hash_pair.second);
++iterated_num_used_e;
break;
}
default:
- _GLIBCXX_DEBUG_ASSERT(0);
+ PB_DS_DEBUG_VERIFY(0);
};
}
- _GLIBCXX_DEBUG_ASSERT(iterated_num_used_e == m_num_used_e);
+ PB_DS_DEBUG_VERIFY(iterated_num_used_e == m_num_used_e);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
index 68878eb2a1..0e6227bc7c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file gp_hash_table_map_/erase_fn_imps.hpp
* Contains implementations of gp_ht_map_'s erase related functions.
*/
@@ -72,7 +72,7 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
size_type num_ersd = 0;
for (size_type pos = 0; pos < m_num_e; ++pos)
{
@@ -86,14 +86,14 @@ erase_if(Pred pred)
}
do_resize_if_needed_no_throw();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return num_ersd;
}
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{ return erase_imp(r_key, traits_base::m_store_extra_indicator); }
#include <ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
index 40d578ebef..d95b9a72b4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_no_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s erase related functions,
* when the hash value is not stored.
*/
@@ -42,9 +42,9 @@
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase_imp(const_key_reference r_key, false_type)
+erase_imp(key_const_reference r_key, false_type)
{
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
size_type hash = ranged_probe_fn_base::operator()(r_key);
size_type i;
resize_base::notify_erase_search_start();
@@ -58,8 +58,7 @@ erase_imp(const_key_reference r_key, false_type)
case empty_entry_status:
{
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(
- r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return false;
}
break;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
index 8155a52615..9ccad4f94b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/erase_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s erase related functions,
* when the hash value is stored.
*/
@@ -42,7 +42,7 @@
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase_imp(const_key_reference r_key, true_type)
+erase_imp(key_const_reference r_key, true_type)
{
const comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(r_key);
size_type i;
@@ -57,8 +57,7 @@ erase_imp(const_key_reference r_key, true_type)
case empty_entry_status:
{
resize_base::notify_erase_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(
- r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return false;
}
break;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
index dbd056927f..e6e9c5f0da 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,25 +34,25 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file gp_hash_table_map_/find_fn_imps.hpp
* Contains implementations of gp_ht_map_'s find related functions.
*/
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key)
+find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- return find_key_pointer(r_key, traits_base::m_store_extra_indicator);
+ PB_DS_ASSERT_VALID((*this))
+ return find_key_pointer(r_key, traits_base::m_store_extra_indicator);
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key) const
+find(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return const_cast<PB_DS_CLASS_C_DEC&>(*this).find_key_pointer(r_key, traits_base::m_store_extra_indicator);
}
@@ -63,7 +63,7 @@ find_end()
{ return 0; }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
find_end() const
{ return 0; }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
index 298604c80e..2af9781b5e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_no_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s find related functions,
* when the hash value is not stored.
*/
@@ -42,5 +42,5 @@
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::pointer
PB_DS_CLASS_C_DEC::
-find_key_pointer(const_key_reference r_key, false_type)
+find_key_pointer(key_const_reference r_key, false_type)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
index a44b8326e2..80c7788c70 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/find_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s insert related functions,
* when the hash value is stored.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
index 3e69b2ef05..e1161fb5d7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,8 +35,8 @@
// warranty.
/**
- * @file gp_ht_map_.hpp
- * Contains an implementation class for gp_ht_map_.
+ * @file gp_hash_table_map_/gp_ht_map_.hpp
+ * Contains an implementation class for general probing hash.
*/
#include <ext/pb_ds/tag_and_trait.hpp>
@@ -46,7 +47,7 @@
#include <utility>
#ifdef PB_DS_HT_MAP_TRACE_
#include <iostream>
-#endif
+#endif
#ifdef _GLIBCXX_DEBUG
#include <ext/pb_ds/detail/debug_map_base.hpp>
#endif
@@ -56,73 +57,106 @@ namespace __gnu_pbds
{
namespace detail
{
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Mapped, typename Hash_Fn, typename Eq_Fn, \
- typename Allocator, bool Store_Hash, typename Comb_Probe_Fn, \
- typename Probe_Fn, typename Resize_Policy>
-
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME gp_ht_map_data_
+#define PB_DS_GP_HASH_NAME gp_ht_map
#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME gp_ht_map_no_data_
-#endif
+#define PB_DS_GP_HASH_NAME gp_ht_set
+#endif
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Key, typename Mapped, typename Hash_Fn, typename Eq_Fn, \
+ typename _Alloc, bool Store_Hash, typename Comb_Probe_Fn, \
+ typename Probe_Fn, typename Resize_Policy>
#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME<Key, Mapped, Hash_Fn, Eq_Fn, Allocator, \
- Store_Hash, Comb_Probe_Fn, Probe_Fn, Resize_Policy>
+ PB_DS_GP_HASH_NAME<Key, Mapped, Hash_Fn, Eq_Fn, _Alloc, \
+ Store_Hash, Comb_Probe_Fn, Probe_Fn, Resize_Policy>
#define PB_DS_HASH_EQ_FN_C_DEC \
- hash_eq_fn<Key, Eq_Fn, Allocator, Store_Hash>
+ hash_eq_fn<Key, Eq_Fn, _Alloc, Store_Hash>
#define PB_DS_RANGED_PROBE_FN_C_DEC \
- ranged_probe_fn<Key, Hash_Fn, Allocator, Comb_Probe_Fn, Probe_Fn, Store_Hash>
+ ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn, Probe_Fn, Store_Hash>
-#define PB_DS_TYPES_TRAITS_C_DEC \
- types_traits<Key, Mapped, Allocator, Store_Hash>
+#define PB_DS_GP_HASH_TRAITS_BASE \
+ types_traits<Key, Mapped, _Alloc, Store_Hash>
#ifdef _GLIBCXX_DEBUG
#define PB_DS_DEBUG_MAP_BASE_C_DEC \
- debug_map_base<Key, Eq_Fn, typename Allocator::template rebind<Key>::other::const_reference>
-#endif
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#endif
+ debug_map_base<Key, Eq_Fn, \
+ typename _Alloc::template rebind<Key>::other::const_reference>
+#endif
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped()
-#endif
+ /**
+ * A general-probing hash-based container.
+ *
+ *
+ * @ingroup hash-detail
+ *
+ * @tparam Key Key type.
+ *
+ * @tparam Mapped Map type.
+ *
+ * @tparam Hash_Fn Hashing functor.
+ * Default is __gnu_cxx::hash.
+ *
+ * @tparam Eq_Fn Equal functor.
+ * Default std::equal_to<Key>
+ *
+ * @tparam _Alloc Allocator type.
+ *
+ * @tparam Store_Hash If key type stores extra metadata.
+ * Defaults to false.
+ *
+ * @tparam Comb_Probe_Fn Combining probe functor.
+ * If Hash_Fn is not null_type, then this
+ * is the ranged-probe functor; otherwise,
+ * this is the range-hashing functor.
+ * XXX See Design::Hash-Based Containers::Hash Policies.
+ * Default direct_mask_range_hashing.
+ *
+ * @tparam Probe_Fn Probe functor.
+ * Defaults to linear_probe_fn,
+ * also quadratic_probe_fn.
+ *
+ * @tparam Resize_Policy Resizes hash.
+ * Defaults to hash_standard_resize_policy,
+ * using hash_exponential_size_policy and
+ * hash_load_check_resize_trigger.
+ *
+ *
+ * Bases are: detail::hash_eq_fn, Resize_Policy, detail::ranged_probe_fn,
+ * detail::types_traits. (Optional: detail::debug_map_base.)
+ */
template<typename Key,
typename Mapped,
typename Hash_Fn,
typename Eq_Fn,
- typename Allocator,
+ typename _Alloc,
bool Store_Hash,
typename Comb_Probe_Fn,
typename Probe_Fn,
typename Resize_Policy>
- class PB_DS_CLASS_NAME :
+ class PB_DS_GP_HASH_NAME :
#ifdef _GLIBCXX_DEBUG
protected PB_DS_DEBUG_MAP_BASE_C_DEC,
-#endif
+#endif
public PB_DS_HASH_EQ_FN_C_DEC,
public Resize_Policy,
public PB_DS_RANGED_PROBE_FN_C_DEC,
- public PB_DS_TYPES_TRAITS_C_DEC
+ public PB_DS_GP_HASH_TRAITS_BASE
{
private:
- typedef PB_DS_TYPES_TRAITS_C_DEC traits_base;
- typedef typename traits_base::value_type value_type_;
- typedef typename traits_base::pointer pointer_;
+ typedef PB_DS_GP_HASH_TRAITS_BASE traits_base;
+ typedef typename traits_base::value_type value_type_;
+ typedef typename traits_base::pointer pointer_;
typedef typename traits_base::const_pointer const_pointer_;
- typedef typename traits_base::reference reference_;
+ typedef typename traits_base::reference reference_;
typedef typename traits_base::const_reference const_reference_;
- typedef typename traits_base::comp_hash comp_hash;
+ typedef typename traits_base::comp_hash comp_hash;
enum entry_status
{
@@ -131,30 +165,30 @@ namespace __gnu_pbds
erased_entry_status
} __attribute__ ((packed));
- struct entry : public traits_base::stored_value_type
+ struct entry : public traits_base::stored_data_type
{
entry_status m_stat;
};
- typedef typename Allocator::template rebind<entry>::other entry_allocator;
+ typedef typename _Alloc::template rebind<entry>::other entry_allocator;
typedef typename entry_allocator::pointer entry_pointer;
typedef typename entry_allocator::const_pointer const_entry_pointer;
typedef typename entry_allocator::reference entry_reference;
typedef typename entry_allocator::const_reference const_entry_reference;
typedef typename entry_allocator::pointer entry_array;
- typedef PB_DS_RANGED_PROBE_FN_C_DEC ranged_probe_fn_base;
+ typedef PB_DS_RANGED_PROBE_FN_C_DEC ranged_probe_fn_base;
#ifdef _GLIBCXX_DEBUG
- typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
-#endif
+ typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
+#endif
- typedef PB_DS_HASH_EQ_FN_C_DEC hash_eq_fn_base;
- typedef Resize_Policy resize_base;
+ typedef PB_DS_HASH_EQ_FN_C_DEC hash_eq_fn_base;
+ typedef Resize_Policy resize_base;
-#define PB_DS_GEN_POS typename Allocator::size_type
+#define PB_DS_GEN_POS typename _Alloc::size_type
-#include <ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/point_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/const_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/iterator.hpp>
@@ -162,30 +196,31 @@ namespace __gnu_pbds
#undef PB_DS_GEN_POS
public:
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
- typedef Hash_Fn hash_fn;
- typedef Eq_Fn eq_fn;
- typedef Probe_Fn probe_fn;
- typedef Comb_Probe_Fn comb_probe_fn;
- typedef Resize_Policy resize_policy;
-
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef Hash_Fn hash_fn;
+ typedef Eq_Fn eq_fn;
+ typedef Probe_Fn probe_fn;
+ typedef Comb_Probe_Fn comb_probe_fn;
+ typedef Resize_Policy resize_policy;
+
+ /// Value stores hash, true or false.
enum
{
store_hash = Store_Hash
};
- typedef typename traits_base::key_type key_type;
+ typedef typename traits_base::key_type key_type;
typedef typename traits_base::key_pointer key_pointer;
- typedef typename traits_base::const_key_pointer const_key_pointer;
+ typedef typename traits_base::key_const_pointer key_const_pointer;
typedef typename traits_base::key_reference key_reference;
- typedef typename traits_base::const_key_reference const_key_reference;
+ typedef typename traits_base::key_const_reference key_const_reference;
typedef typename traits_base::mapped_type mapped_type;
typedef typename traits_base::mapped_pointer mapped_pointer;
- typedef typename traits_base::const_mapped_pointer const_mapped_pointer;
+ typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
typedef typename traits_base::mapped_reference mapped_reference;
- typedef typename traits_base::const_mapped_reference const_mapped_reference;
+ typedef typename traits_base::mapped_const_reference mapped_const_reference;
typedef typename traits_base::value_type value_type;
typedef typename traits_base::pointer pointer;
typedef typename traits_base::const_pointer const_pointer;
@@ -193,50 +228,50 @@ namespace __gnu_pbds
typedef typename traits_base::const_reference const_reference;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef point_iterator_ point_iterator;
-#endif
+ typedef point_iterator_ point_iterator;
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
- typedef const_point_iterator_ point_iterator;
-#endif
+ typedef point_const_iterator_ point_iterator;
+#endif
- typedef const_point_iterator_ const_point_iterator;
+ typedef point_const_iterator_ point_const_iterator;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef iterator_ iterator;
-#endif
+ typedef iterator_ iterator;
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
- typedef const_iterator_ iterator;
-#endif
+ typedef const_iterator_ iterator;
+#endif
- typedef const_iterator_ const_iterator;
+ typedef const_iterator_ const_iterator;
- PB_DS_CLASS_NAME();
+ PB_DS_GP_HASH_NAME();
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
+ PB_DS_GP_HASH_NAME(const PB_DS_CLASS_C_DEC&);
- PB_DS_CLASS_NAME(const Hash_Fn&);
+ PB_DS_GP_HASH_NAME(const Hash_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&);
+ PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&);
+ PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&,
- const Probe_Fn&);
+ PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&,
+ const Probe_Fn&);
- PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&,
- const Probe_Fn&, const Resize_Policy&);
+ PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&,
+ const Probe_Fn&, const Resize_Policy&);
template<typename It>
void
- copy_from_range(It first_it, It last_it);
+ copy_from_range(It, It);
virtual
- ~PB_DS_CLASS_NAME();
+ ~PB_DS_GP_HASH_NAME();
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
inline size_type
size() const;
@@ -244,75 +279,86 @@ namespace __gnu_pbds
inline size_type
max_size() const;
+ /// True if size() == 0.
inline bool
empty() const;
- Hash_Fn&
+ /// Return current hash_fn.
+ Hash_Fn&
get_hash_fn();
- const Hash_Fn&
+ /// Return current const hash_fn.
+ const Hash_Fn&
get_hash_fn() const;
- Eq_Fn&
+ /// Return current eq_fn.
+ Eq_Fn&
get_eq_fn();
- const Eq_Fn&
+ /// Return current const eq_fn.
+ const Eq_Fn&
get_eq_fn() const;
- Probe_Fn&
+ /// Return current probe_fn.
+ Probe_Fn&
get_probe_fn();
- const Probe_Fn&
+ /// Return current const probe_fn.
+ const Probe_Fn&
get_probe_fn() const;
- Comb_Probe_Fn&
+ /// Return current comb_probe_fn.
+ Comb_Probe_Fn&
get_comb_probe_fn();
- const Comb_Probe_Fn&
+ /// Return current const comb_probe_fn.
+ const Comb_Probe_Fn&
get_comb_probe_fn() const;
- Resize_Policy&
+ /// Return current resize_policy.
+ Resize_Policy&
get_resize_policy();
- const Resize_Policy&
+ /// Return current const resize_policy.
+ const Resize_Policy&
get_resize_policy() const;
inline std::pair<point_iterator, bool>
insert(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
- return insert_imp(r_val, traits_base::m_store_extra_indicator);
+ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid(__FILE__, __LINE__);)
+ return insert_imp(r_val, traits_base::m_store_extra_indicator);
}
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
return subscript_imp(r_key, traits_base::m_store_extra_indicator);
-#else
+#else
insert(r_key);
- return traits_base::s_null_mapped;
+ return traits_base::s_null_type;
#endif
}
inline point_iterator
- find(const_key_reference r_key);
+ find(key_const_reference);
- inline const_point_iterator
- find(const_key_reference r_key) const;
+ inline point_const_iterator
+ find(key_const_reference) const;
inline point_iterator
find_end();
- inline const_point_iterator
+ inline point_const_iterator
find_end() const;
inline bool
- erase(const_key_reference r_key);
+ erase(key_const_reference);
template<typename Pred>
- inline size_type
- erase_if(Pred prd);
+ inline size_type
+ erase_if(Pred);
void
clear();
@@ -325,24 +371,24 @@ namespace __gnu_pbds
inline iterator
end();
-
+
inline const_iterator
end() const;
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char*, int) const;
+#endif
#ifdef PB_DS_HT_MAP_TRACE_
void
trace() const;
-#endif
+#endif
private:
#ifdef PB_DS_DATA_TRUE_INDICATOR
friend class iterator_;
-#endif
+#endif
friend class const_iterator_;
@@ -377,10 +423,10 @@ namespace __gnu_pbds
resize_imp_reassign(entry_pointer, entry_array, true_type);
inline size_type
- find_ins_pos(const_key_reference, false_type);
+ find_ins_pos(key_const_reference, false_type);
inline comp_hash
- find_ins_pos(const_key_reference, true_type);
+ find_ins_pos(key_const_reference, true_type);
inline std::pair<point_iterator, bool>
insert_imp(const_reference, false_type);
@@ -398,15 +444,13 @@ namespace __gnu_pbds
traits_base::m_store_extra_indicator);
_GLIBCXX_DEBUG_ASSERT(m_entries[pos].m_stat != valid_entry_status);
-
entry* const p_e = m_entries + pos;
new (&p_e->m_value) value_type(r_val);
p_e->m_stat = valid_entry_status;
resize_base::notify_inserted(++m_num_used_e);
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(p_e->m_value));)
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return &p_e->m_value;
}
@@ -414,7 +458,7 @@ namespace __gnu_pbds
insert_new_imp(const_reference r_val, comp_hash& r_pos_hash_pair)
{
_GLIBCXX_DEBUG_ASSERT(m_entries[r_pos_hash_pair.first].m_stat !=
- valid_entry_status);
+ valid_entry_status);
if (do_resize_if_needed())
r_pos_hash_pair = find_ins_pos(PB_DS_V2F(r_val),
@@ -431,56 +475,55 @@ namespace __gnu_pbds
resize_base::notify_inserted(++m_num_used_e);
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(p_e->m_value));)
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return &p_e->m_value;
}
#ifdef PB_DS_DATA_TRUE_INDICATOR
inline mapped_reference
- subscript_imp(const_key_reference key, false_type)
+ subscript_imp(key_const_reference key, false_type)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
- const size_type pos = find_ins_pos(key,
+ const size_type pos = find_ins_pos(key,
traits_base::m_store_extra_indicator);
entry_pointer p_e = &m_entries[pos];
if (p_e->m_stat != valid_entry_status)
return insert_new_imp(value_type(key, mapped_type()), pos)->second;
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(key);)
+ PB_DS_CHECK_KEY_EXISTS(key)
return p_e->m_value.second;
}
inline mapped_reference
- subscript_imp(const_key_reference key, true_type)
+ subscript_imp(key_const_reference key, true_type)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
- comp_hash pos_hash_pair =
- find_ins_pos(key, traits_base::m_store_extra_indicator);
+ comp_hash pos_hash_pair = find_ins_pos(key,
+ traits_base::m_store_extra_indicator);
if (m_entries[pos_hash_pair.first].m_stat != valid_entry_status)
return insert_new_imp(value_type(key, mapped_type()),
pos_hash_pair)->second;
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(key));
+ PB_DS_CHECK_KEY_EXISTS(key)
return (m_entries + pos_hash_pair.first)->m_value.second;
}
#endif
inline pointer
- find_key_pointer(const_key_reference key, false_type)
+ find_key_pointer(key_const_reference key, false_type)
{
const size_type hash = ranged_probe_fn_base::operator()(key);
- size_type i;
resize_base::notify_find_search_start();
// Loop until entry is found or until all possible entries accessed.
- for (i = 0; i < m_num_e; ++i)
+ for (size_type i = 0; i < m_num_e; ++i)
{
- const size_type pos = ranged_probe_fn_base::operator()(key, hash, i);
+ const size_type pos = ranged_probe_fn_base::operator()(key,
+ hash, i);
entry* const p_e = m_entries + pos;
switch (p_e->m_stat)
@@ -488,17 +531,15 @@ namespace __gnu_pbds
case empty_entry_status:
{
resize_base::notify_find_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
-
- return 0;
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(key)
+ return 0;
}
break;
case valid_entry_status:
if (hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), key))
{
resize_base::notify_find_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(key);)
-
+ PB_DS_CHECK_KEY_EXISTS(key)
return pointer(&p_e->m_value);
}
break;
@@ -511,20 +552,19 @@ namespace __gnu_pbds
resize_base::notify_find_search_collision();
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(key)
resize_base::notify_find_search_end();
return 0;
}
inline pointer
- find_key_pointer(const_key_reference key, true_type)
+ find_key_pointer(key_const_reference key, true_type)
{
comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(key);
- size_type i;
resize_base::notify_find_search_start();
// Loop until entry is found or until all possible entries accessed.
- for (i = 0; i < m_num_e; ++i)
+ for (size_type i = 0; i < m_num_e; ++i)
{
const size_type pos =
ranged_probe_fn_base::operator()(key, pos_hash_pair.second, i);
@@ -536,8 +576,7 @@ namespace __gnu_pbds
case empty_entry_status:
{
resize_base::notify_find_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
-
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(key)
return 0;
}
break;
@@ -547,7 +586,7 @@ namespace __gnu_pbds
key, pos_hash_pair.second))
{
resize_base::notify_find_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(key);)
+ PB_DS_CHECK_KEY_EXISTS(key)
return pointer(&p_e->m_value);
}
break;
@@ -560,25 +599,25 @@ namespace __gnu_pbds
resize_base::notify_find_search_collision();
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(key)
resize_base::notify_find_search_end();
return 0;
}
inline bool
- erase_imp(const_key_reference, true_type);
+ erase_imp(key_const_reference, true_type);
inline bool
- erase_imp(const_key_reference, false_type);
+ erase_imp(key_const_reference, false_type);
inline void
- erase_entry(entry_pointer p_e);
+ erase_entry(entry_pointer);
#ifdef PB_DS_DATA_TRUE_INDICATOR
void
inc_it_state(pointer& r_p_value, size_type& r_pos) const
- { inc_it_state((const_mapped_pointer& )r_p_value, r_pos); }
-#endif
+ { inc_it_state((mapped_const_pointer& )r_p_value, r_pos); }
+#endif
void
inc_it_state(const_pointer& r_p_value, size_type& r_pos) const
@@ -628,11 +667,13 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
void
- assert_entry_array_valid(const entry_array, false_type) const;
+ assert_entry_array_valid(const entry_array, false_type,
+ const char*, int) const;
void
- assert_entry_array_valid(const entry_array, true_type) const;
-#endif
+ assert_entry_array_valid(const entry_array, true_type,
+ const char*, int) const;
+#endif
static entry_allocator s_entry_allocator;
static iterator s_end_it;
@@ -644,8 +685,8 @@ namespace __gnu_pbds
enum
{
- store_hash_ok = !Store_Hash
- || !is_same<Hash_Fn, __gnu_pbds::null_hash_fn>::value
+ store_hash_ok = !Store_Hash
+ || !is_same<Hash_Fn, __gnu_pbds::null_type>::value
};
PB_DS_STATIC_ASSERT(sth, store_hash_ok);
@@ -666,12 +707,8 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_HASH_EQ_FN_C_DEC
#undef PB_DS_RANGED_PROBE_FN_C_DEC
-#undef PB_DS_TYPES_TRAITS_C_DEC
+#undef PB_DS_GP_HASH_TRAITS_BASE
#undef PB_DS_DEBUG_MAP_BASE_C_DEC
-#undef PB_DS_CLASS_NAME
-#undef PB_DS_V2F
-#undef PB_DS_V2S
-
+#undef PB_DS_GP_HASH_NAME
} // namespace detail
} // namespace __gnu_pbds
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
index 423a9288e5..8fa762b771 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file gp_hash_table_map_/info_fn_imps.hpp
* Contains implementations of gp_ht_map_'s entire container info related
- * functions.
+ * functions.
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
index 101ce8c6be..03731778be 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file gp_hash_table_map_/insert_fn_imps.hpp
* Contains implementations of gp_ht_map_'s insert related functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
index 3227a4aaac..03b2c9b8ee 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_no_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s insert related functions,
* when the hash value is not stored.
*/
@@ -42,7 +42,7 @@
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-find_ins_pos(const_key_reference r_key, false_type)
+find_ins_pos(key_const_reference r_key, false_type)
{
size_type hash = ranged_probe_fn_base::operator()(r_key);
size_type i;
@@ -62,7 +62,7 @@ find_ins_pos(const_key_reference r_key, false_type)
case empty_entry_status:
{
resize_base::notify_insert_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return (ins_pos == m_num_e) ? pos : ins_pos;
}
break;
@@ -74,7 +74,7 @@ find_ins_pos(const_key_reference r_key, false_type)
if (hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), r_key))
{
resize_base::notify_insert_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return pos;
}
break;
@@ -95,17 +95,17 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert_imp(const_reference r_val, false_type)
{
- const_key_reference r_key = PB_DS_V2F(r_val);
+ key_const_reference r_key = PB_DS_V2F(r_val);
const size_type pos = find_ins_pos(r_key,
traits_base::m_store_extra_indicator);
if (m_entries[pos].m_stat == valid_entry_status)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return std::make_pair(&(m_entries + pos)->m_value, false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return std::make_pair(insert_new_imp(r_val, pos), true);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
index f4310b6295..856306a7ab 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/insert_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s find related functions,
* when the hash value is stored.
*/
@@ -42,9 +42,9 @@
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::comp_hash
PB_DS_CLASS_C_DEC::
-find_ins_pos(const_key_reference r_key, true_type)
+find_ins_pos(key_const_reference r_key, true_type)
{
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(r_key);
size_type i;
@@ -64,7 +64,7 @@ find_ins_pos(const_key_reference r_key, true_type)
case empty_entry_status:
{
resize_base::notify_insert_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return ((ins_pos == m_num_e) ?
std::make_pair(pos, pos_hash_pair.second) :
@@ -80,7 +80,7 @@ find_ins_pos(const_key_reference r_key, true_type)
r_key, pos_hash_pair.second))
{
resize_base::notify_insert_search_end();
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return std::make_pair(pos, pos_hash_pair.second);
}
break;
@@ -100,7 +100,7 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert_imp(const_reference r_val, true_type)
{
- const_key_reference r_key = PB_DS_V2F(r_val);
+ key_const_reference r_key = PB_DS_V2F(r_val);
comp_hash pos_hash_pair = find_ins_pos(r_key,
traits_base::m_store_extra_indicator);
@@ -108,11 +108,11 @@ insert_imp(const_reference r_val, true_type)
entry_pointer p_e =& m_entries[pos_hash_pair.first];
if (p_e->m_stat == valid_entry_status)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return std::make_pair(&p_e->m_value, false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return std::make_pair(insert_new_imp(r_val, pos_hash_pair), true);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
index ff1f80f28f..695b03eedc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file iterator_fn_imps.hpp
+ * @file gp_hash_table_map_/iterator_fn_imps.hpp
* Contains implementations of gp_ht_map_'s iterators related functions, e.g.,
- * begin().
+ * begin().
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
index b1a3f7a7e6..22afeb7690 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
+ * @file gp_hash_table_map_/policy_access_fn_imps.hpp
* Contains implementations of gp_ht_map_'s policy agpess
- * functions.
+ * functions.
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
index e1b837aa1c..76b6174efe 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file resize_fn_imps.hpp
+ * @file gp_hash_table_map_/resize_fn_imps.hpp
* Contains implementations of gp_ht_map_'s resize related functions.
*/
@@ -71,7 +71,7 @@ do_resize_if_needed_no_throw()
__catch(...)
{ }
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -80,13 +80,13 @@ PB_DS_CLASS_C_DEC::
resize_imp(size_type new_size)
{
#ifdef PB_DS_REGRESSION
- typename Allocator::group_adjustor adjust(m_num_e);
+ typename _Alloc::group_adjustor adjust(m_num_e);
#endif
if (new_size == m_num_e)
return;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
const size_type old_size = m_num_e;
entry_array a_entries_resized = 0;
@@ -113,13 +113,15 @@ resize_imp(size_type new_size)
}
// At this point no exceptions can be thrown.
- _GLIBCXX_DEBUG_ONLY(assert_entry_array_valid(a_entries_resized, traits_base::m_store_extra_indicator);)
+ _GLIBCXX_DEBUG_ONLY(assert_entry_array_valid(a_entries_resized,
+ traits_base::m_store_extra_indicator,
+ __FILE__, __LINE__);)
Resize_Policy::notify_resized(new_size);
erase_all_valid_entries(m_entries, old_size);
s_entry_allocator.deallocate(m_entries, old_size);
m_entries = a_entries_resized;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
index 1d2839e0ac..8819238b6d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file resize_no_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s resize related functions, when the
- * hash value is not stored.
+ * hash value is not stored.
*/
PB_DS_CLASS_T_DEC
@@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC::
resize_imp_reassign(entry_pointer p_e, entry_array a_entries_resized,
false_type)
{
- const_key_reference r_key = PB_DS_V2F(p_e->m_value);
+ key_const_reference r_key = PB_DS_V2F(p_e->m_value);
size_type hash = ranged_probe_fn_base::operator()(r_key);
size_type i;
for (i = 0; i < m_num_e; ++i)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
index 765e9624b8..c291747ed1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
@@ -34,9 +34,9 @@
// warranty.
/**
- * @file resize_store_hash_fn_imps.hpp
+ * @file gp_hash_table_map_/resize_store_hash_fn_imps.hpp
* Contains implementations of gp_ht_map_'s resize related functions, when the
- * hash value is stored.
+ * hash value is stored.
*/
PB_DS_CLASS_T_DEC
@@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC::
resize_imp_reassign(entry_pointer p_e, entry_array a_entries_resized,
true_type)
{
- const_key_reference r_key = PB_DS_V2F(p_e->m_value);
+ key_const_reference r_key = PB_DS_V2F(p_e->m_value);
size_type hash = ranged_probe_fn_base::operator()(r_key, p_e->m_hash);
size_type i;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
index dac063927f..74aeba4d63 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file standard_policies.hpp
+ * @file gp_hash_table_map_/standard_policies.hpp
* Contains standard policies for gp_ht_map types.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
index c3fe13c008..0e6a7da087 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file gp_hash_table_map_/trace_fn_imps.hpp
* Contains implementations of gp_ht_map_'s trace-mode functions.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
index 936abbee17..6fe8465c64 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
@@ -45,14 +45,12 @@ namespace __gnu_pbds
{
namespace detail
{
-#define PB_DS_CLASS_T_DEC template<typename Size_Type>
-#define PB_DS_CLASS_C_DEC mask_based_range_hashing<Size_Type>
-
+ /// Range hashing policy.
template<typename Size_Type>
class mask_based_range_hashing
{
protected:
- typedef Size_Type size_type;
+ typedef Size_Type size_type;
void
swap(mask_based_range_hashing& other)
@@ -71,18 +69,18 @@ namespace __gnu_pbds
const static size_type s_highest_bit_1;
};
- PB_DS_CLASS_T_DEC
- const typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::s_num_bits_in_size_type =
- sizeof(typename PB_DS_CLASS_C_DEC::size_type) << 3;
+ template<typename Size_Type>
+ const typename mask_based_range_hashing<Size_Type>::size_type
+ mask_based_range_hashing<Size_Type>::s_num_bits_in_size_type =
+ sizeof(typename mask_based_range_hashing<Size_Type>::size_type) << 3;
- PB_DS_CLASS_T_DEC
- const typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC::s_highest_bit_1 = static_cast<typename PB_DS_CLASS_C_DEC::size_type>(1) << (s_num_bits_in_size_type - 1);
+ template<typename Size_Type>
+ const typename mask_based_range_hashing<Size_Type>::size_type mask_based_range_hashing<Size_Type>::s_highest_bit_1 = static_cast<typename mask_based_range_hashing<Size_Type>::size_type>(1) << (s_num_bits_in_size_type - 1);
- PB_DS_CLASS_T_DEC
+ template<typename Size_Type>
void
- PB_DS_CLASS_C_DEC::
+ mask_based_range_hashing<Size_Type>::
notify_resized(size_type size)
{
size_type i = 0;
@@ -97,10 +95,6 @@ namespace __gnu_pbds
while (i++ < s_num_bits_in_size_type)
m_mask = (m_mask << 1) ^ 1;
}
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
index 2610e04577..2c14c8607b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
@@ -43,64 +43,30 @@
namespace __gnu_pbds
{
-
namespace detail
{
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Size_Type>
-
-#define PB_DS_CLASS_C_DEC \
- mod_based_range_hashing< \
- Size_Type>
-
+ /// Mod based range hashing.
template<typename Size_Type>
class mod_based_range_hashing
{
protected:
- typedef Size_Type size_type;
+ typedef Size_Type size_type;
- protected:
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(mod_based_range_hashing& other)
+ { std::swap(m_size, other.m_size); }
void
- notify_resized(size_type size);
+ notify_resized(size_type s)
+ { m_size = s; }
inline size_type
- range_hash(size_type hash) const;
+ range_hash(size_type s) const
+ { return s % m_size; }
private:
size_type m_size;
};
-
- PB_DS_CLASS_T_DEC
- void
- PB_DS_CLASS_C_DEC::
- swap(PB_DS_CLASS_C_DEC& other)
- {
- std::swap(m_size, other.m_size);
- }
-
- PB_DS_CLASS_T_DEC
- void
- PB_DS_CLASS_C_DEC::
- notify_resized(size_type size)
- {
- m_size = size;
- }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
- range_hash(size_type hash) const
- {
- return (hash % m_size);
- }
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
index 970cfc1e55..8907f08585 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
@@ -47,7 +47,8 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Allocator>
+ /// Probe functor base.
+ template<typename _Alloc>
class probe_fn_base
{
protected:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
index 24899272f8..f71b843f01 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -42,7 +42,6 @@
#ifndef PB_DS_RANGED_HASH_FN_HPP
#define PB_DS_RANGED_HASH_FN_HPP
-#include <ext/pb_ds/detail/basic_types.hpp>
#include <utility>
#include <debug/debug.h>
@@ -50,33 +49,34 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Key, typename Hash_Fn, typename Allocator,
+ /// Primary template.
+ template<typename Key, typename Hash_Fn, typename _Alloc,
typename Comb_Hash_Fn, bool Store_Hash>
class ranged_hash_fn;
#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Hash_Fn, typename Allocator, \
+ template<typename Key, typename Hash_Fn, typename _Alloc, \
typename Comb_Hash_Fn>
#define PB_DS_CLASS_C_DEC \
- ranged_hash_fn<Key, Hash_Fn, Allocator, Comb_Hash_Fn, false>
+ ranged_hash_fn<Key, Hash_Fn, _Alloc, Comb_Hash_Fn, false>
/**
* Specialization 1
* The client supplies a hash function and a ranged hash function,
* and requests that hash values not be stored.
**/
- template<typename Key, typename Hash_Fn, typename Allocator,
+ template<typename Key, typename Hash_Fn, typename _Alloc,
typename Comb_Hash_Fn>
- class ranged_hash_fn< Key, Hash_Fn, Allocator, Comb_Hash_Fn, false>
+ class ranged_hash_fn< Key, Hash_Fn, _Alloc, Comb_Hash_Fn, false>
: public Hash_Fn, public Comb_Hash_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef Hash_Fn hash_fn_base;
typedef Comb_Hash_Fn comb_hash_fn_base;
- typedef typename Allocator::template rebind< Key>::other key_allocator;
- typedef typename key_allocator::const_reference const_key_reference;
+ typedef typename _Alloc::template rebind< Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
ranged_hash_fn(size_type);
@@ -91,7 +91,7 @@ namespace __gnu_pbds
notify_resized(size_type);
inline size_type
- operator()(const_key_reference) const;
+ operator()(key_const_reference) const;
};
PB_DS_CLASS_T_DEC
@@ -130,36 +130,36 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
- operator()(const_key_reference r_key) const
+ operator()(key_const_reference r_key) const
{ return (comb_hash_fn_base::operator()(hash_fn_base::operator()(r_key)));}
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Hash_Fn, typename Allocator, \
+ template<typename Key, typename Hash_Fn, typename _Alloc, \
typename Comb_Hash_Fn>
#define PB_DS_CLASS_C_DEC \
- ranged_hash_fn<Key,Hash_Fn, Allocator, Comb_Hash_Fn, true>
+ ranged_hash_fn<Key,Hash_Fn, _Alloc, Comb_Hash_Fn, true>
/**
* Specialization 2
* The client supplies a hash function and a ranged hash function,
* and requests that hash values be stored.
**/
- template<typename Key, typename Hash_Fn, typename Allocator,
+ template<typename Key, typename Hash_Fn, typename _Alloc,
typename Comb_Hash_Fn>
- class ranged_hash_fn<Key, Hash_Fn, Allocator, Comb_Hash_Fn, true>
+ class ranged_hash_fn<Key, Hash_Fn, _Alloc, Comb_Hash_Fn, true>
: public Hash_Fn, public Comb_Hash_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef std::pair<size_type, size_type> comp_hash;
typedef Hash_Fn hash_fn_base;
typedef Comb_Hash_Fn comb_hash_fn_base;
- typedef typename Allocator::template rebind<Key>::other key_allocator;
- typedef typename key_allocator::const_reference const_key_reference;
+ typedef typename _Alloc::template rebind<Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
ranged_hash_fn(size_type);
@@ -174,10 +174,10 @@ namespace __gnu_pbds
notify_resized(size_type);
inline comp_hash
- operator()(const_key_reference) const;
+ operator()(key_const_reference) const;
inline comp_hash
- operator()(const_key_reference, size_type) const;
+ operator()(key_const_reference, size_type) const;
};
PB_DS_CLASS_T_DEC
@@ -216,7 +216,7 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::comp_hash
PB_DS_CLASS_C_DEC::
- operator()(const_key_reference r_key) const
+ operator()(key_const_reference r_key) const
{
const size_type hash = hash_fn_base::operator()(r_key);
return std::make_pair(comb_hash_fn_base::operator()(hash), hash);
@@ -227,9 +227,9 @@ namespace __gnu_pbds
PB_DS_CLASS_C_DEC::
operator()
#ifdef _GLIBCXX_DEBUG
- (const_key_reference r_key, size_type hash) const
+ (key_const_reference r_key, size_type hash) const
#else
- (const_key_reference /*r_key*/, size_type hash) const
+ (key_const_reference /*r_key*/, size_type hash) const
#endif
{
_GLIBCXX_DEBUG_ASSERT(hash == hash_fn_base::operator()(r_key));
@@ -240,30 +240,30 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Allocator, typename Comb_Hash_Fn>
+ template<typename Key, typename _Alloc, typename Comb_Hash_Fn>
#define PB_DS_CLASS_C_DEC \
- ranged_hash_fn<Key, null_hash_fn, Allocator, Comb_Hash_Fn, false>
+ ranged_hash_fn<Key, null_type, _Alloc, Comb_Hash_Fn, false>
/**
* Specialization 3
* The client does not supply a hash function (by specifying
- * null_hash_fn as the Hash_Fn parameter), and requests that hash
+ * null_type as the Hash_Fn parameter), and requests that hash
* values not be stored.
**/
- template<typename Key, typename Allocator, typename Comb_Hash_Fn>
- class ranged_hash_fn<Key, null_hash_fn, Allocator, Comb_Hash_Fn, false>
- : public null_hash_fn, public Comb_Hash_Fn
+ template<typename Key, typename _Alloc, typename Comb_Hash_Fn>
+ class ranged_hash_fn<Key, null_type, _Alloc, Comb_Hash_Fn, false>
+ : public Comb_Hash_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef Comb_Hash_Fn comb_hash_fn_base;
ranged_hash_fn(size_type);
ranged_hash_fn(size_type, const Comb_Hash_Fn&);
- ranged_hash_fn(size_type, const null_hash_fn&, const Comb_Hash_Fn&);
+ ranged_hash_fn(size_type, const null_type&, const Comb_Hash_Fn&);
void
swap(PB_DS_CLASS_C_DEC&);
@@ -282,7 +282,7 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
- ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn,
+ ranged_hash_fn(size_type size, const null_type& r_null_type,
const Comb_Hash_Fn& r_comb_hash_fn)
: Comb_Hash_Fn(r_comb_hash_fn)
{ }
@@ -297,30 +297,30 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Allocator, typename Comb_Hash_Fn>
+ template<typename Key, typename _Alloc, typename Comb_Hash_Fn>
#define PB_DS_CLASS_C_DEC \
- ranged_hash_fn<Key, null_hash_fn, Allocator, Comb_Hash_Fn, true>
+ ranged_hash_fn<Key, null_type, _Alloc, Comb_Hash_Fn, true>
/**
* Specialization 4
* The client does not supply a hash function (by specifying
- * null_hash_fn as the Hash_Fn parameter), and requests that hash
+ * null_type as the Hash_Fn parameter), and requests that hash
* values be stored.
**/
- template<typename Key, typename Allocator, typename Comb_Hash_Fn>
- class ranged_hash_fn<Key, null_hash_fn, Allocator, Comb_Hash_Fn, true>
- : public null_hash_fn, public Comb_Hash_Fn
+ template<typename Key, typename _Alloc, typename Comb_Hash_Fn>
+ class ranged_hash_fn<Key, null_type, _Alloc, Comb_Hash_Fn, true>
+ : public Comb_Hash_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef Comb_Hash_Fn comb_hash_fn_base;
ranged_hash_fn(size_type);
ranged_hash_fn(size_type, const Comb_Hash_Fn&);
- ranged_hash_fn(size_type, const null_hash_fn&, const Comb_Hash_Fn&);
+ ranged_hash_fn(size_type, const null_type&, const Comb_Hash_Fn&);
void
swap(PB_DS_CLASS_C_DEC&);
@@ -339,7 +339,7 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
- ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn,
+ ranged_hash_fn(size_type size, const null_type& r_null_type,
const Comb_Hash_Fn& r_comb_hash_fn)
: Comb_Hash_Fn(r_comb_hash_fn)
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
index ddfba9de1f..4c24f49265 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
@@ -42,7 +42,6 @@
#ifndef PB_DS_RANGED_PROBE_FN_HPP
#define PB_DS_RANGED_PROBE_FN_HPP
-#include <ext/pb_ds/detail/basic_types.hpp>
#include <utility>
#include <debug/debug.h>
@@ -50,35 +49,36 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Key, typename Hash_Fn, typename Allocator,
+ /// Primary template.
+ template<typename Key, typename Hash_Fn, typename _Alloc,
typename Comb_Probe_Fn, typename Probe_Fn, bool Store_Hash>
class ranged_probe_fn;
#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Hash_Fn, typename Allocator, \
+ template<typename Key, typename Hash_Fn, typename _Alloc, \
typename Comb_Probe_Fn, typename Probe_Fn>
#define PB_DS_CLASS_C_DEC \
- ranged_probe_fn<Key, Hash_Fn, Allocator, Comb_Probe_Fn, Probe_Fn, false>
+ ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn, Probe_Fn, false>
/**
* Specialization 1
* The client supplies a probe function and a ranged probe
* function, and requests that hash values not be stored.
**/
- template<typename Key, typename Hash_Fn, typename Allocator,
+ template<typename Key, typename Hash_Fn, typename _Alloc,
typename Comb_Probe_Fn, typename Probe_Fn>
- class ranged_probe_fn<Key, Hash_Fn, Allocator, Comb_Probe_Fn,
+ class ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn,
Probe_Fn, false>
: public Hash_Fn, public Comb_Probe_Fn, public Probe_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef Comb_Probe_Fn comb_probe_fn_base;
typedef Hash_Fn hash_fn_base;
typedef Probe_Fn probe_fn_base;
- typedef typename Allocator::template rebind<Key>::other key_allocator;
- typedef typename key_allocator::const_reference const_key_reference;
+ typedef typename _Alloc::template rebind<Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
ranged_probe_fn(size_type);
@@ -96,10 +96,10 @@ namespace __gnu_pbds
notify_resized(size_type);
inline size_type
- operator()(const_key_reference) const;
+ operator()(key_const_reference) const;
inline size_type
- operator()(const_key_reference, size_type, size_type) const;
+ operator()(key_const_reference, size_type, size_type) const;
};
PB_DS_CLASS_T_DEC
@@ -146,13 +146,13 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
- operator()(const_key_reference r_key) const
+ operator()(key_const_reference r_key) const
{ return comb_probe_fn_base::operator()(hash_fn_base::operator()(r_key)); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
- operator()(const_key_reference, size_type hash, size_type i) const
+ operator()(key_const_reference, size_type hash, size_type i) const
{
return comb_probe_fn_base::operator()(hash + probe_fn_base::operator()(i));
}
@@ -161,30 +161,30 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Hash_Fn, typename Allocator, \
+ template<typename Key, typename Hash_Fn, typename _Alloc, \
typename Comb_Probe_Fn, typename Probe_Fn>
#define PB_DS_CLASS_C_DEC \
- ranged_probe_fn<Key, Hash_Fn, Allocator, Comb_Probe_Fn, Probe_Fn, true>
+ ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn, Probe_Fn, true>
/**
* Specialization 2- The client supplies a probe function and a ranged
* probe function, and requests that hash values not be stored.
**/
- template<typename Key, typename Hash_Fn, typename Allocator,
+ template<typename Key, typename Hash_Fn, typename _Alloc,
typename Comb_Probe_Fn, typename Probe_Fn>
- class ranged_probe_fn<Key, Hash_Fn, Allocator, Comb_Probe_Fn,
+ class ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn,
Probe_Fn, true>
: public Hash_Fn, public Comb_Probe_Fn, public Probe_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef std::pair<size_type, size_type> comp_hash;
typedef Comb_Probe_Fn comb_probe_fn_base;
typedef Hash_Fn hash_fn_base;
typedef Probe_Fn probe_fn_base;
- typedef typename Allocator::template rebind<Key>::other key_allocator;
- typedef typename key_allocator::const_reference const_key_reference;
+ typedef typename _Alloc::template rebind<Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
ranged_probe_fn(size_type);
@@ -203,13 +203,13 @@ namespace __gnu_pbds
notify_resized(size_type);
inline comp_hash
- operator()(const_key_reference) const;
+ operator()(key_const_reference) const;
inline size_type
- operator()(const_key_reference, size_type, size_type) const;
+ operator()(key_const_reference, size_type, size_type) const;
inline size_type
- operator()(const_key_reference, size_type) const;
+ operator()(key_const_reference, size_type) const;
};
PB_DS_CLASS_T_DEC
@@ -256,7 +256,7 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::comp_hash
PB_DS_CLASS_C_DEC::
- operator()(const_key_reference r_key) const
+ operator()(key_const_reference r_key) const
{
const size_type hash = hash_fn_base::operator()(r_key);
return std::make_pair(comb_probe_fn_base::operator()(hash), hash);
@@ -265,7 +265,7 @@ namespace __gnu_pbds
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
- operator()(const_key_reference, size_type hash, size_type i) const
+ operator()(key_const_reference, size_type hash, size_type i) const
{
return comb_probe_fn_base::operator()(hash + probe_fn_base::operator()(i));
}
@@ -275,9 +275,9 @@ namespace __gnu_pbds
PB_DS_CLASS_C_DEC::
operator()
#ifdef _GLIBCXX_DEBUG
- (const_key_reference r_key, size_type hash) const
+ (key_const_reference r_key, size_type hash) const
#else
- (const_key_reference /*r_key*/, size_type hash) const
+ (key_const_reference /*r_key*/, size_type hash) const
#endif
{
_GLIBCXX_DEBUG_ASSERT(hash == hash_fn_base::operator()(r_key));
@@ -292,16 +292,16 @@ namespace __gnu_pbds
* The client does not supply a hash function or probe function,
* and requests that hash values not be stored.
**/
- template<typename Key, typename Allocator, typename Comb_Probe_Fn>
- class ranged_probe_fn<Key, null_hash_fn, Allocator, Comb_Probe_Fn,
- null_probe_fn, false>
- : public Comb_Probe_Fn, public null_hash_fn, public null_probe_fn
+ template<typename Key, typename _Alloc, typename Comb_Probe_Fn>
+ class ranged_probe_fn<Key, null_type, _Alloc, Comb_Probe_Fn,
+ null_type, false>
+ : public Comb_Probe_Fn
{
protected:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef Comb_Probe_Fn comb_probe_fn_base;
- typedef typename Allocator::template rebind<Key>::other key_allocator;
- typedef typename key_allocator::const_reference const_key_reference;
+ typedef typename _Alloc::template rebind<Key>::other key_allocator;
+ typedef typename key_allocator::const_reference key_const_reference;
ranged_probe_fn(size_type size)
{ Comb_Probe_Fn::notify_resized(size); }
@@ -310,9 +310,9 @@ namespace __gnu_pbds
: Comb_Probe_Fn(r_comb_probe_fn)
{ }
- ranged_probe_fn(size_type, const null_hash_fn&,
+ ranged_probe_fn(size_type, const null_type&,
const Comb_Probe_Fn& r_comb_probe_fn,
- const null_probe_fn&)
+ const null_type&)
: Comb_Probe_Fn(r_comb_probe_fn)
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
index 7dcd82588c..921547188a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
@@ -41,33 +41,28 @@
#ifndef PB_DS_SAMPLE_PROBE_FN_HPP
#define PB_DS_SAMPLE_PROBE_FN_HPP
-// A sample probe policy.
-class sample_probe_fn
+namespace __gnu_pbds
{
-
-public:
-
- // Size type.
- typedef std::size_t size_type;
-
-public:
-
- // Default constructor.
- sample_probe_fn();
-
- // Copy constructor.
- sample_probe_fn(const sample_probe_fn& other);
-
- // Swaps content.
- inline void
- swap(sample_probe_fn& other);
-
-protected:
-
- // Returns the i-th offset from the hash value of some key r_key.
- inline size_type
- operator()(const_key_reference r_key, size_type i) const;
-
-};
-
+ /// A sample probe policy.
+ class sample_probe_fn
+ {
+ public:
+ typedef std::size_t size_type;
+
+ /// Default constructor.
+ sample_probe_fn();
+
+ /// Copy constructor.
+ sample_probe_fn(const sample_probe_fn&);
+
+ /// Swaps content.
+ inline void
+ swap(sample_probe_fn&);
+
+ protected:
+ /// Returns the i-th offset from the hash value of some key r_key.
+ inline size_type
+ operator()(key_const_reference r_key, size_type i) const;
+ };
+}
#endif // #ifndef PB_DS_SAMPLE_PROBE_FN_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
index 988f111ea2..1fbcf8c0da 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
@@ -41,37 +41,34 @@
#ifndef PB_DS_SAMPLE_RANGE_HASHING_HPP
#define PB_DS_SAMPLE_RANGE_HASHING_HPP
-// A sample range-hashing functor.
-class sample_range_hashing
+namespace __gnu_pbds
{
-
-public:
-
- // Size type.
- typedef std::size_t size_type;
-
-public:
-
- // Default constructor.
- sample_range_hashing();
-
- // Copy constructor.
- sample_range_hashing(const sample_range_hashing& other);
-
- // Swaps content.
- inline void
- swap(sample_range_hashing& other);
-
-protected:
-
- // Notifies the policy object that the container's __size has changed to size.
- void
- notify_resized(size_type size);
-
- // Transforms the __hash value hash into a ranged-hash value.
- inline size_type
- operator()(size_type hash) const;
-
-};
-
+ /// A sample range-hashing functor.
+ class sample_range_hashing
+ {
+ public:
+ /// Size type.
+ typedef std::size_t size_type;
+
+ /// Default constructor.
+ sample_range_hashing();
+
+ /// Copy constructor.
+ sample_range_hashing(const sample_range_hashing& other);
+
+ /// Swaps content.
+ inline void
+ swap(sample_range_hashing& other);
+
+ protected:
+ /// Notifies the policy object that the container's size has
+ /// changed to argument's size.
+ void
+ notify_resized(size_type);
+
+ /// Transforms the __hash value hash into a ranged-hash value.
+ inline size_type
+ operator()(size_type ) const;
+ };
+}
#endif // #ifndef PB_DS_SAMPLE_RANGE_HASHING_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
index 8fa04d140e..759d93cf11 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
@@ -41,37 +41,35 @@
#ifndef PB_DS_SAMPLE_RANGED_HASH_FN_HPP
#define PB_DS_SAMPLE_RANGED_HASH_FN_HPP
-// A sample ranged-hash functor.
-class sample_ranged_hash_fn
+namespace __gnu_pbds
{
+ /// A sample ranged-hash functor.
+ class sample_ranged_hash_fn
+ {
+ public:
+ typedef std::size_t size_type;
-public:
+ /// Default constructor.
+ sample_ranged_hash_fn();
- // Size type.
- typedef std::size_t size_type;
+ /// Copy constructor.
+ sample_ranged_hash_fn(const sample_ranged_hash_fn&);
-public:
+ /// Swaps content.
+ inline void
+ swap(sample_ranged_hash_fn&);
- // Default constructor.
- sample_ranged_hash_fn();
+ protected:
- // Copy constructor.
- sample_ranged_hash_fn(const sample_ranged_hash_fn& other);
+ /// Notifies the policy object that the container's __size has
+ /// changed to size.
+ void
+ notify_resized(size_type);
- // Swaps content.
- inline void
- swap(sample_ranged_hash_fn& other);
-
-protected:
-
- // Notifies the policy object that the container's __size has changed to size.
- void
- notify_resized(size_type size);
-
- // Transforms r_key into a position within the table.
- inline size_type
- operator()(const_key_reference r_key) const;
-
-};
+ /// Transforms key_const_reference into a position within the table.
+ inline size_type
+ operator()(key_const_reference) const;
+ };
+}
#endif // #ifndef PB_DS_SAMPLE_RANGED_HASH_FN_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
index 2bcfdf51a5..b362f3d354 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
@@ -41,37 +41,37 @@
#ifndef PB_DS_SAMPLE_RANGED_PROBE_FN_HPP
#define PB_DS_SAMPLE_RANGED_PROBE_FN_HPP
-// A sample ranged-probe functor.
-class sample_ranged_probe_fn
+namespace __gnu_pbds
{
+ /// A sample ranged-probe functor.
+ class sample_ranged_probe_fn
+ {
+ public:
+ typedef std::size_t size_type;
-public:
+ // Default constructor.
+ sample_ranged_probe_fn();
- // Size type.
- typedef std::size_t size_type;
+ // Copy constructor.
+ sample_ranged_probe_fn(const sample_ranged_probe_fn&);
-public:
+ // Swaps content.
+ inline void
+ swap(sample_ranged_probe_fn&);
- // Default constructor.
- sample_ranged_probe_fn();
+ protected:
- // Copy constructor.
- sample_ranged_probe_fn(const sample_ranged_probe_fn& other);
+ // Notifies the policy object that the container's __size has
+ // changed to size.
+ void
+ notify_resized(size_type);
- // Swaps content.
- inline void
- swap(sample_ranged_probe_fn& other);
-
-protected:
-
- // Notifies the policy object that the container's __size has changed to size.
- void
- notify_resized(size_type size);
-
- // Transforms the const key reference r_key into the i-th position within the table. This method is called for each collision within the probe sequence.
- inline size_type
- operator()(const_key_reference r_key, std::size_t hash, size_type i) const;
-
-};
+ // Transforms the const key reference r_key into the i-th position
+ // within the table. This method is called for each collision within
+ // the probe sequence.
+ inline size_type
+ operator()(key_const_reference, std::size_t, size_type) const;
+ };
+}
#endif // #ifndef PB_DS_SAMPLE_RANGED_PROBE_FN_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
index 2448f3c798..7fc50576ae 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
@@ -34,88 +34,84 @@
// warranty.
/**
- * @file const_iterator.hpp
+ * @file left_child_next_sibling_heap_/const_iterator.hpp
* Contains an iterator class returned by the table's const find and insert
- * methods.
+ * methods.
*/
#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_ITERATOR_HPP
#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_ITERATOR_HPP
-#include <ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp>
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
+#define PB_DS_CLASS_C_DEC \
+ left_child_next_sibling_heap_const_iterator_<Node, _Alloc>
-#define PB_DS_CLASS_C_DEC \
- left_child_next_sibling_heap_const_iterator_<Node, Allocator>
+#define PB_DS_BASIC_HEAP_CIT_BASE \
+ left_child_next_sibling_heap_node_point_const_iterator_<Node, _Alloc>
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_node_const_point_iterator_<Node, Allocator>
-
- // Const point-type iterator.
- template<typename Node, class Allocator>
- class left_child_next_sibling_heap_const_iterator_ : public PB_DS_BASE_C_DEC
+ /// Const point-type iterator.
+ template<typename Node, typename _Alloc>
+ class left_child_next_sibling_heap_const_iterator_
+ : public PB_DS_BASIC_HEAP_CIT_BASE
{
-
private:
- typedef typename PB_DS_BASE_C_DEC::node_pointer node_pointer;
-
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_BASIC_HEAP_CIT_BASE base_type;
+ typedef typename base_type::node_pointer node_pointer;
public:
+ /// Category.
+ typedef std::forward_iterator_tag iterator_category;
- // Category.
- typedef std::forward_iterator_tag iterator_category;
+ /// Difference type.
+ typedef typename _Alloc::difference_type difference_type;
- // Difference type.
- typedef typename Allocator::difference_type difference_type;
+ /// Iterator's value type.
+ typedef typename base_type::value_type value_type;
- // Iterator's value type.
- typedef typename base_type::value_type value_type;
+ /// Iterator's pointer type.
+ typedef typename base_type::pointer pointer;
- // Iterator's pointer type.
- typedef typename base_type::pointer pointer;
+ /// Iterator's const pointer type.
+ typedef typename base_type::const_pointer const_pointer;
- // Iterator's const pointer type.
- typedef typename base_type::const_pointer const_pointer;
+ /// Iterator's reference type.
+ typedef typename base_type::reference reference;
- // Iterator's reference type.
- typedef typename base_type::reference reference;
-
- // Iterator's const reference type.
- typedef typename base_type::const_reference const_reference;
-
- public:
+ /// Iterator's const reference type.
+ typedef typename base_type::const_reference const_reference;
inline
- left_child_next_sibling_heap_const_iterator_(node_pointer p_nd) : base_type(p_nd)
+ left_child_next_sibling_heap_const_iterator_(node_pointer p_nd)
+ : base_type(p_nd)
{ }
- // Default constructor.
+ /// Default constructor.
inline
left_child_next_sibling_heap_const_iterator_()
{ }
- // Copy constructor.
+ /// Copy constructor.
inline
left_child_next_sibling_heap_const_iterator_(const PB_DS_CLASS_C_DEC& other) : base_type(other)
{ }
- // Compares content to a different iterator object.
- inline bool
+ /// Compares content to a different iterator object.
+ bool
operator==(const PB_DS_CLASS_C_DEC& other) const
{ return (base_type::m_p_nd == other.m_p_nd); }
- // Compares content (negatively) to a different iterator object.
- inline bool
+ /// Compares content (negatively) to a different iterator object.
+ bool
operator!=(const PB_DS_CLASS_C_DEC& other) const
{ return (base_type::m_p_nd != other.m_p_nd); }
- inline PB_DS_CLASS_C_DEC&
+ PB_DS_CLASS_C_DEC&
operator++()
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd != 0);
@@ -123,7 +119,7 @@ namespace __gnu_pbds
return (*this);
}
- inline PB_DS_CLASS_C_DEC
+ PB_DS_CLASS_C_DEC
operator++(int)
{
PB_DS_CLASS_C_DEC ret_it(base_type::m_p_nd);
@@ -147,16 +143,17 @@ namespace __gnu_pbds
{
node_pointer p_next = base_type::m_p_nd;
base_type::m_p_nd = base_type::m_p_nd->m_p_prev_or_parent;
- if (base_type::m_p_nd == 0 || base_type::m_p_nd->m_p_l_child == p_next)
+ if (base_type::m_p_nd == 0
+ || base_type::m_p_nd->m_p_l_child == p_next)
return;
}
}
};
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_BASIC_HEAP_CIT_BASE
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
deleted file mode 100644
index 712a76fb7c..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file const_point_iterator.hpp
- * Contains an iterator class returned by the table's const find and insert
- * methods.
- */
-
-#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_FIND_ITERATOR_HPP
-#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_FIND_ITERATOR_HPP
-
-#include <ext/pb_ds/tag_and_trait.hpp>
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Node, class Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- left_child_next_sibling_heap_node_const_point_iterator_<Node, Allocator>
-
- // Const point-type iterator.
- template<typename Node, class Allocator>
- class left_child_next_sibling_heap_node_const_point_iterator_
- {
-
- protected:
- typedef typename Allocator::template rebind<Node>::other::pointer node_pointer;
-
- public:
-
- // Category.
- typedef trivial_iterator_tag iterator_category;
-
- // Difference type.
- typedef trivial_iterator_difference_type difference_type;
-
- // Iterator's value type.
- typedef typename Node::value_type value_type;
-
- // Iterator's pointer type.
- typedef
- typename Allocator::template rebind<
- value_type>::other::pointer
- pointer;
-
- // Iterator's const pointer type.
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_pointer
- const_pointer;
-
- // Iterator's reference type.
- typedef
- typename Allocator::template rebind<
- value_type>::other::reference
- reference;
-
- // Iterator's const reference type.
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_reference
- const_reference;
-
- public:
-
- inline
- left_child_next_sibling_heap_node_const_point_iterator_(node_pointer p_nd) : m_p_nd(p_nd)
- { }
-
- // Default constructor.
- inline
- left_child_next_sibling_heap_node_const_point_iterator_() : m_p_nd(0)
- { }
-
- // Copy constructor.
- inline
- left_child_next_sibling_heap_node_const_point_iterator_(const PB_DS_CLASS_C_DEC& other) : m_p_nd(other.m_p_nd)
- { }
-
- // Access.
- inline const_pointer
- operator->() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
- return &m_p_nd->m_value;
- }
-
- // Access.
- inline const_reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
- return m_p_nd->m_value;
- }
-
- // Compares content to a different iterator object.
- inline bool
- operator==(const PB_DS_CLASS_C_DEC& other) const
- { return m_p_nd == other.m_p_nd; }
-
- // Compares content (negatively) to a different iterator object.
- inline bool
- operator!=(const PB_DS_CLASS_C_DEC& other) const
- { return m_p_nd != other.m_p_nd; }
-
- public:
- node_pointer m_p_nd;
- };
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
index 5b6ada3609..5cec97b327 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
@@ -49,33 +49,33 @@ PB_DS_CLASS_C_DEC::s_no_throw_copies_ind;
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-left_child_next_sibling_heap_() :
+left_child_next_sibling_heap() :
m_p_root(0),
m_size(0)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn) :
+left_child_next_sibling_heap(const Cmp_Fn& r_cmp_fn) :
Cmp_Fn(r_cmp_fn),
m_p_root(0),
m_size(0)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-left_child_next_sibling_heap_(const PB_DS_CLASS_C_DEC& other)
+left_child_next_sibling_heap(const PB_DS_CLASS_C_DEC& other)
: Cmp_Fn(other), m_p_root(0), m_size(0)
{
m_size = other.m_size;
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID(other)
m_p_root = recursive_copy_node(other.m_p_root);
m_size = other.m_size;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -83,12 +83,12 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
value_swap(other);
std::swap((Cmp_Fn& )(*this), (Cmp_Fn& )other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -102,7 +102,7 @@ value_swap(PB_DS_CLASS_C_DEC& other)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~left_child_next_sibling_heap_()
+~left_child_next_sibling_heap()
{
clear();
}
@@ -110,7 +110,7 @@ PB_DS_CLASS_C_DEC::
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-recursive_copy_node(const_node_pointer p_nd)
+recursive_copy_node(node_const_pointer p_nd)
{
if (p_nd == 0)
return (0);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
index 0408d14bf7..500fac1120 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/debug_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
@@ -43,76 +43,72 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_root == 0 || m_p_root->m_p_prev_or_parent == 0);
+ PB_DS_DEBUG_VERIFY(m_p_root == 0 || m_p_root->m_p_prev_or_parent == 0);
if (m_p_root != 0)
- assert_node_consistent(m_p_root, Single_Link_Roots);
- assert_size();
- assert_iterators();
+ assert_node_consistent(m_p_root, Single_Link_Roots, __file, __line);
+ assert_size(__file, __line);
+ assert_iterators(__file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_node_consistent(const_node_pointer p_nd, bool single_link) const
+assert_node_consistent(node_const_pointer p_nd, bool single_link,
+ const char* __file, int __line) const
{
if (p_nd == 0)
return;
- assert_node_consistent(p_nd->m_p_l_child, false);
- assert_node_consistent(p_nd->m_p_next_sibling, single_link);
+ assert_node_consistent(p_nd->m_p_l_child, false, __file, __line);
+ assert_node_consistent(p_nd->m_p_next_sibling, single_link, __file, __line);
if (single_link)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_prev_or_parent == 0);
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_prev_or_parent == 0);
else if (p_nd->m_p_next_sibling != 0)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling->m_p_prev_or_parent == p_nd);
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_next_sibling->m_p_prev_or_parent == p_nd);
if (p_nd->m_p_l_child == 0)
return;
- const_node_pointer p_child = p_nd->m_p_l_child;
+ node_const_pointer p_child = p_nd->m_p_l_child;
while (p_child != 0)
{
- const_node_pointer p_next_child = p_child->m_p_next_sibling;
- _GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(p_nd->m_value, p_child->m_value));
+ node_const_pointer p_next_child = p_child->m_p_next_sibling;
+ PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(p_nd->m_value, p_child->m_value));
p_child = p_next_child;
}
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_l_child->m_p_prev_or_parent == p_nd);
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_l_child->m_p_prev_or_parent == p_nd);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_iterators() const
+assert_iterators(const char* __file, int __line) const
{
- const size_type calc_size = std::distance(begin(), end());
- if (calc_size == size())
- return;
- _GLIBCXX_DEBUG_ASSERT(0);
+ PB_DS_DEBUG_VERIFY(std::distance(begin(), end()) == size());
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_size() const
+assert_size(const char* __file, int __line) const
{
- if (size_from_node(m_p_root) == m_size)
- return;
- _GLIBCXX_DEBUG_ASSERT(0);
+ PB_DS_DEBUG_VERIFY(size_from_node(m_p_root) == m_size);
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-size_under_node(const_node_pointer p_nd)
+size_under_node(node_const_pointer p_nd)
{ return 1 + size_from_node(p_nd->m_p_l_child); }
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-size_from_node(const_node_pointer p_nd)
+size_from_node(node_const_pointer p_nd)
{
size_type ret = 0;
while (p_nd != 0)
@@ -126,10 +122,10 @@ size_from_node(const_node_pointer p_nd)
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-degree(const_node_pointer p_nd)
+degree(node_const_pointer p_nd)
{
size_type ret = 0;
- const_node_pointer p_child = p_nd->m_p_l_child;
+ node_const_pointer p_child = p_nd->m_p_l_child;
while (p_child != 0)
{
++ret;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
index 2d8ab2d2c6..c7d5602318 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/erase_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
@@ -78,7 +78,7 @@ void
PB_DS_CLASS_C_DEC::
to_linked_list()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
node_pointer p_cur = m_p_root;
while (p_cur != 0)
if (p_cur->m_p_l_child != 0)
@@ -92,7 +92,7 @@ to_linked_list()
p_cur = p_cur->m_p_next_sibling;
#ifdef _GLIBCXX_DEBUG
- const_node_pointer p_counter = m_p_root;
+ node_const_pointer p_counter = m_p_root;
size_type count = 0;
while (p_counter != 0)
{
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
index 75e6561c39..3535a0351a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/info_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
index 9ffc912719..e5031c8d9d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/insert_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
index ec09cf641b..40b0a17c78 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/iterators_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
index 34ad4bee00..9642f18e90 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file left_child_next_sibling_heap_.hpp
+ * @file left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
* Contains an implementation class for a basic heap.
*/
@@ -49,159 +49,100 @@
#include <ext/pb_ds/detail/cond_dealtor.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp>
-#include <ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp>
#include <ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp>
#ifdef PB_DS_LC_NS_HEAP_TRACE_
#include <iostream>
-#endif
+#endif
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
-
-#ifdef _GLIBCXX_DEBUG
-#define PB_DS_CLASS_T_DEC \
- template< \
- typename Value_Type, \
- class Cmp_Fn, \
- typename Node_Metadata, \
- class Allocator, \
- bool Single_Link_Roots>
-#else
-#define PB_DS_CLASS_T_DEC \
- template< \
- typename Value_Type, \
- class Cmp_Fn, \
- typename Node_Metadata, \
- class Allocator>
-#endif
-
-#ifdef _GLIBCXX_DEBUG
-#define PB_DS_CLASS_C_DEC \
- left_child_next_sibling_heap_< \
- Value_Type, \
- Cmp_Fn, \
- Node_Metadata, \
- Allocator, \
- Single_Link_Roots>
-#else
-#define PB_DS_CLASS_C_DEC \
- left_child_next_sibling_heap_< \
- Value_Type, \
- Cmp_Fn, \
- Node_Metadata, \
- Allocator>
-#endif
-
- /**
- * class description = "Base class for some types of h3ap$">
- **/
#ifdef _GLIBCXX_DEBUG
+#define PB_DS_CLASS_T_DEC \
+ template<typename Value_Type, typename Cmp_Fn, typename Node_Metadata, \
+ typename _Alloc, bool Single_Link_Roots>
+
+#define PB_DS_CLASS_C_DEC \
+ left_child_next_sibling_heap<Value_Type, Cmp_Fn, Node_Metadata, \
+ _Alloc, Single_Link_Roots>
+#else
+#define PB_DS_CLASS_T_DEC \
+ template<typename Value_Type, typename Cmp_Fn, typename Node_Metadata, \
+ typename _Alloc>
+
+#define PB_DS_CLASS_C_DEC \
+ left_child_next_sibling_heap<Value_Type, Cmp_Fn, Node_Metadata, _Alloc>
+#endif
+
+ /// Base class for a basic heap.
template<typename Value_Type,
- class Cmp_Fn,
+ typename Cmp_Fn,
typename Node_Metadata,
- class Allocator,
- bool Single_Link_Roots>
-#else
- template<typename Value_Type,
- class Cmp_Fn,
- typename Node_Metadata,
- class Allocator>
-#endif
- class left_child_next_sibling_heap_ : public Cmp_Fn
+ typename _Alloc
+#ifdef _GLIBCXX_DEBUG
+ ,bool Single_Link_Roots>
+#else
+ >
+#endif
+ class left_child_next_sibling_heap : public Cmp_Fn
{
-
protected:
typedef
- typename Allocator::template rebind<
- left_child_next_sibling_heap_node_<
- Value_Type,
- Node_Metadata,
- Allocator> >::other
+ typename _Alloc::template rebind<
+ left_child_next_sibling_heap_node_<Value_Type, Node_Metadata,
+ _Alloc> >::other
node_allocator;
- typedef typename node_allocator::value_type node;
-
- typedef typename node_allocator::pointer node_pointer;
-
- typedef typename node_allocator::const_pointer const_node_pointer;
-
+ typedef typename node_allocator::value_type node;
+ typedef typename node_allocator::pointer node_pointer;
+ typedef typename node_allocator::const_pointer node_const_pointer;
typedef Node_Metadata node_metadata;
-
- typedef std::pair< node_pointer, node_pointer> node_pointer_pair;
+ typedef std::pair< node_pointer, node_pointer> node_pointer_pair;
private:
- typedef cond_dealtor< node, Allocator> cond_dealtor_t;
+ typedef cond_dealtor< node, _Alloc> cond_dealtor_t;
enum
{
simple_value = is_simple<Value_Type>::value
};
- typedef integral_constant<int, simple_value> no_throw_copies_t;
+ typedef integral_constant<int, simple_value> no_throw_copies_t;
+ typedef typename _Alloc::template rebind<Value_Type> __rebind_v;
public:
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef Value_Type value_type;
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef Value_Type value_type;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::pointer
- pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_pointer
- const_pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::reference
- reference;
+ typedef typename __rebind_v::other::pointer pointer;
+ typedef typename __rebind_v::other::const_pointer const_pointer;
+ typedef typename __rebind_v::other::reference reference;
+ typedef typename __rebind_v::other::const_reference const_reference;
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_reference
- const_reference;
-
- typedef
- left_child_next_sibling_heap_node_const_point_iterator_<
- node,
- Allocator>
- const_point_iterator;
+ typedef left_child_next_sibling_heap_node_point_const_iterator_<node, _Alloc>
+ point_const_iterator;
- typedef const_point_iterator point_iterator;
+ typedef point_const_iterator point_iterator;
- typedef
- left_child_next_sibling_heap_const_iterator_<
- node,
- Allocator>
+ typedef left_child_next_sibling_heap_const_iterator_<node, _Alloc>
const_iterator;
- typedef const_iterator iterator;
-
- typedef Cmp_Fn cmp_fn;
-
- typedef Allocator allocator_type;
-
- public:
-
- left_child_next_sibling_heap_();
-
- left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn);
+ typedef const_iterator iterator;
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
- left_child_next_sibling_heap_(const PB_DS_CLASS_C_DEC& other);
+ left_child_next_sibling_heap();
+ left_child_next_sibling_heap(const Cmp_Fn&);
+ left_child_next_sibling_heap(const left_child_next_sibling_heap&);
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
- ~left_child_next_sibling_heap_();
+ ~left_child_next_sibling_heap();
inline bool
empty() const;
@@ -212,10 +153,10 @@ namespace __gnu_pbds
inline size_type
max_size() const;
- Cmp_Fn&
+ Cmp_Fn&
get_cmp_fn();
- const Cmp_Fn&
+ const Cmp_Fn&
get_cmp_fn() const;
inline iterator
@@ -236,99 +177,95 @@ namespace __gnu_pbds
#ifdef PB_DS_LC_NS_HEAP_TRACE_
void
trace() const;
-#endif
+#endif
protected:
-
inline node_pointer
- get_new_node_for_insert(const_reference r_val);
+ get_new_node_for_insert(const_reference);
inline static void
- make_child_of(node_pointer p_nd, node_pointer p_new_parent);
+ make_child_of(node_pointer, node_pointer);
void
- value_swap(PB_DS_CLASS_C_DEC& other);
+ value_swap(left_child_next_sibling_heap&);
inline static node_pointer
- parent(node_pointer p_nd);
+ parent(node_pointer);
inline void
- swap_with_parent(node_pointer p_nd, node_pointer p_parent);
+ swap_with_parent(node_pointer, node_pointer);
void
- bubble_to_top(node_pointer p_nd);
+ bubble_to_top(node_pointer);
inline void
- actual_erase_node(node_pointer p_nd);
+ actual_erase_node(node_pointer);
void
- clear_imp(node_pointer p_nd);
+ clear_imp(node_pointer);
void
to_linked_list();
template<typename Pred>
node_pointer
- prune(Pred pred);
+ prune(Pred);
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
void
- assert_node_consistent(const_node_pointer p_nd, bool single_link) const;
+ assert_node_consistent(node_const_pointer, bool, const char*, int) const;
static size_type
- size_under_node(const_node_pointer p_nd);
+ size_under_node(node_const_pointer);
static size_type
- degree(const_node_pointer p_nd);
-#endif
+ degree(node_const_pointer);
+#endif
#ifdef PB_DS_LC_NS_HEAP_TRACE_
static void
- trace_node(const_node_pointer, size_type level);
-#endif
-
- protected:
- node_pointer m_p_root;
-
- size_type m_size;
+ trace_node(node_const_pointer, size_type);
+#endif
private:
#ifdef _GLIBCXX_DEBUG
void
- assert_iterators() const;
+ assert_iterators(const char*, int) const;
void
- assert_size() const;
+ assert_size(const char*, int) const;
static size_type
- size_from_node(const_node_pointer p_nd);
-#endif
+ size_from_node(node_const_pointer);
+#endif
node_pointer
- recursive_copy_node(const_node_pointer p_nd);
+ recursive_copy_node(node_const_pointer);
inline node_pointer
- get_new_node_for_insert(const_reference r_val, false_type);
+ get_new_node_for_insert(const_reference, false_type);
inline node_pointer
- get_new_node_for_insert(const_reference r_val, true_type);
+ get_new_node_for_insert(const_reference, true_type);
#ifdef PB_DS_LC_NS_HEAP_TRACE_
template<typename Metadata_>
static void
- trace_node_metadata(const_node_pointer p_nd, type_to_type<Metadata_>);
+ trace_node_metadata(node_const_pointer, type_to_type<Metadata_>);
static void
- trace_node_metadata(const_node_pointer, type_to_type<null_left_child_next_sibling_heap_node_metadata>);
-#endif
+ trace_node_metadata(node_const_pointer, type_to_type<null_type>);
+#endif
- private:
- static node_allocator s_node_allocator;
+ static node_allocator s_node_allocator;
+ static no_throw_copies_t s_no_throw_copies_ind;
- static no_throw_copies_t s_no_throw_copies_ind;
+ protected:
+ node_pointer m_p_root;
+ size_type m_size;
};
#include <ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp>
@@ -346,4 +283,4 @@ namespace __gnu_pbds
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
index 1cdfe28839..d74b86c42d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
@@ -34,87 +34,54 @@
// warranty.
/**
- * @file node.hpp
+ * @file left_child_next_sibling_heap_/node.hpp
* Contains an implementation struct for this type of heap's node.
*/
#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NODE_HPP
#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NODE_HPP
-#include <ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp>
-
namespace __gnu_pbds
{
namespace detail
{
-
- template<typename Value_Type, typename Metadata_Type, class Allocator>
+ /// Node.
+ template<typename _Value, typename _Metadata, typename _Alloc>
struct left_child_next_sibling_heap_node_
{
private:
- typedef
- left_child_next_sibling_heap_node_<
- Value_Type,
- Metadata_Type,
- Allocator>
- this_type;
-
- public:
- typedef typename Allocator::size_type size_type;
-
- typedef
- typename Allocator::template rebind<
- this_type>::other::pointer
- node_pointer;
-
- typedef Value_Type value_type;
-
- typedef Metadata_Type metadata_type;
+ typedef left_child_next_sibling_heap_node_<_Value, _Metadata, _Alloc> this_type;
public:
- value_type m_value;
+ typedef _Value value_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef _Metadata metadata_type;
- metadata_type m_metadata;
+ typedef typename _Alloc::template rebind<this_type>::other::pointer node_pointer;
- node_pointer m_p_l_child;
-
- node_pointer m_p_next_sibling;
-
- node_pointer m_p_prev_or_parent;
+ value_type m_value;
+ metadata_type m_metadata;
+ node_pointer m_p_l_child;
+ node_pointer m_p_next_sibling;
+ node_pointer m_p_prev_or_parent;
};
- template<typename Value_Type, class Allocator>
- struct left_child_next_sibling_heap_node_<
- Value_Type,
- null_left_child_next_sibling_heap_node_metadata,
- Allocator>
+ template<typename _Value, typename _Alloc>
+ struct left_child_next_sibling_heap_node_<_Value, null_type, _Alloc>
{
private:
- typedef
- left_child_next_sibling_heap_node_<
- Value_Type,
- null_left_child_next_sibling_heap_node_metadata,
- Allocator>
- this_type;
+ typedef left_child_next_sibling_heap_node_<_Value, null_type, _Alloc> this_type;
public:
- typedef typename Allocator::size_type size_type;
-
- typedef
- typename Allocator::template rebind<
- this_type>::other::pointer
- node_pointer;
-
- typedef Value_Type value_type;
-
- public:
- value_type m_value;
-
- node_pointer m_p_l_child;
+ typedef _Value value_type;
+ typedef typename _Alloc::size_type size_type;
- node_pointer m_p_next_sibling;
+ typedef typename _Alloc::template rebind<this_type>::other::pointer node_pointer;
- node_pointer m_p_prev_or_parent;
+ value_type m_value;
+ node_pointer m_p_l_child;
+ node_pointer m_p_next_sibling;
+ node_pointer m_p_prev_or_parent;
};
} // namespace detail
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
deleted file mode 100644
index 5f04e14b47..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file null_metadata.hpp
- * Contains an implementation struct for this type of heap's node.
- */
-
-#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP
-#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
- struct null_left_child_next_sibling_heap_node_metadata
- { };
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif // #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
new file mode 100644
index 0000000000..5d3251f1e9
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
@@ -0,0 +1,149 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file left_child_next_sibling_heap_/point_const_iterator.hpp
+ * Contains an iterator class returned by the table's const find and insert
+ * methods.
+ */
+
+#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_FIND_ITERATOR_HPP
+#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_FIND_ITERATOR_HPP
+
+#include <ext/pb_ds/tag_and_trait.hpp>
+#include <debug/debug.h>
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Node, typename _Alloc>
+
+#define PB_DS_CLASS_C_DEC \
+ left_child_next_sibling_heap_node_point_const_iterator_<Node, _Alloc>
+
+ /// Const point-type iterator.
+ template<typename Node, typename _Alloc>
+ class left_child_next_sibling_heap_node_point_const_iterator_
+ {
+ protected:
+ typedef typename _Alloc::template rebind<Node>::other::pointer node_pointer;
+
+ public:
+ /// Category.
+ typedef trivial_iterator_tag iterator_category;
+
+ /// Difference type.
+ typedef trivial_iterator_difference_type difference_type;
+
+ /// Iterator's value type.
+ typedef typename Node::value_type value_type;
+
+ /// Iterator's pointer type.
+ typedef
+ typename _Alloc::template rebind<
+ value_type>::other::pointer
+ pointer;
+
+ /// Iterator's const pointer type.
+ typedef
+ typename _Alloc::template rebind<
+ value_type>::other::const_pointer
+ const_pointer;
+
+ /// Iterator's reference type.
+ typedef
+ typename _Alloc::template rebind<
+ value_type>::other::reference
+ reference;
+
+ /// Iterator's const reference type.
+ typedef
+ typename _Alloc::template rebind<
+ value_type>::other::const_reference
+ const_reference;
+
+ inline
+ left_child_next_sibling_heap_node_point_const_iterator_(node_pointer p_nd) : m_p_nd(p_nd)
+ { }
+
+ /// Default constructor.
+ inline
+ left_child_next_sibling_heap_node_point_const_iterator_() : m_p_nd(0)
+ { }
+
+ /// Copy constructor.
+ inline
+ left_child_next_sibling_heap_node_point_const_iterator_(const PB_DS_CLASS_C_DEC& other) : m_p_nd(other.m_p_nd)
+ { }
+
+ /// Access.
+ const_pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
+ return &m_p_nd->m_value;
+ }
+
+ /// Access.
+ const_reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
+ return m_p_nd->m_value;
+ }
+
+ /// Compares content to a different iterator object.
+ bool
+ operator==(const PB_DS_CLASS_C_DEC& other) const
+ { return m_p_nd == other.m_p_nd; }
+
+ /// Compares content (negatively) to a different iterator object.
+ bool
+ operator!=(const PB_DS_CLASS_C_DEC& other) const
+ { return m_p_nd != other.m_p_nd; }
+
+ node_pointer m_p_nd;
+ };
+
+#undef PB_DS_CLASS_T_DEC
+#undef PB_DS_CLASS_C_DEC
+
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
index 350b4d08af..b2d0d8527d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/policy_access_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
index d42100212e..28ee13e912 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file left_child_next_sibling_heap_/trace_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
@@ -46,16 +46,14 @@ PB_DS_CLASS_C_DEC::
trace() const
{
std::cerr << std::endl;
-
trace_node(m_p_root, 0);
-
std::cerr << std::endl;
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-trace_node(const_node_pointer p_nd, size_type level)
+trace_node(node_const_pointer p_nd, size_type level)
{
while (p_nd != 0)
{
@@ -68,11 +66,8 @@ trace_node(const_node_pointer p_nd, size_type level)
" left = " << p_nd->m_p_l_child << " ";
trace_node_metadata(p_nd, type_to_type<node_metadata>());
-
std::cerr << p_nd->m_value << std::endl;
-
trace_node(p_nd->m_p_l_child, level + 1);
-
p_nd = p_nd->m_p_next_sibling;
}
}
@@ -81,7 +76,7 @@ PB_DS_CLASS_T_DEC
template<typename Metadata_>
void
PB_DS_CLASS_C_DEC::
-trace_node_metadata(const_node_pointer p_nd, type_to_type<Metadata_>)
+trace_node_metadata(node_const_pointer p_nd, type_to_type<Metadata_>)
{
std::cerr << "(" << p_nd->m_metadata << ") ";
}
@@ -89,7 +84,7 @@ trace_node_metadata(const_node_pointer p_nd, type_to_type<Metadata_>)
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-trace_node_metadata(const_node_pointer, type_to_type<null_left_child_next_sibling_heap_node_metadata>)
+trace_node_metadata(node_const_pointer, type_to_type<null_type>)
{ }
#endif // #ifdef PB_DS_LC_NS_HEAP_TRACE_
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
index 0564885216..8ec39a6ace 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,8 +35,7 @@
// warranty.
/**
- * @file constructor_destructor_fn_imps.hpp
- * Contains implementations of PB_DS_CLASS_NAME.
+ * @file list_update_map_/constructor_destructor_fn_imps.hpp
*/
PB_DS_CLASS_T_DEC
@@ -47,7 +46,7 @@ PB_DS_CLASS_T_DEC
Eq_Fn PB_DS_CLASS_C_DEC::s_eq_fn;
PB_DS_CLASS_T_DEC
-null_lu_metadata PB_DS_CLASS_C_DEC::s_null_lu_metadata;
+null_type PB_DS_CLASS_C_DEC::s_null_type;
PB_DS_CLASS_T_DEC
Update_Policy PB_DS_CLASS_C_DEC::s_update_policy;
@@ -68,43 +67,40 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME() : m_p_l(0)
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+PB_DS_LU_NAME() : m_p_l(0)
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
template<typename It>
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(It first_it, It last_it) : m_p_l(0)
+PB_DS_LU_NAME(It first_it, It last_it) : m_p_l(0)
{
copy_from_range(first_it, last_it);
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
+ PB_DS_ASSERT_VALID((*this));
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
-#ifdef _GLIBCXX_DEBUG
- debug_base(),
-#endif
+PB_DS_LU_NAME(const PB_DS_CLASS_C_DEC& other) :
m_p_l(0)
{
__try
{
for (const_iterator it = other.begin(); it != other.end(); ++it)
- {
- entry_pointer p_l = allocate_new_entry(*it,
- PB_DS_TYPES_TRAITS_C_DEC::m_no_throw_copies_indicator);
+ {
+ entry_pointer p_l = allocate_new_entry(*it,
+ traits_base::m_no_throw_copies_indicator);
p_l->m_p_next = m_p_l;
m_p_l = p_l;
- }
+ }
}
__catch(...)
{
deallocate_all();
__throw_exception_again;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -112,12 +108,12 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
_GLIBCXX_DEBUG_ONLY(debug_base::swap(other);)
std::swap(m_p_l, other.m_p_l);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -137,6 +133,5 @@ deallocate_all()
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~PB_DS_CLASS_NAME()
+~PB_DS_LU_NAME()
{ deallocate_all(); }
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
index 95e9e22b15..510c905001 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file list_update_map_/debug_fn_imps.hpp
* Contains implementations of cc_ht_map_'s debug-mode functions.
*/
@@ -43,15 +43,15 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
size_type calc_size = 0;
for (const_iterator it = begin(); it != end(); ++it)
{
- debug_base::check_key_exists(PB_DS_V2F(*it));
+ debug_base::check_key_exists(PB_DS_V2F(*it), __file, __line);
++calc_size;
}
- debug_base::check_size(calc_size);
+ debug_base::check_size(calc_size, __file, __line);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
index 021ef50d87..f1e440a72a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file entry_metadata_base.hpp
+ * @file list_update_map_/entry_metadata_base.hpp
* Contains an implementation for a list update map.
*/
@@ -52,7 +52,7 @@ namespace __gnu_pbds
};
template<>
- struct lu_map_entry_metadata_base<null_lu_metadata>
+ struct lu_map_entry_metadata_base<null_type>
{ };
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
index c481aaa2d0..bbd7b8355e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,16 +34,16 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file list_update_map_/erase_fn_imps.hpp
* Contains implementations of lu_map_.
*/
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
if (m_p_l == 0)
return false;
@@ -81,7 +81,7 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
size_type num_ersd = 0;
while (m_p_l != 0 && pred(m_p_l->m_value))
{
@@ -106,7 +106,7 @@ erase_if(Pred pred)
p_l = p_l->m_p_next;
}
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return num_ersd;
}
@@ -116,7 +116,6 @@ PB_DS_CLASS_C_DEC::
erase_next(entry_pointer p_l)
{
_GLIBCXX_DEBUG_ASSERT(p_l != 0);
- _GLIBCXX_DEBUG_ASSERT(p_l != m_p_l);
_GLIBCXX_DEBUG_ASSERT(p_l->m_p_next != 0);
entry_pointer p_next_l = p_l->m_p_next->m_p_next;
actual_erase_entry(p_l->m_p_next);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
index 0c872cbe0a..0d5f98aaf7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,21 +34,21 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file list_update_map_/find_fn_imps.hpp
* Contains implementations of lu_map_.
*/
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::entry_pointer
PB_DS_CLASS_C_DEC::
-find_imp(const_key_reference r_key) const
+find_imp(key_const_reference r_key) const
{
if (m_p_l == 0)
return 0;
if (s_eq_fn(r_key, PB_DS_V2F(m_p_l->m_value)))
{
apply_update(m_p_l, s_metadata_type_indicator);
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return m_p_l;
}
@@ -71,7 +71,7 @@ find_imp(const_key_reference r_key) const
p_l = p_next;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return 0;
}
@@ -85,6 +85,6 @@ apply_update(entry_pointer p_l, type_to_type<Metadata>)
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-apply_update(entry_pointer, type_to_type<null_lu_metadata>)
-{ return s_update_policy(s_null_lu_metadata); }
+apply_update(entry_pointer, type_to_type<null_type>)
+{ return s_update_policy(s_null_type); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
index 31f743cf18..294d73a018 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file list_update_map_/info_fn_imps.hpp
* Contains implementations of lu_map_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
index 3e294fbdc9..9c250df49a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file list_update_map_/insert_fn_imps.hpp
* Contains implementations of lu_map_.
*/
@@ -45,21 +45,21 @@ inline std::pair<
PB_DS_CLASS_C_DEC::
insert(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
entry_pointer p_l = find_imp(PB_DS_V2F(r_val));
if (p_l != 0)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(PB_DS_V2F(r_val));)
+ PB_DS_CHECK_KEY_EXISTS(PB_DS_V2F(r_val))
return std::make_pair(point_iterator(&p_l->m_value), false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(PB_DS_V2F(r_val));)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_val))
p_l = allocate_new_entry(r_val, traits_base::m_no_throw_copies_indicator);
p_l->m_p_next = m_p_l;
m_p_l = p_l;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return std::make_pair(point_iterator(&p_l->m_value), true);
}
@@ -101,6 +101,6 @@ init_entry_metadata(entry_pointer p_l, type_to_type<Metadata>)
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-init_entry_metadata(entry_pointer, type_to_type<null_lu_metadata>)
+init_entry_metadata(entry_pointer, type_to_type<null_type>)
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
index ac3163858f..2a1aa6c9dd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
+ * @file list_update_map_/iterators_fn_imps.hpp
* Contains implementations of lu_map_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
index aa8dd1b522..9e48f17f7c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file lu_map_.hpp
+ * @file list_update_map_/lu_map_.hpp
* Contains a list update map.
*/
@@ -47,82 +47,70 @@
#include <ext/pb_ds/exception.hpp>
#ifdef _GLIBCXX_DEBUG
#include <ext/pb_ds/detail/debug_map_base.hpp>
-#endif
+#endif
#ifdef PB_DS_LU_MAP_TRACE_
#include <iostream>
-#endif
+#endif
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Mapped, class Eq_Fn, \
- class Allocator, class Update_Policy>
-
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME lu_map_data_
-#endif
+#define PB_DS_LU_NAME lu_map
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME lu_map_no_data_
-#endif
+#define PB_DS_LU_NAME lu_set
+#endif
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Key, typename Mapped, typename Eq_Fn, \
+ typename _Alloc, typename Update_Policy>
#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME<Key, Mapped, Eq_Fn, Allocator, Update_Policy>
+ PB_DS_LU_NAME<Key, Mapped, Eq_Fn, _Alloc, Update_Policy>
-#define PB_DS_TYPES_TRAITS_C_DEC \
- types_traits<Key, Mapped, Allocator, false>
+#define PB_DS_LU_TRAITS_BASE \
+ types_traits<Key, Mapped, _Alloc, false>
#ifdef _GLIBCXX_DEBUG
#define PB_DS_DEBUG_MAP_BASE_C_DEC \
debug_map_base<Key, Eq_Fn, \
- typename Allocator::template rebind<Key>::other::const_reference>
-#endif
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#define PB_DS_EP2VP(X)& ((X)->m_value)
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#define PB_DS_EP2VP(X)& ((X)->m_value.first)
-#endif
+ typename _Alloc::template rebind<Key>::other::const_reference>
+#endif
- /* Skip to the lu, my darling. */
- // list-based (with updates) associative container.
+ /// list-based (with updates) associative container.
+ /// Skip to the lu, my darling.
template<typename Key,
typename Mapped,
- class Eq_Fn,
- class Allocator,
- class Update_Policy>
- class PB_DS_CLASS_NAME :
+ typename Eq_Fn,
+ typename _Alloc,
+ typename Update_Policy>
+ class PB_DS_LU_NAME :
#ifdef _GLIBCXX_DEBUG
protected PB_DS_DEBUG_MAP_BASE_C_DEC,
-#endif
- public PB_DS_TYPES_TRAITS_C_DEC
+#endif
+ public PB_DS_LU_TRAITS_BASE
{
private:
- typedef PB_DS_TYPES_TRAITS_C_DEC traits_base;
+ typedef PB_DS_LU_TRAITS_BASE traits_base;
- struct entry
+ struct entry
: public lu_map_entry_metadata_base<typename Update_Policy::metadata_type>
{
typename traits_base::value_type m_value;
- typename Allocator::template rebind<entry>::other::pointer m_p_next;
+ typename _Alloc::template rebind<entry>::other::pointer m_p_next;
};
- typedef typename Allocator::template rebind<entry>::other entry_allocator;
+ typedef typename _Alloc::template rebind<entry>::other entry_allocator;
typedef typename entry_allocator::pointer entry_pointer;
typedef typename entry_allocator::const_pointer const_entry_pointer;
typedef typename entry_allocator::reference entry_reference;
typedef typename entry_allocator::const_reference const_entry_reference;
- typedef typename Allocator::template rebind<entry_pointer>::other entry_pointer_allocator;
+ typedef typename _Alloc::template rebind<entry_pointer>::other entry_pointer_allocator;
typedef typename entry_pointer_allocator::pointer entry_pointer_array;
typedef typename traits_base::value_type value_type_;
@@ -133,7 +121,7 @@ namespace __gnu_pbds
#define PB_DS_GEN_POS entry_pointer
-#include <ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp>
+#include <ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/point_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/const_iterator.hpp>
#include <ext/pb_ds/detail/unordered_iterator/iterator.hpp>
@@ -143,27 +131,27 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
-#endif
+#endif
- typedef cond_dealtor<entry, Allocator> cond_dealtor_t;
+ typedef cond_dealtor<entry, _Alloc> cond_dealtor_t;
public:
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
typedef Eq_Fn eq_fn;
typedef Update_Policy update_policy;
typedef typename Update_Policy::metadata_type update_metadata;
typedef typename traits_base::key_type key_type;
typedef typename traits_base::key_pointer key_pointer;
- typedef typename traits_base::const_key_pointer const_key_pointer;
+ typedef typename traits_base::key_const_pointer key_const_pointer;
typedef typename traits_base::key_reference key_reference;
- typedef typename traits_base::const_key_reference const_key_reference;
+ typedef typename traits_base::key_const_reference key_const_reference;
typedef typename traits_base::mapped_type mapped_type;
typedef typename traits_base::mapped_pointer mapped_pointer;
- typedef typename traits_base::const_mapped_pointer const_mapped_pointer;
+ typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
typedef typename traits_base::mapped_reference mapped_reference;
- typedef typename traits_base::const_mapped_reference const_mapped_reference;
+ typedef typename traits_base::mapped_const_reference mapped_const_reference;
typedef typename traits_base::value_type value_type;
typedef typename traits_base::pointer pointer;
typedef typename traits_base::const_pointer const_pointer;
@@ -171,35 +159,35 @@ namespace __gnu_pbds
typedef typename traits_base::const_reference const_reference;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef point_iterator_ point_iterator;
-#endif
+ typedef point_iterator_ point_iterator;
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
- typedef const_point_iterator_ point_iterator;
-#endif
+ typedef point_const_iterator_ point_iterator;
+#endif
- typedef const_point_iterator_ const_point_iterator;
+ typedef point_const_iterator_ point_const_iterator;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef iterator_ iterator;
-#endif
+ typedef iterator_ iterator;
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
- typedef const_iterator_ iterator;
-#endif
+ typedef const_iterator_ iterator;
+#endif
- typedef const_iterator_ const_iterator;
+ typedef const_iterator_ const_iterator;
public:
- PB_DS_CLASS_NAME();
+ PB_DS_LU_NAME();
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
+ PB_DS_LU_NAME(const PB_DS_CLASS_C_DEC&);
virtual
- ~PB_DS_CLASS_NAME();
+ ~PB_DS_LU_NAME();
template<typename It>
- PB_DS_CLASS_NAME(It first_it, It last_it);
+ PB_DS_LU_NAME(It, It);
void
swap(PB_DS_CLASS_C_DEC&);
@@ -214,38 +202,38 @@ namespace __gnu_pbds
empty() const;
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return insert(std::make_pair(r_key, mapped_type())).first->second;
-#else
+#else
insert(r_key);
- return traits_base::s_null_mapped;
-#endif
+ return traits_base::s_null_type;
+#endif
}
inline std::pair<point_iterator, bool>
insert(const_reference);
inline point_iterator
- find(const_key_reference r_key)
+ find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
entry_pointer p_e = find_imp(r_key);
return point_iterator(p_e == 0 ? 0: &p_e->m_value);
}
- inline const_point_iterator
- find(const_key_reference r_key) const
+ inline point_const_iterator
+ find(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
entry_pointer p_e = find_imp(r_key);
- return const_point_iterator(p_e == 0 ? 0: &p_e->m_value);
+ return point_const_iterator(p_e == 0 ? 0: &p_e->m_value);
}
inline bool
- erase(const_key_reference);
+ erase(key_const_reference);
template<typename Pred>
inline size_type
@@ -268,8 +256,8 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char* file, int line) const;
+#endif
#ifdef PB_DS_LU_MAP_TRACE_
void
@@ -285,7 +273,7 @@ namespace __gnu_pbds
private:
#ifdef PB_DS_DATA_TRUE_INDICATOR
friend class iterator_;
-#endif
+#endif
friend class const_iterator_;
@@ -300,7 +288,7 @@ namespace __gnu_pbds
init_entry_metadata(entry_pointer, type_to_type<Metadata>);
inline static void
- init_entry_metadata(entry_pointer, type_to_type<null_lu_metadata>);
+ init_entry_metadata(entry_pointer, type_to_type<null_type>);
void
deallocate_all();
@@ -323,18 +311,18 @@ namespace __gnu_pbds
apply_update(entry_pointer, type_to_type<Metadata>);
inline static bool
- apply_update(entry_pointer, type_to_type<null_lu_metadata>);
+ apply_update(entry_pointer, type_to_type<null_type>);
inline entry_pointer
- find_imp(const_key_reference) const;
+ find_imp(key_const_reference) const;
- static entry_allocator s_entry_allocator;
- static Eq_Fn s_eq_fn;
- static Update_Policy s_update_policy;
- static type_to_type<update_metadata> s_metadata_type_indicator;
- static null_lu_metadata s_null_lu_metadata;
+ static entry_allocator s_entry_allocator;
+ static Eq_Fn s_eq_fn;
+ static Update_Policy s_update_policy;
+ static type_to_type<update_metadata> s_metadata_type_indicator;
+ static null_type s_null_type;
- mutable entry_pointer m_p_l;
+ mutable entry_pointer m_p_l;
};
#include <ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp>
@@ -348,12 +336,8 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_TYPES_TRAITS_C_DEC
+#undef PB_DS_LU_TRAITS_BASE
#undef PB_DS_DEBUG_MAP_BASE_C_DEC
-#undef PB_DS_CLASS_NAME
-#undef PB_DS_V2F
-#undef PB_DS_EP2VP
-#undef PB_DS_V2S
-
+#undef PB_DS_LU_NAME
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
index 009610998a..1ee219ae55 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file list_update_map_/trace_fn_imps.hpp
* Contains implementations of lu_map_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
deleted file mode 100644
index 8e476cb91b..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file counter_lu_metadata.hpp
- * Contains implementation of a lu counter policy's metadata.
- */
-
-namespace __gnu_pbds
-{
- namespace detail
- {
- template<typename Size_Type>
- class counter_lu_policy_base;
-
- // A list-update metadata type that moves elements to the front of
- // the list based on the counter algorithm.
- template<typename Size_Type = std::size_t>
- class counter_lu_metadata
- {
- public:
- typedef Size_Type size_type;
-
- private:
- counter_lu_metadata(size_type init_count) : m_count(init_count)
- { }
-
- friend class counter_lu_policy_base<size_type>;
-
- mutable size_type m_count;
- };
-
- template<typename Size_Type>
- class counter_lu_policy_base
- {
- protected:
- typedef Size_Type size_type;
-
- counter_lu_metadata<size_type>
- operator()(size_type max_size) const
- { return counter_lu_metadata<Size_Type>(std::rand() % max_size); }
-
- template<typename Metadata_Reference>
- bool
- operator()(Metadata_Reference r_data, size_type m_max_count) const
- {
- if (++r_data.m_count != m_max_count)
- return false;
- r_data.m_count = 0;
- return true;
- }
- };
- } // namespace detail
-} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp
deleted file mode 100644
index f74a9fb548..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file counter_lu_policy_imp.hpp
- * Contains a lu counter policy implementation.
- */
-
-PB_DS_CLASS_T_DEC
-detail::counter_lu_metadata<typename Allocator::size_type>
-PB_DS_CLASS_C_DEC::
-operator()() const
-{ return (base_type::operator()(max_count)); }
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-operator()(metadata_reference r_data) const
-{ return (base_type::operator()(r_data, max_count)); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
new file mode 100644
index 0000000000..74ab81388b
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
@@ -0,0 +1,88 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file lu_counter_metadata.hpp
+ * Contains implementation of a lu counter policy's metadata.
+ */
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+ template<typename Size_Type>
+ class lu_counter_policy_base;
+
+ /// A list-update metadata type that moves elements to the front of
+ /// the list based on the counter algorithm.
+ template<typename Size_Type = std::size_t>
+ class lu_counter_metadata
+ {
+ public:
+ typedef Size_Type size_type;
+
+ private:
+ lu_counter_metadata(size_type init_count) : m_count(init_count)
+ { }
+
+ friend class lu_counter_policy_base<size_type>;
+
+ mutable size_type m_count;
+ };
+
+ /// Base class for list-update counter policy.
+ template<typename Size_Type>
+ class lu_counter_policy_base
+ {
+ protected:
+ typedef Size_Type size_type;
+
+ lu_counter_metadata<size_type>
+ operator()(size_type max_size) const
+ { return lu_counter_metadata<Size_Type>(std::rand() % max_size); }
+
+ template<typename Metadata_Reference>
+ bool
+ operator()(Metadata_Reference r_data, size_type m_max_count) const
+ {
+ if (++r_data.m_count != m_max_count)
+ return false;
+ r_data.m_count = 0;
+ return true;
+ }
+ };
+ } // namespace detail
+} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp
deleted file mode 100644
index 34426c5382..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file mtf_lu_policy_imp.hpp
- * Contains a move-to-front policy implementation.
- */
-
-PB_DS_CLASS_T_DEC
-null_lu_metadata PB_DS_CLASS_C_DEC::s_metadata;
-
-PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::metadata_type
-PB_DS_CLASS_C_DEC::
-operator()() const
-{ return s_metadata; }
-
-PB_DS_CLASS_T_DEC
-inline bool
-PB_DS_CLASS_C_DEC::
-operator()(metadata_reference /*r_data*/) const
-{ return true; }
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
index c5da1e9d00..a446c3f11f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
@@ -41,34 +41,36 @@
#ifndef PB_DS_SAMPLE_UPDATE_POLICY_HPP
#define PB_DS_SAMPLE_UPDATE_POLICY_HPP
-// A sample list-update policy.
-struct sample_update_policy
+namespace __gnu_pbds
{
- // Default constructor.
- sample_update_policy();
+ /// A sample list-update policy.
+ struct sample_update_policy
+ {
+ /// Default constructor.
+ sample_update_policy();
- // Copy constructor.
- sample_update_policy(const sample_update_policy&);
+ /// Copy constructor.
+ sample_update_policy(const sample_update_policy&);
- // Swaps content.
- inline void
- swap(sample_update_policy& other);
+ /// Swaps content.
+ inline void
+ swap(sample_update_policy& other);
-protected:
- // Metadata on which this functor operates.
- typedef some_metadata_type metadata_type;
+ protected:
+ /// Metadata on which this functor operates.
+ typedef some_metadata_type metadata_type;
- // Creates a metadata object.
- metadata_type
- operator()() const;
+ /// Creates a metadata object.
+ metadata_type
+ operator()() const;
- // Decides whether a metadata object should be moved to the front of
- // the list. A list-update based containers object will call this
- // method to decide whether to move a node to the front of the
- // list. The method shoule return true if the node should be moved
- // to the front of the list.
- bool
- operator()(metadata_reference) const;
-};
-
-#endif
+ /// Decides whether a metadata object should be moved to the front
+ /// of the list. A list-update based containers object will call
+ /// this method to decide whether to move a node to the front of
+ /// the list. The method shoule return true if the node should be
+ /// moved to the front of the list.
+ bool
+ operator()(metadata_reference) const;
+ };
+}
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp
deleted file mode 100644
index e2c4b9ae9c..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file cond_dtor.hpp
- * Contains a conditional destructor
- */
-
-template<typename Size_Type>
-class cond_dtor
-{
-public:
- cond_dtor(value_vector a_vec, iterator& r_last_it, Size_Type total_size)
- : m_a_vec(a_vec), m_r_last_it(r_last_it), m_max_size(total_size),
- m_no_action(false)
- { }
-
- ~cond_dtor()
- {
- if (m_no_action)
- return;
- iterator it = m_a_vec;
- while (it != m_r_last_it)
- {
- it->~value_type();
- ++it;
- }
-
- if (m_max_size > 0)
- value_allocator().deallocate(m_a_vec, m_max_size);
- }
-
- inline void
- set_no_action()
- { m_no_action = true; }
-
-protected:
- value_vector m_a_vec;
- iterator& m_r_last_it;
- const Size_Type m_max_size;
- bool m_no_action;
-};
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
index d6844fc1ee..494ded24bd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file ov_tree_map_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
@@ -48,44 +48,41 @@ PB_DS_CLASS_C_DEC::s_metadata_alloc;
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_OV_TREE_CLASS_NAME() :
+PB_DS_OV_TREE_NAME() :
m_a_values(0),
m_a_metadata(0),
m_end_it(0),
m_size(0)
-{ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn) :
- cmp_fn_base(r_cmp_fn),
+PB_DS_OV_TREE_NAME(const Cmp_Fn& r_cmp_fn) :
+ cmp_fn(r_cmp_fn),
m_a_values(0),
m_a_metadata(0),
m_end_it(0),
m_size(0)
-{ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
- cmp_fn_base(r_cmp_fn),
- node_update(r_node_update),
+PB_DS_OV_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_nodeu) :
+ cmp_fn(r_cmp_fn),
+ node_update(r_nodeu),
m_a_values(0),
m_a_metadata(0),
m_end_it(0),
m_size(0)
-{ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
-#ifdef _GLIBCXX_DEBUG
- debug_base(other),
-#endif
+PB_DS_OV_TREE_NAME(const PB_DS_CLASS_C_DEC& other) :
#ifdef PB_DS_TREE_TRACE
- PB_DS_TREE_TRACE_BASE_C_DEC(other),
-#endif
- cmp_fn_base(other),
+ trace_base(other),
+#endif
+ cmp_fn(other),
node_update(other),
m_a_values(0),
m_a_metadata(0),
@@ -93,7 +90,7 @@ PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
m_size(0)
{
copy_from_ordered_range(other.begin(), other.end());
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -103,26 +100,18 @@ PB_DS_CLASS_C_DEC::
copy_from_range(It first_it, It last_it)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef
- std::map<
- key_type,
- mapped_type,
- Cmp_Fn,
- typename Allocator::template rebind<
- value_type>::other>
+ typedef std::map<key_type, mapped_type, Cmp_Fn,
+ typename _Alloc::template rebind<value_type>::other>
map_type;
-#else
- typedef
- std::set<
- key_type,
- Cmp_Fn,
- typename Allocator::template rebind<
- Key>::other>
+#else
+ typedef std::set<key_type, Cmp_Fn,
+ typename _Alloc::template rebind<Key>::other>
map_type;
-#endif
+#endif
map_type m(first_it, last_it);
copy_from_ordered_range(m.begin(), m.end());
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -143,40 +132,34 @@ copy_from_ordered_range(It first_it, It last_it)
cond_dtor<size_type> cd(a_values, target_it, len);
while (source_it != source_end_it)
{
- new (const_cast<void* >(static_cast<const void* >(target_it)))
- value_type(*source_it++);
-
+ void* __v = const_cast<void*>(static_cast<const void*>(target_it));
+ new (__v) value_type(*source_it++);
++target_it;
}
- reallocate_metadata((node_update* )this, len);
+ reallocate_metadata((node_update*)this, len);
cd.set_no_action();
m_a_values = a_values;
m_size = len;
m_end_it = m_a_values + m_size;
- update(PB_DS_node_begin_imp(), (node_update* )this);
+ update(PB_DS_node_begin_imp(), (node_update*)this);
#ifdef _GLIBCXX_DEBUG
- const_iterator dbg_it = m_a_values;
- while (dbg_it != m_end_it)
- {
- debug_base::insert_new(PB_DS_V2F(*dbg_it));
- dbg_it++;
- }
- PB_DS_CLASS_C_DEC::assert_valid();
-#endif
+ for (const_iterator dbg_it = m_a_values; dbg_it != m_end_it; ++dbg_it)
+ debug_base::insert_new(PB_DS_V2F(*dbg_it));
+#endif
}
PB_DS_CLASS_T_DEC
template<typename It>
void
PB_DS_CLASS_C_DEC::
-copy_from_ordered_range(It first_it, It last_it, It other_first_it,
+copy_from_ordered_range(It first_it, It last_it, It other_first_it,
It other_last_it)
{
clear();
- const size_type len = std::distance(first_it, last_it)
- + std::distance(other_first_it, other_last_it);
+ const size_type len = std::distance(first_it, last_it)
+ + std::distance(other_first_it, other_last_it);
value_vector a_values = s_value_alloc.allocate(len);
@@ -210,14 +193,9 @@ copy_from_ordered_range(It first_it, It last_it, It other_first_it,
update(PB_DS_node_begin_imp(), (node_update* )this);
#ifdef _GLIBCXX_DEBUG
- const_iterator dbg_it = m_a_values;
- while (dbg_it != m_end_it)
- {
- debug_base::insert_new(PB_DS_V2F(*dbg_it));
- dbg_it++;
- }
- PB_DS_CLASS_C_DEC::assert_valid();
-#endif
+ for (const_iterator dbg_it = m_a_values; dbg_it != m_end_it; ++dbg_it)
+ debug_base::insert_new(PB_DS_V2F(*dbg_it));
+#endif
}
PB_DS_CLASS_T_DEC
@@ -225,10 +203,15 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
value_swap(other);
- std::swap((Cmp_Fn& )(*this), (Cmp_Fn& )other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ std::swap(static_cast<cmp_fn&>(*this),
+ static_cast<cmp_fn&>(other));
+ std::swap(static_cast<traits_base&>(*this),
+ static_cast<traits_base&>(other));
+ PB_DS_ASSERT_VALID(other)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -236,26 +219,26 @@ void
PB_DS_CLASS_C_DEC::
value_swap(PB_DS_CLASS_C_DEC& other)
{
+ _GLIBCXX_DEBUG_ONLY(debug_base::swap(other);)
std::swap(m_a_values, other.m_a_values);
std::swap(m_a_metadata, other.m_a_metadata);
std::swap(m_size, other.m_size);
std::swap(m_end_it, other.m_end_it);
- _GLIBCXX_DEBUG_ONLY(debug_base::swap(other);)
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~PB_DS_OV_TREE_CLASS_NAME()
+~PB_DS_OV_TREE_NAME()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
cond_dtor<size_type> cd(m_a_values, m_end_it, m_size);
- reallocate_metadata((node_update* )this, 0);
+ reallocate_metadata((node_update*)this, 0);
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-update(node_iterator /*it*/, null_node_update_pointer)
+update(node_iterator, null_node_update_pointer)
{ }
PB_DS_CLASS_T_DEC
@@ -264,10 +247,11 @@ void
PB_DS_CLASS_C_DEC::
update(node_iterator nd_it, Node_Update* p_update)
{
- const_node_iterator end_it = PB_DS_node_end_imp();
- if (nd_it == end_it)
- return;
- update(nd_it.get_l_child(), p_update);
- update(nd_it.get_r_child(), p_update);
- node_update::operator()(nd_it, end_it);
+ node_const_iterator end_it = PB_DS_node_end_imp();
+ if (nd_it != end_it)
+ {
+ update(nd_it.get_l_child(), p_update);
+ update(nd_it.get_r_child(), p_update);
+ node_update::operator()(nd_it, end_it);
+ }
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
index 66f4ed6677..8c27a46500 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file ov_tree_map_/debug_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
@@ -43,41 +43,37 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- std::cout << "av1" << std::endl;
if (m_a_values == 0 || m_end_it == 0 || m_size == 0)
- _GLIBCXX_DEBUG_ASSERT(m_a_values == 0 && m_end_it == 0 && m_size == 0);
+ PB_DS_DEBUG_VERIFY(m_a_values == 0 && m_end_it == 0 && m_size == 0);
- std::cout << "av2" << std::endl;
- assert_iterators();
- std::cout << "av3" << std::endl;
+ assert_iterators(__file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_iterators() const
+assert_iterators(const char* __file, int __line) const
{
- debug_base::check_size(m_size);
+ debug_base::check_size(m_size, __file, __line);
size_type iterated_num = 0;
const_iterator prev_it = end();
- _GLIBCXX_DEBUG_ASSERT(m_end_it == m_a_values + m_size);
+ PB_DS_DEBUG_VERIFY(m_end_it == m_a_values + m_size);
for (const_iterator it = begin(); it != end(); ++it)
{
++iterated_num;
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(PB_DS_V2F(*it));)
- _GLIBCXX_DEBUG_ASSERT(lower_bound(PB_DS_V2F(*it)) == it);
+ debug_base::check_key_exists(PB_DS_V2F(*it), __file, __line);
+ PB_DS_DEBUG_VERIFY(lower_bound(PB_DS_V2F(*it)) == it);
const_iterator upper_bound_it = upper_bound(PB_DS_V2F(*it));
--upper_bound_it;
- _GLIBCXX_DEBUG_ASSERT(upper_bound_it == it);
+ PB_DS_DEBUG_VERIFY(upper_bound_it == it);
if (prev_it != end())
- _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(*prev_it),
- PB_DS_V2F(*it)));
+ PB_DS_DEBUG_VERIFY(Cmp_Fn::operator()(PB_DS_V2F(*prev_it),
+ PB_DS_V2F(*it)));
prev_it = it;
}
- _GLIBCXX_DEBUG_ASSERT(iterated_num == m_size);
+ PB_DS_DEBUG_VERIFY(iterated_num == m_size);
}
-#endif
-
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
index 6f9a09d8d0..31eb7c7492 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file ov_tree_map_/erase_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
@@ -43,10 +43,9 @@ void
PB_DS_CLASS_C_DEC::
clear()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
if (m_size == 0)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
return;
}
else
@@ -59,7 +58,7 @@ clear()
m_a_values = 0;
m_size = 0;
m_end_it = m_a_values;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -68,16 +67,16 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
#ifdef PB_DS_REGRESSION
- typename Allocator::group_adjustor adjust(m_size);
-#endif
+ typename _Alloc::group_adjustor adjust(m_size);
+#endif
size_type new_size = 0;
size_type num_val_ersd = 0;
- iterator source_it = m_a_values;
- for (source_it = begin(); source_it != m_end_it; ++source_it)
+
+ for (iterator source_it = begin(); source_it != m_end_it; ++source_it)
if (!pred(*source_it))
++new_size;
else
@@ -93,19 +92,19 @@ erase_if(Pred pred)
iterator target_it = a_new_values;
cond_dtor<size_type> cd(a_new_values, target_it, new_size);
_GLIBCXX_DEBUG_ONLY(debug_base::clear());
- for (source_it = begin(); source_it != m_end_it; ++source_it)
+ for (iterator source_it = begin(); source_it != m_end_it; ++source_it)
{
if (!pred(*source_it))
- {
- new (const_cast<void*>(static_cast<const void* >(target_it)))
+ {
+ new (const_cast<void*>(static_cast<const void*>(target_it)))
value_type(*source_it);
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(*source_it)));
++target_it;
- }
+ }
}
- reallocate_metadata((node_update* )this, new_size);
+ reallocate_metadata((node_update*)this, new_size);
cd.set_no_action();
{
@@ -115,8 +114,8 @@ erase_if(Pred pred)
m_a_values = a_new_values;
m_size = new_size;
m_end_it = target_it;
- update(node_begin(), (node_update* )this);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ update(node_begin(), (node_update*)this);
+ PB_DS_ASSERT_VALID((*this))
return num_val_ersd;
}
@@ -126,15 +125,15 @@ It
PB_DS_CLASS_C_DEC::
erase_imp(It it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
if (it == end())
return end();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::check_key_exists(PB_DS_V2F(*it));)
+ PB_DS_CHECK_KEY_EXISTS(PB_DS_V2F(*it))
#ifdef PB_DS_REGRESSION
- typename Allocator::group_adjustor adjust(m_size);
-#endif
+ typename _Alloc::group_adjustor adjust(m_size);
+#endif
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
value_vector a_values = s_value_alloc.allocate(m_size - 1);
@@ -151,12 +150,12 @@ erase_imp(It it)
{
if (source_it != it)
{
- _GLIBCXX_DEBUG_ONLY(++cnt;)
+ _GLIBCXX_DEBUG_ONLY(++cnt;)
_GLIBCXX_DEBUG_ASSERT(cnt != m_size);
- new (const_cast<void* >(static_cast<const void* >(target_it)))
+ new (const_cast<void*>(static_cast<const void*>(target_it)))
value_type(*source_it);
- ++target_it;
+ ++target_it;
}
else
ret_it = target_it;
@@ -164,9 +163,9 @@ erase_imp(It it)
}
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
- reallocate_metadata((node_update* )this, m_size - 1);
+ reallocate_metadata((node_update*)this, m_size - 1);
cd.set_no_action();
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::erase_existing(PB_DS_V2F(*it));)
+ _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(*it));)
{
cond_dtor<size_type> cd1(m_a_values, m_end_it, m_size);
}
@@ -174,15 +173,15 @@ erase_imp(It it)
m_a_values = a_values;
--m_size;
m_end_it = m_a_values + m_size;
- update(node_begin(), (node_update* )this);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ update(node_begin(), (node_update*)this);
+ PB_DS_ASSERT_VALID((*this))
return It(ret_it);
}
PB_DS_CLASS_T_DEC
bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{
point_iterator it = find(r_key);
if (it == end())
@@ -190,4 +189,3 @@ erase(const_key_reference r_key)
erase(it);
return true;
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
index c9421af397..6beee7118c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file ov_tree_map_/info_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
@@ -43,7 +43,7 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
size() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return m_size;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
index 51d1b4d34b..e96628bdd8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file ov_tree_map_/insert_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
index 40f110084c..af866866ce 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
@@ -34,18 +34,18 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
+ * @file ov_tree_map_/iterators_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
node_begin() const
{ return PB_DS_node_begin_imp(); }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
node_end() const
{ return PB_DS_node_end_imp(); }
@@ -63,11 +63,11 @@ node_end()
{ return PB_DS_node_end_imp(); }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
PB_DS_node_begin_imp() const
{
- return const_node_iterator(const_cast<pointer>(mid_pointer(begin(), end())),
+ return node_const_iterator(const_cast<pointer>(mid_pointer(begin(), end())),
const_cast<pointer>(begin()),
const_cast<pointer>(end()),(m_a_metadata == 0)?
0 :
@@ -75,11 +75,11 @@ PB_DS_node_begin_imp() const
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
PB_DS_node_end_imp() const
{
- return const_node_iterator(end(), end(), end(),
+ return node_const_iterator(end(), end(), end(),
(m_a_metadata == 0) ? 0 : m_a_metadata + m_size);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
index 3517896a6f..19a424d822 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file node_iterators.hpp
+ * @file ov_tree_map_/node_iterators.hpp
* Contains an implementation class for ov_tree_.
*/
@@ -49,28 +49,27 @@ namespace __gnu_pbds
{
namespace detail
{
-
#define PB_DS_OV_TREE_CONST_NODE_ITERATOR_C_DEC \
- ov_tree_node_const_it_<Value_Type, Metadata_Type, Allocator>
+ ov_tree_node_const_it_<Value_Type, Metadata_Type, _Alloc>
- // Const node reference.
- template<typename Value_Type, typename Metadata_Type, class Allocator>
+ /// Const node reference.
+ template<typename Value_Type, typename Metadata_Type, typename _Alloc>
class ov_tree_node_const_it_
{
protected:
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Value_Type>::other::pointer
pointer;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Value_Type>::other::const_pointer
const_pointer;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Metadata_Type>::other::const_pointer
const_metadata_pointer;
@@ -93,18 +92,18 @@ namespace __gnu_pbds
typedef trivial_iterator_difference_type difference_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Value_Type>::other::const_pointer
value_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
typename remove_const<
Value_Type>::type>::other::const_pointer
reference;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
typename remove_const<
Value_Type>::type>::other::const_pointer
const_reference;
@@ -112,9 +111,9 @@ namespace __gnu_pbds
typedef Metadata_Type metadata_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
metadata_type>::other::const_reference
- const_metadata_reference;
+ metadata_const_reference;
public:
inline
@@ -125,12 +124,12 @@ namespace __gnu_pbds
operator*() const
{ return m_p_value; }
- inline const_metadata_reference
+ inline metadata_const_reference
get_metadata() const
{
enum
{
- has_metadata = !is_same<Metadata_Type, null_node_metadata>::value
+ has_metadata = !is_same<Metadata_Type, null_type>::value
};
PB_DS_STATIC_ASSERT(should_have_metadata, has_metadata);
@@ -138,6 +137,7 @@ namespace __gnu_pbds
return *m_p_metadata;
}
+ /// Returns the node iterator associated with the left node.
inline this_type
get_l_child() const
{
@@ -153,11 +153,12 @@ namespace __gnu_pbds
mid_pointer(p_begin_metadata, m_p_metadata)));
}
+ /// Returns the node iterator associated with the right node.
inline this_type
get_r_child() const
{
if (m_p_value == m_p_end_value)
- return (this_type(m_p_end_value, m_p_end_value, m_p_end_value));
+ return (this_type(m_p_end_value, m_p_end_value, m_p_end_value));
const_metadata_pointer p_end_metadata =
m_p_metadata + (m_p_end_value - m_p_value);
@@ -196,13 +197,12 @@ namespace __gnu_pbds
};
#define PB_DS_OV_TREE_NODE_ITERATOR_C_DEC \
- ov_tree_node_it_<Value_Type, Metadata_Type, Allocator>
+ ov_tree_node_it_<Value_Type, Metadata_Type, _Alloc>
- // Node reference.
- template<typename Value_Type, typename Metadata_Type, class Allocator>
+ /// Node reference.
+ template<typename Value_Type, typename Metadata_Type, typename _Alloc>
class ov_tree_node_it_ : public PB_DS_OV_TREE_CONST_NODE_ITERATOR_C_DEC
{
-
private:
typedef PB_DS_OV_TREE_NODE_ITERATOR_C_DEC this_type;
@@ -217,39 +217,37 @@ namespace __gnu_pbds
const_metadata_pointer;
public:
-
typedef trivial_iterator_tag iterator_category;
typedef trivial_iterator_difference_type difference_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
Value_Type>::other::pointer
value_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
typename remove_const<
Value_Type>::type>::other::pointer
reference;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
typename remove_const<
Value_Type>::type>::other::pointer
const_reference;
- public:
inline
ov_tree_node_it_(const_pointer p_nd = 0, const_pointer p_begin_nd = 0, const_pointer p_end_nd = 0, const_metadata_pointer p_metadata = 0) : base_type(p_nd, p_begin_nd, p_end_nd, p_metadata)
{ }
- // Access.
+ /// Access.
inline reference
operator*() const
{ return reference(base_type::m_p_value); }
- // Returns the node reference associated with the left node.
+ /// Returns the node reference associated with the left node.
inline ov_tree_node_it_
get_l_child() const
{
@@ -265,12 +263,13 @@ namespace __gnu_pbds
base_type::mid_pointer(p_begin_metadata, base_type::m_p_metadata)));
}
- // Returns the node reference associated with the right node.
+ /// Returns the node reference associated with the right node.
inline ov_tree_node_it_
get_r_child() const
{
if (base_type::m_p_value == base_type::m_p_end_value)
- return (this_type(base_type::m_p_end_value, base_type::m_p_end_value, base_type::m_p_end_value));
+ return this_type(base_type::m_p_end_value, base_type::m_p_end_value,
+ base_type::m_p_end_value);
const_metadata_pointer p_end_metadata =
base_type::m_p_metadata + (base_type::m_p_end_value - base_type::m_p_value);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
index 7d2ed3f1aa..c24ae557a7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,19 +34,21 @@
// warranty.
/**
- * @file ov_tree_map_.hpp
- * Contains an implementation class for ov_tree_.
+ * @file ov_tree_map_/ov_tree_map_.hpp
+ * Contains an implementation class for ov_tree.
*/
#include <map>
#include <set>
+#include <ext/pb_ds/exception.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/eq_fn/eq_by_less.hpp>
#include <ext/pb_ds/detail/types_traits.hpp>
-#include <ext/pb_ds/detail/debug_map_base.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
-#include <ext/pb_ds/exception.hpp>
#include <ext/pb_ds/detail/tree_trace_base.hpp>
+#ifdef _GLIBCXX_DEBUG
+#include <ext/pb_ds/detail/debug_map_base.hpp>
+#endif
#include <utility>
#include <functional>
#include <algorithm>
@@ -58,155 +60,174 @@ namespace __gnu_pbds
{
namespace detail
{
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Mapped, class Cmp_Fn, \
- class Node_And_It_Traits, class Allocator>
-
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_OV_TREE_CLASS_NAME ov_tree_data_
-#endif
+#define PB_DS_OV_TREE_NAME ov_tree_map
+#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_node_const_iterator_map
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_OV_TREE_CLASS_NAME ov_tree_no_data_
-#endif
+#define PB_DS_OV_TREE_NAME ov_tree_set
+#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_node_const_iterator_set
+#endif
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_const_node_iterator_data_
-#else
-#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_const_node_iterator_no_data_
-#endif
+#define PB_DS_CLASS_T_DEC \
+ template<typename Key, typename Mapped, typename Cmp_Fn, \
+ typename Node_And_It_Traits, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- PB_DS_OV_TREE_CLASS_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator>
+ PB_DS_OV_TREE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc>
-#define PB_DS_TYPES_TRAITS_C_DEC \
- types_traits<Key, Mapped, Allocator, false>
+#define PB_DS_OV_TREE_TRAITS_BASE \
+ types_traits<Key, Mapped, _Alloc, false>
#ifdef _GLIBCXX_DEBUG
#define PB_DS_DEBUG_MAP_BASE_C_DEC \
debug_map_base<Key, eq_by_less<Key, Cmp_Fn>, \
- typename Allocator::template rebind<Key>::other::const_reference>
-#endif
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#define PB_DS_EP2VP(X)& ((X)->m_value)
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#define PB_DS_EP2VP(X)& ((X)->m_value.first)
-#endif
+ typename _Alloc::template rebind<Key>::other::const_reference>
+#endif
#ifdef PB_DS_TREE_TRACE
#define PB_DS_TREE_TRACE_BASE_C_DEC \
- tree_trace_base<typename Node_And_It_Traits::const_node_iterator, \
- typename Node_And_It_Traits::node_iterator, \
- Cmp_Fn, false, Allocator>
-#endif
-
- // Ordered-vector tree associative-container.
- template<typename Key, typename Mapped, class Cmp_Fn,
- class Node_And_It_Traits, class Allocator>
- class PB_DS_OV_TREE_CLASS_NAME :
+ tree_trace_base<typename Node_And_It_Traits::node_const_iterator, \
+ typename Node_And_It_Traits::node_iterator, \
+ Cmp_Fn, false, _Alloc>
+#endif
+
+#ifndef PB_DS_CHECK_KEY_EXISTS
+# error Missing definition
+#endif
+
+ /**
+ * @brief Ordered-vector tree associative-container.
+ * @ingroup branch-detail
+ */
+ template<typename Key, typename Mapped, typename Cmp_Fn,
+ typename Node_And_It_Traits, typename _Alloc>
+ class PB_DS_OV_TREE_NAME :
#ifdef _GLIBCXX_DEBUG
protected PB_DS_DEBUG_MAP_BASE_C_DEC,
-#endif
+#endif
#ifdef PB_DS_TREE_TRACE
public PB_DS_TREE_TRACE_BASE_C_DEC,
-#endif
+#endif
public Cmp_Fn,
public Node_And_It_Traits::node_update,
- public PB_DS_TYPES_TRAITS_C_DEC
+ public PB_DS_OV_TREE_TRAITS_BASE
{
private:
- typedef PB_DS_TYPES_TRAITS_C_DEC traits_base;
+ typedef PB_DS_OV_TREE_TRAITS_BASE traits_base;
+ typedef Node_And_It_Traits traits_type;
typedef typename remove_const<typename traits_base::value_type>::type non_const_value_type;
- typedef typename Allocator::template rebind<non_const_value_type>::other value_allocator;
- typedef typename value_allocator::pointer value_vector;
-
-
- typedef Cmp_Fn cmp_fn_base;
+ typedef typename _Alloc::template rebind<non_const_value_type>::other value_allocator;
+ typedef typename value_allocator::pointer value_vector;
#ifdef _GLIBCXX_DEBUG
- typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
-#endif
+ typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
+#endif
- typedef typename traits_base::pointer mapped_pointer_;
- typedef typename traits_base::const_pointer const_mapped_pointer_;
+#ifdef PB_DS_TREE_TRACE
+ typedef PB_DS_TREE_TRACE_BASE_C_DEC trace_base;
+#endif
+
+ typedef typename traits_base::pointer mapped_pointer_;
+ typedef typename traits_base::const_pointer mapped_const_pointer_;
- typedef typename Node_And_It_Traits::metadata_type metadata_type;
+ typedef typename traits_type::metadata_type metadata_type;
- typedef typename Allocator::template rebind<metadata_type>::other metadata_allocator;
- typedef typename metadata_allocator::pointer metadata_pointer;
- typedef typename metadata_allocator::const_reference const_metadata_reference;
- typedef typename metadata_allocator::reference metadata_reference;
+ typedef typename _Alloc::template rebind<metadata_type>::other metadata_allocator;
+ typedef typename metadata_allocator::pointer metadata_pointer;
+ typedef typename metadata_allocator::const_reference metadata_const_reference;
+ typedef typename metadata_allocator::reference metadata_reference;
- typedef
- typename Node_And_It_Traits::null_node_update_pointer
+ typedef typename traits_type::null_node_update_pointer
null_node_update_pointer;
public:
-
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
-
- typedef Cmp_Fn cmp_fn;
-
- typedef typename Node_And_It_Traits::node_update node_update;
-
- typedef typename traits_base::key_type key_type;
- typedef typename traits_base::key_pointer key_pointer;
- typedef typename traits_base::const_key_pointer const_key_pointer;
- typedef typename traits_base::key_reference key_reference;
- typedef typename traits_base::const_key_reference const_key_reference;
- typedef typename traits_base::mapped_type mapped_type;
- typedef typename traits_base::mapped_pointer mapped_pointer;
- typedef typename traits_base::const_mapped_pointer const_mapped_pointer;
- typedef typename traits_base::mapped_reference mapped_reference;
- typedef typename traits_base::const_mapped_reference const_mapped_reference;
- typedef typename traits_base::value_type value_type;
- typedef typename traits_base::pointer pointer;
- typedef typename traits_base::const_pointer const_pointer;
- typedef typename traits_base::reference reference;
- typedef typename traits_base::const_reference const_reference;
-
- typedef const_pointer const_point_iterator;
-
+ typedef ov_tree_tag container_category;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef Cmp_Fn cmp_fn;
+
+ typedef typename traits_base::key_type key_type;
+ typedef typename traits_base::key_pointer key_pointer;
+ typedef typename traits_base::key_const_pointer key_const_pointer;
+ typedef typename traits_base::key_reference key_reference;
+ typedef typename traits_base::key_const_reference key_const_reference;
+ typedef typename traits_base::mapped_type mapped_type;
+ typedef typename traits_base::mapped_pointer mapped_pointer;
+ typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
+ typedef typename traits_base::mapped_reference mapped_reference;
+ typedef typename traits_base::mapped_const_reference mapped_const_reference;
+ typedef typename traits_base::value_type value_type;
+ typedef typename traits_base::pointer pointer;
+ typedef typename traits_base::const_pointer const_pointer;
+ typedef typename traits_base::reference reference;
+ typedef typename traits_base::const_reference const_reference;
+
+ typedef const_pointer point_const_iterator;
#ifdef PB_DS_DATA_TRUE_INDICATOR
- typedef pointer point_iterator;
-#else
- typedef const_point_iterator point_iterator;
-#endif
-
- typedef const_point_iterator const_iterator;
-
- typedef point_iterator iterator;
-
-#include <ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp>
+ typedef pointer point_iterator;
+#else
+ typedef point_const_iterator point_iterator;
+#endif
+
+ typedef point_iterator iterator;
+ typedef point_const_iterator const_iterator;
+
+ /// Conditional destructor.
+ template<typename Size_Type>
+ class cond_dtor
+ {
+ public:
+ cond_dtor(value_vector a_vec, iterator& r_last_it,
+ Size_Type total_size)
+ : m_a_vec(a_vec), m_r_last_it(r_last_it), m_max_size(total_size),
+ m_no_action(false)
+ { }
+
+ ~cond_dtor()
+ {
+ if (m_no_action)
+ return;
+ iterator it = m_a_vec;
+ while (it != m_r_last_it)
+ {
+ it->~value_type();
+ ++it;
+ }
+
+ if (m_max_size > 0)
+ value_allocator().deallocate(m_a_vec, m_max_size);
+ }
- typedef
- typename Node_And_It_Traits::const_node_iterator
- const_node_iterator;
+ inline void
+ set_no_action()
+ { m_no_action = true; }
+
+ protected:
+ value_vector m_a_vec;
+ iterator& m_r_last_it;
+ const Size_Type m_max_size;
+ bool m_no_action;
+ };
+
+ typedef typename traits_type::node_update node_update;
+ typedef typename traits_type::node_iterator node_iterator;
+ typedef typename traits_type::node_const_iterator node_const_iterator;
- typedef typename Node_And_It_Traits::node_iterator node_iterator;
- public:
+ PB_DS_OV_TREE_NAME();
- PB_DS_OV_TREE_CLASS_NAME();
+ PB_DS_OV_TREE_NAME(const Cmp_Fn&);
- PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn&);
+ PB_DS_OV_TREE_NAME(const Cmp_Fn&, const node_update&);
- PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn&, const node_update&);
+ PB_DS_OV_TREE_NAME(const PB_DS_CLASS_C_DEC&);
- PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
-
- ~PB_DS_OV_TREE_CLASS_NAME();
+ ~PB_DS_OV_TREE_NAME();
void
swap(PB_DS_CLASS_C_DEC&);
@@ -224,60 +245,57 @@ namespace __gnu_pbds
inline size_type
size() const;
- Cmp_Fn&
+ Cmp_Fn&
get_cmp_fn();
- const Cmp_Fn&
+ const Cmp_Fn&
get_cmp_fn() const;
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
point_iterator it = lower_bound(r_key);
if (it != end() && !Cmp_Fn::operator()(r_key, PB_DS_V2F(*it)))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_CHECK_KEY_EXISTS(r_key)
+ PB_DS_ASSERT_VALID((*this))
return it->second;
}
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- return (insert_new_val(it, std::make_pair(r_key, mapped_type()))->second);
-#else
+ return insert_new_val(it, std::make_pair(r_key, mapped_type()))->second;
+#else
insert(r_key);
- return traits_base::s_null_mapped;
-#endif
+ return traits_base::s_null_type;
+#endif
}
inline std::pair<point_iterator, bool>
insert(const_reference r_value)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- const_key_reference r_key = PB_DS_V2F(r_value);
+ PB_DS_ASSERT_VALID((*this))
+ key_const_reference r_key = PB_DS_V2F(r_value);
point_iterator it = lower_bound(r_key);
if (it != end()&& !Cmp_Fn::operator()(r_key, PB_DS_V2F(*it)))
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return std::make_pair(it, false);
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
return std::make_pair(insert_new_val(it, r_value), true);
}
inline point_iterator
- lower_bound(const_key_reference r_key)
+ lower_bound(key_const_reference r_key)
{
pointer it = m_a_values;
pointer e_it = m_a_values + m_size;
while (it != e_it)
{
pointer mid_it = it + ((e_it - it) >> 1);
- if (cmp_fn_base::operator()(PB_DS_V2F(*mid_it), r_key))
+ if (cmp_fn::operator()(PB_DS_V2F(*mid_it), r_key))
it = ++mid_it;
else
e_it = mid_it;
@@ -285,49 +303,49 @@ namespace __gnu_pbds
return it;
}
- inline const_point_iterator
- lower_bound(const_key_reference r_key) const
+ inline point_const_iterator
+ lower_bound(key_const_reference r_key) const
{ return const_cast<PB_DS_CLASS_C_DEC& >(*this).lower_bound(r_key); }
inline point_iterator
- upper_bound(const_key_reference r_key)
+ upper_bound(key_const_reference r_key)
{
iterator pot_it = lower_bound(r_key);
- if (pot_it != end()&& !Cmp_Fn::operator()(r_key, PB_DS_V2F(*pot_it)))
+ if (pot_it != end() && !Cmp_Fn::operator()(r_key, PB_DS_V2F(*pot_it)))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return ++pot_it;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return pot_it;
}
- inline const_point_iterator
- upper_bound(const_key_reference r_key) const
+ inline point_const_iterator
+ upper_bound(key_const_reference r_key) const
{ return const_cast<PB_DS_CLASS_C_DEC&>(*this).upper_bound(r_key); }
inline point_iterator
- find(const_key_reference r_key)
+ find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
iterator pot_it = lower_bound(r_key);
if (pot_it != end() && !Cmp_Fn::operator()(r_key, PB_DS_V2F(*pot_it)))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return pot_it;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return end();
}
- inline const_point_iterator
- find(const_key_reference r_key) const
- { return (const_cast<PB_DS_CLASS_C_DEC& >(*this).find(r_key)); }
+ inline point_const_iterator
+ find(key_const_reference r_key) const
+ { return (const_cast<PB_DS_CLASS_C_DEC&>(*this).find(r_key)); }
bool
- erase(const_key_reference);
+ erase(key_const_reference);
template<typename Pred>
inline size_type
@@ -344,7 +362,7 @@ namespace __gnu_pbds
join(PB_DS_CLASS_C_DEC&);
void
- split(const_key_reference, PB_DS_CLASS_C_DEC&);
+ split(key_const_reference, PB_DS_CLASS_C_DEC&);
inline iterator
begin()
@@ -362,22 +380,30 @@ namespace __gnu_pbds
end() const
{ return m_end_it; }
- inline const_node_iterator
+ /// Returns a const node_iterator corresponding to the node at the
+ /// root of the tree.
+ inline node_const_iterator
node_begin() const;
- inline const_node_iterator
- node_end() const;
-
+ /// Returns a node_iterator corresponding to the node at the
+ /// root of the tree.
inline node_iterator
node_begin();
+ /// Returns a const node_iterator corresponding to a node just
+ /// after a leaf of the tree.
+ inline node_const_iterator
+ node_end() const;
+
+ /// Returns a node_iterator corresponding to a node just
+ /// after a leaf of the tree.
inline node_iterator
node_end();
private:
inline void
- update(node_iterator /*it*/, null_node_update_pointer);
+ update(node_iterator, null_node_update_pointer);
template<typename Node_Update>
void
@@ -412,12 +438,11 @@ namespace __gnu_pbds
inline iterator
insert_new_val(iterator it, const_reference r_value)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
#ifdef PB_DS_REGRESSION
- typename Allocator::group_adjustor adjust(m_size);
-#endif
+ typename _Alloc::group_adjustor adjust(m_size);
+#endif
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(PB_DS_V2F(r_value)));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_value))
value_vector a_values = s_value_alloc.allocate(m_size + 1);
@@ -429,23 +454,23 @@ namespace __gnu_pbds
cond_dtor<size_type> cd(a_values, target_it, m_size + 1);
while (source_it != it)
{
- new (const_cast<void* >(static_cast<const void* >(target_it)))
+ new (const_cast<void*>(static_cast<const void*>(target_it)))
value_type(*source_it++);
++target_it;
}
- new (const_cast<void* >(static_cast<const void* >(ret_it = target_it)))
+ new (const_cast<void*>(static_cast<const void*>(ret_it = target_it)))
value_type(r_value);
++target_it;
while (source_it != source_end_it)
{
- new (const_cast<void* >(static_cast<const void* >(target_it)))
+ new (const_cast<void*>(static_cast<const void*>(target_it)))
value_type(*source_it++);
++target_it;
}
- reallocate_metadata((node_update* )this, m_size + 1);
+ reallocate_metadata((node_update*)this, m_size + 1);
cd.set_no_action();
if (m_size != 0)
{
@@ -457,26 +482,26 @@ namespace __gnu_pbds
m_end_it = m_a_values + m_size;
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_value)));
update(node_begin(), (node_update* )this);
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
void
- assert_iterators() const;
-#endif
+ assert_iterators(const char*, int) const;
+#endif
template<typename It>
It
- erase_imp(It it);
+ erase_imp(It);
- inline const_node_iterator
+ inline node_const_iterator
PB_DS_node_begin_imp() const;
- inline const_node_iterator
+ inline node_const_iterator
PB_DS_node_end_imp() const;
inline node_iterator
@@ -486,13 +511,13 @@ namespace __gnu_pbds
PB_DS_node_end_imp();
private:
- static value_allocator s_value_alloc;
+ static value_allocator s_value_alloc;
static metadata_allocator s_metadata_alloc;
- value_vector m_a_values;
- metadata_pointer m_a_metadata;
- iterator m_end_it;
- size_type m_size;
+ value_vector m_a_values;
+ metadata_pointer m_a_metadata;
+ iterator m_end_it;
+ size_type m_size;
};
#include <ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp>
@@ -506,17 +531,12 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_OV_TREE_CLASS_NAME
-#undef PB_DS_TYPES_TRAITS_C_DEC
+#undef PB_DS_OV_TREE_NAME
+#undef PB_DS_OV_TREE_TRAITS_BASE
#undef PB_DS_DEBUG_MAP_BASE_C_DEC
#ifdef PB_DS_TREE_TRACE
#undef PB_DS_TREE_TRACE_BASE_C_DEC
-#endif
-
-#undef PB_DS_V2F
-#undef PB_DS_EP2VP
-#undef PB_DS_V2S
+#endif
#undef PB_DS_CONST_NODE_ITERATOR_NAME
-
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
index c06d6f851f..eafe0b039b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
@@ -34,8 +34,8 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file ov_tree_map_/policy_access_fn_imps.hpp
+ * Contains an implementation class for ov_tree.
*/
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
index 76bb6fafd5..a12c2320cc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,64 +34,58 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file ov_tree_map_/split_join_fn_imps.hpp
* Contains an implementation class for ov_tree_.
*/
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
+split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (m_size == 0)
{
other.clear();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
return;
}
if (Cmp_Fn::operator()(r_key, PB_DS_V2F(*begin())))
{
value_swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
if (!Cmp_Fn::operator()(r_key, PB_DS_V2F(*(end() - 1))))
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
return;
}
if (m_size == 1)
{
value_swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::join(other);)
iterator it = upper_bound(r_key);
PB_DS_CLASS_C_DEC new_other(other, other);
new_other.copy_from_ordered_range(it, end());
- PB_DS_CLASS_C_DEC new_this(*this, * this);
+ PB_DS_CLASS_C_DEC new_this(*this, *this);
new_this.copy_from_ordered_range(begin(), it);
// No exceptions from this point.
- _GLIBCXX_DEBUG_ONLY(debug_base::split(r_key,(Cmp_Fn& )(*this), other);)
- other.update(other.node_begin(), (node_update* )(&other));
- update(node_begin(), (node_update* )this);
+ other.update(other.node_begin(), (node_update*)(&other));
+ update(node_begin(), (node_update*)this);
other.value_swap(new_other);
value_swap(new_this);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -99,14 +93,16 @@ void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (other.m_size == 0)
return;
if (m_size == 0)
{
value_swap(other);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
@@ -122,16 +118,15 @@ join(PB_DS_CLASS_C_DEC& other)
PB_DS_CLASS_C_DEC new_this(*this, *this);
if (greater)
- new_this.copy_from_ordered_range(begin(), end(),
+ new_this.copy_from_ordered_range(begin(), end(),
other.begin(), other.end());
else
new_this.copy_from_ordered_range(other.begin(), other.end(),
begin(), end());
// No exceptions from this point.
- _GLIBCXX_DEBUG_ONLY(debug_base::join(other);)
value_swap(new_this);
other.clear();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp
index 63cb0f7fb4..ac933136bd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file traits.hpp
+ * @file ov_tree_map_/traits.hpp
* Contains an implementation class for ov_tree_.
*/
@@ -47,135 +47,142 @@ namespace __gnu_pbds
{
namespace detail
{
-
+ /// Tree traits.
+ /// @ingroup traits
template<typename Key,
typename Mapped,
class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
+ template<typename Node_CItr,
+ class Node_Itr,
class Cmp_Fn_,
- class Allocator_>
+ typename _Alloc_>
class Node_Update,
- class Allocator>
+ typename _Alloc>
struct tree_traits<
Key,
Mapped,
Cmp_Fn,
Node_Update,
ov_tree_tag,
- Allocator>
+ _Alloc>
{
private:
typedef
typename types_traits<
Key,
Mapped,
- Allocator,
+ _Alloc,
false>::value_type
value_type;
public:
typedef
- typename tree_node_metadata_selector<
+ typename tree_node_metadata_dispatch<
Key,
Mapped,
Cmp_Fn,
Node_Update,
- Allocator>::type
+ _Alloc>::type
metadata_type;
+ /// This is an iterator to an iterator: it iterates over nodes,
+ /// and de-referencing it returns one of the tree's iterators.
typedef
ov_tree_node_const_it_<
value_type,
metadata_type,
- Allocator>
- const_node_iterator;
+ _Alloc>
+ node_const_iterator;
typedef
ov_tree_node_it_<
value_type,
metadata_type,
- Allocator>
+ _Alloc>
node_iterator;
typedef
Node_Update<
- const_node_iterator,
+ node_const_iterator,
node_iterator,
Cmp_Fn,
- Allocator>
+ _Alloc>
node_update;
typedef
- __gnu_pbds::null_tree_node_update<
- const_node_iterator,
+ __gnu_pbds::null_node_update<
+ node_const_iterator,
node_iterator,
Cmp_Fn,
- Allocator>*
+ _Alloc>*
null_node_update_pointer;
};
+
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
+ template<typename Node_CItr,
+ class Node_Itr,
class Cmp_Fn_,
- class Allocator_>
+ typename _Alloc_>
class Node_Update,
- class Allocator>
+ typename _Alloc>
struct tree_traits<
Key,
- null_mapped_type,
+ null_type,
Cmp_Fn,
Node_Update,
ov_tree_tag,
- Allocator>
+ _Alloc>
{
private:
typedef
typename types_traits<
Key,
- null_mapped_type,
- Allocator,
+ null_type,
+ _Alloc,
false>::value_type
value_type;
public:
typedef
- typename tree_node_metadata_selector<
+ typename tree_node_metadata_dispatch<
Key,
- null_mapped_type,
+ null_type,
Cmp_Fn,
Node_Update,
- Allocator>::type
+ _Alloc>::type
metadata_type;
+ /// This is an iterator to an iterator: it iterates over nodes,
+ /// and de-referencing it returns one of the tree's iterators.
typedef
ov_tree_node_const_it_<
value_type,
metadata_type,
- Allocator>
- const_node_iterator;
+ _Alloc>
+ node_const_iterator;
- typedef const_node_iterator node_iterator;
+ typedef node_const_iterator node_iterator;
typedef
Node_Update<
- const_node_iterator,
- const_node_iterator,
+ node_const_iterator,
+ node_const_iterator,
Cmp_Fn,
- Allocator>
+ _Alloc>
node_update;
typedef
- __gnu_pbds::null_tree_node_update<
- const_node_iterator,
+ __gnu_pbds::null_node_update<
+ node_const_iterator,
node_iterator,
Cmp_Fn,
- Allocator>*
+ _Alloc>*
null_node_update_pointer;
};
-
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
index e292ed5d92..0b836c549c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file pairing_heap_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -46,46 +46,37 @@ copy_from_range(It first_it, It last_it)
{
while (first_it != last_it)
push(*(first_it++));
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-pairing_heap_()
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+pairing_heap()
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-pairing_heap_(const Cmp_Fn& r_cmp_fn) :
- PB_DS_BASE_C_DEC(r_cmp_fn)
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+pairing_heap(const Cmp_Fn& r_cmp_fn)
+: base_type(r_cmp_fn)
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-pairing_heap_(const PB_DS_CLASS_C_DEC& other) :
- PB_DS_BASE_C_DEC(other)
-{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+pairing_heap(const PB_DS_CLASS_C_DEC& other)
+: base_type(other)
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- PB_DS_BASE_C_DEC::swap(other);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ base_type::swap(other);
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~pairing_heap_()
+~pairing_heap()
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
index f6a1e94303..802c95e9b5 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file pairing_heap_/debug_fn_imps.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -43,11 +43,11 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_root == 0
+ PB_DS_DEBUG_VERIFY(base_type::m_p_root == 0
|| base_type::m_p_root->m_p_next_sibling == 0);
- base_type::assert_valid();
+ base_type::assert_valid(__file, __line);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
index 7ab31930ee..d6303c3294 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file pairing_heap_/erase_fn_imps.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -43,17 +43,17 @@ void
PB_DS_CLASS_C_DEC::
pop()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
node_pointer p_new_root = join_node_children(base_type::m_p_root);
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_new_root, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_new_root, false)
if (p_new_root != 0)
p_new_root->m_p_prev_or_parent = 0;
base_type::actual_erase_node(base_type::m_p_root);
base_type::m_p_root = p_new_root;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -61,11 +61,11 @@ void
PB_DS_CLASS_C_DEC::
erase(point_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
remove_node(it.m_p_nd);
base_type::actual_erase_node(it.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -73,21 +73,18 @@ void
PB_DS_CLASS_C_DEC::
remove_node(node_pointer p_nd)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
node_pointer p_new_child = join_node_children(p_nd);
-#ifdef _GLIBCXX_DEBUG
- if (p_new_child != 0)
- base_type::assert_node_consistent(p_new_child, false);
-#endif
+ PB_DS_ASSERT_NODE_CONSISTENT(p_new_child, false)
if (p_nd == base_type::m_p_root)
{
if (p_new_child != 0)
p_new_child->m_p_prev_or_parent = 0;
base_type::m_p_root = p_new_child;
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(base_type::m_p_root, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(base_type::m_p_root, false)
return;
}
@@ -101,14 +98,14 @@ remove_node(node_pointer p_nd)
if (p_new_child->m_p_next_sibling != 0)
p_new_child->m_p_next_sibling->m_p_prev_or_parent = p_new_child;
p_nd->m_p_prev_or_parent->m_p_l_child = p_new_child;
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd->m_p_prev_or_parent, false)
return;
}
p_nd->m_p_prev_or_parent->m_p_l_child = p_nd->m_p_next_sibling;
if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd->m_p_prev_or_parent, false)
return;
}
@@ -119,14 +116,14 @@ remove_node(node_pointer p_nd)
if (p_new_child->m_p_next_sibling != 0)
p_new_child->m_p_next_sibling->m_p_prev_or_parent = p_new_child;
p_new_child->m_p_prev_or_parent->m_p_next_sibling = p_new_child;
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd->m_p_prev_or_parent, false)
return;
}
p_nd->m_p_prev_or_parent->m_p_next_sibling = p_nd->m_p_next_sibling;
if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd->m_p_prev_or_parent, false)
}
PB_DS_CLASS_T_DEC
@@ -142,7 +139,7 @@ join_node_children(node_pointer p_nd)
p_ret = forward_join(p_ret, p_ret->m_p_next_sibling);
while (p_ret->m_p_prev_or_parent != p_nd)
p_ret = back_join(p_ret->m_p_prev_or_parent, p_ret);
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_ret, false);)
+ PB_DS_ASSERT_NODE_CONSISTENT(p_ret, false)
return p_ret;
}
@@ -171,7 +168,7 @@ forward_join(node_pointer p_nd, node_pointer p_next)
p_nd->m_p_next_sibling = 0;
base_type::make_child_of(p_next, p_nd);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false));
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd, false)
return p_nd;
}
@@ -187,13 +184,13 @@ back_join(node_pointer p_nd, node_pointer p_next)
{
p_next->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
base_type::make_child_of(p_nd, p_next);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_next, false));
+ PB_DS_ASSERT_NODE_CONSISTENT(p_next, false)
return p_next;
}
p_nd->m_p_next_sibling = 0;
base_type::make_child_of(p_next, p_nd);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false));
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd, false)
return p_nd;
}
@@ -203,10 +200,10 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
if (base_type::empty())
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return 0;
}
base_type::to_linked_list();
@@ -230,7 +227,7 @@ erase_if(Pred pred)
push_imp(p_cur);
p_cur = p_next;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return ersd;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
index 85efd70dca..49b2ca6342 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file pairing_heap_/find_fn_imps.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -43,8 +43,7 @@ inline typename PB_DS_CLASS_C_DEC::const_reference
PB_DS_CLASS_C_DEC::
top() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
-
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
return base_type::m_p_root->m_value;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
index 9a5f5f64e6..ced5eeb081 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file pairing_heap_/insert_fn_imps.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -43,15 +43,11 @@ inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
push(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- node_pointer p_new_nd = base_type::get_new_node_for_insert(r_val);
-
+ PB_DS_ASSERT_VALID((*this))
+ node_pointer p_new_nd = base_type::get_new_node_for_insert(r_val);
push_imp(p_new_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return point_iterator(p_new_nd);
+ PB_DS_ASSERT_VALID((*this))
+ return point_iterator(p_new_nd);
}
PB_DS_CLASS_T_DEC
@@ -60,26 +56,22 @@ PB_DS_CLASS_C_DEC::
push_imp(node_pointer p_nd)
{
p_nd->m_p_l_child = 0;
-
if (base_type::m_p_root == 0)
{
p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = 0;
-
base_type::m_p_root = p_nd;
}
else if (Cmp_Fn::operator()(base_type::m_p_root->m_value, p_nd->m_value))
{
p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = 0;
-
base_type::make_child_of(base_type::m_p_root, p_nd);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false));
-
+ PB_DS_ASSERT_NODE_CONSISTENT(p_nd, false)
base_type::m_p_root = p_nd;
}
else
{
base_type::make_child_of(p_nd, base_type::m_p_root);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(base_type::m_p_root, false));
+ PB_DS_ASSERT_NODE_CONSISTENT(base_type::m_p_root, false)
}
}
@@ -88,14 +80,9 @@ void
PB_DS_CLASS_C_DEC::
modify(point_iterator it, const_reference r_new_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- remove_node(it.m_p_nd);
-
+ PB_DS_ASSERT_VALID((*this))
+ remove_node(it.m_p_nd);
it.m_p_nd->m_value = r_new_val;
-
push_imp(it.m_p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
-
+ PB_DS_ASSERT_VALID((*this))
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
index e19bcb695b..7c9e6e3ee9 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file pairing_heap_.hpp
+ * @file pairing_heap_/pairing_heap_.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -48,108 +48,73 @@
#include <ext/pb_ds/detail/cond_dealtor.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp>
-#include <ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp>
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
-
#define PB_DS_CLASS_T_DEC \
- template<typename Value_Type, class Cmp_Fn, class Allocator>
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- pairing_heap_<Value_Type, Cmp_Fn, Allocator>
+ pairing_heap<Value_Type, Cmp_Fn, _Alloc>
#ifdef _GLIBCXX_DEBUG
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_< \
- Value_Type, \
- Cmp_Fn, \
- null_left_child_next_sibling_heap_node_metadata, \
- Allocator, \
- false>
-#else
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_< \
- Value_Type, \
- Cmp_Fn, \
- null_left_child_next_sibling_heap_node_metadata, \
- Allocator>
-#endif
+#define PB_DS_P_HEAP_BASE \
+ left_child_next_sibling_heap<Value_Type, Cmp_Fn, null_type, _Alloc, false>
+#else
+#define PB_DS_P_HEAP_BASE \
+ left_child_next_sibling_heap<Value_Type, Cmp_Fn, null_type, _Alloc>
+#endif
/**
- * class description = "P4ri|\|g h3ap$">
- **/
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- class pairing_heap_ : public PB_DS_BASE_C_DEC
+ * Pairing heap.
+ *
+ * @ingroup heap-detail
+ */
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
+ class pairing_heap : public PB_DS_P_HEAP_BASE
{
-
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_P_HEAP_BASE base_type;
+ typedef typename base_type::node_pointer node_pointer;
- typedef typename base_type::node_pointer node_pointer;
+ typedef typename _Alloc::template rebind<Value_Type>::other __rebind_a;
public:
+ typedef Value_Type value_type;
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef Value_Type value_type;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::pointer
- pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_pointer
- const_pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::reference
- reference;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_reference
- const_reference;
+ typedef typename __rebind_a::pointer pointer;
+ typedef typename __rebind_a::const_pointer const_pointer;
+ typedef typename __rebind_a::reference reference;
+ typedef typename __rebind_a::const_reference const_reference;
- typedef
- typename PB_DS_BASE_C_DEC::const_point_iterator
- const_point_iterator;
+ typedef typename base_type::point_const_iterator point_const_iterator;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::iterator iterator;
- typedef typename PB_DS_BASE_C_DEC::point_iterator point_iterator;
+ pairing_heap();
- typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator;
+ pairing_heap(const Cmp_Fn&);
- typedef typename PB_DS_BASE_C_DEC::iterator iterator;
-
- typedef Cmp_Fn cmp_fn;
-
- typedef Allocator allocator_type;
-
-
- pairing_heap_();
-
- pairing_heap_(const Cmp_Fn& r_cmp_fn);
-
- pairing_heap_(const PB_DS_CLASS_C_DEC& other);
+ pairing_heap(const pairing_heap&);
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(pairing_heap&);
- ~pairing_heap_();
+ ~pairing_heap();
inline point_iterator
- push(const_reference r_val);
+ push(const_reference);
void
- modify(point_iterator it, const_reference r_new_val);
+ modify(point_iterator, const_reference);
inline const_reference
top() const;
@@ -158,49 +123,52 @@ namespace __gnu_pbds
pop();
void
- erase(point_iterator it);
+ erase(point_iterator);
template<typename Pred>
size_type
- erase_if(Pred pred);
+ erase_if(Pred);
template<typename Pred>
void
- split(Pred pred, PB_DS_CLASS_C_DEC& other);
+ split(Pred, pairing_heap&);
void
- join(PB_DS_CLASS_C_DEC& other);
+ join(pairing_heap&);
protected:
template<typename It>
void
- copy_from_range(It first_it, It last_it);
+ copy_from_range(It, It);
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
#endif
private:
inline void
- push_imp(node_pointer p_nd);
+ push_imp(node_pointer);
node_pointer
- join_node_children(node_pointer p_nd);
+ join_node_children(node_pointer);
node_pointer
- forward_join(node_pointer p_nd, node_pointer p_next);
+ forward_join(node_pointer, node_pointer);
node_pointer
- back_join(node_pointer p_nd, node_pointer p_next);
+ back_join(node_pointer, node_pointer);
void
- remove_node(node_pointer p_nd);
-
+ remove_node(node_pointer);
};
+#define PB_DS_ASSERT_NODE_CONSISTENT(_Node, _Bool) \
+ _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(_Node, _Bool, \
+ __FILE__, __LINE__);)
+
#include <ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp>
#include <ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp>
@@ -208,9 +176,10 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp>
#include <ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp>
+#undef PB_DS_ASSERT_NODE_CONSISTENT
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_P_HEAP_BASE
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
index 1e6138c38d..a74ed63b84 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file pairing_heap_/split_join_fn_imps.hpp
* Contains an implementation class for a pairing heap.
*/
@@ -44,97 +44,80 @@ void
PB_DS_CLASS_C_DEC::
split(Pred pred, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
- other.clear();
+ other.clear();
if (base_type::empty())
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- return;
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return;
}
base_type::to_linked_list();
-
node_pointer p_out = base_type::prune(pred);
-
while (p_out != 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0);
--base_type::m_size;
-
++other.m_size;
-
node_pointer p_next = p_out->m_p_next_sibling;
-
p_out->m_p_l_child = p_out->m_p_next_sibling = p_out->m_p_prev_or_parent = 0;
other.push_imp(p_out);
-
p_out = p_next;
}
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- node_pointer p_cur = base_type::m_p_root;
-
+ PB_DS_ASSERT_VALID(other)
+ node_pointer p_cur = base_type::m_p_root;
base_type::m_p_root = 0;
-
while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
-
p_cur->m_p_l_child = p_cur->m_p_next_sibling = p_cur->m_p_prev_or_parent = 0;
push_imp(p_cur);
-
p_cur = p_next;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- if (other.m_p_root == 0)
- {
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
- return;
- }
+ if (other.m_p_root == 0)
+ {
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return;
+ }
if (base_type::m_p_root == 0)
base_type::m_p_root = other.m_p_root;
else if (Cmp_Fn::operator()(base_type::m_p_root->m_value, other.m_p_root->m_value))
{
base_type::make_child_of(base_type::m_p_root, other.m_p_root);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(other.m_p_root, false));
-
+ PB_DS_ASSERT_NODE_CONSISTENT(other.m_p_root, false)
base_type::m_p_root = other.m_p_root;
}
else
{
base_type::make_child_of(other.m_p_root, base_type::m_p_root);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(base_type::m_p_root, false));
+ PB_DS_ASSERT_NODE_CONSISTENT(base_type::m_p_root, false)
}
base_type::m_size += other.m_size;
-
other.m_p_root = 0;
other.m_size = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
-
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
deleted file mode 100644
index b7cdf23631..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file child_iterator.hpp
- * Contains a iterator for a patricia tree.
- */
-
-struct iterator : public const_iterator
-{
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef typename Allocator::difference_type difference_type;
- typedef node_pointer value_type;
- typedef node_pointer_pointer pointer;
- typedef node_pointer_reference reference;
-
- inline
- iterator(node_pointer_pointer p_p_cur = 0,
- node_pointer_pointer p_p_end = 0)
- : const_iterator(p_p_cur, p_p_end)
- { }
-
- inline bool
- operator==(const iterator& other) const
- { return const_iterator::m_p_p_cur == other.m_p_p_cur; }
-
- inline bool
- operator!=(const iterator& other) const
- { return const_iterator::m_p_p_cur != other.m_p_p_cur; }
-
- inline iterator&
- operator++()
- {
- const_iterator::operator++();
- return *this;
- }
-
- inline iterator
- operator++(int)
- {
- iterator ret_it(*this);
- operator++();
- return ret_it;
- }
-
- node_pointer_pointer
- operator->()
- {
- _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();)
- return const_iterator::m_p_p_cur;
- }
-
- node_pointer
- operator*()
- {
- _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();)
- return *const_iterator::m_p_p_cur;
- }
-};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp
deleted file mode 100644
index 184b986522..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file cond_dtor_entry_dealtor.hpp
- * Contains a binary tree container conditional deallocator
- */
-
-class cond_dealtor
-{
-public:
- inline
- cond_dealtor(leaf_pointer p_nd) : m_p_nd(p_nd),
- m_no_action_dtor(false),
- m_call_destructor(false)
- { }
-
- inline void
- set_no_action_dtor()
- {
- m_no_action_dtor = true;
- }
-
- inline void
- set_call_destructor()
- {
- m_call_destructor = true;
- }
-
- inline
- ~cond_dealtor()
- {
- if (m_no_action_dtor)
- return;
-
- if (m_call_destructor)
- m_p_nd->~leaf();
-
- s_leaf_allocator.deallocate(m_p_nd, 1);
- }
-
-protected:
- leaf_pointer m_p_nd;
- bool m_no_action_dtor;
- bool m_call_destructor;
-};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
deleted file mode 100644
index 730148e142..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file const_child_iterator.hpp
- * Contains a const_iterator for a patricia tree.
- */
-
-struct const_iterator
-{
-public:
- typedef std::forward_iterator_tag iterator_category;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef node_pointer value_type;
-
- typedef node_pointer_pointer pointer;
-
- typedef node_pointer_reference reference;
-
-public:
- inline
- const_iterator(node_pointer_pointer p_p_cur = 0,
- node_pointer_pointer p_p_end = 0)
- : m_p_p_cur(p_p_cur), m_p_p_end(p_p_end)
- { }
-
- inline bool
- operator==(const const_iterator& other) const
- { return m_p_p_cur == other.m_p_p_cur; }
-
- inline bool
- operator!=(const const_iterator& other) const
- { return m_p_p_cur != other.m_p_p_cur; }
-
- inline const_iterator&
- operator++()
- {
- do
- ++m_p_p_cur;
- while (m_p_p_cur != m_p_p_end&& * m_p_p_cur == 0);
- return *this;
- }
-
- inline const_iterator
- operator++(int)
- {
- const_iterator ret_it(*this);
- operator++();
- return ret_it;
- }
-
- const node_pointer_pointer
- operator->() const
- {
- _GLIBCXX_DEBUG_ONLY(assert_referencible();)
- return (m_p_p_cur);
- }
-
- const_node_pointer
- operator*() const
- {
- _GLIBCXX_DEBUG_ONLY(assert_referencible();)
- return (*m_p_p_cur);
- }
-
-protected:
-#ifdef _GLIBCXX_DEBUG
- void
- assert_referencible() const
- { _GLIBCXX_DEBUG_ASSERT(m_p_p_cur != m_p_p_end&& * m_p_p_cur != 0); }
-#endif
-
-public:
- node_pointer_pointer m_p_p_cur;
- node_pointer_pointer m_p_p_end;
-};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
index 17f7c55d40..c5748ecd67 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
-// -*- C++ -*-
+ // -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,8 +35,8 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/constructors_destructor_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
@@ -44,8 +44,8 @@ typename PB_DS_CLASS_C_DEC::head_allocator
PB_DS_CLASS_C_DEC::s_head_allocator;
PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::internal_node_allocator
-PB_DS_CLASS_C_DEC::s_internal_node_allocator;
+typename PB_DS_CLASS_C_DEC::inode_allocator
+PB_DS_CLASS_C_DEC::s_inode_allocator;
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::leaf_allocator
@@ -53,42 +53,42 @@ PB_DS_CLASS_C_DEC::s_leaf_allocator;
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME() :
+PB_DS_PAT_TRIE_NAME() :
m_p_head(s_head_allocator.allocate(1)),
m_size(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const e_access_traits& r_e_access_traits) :
- synth_e_access_traits(r_e_access_traits),
+PB_DS_PAT_TRIE_NAME(const access_traits& r_access_traits) :
+ synth_access_traits(r_access_traits),
m_p_head(s_head_allocator.allocate(1)),
m_size(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
+PB_DS_PAT_TRIE_NAME(const PB_DS_CLASS_C_DEC& other) :
#ifdef _GLIBCXX_DEBUG
debug_base(other),
#endif
- synth_e_access_traits(other),
+ synth_access_traits(other),
node_update(other),
m_p_head(s_head_allocator.allocate(1)),
m_size(0)
{
initialize();
m_size = other.m_size;
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID(other)
if (other.m_p_head->m_p_parent == 0)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return;
}
__try
@@ -104,7 +104,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
m_p_head->m_p_min = leftmost_descendant(m_p_head->m_p_parent);
m_p_head->m_p_max = rightmost_descendant(m_p_head->m_p_parent);
m_p_head->m_p_parent->m_p_parent = m_p_head;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -112,12 +112,12 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
value_swap(other);
- std::swap((e_access_traits& )(*this), (e_access_traits& )other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ std::swap((access_traits& )(*this), (access_traits& )other);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -132,7 +132,7 @@ value_swap(PB_DS_CLASS_C_DEC& other)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~PB_DS_CLASS_NAME()
+~PB_DS_PAT_TRIE_NAME()
{
clear();
s_head_allocator.deallocate(m_p_head, 1);
@@ -163,36 +163,37 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-recursive_copy_node(const_node_pointer p_other_nd)
+recursive_copy_node(node_const_pointer p_ncp)
{
- _GLIBCXX_DEBUG_ASSERT(p_other_nd != 0);
- if (p_other_nd->m_type == pat_trie_leaf_node_type)
+ _GLIBCXX_DEBUG_ASSERT(p_ncp != 0);
+ if (p_ncp->m_type == leaf_node)
{
- const_leaf_pointer p_other_leaf = static_cast<const_leaf_pointer>(p_other_nd);
-
+ leaf_const_pointer p_other_lf = static_cast<leaf_const_pointer>(p_ncp);
leaf_pointer p_new_lf = s_leaf_allocator.allocate(1);
cond_dealtor cond(p_new_lf);
- new (p_new_lf) leaf(p_other_leaf->value());
- apply_update(p_new_lf, (node_update* )this);
+ new (p_new_lf) leaf(p_other_lf->value());
+ apply_update(p_new_lf, (node_update*)this);
cond.set_no_action_dtor();
return (p_new_lf);
}
- _GLIBCXX_DEBUG_ASSERT(p_other_nd->m_type == pat_trie_internal_node_type);
- node_pointer a_p_children[internal_node::arr_size];
+ _GLIBCXX_DEBUG_ASSERT(p_ncp->m_type == i_node);
+ node_pointer a_p_children[inode::arr_size];
size_type child_i = 0;
- const_internal_node_pointer p_other_internal_nd =
- static_cast<const_internal_node_pointer>(p_other_nd);
+ inode_const_pointer p_icp = static_cast<inode_const_pointer>(p_ncp);
- typename internal_node::const_iterator child_it =
- p_other_internal_nd->begin();
+ typename inode::const_iterator child_it = p_icp->begin();
- internal_node_pointer p_ret;
+ inode_pointer p_ret;
__try
{
- while (child_it != p_other_internal_nd->end())
- a_p_children[child_i++] = recursive_copy_node(*(child_it++));
- p_ret = s_internal_node_allocator.allocate(1);
+ while (child_it != p_icp->end())
+ {
+ a_p_children[child_i] = recursive_copy_node(*(child_it));
+ child_i++;
+ child_it++;
+ }
+ p_ret = s_inode_allocator.allocate(1);
}
__catch(...)
{
@@ -201,8 +202,7 @@ recursive_copy_node(const_node_pointer p_other_nd)
__throw_exception_again;
}
- new (p_ret) internal_node(p_other_internal_nd->get_e_ind(),
- pref_begin(a_p_children[0]));
+ new (p_ret) inode(p_icp->get_e_ind(), pref_begin(a_p_children[0]));
--child_i;
_GLIBCXX_DEBUG_ASSERT(child_i >= 1);
@@ -210,6 +210,6 @@ recursive_copy_node(const_node_pointer p_other_nd)
p_ret->add_child(a_p_children[child_i], pref_begin(a_p_children[child_i]),
pref_end(a_p_children[child_i]), this);
while (child_i-- > 0);
- apply_update(p_ret, (node_update* )this);
+ apply_update(p_ret, (node_update*)this);
return p_ret;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
index 514da0a284..0aa4b28c10 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file pat_trie_/debug_fn_imps.hpp
* Contains an implementation class for pat_trie_.
*/
@@ -43,75 +43,73 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
if (m_p_head->m_p_parent != 0)
- m_p_head->m_p_parent->assert_valid(this);
- assert_iterators();
- assert_reverse_iterators();
+ m_p_head->m_p_parent->assert_valid(this, __file, __line);
+ assert_iterators(__file, __line);
+ assert_reverse_iterators(__file, __line);
if (m_p_head->m_p_parent == 0)
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_min == m_p_head);
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_max == m_p_head);
- _GLIBCXX_DEBUG_ASSERT(empty());
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_min == m_p_head);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_max == m_p_head);
+ PB_DS_DEBUG_VERIFY(empty());
return;
}
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_min->m_type == pat_trie_leaf_node_type);
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_max->m_type == pat_trie_leaf_node_type);
- _GLIBCXX_DEBUG_ASSERT(!empty());
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_min->m_type == leaf_node);
+ PB_DS_DEBUG_VERIFY(m_p_head->m_p_max->m_type == leaf_node);
+ PB_DS_DEBUG_VERIFY(!empty());
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_iterators() const
+assert_iterators(const char* __file, int __line) const
{
size_type calc_size = 0;
for (const_iterator it = begin(); it != end(); ++it)
{
++calc_size;
- debug_base::check_key_exists(PB_DS_V2F(*it));
- _GLIBCXX_DEBUG_ASSERT(lower_bound(PB_DS_V2F(*it)) == it);
- _GLIBCXX_DEBUG_ASSERT(--upper_bound(PB_DS_V2F(*it)) == it);
+ debug_base::check_key_exists(PB_DS_V2F(*it), __file, __line);
+ PB_DS_DEBUG_VERIFY(lower_bound(PB_DS_V2F(*it)) == it);
+ PB_DS_DEBUG_VERIFY(--upper_bound(PB_DS_V2F(*it)) == it);
}
- _GLIBCXX_DEBUG_ASSERT(calc_size == m_size);
+ PB_DS_DEBUG_VERIFY(calc_size == m_size);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_reverse_iterators() const
+assert_reverse_iterators(const char* __file, int __line) const
{
size_type calc_size = 0;
for (const_reverse_iterator it = rbegin(); it != rend(); ++it)
{
++calc_size;
- const_node_pointer p_nd =
- const_cast<PB_DS_CLASS_C_DEC* >(this)->find_imp(PB_DS_V2F(*it));
- _GLIBCXX_DEBUG_ASSERT(p_nd == it.m_p_nd);
+ node_const_pointer p_nd =
+ const_cast<PB_DS_CLASS_C_DEC*>(this)->find_imp(PB_DS_V2F(*it));
+ PB_DS_DEBUG_VERIFY(p_nd == it.m_p_nd);
}
- _GLIBCXX_DEBUG_ASSERT(calc_size == m_size);
+ PB_DS_DEBUG_VERIFY(calc_size == m_size);
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-recursive_count_leafs(const_node_pointer p_nd)
+recursive_count_leafs(node_const_pointer p_nd, const char* __file, int __line)
{
if (p_nd == 0)
return (0);
- if (p_nd->m_type == pat_trie_leaf_node_type)
+ if (p_nd->m_type == leaf_node)
return (1);
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
+ PB_DS_DEBUG_VERIFY(p_nd->m_type == i_node);
size_type ret = 0;
- for (typename internal_node::const_iterator it =
- static_cast<const_internal_node_pointer>(p_nd)->begin();
- it != static_cast<const_internal_node_pointer>(p_nd)->end();
+ for (typename inode::const_iterator it = static_cast<inode_const_pointer>(p_nd)->begin();
+ it != static_cast<inode_const_pointer>(p_nd)->end();
++it)
- ret += recursive_count_leafs(*it);
+ ret += recursive_count_leafs(*it, __file, __line);
return ret;
}
-#endif
-
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
index 8c3c8b90d5..c0ccd108e4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,80 +34,79 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/erase_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{
node_pointer p_nd = find_imp(r_key);
- if (p_nd == 0 || p_nd->m_type == pat_trie_internal_node_type)
+ if (p_nd == 0 || p_nd->m_type == i_node)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return false;
}
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_leaf_node_type);
- if (!synth_e_access_traits::equal_keys(PB_DS_V2F(reinterpret_cast<leaf_pointer>(p_nd)->value()), r_key))
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == leaf_node);
+ if (!synth_access_traits::equal_keys(PB_DS_V2F(reinterpret_cast<leaf_pointer>(p_nd)->value()), r_key))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return false;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_CHECK_KEY_EXISTS(r_key)
erase_leaf(static_cast<leaf_pointer>(p_nd));
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return true;
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-erase_fixup(internal_node_pointer p_nd)
+erase_fixup(inode_pointer p_nd)
{
_GLIBCXX_DEBUG_ASSERT(std::distance(p_nd->begin(), p_nd->end()) >= 1);
if (std::distance(p_nd->begin(), p_nd->end()) == 1)
{
node_pointer p_parent = p_nd->m_p_parent;
if (p_parent == m_p_head)
- m_p_head->m_p_parent =* p_nd->begin();
+ m_p_head->m_p_parent = *p_nd->begin();
else
- {
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == pat_trie_internal_node_type);
- node_pointer p_new_child =* p_nd->begin();
- static_cast<internal_node_pointer>(p_parent)->replace_child(
- p_new_child,
- pref_begin(p_new_child),
- pref_end(p_new_child),
- this);
- }
+ {
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == i_node);
+ node_pointer p_new_child = *p_nd->begin();
+
+ typedef inode_pointer inode_ptr;
+ inode_ptr p_internal = static_cast<inode_ptr>(p_parent);
+ p_internal->replace_child(p_new_child, pref_begin(p_new_child),
+ pref_end(p_new_child), this);
+ }
(*p_nd->begin())->m_p_parent = p_nd->m_p_parent;
- p_nd->~internal_node();
- s_internal_node_allocator.deallocate(p_nd, 1);
+ p_nd->~inode();
+ s_inode_allocator.deallocate(p_nd, 1);
if (p_parent == m_p_head)
return;
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == pat_trie_internal_node_type);
- p_nd = static_cast<internal_node_pointer>(p_parent);
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == i_node);
+ p_nd = static_cast<inode_pointer>(p_parent);
}
while (true)
{
_GLIBCXX_DEBUG_ASSERT(std::distance(p_nd->begin(), p_nd->end()) > 1);
p_nd->update_prefixes(this);
- apply_update(p_nd, (node_update* )this);
- _GLIBCXX_DEBUG_ONLY(p_nd->assert_valid(this);)
- if (p_nd->m_p_parent->m_type == pat_trie_head_node_type)
- return;
+ apply_update(p_nd, (node_update*)this);
+ PB_DS_ASSERT_NODE_VALID(p_nd)
+ if (p_nd->m_p_parent->m_type == head_node)
+ return;
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_parent->m_type ==
- pat_trie_internal_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_parent->m_type == i_node);
- p_nd = static_cast<internal_node_pointer>(p_nd->m_p_parent);
+ p_nd = static_cast<inode_pointer>(p_nd->m_p_parent);
}
}
@@ -118,7 +117,7 @@ actual_erase_leaf(leaf_pointer p_l)
{
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
--m_size;
- _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_l->value())));
+ _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(p_l->value())));
p_l->~leaf();
s_leaf_allocator.deallocate(p_l, 1);
}
@@ -128,15 +127,14 @@ void
PB_DS_CLASS_C_DEC::
clear()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- if (empty())
- return;
-
- clear_imp(m_p_head->m_p_parent);
- m_size = 0;
- initialize();
- _GLIBCXX_DEBUG_ONLY(debug_base::clear();)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ if (!empty())
+ {
+ clear_imp(m_p_head->m_p_parent);
+ m_size = 0;
+ initialize();
+ _GLIBCXX_DEBUG_ONLY(debug_base::clear();)
+ PB_DS_ASSERT_VALID((*this))
+ }
}
PB_DS_CLASS_T_DEC
@@ -144,22 +142,22 @@ void
PB_DS_CLASS_C_DEC::
clear_imp(node_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_internal_node_type)
+ if (p_nd->m_type == i_node)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
- for (typename internal_node::iterator it =
- static_cast<internal_node_pointer>(p_nd)->begin();
- it != static_cast<internal_node_pointer>(p_nd)->end();
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node);
+ for (typename inode::iterator it =
+ static_cast<inode_pointer>(p_nd)->begin();
+ it != static_cast<inode_pointer>(p_nd)->end();
++it)
- {
+ {
node_pointer p_child =* it;
clear_imp(p_child);
- }
- s_internal_node_allocator.deallocate(static_cast<internal_node_pointer>(p_nd), 1);
+ }
+ s_inode_allocator.deallocate(static_cast<inode_pointer>(p_nd), 1);
return;
}
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_leaf_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == leaf_node);
static_cast<leaf_pointer>(p_nd)->~leaf();
s_leaf_allocator.deallocate(static_cast<leaf_pointer>(p_nd), 1);
}
@@ -169,16 +167,16 @@ inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
erase(const_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it == end())
return it;
const_iterator ret_it = it;
++ret_it;
- _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type);
+ _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node);
erase_leaf(static_cast<leaf_pointer>(it.m_p_nd));
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
@@ -188,15 +186,15 @@ inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
erase(iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it == end())
return it;
iterator ret_it = it;
++ret_it;
- _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type);
+ _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node);
erase_leaf(static_cast<leaf_pointer>(it.m_p_nd));
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
#endif // #ifdef PB_DS_DATA_TRUE_INDICATOR
@@ -206,16 +204,16 @@ inline typename PB_DS_CLASS_C_DEC::const_reverse_iterator
PB_DS_CLASS_C_DEC::
erase(const_reverse_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it.m_p_nd == m_p_head)
return it;
const_reverse_iterator ret_it = it;
++ret_it;
- _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type);
+ _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node);
erase_leaf(static_cast<leaf_pointer>(it.m_p_nd));
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
@@ -225,16 +223,16 @@ inline typename PB_DS_CLASS_C_DEC::reverse_iterator
PB_DS_CLASS_C_DEC::
erase(reverse_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it.m_p_nd == m_p_head)
return it;
reverse_iterator ret_it = it;
++ret_it;
- _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type);
+ _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node);
erase_leaf(static_cast<leaf_pointer>(it.m_p_nd));
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
#endif // #ifdef PB_DS_DATA_TRUE_INDICATOR
@@ -246,22 +244,22 @@ PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
size_type num_ersd = 0;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
iterator it = begin();
while (it != end())
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- if (pred(*it))
- {
- ++num_ersd;
- it = erase(it);
- }
- else
- ++it;
+ PB_DS_ASSERT_VALID((*this))
+ if (pred(*it))
+ {
+ ++num_ersd;
+ it = erase(it);
+ }
+ else
+ ++it;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return num_ersd;
}
@@ -271,7 +269,7 @@ PB_DS_CLASS_C_DEC::
erase_leaf(leaf_pointer p_l)
{
update_min_max_for_erased_leaf(p_l);
- if (p_l->m_p_parent->m_type == pat_trie_head_node_type)
+ if (p_l->m_p_parent->m_type == head_node)
{
_GLIBCXX_DEBUG_ASSERT(size() == 1);
clear();
@@ -279,11 +277,9 @@ erase_leaf(leaf_pointer p_l)
}
_GLIBCXX_DEBUG_ASSERT(size() > 1);
- _GLIBCXX_DEBUG_ASSERT(p_l->m_p_parent->m_type ==
- pat_trie_internal_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_l->m_p_parent->m_type == i_node);
- internal_node_pointer p_parent =
- static_cast<internal_node_pointer>(p_l->m_p_parent);
+ inode_pointer p_parent = static_cast<inode_pointer>(p_l->m_p_parent);
p_parent->remove_child(p_l);
erase_fixup(p_parent);
@@ -302,7 +298,7 @@ update_min_max_for_erased_leaf(leaf_pointer p_l)
return;
}
- if (p_l == static_cast<const_leaf_pointer>(m_p_head->m_p_min))
+ if (p_l == static_cast<leaf_const_pointer>(m_p_head->m_p_min))
{
iterator it(p_l);
++it;
@@ -310,7 +306,7 @@ update_min_max_for_erased_leaf(leaf_pointer p_l)
return;
}
- if (p_l == static_cast<const_leaf_pointer>(m_p_head->m_p_max))
+ if (p_l == static_cast<leaf_const_pointer>(m_p_head->m_p_max))
{
iterator it(p_l);
--it;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
index ebc3bf2d45..bbef9d7a04 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,79 +34,79 @@
// warranty.
/**
- * @file find_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/find_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key)
+find(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
node_pointer p_nd = find_imp(r_key);
- if (p_nd == 0 || p_nd->m_type != pat_trie_leaf_node_type)
+ if (p_nd == 0 || p_nd->m_type != leaf_node)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return end();
}
- if (synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast<leaf_pointer>(p_nd)->value()), r_key))
+ if (synth_access_traits::equal_keys(PB_DS_V2F(static_cast<leaf_pointer>(p_nd)->value()), r_key))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return iterator(p_nd);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return end();
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key) const
+find(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- const_node_pointer p_nd = const_cast<PB_DS_CLASS_C_DEC* >(this)->find_imp(r_key);
+ node_const_pointer p_nd = const_cast<PB_DS_CLASS_C_DEC* >(this)->find_imp(r_key);
- if (p_nd == 0 || p_nd->m_type != pat_trie_leaf_node_type)
+ if (p_nd == 0 || p_nd->m_type != leaf_node)
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return end();
}
- if (synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast<const_leaf_pointer>(p_nd)->value()), r_key))
+ if (synth_access_traits::equal_keys(PB_DS_V2F(static_cast<leaf_const_pointer>(p_nd)->value()), r_key))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key));
+ PB_DS_CHECK_KEY_EXISTS(r_key)
return const_iterator(const_cast<node_pointer>(p_nd));
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
return end();
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-find_imp(const_key_reference r_key)
+find_imp(key_const_reference r_key)
{
if (empty())
- return (0);
+ return 0;
- typename synth_e_access_traits::const_iterator b_it =
- synth_e_access_traits::begin(r_key);
- typename synth_e_access_traits::const_iterator e_it =
- synth_e_access_traits::end(r_key);
+ typename synth_access_traits::const_iterator b_it =
+ synth_access_traits::begin(r_key);
+ typename synth_access_traits::const_iterator e_it =
+ synth_access_traits::end(r_key);
node_pointer p_nd = m_p_head->m_p_parent;
_GLIBCXX_DEBUG_ASSERT(p_nd != 0);
- while (p_nd->m_type != pat_trie_leaf_node_type)
+ while (p_nd->m_type != leaf_node)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
- node_pointer p_next_nd = static_cast<internal_node_pointer>(p_nd)->get_child_node(b_it, e_it, this);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node);
+ node_pointer p_next_nd = static_cast<inode_pointer>(p_nd)->get_child_node(b_it, e_it, this);
if (p_next_nd == 0)
return p_nd;
@@ -118,7 +118,7 @@ find_imp(const_key_reference r_key)
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-lower_bound_imp(const_key_reference r_key)
+lower_bound_imp(key_const_reference r_key)
{
if (empty())
return (m_p_head);
@@ -126,30 +126,30 @@ lower_bound_imp(const_key_reference r_key)
node_pointer p_nd = m_p_head->m_p_parent;
_GLIBCXX_DEBUG_ASSERT(p_nd != 0);
- typename PB_DS_CLASS_C_DEC::const_e_iterator b_it =
- synth_e_access_traits::begin(r_key);
+ typename PB_DS_CLASS_C_DEC::a_const_iterator b_it =
+ synth_access_traits::begin(r_key);
- typename PB_DS_CLASS_C_DEC::const_e_iterator e_it =
- synth_e_access_traits::end(r_key);
+ typename PB_DS_CLASS_C_DEC::a_const_iterator e_it =
+ synth_access_traits::end(r_key);
size_type checked_ind = 0;
while (true)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
+ if (p_nd->m_type == leaf_node)
{
- if (!synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast<const_leaf_pointer>(p_nd)->value()), r_key))
+ if (!synth_access_traits::cmp_keys(PB_DS_V2F(static_cast<leaf_const_pointer>(p_nd)->value()), r_key))
return p_nd;
iterator it(p_nd);
++it;
return it.m_p_nd;
}
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node);
const size_type new_checked_ind =
- static_cast<internal_node_pointer>(p_nd)->get_e_ind();
+ static_cast<inode_pointer>(p_nd)->get_e_ind();
p_nd =
- static_cast<internal_node_pointer>(p_nd)->get_lower_bound_child_node( b_it, e_it, checked_ind, this);
+ static_cast<inode_pointer>(p_nd)->get_lower_bound_child_node( b_it, e_it, checked_ind, this);
checked_ind = new_checked_ind;
}
}
@@ -157,84 +157,84 @@ lower_bound_imp(const_key_reference r_key)
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-lower_bound(const_key_reference r_key)
+lower_bound(key_const_reference r_key)
{ return point_iterator(lower_bound_imp(r_key)); }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-lower_bound(const_key_reference r_key) const
+lower_bound(key_const_reference r_key) const
{
- return const_point_iterator(const_cast<PB_DS_CLASS_C_DEC* >(this)->lower_bound_imp(r_key));
+ return point_const_iterator(const_cast<PB_DS_CLASS_C_DEC* >(this)->lower_bound_imp(r_key));
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-upper_bound(const_key_reference r_key)
+upper_bound(key_const_reference r_key)
{
point_iterator l_bound_it = lower_bound(r_key);
_GLIBCXX_DEBUG_ASSERT(l_bound_it == end() ||
- !synth_e_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it),
+ !synth_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it),
r_key));
if (l_bound_it == end() ||
- synth_e_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it)))
+ synth_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it)))
return l_bound_it;
return ++l_bound_it;
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-upper_bound(const_key_reference r_key) const
+upper_bound(key_const_reference r_key) const
{
- const_point_iterator l_bound_it = lower_bound(r_key);
+ point_const_iterator l_bound_it = lower_bound(r_key);
_GLIBCXX_DEBUG_ASSERT(l_bound_it == end() ||
- !synth_e_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it),
+ !synth_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it),
r_key));
if (l_bound_it == end() ||
- synth_e_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it)))
+ synth_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it)))
return l_bound_it;
return ++l_bound_it;
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_e_iterator
+inline typename PB_DS_CLASS_C_DEC::a_const_iterator
PB_DS_CLASS_C_DEC::
-pref_begin(const_node_pointer p_nd)
+pref_begin(node_const_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
- return (synth_e_access_traits::begin(PB_DS_V2F(static_cast<const_leaf_pointer>(p_nd)->value())));
+ if (p_nd->m_type == leaf_node)
+ return (synth_access_traits::begin(PB_DS_V2F(static_cast<leaf_const_pointer>(p_nd)->value())));
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
- return static_cast<const_internal_node_pointer>(p_nd)->pref_b_it();
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node);
+ return static_cast<inode_const_pointer>(p_nd)->pref_b_it();
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_e_iterator
+inline typename PB_DS_CLASS_C_DEC::a_const_iterator
PB_DS_CLASS_C_DEC::
-pref_end(const_node_pointer p_nd)
+pref_end(node_const_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
- return (synth_e_access_traits::end(PB_DS_V2F(static_cast<const_leaf_pointer>(p_nd)->value())));
+ if (p_nd->m_type == leaf_node)
+ return (synth_access_traits::end(PB_DS_V2F(static_cast<leaf_const_pointer>(p_nd)->value())));
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
- return static_cast<const_internal_node_pointer>(p_nd)->pref_e_it();
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node);
+ return static_cast<inode_const_pointer>(p_nd)->pref_e_it();
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_leaf_pointer
+inline typename PB_DS_CLASS_C_DEC::leaf_const_pointer
PB_DS_CLASS_C_DEC::
-leftmost_descendant(const_node_pointer p_nd)
+leftmost_descendant(node_const_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
- return static_cast<const_leaf_pointer>(p_nd);
- return static_cast<const_internal_node_pointer>(p_nd)->leftmost_descendant();
+ if (p_nd->m_type == leaf_node)
+ return static_cast<leaf_const_pointer>(p_nd);
+ return static_cast<inode_const_pointer>(p_nd)->leftmost_descendant();
}
PB_DS_CLASS_T_DEC
@@ -242,19 +242,19 @@ inline typename PB_DS_CLASS_C_DEC::leaf_pointer
PB_DS_CLASS_C_DEC::
leftmost_descendant(node_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
+ if (p_nd->m_type == leaf_node)
return static_cast<leaf_pointer>(p_nd);
- return static_cast<internal_node_pointer>(p_nd)->leftmost_descendant();
+ return static_cast<inode_pointer>(p_nd)->leftmost_descendant();
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_leaf_pointer
+inline typename PB_DS_CLASS_C_DEC::leaf_const_pointer
PB_DS_CLASS_C_DEC::
-rightmost_descendant(const_node_pointer p_nd)
+rightmost_descendant(node_const_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
- return static_cast<const_leaf_pointer>(p_nd);
- return static_cast<const_internal_node_pointer>(p_nd)->rightmost_descendant();
+ if (p_nd->m_type == leaf_node)
+ return static_cast<leaf_const_pointer>(p_nd);
+ return static_cast<inode_const_pointer>(p_nd)->rightmost_descendant();
}
PB_DS_CLASS_T_DEC
@@ -262,8 +262,8 @@ inline typename PB_DS_CLASS_C_DEC::leaf_pointer
PB_DS_CLASS_C_DEC::
rightmost_descendant(node_pointer p_nd)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
+ if (p_nd->m_type == leaf_node)
return static_cast<leaf_pointer>(p_nd);
- return static_cast<internal_node_pointer>(p_nd)->rightmost_descendant();
+ return static_cast<inode_pointer>(p_nd)->rightmost_descendant();
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp
deleted file mode 100644
index 0c73812942..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file head.hpp
- * Contains a leaf for a patricia tree.
- */
-
-#ifndef PB_DS_PAT_TRIE_IHEAD_HPP
-#define PB_DS_PAT_TRIE_IHEAD_HPP
-
-#include <ext/pb_ds/detail/pat_trie_/node_base.hpp>
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-#define PB_DS_CLASS_T_DEC \
- template<typename Type_Traits, typename E_Access_Traits, \
- typename Metadata, typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- pat_trie_head<Type_Traits, E_Access_Traits, Metadata, Allocator>
-
-#define PB_DS_BASE_C_DEC \
- pat_trie_node_base<Type_Traits, E_Access_Traits, Metadata, Allocator>
-
- template<typename Type_Traits,
- typename E_Access_Traits,
- typename Metadata,
- typename Allocator>
- struct pat_trie_head : public PB_DS_BASE_C_DEC
- {
- private:
- typedef E_Access_Traits e_access_traits;
-
- typedef
- typename Allocator::template rebind<
- e_access_traits>::other::const_pointer
- const_e_access_traits_pointer;
-
- typedef
- typename Allocator::template rebind<
- PB_DS_BASE_C_DEC>::other::pointer
- node_pointer;
-
-#ifdef _GLIBCXX_DEBUG
- typedef
- typename PB_DS_BASE_C_DEC::subtree_debug_info
- subtree_debug_info;
-#endif
-
- public:
- pat_trie_head();
-
-#ifdef _GLIBCXX_DEBUG
- virtual subtree_debug_info
- assert_valid_imp(const_e_access_traits_pointer p_traits) const;
-#endif
-
- public:
- node_pointer m_p_min;
-
- node_pointer m_p_max;
- };
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- pat_trie_head() : PB_DS_BASE_C_DEC(pat_trie_head_node_type)
- { }
-
-#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::subtree_debug_info
- PB_DS_CLASS_C_DEC::
- assert_valid_imp(const_e_access_traits_pointer /*p_traits*/) const
- {
- _GLIBCXX_DEBUG_ASSERT(false);
- return subtree_debug_info();
- }
-#endif
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
index 81d7096a94..8246b51825 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
@@ -34,8 +34,8 @@
// warranty.
/**
- * @file info_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/info_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
@@ -54,5 +54,5 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
max_size() const
-{ return s_internal_node_allocator.max_size(); }
+{ return s_inode_allocator.max_size(); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
index 84787f85c1..1b11280fd3 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,8 +34,8 @@
// warranty.
/**
- * @file insert_join_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/insert_join_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
@@ -43,35 +43,35 @@ void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- split_join_branch_bag bag;
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ branch_bag bag;
if (!join_prep(other, bag))
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
- m_p_head->m_p_parent = rec_join(m_p_head->m_p_parent,
+ m_p_head->m_p_parent = rec_join(m_p_head->m_p_parent,
other.m_p_head->m_p_parent, 0, bag);
m_p_head->m_p_parent->m_p_parent = m_p_head;
m_size += other.m_size;
other.initialize();
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
+ PB_DS_ASSERT_VALID(other)
m_p_head->m_p_min = leftmost_descendant(m_p_head->m_p_parent);
m_p_head->m_p_max = rightmost_descendant(m_p_head->m_p_parent);
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
bool
PB_DS_CLASS_C_DEC::
-join_prep(PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag)
+join_prep(PB_DS_CLASS_C_DEC& other, branch_bag& r_bag)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (other.m_size == 0)
return false;
@@ -81,109 +81,111 @@ join_prep(PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag)
return false;
}
- const bool greater = synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast<const_leaf_pointer>(
- m_p_head->m_p_max)->value()),PB_DS_V2F(static_cast<const_leaf_pointer>(
- other.m_p_head->m_p_min)->value()));
+ const bool greater =
+ synth_access_traits::cmp_keys(PB_DS_V2F(static_cast<leaf_const_pointer>(m_p_head->m_p_max)->value()),
+ PB_DS_V2F(static_cast<leaf_const_pointer>(other.m_p_head->m_p_min)->value()));
- const bool lesser = synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast<const_leaf_pointer>(
- other.m_p_head->m_p_max)->value()),PB_DS_V2F(static_cast<const_leaf_pointer>(m_p_head->m_p_min)->value()));
+ const bool lesser =
+ synth_access_traits::cmp_keys(PB_DS_V2F(static_cast<leaf_const_pointer>(other.m_p_head->m_p_max)->value()),
+ PB_DS_V2F(static_cast<leaf_const_pointer>(m_p_head->m_p_min)->value()));
if (!greater && !lesser)
__throw_join_error();
rec_join_prep(m_p_head->m_p_parent, other.m_p_head->m_p_parent, r_bag);
- _GLIBCXX_DEBUG_ONLY(debug_base::join(other);)
+ _GLIBCXX_DEBUG_ONLY(debug_base::join(other, false);)
return true;
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-rec_join_prep(const_node_pointer p_l, const_node_pointer p_r, split_join_branch_bag& r_bag)
+rec_join_prep(node_const_pointer p_l, node_const_pointer p_r,
+ branch_bag& r_bag)
{
- if (p_l->m_type == pat_trie_leaf_node_type)
+ if (p_l->m_type == leaf_node)
{
- if (p_r->m_type == pat_trie_leaf_node_type)
- {
- rec_join_prep(static_cast<const_leaf_pointer>(p_l),
- static_cast<const_leaf_pointer>(p_r), r_bag);
+ if (p_r->m_type == leaf_node)
+ {
+ rec_join_prep(static_cast<leaf_const_pointer>(p_l),
+ static_cast<leaf_const_pointer>(p_r), r_bag);
return;
- }
+ }
- _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type);
- rec_join_prep(static_cast<const_leaf_pointer>(p_l),
- static_cast<const_internal_node_pointer>(p_r), r_bag);
+ _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node);
+ rec_join_prep(static_cast<leaf_const_pointer>(p_l),
+ static_cast<inode_const_pointer>(p_r), r_bag);
return;
}
- _GLIBCXX_DEBUG_ASSERT(p_l->m_type == pat_trie_internal_node_type);
- if (p_r->m_type == pat_trie_leaf_node_type)
+ _GLIBCXX_DEBUG_ASSERT(p_l->m_type == i_node);
+ if (p_r->m_type == leaf_node)
{
- rec_join_prep(static_cast<const_internal_node_pointer>(p_l),
- static_cast<const_leaf_pointer>(p_r), r_bag);
+ rec_join_prep(static_cast<inode_const_pointer>(p_l),
+ static_cast<leaf_const_pointer>(p_r), r_bag);
return;
}
- _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node);
- rec_join_prep(static_cast<const_internal_node_pointer>(p_l),
- static_cast<const_internal_node_pointer>(p_r), r_bag);
+ rec_join_prep(static_cast<inode_const_pointer>(p_l),
+ static_cast<inode_const_pointer>(p_r), r_bag);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-rec_join_prep(const_leaf_pointer /*p_l*/, const_leaf_pointer /*p_r*/,
- split_join_branch_bag& r_bag)
+rec_join_prep(leaf_const_pointer /*p_l*/, leaf_const_pointer /*p_r*/,
+ branch_bag& r_bag)
{ r_bag.add_branch(); }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-rec_join_prep(const_leaf_pointer /*p_l*/, const_internal_node_pointer /*p_r*/,
- split_join_branch_bag& r_bag)
+rec_join_prep(leaf_const_pointer /*p_l*/, inode_const_pointer /*p_r*/,
+ branch_bag& r_bag)
{ r_bag.add_branch(); }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-rec_join_prep(const_internal_node_pointer /*p_l*/, const_leaf_pointer /*p_r*/,
- split_join_branch_bag& r_bag)
+rec_join_prep(inode_const_pointer /*p_l*/, leaf_const_pointer /*p_r*/,
+ branch_bag& r_bag)
{ r_bag.add_branch(); }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r,
- split_join_branch_bag& r_bag)
+rec_join_prep(inode_const_pointer p_l, inode_const_pointer p_r,
+ branch_bag& r_bag)
{
- if (p_l->get_e_ind() == p_r->get_e_ind() &&
- synth_e_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(),
+ if (p_l->get_e_ind() == p_r->get_e_ind() &&
+ synth_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(),
p_r->pref_b_it(), p_r->pref_e_it()))
{
- for (typename internal_node::const_iterator it = p_r->begin();
+ for (typename inode::const_iterator it = p_r->begin();
it != p_r->end(); ++ it)
- {
- const_node_pointer p_l_join_child = p_l->get_join_child(*it, this);
+ {
+ node_const_pointer p_l_join_child = p_l->get_join_child(*it, this);
if (p_l_join_child != 0)
rec_join_prep(p_l_join_child, * it, r_bag);
- }
+ }
return;
}
- if (p_r->get_e_ind() < p_l->get_e_ind() &&
+ if (p_r->get_e_ind() < p_l->get_e_ind() &&
p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this))
{
- const_node_pointer p_r_join_child = p_r->get_join_child(p_l, this);
+ node_const_pointer p_r_join_child = p_r->get_join_child(p_l, this);
if (p_r_join_child != 0)
rec_join_prep(p_r_join_child, p_l, r_bag);
return;
}
- if (p_r->get_e_ind() < p_l->get_e_ind() &&
+ if (p_r->get_e_ind() < p_l->get_e_ind() &&
p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this))
{
- const_node_pointer p_r_join_child = p_r->get_join_child(p_l, this);
+ node_const_pointer p_r_join_child = p_r->get_join_child(p_l, this);
if (p_r_join_child != 0)
rec_join_prep(p_r_join_child, p_l, r_bag);
return;
@@ -194,101 +196,102 @@ rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r,
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-rec_join(node_pointer p_l, node_pointer p_r, size_type checked_ind, split_join_branch_bag& r_bag)
+rec_join(node_pointer p_l, node_pointer p_r, size_type checked_ind,
+ branch_bag& r_bag)
{
_GLIBCXX_DEBUG_ASSERT(p_r != 0);
if (p_l == 0)
{
- apply_update(p_r, (node_update* )this);
+ apply_update(p_r, (node_update*)this);
return (p_r);
}
- if (p_l->m_type == pat_trie_leaf_node_type)
+ if (p_l->m_type == leaf_node)
{
- if (p_r->m_type == pat_trie_leaf_node_type)
- {
+ if (p_r->m_type == leaf_node)
+ {
node_pointer p_ret = rec_join(static_cast<leaf_pointer>(p_l),
static_cast<leaf_pointer>(p_r), r_bag);
- apply_update(p_ret, (node_update* )this);
+ apply_update(p_ret, (node_update*)this);
return p_ret;
- }
+ }
- _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node);
node_pointer p_ret = rec_join(static_cast<leaf_pointer>(p_l),
- static_cast<internal_node_pointer>(p_r),
+ static_cast<inode_pointer>(p_r),
checked_ind, r_bag);
- apply_update(p_ret, (node_update* )this);
+ apply_update(p_ret, (node_update*)this);
return p_ret;
}
- _GLIBCXX_DEBUG_ASSERT(p_l->m_type == pat_trie_internal_node_type);
- if (p_r->m_type == pat_trie_leaf_node_type)
+ _GLIBCXX_DEBUG_ASSERT(p_l->m_type == i_node);
+ if (p_r->m_type == leaf_node)
{
- node_pointer p_ret = rec_join(static_cast<internal_node_pointer>(p_l),
+ node_pointer p_ret = rec_join(static_cast<inode_pointer>(p_l),
static_cast<leaf_pointer>(p_r),
checked_ind, r_bag);
- apply_update(p_ret, (node_update* )this);
+ apply_update(p_ret, (node_update*)this);
return p_ret;
}
- _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type);
- node_pointer p_ret = rec_join(static_cast<internal_node_pointer>(p_l),
- static_cast<internal_node_pointer>(p_r),
+ _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node);
+ node_pointer p_ret = rec_join(static_cast<inode_pointer>(p_l),
+ static_cast<inode_pointer>(p_r),
r_bag);
- apply_update(p_ret, (node_update* )this);
+ apply_update(p_ret, (node_update*)this);
return p_ret;
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-rec_join(leaf_pointer p_l, leaf_pointer p_r, split_join_branch_bag& r_bag)
+rec_join(leaf_pointer p_l, leaf_pointer p_r, branch_bag& r_bag)
{
_GLIBCXX_DEBUG_ASSERT(p_r != 0);
if (p_l == 0)
return (p_r);
node_pointer p_ret = insert_branch(p_l, p_r, r_bag);
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_ret) == 2);
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_ret) == 2);
return p_ret;
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-rec_join(leaf_pointer p_l, internal_node_pointer p_r, size_type checked_ind,
- split_join_branch_bag& r_bag)
+rec_join(leaf_pointer p_l, inode_pointer p_r, size_type checked_ind,
+ branch_bag& r_bag)
{
#ifdef _GLIBCXX_DEBUG
- const size_type lhs_leafs = recursive_count_leafs(p_l);
- const size_type rhs_leafs = recursive_count_leafs(p_r);
-#endif
+ const size_type lhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_l);
+ const size_type rhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_r);
+#endif
_GLIBCXX_DEBUG_ASSERT(p_r != 0);
node_pointer p_ret = rec_join(p_r, p_l, checked_ind, r_bag);
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_ret) == lhs_leafs + rhs_leafs);
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_ret) == lhs_leafs + rhs_leafs);
return p_ret;
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-rec_join(internal_node_pointer p_l, leaf_pointer p_r, size_type checked_ind, split_join_branch_bag& r_bag)
+rec_join(inode_pointer p_l, leaf_pointer p_r, size_type checked_ind, branch_bag& r_bag)
{
_GLIBCXX_DEBUG_ASSERT(p_l != 0);
_GLIBCXX_DEBUG_ASSERT(p_r != 0);
#ifdef _GLIBCXX_DEBUG
- const size_type lhs_leafs = recursive_count_leafs(p_l);
- const size_type rhs_leafs = recursive_count_leafs(p_r);
-#endif
+ const size_type lhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_l);
+ const size_type rhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_r);
+#endif
if (!p_l->should_be_mine(pref_begin(p_r), pref_end(p_r), checked_ind, this))
{
node_pointer p_ret = insert_branch(p_l, p_r, r_bag);
- _GLIBCXX_DEBUG_ONLY(p_ret->assert_valid(this);)
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_ret) ==
- lhs_leafs + rhs_leafs);
+ PB_DS_ASSERT_NODE_VALID(p_ret)
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_ret) ==
+ lhs_leafs + rhs_leafs);
return p_ret;
}
@@ -303,72 +306,73 @@ rec_join(internal_node_pointer p_l, leaf_pointer p_r, size_type checked_ind, spl
pref_end(p_new_child), this);
}
- _GLIBCXX_DEBUG_ONLY(p_l->assert_valid(this));
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_l) == lhs_leafs + rhs_leafs);
+ PB_DS_ASSERT_NODE_VALID(p_l)
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_l) == lhs_leafs + rhs_leafs);
return p_l;
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-rec_join(internal_node_pointer p_l, internal_node_pointer p_r, split_join_branch_bag& r_bag)
+rec_join(inode_pointer p_l, inode_pointer p_r,
+ branch_bag& r_bag)
{
_GLIBCXX_DEBUG_ASSERT(p_l != 0);
_GLIBCXX_DEBUG_ASSERT(p_r != 0);
#ifdef _GLIBCXX_DEBUG
- const size_type lhs_leafs = recursive_count_leafs(p_l);
- const size_type rhs_leafs = recursive_count_leafs(p_r);
-#endif
+ const size_type lhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_l);
+ const size_type rhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_r);
+#endif
- if (p_l->get_e_ind() == p_r->get_e_ind() &&
- synth_e_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(),
+ if (p_l->get_e_ind() == p_r->get_e_ind() &&
+ synth_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(),
p_r->pref_b_it(), p_r->pref_e_it()))
{
- for (typename internal_node::iterator it = p_r->begin();
+ for (typename inode::iterator it = p_r->begin();
it != p_r->end(); ++ it)
- {
+ {
node_pointer p_new_child = rec_join(p_l->get_join_child(*it, this),
* it, 0, r_bag);
p_l->replace_child(p_new_child, pref_begin(p_new_child),
pref_end(p_new_child), this);
- }
+ }
- p_r->~internal_node();
- s_internal_node_allocator.deallocate(p_r, 1);
- _GLIBCXX_DEBUG_ONLY(p_l->assert_valid(this);)
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_l) == lhs_leafs + rhs_leafs);
+ p_r->~inode();
+ s_inode_allocator.deallocate(p_r, 1);
+ PB_DS_ASSERT_NODE_VALID(p_l)
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_l) == lhs_leafs + rhs_leafs);
return p_l;
}
- if (p_l->get_e_ind() < p_r->get_e_ind() &&
+ if (p_l->get_e_ind() < p_r->get_e_ind() &&
p_l->should_be_mine(p_r->pref_b_it(), p_r->pref_e_it(), 0, this))
{
node_pointer p_new_child = rec_join(p_l->get_join_child(p_r, this),
p_r, 0, r_bag);
p_l->replace_child(p_new_child, pref_begin(p_new_child),
pref_end(p_new_child), this);
- _GLIBCXX_DEBUG_ONLY(p_l->assert_valid(this);)
+ PB_DS_ASSERT_NODE_VALID(p_l)
return p_l;
}
- if (p_r->get_e_ind() < p_l->get_e_ind() &&
+ if (p_r->get_e_ind() < p_l->get_e_ind() &&
p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this))
{
node_pointer p_new_child = rec_join(p_r->get_join_child(p_l, this), p_l,
0, r_bag);
- p_r->replace_child(p_new_child, pref_begin(p_new_child),
+ p_r->replace_child(p_new_child, pref_begin(p_new_child),
pref_end(p_new_child), this);
- _GLIBCXX_DEBUG_ONLY(p_r->assert_valid(this);)
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_r) == lhs_leafs + rhs_leafs);
+ PB_DS_ASSERT_NODE_VALID(p_r)
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_r) == lhs_leafs + rhs_leafs);
return p_r;
}
node_pointer p_ret = insert_branch(p_l, p_r, r_bag);
- _GLIBCXX_DEBUG_ONLY(p_ret->assert_valid(this);)
- _GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_ret) == lhs_leafs + rhs_leafs);
+ PB_DS_ASSERT_NODE_VALID(p_ret)
+ _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_ret) == lhs_leafs + rhs_leafs);
return p_ret;
}
@@ -378,45 +382,48 @@ PB_DS_CLASS_C_DEC::
insert(const_reference r_val)
{
node_pointer p_lf = find_imp(PB_DS_V2F(r_val));
- if (p_lf != 0 && p_lf->m_type == pat_trie_leaf_node_type &&
- synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast<leaf_pointer>(p_lf)->value()), PB_DS_V2F(r_val)))
+ if (p_lf != 0 && p_lf->m_type == leaf_node &&
+ synth_access_traits::equal_keys(PB_DS_V2F(static_cast<leaf_pointer>(p_lf)->value()), PB_DS_V2F(r_val)))
{
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(PB_DS_V2F(r_val)));
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_CHECK_KEY_EXISTS(PB_DS_V2F(r_val))
+ PB_DS_ASSERT_VALID((*this))
return std::make_pair(iterator(p_lf), false);
}
- _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(PB_DS_V2F(r_val)));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_val))
leaf_pointer p_new_lf = s_leaf_allocator.allocate(1);
cond_dealtor cond(p_new_lf);
new (p_new_lf) leaf(r_val);
- apply_update(p_new_lf, (node_update* )this);
+ apply_update(p_new_lf, (node_update*)this);
cond.set_call_destructor();
- split_join_branch_bag bag;
+ branch_bag bag;
bag.add_branch();
m_p_head->m_p_parent = rec_join(m_p_head->m_p_parent, p_new_lf, 0, bag);
m_p_head->m_p_parent->m_p_parent = m_p_head;
cond.set_no_action_dtor();
++m_size;
update_min_max_for_inserted_leaf(p_new_lf);
- _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_val));)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_val));)
+ PB_DS_ASSERT_VALID((*this))
return std::make_pair(point_iterator(p_new_lf), true);
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-keys_diff_ind(typename e_access_traits::const_iterator b_l, typename e_access_traits::const_iterator e_l, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r)
+keys_diff_ind(typename access_traits::const_iterator b_l,
+ typename access_traits::const_iterator e_l,
+ typename access_traits::const_iterator b_r,
+ typename access_traits::const_iterator e_r)
{
size_type diff_pos = 0;
while (b_l != e_l)
{
if (b_r == e_r)
return (diff_pos);
- if (e_access_traits::e_pos(*b_l) != e_access_traits::e_pos(*b_r))
+ if (access_traits::e_pos(*b_l) != access_traits::e_pos(*b_r))
return (diff_pos);
++b_l;
++b_r;
@@ -427,25 +434,25 @@ keys_diff_ind(typename e_access_traits::const_iterator b_l, typename e_access_tr
}
PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::internal_node_pointer
+typename PB_DS_CLASS_C_DEC::inode_pointer
PB_DS_CLASS_C_DEC::
-insert_branch(node_pointer p_l, node_pointer p_r, split_join_branch_bag& r_bag)
+insert_branch(node_pointer p_l, node_pointer p_r, branch_bag& r_bag)
{
- typename synth_e_access_traits::const_iterator left_b_it = pref_begin(p_l);
- typename synth_e_access_traits::const_iterator left_e_it = pref_end(p_l);
- typename synth_e_access_traits::const_iterator right_b_it = pref_begin(p_r);
- typename synth_e_access_traits::const_iterator right_e_it = pref_end(p_r);
+ typename synth_access_traits::const_iterator left_b_it = pref_begin(p_l);
+ typename synth_access_traits::const_iterator left_e_it = pref_end(p_l);
+ typename synth_access_traits::const_iterator right_b_it = pref_begin(p_r);
+ typename synth_access_traits::const_iterator right_e_it = pref_end(p_r);
- const size_type diff_ind = keys_diff_ind(left_b_it, left_e_it,
+ const size_type diff_ind = keys_diff_ind(left_b_it, left_e_it,
right_b_it, right_e_it);
- internal_node_pointer p_new_nd = r_bag.get_branch();
- new (p_new_nd) internal_node(diff_ind, left_b_it);
+ inode_pointer p_new_nd = r_bag.get_branch();
+ new (p_new_nd) inode(diff_ind, left_b_it);
p_new_nd->add_child(p_l, left_b_it, left_e_it, this);
p_new_nd->add_child(p_r, right_b_it, right_e_it, this);
p_l->m_p_parent = p_new_nd;
p_r->m_p_parent = p_new_nd;
- _GLIBCXX_DEBUG_ONLY(p_new_nd->assert_valid(this);)
+ PB_DS_ASSERT_NODE_VALID(p_new_nd)
return (p_new_nd);
}
@@ -455,11 +462,11 @@ PB_DS_CLASS_C_DEC::
update_min_max_for_inserted_leaf(leaf_pointer p_new_lf)
{
if (m_p_head->m_p_min == m_p_head ||
- synth_e_access_traits::cmp_keys(PB_DS_V2F(p_new_lf->value()),
- PB_DS_V2F(static_cast<const_leaf_pointer>(m_p_head->m_p_min)->value())))
+ synth_access_traits::cmp_keys(PB_DS_V2F(p_new_lf->value()),
+ PB_DS_V2F(static_cast<leaf_const_pointer>(m_p_head->m_p_min)->value())))
m_p_head->m_p_min = p_new_lf;
if (m_p_head->m_p_max == m_p_head ||
- synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast<const_leaf_pointer>(m_p_head->m_p_max)->value()), PB_DS_V2F(p_new_lf->value())))
+ synth_access_traits::cmp_keys(PB_DS_V2F(static_cast<leaf_const_pointer>(m_p_head->m_p_max)->value()), PB_DS_V2F(p_new_lf->value())))
m_p_head->m_p_max = p_new_lf;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp
deleted file mode 100644
index 56cf133049..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp
+++ /dev/null
@@ -1,599 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file internal_node.hpp
- * Contains an internal PB_DS_BASE_C_DEC for a patricia tree.
- */
-
-#ifndef PB_DS_PAT_TRIE_INTERNAL_NODE_HPP
-#define PB_DS_PAT_TRIE_INTERNAL_NODE_HPP
-
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-#define PB_DS_CLASS_T_DEC \
- template<typename Type_Traits, typename E_Access_Traits, \
- typename Metadata, typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- pat_trie_internal_node<Type_Traits, E_Access_Traits, Metadata, Allocator>
-
-#define PB_DS_BASE_C_DEC \
- pat_trie_node_base<Type_Traits, E_Access_Traits, Metadata, Allocator>
-
-#define PB_DS_LEAF_C_DEC \
- pat_trie_leaf<Type_Traits, E_Access_Traits, Metadata, Allocator>
-
- template<typename Type_Traits,
- typename E_Access_Traits,
- typename Metadata,
- typename Allocator>
- struct pat_trie_internal_node : public PB_DS_BASE_C_DEC
- {
- private:
- typedef PB_DS_BASE_C_DEC base_type;
- typedef Type_Traits type_traits;
- typedef typename type_traits::value_type value_type;
- typedef typename Allocator::size_type size_type;
-
- typedef E_Access_Traits e_access_traits;
- typedef typename e_access_traits::const_iterator const_e_iterator;
- typedef typename Allocator::template rebind<e_access_traits>::other access_rebind;
- typedef typename access_rebind::const_pointer const_e_access_traits_pointer;
-
- typedef typename Allocator::template rebind<base_type>::other base_rebind;
- typedef typename base_rebind::pointer node_pointer;
- typedef typename base_rebind::const_pointer const_node_pointer;
-
- typedef PB_DS_LEAF_C_DEC leaf;
- typedef typename Allocator::template rebind<leaf>::other leaf_rebind;
- typedef typename leaf_rebind::pointer leaf_pointer;
- typedef typename leaf_rebind::const_pointer const_leaf_pointer;
-
- typedef typename Allocator::template rebind<pat_trie_internal_node>::other internal_node_rebind;
- typedef typename internal_node_rebind::pointer internal_node_pointer;
- typedef typename internal_node_rebind::const_pointer const_internal_node_pointer;
-
-#ifdef _GLIBCXX_DEBUG
- typedef typename base_type::subtree_debug_info subtree_debug_info;
-
- virtual subtree_debug_info
- assert_valid_imp(const_e_access_traits_pointer) const;
-#endif
-
- inline size_type
- get_pref_pos(const_e_iterator, const_e_iterator,
- const_e_access_traits_pointer) const;
-
- public:
- typedef typename Allocator::template rebind<node_pointer>::other node_pointer_rebind;
- typedef typename node_pointer_rebind::pointer node_pointer_pointer;
- typedef typename node_pointer_rebind::reference node_pointer_reference;
-
- enum
- {
- arr_size = E_Access_Traits::max_size + 1
- };
- PB_DS_STATIC_ASSERT(min_arr_size, arr_size >= 2);
-
-#include <ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp>
-#include <ext/pb_ds/detail/pat_trie_/child_iterator.hpp>
-
- pat_trie_internal_node(size_type, const const_e_iterator);
-
- void
- update_prefixes(const_e_access_traits_pointer);
-
- const_iterator
- begin() const;
-
- iterator
- begin();
-
- const_iterator
- end() const;
-
- iterator
- end();
-
- inline node_pointer
- get_child_node(const_e_iterator, const_e_iterator,
- const_e_access_traits_pointer);
-
- inline const_node_pointer
- get_child_node(const_e_iterator, const_e_iterator,
- const_e_access_traits_pointer) const;
-
- inline iterator
- get_child_it(const_e_iterator, const_e_iterator,
- const_e_access_traits_pointer);
-
- inline node_pointer
- get_lower_bound_child_node(const_e_iterator, const_e_iterator,
- size_type, const_e_access_traits_pointer);
-
- inline node_pointer
- add_child(node_pointer, const_e_iterator, const_e_iterator,
- const_e_access_traits_pointer);
-
- inline const_node_pointer
- get_join_child(const_node_pointer, const_e_access_traits_pointer) const;
-
- inline node_pointer
- get_join_child(node_pointer, const_e_access_traits_pointer);
-
- void
- remove_child(node_pointer p_nd);
-
- iterator
- remove_child(iterator it);
-
- void
- replace_child(node_pointer, const_e_iterator, const_e_iterator,
- const_e_access_traits_pointer);
-
- inline const_e_iterator
- pref_b_it() const;
-
- inline const_e_iterator
- pref_e_it() const;
-
- inline size_type
- get_e_ind() const;
-
- bool
- should_be_mine(const_e_iterator, const_e_iterator, size_type,
- const_e_access_traits_pointer) const;
-
- leaf_pointer
- leftmost_descendant();
-
- const_leaf_pointer
- leftmost_descendant() const;
-
- leaf_pointer
- rightmost_descendant();
-
- const_leaf_pointer
- rightmost_descendant() const;
-
-#ifdef _GLIBCXX_DEBUG
- size_type
- e_ind() const;
-#endif
-
- private:
- pat_trie_internal_node(const pat_trie_internal_node&);
-
- size_type
- get_begin_pos() const;
-
- const size_type m_e_ind;
- const_e_iterator m_pref_b_it;
- const_e_iterator m_pref_e_it;
- node_pointer m_a_p_children[arr_size];
- static leaf_rebind s_leaf_alloc;
- static internal_node_rebind s_internal_node_alloc;
- };
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::leaf_rebind
- PB_DS_CLASS_C_DEC::s_leaf_alloc;
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::internal_node_rebind
- PB_DS_CLASS_C_DEC::s_internal_node_alloc;
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
- get_pref_pos(const_e_iterator b_it, const_e_iterator e_it,
- const_e_access_traits_pointer p_traits) const
- {
- if (static_cast<std::size_t>(std::distance(b_it, e_it)) <= m_e_ind)
- return 0;
- std::advance(b_it, m_e_ind);
- return 1 + p_traits->e_pos(*b_it);
- }
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- pat_trie_internal_node(size_type len, const const_e_iterator it) :
- PB_DS_BASE_C_DEC(pat_trie_internal_node_type),
- m_e_ind(len), m_pref_b_it(it), m_pref_e_it(it)
- {
- std::advance(m_pref_e_it, m_e_ind);
- std::fill(m_a_p_children, m_a_p_children + arr_size,
- static_cast<node_pointer>(0));
- }
-
- PB_DS_CLASS_T_DEC
- void
- PB_DS_CLASS_C_DEC::
- update_prefixes(const_e_access_traits_pointer p_traits)
- {
- node_pointer p_first = *begin();
- if (p_first->m_type == pat_trie_leaf_node_type)
- {
- const_leaf_pointer p = static_cast<const_leaf_pointer>(p_first);
- m_pref_b_it = p_traits->begin(e_access_traits::extract_key(p->value()));
- }
- else
- {
- _GLIBCXX_DEBUG_ASSERT(p_first->m_type == pat_trie_internal_node_type);
- m_pref_b_it = static_cast<internal_node_pointer>(p_first)->pref_b_it();
- }
- m_pref_e_it = m_pref_b_it;
- std::advance(m_pref_e_it, m_e_ind);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::const_iterator
- PB_DS_CLASS_C_DEC::
- begin() const
- {
- typedef node_pointer_pointer pointer_type;
- pointer_type p = const_cast<pointer_type>(m_a_p_children);
- return const_iterator(p + get_begin_pos(), p + arr_size);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::iterator
- PB_DS_CLASS_C_DEC::
- begin()
- {
- return iterator(m_a_p_children + get_begin_pos(),
- m_a_p_children + arr_size);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::const_iterator
- PB_DS_CLASS_C_DEC::
- end() const
- {
- typedef node_pointer_pointer pointer_type;
- pointer_type p = const_cast<pointer_type>(m_a_p_children) + arr_size;
- return const_iterator(p, p);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::iterator
- PB_DS_CLASS_C_DEC::
- end()
- { return iterator(m_a_p_children + arr_size, m_a_p_children + arr_size); }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::node_pointer
- PB_DS_CLASS_C_DEC::
- get_child_node(const_e_iterator b_it, const_e_iterator e_it,
- const_e_access_traits_pointer p_traits)
- {
- const size_type i = get_pref_pos(b_it, e_it, p_traits);
- _GLIBCXX_DEBUG_ASSERT(i < arr_size);
- return m_a_p_children[i];
- }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::iterator
- PB_DS_CLASS_C_DEC::
- get_child_it(const_e_iterator b_it, const_e_iterator e_it,
- const_e_access_traits_pointer p_traits)
- {
- const size_type i = get_pref_pos(b_it, e_it, p_traits);
- _GLIBCXX_DEBUG_ASSERT(i < arr_size);
- _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i] != 0);
- return iterator(m_a_p_children + i, m_a_p_children + i);
- }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::const_node_pointer
- PB_DS_CLASS_C_DEC::
- get_child_node(const_e_iterator b_it, const_e_iterator e_it,
- const_e_access_traits_pointer p_traits) const
- { return const_cast<node_pointer>(get_child_node(b_it, e_it, p_traits)); }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::node_pointer
- PB_DS_CLASS_C_DEC::
- get_lower_bound_child_node(const_e_iterator b_it, const_e_iterator e_it,
- size_type checked_ind,
- const_e_access_traits_pointer p_traits)
- {
- if (!should_be_mine(b_it, e_it, checked_ind, p_traits))
- {
- if (p_traits->cmp_prefixes(b_it, e_it, m_pref_b_it, m_pref_e_it, true))
- return leftmost_descendant();
- return rightmost_descendant();
- }
-
- size_type i = get_pref_pos(b_it, e_it, p_traits);
- _GLIBCXX_DEBUG_ASSERT(i < arr_size);
-
- if (m_a_p_children[i] != 0)
- return m_a_p_children[i];
-
- while (++i < arr_size)
- if (m_a_p_children[i] != 0)
- {
- if (m_a_p_children[i]->m_type == pat_trie_leaf_node_type)
- return m_a_p_children[i];
-
- _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i]->m_type == pat_trie_internal_node_type);
-
- return static_cast<internal_node_pointer>(m_a_p_children[i])->leftmost_descendant();
- }
-
- return rightmost_descendant();
- }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::node_pointer
- PB_DS_CLASS_C_DEC::
- add_child(node_pointer p_nd, const_e_iterator b_it, const_e_iterator e_it,
- const_e_access_traits_pointer p_traits)
- {
- const size_type i = get_pref_pos(b_it, e_it, p_traits);
- _GLIBCXX_DEBUG_ASSERT(i < arr_size);
- if (m_a_p_children[i] == 0)
- {
- m_a_p_children[i] = p_nd;
- p_nd->m_p_parent = this;
- return p_nd;
- }
- return m_a_p_children[i];
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::const_node_pointer
- PB_DS_CLASS_C_DEC::
- get_join_child(const_node_pointer p_nd, const_e_access_traits_pointer p_traits) const
- {
- node_pointer p = const_cast<node_pointer>(p_nd);
- return const_cast<internal_node_pointer>(this)->get_join_child(p, p_traits);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::node_pointer
- PB_DS_CLASS_C_DEC::
- get_join_child(node_pointer p_nd, const_e_access_traits_pointer p_traits)
- {
- size_type i;
- const_e_iterator b_it;
- const_e_iterator e_it;
- if (p_nd->m_type == pat_trie_leaf_node_type)
- {
- typename Type_Traits::const_key_reference r_key =
- e_access_traits::extract_key(static_cast<const_leaf_pointer>(p_nd)->value());
-
- b_it = p_traits->begin(r_key);
- e_it = p_traits->end(r_key);
- }
- else
- {
- b_it = static_cast<internal_node_pointer>(p_nd)->pref_b_it();
- e_it = static_cast<internal_node_pointer>(p_nd)->pref_e_it();
- }
- i = get_pref_pos(b_it, e_it, p_traits);
- _GLIBCXX_DEBUG_ASSERT(i < arr_size);
- return m_a_p_children[i];
- }
-
- PB_DS_CLASS_T_DEC
- void
- PB_DS_CLASS_C_DEC::
- remove_child(node_pointer p_nd)
- {
- size_type i = 0;
- for (; i < arr_size; ++i)
- if (m_a_p_children[i] == p_nd)
- {
- m_a_p_children[i] = 0;
- return;
- }
- _GLIBCXX_DEBUG_ASSERT(i != arr_size);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::iterator
- PB_DS_CLASS_C_DEC::
- remove_child(iterator it)
- {
- iterator ret = it;
- ++ret;
- * it.m_p_p_cur = 0;
- return ret;
- }
-
- PB_DS_CLASS_T_DEC
- void
- PB_DS_CLASS_C_DEC::
- replace_child(node_pointer p_nd, const_e_iterator b_it,
- const_e_iterator e_it,
- const_e_access_traits_pointer p_traits)
- {
- const size_type i = get_pref_pos(b_it, e_it, p_traits);
- _GLIBCXX_DEBUG_ASSERT(i < arr_size);
- m_a_p_children[i] = p_nd;
- p_nd->m_p_parent = this;
- }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::const_e_iterator
- PB_DS_CLASS_C_DEC::
- pref_b_it() const
- { return m_pref_b_it; }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::const_e_iterator
- PB_DS_CLASS_C_DEC::
- pref_e_it() const
- { return m_pref_e_it; }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
- get_e_ind() const
- { return m_e_ind; }
-
- PB_DS_CLASS_T_DEC
- bool
- PB_DS_CLASS_C_DEC::
- should_be_mine(const_e_iterator b_it, const_e_iterator e_it,
- size_type checked_ind,
- const_e_access_traits_pointer p_traits) const
- {
- if (m_e_ind == 0)
- return true;
-
- const size_type num_es = std::distance(b_it, e_it);
- if (num_es < m_e_ind)
- return false;
-
- const_e_iterator key_b_it = b_it;
- std::advance(key_b_it, checked_ind);
- const_e_iterator key_e_it = b_it;
- std::advance(key_e_it, m_e_ind);
-
- const_e_iterator value_b_it = m_pref_b_it;
- std::advance(value_b_it, checked_ind);
- const_e_iterator value_e_it = m_pref_b_it;
- std::advance(value_e_it, m_e_ind);
-
- return p_traits->equal_prefixes(key_b_it, key_e_it, value_b_it,
- value_e_it);
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::leaf_pointer
- PB_DS_CLASS_C_DEC::
- leftmost_descendant()
- {
- node_pointer p_pot =* begin();
- if (p_pot->m_type == pat_trie_leaf_node_type)
- return (static_cast<leaf_pointer>(p_pot));
- _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == pat_trie_internal_node_type);
- return static_cast<internal_node_pointer>(p_pot)->leftmost_descendant();
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::const_leaf_pointer
- PB_DS_CLASS_C_DEC::
- leftmost_descendant() const
- {
- return const_cast<internal_node_pointer>(this)->leftmost_descendant();
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::leaf_pointer
- PB_DS_CLASS_C_DEC::
- rightmost_descendant()
- {
- const size_type num_children = std::distance(begin(), end());
- _GLIBCXX_DEBUG_ASSERT(num_children >= 2);
-
- iterator it = begin();
- std::advance(it, num_children - 1);
- node_pointer p_pot =* it;
- if (p_pot->m_type == pat_trie_leaf_node_type)
- return static_cast<leaf_pointer>(p_pot);
- _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == pat_trie_internal_node_type);
- return static_cast<internal_node_pointer>(p_pot)->rightmost_descendant();
- }
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::const_leaf_pointer
- PB_DS_CLASS_C_DEC::
- rightmost_descendant() const
- {
- return const_cast<internal_node_pointer>(this)->rightmost_descendant();
- }
-
-#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
- e_ind() const
- { return m_e_ind; }
-#endif
-
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
- get_begin_pos() const
- {
- size_type i;
- for (i = 0; i < arr_size && m_a_p_children[i] == 0; ++i)
- ;
- return i;
- }
-
-#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::subtree_debug_info
- PB_DS_CLASS_C_DEC::
- assert_valid_imp(const_e_access_traits_pointer p_traits) const
- {
- _GLIBCXX_DEBUG_ASSERT(base_type::m_type == pat_trie_internal_node_type);
- _GLIBCXX_DEBUG_ASSERT(static_cast<size_type>(std::distance(pref_b_it(), pref_e_it())) == m_e_ind);
- _GLIBCXX_DEBUG_ASSERT(std::distance(begin(), end()) >= 2);
-
- for (typename pat_trie_internal_node::const_iterator it = begin();
- it != end(); ++it)
- {
- const_node_pointer p_nd =* it;
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_parent == this);
- subtree_debug_info child_ret = p_nd->assert_valid_imp(p_traits);
-
- _GLIBCXX_DEBUG_ASSERT(static_cast<size_type>(std::distance(child_ret.first, child_ret.second)) >= m_e_ind);
- _GLIBCXX_DEBUG_ASSERT(should_be_mine(child_ret.first, child_ret.second, 0, p_traits));
- _GLIBCXX_DEBUG_ASSERT(get_pref_pos(child_ret.first, child_ret.second, p_traits) == static_cast<size_type>(it.m_p_p_cur - m_a_p_children));
- }
- return std::make_pair(pref_b_it(), pref_e_it());
- }
-#endif
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
-#undef PB_DS_LEAF_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
index 85199f81cb..d53f1b274b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
@@ -34,8 +34,8 @@
// warranty.
/**
- * @file iterators_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/iterators_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
@@ -95,10 +95,10 @@ rend() const
{ return const_reverse_iterator(m_p_head); }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
node_begin() const
-{ return const_node_iterator(m_p_head->m_p_parent, this); }
+{ return node_const_iterator(m_p_head->m_p_parent, this); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_iterator
@@ -107,10 +107,10 @@ node_begin()
{ return node_iterator(m_p_head->m_p_parent, this); }
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_node_iterator
+inline typename PB_DS_CLASS_C_DEC::node_const_iterator
PB_DS_CLASS_C_DEC::
node_end() const
-{ return const_node_iterator(0, this); }
+{ return node_const_iterator(0, this); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_iterator
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp
deleted file mode 100644
index 91cf14faa2..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp
+++ /dev/null
@@ -1,171 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file leaf.hpp
- * Contains a pat_trie_leaf for a patricia tree.
- */
-
-#ifndef PB_DS_PAT_TRIE_LEAF_HPP
-#define PB_DS_PAT_TRIE_LEAF_HPP
-
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
-#define PB_DS_CLASS_T_DEC \
- template< \
- class Type_Traits, \
- class E_Access_Traits, \
- class Metadata, \
- class Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- pat_trie_leaf< \
- Type_Traits, \
- E_Access_Traits, \
- Metadata, \
- Allocator>
-
-#define PB_DS_BASE_C_DEC \
- pat_trie_node_base< \
- Type_Traits, \
- E_Access_Traits, \
- Metadata, \
- Allocator>
-
-#define PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC \
- pat_trie_subtree_debug_info< \
- Type_Traits, \
- E_Access_Traits, \
- Allocator>
-
- template<typename Type_Traits,
- class E_Access_Traits,
- class Metadata,
- class Allocator>
- struct pat_trie_leaf : public PB_DS_BASE_C_DEC
- {
- private:
- typedef typename Type_Traits::value_type value_type;
-
- typedef typename Type_Traits::const_reference const_reference;
-
- typedef typename Type_Traits::reference reference;
-
- typedef
- typename Allocator::template rebind<
- E_Access_Traits>::other::const_pointer
- const_e_access_traits_pointer;
-
-#ifdef _GLIBCXX_DEBUG
- typedef
- typename PB_DS_BASE_C_DEC::subtree_debug_info
- subtree_debug_info;
-#endif
-
- typedef PB_DS_BASE_C_DEC base_type;
-
- public:
- pat_trie_leaf(const_reference r_val);
-
- inline reference
- value();
-
- inline const_reference
- value() const;
-
-#ifdef _GLIBCXX_DEBUG
- virtual subtree_debug_info
- assert_valid_imp(const_e_access_traits_pointer p_traits) const;
-
- virtual
- ~pat_trie_leaf();
-#endif
-
- private:
- pat_trie_leaf(const PB_DS_CLASS_C_DEC& other);
-
- value_type m_value;
- };
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- pat_trie_leaf(const_reference r_val) :
- PB_DS_BASE_C_DEC(pat_trie_leaf_node_type), m_value(r_val)
- { }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::reference
- PB_DS_CLASS_C_DEC::
- value()
- { return m_value; }
-
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::const_reference
- PB_DS_CLASS_C_DEC::
- value() const
- { return m_value; }
-
-#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
- typename PB_DS_CLASS_C_DEC::subtree_debug_info
- PB_DS_CLASS_C_DEC::
- assert_valid_imp(const_e_access_traits_pointer p_traits) const
- {
- _GLIBCXX_DEBUG_ASSERT(base_type::m_type == pat_trie_leaf_node_type);
- subtree_debug_info ret;
- const_reference r_val = value();
- return std::make_pair(p_traits->begin(p_traits->extract_key(r_val)),
- p_traits->end(p_traits->extract_key(r_val)));
- }
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- ~pat_trie_leaf() { }
-#endif
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
-#undef PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp
deleted file mode 100644
index bb13068bcd..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp
+++ /dev/null
@@ -1,128 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file node_base.hpp
- * Contains a pat_trie_node_base base for a patricia tree.
- */
-
-#ifndef PB_DS_PAT_TRIE_NODE_BASE_HPP
-#define PB_DS_PAT_TRIE_NODE_BASE_HPP
-
-#include <ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-#define PB_DS_CLASS_T_DEC \
- template<typename Type_Traits, typename E_Access_Traits, \
- typename Metadata, typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- pat_trie_node_base<Type_Traits, E_Access_Traits, Metadata, Allocator>
-
-#define PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC \
- pat_trie_subtree_debug_info<Type_Traits, E_Access_Traits, Allocator>
-
- enum pat_trie_node_type
- {
- pat_trie_internal_node_type,
- pat_trie_leaf_node_type,
- pat_trie_head_node_type
- };
-
- template<typename Type_Traits,
- typename E_Access_Traits,
- typename Metadata,
- typename Allocator>
- struct pat_trie_node_base : public pat_trie_node_metadata_base<
- Metadata,
- Allocator>
- {
- public:
- typedef
- typename Allocator::template rebind<
- pat_trie_node_base>::other::pointer
- node_pointer;
-
- typedef
- typename Allocator::template rebind<
- E_Access_Traits>::other::const_pointer
- const_e_access_traits_pointer;
-
-#ifdef _GLIBCXX_DEBUG
- typedef
- std::pair<
- typename E_Access_Traits::const_iterator,
- typename E_Access_Traits::const_iterator>
- subtree_debug_info;
-#endif
-
- pat_trie_node_base(pat_trie_node_type type);
-
-#ifdef _GLIBCXX_DEBUG
- void
- assert_valid(const_e_access_traits_pointer p_traits) const;
-
- virtual subtree_debug_info
- assert_valid_imp(const_e_access_traits_pointer p_traits) const = 0;
-#endif
-
- node_pointer m_p_parent;
- const pat_trie_node_type m_type;
- };
-
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- pat_trie_node_base(pat_trie_node_type type) : m_type(type)
- { }
-
-#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
- void
- PB_DS_CLASS_C_DEC::
- assert_valid(const_e_access_traits_pointer p_traits) const
- { assert_valid_imp(p_traits); }
-#endif
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
deleted file mode 100644
index c57462868b..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
+++ /dev/null
@@ -1,338 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file node_iterators.hpp
- * Contains an implementation class for pat_trie_.
- */
-
-#ifndef PB_DS_PAT_TRIE_NODE_ITERATORS_HPP
-#define PB_DS_PAT_TRIE_NODE_ITERATORS_HPP
-
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
-#define PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC \
- pat_trie_const_node_it_< \
- Node, \
- Leaf, \
- Head, \
- Internal_Node, \
- Const_Iterator, \
- Iterator, \
- E_Access_Traits, \
- Allocator>
-
-#define PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC \
- pat_trie_node_it_< \
- Node, \
- Leaf, \
- Head, \
- Internal_Node, \
- Const_Iterator, \
- Iterator, \
- E_Access_Traits, \
- Allocator>
-
- // Const node iterator.
- template<typename Node,
- class Leaf,
- class Head,
- class Internal_Node,
- class Const_Iterator,
- class Iterator,
- class E_Access_Traits,
- class Allocator>
- class pat_trie_const_node_it_
- {
- protected:
- typedef
- typename Allocator::template rebind<
- Node>::other::pointer
- node_pointer;
-
- typedef
- typename Allocator::template rebind<
- Leaf>::other::const_pointer
- const_leaf_pointer;
-
- typedef
- typename Allocator::template rebind<
- Leaf>::other::pointer
- leaf_pointer;
-
- typedef
- typename Allocator::template rebind<
- Internal_Node>::other::pointer
- internal_node_pointer;
-
- typedef
- typename Allocator::template rebind<
- Internal_Node>::other::const_pointer
- const_internal_node_pointer;
-
- typedef
- typename Allocator::template rebind<
- E_Access_Traits>::other::const_pointer
- const_e_access_traits_pointer;
-
- private:
- inline typename E_Access_Traits::const_iterator
- pref_begin() const
- {
- if (m_p_nd->m_type == pat_trie_leaf_node_type)
- return (m_p_traits->begin(
- m_p_traits->extract_key(
- static_cast<const_leaf_pointer>(m_p_nd)->value())));
-
- _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type);
-
- return (static_cast<const_internal_node_pointer>(m_p_nd)->pref_b_it());
- }
-
- inline typename E_Access_Traits::const_iterator
- pref_end() const
- {
- if (m_p_nd->m_type == pat_trie_leaf_node_type)
- return (m_p_traits->end(
- m_p_traits->extract_key(
- static_cast<const_leaf_pointer>(m_p_nd)->value())));
-
- _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type);
-
- return (static_cast<const_internal_node_pointer>(m_p_nd)->pref_e_it());
- }
-
- public:
-
- // Size type.
- typedef typename Allocator::size_type size_type;
-
- // Category.
- typedef trivial_iterator_tag iterator_category;
-
- // Difference type.
- typedef trivial_iterator_difference_type difference_type;
-
- // __Iterator's value type.
- typedef Const_Iterator value_type;
-
- // __Iterator's reference type.
- typedef value_type reference;
-
- // __Iterator's __const reference type.
- typedef value_type const_reference;
-
- // Element access traits.
- typedef E_Access_Traits e_access_traits;
-
- // A key's element __const iterator.
- typedef typename e_access_traits::const_iterator const_e_iterator;
-
- // Metadata type.
- typedef typename Node::metadata_type metadata_type;
-
- // Const metadata reference type.
- typedef
- typename Allocator::template rebind<
- metadata_type>::other::const_reference
- const_metadata_reference;
-
- // Default constructor.
- /*
- inline
- pat_trie_const_node_it_()
- */
- inline
- pat_trie_const_node_it_(node_pointer p_nd = 0,
- const_e_access_traits_pointer p_traits = 0)
- : m_p_nd(const_cast<node_pointer>(p_nd)), m_p_traits(p_traits)
- { }
-
- // Subtree valid prefix.
- inline std::pair<const_e_iterator, const_e_iterator>
- valid_prefix() const
- { return std::make_pair(pref_begin(), pref_end()); }
-
- // Const access; returns the __const iterator* associated with
- // the current leaf.
- inline const_reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(num_children() == 0);
- return Const_Iterator(m_p_nd);
- }
-
- // Metadata access.
- inline const_metadata_reference
- get_metadata() const
- { return m_p_nd->get_metadata(); }
-
- // Returns the number of children in the corresponding node.
- inline size_type
- num_children() const
- {
- if (m_p_nd->m_type == pat_trie_leaf_node_type)
- return 0;
- _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type);
- return std::distance(static_cast<internal_node_pointer>(m_p_nd)->begin(), static_cast<internal_node_pointer>(m_p_nd)->end());
- }
-
- // Returns a __const node __iterator to the corresponding node's
- // i-th child.
- PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC
- get_child(size_type i) const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type);
- typename Internal_Node::iterator it =
- static_cast<internal_node_pointer>(m_p_nd)->begin();
-
- std::advance(it, i);
- return PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC(*it, m_p_traits);
- }
-
- // Compares content to a different iterator object.
- inline bool
- operator==(const PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC& other) const
- { return (m_p_nd == other.m_p_nd); }
-
- // Compares content (negatively) to a different iterator object.
- inline bool
- operator!=(const PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC& other) const
- { return m_p_nd != other.m_p_nd; }
-
- private:
-
- friend class PB_DS_CLASS_C_DEC;
-
- public:
- node_pointer m_p_nd;
-
- const_e_access_traits_pointer m_p_traits;
- };
-
- // Node iterator.
- template<typename Node,
- class Leaf,
- class Head,
- class Internal_Node,
- class Const_Iterator,
- class Iterator,
- class E_Access_Traits,
- class Allocator>
- class pat_trie_node_it_ :
- public PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC
-
- {
- private:
- typedef
- typename Allocator::template rebind<
- Node>::other::pointer
- node_pointer;
-
- typedef Iterator iterator;
-
- typedef PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC base_type;
-
- typedef
- typename base_type::const_e_access_traits_pointer
- const_e_access_traits_pointer;
-
- typedef typename base_type::internal_node_pointer internal_node_pointer;
-
- public:
-
- // Size type.
- typedef
- typename PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC::size_type
- size_type;
-
- // __Iterator's value type.
- typedef Iterator value_type;
-
- // __Iterator's reference type.
- typedef value_type reference;
-
- // __Iterator's __const reference type.
- typedef value_type const_reference;
-
- // Default constructor.
- /*
- inline
- pat_trie_node_it_() ;
- */
-
- inline
- pat_trie_node_it_(node_pointer p_nd = 0, const_e_access_traits_pointer p_traits = 0) : base_type(p_nd, p_traits)
- { }
-
- // Access; returns the iterator* associated with the current leaf.
- inline reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(base_type::num_children() == 0);
- return Iterator(base_type::m_p_nd);
-
- }
-
- // Returns a node __iterator to the corresponding node's i-th child.
- PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC
- get_child(size_type i) const
- {
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == pat_trie_internal_node_type);
-
- typename Internal_Node::iterator it =
- static_cast<internal_node_pointer>(base_type::m_p_nd)->begin();
-
- std::advance(it, i);
- return PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC(*it, base_type::m_p_traits);
- }
-
- private:
- friend class PB_DS_CLASS_C_DEC;
- };
-
-#undef PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC
-#undef PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp
deleted file mode 100644
index 36272eda82..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file node_metadata_base.hpp
- * Contains an internal PB_DS_BASE_C_DEC for a patricia tree.
- */
-
-#ifndef PB_DS_PAT_TRIE_NODE_METADATA_BASE_HPP
-#define PB_DS_PAT_TRIE_NODE_METADATA_BASE_HPP
-
-#include <ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
- template<typename Metadata, class Allocator>
- struct pat_trie_node_metadata_base
- {
- public:
- typedef Metadata metadata_type;
-
- typedef
- typename Allocator::template rebind<
- metadata_type>::other::const_reference
- const_metadata_reference;
-
- public:
- inline const_metadata_reference
- get_metadata() const
- {
- return (m_metadata);
- }
-
- public:
- metadata_type m_metadata;
- };
-
- template<typename Allocator>
- struct pat_trie_node_metadata_base<
- null_node_metadata,
- Allocator>
- {
- public:
- typedef null_node_metadata metadata_type;
- };
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif // #ifndef PB_DS_PAT_TRIE_NODE_BASE_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
index 01e9e32126..66272b3119 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,172 +35,250 @@
// warranty.
/**
- * @file pat_trie_.hpp
+ * @file pat_trie_/pat_trie_.hpp
* Contains an implementation class for a patricia tree.
*/
-/**
- * This implementation loosely borrows ideas from:
- * 1) Fast Mergeable Integer Maps, Okasaki, Gill 1998
- * 2) Ptset: Sets of integers implemented as Patricia trees,
- * Jean-Christophe Filliatr, 2000
- **/
-
-#include <ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp>
-#include <ext/pb_ds/detail/pat_trie_/node_base.hpp>
-#include <ext/pb_ds/exception.hpp>
-#include <ext/pb_ds/tag_and_trait.hpp>
-#include <ext/pb_ds/detail/eq_fn/eq_by_less.hpp>
-#include <ext/pb_ds/detail/types_traits.hpp>
-#include <ext/pb_ds/tree_policy.hpp>
-#include <ext/pb_ds/detail/cond_dealtor.hpp>
-#include <ext/pb_ds/detail/type_utils.hpp>
#include <iterator>
#include <utility>
#include <algorithm>
#include <functional>
#include <assert.h>
#include <list>
+#include <ext/pb_ds/exception.hpp>
+#include <ext/pb_ds/tag_and_trait.hpp>
+#include <ext/pb_ds/tree_policy.hpp>
+#include <ext/pb_ds/detail/cond_dealtor.hpp>
+#include <ext/pb_ds/detail/type_utils.hpp>
+#include <ext/pb_ds/detail/types_traits.hpp>
+#include <ext/pb_ds/detail/eq_fn/eq_by_less.hpp>
+#include <ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp>
+#include <ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp>
#ifdef _GLIBCXX_DEBUG
#include <ext/pb_ds/detail/debug_map_base.hpp>
-#endif
+#endif
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Mapped, typename Node_And_It_Traits, \
- typename Allocator>
-
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME pat_trie_data_
-#endif
+#define PB_DS_PAT_TRIE_NAME pat_trie_map
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME pat_trie_no_data_
-#endif
+#define PB_DS_PAT_TRIE_NAME pat_trie_set
+#endif
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Key, typename Mapped, typename Node_And_It_Traits, \
+ typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME<Key, Mapped, Node_And_It_Traits, Allocator>
+ PB_DS_PAT_TRIE_NAME<Key, Mapped, Node_And_It_Traits, _Alloc>
-#define PB_DS_TYPES_TRAITS_C_DEC \
- types_traits<Key, Mapped, Allocator, false>
+#define PB_DS_PAT_TRIE_TRAITS_BASE \
+ types_traits<Key, Mapped, _Alloc, false>
#ifdef _GLIBCXX_DEBUG
#define PB_DS_DEBUG_MAP_BASE_C_DEC \
- debug_map_base<Key, eq_by_less<Key, \
- std::less<Key> >, typename Allocator::template rebind<Key>::other::const_reference>
-#endif
+ debug_map_base<Key, eq_by_less<Key, std::less<Key> >, \
+ typename _Alloc::template rebind<Key>::other::const_reference>
+#endif
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#define PB_DS_EP2VP(X)& ((X)->m_value)
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#define PB_DS_EP2VP(X)& ((X)->m_value.first)
-#endif
/**
- * class description = PATRICIA trie implementation.">
- **/
- template<typename Key,
- typename Mapped,
- typename Node_And_It_Traits,
- typename Allocator>
- class PB_DS_CLASS_NAME :
+ * @brief PATRICIA trie.
+ * @ingroup branch-detail
+ *
+ * This implementation loosely borrows ideas from:
+ * 1) Fast Mergeable Integer Maps, Okasaki, Gill 1998
+ * 2) Ptset: Sets of integers implemented as Patricia trees,
+ * Jean-Christophe Filliatr, 2000
+ */
+ template<typename Key, typename Mapped, typename Node_And_It_Traits,
+ typename _Alloc>
+ class PB_DS_PAT_TRIE_NAME :
#ifdef _GLIBCXX_DEBUG
public PB_DS_DEBUG_MAP_BASE_C_DEC,
-#endif
- public Node_And_It_Traits::synth_e_access_traits,
+#endif
+ public Node_And_It_Traits::synth_access_traits,
public Node_And_It_Traits::node_update,
- public PB_DS_TYPES_TRAITS_C_DEC
+ public PB_DS_PAT_TRIE_TRAITS_BASE,
+ public pat_trie_base
{
private:
- typedef PB_DS_TYPES_TRAITS_C_DEC traits_base;
+ typedef pat_trie_base base_type;
+ typedef PB_DS_PAT_TRIE_TRAITS_BASE traits_base;
+ typedef Node_And_It_Traits traits_type;
+
+ typedef typename traits_type::synth_access_traits synth_access_traits;
+ typedef typename synth_access_traits::const_iterator a_const_iterator;
+
+ typedef typename traits_type::node node;
+ typedef typename _Alloc::template rebind<node> __rebind_n;
+ typedef typename __rebind_n::other::const_pointer node_const_pointer;
+ typedef typename __rebind_n::other::pointer node_pointer;
+
+ typedef typename traits_type::head head;
+ typedef typename _Alloc::template rebind<head> __rebind_h;
+ typedef typename __rebind_h::other head_allocator;
+ typedef typename head_allocator::pointer head_pointer;
+
+ typedef typename traits_type::leaf leaf;
+ typedef typename _Alloc::template rebind<leaf> __rebind_l;
+ typedef typename __rebind_l::other leaf_allocator;
+ typedef typename leaf_allocator::pointer leaf_pointer;
+ typedef typename leaf_allocator::const_pointer leaf_const_pointer;
+
+ typedef typename traits_type::inode inode;
+ typedef typename inode::iterator inode_iterator;
+ typedef typename _Alloc::template rebind<inode> __rebind_in;
+ typedef typename __rebind_in::other __rebind_ina;
+ typedef typename __rebind_in::other inode_allocator;
+ typedef typename __rebind_ina::pointer inode_pointer;
+ typedef typename __rebind_ina::const_pointer inode_const_pointer;
+
+
+ /// Conditional deallocator.
+ class cond_dealtor
+ {
+ protected:
+ leaf_pointer m_p_nd;
+ bool m_no_action_dtor;
+ bool m_call_destructor;
- typedef typename Node_And_It_Traits::synth_e_access_traits synth_e_access_traits;
- typedef typename Allocator::template rebind<synth_e_access_traits>::other::const_pointer const_e_access_traits_pointer;
- typedef typename synth_e_access_traits::const_iterator const_e_iterator;
+ public:
+ cond_dealtor(leaf_pointer p_nd)
+ : m_p_nd(p_nd), m_no_action_dtor(false), m_call_destructor(false)
+ { }
- typedef typename Node_And_It_Traits::node node;
- typedef typename Allocator::template rebind<node>::other::const_pointer const_node_pointer;
+ void
+ set_no_action_dtor()
+ { m_no_action_dtor = true; }
- typedef typename Allocator::template rebind<node>::other::pointer node_pointer;
+ void
+ set_call_destructor()
+ { m_call_destructor = true; }
- typedef typename Node_And_It_Traits::head head;
- typedef typename Allocator::template rebind<head>::other head_allocator;
- typedef typename head_allocator::pointer head_pointer;
+ ~cond_dealtor()
+ {
+ if (m_no_action_dtor)
+ return;
- typedef typename Node_And_It_Traits::leaf leaf;
- typedef typename Allocator::template rebind<leaf>::other leaf_allocator;
- typedef typename leaf_allocator::const_pointer const_leaf_pointer;
- typedef typename leaf_allocator::pointer leaf_pointer;
+ if (m_call_destructor)
+ m_p_nd->~leaf();
- typedef typename Node_And_It_Traits::internal_node internal_node;
- typedef typename Allocator::template rebind<internal_node>::other internal_node_allocator;
- typedef typename internal_node_allocator::const_pointer const_internal_node_pointer;
- typedef typename internal_node_allocator::pointer internal_node_pointer;
+ s_leaf_allocator.deallocate(m_p_nd, 1);
+ }
+ };
-#include <ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp>
+
+ /// Branch bag, for split-join.
+ class branch_bag
+ {
+ private:
+ typedef inode_pointer __inp;
+ typedef typename _Alloc::template rebind<__inp>::other __rebind_inp;
#ifdef _GLIBCXX_DEBUG
- typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
-#endif
+ typedef std::_GLIBCXX_STD_C::list<__inp, __rebind_inp> bag_type;
+#else
+ typedef std::list<__inp, __rebind_inp> bag_type;
+#endif
+
+ bag_type m_bag;
+ public:
+ void
+ add_branch()
+ {
+ inode_pointer p_nd = s_inode_allocator.allocate(1);
+ __try
+ {
+ m_bag.push_back(p_nd);
+ }
+ __catch(...)
+ {
+ s_inode_allocator.deallocate(p_nd, 1);
+ __throw_exception_again;
+ }
+ }
+
+ inode_pointer
+ get_branch()
+ {
+ _GLIBCXX_DEBUG_ASSERT(!m_bag.empty());
+ inode_pointer p_nd = *m_bag.begin();
+ m_bag.pop_front();
+ return p_nd;
+ }
+
+ ~branch_bag()
+ {
+ while (!m_bag.empty())
+ {
+ inode_pointer p_nd = *m_bag.begin();
+ s_inode_allocator.deallocate(p_nd, 1);
+ m_bag.pop_front();
+ }
+ }
+
+ inline bool
+ empty() const
+ { return m_bag.empty(); }
+ };
-#include <ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp>
+#ifdef _GLIBCXX_DEBUG
+ typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base;
+#endif
- typedef typename Node_And_It_Traits::null_node_update_pointer null_node_update_pointer;
+ typedef typename traits_type::null_node_update_pointer null_node_update_pointer;
public:
- typedef pat_trie_tag container_category;
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
-
- typedef typename traits_base::key_type key_type;
- typedef typename traits_base::key_pointer key_pointer;
- typedef typename traits_base::const_key_pointer const_key_pointer;
- typedef typename traits_base::key_reference key_reference;
- typedef typename traits_base::const_key_reference const_key_reference;
- typedef typename traits_base::mapped_type mapped_type;
- typedef typename traits_base::mapped_pointer mapped_pointer;
- typedef typename traits_base::const_mapped_pointer const_mapped_pointer;
- typedef typename traits_base::mapped_reference mapped_reference;
- typedef typename traits_base::const_mapped_reference const_mapped_reference;
- typedef typename traits_base::value_type value_type;
- typedef typename traits_base::pointer pointer;
- typedef typename traits_base::const_pointer const_pointer;
- typedef typename traits_base::reference reference;
- typedef typename traits_base::const_reference const_reference;
-
- typedef typename Node_And_It_Traits::const_iterator const_point_iterator;
- typedef typename Node_And_It_Traits::iterator point_iterator;
- typedef const_point_iterator const_iterator;
- typedef point_iterator iterator;
-
- typedef typename Node_And_It_Traits::const_reverse_iterator const_reverse_iterator;
- typedef typename Node_And_It_Traits::reverse_iterator reverse_iterator;
- typedef typename Node_And_It_Traits::const_node_iterator const_node_iterator;
- typedef typename Node_And_It_Traits::node_iterator node_iterator;
- typedef typename Node_And_It_Traits::e_access_traits e_access_traits;
- typedef typename Node_And_It_Traits::node_update node_update;
-
- PB_DS_CLASS_NAME();
-
- PB_DS_CLASS_NAME(const e_access_traits&);
-
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
+ typedef pat_trie_tag container_category;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+
+ typedef typename traits_base::key_type key_type;
+ typedef typename traits_base::key_pointer key_pointer;
+ typedef typename traits_base::key_const_pointer key_const_pointer;
+ typedef typename traits_base::key_reference key_reference;
+ typedef typename traits_base::key_const_reference key_const_reference;
+ typedef typename traits_base::mapped_type mapped_type;
+ typedef typename traits_base::mapped_pointer mapped_pointer;
+ typedef typename traits_base::mapped_const_pointer mapped_const_pointer;
+ typedef typename traits_base::mapped_reference mapped_reference;
+ typedef typename traits_base::mapped_const_reference mapped_const_reference;
+ typedef typename traits_base::value_type value_type;
+ typedef typename traits_base::pointer pointer;
+ typedef typename traits_base::const_pointer const_pointer;
+ typedef typename traits_base::reference reference;
+ typedef typename traits_base::const_reference const_reference;
+
+ typedef typename traits_type::access_traits access_traits;
+ typedef typename traits_type::const_iterator point_const_iterator;
+ typedef typename traits_type::iterator point_iterator;
+ typedef point_const_iterator const_iterator;
+ typedef point_iterator iterator;
+
+ typedef typename traits_type::reverse_iterator reverse_iterator;
+ typedef typename traits_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename traits_type::node_const_iterator node_const_iterator;
+ typedef typename traits_type::node_iterator node_iterator;
+ typedef typename traits_type::node_update node_update;
+
+ PB_DS_PAT_TRIE_NAME();
+
+ PB_DS_PAT_TRIE_NAME(const access_traits&);
+
+ PB_DS_PAT_TRIE_NAME(const PB_DS_CLASS_C_DEC&);
void
swap(PB_DS_CLASS_C_DEC&);
- ~PB_DS_CLASS_NAME();
+ ~PB_DS_PAT_TRIE_NAME();
inline bool
empty() const;
@@ -210,55 +289,55 @@ namespace __gnu_pbds
inline size_type
max_size() const;
- e_access_traits&
- get_e_access_traits();
+ access_traits&
+ get_access_traits();
- const e_access_traits&
- get_e_access_traits() const;
+ const access_traits&
+ get_access_traits() const;
- node_update&
+ node_update&
get_node_update();
- const node_update&
+ const node_update&
get_node_update() const;
inline std::pair<point_iterator, bool>
insert(const_reference);
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
return insert(std::make_pair(r_key, mapped_type())).first->second;
-#else
+#else
insert(r_key);
- return traits_base::s_null_mapped;
-#endif
+ return traits_base::s_null_type;
+#endif
}
inline point_iterator
- find(const_key_reference);
+ find(key_const_reference);
- inline const_point_iterator
- find(const_key_reference) const;
+ inline point_const_iterator
+ find(key_const_reference) const;
inline point_iterator
- lower_bound(const_key_reference);
+ lower_bound(key_const_reference);
- inline const_point_iterator
- lower_bound(const_key_reference) const;
+ inline point_const_iterator
+ lower_bound(key_const_reference) const;
inline point_iterator
- upper_bound(const_key_reference);
+ upper_bound(key_const_reference);
- inline const_point_iterator
- upper_bound(const_key_reference) const;
+ inline point_const_iterator
+ upper_bound(key_const_reference) const;
void
clear();
inline bool
- erase(const_key_reference);
+ erase(key_const_reference);
inline const_iterator
erase(const_iterator);
@@ -266,7 +345,7 @@ namespace __gnu_pbds
#ifdef PB_DS_DATA_TRUE_INDICATOR
inline iterator
erase(iterator);
-#endif
+#endif
inline const_reverse_iterator
erase(const_reverse_iterator);
@@ -274,7 +353,7 @@ namespace __gnu_pbds
#ifdef PB_DS_DATA_TRUE_INDICATOR
inline reverse_iterator
erase(reverse_iterator);
-#endif
+#endif
template<typename Pred>
inline size_type
@@ -284,7 +363,7 @@ namespace __gnu_pbds
join(PB_DS_CLASS_C_DEC&);
void
- split(const_key_reference, PB_DS_CLASS_C_DEC&);
+ split(key_const_reference, PB_DS_CLASS_C_DEC&);
inline iterator
begin();
@@ -310,25 +389,32 @@ namespace __gnu_pbds
inline const_reverse_iterator
rend() const;
- inline const_node_iterator
+ /// Returns a const node_iterator corresponding to the node at the
+ /// root of the tree.
+ inline node_const_iterator
node_begin() const;
+ /// Returns a node_iterator corresponding to the node at the
+ /// root of the tree.
inline node_iterator
node_begin();
- inline const_node_iterator
+ /// Returns a const node_iterator corresponding to a node just
+ /// after a leaf of the tree.
+ inline node_const_iterator
node_end() const;
+ /// Returns a node_iterator corresponding to a node just
+ /// after a leaf of the tree.
inline node_iterator
node_end();
#ifdef PB_DS_PAT_TRIE_TRACE_
void
trace() const;
-#endif
+#endif
protected:
-
template<typename It>
void
copy_from_range(It, It);
@@ -337,10 +423,9 @@ namespace __gnu_pbds
value_swap(PB_DS_CLASS_C_DEC&);
node_pointer
- recursive_copy_node(const_node_pointer);
+ recursive_copy_node(node_const_pointer);
private:
-
void
initialize();
@@ -352,51 +437,46 @@ namespace __gnu_pbds
apply_update(node_pointer, Node_Update_*);
bool
- join_prep(PB_DS_CLASS_C_DEC&, split_join_branch_bag&);
+ join_prep(PB_DS_CLASS_C_DEC&, branch_bag&);
void
- rec_join_prep(const_node_pointer, const_node_pointer,
- split_join_branch_bag&);
+ rec_join_prep(node_const_pointer, node_const_pointer, branch_bag&);
void
- rec_join_prep(const_leaf_pointer, const_leaf_pointer,
- split_join_branch_bag&);
+ rec_join_prep(leaf_const_pointer, leaf_const_pointer, branch_bag&);
void
- rec_join_prep(const_leaf_pointer, const_internal_node_pointer,
- split_join_branch_bag&);
+ rec_join_prep(leaf_const_pointer, inode_const_pointer, branch_bag&);
void
- rec_join_prep(const_internal_node_pointer, const_leaf_pointer,
- split_join_branch_bag&);
+ rec_join_prep(inode_const_pointer, leaf_const_pointer, branch_bag&);
void
- rec_join_prep(const_internal_node_pointer, const_internal_node_pointer,
- split_join_branch_bag&);
+ rec_join_prep(inode_const_pointer, inode_const_pointer, branch_bag&);
node_pointer
- rec_join(node_pointer, node_pointer, size_type, split_join_branch_bag&);
+ rec_join(node_pointer, node_pointer, size_type, branch_bag&);
node_pointer
- rec_join(leaf_pointer, leaf_pointer, split_join_branch_bag&);
+ rec_join(leaf_pointer, leaf_pointer, branch_bag&);
node_pointer
- rec_join(leaf_pointer, internal_node_pointer, size_type,
- split_join_branch_bag&);
+ rec_join(leaf_pointer, inode_pointer, size_type, branch_bag&);
node_pointer
- rec_join(internal_node_pointer, leaf_pointer, size_type,
- split_join_branch_bag&);
+ rec_join(inode_pointer, leaf_pointer, size_type, branch_bag&);
node_pointer
- rec_join(internal_node_pointer, internal_node_pointer,
- split_join_branch_bag&);
+ rec_join(inode_pointer, inode_pointer, branch_bag&);
size_type
- keys_diff_ind(typename e_access_traits::const_iterator, typename e_access_traits::const_iterator, typename e_access_traits::const_iterator, typename e_access_traits::const_iterator);
+ keys_diff_ind(typename access_traits::const_iterator,
+ typename access_traits::const_iterator,
+ typename access_traits::const_iterator,
+ typename access_traits::const_iterator);
- internal_node_pointer
- insert_branch(node_pointer, node_pointer, split_join_branch_bag&);
+ inode_pointer
+ insert_branch(node_pointer, node_pointer, branch_bag&);
void
update_min_max_for_inserted_leaf(leaf_pointer);
@@ -411,85 +491,89 @@ namespace __gnu_pbds
clear_imp(node_pointer);
void
- erase_fixup(internal_node_pointer);
+ erase_fixup(inode_pointer);
void
update_min_max_for_erased_leaf(leaf_pointer);
- static inline const_e_iterator
- pref_begin(const_node_pointer);
+ static inline a_const_iterator
+ pref_begin(node_const_pointer);
- static inline const_e_iterator
- pref_end(const_node_pointer);
+ static inline a_const_iterator
+ pref_end(node_const_pointer);
inline node_pointer
- find_imp(const_key_reference);
+ find_imp(key_const_reference);
inline node_pointer
- lower_bound_imp(const_key_reference);
+ lower_bound_imp(key_const_reference);
inline node_pointer
- upper_bound_imp(const_key_reference);
+ upper_bound_imp(key_const_reference);
- inline static const_leaf_pointer
- leftmost_descendant(const_node_pointer);
+ inline static leaf_const_pointer
+ leftmost_descendant(node_const_pointer);
inline static leaf_pointer
leftmost_descendant(node_pointer);
- inline static const_leaf_pointer
- rightmost_descendant(const_node_pointer);
+ inline static leaf_const_pointer
+ rightmost_descendant(node_const_pointer);
inline static leaf_pointer
rightmost_descendant(node_pointer);
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
void
- assert_iterators() const;
+ assert_iterators(const char*, int) const;
void
- assert_reverse_iterators() const;
+ assert_reverse_iterators(const char*, int) const;
static size_type
- recursive_count_leafs(const_node_pointer);
-#endif
+ recursive_count_leafs(node_const_pointer, const char*, int);
+#endif
#ifdef PB_DS_PAT_TRIE_TRACE_
static void
- trace_node(const_node_pointer, size_type);
+ trace_node(node_const_pointer, size_type);
template<typename Metadata_>
static void
- trace_node_metadata(const_node_pointer, type_to_type<Metadata_>);
+ trace_node_metadata(node_const_pointer, type_to_type<Metadata_>);
static void
- trace_node_metadata(const_node_pointer, type_to_type<null_node_metadata>);
-#endif
+ trace_node_metadata(node_const_pointer, type_to_type<null_type>);
+#endif
leaf_pointer
- split_prep(const_key_reference, PB_DS_CLASS_C_DEC&,
- split_join_branch_bag&);
+ split_prep(key_const_reference, PB_DS_CLASS_C_DEC&, branch_bag&);
node_pointer
- rec_split(node_pointer, const_e_iterator, const_e_iterator,
- PB_DS_CLASS_C_DEC&, split_join_branch_bag&);
+ rec_split(node_pointer, a_const_iterator, a_const_iterator,
+ PB_DS_CLASS_C_DEC&, branch_bag&);
void
- split_insert_branch(size_type, const_e_iterator,
- typename internal_node::iterator,
- size_type, split_join_branch_bag&);
+ split_insert_branch(size_type, a_const_iterator, inode_iterator,
+ size_type, branch_bag&);
- static head_allocator s_head_allocator;
- static internal_node_allocator s_internal_node_allocator;
- static leaf_allocator s_leaf_allocator;
+ static head_allocator s_head_allocator;
+ static inode_allocator s_inode_allocator;
+ static leaf_allocator s_leaf_allocator;
- head_pointer m_p_head;
- size_type m_size;
+ head_pointer m_p_head;
+ size_type m_size;
};
+#define PB_DS_ASSERT_NODE_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X->assert_valid(this, __FILE__, __LINE__);)
+
+#define PB_DS_RECURSIVE_COUNT_LEAFS(X) \
+ recursive_count_leafs(X, __FILE__, __LINE__)
+
#include <ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp>
#include <ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp>
@@ -502,14 +586,12 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp>
#include <ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp>
+#undef PB_DS_RECURSIVE_COUNT_LEAFS
+#undef PB_DS_ASSERT_NODE_VALID
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_NAME
-#undef PB_DS_TYPES_TRAITS_C_DEC
+#undef PB_DS_PAT_TRIE_NAME
+#undef PB_DS_PAT_TRIE_TRAITS_BASE
#undef PB_DS_DEBUG_MAP_BASE_C_DEC
-#undef PB_DS_V2F
-#undef PB_DS_EP2VP
-#undef PB_DS_V2S
-
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
new file mode 100644
index 0000000000..0a763b56ad
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
@@ -0,0 +1,1361 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file pat_trie_/pat_trie_base.hpp
+ * Contains the base class for a patricia tree.
+ */
+
+#ifndef PB_DS_PAT_TRIE_BASE
+#define PB_DS_PAT_TRIE_BASE
+
+#include <debug/debug.h>
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+ /// Base type for PATRICIA trees.
+ struct pat_trie_base
+ {
+ /**
+ * @brief Three types of nodes.
+ *
+ * i_node is used by _Inode, leaf_node by _Leaf, and head_node by _Head.
+ */
+ enum node_type
+ {
+ i_node,
+ leaf_node,
+ head_node
+ };
+
+ /// Metadata base primary template.
+ template<typename Metadata, typename _Alloc>
+ struct _Metadata
+ {
+ typedef Metadata metadata_type;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::template rebind<Metadata> __rebind_m;
+ typedef typename __rebind_m::other::const_reference const_reference;
+
+ const_reference
+ get_metadata() const
+ { return m_metadata; }
+
+ metadata_type m_metadata;
+ };
+
+ /// Specialization for null metadata.
+ template<typename _Alloc>
+ struct _Metadata<null_type, _Alloc>
+ {
+ typedef null_type metadata_type;
+ typedef _Alloc allocator_type;
+ };
+
+
+ /// Node base.
+ template<typename _ATraits, typename Metadata>
+ struct _Node_base
+ : public Metadata
+ {
+ private:
+ typedef typename Metadata::allocator_type _Alloc;
+
+ public:
+ typedef _Alloc allocator_type;
+ typedef _ATraits access_traits;
+ typedef typename _ATraits::type_traits type_traits;
+ typedef typename _Alloc::template rebind<_Node_base> __rebind_n;
+ typedef typename __rebind_n::other::pointer node_pointer;
+
+ node_pointer m_p_parent;
+ const node_type m_type;
+
+ _Node_base(node_type type) : m_type(type)
+ { }
+
+ typedef typename _Alloc::template rebind<_ATraits> __rebind_at;
+ typedef typename __rebind_at::other::const_pointer a_const_pointer;
+ typedef typename _ATraits::const_iterator a_const_iterator;
+
+#ifdef _GLIBCXX_DEBUG
+ typedef std::pair<a_const_iterator, a_const_iterator> node_debug_info;
+
+ void
+ assert_valid(a_const_pointer p_traits,
+ const char* __file, int __line) const
+ { assert_valid_imp(p_traits, __file, __line); }
+
+ virtual node_debug_info
+ assert_valid_imp(a_const_pointer, const char*, int) const = 0;
+#endif
+ };
+
+
+ /// Head node for PATRICIA tree.
+ template<typename _ATraits, typename Metadata>
+ struct _Head
+ : public _Node_base<_ATraits, Metadata>
+ {
+ typedef _Node_base<_ATraits, Metadata> base_type;
+ typedef typename base_type::type_traits type_traits;
+ typedef typename base_type::node_pointer node_pointer;
+
+ node_pointer m_p_min;
+ node_pointer m_p_max;
+
+ _Head() : base_type(head_node) { }
+
+#ifdef _GLIBCXX_DEBUG
+ typedef typename base_type::node_debug_info node_debug_info;
+ typedef typename base_type::a_const_pointer a_const_pointer;
+
+ virtual node_debug_info
+ assert_valid_imp(a_const_pointer, const char* __file, int __line) const
+ {
+ _GLIBCXX_DEBUG_VERIFY_AT(false,
+ _M_message("Assertion from %1;:%2;")
+ ._M_string(__FILE__)._M_integer(__LINE__),
+ __file, __line);
+ return node_debug_info();
+ }
+#endif
+ };
+
+
+ /// Leaf node for PATRICIA tree.
+ template<typename _ATraits, typename Metadata>
+ struct _Leaf
+ : public _Node_base<_ATraits, Metadata>
+ {
+ typedef _Node_base<_ATraits, Metadata> base_type;
+ typedef typename base_type::type_traits type_traits;
+ typedef typename type_traits::value_type value_type;
+ typedef typename type_traits::reference reference;
+ typedef typename type_traits::const_reference const_reference;
+
+ private:
+ value_type m_value;
+
+ _Leaf(const _Leaf&);
+
+ public:
+ _Leaf(const_reference other)
+ : base_type(leaf_node), m_value(other) { }
+
+ reference
+ value()
+ { return m_value; }
+
+ const_reference
+ value() const
+ { return m_value; }
+
+#ifdef _GLIBCXX_DEBUG
+ typedef typename base_type::node_debug_info node_debug_info;
+ typedef typename base_type::a_const_pointer a_const_pointer;
+
+ virtual node_debug_info
+ assert_valid_imp(a_const_pointer p_traits,
+ const char* __file, int __line) const
+ {
+ PB_DS_DEBUG_VERIFY(base_type::m_type == leaf_node);
+ node_debug_info ret;
+ const_reference r_val = value();
+ return std::make_pair(p_traits->begin(p_traits->extract_key(r_val)),
+ p_traits->end(p_traits->extract_key(r_val)));
+ }
+
+ virtual
+ ~_Leaf() { }
+#endif
+ };
+
+
+ /// Internal node type, PATRICIA tree.
+ template<typename _ATraits, typename Metadata>
+ struct _Inode
+ : public _Node_base<_ATraits, Metadata>
+ {
+ typedef _Node_base<_ATraits, Metadata> base_type;
+ typedef typename base_type::type_traits type_traits;
+ typedef typename base_type::access_traits access_traits;
+ typedef typename type_traits::value_type value_type;
+ typedef typename base_type::allocator_type _Alloc;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+
+ private:
+ typedef typename base_type::a_const_pointer a_const_pointer;
+ typedef typename base_type::a_const_iterator a_const_iterator;
+
+ typedef typename base_type::node_pointer node_pointer;
+ typedef typename _Alloc::template rebind<base_type> __rebind_n;
+ typedef typename __rebind_n::other::const_pointer node_const_pointer;
+
+ typedef _Leaf<_ATraits, Metadata> leaf;
+ typedef typename _Alloc::template rebind<leaf>::other __rebind_l;
+ typedef typename __rebind_l::pointer leaf_pointer;
+ typedef typename __rebind_l::const_pointer leaf_const_pointer;
+
+ typedef typename _Alloc::template rebind<_Inode>::other __rebind_in;
+ typedef typename __rebind_in::pointer inode_pointer;
+ typedef typename __rebind_in::const_pointer inode_const_pointer;
+
+ inline size_type
+ get_pref_pos(a_const_iterator, a_const_iterator, a_const_pointer) const;
+
+ public:
+ typedef typename _Alloc::template rebind<node_pointer>::other __rebind_np;
+ typedef typename __rebind_np::pointer node_pointer_pointer;
+ typedef typename __rebind_np::reference node_pointer_reference;
+
+ enum
+ {
+ arr_size = _ATraits::max_size + 1
+ };
+ PB_DS_STATIC_ASSERT(min_arr_size, arr_size >= 2);
+
+
+ /// Constant child iterator.
+ struct const_iterator
+ {
+ node_pointer_pointer m_p_p_cur;
+ node_pointer_pointer m_p_p_end;
+
+ typedef std::forward_iterator_tag iterator_category;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef node_pointer value_type;
+ typedef node_pointer_pointer pointer;
+ typedef node_pointer_reference reference;
+
+ const_iterator(node_pointer_pointer p_p_cur = 0,
+ node_pointer_pointer p_p_end = 0)
+ : m_p_p_cur(p_p_cur), m_p_p_end(p_p_end)
+ { }
+
+ bool
+ operator==(const const_iterator& other) const
+ { return m_p_p_cur == other.m_p_p_cur; }
+
+ bool
+ operator!=(const const_iterator& other) const
+ { return m_p_p_cur != other.m_p_p_cur; }
+
+ const_iterator&
+ operator++()
+ {
+ do
+ ++m_p_p_cur;
+ while (m_p_p_cur != m_p_p_end && *m_p_p_cur == 0);
+ return *this;
+ }
+
+ const_iterator
+ operator++(int)
+ {
+ const_iterator ret_it(*this);
+ operator++();
+ return ret_it;
+ }
+
+ const node_pointer_pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_ONLY(assert_referencible();)
+ return m_p_p_cur;
+ }
+
+ node_const_pointer
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ONLY(assert_referencible();)
+ return *m_p_p_cur;
+ }
+
+ protected:
+#ifdef _GLIBCXX_DEBUG
+ void
+ assert_referencible() const
+ { _GLIBCXX_DEBUG_ASSERT(m_p_p_cur != m_p_p_end && *m_p_p_cur != 0); }
+#endif
+ };
+
+
+ /// Child iterator.
+ struct iterator : public const_iterator
+ {
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef node_pointer value_type;
+ typedef node_pointer_pointer pointer;
+ typedef node_pointer_reference reference;
+
+ inline
+ iterator(node_pointer_pointer p_p_cur = 0,
+ node_pointer_pointer p_p_end = 0)
+ : const_iterator(p_p_cur, p_p_end) { }
+
+ bool
+ operator==(const iterator& other) const
+ { return const_iterator::m_p_p_cur == other.m_p_p_cur; }
+
+ bool
+ operator!=(const iterator& other) const
+ { return const_iterator::m_p_p_cur != other.m_p_p_cur; }
+
+ iterator&
+ operator++()
+ {
+ const_iterator::operator++();
+ return *this;
+ }
+
+ iterator
+ operator++(int)
+ {
+ iterator ret_it(*this);
+ operator++();
+ return ret_it;
+ }
+
+ node_pointer_pointer
+ operator->()
+ {
+ _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();)
+ return const_iterator::m_p_p_cur;
+ }
+
+ node_pointer
+ operator*()
+ {
+ _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();)
+ return *const_iterator::m_p_p_cur;
+ }
+ };
+
+
+ _Inode(size_type, const a_const_iterator);
+
+ void
+ update_prefixes(a_const_pointer);
+
+ const_iterator
+ begin() const;
+
+ iterator
+ begin();
+
+ const_iterator
+ end() const;
+
+ iterator
+ end();
+
+ inline node_pointer
+ get_child_node(a_const_iterator, a_const_iterator, a_const_pointer);
+
+ inline node_const_pointer
+ get_child_node(a_const_iterator, a_const_iterator, a_const_pointer) const;
+
+ inline iterator
+ get_child_it(a_const_iterator, a_const_iterator, a_const_pointer);
+
+ inline node_pointer
+ get_lower_bound_child_node(a_const_iterator, a_const_iterator,
+ size_type, a_const_pointer);
+
+ inline node_pointer
+ add_child(node_pointer, a_const_iterator, a_const_iterator,
+ a_const_pointer);
+
+ inline node_const_pointer
+ get_join_child(node_const_pointer, a_const_pointer) const;
+
+ inline node_pointer
+ get_join_child(node_pointer, a_const_pointer);
+
+ void
+ remove_child(node_pointer);
+
+ void
+ remove_child(iterator);
+
+ void
+ replace_child(node_pointer, a_const_iterator, a_const_iterator,
+ a_const_pointer);
+
+ inline a_const_iterator
+ pref_b_it() const;
+
+ inline a_const_iterator
+ pref_e_it() const;
+
+ bool
+ should_be_mine(a_const_iterator, a_const_iterator, size_type,
+ a_const_pointer) const;
+
+ leaf_pointer
+ leftmost_descendant();
+
+ leaf_const_pointer
+ leftmost_descendant() const;
+
+ leaf_pointer
+ rightmost_descendant();
+
+ leaf_const_pointer
+ rightmost_descendant() const;
+
+#ifdef _GLIBCXX_DEBUG
+ typedef typename base_type::node_debug_info node_debug_info;
+
+ virtual node_debug_info
+ assert_valid_imp(a_const_pointer, const char*, int) const;
+#endif
+
+ size_type
+ get_e_ind() const
+ { return m_e_ind; }
+
+ private:
+ _Inode(const _Inode&);
+
+ size_type
+ get_begin_pos() const;
+
+ static __rebind_l s_leaf_alloc;
+ static __rebind_in s_inode_alloc;
+
+ const size_type m_e_ind;
+ a_const_iterator m_pref_b_it;
+ a_const_iterator m_pref_e_it;
+ node_pointer m_a_p_children[arr_size];
+ };
+
+#define PB_DS_CONST_IT_C_DEC \
+ _CIter<Node, Leaf, Head, Inode, Is_Forward_Iterator>
+
+#define PB_DS_CONST_ODIR_IT_C_DEC \
+ _CIter<Node, Leaf, Head, Inode, !Is_Forward_Iterator>
+
+#define PB_DS_IT_C_DEC \
+ _Iter<Node, Leaf, Head, Inode, Is_Forward_Iterator>
+
+#define PB_DS_ODIR_IT_C_DEC \
+ _Iter<Node, Leaf, Head, Inode, !Is_Forward_Iterator>
+
+
+ /// Const iterator.
+ template<typename Node, typename Leaf, typename Head, typename Inode,
+ bool Is_Forward_Iterator>
+ class _CIter
+ {
+ public:
+ // These types are all the same for the first four template arguments.
+ typedef typename Node::allocator_type allocator_type;
+ typedef typename Node::type_traits type_traits;
+
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef typename allocator_type::difference_type difference_type;
+ typedef typename type_traits::value_type value_type;
+ typedef typename type_traits::pointer pointer;
+ typedef typename type_traits::reference reference;
+ typedef typename type_traits::const_pointer const_pointer;
+ typedef typename type_traits::const_reference const_reference;
+
+ typedef allocator_type _Alloc;
+ typedef typename _Alloc::template rebind<Node> __rebind_n;
+ typedef typename __rebind_n::other::pointer node_pointer;
+ typedef typename _Alloc::template rebind<Leaf> __rebind_l;
+ typedef typename __rebind_l::other::pointer leaf_pointer;
+ typedef typename __rebind_l::other::const_pointer leaf_const_pointer;
+ typedef typename _Alloc::template rebind<Head> __rebind_h;
+ typedef typename __rebind_h::other::pointer head_pointer;
+
+ typedef typename _Alloc::template rebind<Inode> __rebind_in;
+ typedef typename __rebind_in::other::pointer inode_pointer;
+ typedef typename Inode::iterator inode_iterator;
+
+ node_pointer m_p_nd;
+
+ _CIter(node_pointer p_nd = 0) : m_p_nd(p_nd)
+ { }
+
+ _CIter(const PB_DS_CONST_ODIR_IT_C_DEC& other)
+ : m_p_nd(other.m_p_nd)
+ { }
+
+ _CIter&
+ operator=(const _CIter& other)
+ {
+ m_p_nd = other.m_p_nd;
+ return *this;
+ }
+
+ _CIter&
+ operator=(const PB_DS_CONST_ODIR_IT_C_DEC& other)
+ {
+ m_p_nd = other.m_p_nd;
+ return *this;
+ }
+
+ const_pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == leaf_node);
+ return &static_cast<leaf_pointer>(m_p_nd)->value();
+ }
+
+ const_reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == leaf_node);
+ return static_cast<leaf_pointer>(m_p_nd)->value();
+ }
+
+ bool
+ operator==(const _CIter& other) const
+ { return m_p_nd == other.m_p_nd; }
+
+ bool
+ operator==(const PB_DS_CONST_ODIR_IT_C_DEC& other) const
+ { return m_p_nd == other.m_p_nd; }
+
+ bool
+ operator!=(const _CIter& other) const
+ { return m_p_nd != other.m_p_nd; }
+
+ bool
+ operator!=(const PB_DS_CONST_ODIR_IT_C_DEC& other) const
+ { return m_p_nd != other.m_p_nd; }
+
+ _CIter&
+ operator++()
+ {
+ inc(integral_constant<int, Is_Forward_Iterator>());
+ return *this;
+ }
+
+ _CIter
+ operator++(int)
+ {
+ _CIter ret_it(m_p_nd);
+ operator++();
+ return ret_it;
+ }
+
+ _CIter&
+ operator--()
+ {
+ dec(integral_constant<int, Is_Forward_Iterator>());
+ return *this;
+ }
+
+ _CIter
+ operator--(int)
+ {
+ _CIter ret_it(m_p_nd);
+ operator--();
+ return ret_it;
+ }
+
+ protected:
+ void
+ inc(false_type)
+ { dec(true_type()); }
+
+ void
+ inc(true_type)
+ {
+ if (m_p_nd->m_type == head_node)
+ {
+ m_p_nd = static_cast<head_pointer>(m_p_nd)->m_p_min;
+ return;
+ }
+
+ node_pointer p_y = m_p_nd->m_p_parent;
+ while (p_y->m_type != head_node && get_larger_sibling(m_p_nd) == 0)
+ {
+ m_p_nd = p_y;
+ p_y = p_y->m_p_parent;
+ }
+
+ if (p_y->m_type == head_node)
+ {
+ m_p_nd = p_y;
+ return;
+ }
+ m_p_nd = leftmost_descendant(get_larger_sibling(m_p_nd));
+ }
+
+ void
+ dec(false_type)
+ { inc(true_type()); }
+
+ void
+ dec(true_type)
+ {
+ if (m_p_nd->m_type == head_node)
+ {
+ m_p_nd = static_cast<head_pointer>(m_p_nd)->m_p_max;
+ return;
+ }
+
+ node_pointer p_y = m_p_nd->m_p_parent;
+ while (p_y->m_type != head_node && get_smaller_sibling(m_p_nd) == 0)
+ {
+ m_p_nd = p_y;
+ p_y = p_y->m_p_parent;
+ }
+
+ if (p_y->m_type == head_node)
+ {
+ m_p_nd = p_y;
+ return;
+ }
+ m_p_nd = rightmost_descendant(get_smaller_sibling(m_p_nd));
+ }
+
+ static node_pointer
+ get_larger_sibling(node_pointer p_nd)
+ {
+ inode_pointer p_parent = static_cast<inode_pointer>(p_nd->m_p_parent);
+
+ inode_iterator it = p_parent->begin();
+ while (*it != p_nd)
+ ++it;
+
+ inode_iterator next_it = it;
+ ++next_it;
+ return (next_it == p_parent->end())? 0 : *next_it;
+ }
+
+ static node_pointer
+ get_smaller_sibling(node_pointer p_nd)
+ {
+ inode_pointer p_parent = static_cast<inode_pointer>(p_nd->m_p_parent);
+
+ inode_iterator it = p_parent->begin();
+ if (*it == p_nd)
+ return 0;
+
+ inode_iterator prev_it;
+ do
+ {
+ prev_it = it;
+ ++it;
+ if (*it == p_nd)
+ return *prev_it;
+ }
+ while (true);
+
+ _GLIBCXX_DEBUG_ASSERT(false);
+ return 0;
+ }
+
+ static leaf_pointer
+ leftmost_descendant(node_pointer p_nd)
+ {
+ if (p_nd->m_type == leaf_node)
+ return static_cast<leaf_pointer>(p_nd);
+ return static_cast<inode_pointer>(p_nd)->leftmost_descendant();
+ }
+
+ static leaf_pointer
+ rightmost_descendant(node_pointer p_nd)
+ {
+ if (p_nd->m_type == leaf_node)
+ return static_cast<leaf_pointer>(p_nd);
+ return static_cast<inode_pointer>(p_nd)->rightmost_descendant();
+ }
+ };
+
+
+ /// Iterator.
+ template<typename Node, typename Leaf, typename Head, typename Inode,
+ bool Is_Forward_Iterator>
+ class _Iter
+ : public _CIter<Node, Leaf, Head, Inode, Is_Forward_Iterator>
+ {
+ public:
+ typedef _CIter<Node, Leaf, Head, Inode, Is_Forward_Iterator>
+ base_type;
+ typedef typename base_type::allocator_type allocator_type;
+ typedef typename base_type::type_traits type_traits;
+ typedef typename type_traits::value_type value_type;
+ typedef typename type_traits::pointer pointer;
+ typedef typename type_traits::reference reference;
+
+ typedef typename base_type::node_pointer node_pointer;
+ typedef typename base_type::leaf_pointer leaf_pointer;
+ typedef typename base_type::leaf_const_pointer leaf_const_pointer;
+ typedef typename base_type::head_pointer head_pointer;
+ typedef typename base_type::inode_pointer inode_pointer;
+
+ _Iter(node_pointer p_nd = 0)
+ : base_type(p_nd) { }
+
+ _Iter(const PB_DS_ODIR_IT_C_DEC& other)
+ : base_type(other.m_p_nd) { }
+
+ _Iter&
+ operator=(const _Iter& other)
+ {
+ base_type::m_p_nd = other.m_p_nd;
+ return *this;
+ }
+
+ _Iter&
+ operator=(const PB_DS_ODIR_IT_C_DEC& other)
+ {
+ base_type::m_p_nd = other.m_p_nd;
+ return *this;
+ }
+
+ pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == leaf_node);
+ return &static_cast<leaf_pointer>(base_type::m_p_nd)->value();
+ }
+
+ reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == leaf_node);
+ return static_cast<leaf_pointer>(base_type::m_p_nd)->value();
+ }
+
+ _Iter&
+ operator++()
+ {
+ base_type::operator++();
+ return *this;
+ }
+
+ _Iter
+ operator++(int)
+ {
+ _Iter ret(base_type::m_p_nd);
+ operator++();
+ return ret;
+ }
+
+ _Iter&
+ operator--()
+ {
+ base_type::operator--();
+ return *this;
+ }
+
+ _Iter
+ operator--(int)
+ {
+ _Iter ret(base_type::m_p_nd);
+ operator--();
+ return ret;
+ }
+ };
+
+#undef PB_DS_CONST_ODIR_IT_C_DEC
+#undef PB_DS_ODIR_IT_C_DEC
+
+
+#define PB_DS_PAT_TRIE_NODE_CONST_ITERATOR_C_DEC \
+ _Node_citer<Node, Leaf, Head, Inode, _CIterator, Iterator, _ATraits, _Alloc>
+
+#define PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC \
+ _Node_iter<Node, Leaf, Head, Inode, _CIterator, Iterator, _ATraits, _Alloc>
+
+ /// Node const iterator.
+ template<typename Node,
+ typename Leaf,
+ typename Head,
+ typename Inode,
+ typename _CIterator,
+ typename Iterator,
+ typename _Alloc>
+ class _Node_citer
+ {
+ protected:
+ typedef typename _Alloc::template rebind<Node> __rebind_n;
+ typedef typename __rebind_n::other::pointer node_pointer;
+
+ typedef typename _Alloc::template rebind<Leaf> __rebind_l;
+ typedef typename __rebind_l::other::pointer leaf_pointer;
+ typedef typename __rebind_l::other::const_pointer leaf_const_pointer;
+
+ typedef typename _Alloc::template rebind<Inode> __rebind_in;
+ typedef typename __rebind_in::other::pointer inode_pointer;
+ typedef typename __rebind_in::other::const_pointer inode_const_pointer;
+
+ typedef typename Node::a_const_pointer a_const_pointer;
+ typedef typename Node::a_const_iterator a_const_iterator;
+
+ private:
+ a_const_iterator
+ pref_begin() const
+ {
+ if (m_p_nd->m_type == leaf_node)
+ {
+ leaf_const_pointer lcp = static_cast<leaf_const_pointer>(m_p_nd);
+ return m_p_traits->begin(m_p_traits->extract_key(lcp->value()));
+ }
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node);
+ return static_cast<inode_const_pointer>(m_p_nd)->pref_b_it();
+ }
+
+ a_const_iterator
+ pref_end() const
+ {
+ if (m_p_nd->m_type == leaf_node)
+ {
+ leaf_const_pointer lcp = static_cast<leaf_const_pointer>(m_p_nd);
+ return m_p_traits->end(m_p_traits->extract_key(lcp->value()));
+ }
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node);
+ return static_cast<inode_const_pointer>(m_p_nd)->pref_e_it();
+ }
+
+ public:
+ typedef trivial_iterator_tag iterator_category;
+ typedef trivial_iterator_difference_type difference_type;
+ typedef typename _Alloc::size_type size_type;
+
+ typedef _CIterator value_type;
+ typedef value_type reference;
+ typedef value_type const_reference;
+
+ /// Metadata type.
+ typedef typename Node::metadata_type metadata_type;
+
+ /// Const metadata reference type.
+ typedef typename _Alloc::template rebind<metadata_type> __rebind_m;
+ typedef typename __rebind_m::other __rebind_ma;
+ typedef typename __rebind_ma::const_reference metadata_const_reference;
+
+ inline
+ _Node_citer(node_pointer p_nd = 0, a_const_pointer p_traits = 0)
+ : m_p_nd(const_cast<node_pointer>(p_nd)), m_p_traits(p_traits)
+ { }
+
+ /// Subtree valid prefix.
+ std::pair<a_const_iterator, a_const_iterator>
+ valid_prefix() const
+ { return std::make_pair(pref_begin(), pref_end()); }
+
+ /// Const access; returns the __const iterator* associated with
+ /// the current leaf.
+ const_reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(num_children() == 0);
+ return _CIterator(m_p_nd);
+ }
+
+ /// Metadata access.
+ metadata_const_reference
+ get_metadata() const
+ { return m_p_nd->get_metadata(); }
+
+ /// Returns the number of children in the corresponding node.
+ size_type
+ num_children() const
+ {
+ if (m_p_nd->m_type == leaf_node)
+ return 0;
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node);
+ inode_pointer inp = static_cast<inode_pointer>(m_p_nd);
+ return std::distance(inp->begin(), inp->end());
+ }
+
+ /// Returns a __const node __iterator to the corresponding node's
+ /// i-th child.
+ _Node_citer
+ get_child(size_type i) const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node);
+ inode_pointer inp = static_cast<inode_pointer>(m_p_nd);
+ typename Inode::iterator it = inp->begin();
+ std::advance(it, i);
+ return _Node_citer(*it, m_p_traits);
+ }
+
+ /// Compares content to a different iterator object.
+ bool
+ operator==(const _Node_citer& other) const
+ { return m_p_nd == other.m_p_nd; }
+
+ /// Compares content (negatively) to a different iterator object.
+ bool
+ operator!=(const _Node_citer& other) const
+ { return m_p_nd != other.m_p_nd; }
+
+ node_pointer m_p_nd;
+ a_const_pointer m_p_traits;
+ };
+
+
+ /// Node iterator.
+ template<typename Node,
+ typename Leaf,
+ typename Head,
+ typename Inode,
+ typename _CIterator,
+ typename Iterator,
+ typename _Alloc>
+ class _Node_iter
+ : public _Node_citer<Node, Leaf, Head, Inode, _CIterator, Iterator, _Alloc>
+ {
+ private:
+ typedef _Node_citer<Node, Leaf, Head, Inode,
+ _CIterator, Iterator, _Alloc> base_type;
+ typedef typename _Alloc::template rebind<Node> __rebind_n;
+ typedef typename __rebind_n::other::pointer node_pointer;
+ typedef typename base_type::inode_pointer inode_pointer;
+ typedef typename base_type::a_const_pointer a_const_pointer;
+ typedef Iterator iterator;
+
+ public:
+ typedef typename base_type::size_type size_type;
+
+ typedef Iterator value_type;
+ typedef value_type reference;
+ typedef value_type const_reference;
+
+ _Node_iter(node_pointer p_nd = 0, a_const_pointer p_traits = 0)
+ : base_type(p_nd, p_traits)
+ { }
+
+ /// Access; returns the iterator* associated with the current leaf.
+ reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(base_type::num_children() == 0);
+ return iterator(base_type::m_p_nd);
+ }
+
+ /// Returns a node __iterator to the corresponding node's i-th child.
+ _Node_iter
+ get_child(size_type i) const
+ {
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == i_node);
+
+ typename Inode::iterator it =
+ static_cast<inode_pointer>(base_type::m_p_nd)->begin();
+
+ std::advance(it, i);
+ return _Node_iter(*it, base_type::m_p_traits);
+ }
+ };
+ };
+
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename _ATraits, typename Metadata>
+
+#define PB_DS_CLASS_C_DEC \
+ pat_trie_base::_Inode<_ATraits, Metadata>
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::__rebind_l
+ PB_DS_CLASS_C_DEC::s_leaf_alloc;
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::__rebind_in
+ PB_DS_CLASS_C_DEC::s_inode_alloc;
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::size_type
+ PB_DS_CLASS_C_DEC::
+ get_pref_pos(a_const_iterator b_it, a_const_iterator e_it,
+ a_const_pointer p_traits) const
+ {
+ if (static_cast<std::size_t>(std::distance(b_it, e_it)) <= m_e_ind)
+ return 0;
+ std::advance(b_it, m_e_ind);
+ return 1 + p_traits->e_pos(*b_it);
+ }
+
+ PB_DS_CLASS_T_DEC
+ PB_DS_CLASS_C_DEC::
+ _Inode(size_type len, const a_const_iterator it)
+ : base_type(i_node), m_e_ind(len), m_pref_b_it(it), m_pref_e_it(it)
+ {
+ std::advance(m_pref_e_it, m_e_ind);
+ std::fill(m_a_p_children, m_a_p_children + arr_size,
+ static_cast<node_pointer>(0));
+ }
+
+ PB_DS_CLASS_T_DEC
+ void
+ PB_DS_CLASS_C_DEC::
+ update_prefixes(a_const_pointer p_traits)
+ {
+ node_pointer p_first = *begin();
+ if (p_first->m_type == leaf_node)
+ {
+ leaf_const_pointer p = static_cast<leaf_const_pointer>(p_first);
+ m_pref_b_it = p_traits->begin(access_traits::extract_key(p->value()));
+ }
+ else
+ {
+ inode_pointer p = static_cast<inode_pointer>(p_first);
+ _GLIBCXX_DEBUG_ASSERT(p_first->m_type == i_node);
+ m_pref_b_it = p->pref_b_it();
+ }
+ m_pref_e_it = m_pref_b_it;
+ std::advance(m_pref_e_it, m_e_ind);
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::const_iterator
+ PB_DS_CLASS_C_DEC::
+ begin() const
+ {
+ typedef node_pointer_pointer pointer_type;
+ pointer_type p = const_cast<pointer_type>(m_a_p_children);
+ return const_iterator(p + get_begin_pos(), p + arr_size);
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::iterator
+ PB_DS_CLASS_C_DEC::
+ begin()
+ {
+ return iterator(m_a_p_children + get_begin_pos(),
+ m_a_p_children + arr_size);
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::const_iterator
+ PB_DS_CLASS_C_DEC::
+ end() const
+ {
+ typedef node_pointer_pointer pointer_type;
+ pointer_type p = const_cast<pointer_type>(m_a_p_children) + arr_size;
+ return const_iterator(p, p);
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::iterator
+ PB_DS_CLASS_C_DEC::
+ end()
+ { return iterator(m_a_p_children + arr_size, m_a_p_children + arr_size); }
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::node_pointer
+ PB_DS_CLASS_C_DEC::
+ get_child_node(a_const_iterator b_it, a_const_iterator e_it,
+ a_const_pointer p_traits)
+ {
+ const size_type i = get_pref_pos(b_it, e_it, p_traits);
+ _GLIBCXX_DEBUG_ASSERT(i < arr_size);
+ return m_a_p_children[i];
+ }
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::iterator
+ PB_DS_CLASS_C_DEC::
+ get_child_it(a_const_iterator b_it, a_const_iterator e_it,
+ a_const_pointer p_traits)
+ {
+ const size_type i = get_pref_pos(b_it, e_it, p_traits);
+ _GLIBCXX_DEBUG_ASSERT(i < arr_size);
+ _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i] != 0);
+ return iterator(m_a_p_children + i, m_a_p_children + i);
+ }
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::node_const_pointer
+ PB_DS_CLASS_C_DEC::
+ get_child_node(a_const_iterator b_it, a_const_iterator e_it,
+ a_const_pointer p_traits) const
+ { return const_cast<node_pointer>(get_child_node(b_it, e_it, p_traits)); }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::node_pointer
+ PB_DS_CLASS_C_DEC::
+ get_lower_bound_child_node(a_const_iterator b_it, a_const_iterator e_it,
+ size_type checked_ind,
+ a_const_pointer p_traits)
+ {
+ if (!should_be_mine(b_it, e_it, checked_ind, p_traits))
+ {
+ if (p_traits->cmp_prefixes(b_it, e_it, m_pref_b_it,
+ m_pref_e_it, true))
+ return leftmost_descendant();
+ return rightmost_descendant();
+ }
+
+ size_type i = get_pref_pos(b_it, e_it, p_traits);
+ _GLIBCXX_DEBUG_ASSERT(i < arr_size);
+
+ if (m_a_p_children[i] != 0)
+ return m_a_p_children[i];
+
+ while (++i < arr_size)
+ if (m_a_p_children[i] != 0)
+ {
+ const node_type& __nt = m_a_p_children[i]->m_type;
+ node_pointer ret = m_a_p_children[i];
+
+ if (__nt == leaf_node)
+ return ret;
+
+ _GLIBCXX_DEBUG_ASSERT(__nt == i_node);
+ inode_pointer inp = static_cast<inode_pointer>(ret);
+ return inp->leftmost_descendant();
+ }
+
+ return rightmost_descendant();
+ }
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::node_pointer
+ PB_DS_CLASS_C_DEC::
+ add_child(node_pointer p_nd, a_const_iterator b_it, a_const_iterator e_it,
+ a_const_pointer p_traits)
+ {
+ const size_type i = get_pref_pos(b_it, e_it, p_traits);
+ _GLIBCXX_DEBUG_ASSERT(i < arr_size);
+ if (m_a_p_children[i] == 0)
+ {
+ m_a_p_children[i] = p_nd;
+ p_nd->m_p_parent = this;
+ return p_nd;
+ }
+ return m_a_p_children[i];
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::node_const_pointer
+ PB_DS_CLASS_C_DEC::
+ get_join_child(node_const_pointer p_nd,
+ a_const_pointer p_tr) const
+ {
+ node_pointer p = const_cast<node_pointer>(p_nd);
+ return const_cast<inode_pointer>(this)->get_join_child(p, p_tr);
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::node_pointer
+ PB_DS_CLASS_C_DEC::
+ get_join_child(node_pointer p_nd, a_const_pointer p_traits)
+ {
+ size_type i;
+ a_const_iterator b_it;
+ a_const_iterator e_it;
+ if (p_nd->m_type == leaf_node)
+ {
+ leaf_const_pointer p = static_cast<leaf_const_pointer>(p_nd);
+
+ typedef typename type_traits::key_const_reference kcr;
+ kcr r_key = access_traits::extract_key(p->value());
+ b_it = p_traits->begin(r_key);
+ e_it = p_traits->end(r_key);
+ }
+ else
+ {
+ b_it = static_cast<inode_pointer>(p_nd)->pref_b_it();
+ e_it = static_cast<inode_pointer>(p_nd)->pref_e_it();
+ }
+ i = get_pref_pos(b_it, e_it, p_traits);
+ _GLIBCXX_DEBUG_ASSERT(i < arr_size);
+ return m_a_p_children[i];
+ }
+
+ PB_DS_CLASS_T_DEC
+ void
+ PB_DS_CLASS_C_DEC::
+ remove_child(node_pointer p_nd)
+ {
+ size_type i = 0;
+ for (; i < arr_size; ++i)
+ if (m_a_p_children[i] == p_nd)
+ {
+ m_a_p_children[i] = 0;
+ return;
+ }
+ _GLIBCXX_DEBUG_ASSERT(i != arr_size);
+ }
+
+ PB_DS_CLASS_T_DEC
+ void
+ PB_DS_CLASS_C_DEC::
+ remove_child(iterator it)
+ { *it.m_p_p_cur = 0; }
+
+ PB_DS_CLASS_T_DEC
+ void
+ PB_DS_CLASS_C_DEC::
+ replace_child(node_pointer p_nd, a_const_iterator b_it,
+ a_const_iterator e_it,
+ a_const_pointer p_traits)
+ {
+ const size_type i = get_pref_pos(b_it, e_it, p_traits);
+ _GLIBCXX_DEBUG_ASSERT(i < arr_size);
+ m_a_p_children[i] = p_nd;
+ p_nd->m_p_parent = this;
+ }
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::a_const_iterator
+ PB_DS_CLASS_C_DEC::
+ pref_b_it() const
+ { return m_pref_b_it; }
+
+ PB_DS_CLASS_T_DEC
+ inline typename PB_DS_CLASS_C_DEC::a_const_iterator
+ PB_DS_CLASS_C_DEC::
+ pref_e_it() const
+ { return m_pref_e_it; }
+
+ PB_DS_CLASS_T_DEC
+ bool
+ PB_DS_CLASS_C_DEC::
+ should_be_mine(a_const_iterator b_it, a_const_iterator e_it,
+ size_type checked_ind,
+ a_const_pointer p_traits) const
+ {
+ if (m_e_ind == 0)
+ return true;
+
+ const size_type num_es = std::distance(b_it, e_it);
+ if (num_es < m_e_ind)
+ return false;
+
+ a_const_iterator key_b_it = b_it;
+ std::advance(key_b_it, checked_ind);
+ a_const_iterator key_e_it = b_it;
+ std::advance(key_e_it, m_e_ind);
+
+ a_const_iterator value_b_it = m_pref_b_it;
+ std::advance(value_b_it, checked_ind);
+ a_const_iterator value_e_it = m_pref_b_it;
+ std::advance(value_e_it, m_e_ind);
+
+ return p_traits->equal_prefixes(key_b_it, key_e_it, value_b_it,
+ value_e_it);
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::leaf_pointer
+ PB_DS_CLASS_C_DEC::
+ leftmost_descendant()
+ {
+ node_pointer p_pot = *begin();
+ if (p_pot->m_type == leaf_node)
+ return (static_cast<leaf_pointer>(p_pot));
+ _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == i_node);
+ return static_cast<inode_pointer>(p_pot)->leftmost_descendant();
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::leaf_const_pointer
+ PB_DS_CLASS_C_DEC::
+ leftmost_descendant() const
+ { return const_cast<inode_pointer>(this)->leftmost_descendant(); }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::leaf_pointer
+ PB_DS_CLASS_C_DEC::
+ rightmost_descendant()
+ {
+ const size_type num_children = std::distance(begin(), end());
+ _GLIBCXX_DEBUG_ASSERT(num_children >= 2);
+
+ iterator it = begin();
+ std::advance(it, num_children - 1);
+ node_pointer p_pot =* it;
+ if (p_pot->m_type == leaf_node)
+ return static_cast<leaf_pointer>(p_pot);
+ _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == i_node);
+ return static_cast<inode_pointer>(p_pot)->rightmost_descendant();
+ }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::leaf_const_pointer
+ PB_DS_CLASS_C_DEC::
+ rightmost_descendant() const
+ { return const_cast<inode_pointer>(this)->rightmost_descendant(); }
+
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::size_type
+ PB_DS_CLASS_C_DEC::
+ get_begin_pos() const
+ {
+ size_type i = 0;
+ for (; i < arr_size && m_a_p_children[i] == 0; ++i)
+ ;
+ return i;
+ }
+
+#ifdef _GLIBCXX_DEBUG
+ PB_DS_CLASS_T_DEC
+ typename PB_DS_CLASS_C_DEC::node_debug_info
+ PB_DS_CLASS_C_DEC::
+ assert_valid_imp(a_const_pointer p_traits,
+ const char* __file, int __line) const
+ {
+ PB_DS_DEBUG_VERIFY(base_type::m_type == i_node);
+ PB_DS_DEBUG_VERIFY(static_cast<size_type>(std::distance(pref_b_it(), pref_e_it())) == m_e_ind);
+ PB_DS_DEBUG_VERIFY(std::distance(begin(), end()) >= 2);
+
+ for (typename _Inode::const_iterator it = begin(); it != end(); ++it)
+ {
+ node_const_pointer p_nd = *it;
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_parent == this);
+ node_debug_info child_ret = p_nd->assert_valid_imp(p_traits,
+ __file, __line);
+
+ PB_DS_DEBUG_VERIFY(static_cast<size_type>(std::distance(child_ret.first, child_ret.second)) >= m_e_ind);
+ PB_DS_DEBUG_VERIFY(should_be_mine(child_ret.first, child_ret.second, 0, p_traits));
+ PB_DS_DEBUG_VERIFY(get_pref_pos(child_ret.first, child_ret.second, p_traits) == static_cast<size_type>(it.m_p_p_cur - m_a_p_children));
+ }
+ return std::make_pair(pref_b_it(), pref_e_it());
+ }
+#endif
+
+#undef PB_DS_CLASS_T_DEC
+#undef PB_DS_CLASS_C_DEC
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
deleted file mode 100644
index a3e15062b3..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
+++ /dev/null
@@ -1,484 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file point_iterators.hpp
- * Contains an implementation class for bin_search_tree_.
- */
-
-#ifndef PB_DS_PAT_TRIE_FIND_ITERATORS_HPP
-#define PB_DS_PAT_TRIE_FIND_ITERATORS_HPP
-
-#include <debug/debug.h>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
-#define PB_DS_CONST_IT_C_DEC \
- pat_trie_const_it_< \
- Type_Traits, \
- Node, \
- Leaf, \
- Head, \
- Internal_Node, \
- Is_Forward_Iterator, \
- Allocator>
-
-#define PB_DS_CONST_ODIR_IT_C_DEC \
- pat_trie_const_it_< \
- Type_Traits, \
- Node, \
- Leaf, \
- Head, \
- Internal_Node, \
- !Is_Forward_Iterator, \
- Allocator>
-
-#define PB_DS_IT_C_DEC \
- pat_trie_it_< \
- Type_Traits, \
- Node, \
- Leaf, \
- Head, \
- Internal_Node, \
- Is_Forward_Iterator, \
- Allocator>
-
-#define PB_DS_ODIR_IT_C_DEC \
- pat_trie_it_< \
- Type_Traits, \
- Node, \
- Leaf, \
- Head, \
- Internal_Node, \
- !Is_Forward_Iterator, \
- Allocator>
-
-
- // Const iterator.
- template<typename Type_Traits,
- class Node,
- class Leaf,
- class Head,
- class Internal_Node,
- bool Is_Forward_Iterator,
- class Allocator>
- class pat_trie_const_it_
- {
-
- private:
- typedef
- typename Allocator::template rebind<
- Node>::other::pointer
- node_pointer;
-
- typedef
- typename Allocator::template rebind<
- Leaf>::other::const_pointer
- const_leaf_pointer;
-
- typedef
- typename Allocator::template rebind<
- Leaf>::other::pointer
- leaf_pointer;
-
- typedef
- typename Allocator::template rebind<
- Head>::other::pointer
- head_pointer;
-
- typedef
- typename Allocator::template rebind<
- Internal_Node>::other::pointer
- internal_node_pointer;
-
- public:
-
- typedef std::bidirectional_iterator_tag iterator_category;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef typename Type_Traits::value_type value_type;
-
- typedef typename Type_Traits::pointer pointer;
-
- typedef typename Type_Traits::const_pointer const_pointer;
-
- typedef typename Type_Traits::reference reference;
-
- typedef typename Type_Traits::const_reference const_reference;
-
- public:
-
- inline
- pat_trie_const_it_(node_pointer p_nd = 0) : m_p_nd(p_nd)
- { }
-
- inline
- pat_trie_const_it_(const PB_DS_CONST_ODIR_IT_C_DEC& other)
- : m_p_nd(other.m_p_nd)
- { }
-
- inline
- PB_DS_CONST_IT_C_DEC&
- operator=(const PB_DS_CONST_IT_C_DEC& other)
- {
- m_p_nd = other.m_p_nd;
- return *this;
- }
-
- inline
- PB_DS_CONST_IT_C_DEC&
- operator=(const PB_DS_CONST_ODIR_IT_C_DEC& other)
- {
- m_p_nd = other.m_p_nd;
- return *this;
- }
-
- inline const_pointer
- operator->() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_leaf_node_type);
- return &static_cast<leaf_pointer>(m_p_nd)->value();
- }
-
- inline const_reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_leaf_node_type);
- return static_cast<leaf_pointer>(m_p_nd)->value();
- }
-
- inline bool
- operator==(const PB_DS_CONST_IT_C_DEC& other) const
- { return (m_p_nd == other.m_p_nd); }
-
- inline bool
- operator==(const PB_DS_CONST_ODIR_IT_C_DEC& other) const
- { return (m_p_nd == other.m_p_nd); }
-
- inline bool
- operator!=(const PB_DS_CONST_IT_C_DEC& other) const
- { return (m_p_nd != other.m_p_nd); }
-
- inline bool
- operator!=(const PB_DS_CONST_ODIR_IT_C_DEC& other) const
- { return (m_p_nd != other.m_p_nd); }
-
- inline PB_DS_CONST_IT_C_DEC&
- operator++()
- {
- inc(integral_constant<int,Is_Forward_Iterator>());
- return *this;
- }
-
- inline PB_DS_CONST_IT_C_DEC
- operator++(int)
- {
- PB_DS_CONST_IT_C_DEC ret_it(m_p_nd);
- operator++();
- return ret_it;
- }
-
- inline PB_DS_CONST_IT_C_DEC&
- operator--()
- {
- dec(integral_constant<int,Is_Forward_Iterator>());
- return *this;
- }
-
- inline PB_DS_CONST_IT_C_DEC
- operator--(int)
- {
- PB_DS_CONST_IT_C_DEC ret_it(m_p_nd);
- operator--();
- return ret_it;
- }
-
- protected:
- inline void
- inc(false_type)
- { dec(true_type()); }
-
- void
- inc(true_type)
- {
- if (m_p_nd->m_type == pat_trie_head_node_type)
- {
- m_p_nd = static_cast<head_pointer>(m_p_nd)->m_p_min;
- return;
- }
-
- node_pointer p_y = m_p_nd->m_p_parent;
- while (p_y->m_type != pat_trie_head_node_type &&
- get_larger_sibling(m_p_nd) == 0)
- {
- m_p_nd = p_y;
- p_y = p_y->m_p_parent;
- }
-
- if (p_y->m_type == pat_trie_head_node_type)
- {
- m_p_nd = p_y;
- return;
- }
- m_p_nd = leftmost_descendant(get_larger_sibling(m_p_nd));
- }
-
- inline void
- dec(false_type)
- { inc(true_type()); }
-
- void
- dec(true_type)
- {
- if (m_p_nd->m_type == pat_trie_head_node_type)
- {
- m_p_nd = static_cast<head_pointer>(m_p_nd)->m_p_max;
- return;
- }
-
- node_pointer p_y = m_p_nd->m_p_parent;
- while (p_y->m_type != pat_trie_head_node_type &&
- get_smaller_sibling(m_p_nd) == 0)
- {
- m_p_nd = p_y;
- p_y = p_y->m_p_parent;
- }
-
- if (p_y->m_type == pat_trie_head_node_type)
- {
- m_p_nd = p_y;
- return;
- }
- m_p_nd = rightmost_descendant(get_smaller_sibling(m_p_nd));
- }
-
- inline static node_pointer
- get_larger_sibling(node_pointer p_nd)
- {
- internal_node_pointer p_parent =
- static_cast<internal_node_pointer>(p_nd->m_p_parent);
-
- typename Internal_Node::iterator it = p_parent->begin();
- while (*it != p_nd)
- ++it;
-
- typename Internal_Node::iterator next_it = it;
- ++next_it;
- return ((next_it == p_parent->end())? 0 :* next_it);
- }
-
- inline static node_pointer
- get_smaller_sibling(node_pointer p_nd)
- {
- internal_node_pointer p_parent =
- static_cast<internal_node_pointer>(p_nd->m_p_parent);
-
- typename Internal_Node::iterator it = p_parent->begin();
-
- if (*it == p_nd)
- return (0);
- typename Internal_Node::iterator prev_it;
- do
- {
- prev_it = it;
- ++it;
- if (*it == p_nd)
- return (*prev_it);
- }
- while (true);
-
- _GLIBCXX_DEBUG_ASSERT(false);
- return (0);
- }
-
- inline static leaf_pointer
- leftmost_descendant(node_pointer p_nd)
- {
- if (p_nd->m_type == pat_trie_leaf_node_type)
- return static_cast<leaf_pointer>(p_nd);
- return static_cast<internal_node_pointer>(p_nd)->leftmost_descendant();
- }
-
- inline static leaf_pointer
- rightmost_descendant(node_pointer p_nd)
- {
- if (p_nd->m_type == pat_trie_leaf_node_type)
- return static_cast<leaf_pointer>(p_nd);
- return static_cast<internal_node_pointer>(p_nd)->rightmost_descendant();
- }
-
- public:
- node_pointer m_p_nd;
- };
-
- // Iterator.
- template<typename Type_Traits,
- class Node,
- class Leaf,
- class Head,
- class Internal_Node,
- bool Is_Forward_Iterator,
- class Allocator>
- class pat_trie_it_ :
- public PB_DS_CONST_IT_C_DEC
-
- {
- private:
- typedef
- typename Allocator::template rebind<
- Node>::other::pointer
- node_pointer;
-
- typedef
- typename Allocator::template rebind<
- Leaf>::other::const_pointer
- const_leaf_pointer;
-
- typedef
- typename Allocator::template rebind<
- Leaf>::other::pointer
- leaf_pointer;
-
- typedef
- typename Allocator::template rebind<
- Head>::other::pointer
- head_pointer;
-
- typedef
- typename Allocator::template rebind<
- Internal_Node>::other::pointer
- internal_node_pointer;
-
- public:
- typedef typename Type_Traits::value_type value_type;
-
- typedef typename Type_Traits::const_pointer const_pointer;
-
- typedef typename Type_Traits::pointer pointer;
-
- typedef typename Type_Traits::const_reference const_reference;
-
- typedef typename Type_Traits::reference reference;
-
- inline
- pat_trie_it_(node_pointer p_nd = 0) : PB_DS_CONST_IT_C_DEC((node_pointer)p_nd)
- { }
-
- inline
- pat_trie_it_(const PB_DS_ODIR_IT_C_DEC& other) : PB_DS_CONST_IT_C_DEC(other.m_p_nd)
- { }
-
- inline
- PB_DS_IT_C_DEC&
- operator=(const PB_DS_IT_C_DEC& other)
- {
- base_it_type::m_p_nd = other.m_p_nd;
- return *this;
- }
-
- inline
- PB_DS_IT_C_DEC&
- operator=(const PB_DS_ODIR_IT_C_DEC& other)
- {
- base_it_type::m_p_nd = other.m_p_nd;
- return *this;
- }
-
- inline pointer
- operator->() const
- {
- _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd->m_type == pat_trie_leaf_node_type);
-
- return &static_cast<leaf_pointer>(base_it_type::m_p_nd)->value();
- }
-
- inline reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd->m_type == pat_trie_leaf_node_type);
- return static_cast<leaf_pointer>(base_it_type::m_p_nd)->value();
- }
-
- inline PB_DS_IT_C_DEC&
- operator++()
- {
- PB_DS_CONST_IT_C_DEC::
- operator++();
- return *this;
- }
-
- inline PB_DS_IT_C_DEC
- operator++(int)
- {
- PB_DS_IT_C_DEC ret_it(base_it_type::m_p_nd);
- operator++();
- return ret_it;
- }
-
- inline PB_DS_IT_C_DEC&
- operator--()
- {
- PB_DS_CONST_IT_C_DEC::operator--();
- return *this;
- }
-
- inline PB_DS_IT_C_DEC
- operator--(int)
- {
- PB_DS_IT_C_DEC ret_it(base_it_type::m_p_nd);
- operator--();
- return ret_it;
- }
-
- protected:
- typedef PB_DS_CONST_IT_C_DEC base_it_type;
-
- friend class PB_DS_CLASS_C_DEC;
- };
-
-#undef PB_DS_CONST_IT_C_DEC
-#undef PB_DS_CONST_ODIR_IT_C_DEC
-#undef PB_DS_IT_C_DEC
-#undef PB_DS_ODIR_IT_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
index 79bfe4283b..0afc2d40a6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
@@ -34,20 +34,20 @@
// warranty.
/**
- * @file policy_access_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/policy_access_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::e_access_traits&
+typename PB_DS_CLASS_C_DEC::access_traits&
PB_DS_CLASS_C_DEC::
-get_e_access_traits()
+get_access_traits()
{ return *this; }
PB_DS_CLASS_T_DEC
-const typename PB_DS_CLASS_C_DEC::e_access_traits&
+const typename PB_DS_CLASS_C_DEC::access_traits&
PB_DS_CLASS_C_DEC::
-get_e_access_traits() const
+get_access_traits() const
{ return *this; }
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
index 7b2ebd5596..6a5582da25 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
@@ -34,8 +34,8 @@
// warranty.
/**
- * @file r_erase_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/r_erase_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
@@ -45,7 +45,7 @@ actual_erase_node(node_pointer p_z)
{
_GLIBCXX_DEBUG_ASSERT(m_size > 0);
--m_size;
- _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value)));
+ _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(p_z->m_value)));
p_z->~node();
s_node_allocator.deallocate(p_z, 1);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
index c7fcdb72df..683b3a9087 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file rotate_fn_imps.hpp
+ * @file pat_trie_/rotate_fn_imps.hpp
* Contains imps for rotating nodes.
*/
@@ -63,8 +63,8 @@ rotate_left(node_pointer p_x)
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_x);)
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y);)
- apply_update(p_x, (Node_Update* )this);
- apply_update(p_x->m_p_parent, (Node_Update* )this);
+ apply_update(p_x, (Node_Update*)this);
+ apply_update(p_x->m_p_parent, (Node_Update*)this);
}
PB_DS_CLASS_T_DEC
@@ -92,8 +92,8 @@ rotate_right(node_pointer p_x)
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_x);)
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y);)
- apply_update(p_x, (Node_Update* )this);
- apply_update(p_x->m_p_parent, (Node_Update* )this);
+ apply_update(p_x, (Node_Update*)this);
+ apply_update(p_x->m_p_parent, (Node_Update*)this);
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
index c9738d9b5f..c2aa9cde82 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,180 +34,175 @@
// warranty.
/**
- * @file split_fn_imps.hpp
- * Contains an implementation class for bin_search_tree_.
+ * @file pat_trie_/split_fn_imps.hpp
+ * Contains an implementation class for pat_trie.
*/
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
+split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- split_join_branch_bag bag;
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ branch_bag bag;
leaf_pointer p_split_lf = split_prep(r_key, other, bag);
if (p_split_lf == 0)
{
_GLIBCXX_DEBUG_ASSERT(bag.empty());
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
_GLIBCXX_DEBUG_ASSERT(!bag.empty());
other.clear();
- m_p_head->m_p_parent = rec_split(m_p_head->m_p_parent,
- pref_begin(p_split_lf),
- pref_end(p_split_lf),
- other,
- bag);
+
+ m_p_head->m_p_parent = rec_split(m_p_head->m_p_parent, pref_begin(p_split_lf),
+ pref_end(p_split_lf), other, bag);
m_p_head->m_p_parent->m_p_parent = m_p_head;
- other.m_p_head->m_p_max = m_p_head->m_p_max;
+ head_pointer __ohead = other.m_p_head;
+ __ohead->m_p_max = m_p_head->m_p_max;
m_p_head->m_p_max = rightmost_descendant(m_p_head->m_p_parent);
- other.m_p_head->m_p_min =
- other.leftmost_descendant(other.m_p_head->m_p_parent);
+ __ohead->m_p_min = other.leftmost_descendant(__ohead->m_p_parent);
other.m_size = std::distance(other.PB_DS_CLASS_C_DEC::begin(),
other.PB_DS_CLASS_C_DEC::end());
m_size -= other.m_size;
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::leaf_pointer
PB_DS_CLASS_C_DEC::
-split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag)
+split_prep(key_const_reference r_key, PB_DS_CLASS_C_DEC& other,
+ branch_bag& r_bag)
{
_GLIBCXX_DEBUG_ASSERT(r_bag.empty());
if (m_size == 0)
{
other.clear();
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- return (0);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return 0;
}
- if (synth_e_access_traits::cmp_keys(r_key,
- PB_DS_V2F(static_cast<const_leaf_pointer>(m_p_head->m_p_min)->value())))
+ if (synth_access_traits::cmp_keys(r_key,
+ PB_DS_V2F(static_cast<leaf_const_pointer>(m_p_head->m_p_min)->value())))
{
other.clear();
value_swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- return (0);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return 0;
}
- if (!synth_e_access_traits::cmp_keys(r_key,
- PB_DS_V2F(static_cast<const_leaf_pointer>(m_p_head->m_p_max)->value())))
+ if (!synth_access_traits::cmp_keys(r_key,
+ PB_DS_V2F(static_cast<leaf_const_pointer>(m_p_head->m_p_max)->value())))
{
- _GLIBCXX_DEBUG_ONLY(assert_valid(););
- _GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- return (0);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return 0;
}
iterator it = lower_bound(r_key);
- if (!synth_e_access_traits::equal_keys(PB_DS_V2F(*it), r_key))
+ if (!synth_access_traits::equal_keys(PB_DS_V2F(*it), r_key))
--it;
node_pointer p_nd = it.m_p_nd;
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_leaf_node_type);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == leaf_node);
leaf_pointer p_ret_l = static_cast<leaf_pointer>(p_nd);
- while (p_nd->m_type != pat_trie_head_node_type)
+ while (p_nd->m_type != head_node)
{
r_bag.add_branch();
p_nd = p_nd->m_p_parent;
}
- _GLIBCXX_DEBUG_ONLY(debug_base::split(r_key,(synth_e_access_traits& )(*this), other);)
+ _GLIBCXX_DEBUG_ONLY(debug_base::split(r_key,(synth_access_traits&)(*this), other);)
- return (p_ret_l);
+ return p_ret_l;
}
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-rec_split(node_pointer p_nd, const_e_iterator b_it, const_e_iterator e_it, PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag)
+rec_split(node_pointer p_nd, a_const_iterator b_it, a_const_iterator e_it,
+ PB_DS_CLASS_C_DEC& other, branch_bag& r_bag)
{
- if (p_nd->m_type == pat_trie_leaf_node_type)
+ if (p_nd->m_type == leaf_node)
{
_GLIBCXX_DEBUG_ASSERT(other.m_p_head->m_p_parent == 0);
- return (p_nd);
+ return p_nd;
}
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
- internal_node_pointer p_internal_nd = static_cast<internal_node_pointer>(p_nd);
-
- node_pointer p_child_ret = rec_split(p_internal_nd->get_child_node(b_it, e_it, this), b_it, e_it, other, r_bag);
-
- _GLIBCXX_DEBUG_ONLY(p_child_ret->assert_valid(this);)
- p_internal_nd->replace_child(p_child_ret, b_it, e_it, this);
- apply_update(p_internal_nd, (node_update* )this);
-
- typename internal_node::iterator child_it =
- p_internal_nd->get_child_it(b_it, e_it, this);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node);
+ inode_pointer p_ind = static_cast<inode_pointer>(p_nd);
- const size_type lhs_num_children =
- std::distance(p_internal_nd->begin(), child_it) + 1;
+ node_pointer pfirst = p_ind->get_child_node(b_it, e_it, this);
+ node_pointer p_child_ret = rec_split(pfirst, b_it, e_it, other, r_bag);
+ PB_DS_ASSERT_NODE_VALID(p_child_ret)
+ p_ind->replace_child(p_child_ret, b_it, e_it, this);
+ apply_update(p_ind, (node_update*)this);
+ inode_iterator child_it = p_ind->get_child_it(b_it, e_it, this);
+ const size_type lhs_dist = std::distance(p_ind->begin(), child_it);
+ const size_type lhs_num_children = lhs_dist + 1;
_GLIBCXX_DEBUG_ASSERT(lhs_num_children > 0);
- size_type rhs_num_children =
- std::distance(p_internal_nd->begin(), p_internal_nd->end()) -
- lhs_num_children;
-
+ const size_type rhs_dist = std::distance(p_ind->begin(), p_ind->end());
+ size_type rhs_num_children = rhs_dist - lhs_num_children;
if (rhs_num_children == 0)
{
- apply_update(p_internal_nd, (node_update* )this);
- return (p_internal_nd);
+ apply_update(p_ind, (node_update*)this);
+ return p_ind;
}
- ++child_it;
- other.split_insert_branch(p_internal_nd->get_e_ind(),
- b_it, child_it, rhs_num_children, r_bag);
+ other.split_insert_branch(p_ind->get_e_ind(), b_it, child_it,
+ rhs_num_children, r_bag);
- child_it = p_internal_nd->get_child_it(b_it, e_it, this);
- ++child_it;
+ child_it = p_ind->get_child_it(b_it, e_it, this);
while (rhs_num_children != 0)
{
- child_it = p_internal_nd->remove_child(child_it);
+ ++child_it;
+ p_ind->remove_child(child_it);
--rhs_num_children;
}
+ apply_update(p_ind, (node_update*)this);
- apply_update(p_internal_nd, (node_update* )this);
- _GLIBCXX_DEBUG_ASSERT(std::distance(p_internal_nd->begin(),
- p_internal_nd->end()) >= 1);
-
- if (std::distance(p_internal_nd->begin(), p_internal_nd->end()) > 1)
+ const size_type int_dist = std::distance(p_ind->begin(), p_ind->end());
+ _GLIBCXX_DEBUG_ASSERT(int_dist >= 1);
+ if (int_dist > 1)
{
- p_internal_nd->update_prefixes(this);
- _GLIBCXX_DEBUG_ONLY(p_internal_nd->assert_valid(this);)
- apply_update(p_internal_nd, (node_update* )this);
- return (p_internal_nd);
+ p_ind->update_prefixes(this);
+ PB_DS_ASSERT_NODE_VALID(p_ind)
+ apply_update(p_ind, (node_update*)this);
+ return p_ind;
}
- node_pointer p_ret =* p_internal_nd->begin();
- p_internal_nd->~internal_node();
- s_internal_node_allocator.deallocate(p_internal_nd, 1);
- apply_update(p_ret, (node_update* )this);
- return (p_ret);
+ node_pointer p_ret = *p_ind->begin();
+ p_ind->~inode();
+ s_inode_allocator.deallocate(p_ind, 1);
+ apply_update(p_ret, (node_update*)this);
+ return p_ret;
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-split_insert_branch(size_type e_ind, const_e_iterator b_it, typename internal_node::iterator child_b_it, size_type num_children, split_join_branch_bag& r_bag)
+split_insert_branch(size_type e_ind, a_const_iterator b_it,
+ inode_iterator child_b_it,
+ size_type num_children, branch_bag& r_bag)
{
#ifdef _GLIBCXX_DEBUG
if (m_p_head->m_p_parent != 0)
- m_p_head->m_p_parent->assert_valid(this);
-#endif
-
- const size_type total_num_children =((m_p_head->m_p_parent == 0)? 0 : 1) + num_children;
+ PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent)
+#endif
+ const size_type start = m_p_head->m_p_parent == 0 ? 0 : 1;
+ const size_type total_num_children = start + num_children;
if (total_num_children == 0)
{
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == 0);
@@ -217,38 +212,39 @@ split_insert_branch(size_type e_ind, const_e_iterator b_it, typename internal_no
if (total_num_children == 1)
{
if (m_p_head->m_p_parent != 0)
- {
- _GLIBCXX_DEBUG_ONLY(m_p_head->m_p_parent->assert_valid(this);)
- return;
- }
+ {
+ PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent)
+ return;
+ }
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == 0);
- m_p_head->m_p_parent =* child_b_it;
+ ++child_b_it;
+ m_p_head->m_p_parent = *child_b_it;
m_p_head->m_p_parent->m_p_parent = m_p_head;
- apply_update(m_p_head->m_p_parent, (node_update* )this);
- _GLIBCXX_DEBUG_ONLY(m_p_head->m_p_parent->assert_valid(this);)
+ apply_update(m_p_head->m_p_parent, (node_update*)this);
+ PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent)
return;
}
_GLIBCXX_DEBUG_ASSERT(total_num_children > 1);
- internal_node_pointer p_new_root = r_bag.get_branch();
- new (p_new_root) internal_node(e_ind, b_it);
+ inode_pointer p_new_root = r_bag.get_branch();
+ new (p_new_root) inode(e_ind, b_it);
size_type num_inserted = 0;
while (num_inserted++ < num_children)
{
- _GLIBCXX_DEBUG_ONLY((*child_b_it)->assert_valid(this);)
- p_new_root->add_child(*child_b_it, pref_begin(*child_b_it),
- pref_end(*child_b_it), this);
++child_b_it;
+ PB_DS_ASSERT_NODE_VALID((*child_b_it))
+ p_new_root->add_child(*child_b_it, pref_begin(*child_b_it),
+ pref_end(*child_b_it), this);
}
if (m_p_head->m_p_parent != 0)
- p_new_root->add_child(m_p_head->m_p_parent,
+ p_new_root->add_child(m_p_head->m_p_parent,
pref_begin(m_p_head->m_p_parent),
pref_end(m_p_head->m_p_parent), this);
m_p_head->m_p_parent = p_new_root;
p_new_root->m_p_parent = m_p_head;
- apply_update(m_p_head->m_p_parent, (node_update* )this);
- _GLIBCXX_DEBUG_ONLY(m_p_head->m_p_parent->assert_valid(this);)
+ apply_update(m_p_head->m_p_parent, (node_update*)this);
+ PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp
deleted file mode 100644
index 9cecae5177..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file split_join_branch_bag.hpp
- * Contains an implementation class for pat_trie_.
- */
-
-class split_join_branch_bag
-{
-private:
- typedef
- std::list<
- internal_node_pointer,
- typename Allocator::template rebind<
- internal_node_pointer>::other>
- bag_t;
-
-public:
-
- void
- add_branch()
- {
- internal_node_pointer p_nd = s_internal_node_allocator.allocate(1);
- __try
- {
- m_bag.push_back(p_nd);
- }
- __catch(...)
- {
- s_internal_node_allocator.deallocate(p_nd, 1);
- __throw_exception_again;
- }
- }
-
- internal_node_pointer
- get_branch()
- {
- _GLIBCXX_DEBUG_ASSERT(!m_bag.empty());
- internal_node_pointer p_nd =* m_bag.begin();
- m_bag.pop_front();
- return p_nd;
- }
-
- ~split_join_branch_bag()
- {
- while (!m_bag.empty())
- {
- internal_node_pointer p_nd =* m_bag.begin();
- s_internal_node_allocator.deallocate(p_nd, 1);
- m_bag.pop_front();
- }
- }
-
- inline bool
- empty() const
- { return m_bag.empty(); }
-
-private:
- bag_t m_bag;
-};
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
new file mode 100644
index 0000000000..7cce3c530f
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
@@ -0,0 +1,218 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file pat_trie_/synth_access_traits.hpp
+ * Contains an implementation class for a patricia tree.
+ */
+
+#ifndef PB_DS_SYNTH_E_ACCESS_TRAITS_HPP
+#define PB_DS_SYNTH_E_ACCESS_TRAITS_HPP
+
+#include <ext/pb_ds/detail/type_utils.hpp>
+
+namespace __gnu_pbds
+{
+ namespace detail
+ {
+
+#define PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC \
+ template<typename Type_Traits, bool Set, typename _ATraits>
+
+#define PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC \
+ synth_access_traits<Type_Traits, Set, _ATraits>
+
+ /// Synthetic element access traits.
+ template<typename Type_Traits, bool Set, typename _ATraits>
+ struct synth_access_traits : public _ATraits
+ {
+ typedef _ATraits base_type;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef Type_Traits type_traits;
+ typedef typename type_traits::const_reference const_reference;
+ typedef typename type_traits::key_const_reference key_const_reference;
+
+ synth_access_traits();
+
+ synth_access_traits(const base_type&);
+
+ inline bool
+ equal_prefixes(const_iterator, const_iterator, const_iterator,
+ const_iterator, bool compare_after = true) const;
+
+ bool
+ equal_keys(key_const_reference, key_const_reference) const;
+
+ bool
+ cmp_prefixes(const_iterator, const_iterator, const_iterator,
+ const_iterator, bool compare_after = false) const;
+
+ bool
+ cmp_keys(key_const_reference, key_const_reference) const;
+
+ inline static key_const_reference
+ extract_key(const_reference);
+
+#ifdef _GLIBCXX_DEBUG
+ bool
+ operator()(key_const_reference, key_const_reference);
+#endif
+
+ private:
+ inline static key_const_reference
+ extract_key(const_reference, true_type);
+
+ inline static key_const_reference
+ extract_key(const_reference, false_type);
+
+ static integral_constant<int, Set> s_set_ind;
+ };
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ integral_constant<int,Set>
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::s_set_ind;
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ synth_access_traits()
+ { }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ synth_access_traits(const _ATraits& r_traits)
+ : _ATraits(r_traits)
+ { }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ inline bool
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ equal_prefixes(const_iterator b_l, const_iterator e_l, const_iterator b_r,
+ const_iterator e_r, bool compare_after /*= false */) const
+ {
+ while (b_l != e_l)
+ {
+ if (b_r == e_r)
+ return false;
+ if (base_type::e_pos(*b_l) != base_type::e_pos(*b_r))
+ return false;
+ ++b_l;
+ ++b_r;
+ }
+ return (!compare_after || b_r == e_r);
+ }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ bool
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ equal_keys(key_const_reference r_lhs_key,
+ key_const_reference r_rhs_key) const
+ {
+ return equal_prefixes(base_type::begin(r_lhs_key),
+ base_type::end(r_lhs_key),
+ base_type::begin(r_rhs_key),
+ base_type::end(r_rhs_key),
+ true);
+ }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ bool
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ cmp_prefixes(const_iterator b_l, const_iterator e_l, const_iterator b_r,
+ const_iterator e_r, bool compare_after /* = false*/) const
+ {
+ while (b_l != e_l)
+ {
+ if (b_r == e_r)
+ return false;
+
+ const typename base_type::size_type l_pos = base_type::e_pos(*b_l);
+ const typename base_type::size_type r_pos = base_type::e_pos(*b_r);
+ if (l_pos != r_pos)
+ return l_pos < r_pos;
+ ++b_l;
+ ++b_r;
+ }
+
+ if (!compare_after)
+ return false;
+ return b_r != e_r;
+ }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ bool
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ cmp_keys(key_const_reference r_lhs_key,
+ key_const_reference r_rhs_key) const
+ {
+ return cmp_prefixes(base_type::begin(r_lhs_key),
+ base_type::end(r_lhs_key),
+ base_type::begin(r_rhs_key),
+ base_type::end(r_rhs_key),
+ true);
+ }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ extract_key(const_reference r_val)
+ { return extract_key(r_val, s_set_ind); }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ extract_key(const_reference r_val, true_type)
+ { return r_val; }
+
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ extract_key(const_reference r_val, false_type)
+ { return r_val.first; }
+
+#ifdef _GLIBCXX_DEBUG
+ PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+ bool
+ PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
+ operator()(key_const_reference r_lhs, key_const_reference r_rhs)
+ { return cmp_keys(r_lhs, r_rhs); }
+#endif
+
+#undef PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
+#undef PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC
+
+ } // namespace detail
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp
deleted file mode 100644
index abf5f11852..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file synth_e_access_traits.hpp
- * Contains an implementation class for a patricia tree.
- */
-
-#ifndef PB_DS_SYNTH_E_ACCESS_TRAITS_HPP
-#define PB_DS_SYNTH_E_ACCESS_TRAITS_HPP
-
-#include <ext/pb_ds/detail/type_utils.hpp>
-
-namespace __gnu_pbds
-{
- namespace detail
- {
-
-#define PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC \
- template<typename Type_Traits, bool Set, class E_Access_Traits>
-
-#define PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC \
- synth_e_access_traits< \
- Type_Traits, \
- Set, \
- E_Access_Traits>
-
- template<typename Type_Traits, bool Set, class E_Access_Traits>
- struct synth_e_access_traits : public E_Access_Traits
- {
-
- private:
- typedef E_Access_Traits base_type;
-
- typedef Type_Traits type_traits;
-
- typedef typename type_traits::const_key_reference const_key_reference;
-
- typedef typename type_traits::const_reference const_reference;
-
- public:
- synth_e_access_traits();
-
- synth_e_access_traits(const E_Access_Traits& r_traits);
-
- inline bool
- equal_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after = true) const;
-
- bool
- equal_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const;
-
- bool
- cmp_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after = false) const;
-
- bool
- cmp_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const;
-
- inline static const_key_reference
- extract_key(const_reference r_val);
-
-#ifdef _GLIBCXX_DEBUG
- bool
- operator()(const_key_reference r_lhs, const_key_reference r_rhs);
-#endif
-
- private:
- inline static const_key_reference
- extract_key(const_reference r_val, true_type);
-
- inline static const_key_reference
- extract_key(const_reference r_val, false_type);
-
- private:
- static integral_constant<int,Set> s_set_ind;
- };
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- integral_constant<int,Set>
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::s_set_ind;
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- synth_e_access_traits()
- { }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- synth_e_access_traits(const E_Access_Traits& r_traits) :
- E_Access_Traits(r_traits)
- { }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- inline bool
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- equal_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after /*= false */) const
- {
- while (b_l != e_l)
- {
- if (b_r == e_r)
- return (false);
- if (base_type::e_pos(*b_l) != base_type::e_pos(*b_r))
- return (false);
- ++b_l;
- ++b_r;
- }
- return (!compare_after || b_r == e_r);
- }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- bool
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- equal_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const
- {
- return (equal_prefixes(base_type::begin(r_lhs_key),
- base_type::end(r_lhs_key),
- base_type::begin(r_rhs_key),
- base_type::end(r_rhs_key),
- true));
- }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- bool
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- cmp_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after /* = false*/) const
- {
- while (b_l != e_l)
- {
- if (b_r == e_r)
- return (false);
- const typename base_type::size_type l_pos =
- base_type::e_pos(*b_l);
- const typename base_type::size_type r_pos =
- base_type::e_pos(*b_r);
- if (l_pos != r_pos)
- return (l_pos < r_pos);
- ++b_l;
- ++b_r;
- }
-
- if (!compare_after)
- return (false);
- return (b_r != e_r);
- }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- bool
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- cmp_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const
- {
- return (cmp_prefixes(base_type::begin(r_lhs_key),
- base_type::end(r_lhs_key),
- base_type::begin(r_rhs_key),
- base_type::end(r_rhs_key),
- true));
- }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::const_key_reference
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- extract_key(const_reference r_val)
- {
- return (extract_key(r_val, s_set_ind));
- }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::const_key_reference
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- extract_key(const_reference r_val, true_type)
- {
- return (r_val);
- }
-
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::const_key_reference
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- extract_key(const_reference r_val, false_type)
- {
- return (r_val.first);
- }
-
-#ifdef _GLIBCXX_DEBUG
- PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
- bool
- PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
- operator()(const_key_reference r_lhs, const_key_reference r_rhs)
- {
- return (cmp_keys(r_lhs, r_rhs));
- }
-#endif
-
-#undef PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
-#undef PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC
-
- } // namespace detail
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
index 39cf28a1b2..c8b54547fc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file pat_trie_/trace_fn_imps.hpp
* Contains an implementation class for pat_trie_.
*/
@@ -55,7 +55,7 @@ trace() const
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-trace_node(const_node_pointer p_nd, size_type level)
+trace_node(node_const_pointer p_nd, size_type level)
{
for (size_type i = 0; i < level; ++i)
std::cerr << ' ';
@@ -63,7 +63,7 @@ trace_node(const_node_pointer p_nd, size_type level)
std::cerr << ((p_nd->m_type == pat_trie_leaf_node_type) ? "l " : "i ");
trace_node_metadata(p_nd, type_to_type<typename node::metadata_type>());
- typename e_access_traits::const_iterator el_it = pref_begin(p_nd);
+ typename access_traits::const_iterator el_it = pref_begin(p_nd);
while (el_it != pref_end(p_nd))
{
std::cerr <<* el_it;
@@ -76,8 +76,7 @@ trace_node(const_node_pointer p_nd, size_type level)
return;
}
- const_internal_node_pointer p_internal =
- static_cast<const_internal_node_pointer>(p_nd);
+ inode_const_pointer p_internal = static_cast<inode_const_pointer>(p_nd);
std::cerr << " " <<
static_cast<unsigned long>(p_internal->get_e_ind()) << std::endl;
@@ -87,8 +86,7 @@ trace_node(const_node_pointer p_nd, size_type level)
for (size_type child_i = 0; child_i < num_children; ++child_i)
{
- typename internal_node::const_iterator child_it =
- p_internal->begin();
+ typename inode::const_iterator child_it = p_internal->begin();
std::advance(child_it, num_children - child_i - 1);
trace_node(*child_it, level + 1);
}
@@ -98,7 +96,7 @@ PB_DS_CLASS_T_DEC
template<typename Metadata_>
void
PB_DS_CLASS_C_DEC::
-trace_node_metadata(const_node_pointer p_nd, type_to_type<Metadata_>)
+trace_node_metadata(node_const_pointer p_nd, type_to_type<Metadata_>)
{
std::cerr << "(" << static_cast<unsigned long>(p_nd->get_metadata()) << ") ";
}
@@ -106,7 +104,7 @@ trace_node_metadata(const_node_pointer p_nd, type_to_type<Metadata_>)
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-trace_node_metadata(const_node_pointer, type_to_type<null_node_metadata>)
+trace_node_metadata(node_const_pointer, type_to_type<null_type>)
{ }
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp
index c8e7f587b5..6113393da0 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,317 +34,115 @@
// warranty.
/**
- * @file traits.hpp
+ * @file pat_trie_/traits.hpp
* Contains an implementation class for pat_trie_.
*/
#ifndef PB_DS_PAT_TRIE_NODE_AND_IT_TRAITS_HPP
#define PB_DS_PAT_TRIE_NODE_AND_IT_TRAITS_HPP
-#include <ext/pb_ds/detail/pat_trie_/node_base.hpp>
-#include <ext/pb_ds/detail/pat_trie_/head.hpp>
-#include <ext/pb_ds/detail/pat_trie_/leaf.hpp>
-#include <ext/pb_ds/detail/pat_trie_/internal_node.hpp>
-#include <ext/pb_ds/detail/pat_trie_/point_iterators.hpp>
-#include <ext/pb_ds/detail/pat_trie_/node_iterators.hpp>
-#include <ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp>
+#include <ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp>
+#include <ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp>
namespace __gnu_pbds
{
namespace detail
{
-
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
typename Mapped,
- class E_Access_Traits,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- class Allocator>
- struct trie_traits<
- Key,
- Mapped,
- E_Access_Traits,
- Node_Update,
- pat_trie_tag,
- Allocator>
+ typename _ATraits,
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct trie_traits<Key, Mapped, _ATraits, Node_Update, pat_trie_tag, _Alloc>
{
private:
- typedef types_traits< Key, Mapped, Allocator, false> type_traits;
+ typedef pat_trie_base base_type;
+ typedef types_traits<Key, Mapped, _Alloc, false> type_traits;
public:
- typedef
- typename trie_node_metadata_selector<
- Key,
- Mapped,
- E_Access_Traits,
- Node_Update,
- Allocator>::type
- metadata_type;
-
- typedef E_Access_Traits e_access_traits;
-
- typedef
- __gnu_pbds::detail::synth_e_access_traits<
- type_traits,
- false,
- e_access_traits>
- synth_e_access_traits;
-
- typedef
- pat_trie_node_base<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- node;
-
- typedef
- pat_trie_leaf<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- leaf;
+ typedef typename trie_node_metadata_dispatch<Key, Mapped, _ATraits, Node_Update, _Alloc>::type metadata_type;
+ typedef base_type::_Metadata<metadata_type, _Alloc> metadata;
+ typedef _ATraits access_traits;
- typedef
- pat_trie_head<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- head;
+ /// Type for synthesized traits.
+ typedef __gnu_pbds::detail::synth_access_traits<type_traits, false, access_traits> synth_access_traits;
- typedef
- pat_trie_internal_node<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- internal_node;
+ typedef base_type::_Node_base<synth_access_traits, metadata> node;
+ typedef base_type::_Head<synth_access_traits, metadata> head;
+ typedef base_type::_Leaf<synth_access_traits, metadata> leaf;
+ typedef base_type::_Inode<synth_access_traits, metadata> inode;
- typedef
- pat_trie_const_it_<
- type_traits,
- node,
- leaf,
- head,
- internal_node,
- true,
- Allocator>
- const_iterator;
+ typedef base_type::_Iter<node, leaf, head, inode, true> iterator;
+ typedef base_type::_CIter<node, leaf, head, inode, true> const_iterator;
+ typedef base_type::_Iter<node, leaf, head, inode, false> reverse_iterator;
+ typedef base_type::_CIter<node, leaf, head, inode, false> const_reverse_iterator;
- typedef
- pat_trie_it_<
- type_traits,
- node,
- leaf,
- head,
- internal_node,
- true,
- Allocator>
- iterator;
+ /// This is an iterator to an iterator: it iterates over nodes,
+ /// and de-referencing it returns one of the tree's iterators.
+ typedef base_type::_Node_citer<node, leaf, head, inode, const_iterator, iterator, _Alloc> node_const_iterator;
- typedef
- pat_trie_const_it_<
- type_traits,
- node,
- leaf,
- head,
- internal_node,
- false,
- Allocator>
- const_reverse_iterator;
+ typedef base_type::_Node_iter<node, leaf, head, inode, const_iterator, iterator, _Alloc> node_iterator;
- typedef
- pat_trie_it_<
- type_traits,
- node,
- leaf,
- head,
- internal_node,
- false,
- Allocator>
- reverse_iterator;
+ /// Type for node update.
+ typedef Node_Update<node_const_iterator, node_iterator, _ATraits, _Alloc> node_update;
- typedef
- pat_trie_const_node_it_<
- node,
- leaf,
- head,
- internal_node,
- const_iterator,
- iterator,
- synth_e_access_traits,
- Allocator>
- const_node_iterator;
-
- typedef
- pat_trie_node_it_<
- node,
- leaf,
- head,
- internal_node,
- const_iterator,
- iterator,
- synth_e_access_traits,
- Allocator>
- node_iterator;
-
- typedef
- Node_Update<
- const_node_iterator,
- node_iterator,
- E_Access_Traits,
- Allocator>
- node_update;
-
- typedef
- __gnu_pbds::null_trie_node_update<
- const_node_iterator,
- node_iterator,
- E_Access_Traits,
- Allocator>*
- null_node_update_pointer;
+ typedef null_node_update<node_const_iterator, node_iterator, _ATraits, _Alloc>* null_node_update_pointer;
};
+
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
- class E_Access_Traits,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- class Allocator>
- struct trie_traits<
- Key,
- null_mapped_type,
- E_Access_Traits,
- Node_Update,
- pat_trie_tag,
- Allocator>
+ typename _ATraits,
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct trie_traits<Key, null_type, _ATraits, Node_Update, pat_trie_tag, _Alloc>
{
private:
- typedef
- types_traits<
- Key,
- null_mapped_type,
- Allocator,
- false>
- type_traits;
+ typedef pat_trie_base base_type;
+ typedef types_traits<Key, null_type, _Alloc, false> type_traits;
public:
- typedef
- typename trie_node_metadata_selector<
- Key,
- null_mapped_type,
- E_Access_Traits,
- Node_Update,
- Allocator>::type
- metadata_type;
+ typedef typename trie_node_metadata_dispatch<Key, null_type, _ATraits, Node_Update, _Alloc>::type metadata_type;
+ typedef base_type::_Metadata<metadata_type, _Alloc> metadata;
+ typedef _ATraits access_traits;
- typedef E_Access_Traits e_access_traits;
+ /// Type for synthesized traits.
+ typedef __gnu_pbds::detail::synth_access_traits<type_traits, true, access_traits> synth_access_traits;
- typedef
- __gnu_pbds::detail::synth_e_access_traits<
- type_traits,
- true,
- e_access_traits>
- synth_e_access_traits;
+ typedef base_type::_Node_base<synth_access_traits, metadata> node;
+ typedef base_type::_Head<synth_access_traits, metadata> head;
+ typedef base_type::_Leaf<synth_access_traits, metadata> leaf;
+ typedef base_type::_Inode<synth_access_traits, metadata> inode;
- typedef
- pat_trie_node_base<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- node;
+ typedef base_type::_CIter<node, leaf, head, inode, true> const_iterator;
+ typedef const_iterator iterator;
+ typedef base_type::_CIter<node, leaf, head, inode, false> const_reverse_iterator;
+ typedef const_reverse_iterator reverse_iterator;
- typedef
- pat_trie_leaf<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- leaf;
+ /// This is an iterator to an iterator: it iterates over nodes,
+ /// and de-referencing it returns one of the tree's iterators.
+ typedef base_type::_Node_citer<node, leaf, head, inode, const_iterator, iterator, _Alloc> node_const_iterator;
- typedef
- pat_trie_head<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- head;
+ typedef node_const_iterator node_iterator;
- typedef
- pat_trie_internal_node<
- type_traits,
- synth_e_access_traits,
- metadata_type,
- Allocator>
- internal_node;
+ /// Type for node update.
+ typedef Node_Update<node_const_iterator, node_iterator, _ATraits, _Alloc> node_update;
- typedef
- pat_trie_const_it_<
- type_traits,
- node,
- leaf,
- head,
- internal_node,
- true,
- Allocator>
- const_iterator;
-
- typedef const_iterator iterator;
-
- typedef
- pat_trie_const_it_<
- type_traits,
- node,
- leaf,
- head,
- internal_node,
- false,
- Allocator>
- const_reverse_iterator;
-
- typedef const_reverse_iterator reverse_iterator;
-
- typedef
- pat_trie_const_node_it_<
- node,
- leaf,
- head,
- internal_node,
- const_iterator,
- iterator,
- synth_e_access_traits,
- Allocator>
- const_node_iterator;
-
- typedef const_node_iterator node_iterator;
-
- typedef
- Node_Update<
- const_node_iterator,
- node_iterator,
- E_Access_Traits,
- Allocator>
- node_update;
-
- typedef
- __gnu_pbds::null_trie_node_update<
- const_node_iterator,
- const_node_iterator,
- E_Access_Traits,
- Allocator>*
- null_node_update_pointer;
+ typedef null_node_update<node_const_iterator, node_const_iterator, _ATraits, _Alloc>* null_node_update_pointer;
};
} // namespace detail
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_PAT_TRIE_NODE_AND_IT_TRAITS_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
index 8c0304f695..12ef07bd60 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
@@ -34,22 +34,22 @@
// warranty.
/**
- * @file update_fn_imps.hpp
+ * @file pat_trie_/update_fn_imps.hpp
* Contains an implementation class for pat_trie_.
*/
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-apply_update(node_pointer /*p_nd*/, null_node_update_pointer)
+apply_update(node_pointer, null_node_update_pointer)
{ }
PB_DS_CLASS_T_DEC
template<typename Node_Update_>
inline void
PB_DS_CLASS_C_DEC::
-apply_update(node_pointer p_nd, Node_Update_* /*p_update*/)
+apply_update(node_pointer p_nd, Node_Update_*)
{
Node_Update_::operator()(node_iterator(p_nd, this),
- const_node_iterator(0, this));
+ node_const_iterator(0, this));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp b/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
index ad05c4f571..fadb7c1a1d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,58 +34,81 @@
// warranty.
/**
- * @file priority_queue_base_dispatch.hpp
+ * @file detail/priority_queue_base_dispatch.hpp
* Contains an pqiative container dispatching base.
*/
#ifndef PB_DS_PRIORITY_QUEUE_BASE_DS_DISPATCHER_HPP
#define PB_DS_PRIORITY_QUEUE_BASE_DS_DISPATCHER_HPP
+#define PB_DS_ASSERT_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);)
+
+#define PB_DS_DEBUG_VERIFY(_Cond) \
+ _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \
+ _M_message(#_Cond" assertion from %1;:%2;") \
+ ._M_string(__FILE__)._M_integer(__LINE__) \
+ ,__file,__line)
+
#include <ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp>
#include <ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp>
#include <ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp>
#include <ext/pb_ds/detail/binary_heap_/binary_heap_.hpp>
#include <ext/pb_ds/detail/thin_heap_/thin_heap_.hpp>
+#undef PB_DS_DEBUG_VERIFY
+#undef PB_DS_ASSERT_VALID
+
namespace __gnu_pbds
{
- namespace detail
- {
-
- template<typename Value_Type, typename Cmp_Fn, typename Tag, typename Allocator>
- struct priority_queue_base_dispatch;
-
- template<typename Value_Type, typename Cmp_Fn, typename Allocator>
- struct priority_queue_base_dispatch<Value_Type, Cmp_Fn, pairing_heap_tag, Allocator>
+ namespace detail
+ {
+ /// Specialization for pairing_heap.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, pairing_heap_tag,
+ null_type>
{
- typedef pairing_heap_< Value_Type, Cmp_Fn, Allocator> type;
+ /// Dispatched type.
+ typedef pairing_heap<_VTp, Cmp_Fn, _Alloc> type;
};
- template<typename Value_Type, typename Cmp_Fn, typename Allocator>
- struct priority_queue_base_dispatch<Value_Type, Cmp_Fn, binomial_heap_tag, Allocator>
+ /// Specialization for binomial_heap.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, binomial_heap_tag,
+ null_type>
{
- typedef binomial_heap_< Value_Type, Cmp_Fn, Allocator> type;
+ /// Dispatched type.
+ typedef binomial_heap<_VTp, Cmp_Fn, _Alloc> type;
};
- template<typename Value_Type, typename Cmp_Fn, typename Allocator>
- struct priority_queue_base_dispatch<Value_Type, Cmp_Fn, rc_binomial_heap_tag, Allocator>
+ /// Specialization for rc_binary_heap.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, rc_binomial_heap_tag,
+ null_type>
{
- typedef rc_binomial_heap_< Value_Type, Cmp_Fn, Allocator> type;
+ /// Dispatched type.
+ typedef rc_binomial_heap<_VTp, Cmp_Fn, _Alloc> type;
};
- template<typename Value_Type, typename Cmp_Fn, typename Allocator>
- struct priority_queue_base_dispatch<Value_Type, Cmp_Fn, binary_heap_tag, Allocator>
+ /// Specialization for binary_heap.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, binary_heap_tag,
+ null_type>
{
- typedef binary_heap_< Value_Type, Cmp_Fn, Allocator> type;
+ /// Dispatched type.
+ typedef binary_heap<_VTp, Cmp_Fn, _Alloc> type;
};
- template<typename Value_Type, typename Cmp_Fn, typename Allocator>
- struct priority_queue_base_dispatch<Value_Type, Cmp_Fn, thin_heap_tag, Allocator>
+ /// Specialization for thin_heap.
+ template<typename _VTp, typename Cmp_Fn, typename _Alloc>
+ struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, thin_heap_tag,
+ null_type>
{
- typedef thin_heap_< Value_Type, Cmp_Fn, Allocator> type;
+ /// Dispatched type.
+ typedef thin_heap<_VTp, Cmp_Fn, _Alloc> type;
};
-
- } // namespace detail
+ //@} group pbds
+ } // namespace detail
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_PRIORITY_QUEUE_BASE_DS_DISPATCHER_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
index 1abfe21dea..669c00c29b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file rb_tree_map_/constructors_destructor_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
@@ -50,37 +50,37 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME()
+PB_DS_RB_TREE_NAME()
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) :
+PB_DS_RB_TREE_NAME(const Cmp_Fn& r_cmp_fn) :
base_type(r_cmp_fn)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
+PB_DS_RB_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
base_type(r_cmp_fn, r_node_update)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
+PB_DS_RB_TREE_NAME(const PB_DS_CLASS_C_DEC& other) :
base_type(other)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -88,9 +88,9 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
base_type::swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
index ca13ef873a..40961edf81 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file rb_tree_map_/debug_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
@@ -43,34 +43,37 @@
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-assert_node_consistent(const node_pointer p_nd) const
+assert_node_consistent(const node_pointer p_nd, const char* __file,
+ int __line) const
{
if (p_nd == 0)
return 1;
- const size_type l_height = assert_node_consistent(p_nd->m_p_left);
- const size_type r_height = assert_node_consistent(p_nd->m_p_right);
+ const size_type l_height =
+ assert_node_consistent(p_nd->m_p_left, __file, __line);
+ const size_type r_height =
+ assert_node_consistent(p_nd->m_p_right, __file, __line);
if (p_nd->m_red)
{
- _GLIBCXX_DEBUG_ASSERT(is_effectively_black(p_nd->m_p_left));
- _GLIBCXX_DEBUG_ASSERT(is_effectively_black(p_nd->m_p_right));
+ PB_DS_DEBUG_VERIFY(is_effectively_black(p_nd->m_p_left));
+ PB_DS_DEBUG_VERIFY(is_effectively_black(p_nd->m_p_right));
}
- _GLIBCXX_DEBUG_ASSERT(l_height == r_height);
+ PB_DS_DEBUG_VERIFY(l_height == r_height);
return (p_nd->m_red ? 0 : 1) + l_height;
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- base_type::assert_valid();
+ base_type::assert_valid(__file, __line);
const node_pointer p_head = base_type::m_p_head;
- _GLIBCXX_DEBUG_ASSERT(p_head->m_red);
+ PB_DS_DEBUG_VERIFY(p_head->m_red);
if (p_head->m_p_parent != 0)
{
- _GLIBCXX_DEBUG_ASSERT(!p_head->m_p_parent->m_red);
- assert_node_consistent(p_head->m_p_parent);
+ PB_DS_DEBUG_VERIFY(!p_head->m_p_parent->m_red);
+ assert_node_consistent(p_head->m_p_parent, __file, __line);
}
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
index e097bc4f96..14e7532897 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,16 +34,16 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file rb_tree_map_/erase_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{
- point_iterator it = find(r_key);
+ point_iterator it = this->find(r_key);
if (it == base_type::end())
return false;
erase(it);
@@ -55,14 +55,14 @@ inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
erase(iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it == base_type::end())
return it;
iterator ret_it = it;
++ret_it;
erase_node(it.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
@@ -71,14 +71,14 @@ inline typename PB_DS_CLASS_C_DEC::reverse_iterator
PB_DS_CLASS_C_DEC::
erase(reverse_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it.m_p_nd == base_type::m_p_head)
return it;
reverse_iterator ret_it = it;
++ret_it;
erase_node(it.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
@@ -88,7 +88,7 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
size_type num_ersd = 0;
iterator it = base_type::begin();
while (it != base_type::end())
@@ -102,7 +102,7 @@ erase_if(Pred pred)
++it;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return num_ersd;
}
@@ -113,7 +113,7 @@ erase_node(node_pointer p_nd)
{
remove_node(p_nd);
base_type::actual_erase_node(p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -121,7 +121,7 @@ void
PB_DS_CLASS_C_DEC::
remove_node(node_pointer p_z)
{
- update_min_max_for_erased_node(p_z);
+ this->update_min_max_for_erased_node(p_z);
node_pointer p_y = p_z;
node_pointer p_x = 0;
node_pointer p_new_x_parent = 0;
@@ -185,7 +185,7 @@ remove_node(node_pointer p_z)
p_y = p_z;
}
- update_to_top(p_new_x_parent, (node_update* )this);
+ this->update_to_top(p_new_x_parent, (node_update* )this);
if (p_y->m_red)
return;
@@ -238,7 +238,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
p_w->m_p_right->m_red = false;
base_type::rotate_left(p_new_x_parent);
- update_to_top(p_new_x_parent, (node_update* )this);
+ this->update_to_top(p_new_x_parent, (node_update* )this);
break;
}
}
@@ -279,7 +279,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
p_w->m_p_left->m_red = false;
base_type::rotate_right(p_new_x_parent);
- update_to_top(p_new_x_parent, (node_update* )this);
+ this->update_to_top(p_new_x_parent, (node_update* )this);
break;
}
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
index 9378e15650..9203dd4d7a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
@@ -34,6 +34,6 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file rb_tree_map_/find_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
index 0bf69736e8..0903e21142 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file rb_tree_map_/info_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
index 632deab703..97dc8489ab 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file rb_tree_map_/insert_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
@@ -43,16 +43,16 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert(const_reference r_value)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
std::pair<point_iterator, bool> ins_pair = base_type::insert_leaf(r_value);
if (ins_pair.second == true)
{
ins_pair.first.m_p_nd->m_red = true;
- _GLIBCXX_DEBUG_ONLY(this->structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
insert_fixup(ins_pair.first.m_p_nd);
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return ins_pair;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp
index 3f24c762c0..b6f80b2b13 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,53 +34,54 @@
// warranty.
/**
- * @file node.hpp
+ * @file rb_tree_map_/node.hpp
* Contains an implementation for rb_tree_.
*/
#ifndef PB_DS_RB_TREE_NODE_HPP
#define PB_DS_RB_TREE_NODE_HPP
-#include <ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp>
+#include <ext/pb_ds/detail/branch_policy/null_node_metadata.hpp>
namespace __gnu_pbds
{
namespace detail
{
- template<typename Value_Type, class Metadata, class Allocator>
+ /// Node for Red-Black trees.
+ template<typename Value_Type, class Metadata, typename _Alloc>
struct rb_tree_node_
{
public:
- typedef Value_Type value_type;
- typedef Metadata metadata_type;
+ typedef Value_Type value_type;
+ typedef Metadata metadata_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
rb_tree_node_<
Value_Type,
Metadata,
- Allocator> >::other::pointer
+ _Alloc> >::other::pointer
node_pointer;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
metadata_type>::other::reference
metadata_reference;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
metadata_type>::other::const_reference
- const_metadata_reference;
+ metadata_const_reference;
- inline bool
+ bool
special() const
{ return m_red; }
- inline const_metadata_reference
+ metadata_const_reference
get_metadata() const
{ return m_metadata; }
- inline metadata_reference
+ metadata_reference
get_metadata()
{ return m_metadata; }
@@ -93,30 +94,30 @@ namespace __gnu_pbds
}
#endif
- node_pointer m_p_left;
- node_pointer m_p_right;
- node_pointer m_p_parent;
- value_type m_value;
- bool m_red;
- metadata_type m_metadata;
+ node_pointer m_p_left;
+ node_pointer m_p_right;
+ node_pointer m_p_parent;
+ value_type m_value;
+ bool m_red;
+ metadata_type m_metadata;
};
- template<typename Value_Type, class Allocator>
- struct rb_tree_node_<Value_Type, null_node_metadata, Allocator>
+ template<typename Value_Type, typename _Alloc>
+ struct rb_tree_node_<Value_Type, null_type, _Alloc>
{
public:
- typedef Value_Type value_type;
- typedef null_node_metadata metadata_type;
+ typedef Value_Type value_type;
+ typedef null_type metadata_type;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
rb_tree_node_<
Value_Type,
- null_node_metadata,
- Allocator> >::other::pointer
+ null_type,
+ _Alloc> >::other::pointer
node_pointer;
- inline bool
+ bool
special() const
{ return m_red; }
@@ -126,11 +127,11 @@ namespace __gnu_pbds
{ std::cout << PB_DS_V2F(m_value) <<(m_red? " <r> " : " <b> "); }
#endif
- node_pointer m_p_left;
- node_pointer m_p_right;
- node_pointer m_p_parent;
- value_type m_value;
- bool m_red;
+ node_pointer m_p_left;
+ node_pointer m_p_right;
+ node_pointer m_p_parent;
+ value_type m_value;
+ bool m_red;
};
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
index 1d84a8e0d6..ff120331dd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,30 +34,11 @@
// warranty.
/**
- * @file rb_tree_.hpp
- * Contains an implementation for rb_tree_.
+ * @file rb_tree_map_/rb_tree_.hpp
+ * Contains an implementation for Red Black trees.
*/
-/*
- * This implementation uses an idea from the SGI STL (using a @a header node
- * which is needed for efficient iteration).
- */
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR
-#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR
-#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
-#endif
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR
-#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR
-#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
-#endif
-#endif
#include <ext/pb_ds/detail/standard_policies.hpp>
-#include <ext/pb_ds/detail/basic_types.hpp>
#include <utility>
#include <vector>
#include <assert.h>
@@ -69,89 +50,79 @@ namespace __gnu_pbds
{
#define PB_DS_CLASS_T_DEC \
template<typename Key, typename Mapped, typename Cmp_Fn, \
- typename Node_And_It_Traits, typename Allocator>
+ typename Node_And_It_Traits, typename _Alloc>
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME rb_tree_data_
-#endif
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_BASE_CLASS_NAME bin_search_tree_data_
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME rb_tree_no_data_
-#endif
+# define PB_DS_RB_TREE_NAME rb_tree_map
+# define PB_DS_RB_TREE_BASE_NAME bin_search_tree_map
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_BASE_CLASS_NAME bin_search_tree_no_data_
-#endif
+# define PB_DS_RB_TREE_NAME rb_tree_set
+# define PB_DS_RB_TREE_BASE_NAME bin_search_tree_set
+#endif
#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator>
+ PB_DS_RB_TREE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc>
-#define PB_DS_BASE_C_DEC \
- PB_DS_BASE_CLASS_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator>
+#define PB_DS_RB_TREE_BASE \
+ PB_DS_RB_TREE_BASE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc>
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#define PB_DS_EP2VP(X)& ((X)->m_value)
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#define PB_DS_EP2VP(X)& ((X)->m_value.first)
-#endif
+ /**
+ * @brief Red-Black tree.
+ * @ingroup branch-detail
+ *
+ * This implementation uses an idea from the SGI STL (using a
+ * @a header node which is needed for efficient iteration).
+ */
template<typename Key,
typename Mapped,
typename Cmp_Fn,
typename Node_And_It_Traits,
- typename Allocator>
- class PB_DS_CLASS_NAME : public PB_DS_BASE_C_DEC
+ typename _Alloc>
+ class PB_DS_RB_TREE_NAME : public PB_DS_RB_TREE_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
- typedef typename base_type::node_pointer node_pointer;
+ typedef PB_DS_RB_TREE_BASE base_type;
+ typedef typename base_type::node_pointer node_pointer;
public:
- typedef Cmp_Fn cmp_fn;
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
- typedef typename base_type::key_type key_type;
- typedef typename base_type::key_pointer key_pointer;
- typedef typename base_type::const_key_pointer const_key_pointer;
- typedef typename base_type::key_reference key_reference;
- typedef typename base_type::const_key_reference const_key_reference;
- typedef typename base_type::mapped_type mapped_type;
- typedef typename base_type::mapped_pointer mapped_pointer;
- typedef typename base_type::const_mapped_pointer const_mapped_pointer;
- typedef typename base_type::mapped_reference mapped_reference;
- typedef typename base_type::const_mapped_reference const_mapped_reference;
- typedef typename base_type::value_type value_type;
- typedef typename base_type::pointer pointer;
- typedef typename base_type::const_pointer const_pointer;
- typedef typename base_type::reference reference;
- typedef typename base_type::const_reference const_reference;
- typedef typename base_type::point_iterator point_iterator;
- typedef typename base_type::const_iterator const_point_iterator;
- typedef typename base_type::iterator iterator;
- typedef typename base_type::const_iterator const_iterator;
- typedef typename base_type::reverse_iterator reverse_iterator;
+ typedef rb_tree_tag container_category;
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef typename base_type::key_type key_type;
+ typedef typename base_type::key_pointer key_pointer;
+ typedef typename base_type::key_const_pointer key_const_pointer;
+ typedef typename base_type::key_reference key_reference;
+ typedef typename base_type::key_const_reference key_const_reference;
+ typedef typename base_type::mapped_type mapped_type;
+ typedef typename base_type::mapped_pointer mapped_pointer;
+ typedef typename base_type::mapped_const_pointer mapped_const_pointer;
+ typedef typename base_type::mapped_reference mapped_reference;
+ typedef typename base_type::mapped_const_reference mapped_const_reference;
+ typedef typename base_type::value_type value_type;
+ typedef typename base_type::pointer pointer;
+ typedef typename base_type::const_pointer const_pointer;
+ typedef typename base_type::reference reference;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::const_iterator point_const_iterator;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::reverse_iterator reverse_iterator;
typedef typename base_type::const_reverse_iterator const_reverse_iterator;
- typedef typename base_type::node_update node_update;
-
+ typedef typename base_type::node_update node_update;
- PB_DS_CLASS_NAME();
+ PB_DS_RB_TREE_NAME();
- PB_DS_CLASS_NAME(const Cmp_Fn&);
+ PB_DS_RB_TREE_NAME(const Cmp_Fn&);
- PB_DS_CLASS_NAME(const Cmp_Fn&, const node_update&);
+ PB_DS_RB_TREE_NAME(const Cmp_Fn&, const node_update&);
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
+ PB_DS_RB_TREE_NAME(const PB_DS_CLASS_C_DEC&);
void
swap(PB_DS_CLASS_C_DEC&);
@@ -164,29 +135,29 @@ namespace __gnu_pbds
insert(const_reference);
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
std::pair<point_iterator, bool> ins_pair =
base_type::insert_leaf(value_type(r_key, mapped_type()));
if (ins_pair.second == true)
{
ins_pair.first.m_p_nd->m_red = true;
- _GLIBCXX_DEBUG_ONLY(this->structure_only_assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(this->structure_only_assert_valid(__FILE__, __LINE__);)
insert_fixup(ins_pair.first.m_p_nd);
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return ins_pair.first.m_p_nd->m_value.second;
-#else
+#else
insert(r_key);
- return base_type::s_null_mapped;
-#endif
+ return base_type::s_null_type;
+#endif
}
inline bool
- erase(const_key_reference);
+ erase(key_const_reference);
inline iterator
erase(iterator);
@@ -202,19 +173,17 @@ namespace __gnu_pbds
join(PB_DS_CLASS_C_DEC&);
void
- split(const_key_reference, PB_DS_CLASS_C_DEC&);
-
- protected:
+ split(key_const_reference, PB_DS_CLASS_C_DEC&);
private:
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
size_type
- assert_node_consistent(const node_pointer) const;
-#endif
+ assert_node_consistent(const node_pointer, const char*, int) const;
+#endif
inline static bool
is_effectively_black(const node_pointer);
@@ -259,6 +228,9 @@ namespace __gnu_pbds
split_at_node(node_pointer, PB_DS_CLASS_C_DEC&);
};
+#define PB_DS_STRUCT_ONLY_ASSERT_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X.structure_only_assert_valid(__FILE__, __LINE__);)
+
#include <ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp>
#include <ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp>
@@ -266,15 +238,11 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp>
#include <ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp>
+#undef PB_DS_STRUCT_ONLY_ASSERT_VALID
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_CLASS_NAME
-#undef PB_DS_BASE_CLASS_NAME
-#undef PB_DS_BASE_C_DEC
-#undef PB_DS_V2F
-#undef PB_DS_EP2VP
-#undef PB_DS_V2S
-
+#undef PB_DS_RB_TREE_NAME
+#undef PB_DS_RB_TREE_BASE_NAME
+#undef PB_DS_RB_TREE_BASE
} // namespace detail
} // namespace __gnu_pbds
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
index e3cd399e87..54c7b2396d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file rb_tree_map_/split_join_fn_imps.hpp
* Contains an implementation for rb_tree_.
*/
@@ -43,23 +43,20 @@ inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.base_type::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (base_type::join_prep(other) == false)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
const node_pointer p_x = other.split_min();
join_imp(p_x, other.m_p_head->m_p_parent);
base_type::join_finish(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(base_type::assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.base_type::assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -122,10 +119,10 @@ join_imp(node_pointer p_x, node_pointer p_r)
p_x->m_red = true;
base_type::initialize_min_max();
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
base_type::update_to_top(p_x, (node_update* )this);
insert_fixup(p_x);
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid());
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -235,39 +232,35 @@ black_height(node_pointer p_nd)
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
+split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(base_type::assert_valid();)
-
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.base_type::assert_valid();)
-
- if (base_type::split_prep(r_key, other) == false)
- {
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
- return;
- }
-
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.base_type::structure_only_assert_valid();)
- node_pointer p_nd = upper_bound(r_key).m_p_nd;
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+
+ if (base_type::split_prep(r_key, other) == false)
+ {
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return;
+ }
+
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
+ node_pointer p_nd = this->upper_bound(r_key).m_p_nd;
do
{
node_pointer p_next_nd = p_nd->m_p_parent;
if (Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value)))
split_at_node(p_nd, other);
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.base_type::structure_only_assert_valid();)
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
p_nd = p_next_nd;
}
while (p_nd != base_type::m_p_head);
base_type::split_finish(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -299,7 +292,7 @@ split_at_node(node_pointer p_nd, PB_DS_CLASS_C_DEC& other)
if (p_l != 0)
p_l->m_p_parent = p_parent;
- update_to_top(p_parent, (node_update* )this);
+ this->update_to_top(p_parent, (node_update* )this);
if (!p_nd->m_red)
remove_fixup(p_l, p_parent);
@@ -307,7 +300,7 @@ split_at_node(node_pointer p_nd, PB_DS_CLASS_C_DEC& other)
base_type::initialize_min_max();
other.join_imp(p_nd, p_r);
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.base_type::structure_only_assert_valid());
+ PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
+ PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp
index 531d8e46e1..33ec735c5c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file traits.hpp
+ * @file rb_tree_map_/traits.hpp
* Contains an implementation for rb_tree_.
*/
@@ -47,75 +47,53 @@ namespace __gnu_pbds
{
namespace detail
{
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
typename Mapped,
typename Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- typename Allocator>
- struct tree_traits<
- Key,
- Mapped,
- Cmp_Fn,
- Node_Update,
- rb_tree_tag,
- Allocator> : public bin_search_tree_traits<
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct tree_traits<Key, Mapped, Cmp_Fn, Node_Update, rb_tree_tag,_Alloc>
+ : public bin_search_tree_traits<
Key,
Mapped,
Cmp_Fn,
Node_Update,
rb_tree_node_<
- typename types_traits<
- Key,
- Mapped,
- Allocator,
- false>::value_type,
- typename tree_node_metadata_selector<
- Key,
- Mapped,
- Cmp_Fn,
- Node_Update,
- Allocator>::type,
- Allocator>,
- Allocator>
+ typename types_traits<Key, Mapped, _Alloc, false>::value_type,
+ typename tree_node_metadata_dispatch<Key, Mapped, Cmp_Fn, Node_Update,
+ _Alloc>::type,
+ _Alloc>,
+ _Alloc>
{ };
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
- class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- class Allocator>
- struct tree_traits<
- Key,
- null_mapped_type,
- Cmp_Fn,
- Node_Update,
- rb_tree_tag,
- Allocator> : public bin_search_tree_traits<
+ typename Cmp_Fn,
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct tree_traits<Key, null_type, Cmp_Fn, Node_Update, rb_tree_tag,_Alloc>
+ : public bin_search_tree_traits<
Key,
- null_mapped_type,
+ null_type,
Cmp_Fn,
Node_Update,
rb_tree_node_<
- typename types_traits<
- Key,
- null_mapped_type,
- Allocator,
- false>::value_type,
- typename tree_node_metadata_selector<
- Key,
- null_mapped_type,
- Cmp_Fn,
- Node_Update,
- Allocator>::type,
- Allocator>,
- Allocator>
+ typename types_traits<Key, null_type, _Alloc, false>::value_type,
+ typename tree_node_metadata_dispatch<Key, null_type, Cmp_Fn, Node_Update,
+ _Alloc>::type,
+ _Alloc>,
+ _Alloc>
{ };
} // namespace detail
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
index bf4dcfefdd..5c9c05f2f1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,40 +34,38 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file rc_binomial_heap_/constructors_destructor_fn_imps.hpp
* Contains an implementation for rc_binomial_heap_.
*/
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-rc_binomial_heap_()
+rc_binomial_heap()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-rc_binomial_heap_(const Cmp_Fn& r_cmp_fn) :
- PB_DS_BASE_C_DEC(r_cmp_fn)
+rc_binomial_heap(const Cmp_Fn& r_cmp_fn)
+: base_type(r_cmp_fn)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-rc_binomial_heap_(const PB_DS_CLASS_C_DEC& other) :
- PB_DS_BASE_C_DEC(other)
+rc_binomial_heap(const PB_DS_CLASS_C_DEC& other)
+: base_type(other)
{
make_binomial_heap();
-
base_type::find_max();
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~rc_binomial_heap_()
+~rc_binomial_heap()
{ }
PB_DS_CLASS_T_DEC
@@ -75,14 +73,12 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- base_type::swap(other);
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ base_type::swap(other);
m_rc.swap(other.m_rc);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
-
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
index 1f6246f968..b7a1b58fe8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file rc_binomial_heap_/debug_fn_imps.hpp
* Contains an implementation for rc_binomial_heap_.
*/
@@ -43,47 +43,47 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- base_type::assert_valid(false);
+ base_type::assert_valid(false, __file, __line);
if (!base_type::empty())
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_max != 0);
- base_type::assert_max();
+ PB_DS_DEBUG_VERIFY(base_type::m_p_max != 0);
+ base_type::assert_max(__file, __line);
}
- m_rc.assert_valid();
+ m_rc.assert_valid(__file, __line);
if (m_rc.empty())
{
- base_type::assert_valid(true);
- _GLIBCXX_DEBUG_ASSERT(next_2_pointer(base_type::m_p_root) == 0);
+ base_type::assert_valid(true, __file, __line);
+ PB_DS_DEBUG_VERIFY(next_2_pointer(base_type::m_p_root) == 0);
return;
}
- const_node_pointer p_nd = next_2_pointer(base_type::m_p_root);
+ node_const_pointer p_nd = next_2_pointer(base_type::m_p_root);
typename rc_t::const_iterator it = m_rc.end();
--it;
while (p_nd != 0)
{
- _GLIBCXX_DEBUG_ASSERT(*it == p_nd);
- const_node_pointer p_next = p_nd->m_p_next_sibling;
- _GLIBCXX_DEBUG_ASSERT(p_next != 0);
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == p_next->m_metadata);
- _GLIBCXX_DEBUG_ASSERT(p_next->m_p_next_sibling == 0 ||
+ PB_DS_DEBUG_VERIFY(*it == p_nd);
+ node_const_pointer p_next = p_nd->m_p_next_sibling;
+ PB_DS_DEBUG_VERIFY(p_next != 0);
+ PB_DS_DEBUG_VERIFY(p_nd->m_metadata == p_next->m_metadata);
+ PB_DS_DEBUG_VERIFY(p_next->m_p_next_sibling == 0 ||
p_next->m_metadata < p_next->m_p_next_sibling->m_metadata);
--it;
p_nd = next_2_pointer(next_after_0_pointer(p_nd));
}
- _GLIBCXX_DEBUG_ASSERT(it + 1 == m_rc.begin());
+ PB_DS_DEBUG_VERIFY(it + 1 == m_rc.begin());
}
PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::const_node_pointer
+typename PB_DS_CLASS_C_DEC::node_const_pointer
PB_DS_CLASS_C_DEC::
-next_2_pointer(const_node_pointer p_nd)
+next_2_pointer(node_const_pointer p_nd)
{
if (p_nd == 0)
return 0;
@@ -100,9 +100,9 @@ next_2_pointer(const_node_pointer p_nd)
}
PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::const_node_pointer
+typename PB_DS_CLASS_C_DEC::node_const_pointer
PB_DS_CLASS_C_DEC::
-next_after_0_pointer(const_node_pointer p_nd)
+next_after_0_pointer(node_const_pointer p_nd)
{
if (p_nd == 0)
return 0;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
index 29d240b458..a8c619e5a1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file rc_binomial_heap_/erase_fn_imps.hpp
* Contains an implementation for rc_binomial_heap_.
*/
@@ -91,7 +91,7 @@ erase_if(Pred pred)
make_binomial_heap();
const size_type ersd = base_type::erase_if(pred);
base_type::find_max();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return ersd;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
index 56d189d70c..aae0a72c97 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file rc_binomial_heap_/insert_fn_imps.hpp
* Contains an implementation for rc_binomial_heap_.
*/
@@ -43,13 +43,13 @@ inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
push(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- make_0_exposed();
+ make_0_exposed();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
+ node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
p_nd->m_p_l_child = p_nd->m_p_prev_or_parent = 0;
p_nd->m_metadata = 0;
@@ -67,9 +67,9 @@ push(const_reference r_val)
if (p_nd->m_p_next_sibling != 0&& p_nd->m_p_next_sibling->m_metadata == 0)
m_rc.push(p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- return point_iterator(p_nd);
+ return point_iterator(p_nd);
}
PB_DS_CLASS_T_DEC
@@ -77,16 +77,16 @@ void
PB_DS_CLASS_C_DEC::
modify(point_iterator it, const_reference r_new_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
- make_binomial_heap();
+ make_binomial_heap();
base_type::modify(it, r_new_val);
base_type::find_max();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_pointer
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
index 9b70accd9e..ea27c47ba6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file rc.hpp
+ * @file rc_binomial_heap_/rc.hpp
* Contains a redundant (binary counter).
*/
@@ -45,37 +45,22 @@ namespace __gnu_pbds
{
namespace detail
{
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Node, class Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- rc<Node, Allocator>
-
- template<typename Node, class Allocator>
+ /// Redundant binary counter.
+ template<typename _Node, typename _Alloc>
class rc
{
private:
- typedef Allocator allocator_type;
-
- typedef typename allocator_type::size_type size_type;
-
- typedef Node node;
+ typedef _Alloc allocator_type;
+ typedef typename allocator_type::size_type size_type;
+ typedef _Node node;
- typedef
- typename allocator_type::template rebind<
- node>::other::pointer
- node_pointer;
+ typedef typename _Alloc::template rebind<node> __rebind_n;
+ typedef typename __rebind_n::other::pointer node_pointer;
- typedef
- typename allocator_type::template rebind<
- node_pointer>::other::pointer
- entry_pointer;
+ typedef typename _Alloc::template rebind<node_pointer> __rebind_np;
- typedef
- typename allocator_type::template rebind<
- node_pointer>::other::const_pointer
- const_entry_pointer;
+ typedef typename __rebind_np::other::pointer entry_pointer;
+ typedef typename __rebind_np::other::const_pointer entry_const_pointer;
enum
{
@@ -83,20 +68,18 @@ namespace __gnu_pbds
};
public:
- typedef node_pointer entry;
+ typedef node_pointer entry;
+ typedef entry_const_pointer const_iterator;
- typedef const_entry_pointer const_iterator;
-
- public:
rc();
- rc(const PB_DS_CLASS_C_DEC& other);
+ rc(const rc&);
inline void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(rc&);
inline void
- push(entry p_nd);
+ push(entry);
inline node_pointer
top() const;
@@ -121,37 +104,36 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char*, int) const;
+#endif
#ifdef PB_DS_RC_BINOMIAL_HEAP_TRACE_
void
trace() const;
-#endif
+#endif
private:
- node_pointer m_a_entries[max_entries];
-
- size_type m_over_top;
+ node_pointer m_a_entries[max_entries];
+ size_type m_over_top;
};
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
+ template<typename _Node, typename _Alloc>
+ rc<_Node, _Alloc>::
rc() : m_over_top(0)
- { _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+ { PB_DS_ASSERT_VALID((*this)) }
- PB_DS_CLASS_T_DEC
- PB_DS_CLASS_C_DEC::
- rc(const PB_DS_CLASS_C_DEC& other) : m_over_top(0)
- { _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+ template<typename _Node, typename _Alloc>
+ rc<_Node, _Alloc>::
+ rc(const rc<_Node, _Alloc>& other) : m_over_top(0)
+ { PB_DS_ASSERT_VALID((*this)) }
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
inline void
- PB_DS_CLASS_C_DEC::
- swap(PB_DS_CLASS_C_DEC& other)
+ rc<_Node, _Alloc>::
+ swap(rc<_Node, _Alloc>& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
const size_type over_top = std::max(m_over_top, other.m_over_top);
@@ -159,91 +141,91 @@ namespace __gnu_pbds
std::swap(m_a_entries[i], other.m_a_entries[i]);
std::swap(m_over_top, other.m_over_top);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
inline void
- PB_DS_CLASS_C_DEC::
+ rc<_Node, _Alloc>::
push(entry p_nd)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(m_over_top < max_entries);
m_a_entries[m_over_top++] = p_nd;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
inline void
- PB_DS_CLASS_C_DEC::
+ rc<_Node, _Alloc>::
pop()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!empty());
--m_over_top;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::node_pointer
- PB_DS_CLASS_C_DEC::
+ template<typename _Node, typename _Alloc>
+ inline typename rc<_Node, _Alloc>::node_pointer
+ rc<_Node, _Alloc>::
top() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(!empty());
return *(m_a_entries + m_over_top - 1);
}
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
inline bool
- PB_DS_CLASS_C_DEC::
+ rc<_Node, _Alloc>::
empty() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return m_over_top == 0;
}
- PB_DS_CLASS_T_DEC
- inline typename PB_DS_CLASS_C_DEC::size_type
- PB_DS_CLASS_C_DEC::
+ template<typename _Node, typename _Alloc>
+ inline typename rc<_Node, _Alloc>::size_type
+ rc<_Node, _Alloc>::
size() const
{ return m_over_top; }
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
void
- PB_DS_CLASS_C_DEC::
+ rc<_Node, _Alloc>::
clear()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
m_over_top = 0;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
- PB_DS_CLASS_T_DEC
- const typename PB_DS_CLASS_C_DEC::const_iterator
- PB_DS_CLASS_C_DEC::
+ template<typename _Node, typename _Alloc>
+ const typename rc<_Node, _Alloc>::const_iterator
+ rc<_Node, _Alloc>::
begin() const
{ return& m_a_entries[0]; }
- PB_DS_CLASS_T_DEC
- const typename PB_DS_CLASS_C_DEC::const_iterator
- PB_DS_CLASS_C_DEC::
+ template<typename _Node, typename _Alloc>
+ const typename rc<_Node, _Alloc>::const_iterator
+ rc<_Node, _Alloc>::
end() const
{ return& m_a_entries[m_over_top]; }
#ifdef _GLIBCXX_DEBUG
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
void
- PB_DS_CLASS_C_DEC::
- assert_valid() const
- { _GLIBCXX_DEBUG_ASSERT(m_over_top < max_entries); }
-#endif
+ rc<_Node, _Alloc>::
+ assert_valid(const char* __file, int __line) const
+ { PB_DS_DEBUG_VERIFY(m_over_top < max_entries); }
+#endif
#ifdef PB_DS_RC_BINOMIAL_HEAP_TRACE_
- PB_DS_CLASS_T_DEC
+ template<typename _Node, typename _Alloc>
void
- PB_DS_CLASS_C_DEC::
+ rc<_Node, _Alloc>::
trace() const
{
std::cout << "rc" << std::endl;
@@ -251,12 +233,8 @@ namespace __gnu_pbds
std::cerr << m_a_entries[i] << std::endl;
std::cout << std::endl;
}
-#endif
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
+#endif
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
index 762e29b399..a856247065 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,12 +34,8 @@
// warranty.
/**
- * @file rc_binomial_heap_.hpp
- * Contains an implementation for rc_binomial_heap_.
- */
-
-/*
- * Redundant-counter binomial heap.
+ * @file rc_binomial_heap_/rc_binomial_heap_.hpp
+ * Contains an implementation for redundant-counter binomial heap.
*/
#include <ext/pb_ds/detail/cond_dealtor.hpp>
@@ -53,114 +49,96 @@ namespace __gnu_pbds
namespace detail
{
#define PB_DS_CLASS_T_DEC \
- template<typename Value_Type, class Cmp_Fn, class Allocator>
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- rc_binomial_heap_<Value_Type, Cmp_Fn, Allocator>
-
-#define PB_DS_BASE_C_DEC \
- binomial_heap_base_<Value_Type, Cmp_Fn, Allocator>
+ rc_binomial_heap<Value_Type, Cmp_Fn, _Alloc>
#define PB_DS_RC_C_DEC \
- rc<typename PB_DS_BASE_C_DEC::node, Allocator>
+ rc<typename binomial_heap_base<Value_Type, Cmp_Fn, _Alloc>::node, _Alloc>
/**
- * class description = "8y|\|0|\/|i41 h34p 74813">
- **/
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- class rc_binomial_heap_ : public PB_DS_BASE_C_DEC
+ * Redundant-counter binomial heap.
+ *
+ * @ingroup heap-detail
+ */
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
+ class rc_binomial_heap
+ : public binomial_heap_base<Value_Type, Cmp_Fn, _Alloc>
{
-
private:
- typedef PB_DS_BASE_C_DEC base_type;
-
- typedef typename base_type::node_pointer node_pointer;
-
- typedef typename base_type::const_node_pointer const_node_pointer;
-
- typedef PB_DS_RC_C_DEC rc_t;
-
- public:
-
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef Value_Type value_type;
-
- typedef typename base_type::pointer pointer;
-
- typedef typename base_type::const_pointer const_pointer;
-
- typedef typename base_type::reference reference;
-
- typedef typename base_type::const_reference const_reference;
-
- typedef typename base_type::const_point_iterator const_point_iterator;
-
- typedef typename base_type::point_iterator point_iterator;
-
- typedef typename base_type::const_iterator const_iterator;
-
- typedef typename base_type::iterator iterator;
-
- typedef typename base_type::cmp_fn cmp_fn;
-
- typedef typename base_type::allocator_type allocator_type;
+ typedef binomial_heap_base<Value_Type, Cmp_Fn, _Alloc>
+ base_type;
+ typedef typename base_type::node_pointer node_pointer;
+ typedef typename base_type::node_const_pointer node_const_pointer;
+ typedef PB_DS_RC_C_DEC rc_t;
public:
+ typedef Value_Type value_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef typename base_type::pointer pointer;
+ typedef typename base_type::const_pointer const_pointer;
+ typedef typename base_type::reference reference;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::point_const_iterator point_const_iterator;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::cmp_fn cmp_fn;
+ typedef typename base_type::allocator_type allocator_type;
- rc_binomial_heap_();
+ rc_binomial_heap();
- rc_binomial_heap_(const Cmp_Fn& r_cmp_fn);
+ rc_binomial_heap(const Cmp_Fn&);
- rc_binomial_heap_(const PB_DS_CLASS_C_DEC& other);
+ rc_binomial_heap(const PB_DS_CLASS_C_DEC&);
- ~rc_binomial_heap_();
+ ~rc_binomial_heap();
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
inline point_iterator
- push(const_reference r_val);
+ push(const_reference);
void
- modify(point_iterator it, const_reference r_new_val);
+ modify(point_iterator, const_reference);
inline void
pop();
void
- erase(point_iterator it);
+ erase(point_iterator);
inline void
clear();
template<typename Pred>
size_type
- erase_if(Pred pred);
+ erase_if(Pred);
template<typename Pred>
void
- split(Pred pred, PB_DS_CLASS_C_DEC& other);
+ split(Pred, PB_DS_CLASS_C_DEC&);
void
- join(PB_DS_CLASS_C_DEC& other);
+ join(PB_DS_CLASS_C_DEC&);
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char*, int) const;
+#endif
#ifdef PB_DS_RC_BINOMIAL_HEAP_TRACE_
void
trace() const;
-#endif
+#endif
private:
inline node_pointer
- link_with_next_sibling(node_pointer p_nd);
+ link_with_next_sibling(node_pointer);
void
make_0_exposed();
@@ -169,15 +147,14 @@ namespace __gnu_pbds
make_binomial_heap();
#ifdef _GLIBCXX_DEBUG
- static const_node_pointer
- next_2_pointer(const_node_pointer p_nd);
+ static node_const_pointer
+ next_2_pointer(node_const_pointer);
- static const_node_pointer
- next_after_0_pointer(const_node_pointer p_nd);
-#endif
+ static node_const_pointer
+ next_after_0_pointer(node_const_pointer);
+#endif
- private:
- rc_t m_rc;
+ rc_t m_rc;
};
#include <ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp>
@@ -188,11 +165,7 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp>
#undef PB_DS_CLASS_C_DEC
-
#undef PB_DS_CLASS_T_DEC
-
-#undef PB_DS_BASE_C_DEC
-
#undef PB_DS_RC_C_DEC
} // namespace detail
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
index 26965aec8c..13bf78e51f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file rc_binomial_heap_/split_join_fn_imps.hpp
* Contains an implementation for rc_binomial_heap_.
*/
@@ -44,38 +44,34 @@ void
PB_DS_CLASS_C_DEC::
split(Pred pred, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
- make_binomial_heap();
+ make_binomial_heap();
other.make_binomial_heap();
-
base_type::split(pred, other);
-
base_type::find_max();
other.find_max();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
- make_binomial_heap();
+ make_binomial_heap();
other.make_binomial_heap();
-
base_type::join(other);
-
base_type::find_max();
other.find_max();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
index 1fb3b8bd48..27b5bc4b97 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file rc_binomial_heap_/trace_fn_imps.hpp
* Contains an implementation for rc_binomial_heap_.
*/
@@ -46,7 +46,6 @@ PB_DS_CLASS_C_DEC::
trace() const
{
base_type::trace();
-
m_rc.trace();
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
index 1418bbe455..c8a8816d5b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
@@ -39,66 +39,69 @@
* Contains a resize trigger implementation.
*/
+#define PB_DS_ASSERT_VALID(X) \
+ _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);)
+
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
hash_load_check_resize_trigger(float load_min, float load_max)
: m_load_min(load_min), m_load_max(load_max), m_next_shrink_size(0),
m_next_grow_size(0), m_resize_needed(false)
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_find_search_start()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_find_search_collision()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_find_search_end()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_start()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_collision()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_end()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erase_search_start()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erase_search_collision()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erase_search_end()
-{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
+{ PB_DS_ASSERT_VALID((*this)) }
PB_DS_CLASS_T_DEC
inline void
@@ -107,7 +110,7 @@ notify_inserted(size_type num_entries)
{
m_resize_needed = (num_entries >= m_next_grow_size);
size_base::set_size(num_entries);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -117,7 +120,7 @@ notify_erased(size_type num_entries)
{
size_base::set_size(num_entries);
m_resize_needed = num_entries <= m_next_shrink_size;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -125,7 +128,7 @@ inline bool
PB_DS_CLASS_C_DEC::
is_resize_needed() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return m_resize_needed;
}
@@ -160,7 +163,7 @@ notify_resized(size_type new_size)
<< "5 " << m_next_grow_size << std::endl;
#endif
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -194,7 +197,7 @@ notify_externally_resized(size_type new_size)
m_next_shrink_size = new_shrink_size;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -202,10 +205,10 @@ void
PB_DS_CLASS_C_DEC::
notify_cleared()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
size_base::set_size(0);
m_resize_needed = (0 < m_next_shrink_size);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -213,8 +216,8 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
size_base::swap(other);
std::swap(m_load_min, other.m_load_min);
@@ -223,8 +226,8 @@ swap(PB_DS_CLASS_C_DEC& other)
std::swap(m_next_grow_size, other.m_next_grow_size);
std::swap(m_next_shrink_size, other.m_next_shrink_size);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
@@ -272,12 +275,20 @@ do_resize(size_type)
{ std::abort(); }
#ifdef _GLIBCXX_DEBUG
+# define PB_DS_DEBUG_VERIFY(_Cond) \
+ _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \
+ _M_message(#_Cond" assertion from %1;:%2;") \
+ ._M_string(__FILE__)._M_integer(__LINE__) \
+ ,__file,__line)
+
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- _GLIBCXX_DEBUG_ASSERT(m_load_max > m_load_min);
- _GLIBCXX_DEBUG_ASSERT(m_next_grow_size >= m_next_shrink_size);
+ PB_DS_DEBUG_VERIFY(m_load_max > m_load_min);
+ PB_DS_DEBUG_VERIFY(m_next_grow_size >= m_next_shrink_size);
}
+# undef PB_DS_DEBUG_VERIFY
#endif
+#undef PB_DS_ASSERT_VALID
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
index c29b3d5bed..a4344e7c59 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
@@ -45,11 +45,11 @@ namespace __gnu_pbds
{
namespace detail
{
- // Primary template.
+ /// Primary template.
template<typename Size_Type, bool Hold_Size>
class hash_load_check_resize_trigger_size_base;
- // Specializations.
+ /// Specializations.
template<typename Size_Type>
class hash_load_check_resize_trigger_size_base<Size_Type, true>
{
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
index 33aecdf5fc..9bbdf159e9 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
@@ -41,85 +41,85 @@
#ifndef PB_DS_SAMPLE_RESIZE_POLICY_HPP
#define PB_DS_SAMPLE_RESIZE_POLICY_HPP
-// A sample resize policy.
-class sample_resize_policy
+namespace __gnu_pbds
{
-public:
-
- // Size type.
- typedef std::size_t size_type;
-
- // Default constructor.
- sample_resize_policy();
-
- // Copy constructor.
- sample_range_hashing(const sample_resize_policy& other);
-
- // Swaps content.
- inline void
- swap(sample_resize_policy& other);
-
-protected:
-
- // Notifies a search started.
- inline void
- notify_insert_search_start();
-
- // Notifies a search encountered a collision.
- inline void
- notify_insert_search_collision();
-
- // Notifies a search ended.
- inline void
- notify_insert_search_end();
-
- // Notifies a search started.
- inline void
- notify_find_search_start();
-
- // Notifies a search encountered a collision.
- inline void
- notify_find_search_collision();
-
- // Notifies a search ended.
- inline void
- notify_find_search_end();
-
- // Notifies a search started.
- inline void
- notify_erase_search_start();
-
- // Notifies a search encountered a collision.
- inline void
- notify_erase_search_collision();
-
- // Notifies a search ended.
- inline void
- notify_erase_search_end();
-
- // Notifies an element was inserted.
- inline void
- notify_inserted(size_type num_e);
-
- // Notifies an element was erased.
- inline void
- notify_erased(size_type num_e);
-
- // Notifies the table was cleared.
- void
- notify_cleared();
-
- // Notifies the table was resized to new_size.
- void
- notify_resized(size_type new_size);
-
- // Queries whether a resize is needed.
- inline bool
- is_resize_needed() const;
-
- // Queries what the new size should be.
- size_type
- get_new_size(size_type size, size_type num_used_e) const;
-};
-
-#endif
+ /// A sample resize policy.
+ class sample_resize_policy
+ {
+ public:
+ /// Size type.
+ typedef std::size_t size_type;
+
+ /// Default constructor.
+ sample_resize_policy();
+
+ /// Copy constructor.
+ sample_range_hashing(const sample_resize_policy& other);
+
+ /// Swaps content.
+ inline void
+ swap(sample_resize_policy& other);
+
+ protected:
+ /// Notifies a search started.
+ inline void
+ notify_insert_search_start();
+
+ /// Notifies a search encountered a collision.
+ inline void
+ notify_insert_search_collision();
+
+ /// Notifies a search ended.
+ inline void
+ notify_insert_search_end();
+
+ /// Notifies a search started.
+ inline void
+ notify_find_search_start();
+
+ /// Notifies a search encountered a collision.
+ inline void
+ notify_find_search_collision();
+
+ /// Notifies a search ended.
+ inline void
+ notify_find_search_end();
+
+ /// Notifies a search started.
+ inline void
+ notify_erase_search_start();
+
+ /// Notifies a search encountered a collision.
+ inline void
+ notify_erase_search_collision();
+
+ /// Notifies a search ended.
+ inline void
+ notify_erase_search_end();
+
+ /// Notifies an element was inserted.
+ inline void
+ notify_inserted(size_type num_e);
+
+ /// Notifies an element was erased.
+ inline void
+ notify_erased(size_type num_e);
+
+ /// Notifies the table was cleared.
+ void
+ notify_cleared();
+
+ /// Notifies the table was resized to new_size.
+ void
+ notify_resized(size_type new_size);
+
+ /// Queries whether a resize is needed.
+ inline bool
+ is_resize_needed() const;
+
+ /// Queries what the new size should be.
+ size_type
+ get_new_size(size_type size, size_type num_used_e) const;
+ };
+}
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
index 963c5530a4..1640a120c7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
@@ -42,97 +42,96 @@
#ifndef PB_DS_SAMPLE_RESIZE_TRIGGER_HPP
#define PB_DS_SAMPLE_RESIZE_TRIGGER_HPP
-// A sample resize trigger policy.
-class sample_resize_trigger
+namespace __gnu_pbds
{
-public:
-
- // Size type.
- typedef std::size_t size_type;
-
- // Default constructor.
- sample_resize_trigger();
-
- // Copy constructor.
- sample_range_hashing(const sample_resize_trigger& other);
-
- // Swaps content.
- inline void
- swap(sample_resize_trigger& other);
-
-protected:
-
- // Notifies a search started.
- inline void
- notify_insert_search_start();
-
- // Notifies a search encountered a collision.
- inline void
- notify_insert_search_collision();
-
- // Notifies a search ended.
- inline void
- notify_insert_search_end();
-
- // Notifies a search started.
- inline void
- notify_find_search_start();
-
- // Notifies a search encountered a collision.
- inline void
- notify_find_search_collision();
-
- // Notifies a search ended.
- inline void
- notify_find_search_end();
-
- // Notifies a search started.
- inline void
- notify_erase_search_start();
-
- // Notifies a search encountered a collision.
- inline void
- notify_erase_search_collision();
-
- // Notifies a search ended.
- inline void
- notify_erase_search_end();
-
- // Notifies an element was inserted. the total number of entries in
- // the table is num_entries.
- inline void
- notify_inserted(size_type num_entries);
-
- // Notifies an element was erased.
- inline void
- notify_erased(size_type num_entries);
-
- // Notifies the table was cleared.
- void
- notify_cleared();
-
- // Notifies the table was resized as a result of this object's
- // signifying that a resize is needed.
- void
- notify_resized(size_type new_size);
-
- // Notifies the table was resized externally.
- void
- notify_externally_resized(size_type new_size);
-
- // Queries whether a resize is needed.
- inline bool
- is_resize_needed() const;
-
- // Queries whether a grow is needed.
- inline bool
- is_grow_needed(size_type size, size_type num_entries) const;
-
-private:
-
- // Resizes to new_size.
- virtual void
- do_resize(size_type new_size);
-};
-
-#endif
+ /// A sample resize trigger policy.
+ class sample_resize_trigger
+ {
+ public:
+ /// Size type.
+ typedef std::size_t size_type;
+
+ /// Default constructor.
+ sample_resize_trigger();
+
+ /// Copy constructor.
+ sample_range_hashing(const sample_resize_trigger&);
+
+ /// Swaps content.
+ inline void
+ swap(sample_resize_trigger&);
+
+ protected:
+ /// Notifies a search started.
+ inline void
+ notify_insert_search_start();
+
+ /// Notifies a search encountered a collision.
+ inline void
+ notify_insert_search_collision();
+
+ /// Notifies a search ended.
+ inline void
+ notify_insert_search_end();
+
+ /// Notifies a search started.
+ inline void
+ notify_find_search_start();
+
+ /// Notifies a search encountered a collision.
+ inline void
+ notify_find_search_collision();
+
+ /// Notifies a search ended.
+ inline void
+ notify_find_search_end();
+
+ /// Notifies a search started.
+ inline void
+ notify_erase_search_start();
+
+ /// Notifies a search encountered a collision.
+ inline void
+ notify_erase_search_collision();
+
+ /// Notifies a search ended.
+ inline void
+ notify_erase_search_end();
+
+ /// Notifies an element was inserted. the total number of entries in
+ /// the table is num_entries.
+ inline void
+ notify_inserted(size_type num_entries);
+
+ /// Notifies an element was erased.
+ inline void
+ notify_erased(size_type num_entries);
+
+ /// Notifies the table was cleared.
+ void
+ notify_cleared();
+
+ /// Notifies the table was resized as a result of this object's
+ /// signifying that a resize is needed.
+ void
+ notify_resized(size_type new_size);
+
+ /// Notifies the table was resized externally.
+ void
+ notify_externally_resized(size_type new_size);
+
+ /// Queries whether a resize is needed.
+ inline bool
+ is_resize_needed() const;
+
+ /// Queries whether a grow is needed.
+ inline bool
+ is_grow_needed(size_type size, size_type num_entries) const;
+
+ private:
+ /// Resizes to new_size.
+ virtual void
+ do_resize(size_type);
+ };
+}
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
index 9b3ba031c4..0779925491 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
@@ -41,33 +41,33 @@
#ifndef PB_DS_SAMPLE_SIZE_POLICY_HPP
#define PB_DS_SAMPLE_SIZE_POLICY_HPP
-// A sample size policy.
-class sample_size_policy
+namespace __gnu_pbds
{
-public:
-
- // Size type.
- typedef std::size_t size_type;
-
- // Default constructor.
- sample_size_policy();
-
- // Copy constructor.
- sample_range_hashing(const sample_size_policy& other);
-
- // Swaps content.
- inline void
- swap(sample_size_policy& other);
-
-protected:
-
- // Given a __size size, returns a __size that is larger.
- inline size_type
- get_nearest_larger_size(size_type size) const;
-
- // Given a __size size, returns a __size that is smaller.
- inline size_type
- get_nearest_smaller_size(size_type size) const;
-};
-
-#endif
+ /// A sample size policy.
+ class sample_size_policy
+ {
+ public:
+ /// Size type.
+ typedef std::size_t size_type;
+
+ /// Default constructor.
+ sample_size_policy();
+
+ /// Copy constructor.
+ sample_range_hashing(const sample_size_policy&);
+
+ /// Swaps content.
+ inline void
+ swap(sample_size_policy& other);
+
+ protected:
+ /// Given a __size size, returns a __size that is larger.
+ inline size_type
+ get_nearest_larger_size(size_type size) const;
+
+ /// Given a __size size, returns a __size that is smaller.
+ inline size_type
+ get_nearest_smaller_size(size_type size) const;
+ };
+}
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
index 2225895327..2383e96255 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file splay_tree_/constructors_destructor_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
@@ -50,37 +50,37 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME()
+PB_DS_S_TREE_NAME()
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) :
+PB_DS_S_TREE_NAME(const Cmp_Fn& r_cmp_fn) :
base_type(r_cmp_fn)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
+PB_DS_S_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
base_type(r_cmp_fn, r_node_update)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
+PB_DS_S_TREE_NAME(const PB_DS_CLASS_C_DEC& other) :
base_type(other)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -88,11 +88,11 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
base_type::swap(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
index 385623f41f..e6a4694b29 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file splay_tree_/debug_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
@@ -43,31 +43,32 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- base_type::assert_valid();
+ base_type::assert_valid(__file, __line);
const node_pointer p_head = base_type::m_p_head;
- assert_special_imp(p_head);
+ assert_special_imp(p_head, __file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_special_imp(const node_pointer p_nd) const
+assert_special_imp(const node_pointer p_nd,
+ const char* __file, int __line) const
{
if (p_nd == 0)
return;
if (p_nd == base_type::m_p_head)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_special);
- assert_special_imp(p_nd->m_p_parent);
+ PB_DS_DEBUG_VERIFY(p_nd->m_special);
+ assert_special_imp(p_nd->m_p_parent, __file, __line);
return;
}
- _GLIBCXX_DEBUG_ASSERT(!p_nd->m_special);
- assert_special_imp(p_nd->m_p_left);
- assert_special_imp(p_nd->m_p_right);
+ PB_DS_DEBUG_VERIFY(!p_nd->m_special);
+ assert_special_imp(p_nd->m_p_left, __file, __line);
+ assert_special_imp(p_nd->m_p_right, __file, __line);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
index adfabb93ee..9546321e6f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,14 +34,14 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file splay_tree_/erase_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
-erase(const_key_reference r_key)
+erase(key_const_reference r_key)
{
point_iterator it = find(r_key);
if (it == base_type::end())
@@ -55,13 +55,13 @@ inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
erase(iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it == base_type::end())
return it;
iterator ret_it = it;
++ret_it;
erase_node(it.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
@@ -70,13 +70,13 @@ inline typename PB_DS_CLASS_C_DEC::reverse_iterator
PB_DS_CLASS_C_DEC::
erase(reverse_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
if (it.m_p_nd == base_type::m_p_head)
return (it);
reverse_iterator ret_it = it;
++ret_it;
erase_node(it.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ret_it;
}
@@ -86,7 +86,7 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
size_type num_ersd = 0;
iterator it = base_type::begin();
while (it != base_type::end())
@@ -99,7 +99,7 @@ erase_if(Pred pred)
else
++it;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return num_ersd;
}
@@ -111,7 +111,7 @@ erase_node(node_pointer p_nd)
_GLIBCXX_DEBUG_ASSERT(p_nd != 0);
splay(p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
_GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent);
node_pointer p_l = p_nd->m_p_left;
@@ -124,7 +124,7 @@ erase_node(node_pointer p_nd)
base_type::m_p_head->m_p_parent = p_l;
if (p_l != 0)
p_l->m_p_parent = base_type::m_p_head;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
return;
}
@@ -141,8 +141,8 @@ erase_node(node_pointer p_nd)
p_target_r->m_p_left = p_l;
if (p_l != 0)
p_l->m_p_parent = p_target_r;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- apply_update(p_target_r, (node_update* )this);
+ PB_DS_ASSERT_VALID((*this))
+ this->apply_update(p_target_r, (node_update*)this);
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
index 9447011bd1..6e1a4ef06e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,14 +34,14 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file splay_tree_/find_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key)
+find(key_const_reference r_key)
{
node_pointer p_found = find_imp(r_key);
if (p_found != base_type::m_p_head)
@@ -50,9 +50,9 @@ find(const_key_reference r_key)
}
PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_point_iterator
+inline typename PB_DS_CLASS_C_DEC::point_const_iterator
PB_DS_CLASS_C_DEC::
-find(const_key_reference r_key) const
+find(key_const_reference r_key) const
{
const node_pointer p_found = find_imp(r_key);
if (p_found != base_type::m_p_head)
@@ -63,9 +63,10 @@ find(const_key_reference r_key) const
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-find_imp(const_key_reference r_key)
+find_imp(key_const_reference r_key)
{
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid(__FILE__,
+ __LINE__);)
node_pointer p_nd = base_type::m_p_head->m_p_parent;
while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
@@ -82,9 +83,9 @@ find_imp(const_key_reference r_key)
PB_DS_CLASS_T_DEC
inline const typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
-find_imp(const_key_reference r_key) const
+find_imp(key_const_reference r_key) const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
node_pointer p_nd = base_type::m_p_head->m_p_parent;
while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
index 636b9ab255..8996903b01 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
@@ -34,6 +34,6 @@
// warranty.
/**
- * @file info_fn_imps.hpp
+ * @file splay_tree_/info_fn_imps.hpp
* Contains an implementation.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
index 69ab58ba37..2f895b5bff 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010i, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file splay_tree_/insert_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
@@ -43,12 +43,12 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert(const_reference r_value)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
std::pair<point_iterator, bool> ins_pair = insert_leaf_imp(r_value);
ins_pair.first.m_p_nd->m_special = false;
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
splay(ins_pair.first.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
+ PB_DS_ASSERT_VALID((*this))
return ins_pair;
}
@@ -57,7 +57,8 @@ inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>
PB_DS_CLASS_C_DEC::
insert_leaf_imp(const_reference r_value)
{
- _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid(__FILE__,
+ __LINE__);)
if (base_type::m_size == 0)
return std::make_pair(base_type::insert_imp_empty(r_value), true);
@@ -80,7 +81,7 @@ insert_leaf_imp(const_reference r_value)
if (p_pot == base_type::m_p_head)
return std::make_pair(base_type::insert_leaf_new(r_value, base_type::m_p_head->m_p_right, false), true);
- _GLIBCXX_DEBUG_ONLY(base_type::check_key_does_not_exist(PB_DS_V2F(r_value)));
+ PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_value))
p_nd = p_pot->m_p_left;
if (p_nd == 0)
@@ -89,5 +90,5 @@ insert_leaf_imp(const_reference r_value)
while (p_nd->m_p_right != 0)
p_nd = p_nd->m_p_right;
- return std::make_pair(insert_leaf_new(r_value, p_nd, false), true);
+ return std::make_pair(this->insert_leaf_new(r_value, p_nd, false), true);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp
index fbf398d04c..111976d550 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file node.hpp
+ * @file splay_tree_/node.hpp
* Contains an implementation struct for splay_tree_'s node.
*/
@@ -45,7 +45,8 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Value_Type, class Metadata, class Allocator>
+ /// Node for splay tree.
+ template<typename Value_Type, class Metadata, typename _Alloc>
struct splay_tree_node_
{
public:
@@ -53,17 +54,17 @@ namespace __gnu_pbds
typedef Metadata metadata_type;
typedef
- typename Allocator::template rebind<
- splay_tree_node_<Value_Type, Metadata, Allocator> >::other::pointer
+ typename _Alloc::template rebind<
+ splay_tree_node_<Value_Type, Metadata, _Alloc> >::other::pointer
node_pointer;
typedef
- typename Allocator::template rebind<metadata_type>::other::reference
+ typename _Alloc::template rebind<metadata_type>::other::reference
metadata_reference;
typedef
- typename Allocator::template rebind<metadata_type>::other::const_reference
- const_metadata_reference;
+ typename _Alloc::template rebind<metadata_type>::other::const_reference
+ metadata_const_reference;
#ifdef PB_DS_BIN_SEARCH_TREE_TRACE_
void
@@ -75,7 +76,7 @@ namespace __gnu_pbds
special() const
{ return m_special; }
- inline const_metadata_reference
+ inline metadata_const_reference
get_metadata() const
{ return m_metadata; }
@@ -91,16 +92,16 @@ namespace __gnu_pbds
metadata_type m_metadata;
};
- template<typename Value_Type, typename Allocator>
- struct splay_tree_node_<Value_Type, null_node_metadata, Allocator>
+ template<typename Value_Type, typename _Alloc>
+ struct splay_tree_node_<Value_Type, null_type, _Alloc>
{
public:
typedef Value_Type value_type;
- typedef null_node_metadata metadata_type;
+ typedef null_type metadata_type;
typedef
- typename Allocator::template rebind<
- splay_tree_node_<Value_Type, null_node_metadata, Allocator> >::other::pointer
+ typename _Alloc::template rebind<
+ splay_tree_node_<Value_Type, null_type, _Alloc> >::other::pointer
node_pointer;
inline bool
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
index f9bae22631..0356845094 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file splay_fn_imps.hpp
+ * @file splay_tree_/splay_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
@@ -48,59 +48,59 @@ splay(node_pointer p_nd)
#ifdef _GLIBCXX_DEBUG
{
node_pointer p_head = base_type::m_p_head;
- assert_special_imp(p_head);
+ assert_special_imp(p_head, __FILE__, __LINE__);
}
#endif
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd);)
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd)
- if (p_nd->m_p_parent->m_p_parent == base_type::m_p_head)
- {
- base_type::rotate_parent(p_nd);
- _GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent);
- }
- else
- {
- const node_pointer p_parent = p_nd->m_p_parent;
- const node_pointer p_grandparent = p_parent->m_p_parent;
+ if (p_nd->m_p_parent->m_p_parent == base_type::m_p_head)
+ {
+ base_type::rotate_parent(p_nd);
+ _GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent);
+ }
+ else
+ {
+ const node_pointer p_parent = p_nd->m_p_parent;
+ const node_pointer p_grandparent = p_parent->m_p_parent;
#ifdef _GLIBCXX_DEBUG
- const size_type total =
- base_type::recursive_count(p_grandparent);
- _GLIBCXX_DEBUG_ASSERT(total >= 3);
-#endif
-
- if (p_parent->m_p_left == p_nd &&
- p_grandparent->m_p_right == p_parent)
- splay_zig_zag_left(p_nd, p_parent, p_grandparent);
- else if (p_parent->m_p_right == p_nd &&
- p_grandparent->m_p_left == p_parent)
- splay_zig_zag_right(p_nd, p_parent, p_grandparent);
- else if (p_parent->m_p_left == p_nd &&
- p_grandparent->m_p_left == p_parent)
- splay_zig_zig_left(p_nd, p_parent, p_grandparent);
- else
- splay_zig_zig_right(p_nd, p_parent, p_grandparent);
- _GLIBCXX_DEBUG_ASSERT(total ==this->recursive_count(p_nd));
- }
-
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd);)
- }
+ const size_type total =
+ base_type::recursive_count(p_grandparent);
+ _GLIBCXX_DEBUG_ASSERT(total >= 3);
+#endif
+
+ if (p_parent->m_p_left == p_nd &&
+ p_grandparent->m_p_right == p_parent)
+ splay_zig_zag_left(p_nd, p_parent, p_grandparent);
+ else if (p_parent->m_p_right == p_nd &&
+ p_grandparent->m_p_left == p_parent)
+ splay_zig_zag_right(p_nd, p_parent, p_grandparent);
+ else if (p_parent->m_p_left == p_nd &&
+ p_grandparent->m_p_left == p_parent)
+ splay_zig_zig_left(p_nd, p_parent, p_grandparent);
+ else
+ splay_zig_zig_right(p_nd, p_parent, p_grandparent);
+ _GLIBCXX_DEBUG_ASSERT(total ==this->recursive_count(p_nd));
+ }
+
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd)
+ }
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent,
+splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent,
node_pointer p_grandparent)
{
_GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent);
_GLIBCXX_DEBUG_ASSERT(p_grandparent == p_parent->m_p_parent);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_grandparent);)
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent)
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd &&
- p_grandparent->m_p_right == p_parent);
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd &&
+ p_grandparent->m_p_right == p_parent);
splay_zz_start(p_nd, p_parent, p_grandparent);
@@ -127,16 +127,16 @@ splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent,
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent,
+splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent,
node_pointer p_grandparent)
{
_GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent);
_GLIBCXX_DEBUG_ASSERT(p_grandparent == p_parent->m_p_parent);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_grandparent);)
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent)
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd &&
- p_grandparent->m_p_left == p_parent);
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd &&
+ p_grandparent->m_p_left == p_parent);
splay_zz_start(p_nd, p_parent, p_grandparent);
@@ -163,15 +163,15 @@ splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent,
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent,
+splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent,
node_pointer p_grandparent)
{
_GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent);
_GLIBCXX_DEBUG_ASSERT(p_grandparent == p_parent->m_p_parent);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_grandparent);)
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent)
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd &&
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd &&
p_nd->m_p_parent->m_p_parent->m_p_left == p_nd->m_p_parent);
splay_zz_start(p_nd, p_parent, p_grandparent);
@@ -199,14 +199,14 @@ splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent,
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent,
+splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent,
node_pointer p_grandparent)
{
_GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent);
_GLIBCXX_DEBUG_ASSERT(p_grandparent == p_parent->m_p_parent);
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_grandparent);)
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd &&
- p_nd->m_p_parent->m_p_parent->m_p_right == p_nd->m_p_parent);
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent)
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd &&
+ p_nd->m_p_parent->m_p_parent->m_p_right == p_nd->m_p_parent);
splay_zz_start(p_nd, p_parent, p_grandparent);
@@ -227,7 +227,7 @@ splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent,
if (p_c != 0)
p_c->m_p_parent = p_grandparent;
- base_type::update_to_top(p_grandparent, (node_update* )this);
+ base_type::update_to_top(p_grandparent, (node_update*)this);
splay_zz_end(p_nd, p_parent, p_grandparent);
}
@@ -237,7 +237,7 @@ PB_DS_CLASS_C_DEC::
splay_zz_start(node_pointer p_nd,
#ifdef _GLIBCXX_DEBUG
node_pointer p_parent,
-#else
+#else
node_pointer /*p_parent*/,
#endif
node_pointer p_grandparent)
@@ -268,16 +268,14 @@ splay_zz_start(node_pointer p_nd,
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-splay_zz_end(node_pointer p_nd, node_pointer p_parent,
+splay_zz_end(node_pointer p_nd, node_pointer p_parent,
node_pointer p_grandparent)
{
if (p_nd->m_p_parent == base_type::m_p_head)
base_type::m_p_head->m_p_parent = p_nd;
- apply_update(p_grandparent, (node_update* )this);
- apply_update(p_parent, (node_update* )this);
- apply_update(p_nd, (node_update* )this);
-
- _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd);)
+ this->apply_update(p_grandparent, (node_update*)this);
+ this->apply_update(p_parent, (node_update*)this);
+ this->apply_update(p_nd, (node_update*)this);
+ PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd)
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
index 8a2eb07cf0..a83ed55572 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,8 +34,8 @@
// warranty.
/**
- * @file splay_tree_.hpp
- * Contains an implementation class for splay_tree_.
+ * @file splay_tree_/splay_tree_.hpp
+ * Contains an implementation class for splay trees.
*/
/*
* This implementation uses an idea from the SGI STL (using a @a header node
@@ -68,20 +68,6 @@
*
*/
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR
-#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR
-#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
-#endif
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR
-#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR
-#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
-#endif
-#endif
-
#include <utility>
#include <vector>
#include <assert.h>
@@ -91,88 +77,78 @@ namespace __gnu_pbds
{
namespace detail
{
-#define PB_DS_CLASS_T_DEC \
- template<typename Key, typename Mapped, typename Cmp_Fn, \
- typename Node_And_It_Traits, typename Allocator>
-
#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_CLASS_NAME splay_tree_data_
-#endif
+# define PB_DS_S_TREE_NAME splay_tree_map
+# define PB_DS_S_TREE_BASE_NAME bin_search_tree_map
+#endif
#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_CLASS_NAME splay_tree_no_data_
-#endif
-
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_BASE_CLASS_NAME bin_search_tree_data_
-#endif
+# define PB_DS_S_TREE_NAME splay_tree_set
+# define PB_DS_S_TREE_BASE_NAME bin_search_tree_set
+#endif
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_BASE_CLASS_NAME bin_search_tree_no_data_
-#endif
+#define PB_DS_CLASS_T_DEC \
+ template<typename Key, typename Mapped, typename Cmp_Fn, \
+ typename Node_And_It_Traits, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- PB_DS_CLASS_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator>
+ PB_DS_S_TREE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc>
-#define PB_DS_BASE_C_DEC \
- PB_DS_BASE_CLASS_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator>
+#define PB_DS_S_TREE_BASE \
+ PB_DS_S_TREE_BASE_NAME<Key, Mapped, Cmp_Fn, Node_And_It_Traits, _Alloc>
-#ifdef PB_DS_DATA_TRUE_INDICATOR
-#define PB_DS_V2F(X) (X).first
-#define PB_DS_V2S(X) (X).second
-#define PB_DS_EP2VP(X)& ((X)->m_value)
-#endif
-
-#ifdef PB_DS_DATA_FALSE_INDICATOR
-#define PB_DS_V2F(X) (X)
-#define PB_DS_V2S(X) Mapped_Data()
-#define PB_DS_EP2VP(X)& ((X)->m_value.first)
-#endif
- // $p14y 7r33 7481.
+ /**
+ * @brief Splay tree.
+ * @ingroup branch-detail
+ */
template<typename Key, typename Mapped, typename Cmp_Fn,
- typename Node_And_It_Traits, typename Allocator>
- class PB_DS_CLASS_NAME : public PB_DS_BASE_C_DEC
+ typename Node_And_It_Traits, typename _Alloc>
+ class PB_DS_S_TREE_NAME : public PB_DS_S_TREE_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
- typedef typename base_type::node_pointer node_pointer;
+ typedef PB_DS_S_TREE_BASE base_type;
+#ifdef _GLIBCXX_DEBUG
+ typedef base_type debug_base;
+#endif
+ typedef typename base_type::node_pointer node_pointer;
public:
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
- typedef Cmp_Fn cmp_fn;
- typedef typename base_type::key_type key_type;
- typedef typename base_type::key_pointer key_pointer;
- typedef typename base_type::const_key_pointer const_key_pointer;
- typedef typename base_type::key_reference key_reference;
- typedef typename base_type::const_key_reference const_key_reference;
- typedef typename base_type::mapped_type mapped_type;
- typedef typename base_type::mapped_pointer mapped_pointer;
- typedef typename base_type::const_mapped_pointer const_mapped_pointer;
- typedef typename base_type::mapped_reference mapped_reference;
- typedef typename base_type::const_mapped_reference const_mapped_reference;
- typedef typename base_type::value_type value_type;
- typedef typename base_type::pointer pointer;
- typedef typename base_type::const_pointer const_pointer;
- typedef typename base_type::reference reference;
- typedef typename base_type::const_reference const_reference;
- typedef typename base_type::point_iterator point_iterator;
- typedef typename base_type::const_iterator const_point_iterator;
- typedef typename base_type::iterator iterator;
- typedef typename base_type::const_iterator const_iterator;
- typedef typename base_type::reverse_iterator reverse_iterator;
+ typedef splay_tree_tag container_category;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
+ typedef Cmp_Fn cmp_fn;
+ typedef typename base_type::key_type key_type;
+ typedef typename base_type::key_pointer key_pointer;
+ typedef typename base_type::key_const_pointer key_const_pointer;
+ typedef typename base_type::key_reference key_reference;
+ typedef typename base_type::key_const_reference key_const_reference;
+ typedef typename base_type::mapped_type mapped_type;
+ typedef typename base_type::mapped_pointer mapped_pointer;
+ typedef typename base_type::mapped_const_pointer mapped_const_pointer;
+ typedef typename base_type::mapped_reference mapped_reference;
+ typedef typename base_type::mapped_const_reference mapped_const_reference;
+ typedef typename base_type::value_type value_type;
+ typedef typename base_type::pointer pointer;
+ typedef typename base_type::const_pointer const_pointer;
+ typedef typename base_type::reference reference;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::const_iterator point_const_iterator;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::reverse_iterator reverse_iterator;
typedef typename base_type::const_reverse_iterator const_reverse_iterator;
- typedef typename base_type::node_update node_update;
+ typedef typename base_type::node_update node_update;
- PB_DS_CLASS_NAME();
+ PB_DS_S_TREE_NAME();
- PB_DS_CLASS_NAME(const Cmp_Fn&);
+ PB_DS_S_TREE_NAME(const Cmp_Fn&);
- PB_DS_CLASS_NAME(const Cmp_Fn&, const node_update&);
+ PB_DS_S_TREE_NAME(const Cmp_Fn&, const node_update&);
- PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&);
+ PB_DS_S_TREE_NAME(const PB_DS_CLASS_C_DEC&);
void
swap(PB_DS_CLASS_C_DEC&);
@@ -188,32 +164,32 @@ namespace __gnu_pbds
insert(const_reference r_value);
inline mapped_reference
- operator[](const_key_reference r_key)
+ operator[](key_const_reference r_key)
{
#ifdef PB_DS_DATA_TRUE_INDICATOR
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
std::pair<point_iterator, bool> ins_pair =
insert_leaf_imp(value_type(r_key, mapped_type()));
ins_pair.first.m_p_nd->m_special = false;
- _GLIBCXX_DEBUG_ONLY(base_type::assert_valid());
+ _GLIBCXX_DEBUG_ONLY(base_type::assert_valid(__FILE__, __LINE__));
splay(ins_pair.first.m_p_nd);
- _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
+ _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);)
return ins_pair.first.m_p_nd->m_value.second;
-#else
+#else
insert(r_key);
- return base_type::s_null_mapped;
+ return base_type::s_null_type;
#endif
}
inline point_iterator
- find(const_key_reference);
+ find(key_const_reference);
- inline const_point_iterator
- find(const_key_reference) const;
+ inline point_const_iterator
+ find(key_const_reference) const;
inline bool
- erase(const_key_reference);
+ erase(key_const_reference);
inline iterator
erase(iterator it);
@@ -229,25 +205,25 @@ namespace __gnu_pbds
join(PB_DS_CLASS_C_DEC&);
void
- split(const_key_reference, PB_DS_CLASS_C_DEC&);
+ split(key_const_reference, PB_DS_CLASS_C_DEC&);
private:
inline std::pair<point_iterator, bool>
insert_leaf_imp(const_reference);
inline node_pointer
- find_imp(const_key_reference);
+ find_imp(key_const_reference);
inline const node_pointer
- find_imp(const_key_reference) const;
+ find_imp(key_const_reference) const;
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char* file, int line) const;
void
- assert_special_imp(const node_pointer) const;
-#endif
+ assert_special_imp(const node_pointer, const char* file, int line) const;
+#endif
void
splay(node_pointer);
@@ -277,6 +253,10 @@ namespace __gnu_pbds
erase_node(node_pointer);
};
+#define PB_DS_ASSERT_BASE_NODE_CONSISTENT(_Node) \
+ _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(_Node, \
+ __FILE__, __LINE__);)
+
#include <ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp>
#include <ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp>
@@ -285,14 +265,11 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp>
#include <ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp>
+#undef PB_DS_ASSERT_BASE_NODE_CONSISTENT
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_CLASS_NAME
-#undef PB_DS_BASE_CLASS_NAME
-#undef PB_DS_BASE_C_DEC
-#undef PB_DS_V2F
-#undef PB_DS_EP2VP
-#undef PB_DS_V2S
+#undef PB_DS_S_TREE_NAME
+#undef PB_DS_S_TREE_BASE_NAME
+#undef PB_DS_S_TREE_BASE
} // namespace detail
} // namespace __gnu_pbds
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
index beef5bdaa2..1fcfe79805 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file splay_tree_/split_join_fn_imps.hpp
* Contains an implementation class for splay_tree_.
*/
@@ -43,12 +43,12 @@ inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (base_type::join_prep(other) == false)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
@@ -66,30 +66,30 @@ join(PB_DS_CLASS_C_DEC& other)
base_type::m_p_head->m_p_parent = p_target_r;
p_target_r->m_p_parent = base_type::m_p_head;
- apply_update(p_target_r, (node_update* )this);
+ this->apply_update(p_target_r, (node_update*)this);
base_type::join_finish(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
+split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
if (base_type::split_prep(r_key, other) == false)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
return;
}
- node_pointer p_upper_bound = upper_bound(r_key).m_p_nd;
+ node_pointer p_upper_bound = this->upper_bound(r_key).m_p_nd;
_GLIBCXX_DEBUG_ASSERT(p_upper_bound != 0);
splay(p_upper_bound);
@@ -103,10 +103,10 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
other.m_p_head->m_p_parent = p_upper_bound;
p_upper_bound->m_p_parent = other.m_p_head;
p_upper_bound->m_p_left = 0;
- apply_update(p_upper_bound, (node_update* )this);
+ this->apply_update(p_upper_bound, (node_update*)this);
base_type::split_finish(other);
- _GLIBCXX_DEBUG_ONLY(assert_valid());
- _GLIBCXX_DEBUG_ONLY(other.assert_valid());
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp
index cfedc35c8d..d9ed261bfc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file traits.hpp
+ * @file splay_tree_/traits.hpp
* Contains an implementation for splay_tree_.
*/
@@ -47,64 +47,46 @@ namespace __gnu_pbds
{
namespace detail
{
-
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
typename Mapped,
- class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- class Allocator>
- struct tree_traits<
- Key,
- Mapped,
- Cmp_Fn,
- Node_Update,
- splay_tree_tag,
- Allocator> : public bin_search_tree_traits<
- Key,
- Mapped,
- Cmp_Fn,
- Node_Update,
- splay_tree_node_<
- typename types_traits<
- Key,
- Mapped,
- Allocator,
- false>::value_type,
- typename tree_node_metadata_selector<
- Key,
- Mapped,
- Cmp_Fn,
- Node_Update,
- Allocator>::type,
- Allocator>,
- Allocator>
+ typename Cmp_Fn,
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct tree_traits<Key, Mapped, Cmp_Fn, Node_Update, splay_tree_tag, _Alloc>
+ : public bin_search_tree_traits<Key, Mapped, Cmp_Fn, Node_Update,
+ splay_tree_node_<
+ typename types_traits<Key, Mapped, _Alloc, false>::value_type,
+ typename tree_node_metadata_dispatch<Key, Mapped, Cmp_Fn, Node_Update,
+ _Alloc>::type,
+ _Alloc>,
+ _Alloc>
{ };
+ /// Specialization.
+ /// @ingroup traits
template<typename Key,
class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
+ template<typename Node_CItr,
+ class Node_Itr,
class Cmp_Fn_,
- class Allocator_>
+ typename _Alloc_>
class Node_Update,
- class Allocator>
- struct tree_traits<Key, null_mapped_type, Cmp_Fn, Node_Update,
- splay_tree_tag, Allocator>
- : public bin_search_tree_traits<Key, null_mapped_type, Cmp_Fn,
- Node_Update,
- splay_tree_node_<typename types_traits<Key, null_mapped_type, Allocator, false>::value_type,
- typename tree_node_metadata_selector<
- Key,
- null_mapped_type,
- Cmp_Fn,
- Node_Update,
- Allocator>::type,
- Allocator>,
- Allocator>
+ typename _Alloc>
+ struct tree_traits<Key, null_type, Cmp_Fn, Node_Update,
+ splay_tree_tag, _Alloc>
+ : public bin_search_tree_traits<Key, null_type, Cmp_Fn, Node_Update,
+ splay_tree_node_<
+ typename types_traits<Key, null_type, _Alloc, false>::value_type,
+ typename tree_node_metadata_dispatch<Key, null_type, Cmp_Fn, Node_Update,
+ _Alloc>::type,
+ _Alloc>,
+ _Alloc>
{ };
} // namespace detail
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp
index cfbfbb0728..7596f8b56d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file standard_policies.hpp
+ * @file detail/standard_policies.hpp
* Contains standard policies for containers.
*/
@@ -44,8 +44,8 @@
#include <memory>
#include <ext/pb_ds/hash_policy.hpp>
#include <ext/pb_ds/list_update_policy.hpp>
+#include <ext/pb_ds/detail/branch_policy/null_node_metadata.hpp>
#include <ext/pb_ds/tree_policy.hpp>
-#include <ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp>
#include <ext/pb_ds/trie_policy.hpp>
#include <ext/pb_ds/tag_and_trait.hpp>
#include <tr1/functional>
@@ -54,83 +54,105 @@ namespace __gnu_pbds
{
namespace detail
{
+ /// Primary template, default_hash_fn.
template<typename Key>
struct default_hash_fn
{
- typedef std::tr1::hash<Key> type;
+ /// Dispatched type.
+ typedef std::tr1::hash<Key> type;
};
+ /// Primary template, default_eq_fn.
template<typename Key>
struct default_eq_fn
{
- typedef std::equal_to<Key> type;
+ /// Dispatched type.
+ typedef std::equal_to<Key> type;
};
+ /// Enumeration for default behavior of stored hash data.
enum
{
default_store_hash = false
};
+ /// Primary template, default_comb_hash_fn.
struct default_comb_hash_fn
{
- typedef __gnu_pbds::direct_mask_range_hashing<> type;
+ /// Dispatched type.
+ typedef direct_mask_range_hashing<> type;
};
+ /// Primary template, default_resize_policy.
template<typename Comb_Hash_Fn>
struct default_resize_policy
{
private:
- typedef typename Comb_Hash_Fn::size_type size_type;
+ typedef typename Comb_Hash_Fn::size_type size_type;
- typedef __gnu_pbds::direct_mask_range_hashing<size_type> default_fn;
- typedef is_same<default_fn, Comb_Hash_Fn> same_type;
- typedef __gnu_pbds::hash_exponential_size_policy<size_type> iftrue;
- typedef __gnu_pbds::hash_prime_size_policy iffalse;
+ typedef direct_mask_range_hashing<size_type> default_fn;
+ typedef is_same<default_fn, Comb_Hash_Fn> same_type;
+ typedef hash_exponential_size_policy<size_type> iftrue;
+ typedef hash_prime_size_policy iffalse;
typedef __conditional_type<same_type::value, iftrue, iffalse> cond_type;
- typedef typename cond_type::__type size_policy_type;
+ typedef typename cond_type::__type size_policy_type;
- typedef __gnu_pbds::hash_load_check_resize_trigger<false, size_type> trigger;
+ typedef hash_load_check_resize_trigger<false, size_type> trigger;
public:
- typedef __gnu_pbds::hash_standard_resize_policy<size_policy_type, trigger, false, size_type> type;
+ /// Dispatched type.
+ typedef hash_standard_resize_policy<size_policy_type, trigger,
+ false, size_type> type;
};
+ /// Default update policy.
struct default_update_policy
{
- typedef __gnu_pbds::move_to_front_lu_policy<> type;
+ /// Dispatched type.
+ typedef lu_move_to_front_policy<> type;
};
+ /// Primary template, default_probe_fn.
template<typename Comb_Probe_Fn>
struct default_probe_fn
{
private:
- typedef typename Comb_Probe_Fn::size_type size_type;
-
- typedef __gnu_pbds::direct_mask_range_hashing<size_type> default_fn;
- typedef is_same<default_fn, Comb_Probe_Fn> same_type;
- typedef __gnu_pbds::linear_probe_fn<size_type> iftrue;
- typedef __gnu_pbds::quadratic_probe_fn<size_type> iffalse;
+ typedef typename Comb_Probe_Fn::size_type size_type;
+ typedef direct_mask_range_hashing<size_type> default_fn;
+ typedef is_same<default_fn, Comb_Probe_Fn> same_type;
+ typedef linear_probe_fn<size_type> iftrue;
+ typedef quadratic_probe_fn<size_type> iffalse;
typedef __conditional_type<same_type::value, iftrue, iffalse> cond_type;
public:
- typedef typename cond_type::__type type;
+ /// Dispatched type.
+ typedef typename cond_type::__type type;
};
+
+ /// Primary template, default_trie_access_traits.
template<typename Key>
- struct default_trie_e_access_traits;
+ struct default_trie_access_traits;
- template<typename Char, class Char_Traits>
- struct default_trie_e_access_traits<std::basic_string<Char, Char_Traits, std::allocator<char> > >
- {
- private:
- typedef std::basic_string<Char, Char_Traits, std::allocator<char> > string_type;
+#define __dtrie_alloc std::allocator<char>
+#define __dtrie_string std::basic_string<Char, Char_Traits, __dtrie_alloc>
- public:
- typedef __gnu_pbds::string_trie_e_access_traits<string_type> type;
- };
+ /// Partial specialization, default_trie_access_traits.
+ template<typename Char, typename Char_Traits>
+ struct default_trie_access_traits<__dtrie_string>
+ {
+ private:
+ typedef __dtrie_string string_type;
+
+ public:
+ /// Dispatched type.
+ typedef trie_string_access_traits<string_type> type;
+ };
+
+#undef __dtrie_alloc
+#undef __dtrie_string
} // namespace detail
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_STANDARD_POLICIES_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
index af9b1116d5..fe0b983265 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file constructors_destructor_fn_imps.hpp
+ * @file thin_heap_/constructors_destructor_fn_imps.hpp
* Contains an implementation for thin_heap_.
*/
@@ -46,40 +46,39 @@ copy_from_range(It first_it, It last_it)
{
while (first_it != last_it)
push(*(first_it++));
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-thin_heap_() :
- m_p_max(0)
+thin_heap() : m_p_max(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-thin_heap_(const Cmp_Fn& r_cmp_fn) :
- PB_DS_BASE_C_DEC(r_cmp_fn),
- m_p_max(0)
+thin_heap(const Cmp_Fn& r_cmp_fn)
+: base_type(r_cmp_fn), m_p_max(0)
{
initialize();
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-thin_heap_(const PB_DS_CLASS_C_DEC& other) :
- PB_DS_BASE_C_DEC(other)
+thin_heap(const PB_DS_CLASS_C_DEC& other)
+: base_type(other)
{
initialize();
m_p_max = base_type::m_p_root;
- for (node_pointer p_nd = base_type::m_p_root; p_nd != 0; p_nd = p_nd->m_p_next_sibling)
+ for (node_pointer p_nd = base_type::m_p_root; p_nd != 0;
+ p_nd = p_nd->m_p_next_sibling)
if (Cmp_Fn::operator()(m_p_max->m_value, p_nd->m_value))
m_p_max = p_nd;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
@@ -87,15 +86,15 @@ void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
base_type::swap(other);
std::swap(m_p_max, other.m_p_max);
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
+ PB_DS_ASSERT_VALID((*this))
}
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-~thin_heap_()
+~thin_heap()
{ }
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
index 19e977b9a8..3eb8541429 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file debug_fn_imps.hpp
+ * @file thin_heap_/debug_fn_imps.hpp
* Contains an implementation for thin_heap_.
*/
@@ -43,70 +43,77 @@
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_valid() const
+assert_valid(const char* __file, int __line) const
{
- base_type::assert_valid();
- assert_node_consistent(base_type::m_p_root, true);
- assert_max();
- assert_aux_null();
+ base_type::assert_valid(__file, __line);
+ assert_node_consistent(base_type::m_p_root, true, __file, __line);
+ assert_max(__file, __line);
+ assert_aux_null(__file, __line);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_aux_null() const
+assert_aux_null(const char* __file, int __line) const
{
for (size_type i = 0; i < max_rank; ++i)
- _GLIBCXX_DEBUG_ASSERT(m_a_aux[i] == 0);
+ PB_DS_DEBUG_VERIFY(m_a_aux[i] == 0);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_max() const
+assert_max(const char* __file, int __line) const
{
if (m_p_max == 0)
{
- _GLIBCXX_DEBUG_ASSERT(base_type::empty());
+ PB_DS_DEBUG_VERIFY(base_type::empty());
return;
}
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
- _GLIBCXX_DEBUG_ASSERT(base_type::parent(m_p_max) == 0);
- _GLIBCXX_DEBUG_ASSERT(m_p_max->m_p_prev_or_parent == 0);
+ PB_DS_DEBUG_VERIFY(!base_type::empty());
+ PB_DS_DEBUG_VERIFY(base_type::parent(m_p_max) == 0);
+ PB_DS_DEBUG_VERIFY(m_p_max->m_p_prev_or_parent == 0);
for (const_iterator it = base_type::begin(); it != base_type::end(); ++it)
- _GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(m_p_max->m_value, it.m_p_nd->m_value));
+ PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(m_p_max->m_value, it.m_p_nd->m_value));
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
-assert_node_consistent(const_node_pointer p_nd, bool root) const
+assert_node_consistent(node_const_pointer p_nd, bool root,
+ const char* __file, int __line) const
{
- base_type::assert_node_consistent(p_nd, root);
+ base_type::assert_node_consistent(p_nd, root, __file, __line);
if (p_nd == 0)
return;
- assert_node_consistent(p_nd->m_p_next_sibling, root);
- assert_node_consistent(p_nd->m_p_l_child, false);
+ assert_node_consistent(p_nd->m_p_next_sibling, root, __file, __line);
+ assert_node_consistent(p_nd->m_p_l_child, false, __file, __line);
if (!root)
{
if (p_nd->m_metadata == 0)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling == 0);
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_next_sibling == 0);
else
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata + 1);
+ PB_DS_DEBUG_VERIFY(p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata + 1);
}
if (p_nd->m_p_l_child != 0)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_l_child->m_metadata + 1 == base_type::degree(p_nd));
+ PB_DS_DEBUG_VERIFY(p_nd->m_p_l_child->m_metadata + 1 == base_type::degree(p_nd));
- const bool unmarked_valid =(p_nd->m_p_l_child == 0&& p_nd->m_metadata == 0) ||(p_nd->m_p_l_child != 0&& p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 1);
+ const bool unmarked_valid =
+ (p_nd->m_p_l_child == 0 && p_nd->m_metadata == 0)
+ || (p_nd->m_p_l_child != 0
+ && p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 1);
- const bool marked_valid =(p_nd->m_p_l_child == 0&& p_nd->m_metadata == 1) ||(p_nd->m_p_l_child != 0&& p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 2);
+ const bool marked_valid =
+ (p_nd->m_p_l_child == 0 && p_nd->m_metadata == 1)
+ || (p_nd->m_p_l_child != 0
+ && p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 2);
- _GLIBCXX_DEBUG_ASSERT(unmarked_valid || marked_valid);
+ PB_DS_DEBUG_VERIFY(unmarked_valid || marked_valid);
if (root)
- _GLIBCXX_DEBUG_ASSERT(unmarked_valid);
+ PB_DS_DEBUG_VERIFY(unmarked_valid);
}
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
index 4431a4cf49..c52e2dcc41 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file erase_fn_imps.hpp
+ * @file thin_heap_/erase_fn_imps.hpp
* Contains an implementation for thin_heap_.
*/
@@ -43,19 +43,15 @@ void
PB_DS_CLASS_C_DEC::
pop()
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
-
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
_GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
node_pointer p_nd = m_p_max;
-
remove_max_node();
-
base_type::actual_erase_node(p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
inline void
@@ -63,7 +59,6 @@ PB_DS_CLASS_C_DEC::
remove_max_node()
{
to_aux_except_max();
-
make_from_aux();
}
@@ -73,39 +68,29 @@ PB_DS_CLASS_C_DEC::
to_aux_except_max()
{
node_pointer p_add = base_type::m_p_root;
-
while (p_add != m_p_max)
{
node_pointer p_next_add = p_add->m_p_next_sibling;
-
add_to_aux(p_add);
-
p_add = p_next_add;
}
p_add = m_p_max->m_p_l_child;
-
while (p_add != 0)
{
node_pointer p_next_add = p_add->m_p_next_sibling;
-
- p_add->m_metadata = p_add->m_p_l_child == 0?
- 0 :
- p_add->m_p_l_child->m_metadata + 1;
+ p_add->m_metadata = p_add->m_p_l_child == 0 ?
+ 0 : p_add->m_p_l_child->m_metadata + 1;
add_to_aux(p_add);
-
p_add = p_next_add;
}
p_add = m_p_max->m_p_next_sibling;
-
while (p_add != 0)
{
node_pointer p_next_add = p_add->m_p_next_sibling;
-
add_to_aux(p_add);
-
p_add = p_next_add;
}
}
@@ -116,22 +101,18 @@ PB_DS_CLASS_C_DEC::
add_to_aux(node_pointer p_nd)
{
size_type r = p_nd->m_metadata;
-
while (m_a_aux[r] != 0)
{
_GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata < rank_bound());
-
if (Cmp_Fn::operator()(m_a_aux[r]->m_value, p_nd->m_value))
make_child_of(m_a_aux[r], p_nd);
else
- {
+ {
make_child_of(p_nd, m_a_aux[r]);
-
p_nd = m_a_aux[r];
- }
+ }
m_a_aux[r] = 0;
-
++r;
}
@@ -150,7 +131,6 @@ make_child_of(node_pointer p_nd, node_pointer p_new_parent)
m_a_aux[p_nd->m_metadata] == p_new_parent);
++p_new_parent->m_metadata;
-
base_type::make_child_of(p_nd, p_new_parent);
}
@@ -160,25 +140,20 @@ PB_DS_CLASS_C_DEC::
make_from_aux()
{
base_type::m_p_root = m_p_max = 0;
-
const size_type rnk_bnd = rank_bound();
-
size_type i = 0;
-
while (i < rnk_bnd)
{
if (m_a_aux[i] != 0)
- {
+ {
make_root_and_link(m_a_aux[i]);
-
m_a_aux[i] = 0;
- }
-
+ }
++i;
}
- _GLIBCXX_DEBUG_ONLY(assert_aux_null();)
- }
+ PB_DS_ASSERT_AUX_NULL((*this))
+}
PB_DS_CLASS_T_DEC
inline void
@@ -190,7 +165,6 @@ remove_node(node_pointer p_nd)
p_parent = base_type::parent(p_parent);
base_type::bubble_to_top(p_nd);
-
m_p_max = p_nd;
node_pointer p_fix = base_type::m_p_root;
@@ -209,7 +183,6 @@ PB_DS_CLASS_C_DEC::
clear()
{
base_type::clear();
-
m_p_max = 0;
}
@@ -218,17 +191,14 @@ void
PB_DS_CLASS_C_DEC::
erase(point_iterator it)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
node_pointer p_nd = it.m_p_nd;
-
remove_node(p_nd);
-
base_type::actual_erase_node(p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
template<typename Pred>
@@ -236,48 +206,35 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
erase_if(Pred pred)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- if (base_type::empty())
- {
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return 0;
- }
+ PB_DS_ASSERT_VALID((*this))
+ if (base_type::empty())
+ {
+ PB_DS_ASSERT_VALID((*this))
+ return 0;
+ }
base_type::to_linked_list();
-
node_pointer p_out = base_type::prune(pred);
-
size_type ersd = 0;
-
while (p_out != 0)
{
++ersd;
-
node_pointer p_next = p_out->m_p_next_sibling;
-
base_type::actual_erase_node(p_out);
-
p_out = p_next;
}
node_pointer p_cur = base_type::m_p_root;
-
m_p_max = base_type::m_p_root = 0;
-
while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
-
make_root_and_link(p_cur);
-
p_cur = p_next;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return ersd;
+ PB_DS_ASSERT_VALID((*this))
+ return ersd;
}
PB_DS_CLASS_T_DEC
@@ -285,12 +242,14 @@ inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
rank_bound()
{
- const std::size_t* const p_upper =
- std::upper_bound( g_a_rank_bounds, g_a_rank_bounds + num_distinct_rank_bounds, base_type::m_size);
+ using namespace std;
+ const size_t* const p_upper =
+ std::upper_bound(g_a_rank_bounds,
+ g_a_rank_bounds + num_distinct_rank_bounds,
+ base_type::m_size);
if (p_upper == g_a_rank_bounds + num_distinct_rank_bounds)
return max_rank;
return (p_upper - g_a_rank_bounds);
}
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
index ef60addf81..d0ba860ed4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file find_fn_imps.hpp
+ * @file thin_heap_/find_fn_imps.hpp
* Contains an implementation for thin_heap_.
*/
@@ -43,8 +43,8 @@ inline typename PB_DS_CLASS_C_DEC::const_reference
PB_DS_CLASS_C_DEC::
top() const
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
+ PB_DS_ASSERT_VALID((*this))
+ _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
_GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
return m_p_max->m_value;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
index 2f56abd21c..67b7f3a3a1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file insert_fn_imps.hpp
+ * @file thin_heap_/insert_fn_imps.hpp
* Contains an implementation for thin_heap_.
*/
@@ -43,36 +43,24 @@ inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
push(const_reference r_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
-
+ PB_DS_ASSERT_VALID((*this))
+ node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
p_nd->m_metadata = 0;
-
p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = 0;
-
if (base_type::m_p_root == 0)
{
p_nd->m_p_next_sibling = 0;
-
m_p_max = base_type::m_p_root = p_nd;
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return point_iterator(p_nd);
+ PB_DS_ASSERT_VALID((*this))
+ return point_iterator(p_nd);
}
p_nd->m_p_next_sibling = base_type::m_p_root;
-
base_type::m_p_root->m_p_prev_or_parent = 0;
-
base_type::m_p_root = p_nd;
-
update_max(p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return point_iterator(p_nd);
+ PB_DS_ASSERT_VALID((*this))
+ return point_iterator(p_nd);
}
PB_DS_CLASS_T_DEC
@@ -80,10 +68,8 @@ inline void
PB_DS_CLASS_C_DEC::
make_root(node_pointer p_nd)
{
- p_nd->m_metadata =
- p_nd->m_p_l_child == 0?
- 0 :
- 1 + p_nd->m_p_l_child->m_metadata;
+ p_nd->m_metadata = p_nd->m_p_l_child == 0
+ ? 0 : 1 + p_nd->m_p_l_child->m_metadata;
}
PB_DS_CLASS_T_DEC
@@ -92,16 +78,12 @@ PB_DS_CLASS_C_DEC::
make_root_and_link(node_pointer p_nd)
{
make_root(p_nd);
-
p_nd->m_p_prev_or_parent = 0;
-
p_nd->m_p_next_sibling = base_type::m_p_root;
-
if (base_type::m_p_root != 0)
base_type::m_p_root->m_p_prev_or_parent = 0;
base_type::m_p_root = p_nd;
-
update_max(p_nd);
}
@@ -115,7 +97,6 @@ fix(node_pointer p_y)
if (p_y->m_p_prev_or_parent == 0)
{
fix_root(p_y);
-
return;
}
else if (p_y->m_metadata == 1&& p_y->m_p_next_sibling == 0)
@@ -123,27 +104,22 @@ fix(node_pointer p_y)
if (p_y->m_p_l_child != 0)
{
fix_sibling_rank_1_unmarked(p_y);
-
return;
}
fix_sibling_rank_1_marked(p_y);
-
p_y = p_y->m_p_prev_or_parent;
}
else if (p_y->m_metadata > p_y->m_p_next_sibling->m_metadata + 1)
{
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child != 0);
-
if (p_y->m_metadata != p_y->m_p_l_child->m_metadata + 2)
{
fix_sibling_general_unmarked(p_y);
-
return;
}
fix_sibling_general_marked(p_y);
-
p_y = p_y->m_p_prev_or_parent;
}
else if ((p_y->m_p_l_child == 0&&
@@ -151,9 +127,7 @@ fix(node_pointer p_y)
p_y->m_metadata == p_y->m_p_l_child->m_metadata + 3))
{
node_pointer p_z = p_y->m_p_prev_or_parent;
-
fix_child(p_y);
-
p_y = p_z;
}
else
@@ -167,11 +141,9 @@ PB_DS_CLASS_C_DEC::
fix_root(node_pointer p_y)
{
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent == 0);
-
make_root(p_y);
-
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y, true);)
- }
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y, true)
+}
PB_DS_CLASS_T_DEC
inline void
@@ -181,18 +153,15 @@ fix_sibling_rank_1_unmarked(node_pointer p_y)
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
_GLIBCXX_DEBUG_ONLY(node_pointer p_w = p_y->m_p_l_child;)
- _GLIBCXX_DEBUG_ASSERT(p_w != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_w != 0);
_GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling == 0);
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_next_sibling == 0);
p_y->m_p_next_sibling = p_y->m_p_l_child;
-
p_y->m_p_next_sibling->m_p_prev_or_parent = p_y;
-
p_y->m_p_l_child = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y, false);)
- }
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y, false)
+}
PB_DS_CLASS_T_DEC
inline void
@@ -201,11 +170,9 @@ fix_sibling_rank_1_marked(node_pointer p_y)
{
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child == 0);
-
p_y->m_metadata = 0;
-
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y, false);)
- }
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y, false)
+}
PB_DS_CLASS_T_DEC
inline void
@@ -228,8 +195,8 @@ fix_sibling_general_unmarked(node_pointer p_y)
p_y->m_p_next_sibling = p_w;
p_w->m_p_prev_or_parent = p_y;
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y, false);)
- }
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y, false)
+}
PB_DS_CLASS_T_DEC
inline void
@@ -237,11 +204,9 @@ PB_DS_CLASS_C_DEC::
fix_sibling_general_marked(node_pointer p_y)
{
_GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
-
--p_y->m_metadata;
-
- _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y, false);)
- }
+ PB_DS_ASSERT_NODE_CONSISTENT(p_y, false)
+}
PB_DS_CLASS_T_DEC
inline void
@@ -266,35 +231,26 @@ void
PB_DS_CLASS_C_DEC::
modify(point_iterator it, const_reference r_new_val)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- node_pointer p_nd = it.m_p_nd;
-
+ PB_DS_ASSERT_VALID((*this))
+ node_pointer p_nd = it.m_p_nd;
_GLIBCXX_DEBUG_ASSERT(p_nd != 0);
const bool smaller = Cmp_Fn::operator()(r_new_val, p_nd->m_value);
-
p_nd->m_value = r_new_val;
-
if (smaller)
{
remove_node(p_nd);
-
p_nd->m_p_l_child = 0;
-
make_root_and_link(p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return;
+ PB_DS_ASSERT_VALID((*this))
+ return;
}
if (p_nd->m_p_prev_or_parent == 0)
{
update_max(p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
- return;
+ PB_DS_ASSERT_VALID((*this))
+ return;
}
node_pointer p_y = p_nd->m_p_prev_or_parent;
@@ -309,11 +265,9 @@ modify(point_iterator it, const_reference r_new_val)
p_y->m_p_next_sibling = p_nd->m_p_next_sibling;
fix(p_y);
-
make_root_and_link(p_nd);
-
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+}
PB_DS_CLASS_T_DEC
inline void
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
index 2adf5a5ef6..279cf6611e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file split_join_fn_imps.hpp
+ * @file thin_heap_/split_join_fn_imps.hpp
* Contains an implementation for thin_heap_.
*/
@@ -44,83 +44,65 @@ void
PB_DS_CLASS_C_DEC::
split(Pred pred, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- other.clear();
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ other.clear();
if (base_type::empty())
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- return;
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ return;
}
base_type::to_linked_list();
-
node_pointer p_out = base_type::prune(pred);
while (p_out != 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0);
--base_type::m_size;
-
++other.m_size;
-
node_pointer p_next = p_out->m_p_next_sibling;
-
other.make_root_and_link(p_out);
-
p_out = p_next;
}
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- node_pointer p_cur = base_type::m_p_root;
-
+ PB_DS_ASSERT_VALID(other)
+ node_pointer p_cur = base_type::m_p_root;
m_p_max = 0;
-
base_type::m_p_root = 0;
-
while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
-
make_root_and_link(p_cur);
-
p_cur = p_next;
}
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
-
- node_pointer p_other = other.m_p_root;
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+ node_pointer p_other = other.m_p_root;
while (p_other != 0)
{
node_pointer p_next = p_other->m_p_next_sibling;
-
make_root_and_link(p_other);
-
p_other = p_next;
}
-
base_type::m_size += other.m_size;
-
other.m_p_root = 0;
other.m_size = 0;
other.m_p_max = 0;
- _GLIBCXX_DEBUG_ONLY(assert_valid();)
- _GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- }
+ PB_DS_ASSERT_VALID((*this))
+ PB_DS_ASSERT_VALID(other)
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
index 88fa04b3c2..e040203cee 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,112 +34,81 @@
// warranty.
/**
- * @file thin_heap_.hpp
+ * @file thin_heap_/thin_heap_.hpp
* Contains an implementation class for a thin heap.
*/
#ifndef PB_DS_THIN_HEAP_HPP
#define PB_DS_THIN_HEAP_HPP
-/*
- * Thin heaps.
- * Tarjan and Kaplan.
- */
-
#include <algorithm>
#include <ext/pb_ds/detail/cond_dealtor.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp>
-#include <ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp>
#include <debug/debug.h>
namespace __gnu_pbds
{
namespace detail
{
-
#define PB_DS_CLASS_T_DEC \
- template<typename Value_Type, class Cmp_Fn, class Allocator>
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- thin_heap_<Value_Type, Cmp_Fn, Allocator>
+ thin_heap<Value_Type, Cmp_Fn, _Alloc>
#ifdef _GLIBCXX_DEBUG
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_<Value_Type, Cmp_Fn, \
- typename Allocator::size_type, Allocator, true>
-#else
-#define PB_DS_BASE_C_DEC \
- left_child_next_sibling_heap_<Value_Type, Cmp_Fn, \
- typename Allocator::size_type, Allocator>
-#endif
+#define PB_DS_BASE_T_P \
+ <Value_Type, Cmp_Fn, typename _Alloc::size_type, _Alloc, true>
+#else
+#define PB_DS_BASE_T_P \
+ <Value_Type, Cmp_Fn, typename _Alloc::size_type, _Alloc>
+#endif
+
/**
- * class description = "t|-|i|\| h34p">
- **/
- template<typename Value_Type, class Cmp_Fn, class Allocator>
- class thin_heap_ : public PB_DS_BASE_C_DEC
+ * Thin heap.
+ *
+ * @ingroup heap-detail
+ *
+ * See Tarjan and Kaplan.
+ */
+ template<typename Value_Type, typename Cmp_Fn, typename _Alloc>
+ class thin_heap
+ : public left_child_next_sibling_heap PB_DS_BASE_T_P
{
-
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef typename _Alloc::template rebind<Value_Type>::other __rebind_a;
+ typedef left_child_next_sibling_heap PB_DS_BASE_T_P base_type;
protected:
- typedef typename base_type::node node;
-
- typedef typename base_type::node_pointer node_pointer;
-
- typedef typename base_type::const_node_pointer const_node_pointer;
+ typedef typename base_type::node node;
+ typedef typename base_type::node_pointer node_pointer;
+ typedef typename base_type::node_const_pointer node_const_pointer;
public:
+ typedef Value_Type value_type;
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::size_type size_type;
+ typedef typename _Alloc::difference_type difference_type;
- typedef typename Allocator::size_type size_type;
-
- typedef typename Allocator::difference_type difference_type;
-
- typedef Value_Type value_type;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::pointer
- pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_pointer
- const_pointer;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::reference
- reference;
-
- typedef
- typename Allocator::template rebind<
- value_type>::other::const_reference
- const_reference;
+ typedef typename __rebind_a::pointer pointer;
+ typedef typename __rebind_a::const_pointer const_pointer;
+ typedef typename __rebind_a::reference reference;
+ typedef typename __rebind_a::const_reference const_reference;
- typedef
- typename PB_DS_BASE_C_DEC::const_point_iterator
- const_point_iterator;
+ typedef typename base_type::point_iterator point_iterator;
+ typedef typename base_type::point_const_iterator point_const_iterator;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::const_iterator const_iterator;
- typedef typename PB_DS_BASE_C_DEC::point_iterator point_iterator;
-
- typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator;
-
- typedef typename PB_DS_BASE_C_DEC::iterator iterator;
-
- typedef Cmp_Fn cmp_fn;
-
- typedef Allocator allocator_type;
-
- public:
inline point_iterator
- push(const_reference r_val);
+ push(const_reference);
void
- modify(point_iterator it, const_reference r_new_val);
+ modify(point_iterator, const_reference);
inline const_reference
top() const;
@@ -148,51 +117,50 @@ namespace __gnu_pbds
pop();
void
- erase(point_iterator it);
+ erase(point_iterator);
inline void
clear();
template<typename Pred>
size_type
- erase_if(Pred pred);
+ erase_if(Pred);
template<typename Pred>
void
- split(Pred pred, PB_DS_CLASS_C_DEC& other);
+ split(Pred, PB_DS_CLASS_C_DEC&);
void
- join(PB_DS_CLASS_C_DEC& other);
+ join(PB_DS_CLASS_C_DEC&);
protected:
+ thin_heap();
- thin_heap_();
-
- thin_heap_(const Cmp_Fn& r_cmp_fn);
+ thin_heap(const Cmp_Fn&);
- thin_heap_(const PB_DS_CLASS_C_DEC& other);
+ thin_heap(const PB_DS_CLASS_C_DEC&);
void
- swap(PB_DS_CLASS_C_DEC& other);
+ swap(PB_DS_CLASS_C_DEC&);
- ~thin_heap_();
+ ~thin_heap();
template<typename It>
void
- copy_from_range(It first_it, It last_it);
+ copy_from_range(It, It);
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
+ assert_valid(const char*, int) const;
void
- assert_max() const;
-#endif
+ assert_max(const char*, int) const;
+#endif
#ifdef PB_DS_THIN_HEAP_TRACE_
void
trace() const;
-#endif
+#endif
private:
enum
@@ -200,40 +168,38 @@ namespace __gnu_pbds
max_rank = (sizeof(size_type) << 4) + 2
};
- private:
-
void
initialize();
inline void
- update_max(node_pointer p_nd);
+ update_max(node_pointer);
inline void
- fix(node_pointer p_nd);
+ fix(node_pointer);
inline void
- fix_root(node_pointer p_y);
+ fix_root(node_pointer);
inline void
- fix_sibling_rank_1_unmarked(node_pointer p_y);
+ fix_sibling_rank_1_unmarked(node_pointer);
inline void
- fix_sibling_rank_1_marked(node_pointer p_y);
+ fix_sibling_rank_1_marked(node_pointer);
inline void
- fix_sibling_general_unmarked(node_pointer p_y);
+ fix_sibling_general_unmarked(node_pointer);
inline void
- fix_sibling_general_marked(node_pointer p_y);
+ fix_sibling_general_marked(node_pointer);
inline void
- fix_child(node_pointer p_y);
+ fix_child(node_pointer);
inline static void
- make_root(node_pointer p_nd);
+ make_root(node_pointer);
inline void
- make_root_and_link(node_pointer p_nd);
+ make_root_and_link(node_pointer);
inline void
remove_max_node();
@@ -242,7 +208,7 @@ namespace __gnu_pbds
to_aux_except_max();
inline void
- add_to_aux(node_pointer p_nd);
+ add_to_aux(node_pointer);
inline void
make_from_aux();
@@ -251,26 +217,24 @@ namespace __gnu_pbds
rank_bound();
inline void
- make_child_of(node_pointer p_nd, node_pointer p_new_parent);
+ make_child_of(node_pointer, node_pointer);
inline void
- remove_node(node_pointer p_nd);
+ remove_node(node_pointer);
inline node_pointer
- join(node_pointer p_lhs, node_pointer p_rhs) const;
+ join(node_pointer, node_pointer) const;
#ifdef _GLIBCXX_DEBUG
void
- assert_node_consistent(const_node_pointer p_nd, bool root) const;
+ assert_node_consistent(node_const_pointer, bool, const char*, int) const;
void
- assert_aux_null() const;
-#endif
-
- private:
- node_pointer m_p_max;
+ assert_aux_null(const char*, int) const;
+#endif
- node_pointer m_a_aux[max_rank];
+ node_pointer m_p_max;
+ node_pointer m_a_aux[max_rank];
};
enum
@@ -333,6 +297,13 @@ namespace __gnu_pbds
/* Pot's good, let's play */
};
+#define PB_DS_ASSERT_NODE_CONSISTENT(_Node, _Bool) \
+ _GLIBCXX_DEBUG_ONLY(assert_node_consistent(_Node, _Bool, \
+ __FILE__, __LINE__);)
+
+#define PB_DS_ASSERT_AUX_NULL(X) \
+ _GLIBCXX_DEBUG_ONLY(X.assert_aux_null(__FILE__, __LINE__);)
+
#include <ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp>
#include <ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp>
#include <ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp>
@@ -341,11 +312,13 @@ namespace __gnu_pbds
#include <ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp>
#include <ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp>
+#undef PB_DS_ASSERT_AUX_NULL
+#undef PB_DS_ASSERT_NODE_CONSISTENT
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_BASE_T_P
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
index fc309d5c1c..63a356414d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file trace_fn_imps.hpp
+ * @file thin_heap_/trace_fn_imps.hpp
* Contains an implementation class for left_child_next_sibling_heap_.
*/
@@ -46,9 +46,7 @@ PB_DS_CLASS_C_DEC::
trace() const
{
std::cerr << std::endl;
-
std::cerr << "m_p_max " << m_p_max << std::endl;
-
base_type::trace();
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
index c182886ee1..fbaace2c29 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,83 +34,70 @@
// warranty.
/**
- * @file node_metadata_selector.hpp
+ * @file tree_policy/node_metadata_selector.hpp
* Contains an implementation class for trees.
*/
-#ifndef PB_DS_TREE_NODE_METADATA_SELECTOR_HPP
-#define PB_DS_TREE_NODE_METADATA_SELECTOR_HPP
+#ifndef PB_DS_TREE_NODE_METADATA_DISPATCH_HPP
+#define PB_DS_TREE_NODE_METADATA_DISPATCH_HPP
-#include <ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp>
+#include <ext/pb_ds/detail/branch_policy/null_node_metadata.hpp>
#include <ext/pb_ds/detail/types_traits.hpp>
namespace __gnu_pbds
{
namespace detail
{
+ /**
+ * @addtogroup traits Traits
+ * @{
+ */
- template<typename Node_Update, bool Null>
- struct tree_metadata_helper
- {
- typedef typename Node_Update::metadata_type type;
- };
+ /// Tree metadata helper.
+ template<typename Node_Update, bool _BTp>
+ struct tree_metadata_helper;
+ /// Specialization, false.
template<typename Node_Update>
- struct tree_metadata_helper<
- Node_Update,
- true>
- {
- typedef null_node_metadata type;
- };
+ struct tree_metadata_helper<Node_Update, false>
+ {
+ typedef typename Node_Update::metadata_type type;
+ };
+ /// Specialization, true.
+ template<typename Node_Update>
+ struct tree_metadata_helper<Node_Update, true>
+ {
+ typedef null_type type;
+ };
+
+ /// Tree node metadata dispatch.
template<typename Key,
typename Data,
- class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Const_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- class Allocator>
- struct tree_node_metadata_selector
+ typename Cmp_Fn,
+ template<typename Node_CItr,
+ typename Const_Iterator,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct tree_node_metadata_dispatch
{
private:
- typedef
- dumconst_node_iterator<
- Key,
- Data,
- Allocator>
- dumconst_node_it;
+ typedef dumnode_const_iterator<Key, Data, _Alloc> __it_type;
+ typedef Node_Update<__it_type, __it_type, Cmp_Fn, _Alloc> __node_u;
+ typedef null_node_update<__it_type, __it_type, Cmp_Fn, _Alloc> __nnode_u;
enum
{
- null_update =
- is_same<
- Node_Update<
- dumconst_node_it,
- dumconst_node_it,
- Cmp_Fn,
- Allocator>,
- null_tree_node_update<
- dumconst_node_it,
- dumconst_node_it,
- Cmp_Fn,
- Allocator> >::value
+ null_update = is_same<__node_u, __nnode_u>::value
};
public:
- typedef
- typename tree_metadata_helper<
- Node_Update<
- dumconst_node_it,
- dumconst_node_it,
- Cmp_Fn,
- Allocator>,
- null_update>::type
- type;
+ typedef typename tree_metadata_helper<__node_u, null_update>::type type;
};
-
+ //@}
} // namespace detail
} // namespace __gnu_pbds
-#endif // #ifndef PB_DS_TREE_NODE_METADATA_SELECTOR_HPP
+#endif // #ifndef PB_DS_TREE_NODE_METADATA_DISPATCH_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp
deleted file mode 100644
index 006a3eb047..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file null_node_update_imp.hpp
- * Contains an implementation of null_node_update.
- */
-
-PB_DS_CLASS_T_DEC
-template<typename Const_Node_Iterator_,
- typename Node_Iterator_,
- class Cmp_Fn_,
- typename Allocator_>
-inline void
-PB_DS_CLASS_C_DEC::
-swap(null_tree_node_update< Const_Node_Iterator_, Node_Iterator_, Cmp_Fn_, Allocator_>& /*other*/)
-{ }
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
index 1d33767a2c..84397f3dff 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file order_statistics_imp.hpp
+ * @file tree_policy/order_statistics_imp.hpp
* Contains forward declarations for order_statistics_key
*/
@@ -44,95 +44,75 @@ PB_DS_CLASS_C_DEC::
find_by_order(size_type order)
{
node_iterator it = node_begin();
-
node_iterator end_it = node_end();
while (it != end_it)
{
node_iterator l_it = it.get_l_child();
-
- const size_type o = (l_it == end_it)?
- 0 :
- l_it.get_metadata();
+ const size_type o = (l_it == end_it)? 0 : l_it.get_metadata();
if (order == o)
- return (*it);
+ return *it;
else if (order < o)
it = l_it;
else
{
order -= o + 1;
-
it = it.get_r_child();
}
}
- return (PB_DS_BASE_C_DEC::end_iterator());
+ return base_type::end_iterator();
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
find_by_order(size_type order) const
-{
- return (const_cast<PB_DS_CLASS_C_DEC* >(this)->find_by_order(order));
-}
+{ return const_cast<PB_DS_CLASS_C_DEC*>(this)->find_by_order(order); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-order_of_key(const_key_reference r_key) const
+order_of_key(key_const_reference r_key) const
{
- const_node_iterator it = node_begin();
-
- const_node_iterator end_it = node_end();
-
- const cmp_fn& r_cmp_fn =
- const_cast<PB_DS_CLASS_C_DEC* >(this)->get_cmp_fn();
+ node_const_iterator it = node_begin();
+ node_const_iterator end_it = node_end();
+ const cmp_fn& r_cmp_fn = const_cast<PB_DS_CLASS_C_DEC*>(this)->get_cmp_fn();
size_type ord = 0;
-
while (it != end_it)
{
- const_node_iterator l_it = it.get_l_child();
+ node_const_iterator l_it = it.get_l_child();
- if (r_cmp_fn(r_key, extract_key(*(*it))))
+ if (r_cmp_fn(r_key, this->extract_key(*(*it))))
it = l_it;
- else if (r_cmp_fn(extract_key(*(*it)), r_key))
+ else if (r_cmp_fn(this->extract_key(*(*it)), r_key))
{
-
- ord += (l_it == end_it)?
- 1 :
- 1 + l_it.get_metadata();
-
+ ord += (l_it == end_it)? 1 : 1 + l_it.get_metadata();
it = it.get_r_child();
}
else
{
- ord += (l_it == end_it)?
- 0 :
- l_it.get_metadata();
-
+ ord += (l_it == end_it)? 0 : l_it.get_metadata();
it = end_it;
}
}
-
- return (ord);
+ return ord;
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-operator()(node_iterator node_it, const_node_iterator end_nd_it) const
+operator()(node_iterator node_it, node_const_iterator end_nd_it) const
{
- node_iterator l_child_it = node_it.get_l_child();
- const size_type l_rank =(l_child_it == end_nd_it)? 0 : l_child_it.get_metadata();
+ node_iterator l_it = node_it.get_l_child();
+ const size_type l_rank = (l_it == end_nd_it) ? 0 : l_it.get_metadata();
- node_iterator r_child_it = node_it.get_r_child();
- const size_type r_rank =(r_child_it == end_nd_it)? 0 : r_child_it.get_metadata();
+ node_iterator r_it = node_it.get_r_child();
+ const size_type r_rank = (r_it == end_nd_it) ? 0 : r_it.get_metadata();
- const_cast<metadata_reference>(node_it.get_metadata())=
- 1 + l_rank + r_rank;
+ const_cast<metadata_reference>(node_it.get_metadata())= 1 + l_rank + r_rank;
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
index b8c19a587f..e8033f62d4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
@@ -34,39 +34,29 @@
// warranty.
/**
- * @file sample_tree_node_update.hpp
+ * @file tree_policy/sample_tree_node_update.hpp
* Contains a samle node update functor.
*/
#ifndef PB_DS_SAMPLE_TREE_NODE_UPDATOR_HPP
#define PB_DS_SAMPLE_TREE_NODE_UPDATOR_HPP
-// A sample node updator.
-template<typename Const_Node_Iterator,
-
- class Node_Iterator,
-
- class Cmp_Fn,
-
- class Allocator
- >
-class sample_tree_node_update
+namespace __gnu_pbds
{
-
-public:
-
- // Metadata type.
- typedef std::size_t metadata_type;
-
-protected:
-
- // Default constructor.
- sample_tree_node_update();
-
- // Updates the rank of a node through a node_iterator node_it; end_nd_it is the end node iterator.
- inline void
- operator()(node_iterator node_it, const_node_iterator end_nd_it) const;
-
-};
-
+ /// A sample node updator.
+ template<typename Const_Node_Iter, typename Node_Iter, typename Cmp_Fn,
+ typename _Alloc>
+ class sample_tree_node_update
+ {
+ typedef std::size_t metadata_type;
+
+ /// Default constructor.
+ sample_tree_node_update();
+
+ /// Updates the rank of a node through a node_iterator node_it;
+ /// end_nd_it is the end node iterator.
+ inline void
+ operator()(node_iterator node_it, node_const_iterator end_nd_it) const;
+ };
+}
#endif // #ifndef PB_DS_SAMPLE_TREE_NODE_UPDATOR_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp
index e4bd656490..78cee86804 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file tree_trace_base.hpp
+ * @file detail/tree_trace_base.hpp
* Contains tree-related policies.
*/
@@ -43,82 +43,64 @@
#ifdef PB_DS_TREE_TRACE
-#include <ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp>
-#include <ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp>
+#include <ext/pb_ds/detail/branch_policy/branch_policy.hpp>
+#include <ext/pb_ds/detail/branch_policy/null_node_metadata.hpp>
namespace __gnu_pbds
{
-
namespace detail
{
-
#ifdef PB_DS_TREE_TRACE
#define PB_DS_CLASS_T_DEC \
- template< \
- class Const_Node_Iterator, \
- class Node_Iterator, \
- class Cmp_Fn, \
- bool Node_Based, \
- class Allocator>
+ template<typename Node_CItr, typename Node_Itr, \
+ typename Cmp_Fn, bool Node_Based, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- tree_trace_base< \
- Const_Node_Iterator, \
- Node_Iterator, \
- Cmp_Fn, \
- Node_Based, \
- Allocator>
-
-#define PB_DS_BASE_C_DEC \
- basic_tree_policy_base< \
- Const_Node_Iterator, \
- Node_Iterator, \
- Allocator>
-
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class Cmp_Fn,
- bool Node_Based,
- class Allocator>
- class tree_trace_base : private PB_DS_BASE_C_DEC
+ tree_trace_base<Node_CItr, Node_Itr, Cmp_Fn, \
+ Node_Based, _Alloc>
+
+#define PB_DS_TRACE_BASE \
+ branch_policy<Node_CItr, Node_Itr, _Alloc>
+
+ /// Tracing base class.
+ template<typename Node_CItr, typename Node_Itr,
+ typename Cmp_Fn, bool Node_Based, typename _Alloc>
+ class tree_trace_base : private PB_DS_TRACE_BASE
{
public:
void
trace() const;
private:
- typedef PB_DS_BASE_C_DEC base_type;
-
- typedef Const_Node_Iterator const_node_iterator;
+ typedef PB_DS_TRACE_BASE base_type;
+ typedef Node_CItr node_const_iterator;
+ typedef typename _Alloc::size_type size_type;
- typedef typename Allocator::size_type size_type;
-
- private:
void
- trace_node(const_node_iterator nd_it, size_type level) const;
+ trace_node(node_const_iterator, size_type) const;
virtual bool
empty() const = 0;
- virtual const_node_iterator
+ virtual node_const_iterator
node_begin() const = 0;
- virtual const_node_iterator
+ virtual node_const_iterator
node_end() const = 0;
static void
- print_node_pointer(Const_Node_Iterator nd_it, integral_constant<int,true>);
+ print_node_pointer(Node_CItr, integral_constant<int,true>);
static void
- print_node_pointer(Const_Node_Iterator nd_it, integral_constant<int,false>);
+ print_node_pointer(Node_CItr, integral_constant<int,false>);
template<typename Metadata_>
static void
- trace_it_metadata(Const_Node_Iterator nd_it, type_to_type<Metadata_>);
+ trace_it_metadata(Node_CItr, type_to_type<Metadata_>);
static void
- trace_it_metadata(Const_Node_Iterator, type_to_type<null_node_metadata>);
+ trace_it_metadata(Node_CItr, type_to_type<null_type>);
};
PB_DS_CLASS_T_DEC
@@ -127,83 +109,71 @@ namespace __gnu_pbds
trace() const
{
if (empty())
- return;
-
+ return;
trace_node(node_begin(), 0);
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
- trace_node(const_node_iterator nd_it, size_type level) const
+ trace_node(node_const_iterator nd_it, size_type level) const
{
if (nd_it.get_r_child() != node_end())
- trace_node(nd_it.get_r_child(), level + 1);
+ trace_node(nd_it.get_r_child(), level + 1);
for (size_type i = 0; i < level; ++i)
- std::cerr << ' ';
+ std::cerr << ' ';
print_node_pointer(nd_it, integral_constant<int,Node_Based>());
std::cerr << base_type::extract_key(*(*nd_it));
- typedef
- type_to_type<
- typename const_node_iterator::metadata_type>
- m_type_ind_t;
+ typedef type_to_type<typename node_const_iterator::metadata_type>
+ m_type_ind_t;
trace_it_metadata(nd_it, m_type_ind_t());
std::cerr << std::endl;
if (nd_it.get_l_child() != node_end())
- trace_node(nd_it.get_l_child(), level + 1);
+ trace_node(nd_it.get_l_child(), level + 1);
}
PB_DS_CLASS_T_DEC
template<typename Metadata_>
void
PB_DS_CLASS_C_DEC::
- trace_it_metadata(Const_Node_Iterator nd_it, type_to_type<Metadata_>)
+ trace_it_metadata(Node_CItr nd_it, type_to_type<Metadata_>)
{
- std::cerr << " (" <<
- static_cast<unsigned long>(nd_it.get_metadata()) << ") ";
+ const unsigned long ul = static_cast<unsigned long>(nd_it.get_metadata());
+ std::cerr << " (" << ul << ") ";
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
- trace_it_metadata(Const_Node_Iterator, type_to_type<null_node_metadata>)
+ trace_it_metadata(Node_CItr, type_to_type<null_type>)
{ }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
- print_node_pointer(Const_Node_Iterator nd_it, integral_constant<int,true>)
- {
- std::cerr << nd_it.m_p_nd << " ";
- }
+ print_node_pointer(Node_CItr nd_it, integral_constant<int,true>)
+ { std::cerr << nd_it.m_p_nd << " "; }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
- print_node_pointer(Const_Node_Iterator nd_it, integral_constant<int,false>)
- {
- std::cerr <<* nd_it << " ";
- }
+ print_node_pointer(Node_CItr nd_it, integral_constant<int,false>)
+ { std::cerr << *nd_it << " "; }
#undef PB_DS_CLASS_T_DEC
-
#undef PB_DS_CLASS_C_DEC
-
-#undef PB_DS_BASE_C_DEC
-
+#undef PB_DS_TRACE_BASE
#endif // #ifdef PB_DS_TREE_TRACE
} // namespace detail
-
} // namespace __gnu_pbds
#endif // #ifdef PB_DS_TREE_TRACE
#endif // #ifndef PB_DS_TREE_TRACE_BASE_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
index b4de31fd0c..da25ebbc46 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,83 +34,70 @@
// warranty.
/**
- * @file node_metadata_selector.hpp
+ * @file trie_policy/node_metadata_selector.hpp
* Contains an implementation class for tries.
*/
-#ifndef PB_DS_TRIE_NODE_METADATA_SELECTOR_HPP
-#define PB_DS_TRIE_NODE_METADATA_SELECTOR_HPP
+#ifndef PB_DS_TRIE_NODE_METADATA_DISPATCH_HPP
+#define PB_DS_TRIE_NODE_METADATA_DISPATCH_HPP
-#include <ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp>
+#include <ext/pb_ds/detail/branch_policy/null_node_metadata.hpp>
#include <ext/pb_ds/detail/types_traits.hpp>
namespace __gnu_pbds
{
namespace detail
{
+ /**
+ * @addtogroup traits Traits
+ * @{
+ */
- template<typename Node_Update, bool Null>
- struct trie_metadata_helper
- {
- typedef typename Node_Update::metadata_type type;
- };
+ /// Trie metadata helper.
+ template<typename Node_Update, bool _BTp>
+ struct trie_metadata_helper;
+ /// Specialization, false.
template<typename Node_Update>
- struct trie_metadata_helper<
- Node_Update,
- true>
- {
- typedef null_node_metadata type;
- };
+ struct trie_metadata_helper<Node_Update, false>
+ {
+ typedef typename Node_Update::metadata_type type;
+ };
+ /// Specialization, true.
+ template<typename Node_Update>
+ struct trie_metadata_helper<Node_Update, true>
+ {
+ typedef null_type type;
+ };
+
+ /// Trie node metadata dispatch.
template<typename Key,
typename Data,
- class Cmp_Fn,
- template<typename Const_Node_Iterator,
- class Const_Iterator,
- class Cmp_Fn_,
- class Allocator_>
- class Node_Update,
- class Allocator>
- struct trie_node_metadata_selector
+ typename Cmp_Fn,
+ template<typename Node_CItr,
+ typename Const_Iterator,
+ typename Cmp_Fn_,
+ typename _Alloc_>
+ class Node_Update,
+ typename _Alloc>
+ struct trie_node_metadata_dispatch
{
private:
- typedef
- dumconst_node_iterator<
- Key,
- Data,
- Allocator>
- dumconst_node_it;
+ typedef dumnode_const_iterator<Key, Data, _Alloc> __it_type;
+ typedef Node_Update<__it_type, __it_type, Cmp_Fn, _Alloc> __node_u;
+ typedef null_node_update<__it_type, __it_type, Cmp_Fn, _Alloc> __nnode_u;
enum
{
- null_update =
- is_same<
- Node_Update<
- dumconst_node_it,
- dumconst_node_it,
- Cmp_Fn,
- Allocator>,
- null_trie_node_update<
- dumconst_node_it,
- dumconst_node_it,
- Cmp_Fn,
- Allocator> >::value
+ null_update = is_same<__node_u, __nnode_u>::value
};
public:
- typedef
- typename trie_metadata_helper<
- Node_Update<
- dumconst_node_it,
- dumconst_node_it,
- Cmp_Fn,
- Allocator>,
- null_update>::type
- type;
+ typedef typename trie_metadata_helper<__node_u, null_update>::type type;
};
-
+ //@}
} // namespace detail
} // namespace __gnu_pbds
-#endif // #ifndef PB_DS_TRIE_NODE_METADATA_SELECTOR_HPP
+#endif // #ifndef PB_DS_TRIE_NODE_METADATA_DISPATCH_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp
deleted file mode 100644
index 65245e9dc9..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file null_node_update_imp.hpp
- * Contains an implementation of null_node_update.
- */
-
-PB_DS_CLASS_T_DEC
-template<typename Const_Node_Iterator_,
- typename Node_Iterator_,
- class E_Access_Traits_,
- typename Allocator_>
-inline void
-PB_DS_CLASS_C_DEC::
-swap(null_trie_node_update< Const_Node_Iterator_, Node_Iterator_, E_Access_Traits_, Allocator_>& /*other*/)
-{ }
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
index cb8e247412..ff9595e94a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file order_statistics_imp.hpp
+ * @file trie_policy/order_statistics_imp.hpp
* Contains forward declarations for order_statistics_key
*/
@@ -44,35 +44,31 @@ PB_DS_CLASS_C_DEC::
find_by_order(size_type order)
{
if (empty())
- return (end());
+ return end();
++order;
-
node_iterator nd_it = node_begin();
while (true)
{
if (order > nd_it.get_metadata())
- return (++base_type::rightmost_it(nd_it));
+ return ++base_type::rightmost_it(nd_it);
const size_type num_children = nd_it.num_children();
-
if (num_children == 0)
- return (*nd_it);
+ return *nd_it;
for (size_type i = 0; i < num_children; ++i)
- {
+ {
node_iterator child_nd_it = nd_it.get_child(i);
-
if (order <= child_nd_it.get_metadata())
- {
+ {
i = num_children;
-
nd_it = child_nd_it;
- }
+ }
else
order -= child_nd_it.get_metadata();
- }
+ }
}
}
@@ -80,81 +76,70 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
find_by_order(size_type order) const
-{
- return (const_cast<PB_DS_CLASS_C_DEC* >(this)->find_by_order(order));
-}
+{ return const_cast<PB_DS_CLASS_C_DEC*>(this)->find_by_order(order); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-order_of_key(const_key_reference r_key) const
+order_of_key(key_const_reference r_key) const
{
- const E_Access_Traits& r_traits =
- const_cast<PB_DS_CLASS_C_DEC* >(this)->get_e_access_traits();
+ const _ATraits& r_traits =
+ const_cast<PB_DS_CLASS_C_DEC* >(this)->get_access_traits();
- return (order_of_prefix(
- r_traits.begin(r_key),
- r_traits.end(r_key)));
+ return order_of_prefix(r_traits.begin(r_key), r_traits.end(r_key));
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
-order_of_prefix(typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e) const
+order_of_prefix(typename access_traits::const_iterator b,
+ typename access_traits::const_iterator e) const
{
if (empty())
- return (0);
-
- const E_Access_Traits& r_traits =
- const_cast<PB_DS_CLASS_C_DEC* >(this)->get_e_access_traits();
-
- const_node_iterator nd_it = node_begin();
+ return 0;
- const_node_iterator end_nd_it = node_end();
+ const _ATraits& r_traits =
+ const_cast<PB_DS_CLASS_C_DEC*>(this)->get_access_traits();
+ node_const_iterator nd_it = node_begin();
+ node_const_iterator end_nd_it = node_end();
size_type ord = 0;
while (true)
{
const size_type num_children = nd_it.num_children();
-
if (num_children == 0)
- {
- const_key_reference r_key =
- base_type::extract_key(*(*nd_it));
-
- typename e_access_traits::const_iterator key_b =
+ {
+ key_const_reference r_key = base_type::extract_key(*(*nd_it));
+ typename access_traits::const_iterator key_b =
r_traits.begin(r_key);
- typename e_access_traits::const_iterator key_e =
+ typename access_traits::const_iterator key_e =
r_traits.end(r_key);
- return ((base_type::less( key_b, key_e, b, e, r_traits))?
- ord + 1 :
- ord);
- }
-
- const_node_iterator next_nd_it = end_nd_it;
+ return (base_type::less(key_b, key_e, b, e, r_traits)) ?
+ ord + 1 : ord;
+ }
+ node_const_iterator next_nd_it = end_nd_it;
size_type i = num_children - 1;
do
- {
- const_node_iterator child_nd_it = nd_it.get_child(i);
+ {
+ node_const_iterator child_nd_it = nd_it.get_child(i);
if (next_nd_it != end_nd_it)
ord += child_nd_it.get_metadata();
- else if (!base_type::less(
- b, e,
+ else if (!base_type::less(b, e,
child_nd_it.valid_prefix().first,
child_nd_it.valid_prefix().second,
r_traits))
next_nd_it = child_nd_it;
- }
+ }
while (i-- > 0);
if (next_nd_it == end_nd_it)
- return (ord);
+ return ord;
nd_it = next_nd_it;
}
@@ -163,19 +148,13 @@ order_of_prefix(typename e_access_traits::const_iterator b, typename e_access_tr
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-operator()(node_iterator nd_it, const_node_iterator /*end_nd_it*/) const
+operator()(node_iterator nd_it, node_const_iterator /*end_nd_it*/) const
{
const size_type num_children = nd_it.num_children();
-
size_type children_rank = 0;
-
for (size_type i = 0; i < num_children; ++i)
children_rank += nd_it.get_child(i).get_metadata();
- const_cast<size_type& >(nd_it.get_metadata()) =(num_children == 0)? 1 : children_rank;
+ const size_type res = (num_children == 0) ? 1 : children_rank;
+ const_cast<size_type&>(nd_it.get_metadata()) = res;
}
-
-PB_DS_CLASS_T_DEC
-PB_DS_CLASS_C_DEC::
-~trie_order_statistics_node_update()
-{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
index cdd8989295..04771dd725 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file prefix_search_node_update_imp.hpp
+ * @file trie_policy/prefix_search_node_update_imp.hpp
* Contains an implementation of prefix_search_node_update.
*/
@@ -43,13 +43,10 @@ std::pair<
typename PB_DS_CLASS_C_DEC::const_iterator,
typename PB_DS_CLASS_C_DEC::const_iterator>
PB_DS_CLASS_C_DEC::
-prefix_range(const_key_reference r_key) const
+prefix_range(key_const_reference r_key) const
{
- const e_access_traits& r_traits = get_e_access_traits();
-
- return (prefix_range(
- r_traits.begin(r_key),
- r_traits.end(r_key)));
+ const access_traits& r_traits = get_access_traits();
+ return (prefix_range(r_traits.begin(r_key), r_traits.end(r_key)));
}
PB_DS_CLASS_T_DEC
@@ -57,11 +54,10 @@ std::pair<
typename PB_DS_CLASS_C_DEC::iterator,
typename PB_DS_CLASS_C_DEC::iterator>
PB_DS_CLASS_C_DEC::
-prefix_range(const_key_reference r_key)
+prefix_range(key_const_reference r_key)
{
- return (prefix_range(
- get_e_access_traits().begin(r_key),
- get_e_access_traits().end(r_key)));
+ return (prefix_range(get_access_traits().begin(r_key),
+ get_access_traits().end(r_key)));
}
PB_DS_CLASS_T_DEC
@@ -69,13 +65,13 @@ std::pair<
typename PB_DS_CLASS_C_DEC::const_iterator,
typename PB_DS_CLASS_C_DEC::const_iterator>
PB_DS_CLASS_C_DEC::
-prefix_range(typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e) const
+prefix_range(typename access_traits::const_iterator b,
+ typename access_traits::const_iterator e) const
{
const std::pair<iterator, iterator> non_const_ret =
const_cast<PB_DS_CLASS_C_DEC* >(this)->prefix_range(b, e);
- return (std::make_pair(
- const_iterator(non_const_ret.first),
+ return (std::make_pair(const_iterator(non_const_ret.first),
const_iterator(non_const_ret.second)));
}
@@ -84,14 +80,13 @@ std::pair<
typename PB_DS_CLASS_C_DEC::iterator,
typename PB_DS_CLASS_C_DEC::iterator>
PB_DS_CLASS_C_DEC::
-prefix_range(typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e)
+prefix_range(typename access_traits::const_iterator b,
+ typename access_traits::const_iterator e)
{
- Node_Iterator nd_it = node_begin();
- Node_Iterator end_nd_it = node_end();
-
- const e_access_traits& r_traits =
- get_e_access_traits();
+ Node_Itr nd_it = node_begin();
+ Node_Itr end_nd_it = node_end();
+ const access_traits& r_traits = get_access_traits();
const size_type given_range_length = std::distance(b, e);
while (true)
@@ -100,17 +95,14 @@ prefix_range(typename e_access_traits::const_iterator b, typename e_access_trait
return (std::make_pair(end(), end()));
const size_type common_range_length =
- PB_DS_BASE_C_DEC::common_prefix_len(nd_it, b, e, r_traits);
+ base_type::common_prefix_len(nd_it, b, e, r_traits);
if (common_range_length >= given_range_length)
- {
- iterator ret_b = leftmost_it(nd_it);
-
- iterator ret_e = rightmost_it(nd_it);
-
+ {
+ iterator ret_b = this->leftmost_it(nd_it);
+ iterator ret_e = this->rightmost_it(nd_it);
return (std::make_pair(ret_b, ++ret_e));
- }
-
+ }
nd_it = next_child(nd_it, b, e, end_nd_it, r_traits);
}
}
@@ -118,34 +110,30 @@ prefix_range(typename e_access_traits::const_iterator b, typename e_access_trait
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::node_iterator
PB_DS_CLASS_C_DEC::
-next_child(node_iterator nd_it, typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e, node_iterator end_nd_it, const e_access_traits& r_traits)
+next_child(node_iterator nd_it, typename access_traits::const_iterator b,
+ typename access_traits::const_iterator e, node_iterator end_nd_it,
+ const access_traits& r_traits)
{
const size_type num_children = nd_it.num_children();
-
node_iterator ret = end_nd_it;
-
size_type max_length = 0;
-
for (size_type i = 0; i < num_children; ++i)
{
node_iterator pot = nd_it.get_child(i);
-
const size_type common_range_length =
- PB_DS_BASE_C_DEC::common_prefix_len( pot, b, e, r_traits);
+ base_type::common_prefix_len(pot, b, e, r_traits);
if (common_range_length > max_length)
- {
+ {
ret = pot;
-
max_length = common_range_length;
- }
+ }
}
-
return (ret);
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
-operator()(node_iterator /*nd_it*/, const_node_iterator /*end_nd_it*/) const
+operator()(node_iterator /*nd_it*/, node_const_iterator /*end_nd_it*/) const
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
new file mode 100644
index 0000000000..467c077366
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file trie_policy/sample_trie_access_traits.hpp
+ * Contains a sample probe policy.
+ */
+
+#ifndef PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP
+#define PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP
+
+namespace __gnu_pbds
+{
+ /// A sample trie element access traits.
+ struct sample_trie_access_traits
+ {
+ typedef std::size_t size_type;
+ typedef std::string key_type;
+
+ typedef typename _Alloc::template rebind<key_type> __rebind_k;
+ typedef typename __rebind_k::other::const_reference key_const_reference;
+ typedef std::string::const_iterator const_iterator;
+
+ /// Element type.
+ typedef char e_type;
+
+ enum
+ {
+ max_size = 4
+ };
+
+ /// Returns a const_iterator to the first element of r_key.
+ inline static const_iterator
+ begin(key_const_reference);
+
+ /// Returns a const_iterator to the after-last element of r_key.
+ inline static const_iterator
+ end(key_const_reference);
+
+ /// Maps an element to a position.
+ inline static size_type
+ e_pos(e_type);
+ };
+}
+#endif // #ifndef PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
deleted file mode 100644
index 2ecad89c9a..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file sample_trie_e_access_traits.hpp
- * Contains a sample probe policy.
- */
-
-#ifndef PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP
-#define PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP
-
-// A sample trie element-access traits.
-class sample_trie_e_access_traits
-{
-
-public:
-
- // Size type.
- typedef std::size_t size_type;
-
- // Key type.
- typedef std::string key_type;
-
- // Const key reference type.
- typedef
- typename Allocator::template rebind<
- key_type>::other::const_reference
- const_key_reference;
-
- // Element const iterator type.
- typedef std::string::const_iterator const_iterator;
-
- // Element type.
- typedef char e_type;
-
- enum
- {
- max_size = 4
- };
-
-public:
-
- // Returns a const_iterator to the first element of r_key.
- inline static const_iterator
- begin(const_key_reference r_key);
-
- // Returns a const_iterator to the after-last element of r_key.
- inline static const_iterator
- end(const_key_reference r_key);
-
- // Maps an element to a position.
- inline static size_type
- e_pos(e_type e);
-
-};
-
-#endif // #ifndef PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
index 8b2c6b591f..6c71ba81ce 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
@@ -34,39 +34,31 @@
// warranty.
/**
- * @file sample_trie_node_update.hpp
+ * @file trie_policy/sample_trie_node_update.hpp
* Contains a samle node update functor.
*/
#ifndef PB_DS_SAMPLE_TRIE_NODE_UPDATOR_HPP
#define PB_DS_SAMPLE_TRIE_NODE_UPDATOR_HPP
-// A sample node updator.
-template<typename Const_Node_Iterator,
-
- class Node_Iterator,
-
- class E_Access_Traits,
-
- class Allocator
- >
-class sample_trie_node_update
+namespace __gnu_pbds
{
-
-public:
-
- // Metadata type.
- typedef std::size_t metadata_type;
-
-protected:
-
- // Default constructor.
- sample_trie_node_update();
-
- // Updates the rank of a node through a node_iterator node_it; end_nd_it is the end node iterator.
- inline void
- operator()(node_iterator node_it, const_node_iterator end_nd_it) const;
-
-};
-
+ /// A sample node updator.
+ template<typename Node_CItr, typename Node_Itr,
+ typename _ATraits, typename _Alloc>
+ class sample_trie_node_update
+ {
+ public:
+ typedef std::size_t metadata_type;
+
+ protected:
+ /// Default constructor.
+ sample_trie_node_update();
+
+ /// Updates the rank of a node through a node_iterator node_it;
+ /// end_nd_it is the end node iterator.
+ inline void
+ operator()(node_iterator, node_const_iterator) const;
+ };
+}
#endif // #ifndef PB_DS_SAMPLE_TRIE_NODE_UPDATOR_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp
deleted file mode 100644
index 228a4a5dc3..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file string_trie_e_access_traits_imp.hpp
- * Contains a policy for extracting character positions from
- * a string for a vector-based PATRICIA tree
- */
-
-PB_DS_CLASS_T_DEC
-detail::integral_constant<int, Reverse> PB_DS_CLASS_C_DEC::s_rev_ind;
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::size_type
-PB_DS_CLASS_C_DEC::
-e_pos(e_type e)
-{
- return (static_cast<size_type>(e - min_e_val));
-}
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_iterator
-PB_DS_CLASS_C_DEC::
-begin(const_key_reference r_key)
-{
- return (begin_imp(r_key, s_rev_ind));
-}
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_iterator
-PB_DS_CLASS_C_DEC::
-end(const_key_reference r_key)
-{
- return (end_imp(r_key, s_rev_ind));
-}
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_iterator
-PB_DS_CLASS_C_DEC::
-begin_imp(const_key_reference r_key, detail::false_type)
-{
- return (r_key.begin());
-}
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_iterator
-PB_DS_CLASS_C_DEC::
-begin_imp(const_key_reference r_key, detail::true_type)
-{
- return (r_key.rbegin());
-}
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_iterator
-PB_DS_CLASS_C_DEC::
-end_imp(const_key_reference r_key, detail::false_type)
-{
- return (r_key.end());
-}
-
-PB_DS_CLASS_T_DEC
-inline typename PB_DS_CLASS_C_DEC::const_iterator
-PB_DS_CLASS_C_DEC::
-end_imp(const_key_reference r_key, detail::true_type)
-{
- return (r_key.rend());
-}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
index db912a008f..2668a87d92 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
@@ -34,157 +34,121 @@
// warranty.
/**
- * @file trie_policy_base.hpp
+ * @file trie_policy/trie_policy_base.hpp
* Contains an implementation of trie_policy_base.
*/
#ifndef PB_DS_TRIE_POLICY_BASE_HPP
#define PB_DS_TRIE_POLICY_BASE_HPP
-#include <ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp>
+#include <ext/pb_ds/detail/branch_policy/branch_policy.hpp>
namespace __gnu_pbds
{
namespace detail
{
-
-#define PB_DS_CLASS_T_DEC \
- template< \
- class Const_Node_Iterator, \
- class Node_Iterator, \
- class E_Access_Traits, \
- typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- trie_policy_base< \
- Const_Node_Iterator, \
- Node_Iterator, \
- E_Access_Traits, \
- Allocator>
-
-#define PB_DS_BASE_C_DEC \
- basic_tree_policy_base< \
- Const_Node_Iterator, \
- Node_Iterator, \
- Allocator>
-
- template<typename Const_Node_Iterator,
- class Node_Iterator,
- class E_Access_Traits,
- class Allocator>
- class trie_policy_base : public PB_DS_BASE_C_DEC
+ /// Base class for trie policies.
+ template<typename Node_CItr, typename Node_Itr,
+ typename _ATraits, typename _Alloc>
+ class trie_policy_base
+ : public branch_policy<Node_CItr, Node_Itr, _Alloc>
{
+ typedef branch_policy<Node_CItr, Node_Itr, _Alloc> base_type;
public:
-
- typedef E_Access_Traits e_access_traits;
-
- typedef Allocator allocator_type;
-
- typedef typename allocator_type::size_type size_type;
-
- typedef null_node_metadata metadata_type;
-
- typedef Const_Node_Iterator const_node_iterator;
-
- typedef Node_Iterator node_iterator;
-
- typedef typename const_node_iterator::value_type const_iterator;
-
- typedef typename node_iterator::value_type iterator;
-
- public:
-
- typedef typename PB_DS_BASE_C_DEC::key_type key_type;
-
- typedef
- typename PB_DS_BASE_C_DEC::const_key_reference
- const_key_reference;
+ typedef _ATraits access_traits;
+ typedef _Alloc allocator_type;
+ typedef typename allocator_type::size_type size_type;
+ typedef null_type metadata_type;
+ typedef Node_CItr node_const_iterator;
+ typedef Node_Itr node_iterator;
+ typedef typename node_const_iterator::value_type const_iterator;
+ typedef typename node_iterator::value_type iterator;
+ typedef typename base_type::key_type key_type;
+ typedef typename base_type::key_const_reference key_const_reference;
protected:
-
virtual const_iterator
end() const = 0;
virtual iterator
end() = 0;
- virtual const_node_iterator
+ virtual node_const_iterator
node_begin() const = 0;
virtual node_iterator
node_begin() = 0;
- virtual const_node_iterator
+ virtual node_const_iterator
node_end() const = 0;
virtual node_iterator
node_end() = 0;
- virtual const e_access_traits&
- get_e_access_traits() const = 0;
+ virtual const access_traits&
+ get_access_traits() const = 0;
private:
- typedef
- std::pair<
- typename e_access_traits::const_iterator,
- typename e_access_traits::const_iterator>
- prefix_range_t;
-
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef typename access_traits::const_iterator e_const_iterator;
+ typedef std::pair<e_const_iterator, e_const_iterator> prefix_range_t;
protected:
static size_type
- common_prefix_len(node_iterator nd_it, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits);
+ common_prefix_len(node_iterator, e_const_iterator,
+ e_const_iterator, const access_traits&);
static iterator
- leftmost_it(node_iterator nd_it);
+ leftmost_it(node_iterator);
static iterator
- rightmost_it(node_iterator nd_it);
+ rightmost_it(node_iterator);
static bool
- less(typename e_access_traits::const_iterator b_l, typename e_access_traits::const_iterator e_l, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits);
+ less(e_const_iterator, e_const_iterator, e_const_iterator,
+ e_const_iterator, const access_traits&);
};
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Node_CItr, typename Node_Itr, \
+ typename _ATraits, typename _Alloc>
+
+#define PB_DS_CLASS_C_DEC \
+ trie_policy_base<Node_CItr, Node_Itr, _ATraits, _Alloc>
+
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
- common_prefix_len(node_iterator nd_it, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits)
+ common_prefix_len(node_iterator nd_it, e_const_iterator b_r,
+ e_const_iterator e_r, const access_traits& r_traits)
{
prefix_range_t pref_range = nd_it.valid_prefix();
- typename e_access_traits::const_iterator b_l = pref_range.first;
- typename e_access_traits::const_iterator e_l = pref_range.second;
+ e_const_iterator b_l = pref_range.first;
+ e_const_iterator e_l = pref_range.second;
- const size_type range_length_l =
- std::distance(b_l, e_l);
-
- const size_type range_length_r =
- std::distance(b_r, e_r);
+ const size_type range_length_l = std::distance(b_l, e_l);
+ const size_type range_length_r = std::distance(b_r, e_r);
if (range_length_r < range_length_l)
{
std::swap(b_l, b_r);
-
std::swap(e_l, e_r);
}
size_type ret = 0;
-
while (b_l != e_l)
{
if (r_traits.e_pos(*b_l) != r_traits.e_pos(*b_r))
- return (ret);
+ return ret;
++ret;
-
++b_l;
-
++b_r;
}
- return (ret);
+ return ret;
}
PB_DS_CLASS_T_DEC
@@ -193,9 +157,9 @@ namespace __gnu_pbds
leftmost_it(node_iterator nd_it)
{
if (nd_it.num_children() == 0)
- return (*nd_it);
+ return *nd_it;
- return (leftmost_it(nd_it.get_child(0)));
+ return leftmost_it(nd_it.get_child(0));
}
PB_DS_CLASS_T_DEC
@@ -206,44 +170,38 @@ namespace __gnu_pbds
const size_type num_children = nd_it.num_children();
if (num_children == 0)
- return (*nd_it);
+ return *nd_it;
- return (rightmost_it(nd_it.get_child(num_children - 1)));
+ return rightmost_it(nd_it.get_child(num_children - 1));
}
PB_DS_CLASS_T_DEC
bool
PB_DS_CLASS_C_DEC::
- less(typename e_access_traits::const_iterator b_l, typename e_access_traits::const_iterator e_l, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits)
+ less(e_const_iterator b_l, e_const_iterator e_l,
+ e_const_iterator b_r, e_const_iterator e_r,
+ const access_traits& r_traits)
{
while (b_l != e_l)
{
if (b_r == e_r)
- return (false);
-
- size_type l_pos =
- r_traits.e_pos(*b_l);
- size_type r_pos =
- r_traits.e_pos(*b_r);
+ return false;
+ size_type l_pos = r_traits.e_pos(*b_l);
+ size_type r_pos = r_traits.e_pos(*b_r);
if (l_pos != r_pos)
return (l_pos < r_pos);
++b_l;
++b_r;
}
-
- return (b_r != e_r);
+ return b_r != e_r;
}
#undef PB_DS_CLASS_T_DEC
-
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
-
} // namespace detail
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_TRIE_POLICY_BASE_HPP
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
new file mode 100644
index 0000000000..c6d9c49013
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
@@ -0,0 +1,99 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file trie_policy/trie_string_access_traits_imp.hpp
+ * Contains a policy for extracting character positions from
+ * a string for a vector-based PATRICIA tree
+ */
+
+PB_DS_CLASS_T_DEC
+detail::integral_constant<int, Reverse> PB_DS_CLASS_C_DEC::s_rev_ind;
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::size_type
+PB_DS_CLASS_C_DEC::
+e_pos(e_type e)
+{
+ return (static_cast<size_type>(e - min_e_val));
+}
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::const_iterator
+PB_DS_CLASS_C_DEC::
+begin(key_const_reference r_key)
+{
+ return (begin_imp(r_key, s_rev_ind));
+}
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::const_iterator
+PB_DS_CLASS_C_DEC::
+end(key_const_reference r_key)
+{
+ return (end_imp(r_key, s_rev_ind));
+}
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::const_iterator
+PB_DS_CLASS_C_DEC::
+begin_imp(key_const_reference r_key, detail::false_type)
+{
+ return (r_key.begin());
+}
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::const_iterator
+PB_DS_CLASS_C_DEC::
+begin_imp(key_const_reference r_key, detail::true_type)
+{
+ return (r_key.rbegin());
+}
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::const_iterator
+PB_DS_CLASS_C_DEC::
+end_imp(key_const_reference r_key, detail::false_type)
+{
+ return (r_key.end());
+}
+
+PB_DS_CLASS_T_DEC
+inline typename PB_DS_CLASS_C_DEC::const_iterator
+PB_DS_CLASS_C_DEC::
+end_imp(key_const_reference r_key, detail::true_type)
+{
+ return (r_key.rend());
+}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp b/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp
index 143110c0ad..79899857b0 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp
@@ -34,7 +34,7 @@
// warranty.
/**
- * @file type_utils.hpp
+ * @file detail/type_utils.hpp
* Contains utilities for handnling types. All of these classes are based on
* Modern C++ by Andrei Alxandrescu.
*/
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp
index 6d5a078380..cb0afdbd70 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,14 +34,16 @@
// warranty.
/**
- * @file types_traits.hpp
+ * @file detail/types_traits.hpp
* Contains a traits class of types used by containers.
*/
#ifndef PB_DS_TYPES_TRAITS_HPP
#define PB_DS_TYPES_TRAITS_HPP
-#include <ext/pb_ds/detail/basic_types.hpp>
+#include <algorithm>
+#include <utility>
+#include <ext/pb_ds/tag_and_trait.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <utility>
@@ -49,34 +51,238 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Key, typename Mapped, typename Alloc, bool Store_Extra>
- struct vt_base_selector
- {
- typedef value_type_base<Key, Mapped, Alloc, Store_Extra> type;
- };
+ /**
+ * @addtogroup traits Traits
+ * @{
+ */
+
+ /// Primary template.
+ template<typename Key, typename Mapped>
+ struct no_throw_copies
+ {
+ static const bool __simple = is_simple<Key>::value
+ && is_simple<Mapped>::value;
+ typedef integral_constant<int, __simple> indicator;
+ };
+
+ /// Specialization.
+ template<typename Key>
+ struct no_throw_copies<Key, null_type>
+ {
+ typedef integral_constant<int, is_simple<Key>::value> indicator;
+ };
+
+
+ /// Stored value.
+ template<typename _Tv>
+ struct stored_value
+ {
+ typedef _Tv value_type;
+ value_type m_value;
+ };
+
+ /// Stored hash.
+ template<typename _Th>
+ struct stored_hash
+ {
+ typedef _Th hash_type;
+ hash_type m_hash;
+ };
+
+ /// Primary template for representation of stored data.
+ /// Two types of data can be stored: value and hash.
+ template<typename _Tv, typename _Th>
+ struct stored_data
+ : public stored_value<_Tv>, public stored_hash<_Th>
+ { };
+
+ /// Specialization for representation of stored data of just value type.
+ template<typename _Tv>
+ struct stored_data<_Tv, null_type>
+ : public stored_value<_Tv>
+ { };
+
+ /// Primary template.
+ template<typename Key, typename Mapped, typename _Alloc, bool Store_Hash>
+ struct type_base;
+
+ /**
+ * Specialization of type_base for the case where the hash value
+ * is not stored alongside each value.
+ */
+ template<typename Key, typename Mapped, typename _Alloc>
+ struct type_base<Key, Mapped, _Alloc, false>
+ {
+ public:
+ typedef typename _Alloc::size_type size_type;
+
+ private:
+ typedef typename _Alloc::template rebind<Mapped> __rebind_m;
+ typedef typename __rebind_m::other __rebind_ma;
+ typedef std::pair<const Key, Mapped> __value_type;
+ typedef typename _Alloc::template rebind<__value_type> __rebind_v;
+ typedef typename __rebind_v::other __rebind_va;
+
+ public:
+ typedef typename __rebind_ma::value_type mapped_type;
+ typedef typename __rebind_ma::pointer mapped_pointer;
+ typedef typename __rebind_ma::const_pointer mapped_const_pointer;
+ typedef typename __rebind_ma::reference mapped_reference;
+ typedef typename __rebind_ma::const_reference mapped_const_reference;
+
+ typedef typename __rebind_va::value_type value_type;
+ typedef typename __rebind_va::pointer pointer;
+ typedef typename __rebind_va::const_pointer const_pointer;
+ typedef typename __rebind_va::reference reference;
+ typedef typename __rebind_va::const_reference const_reference;
+
+ typedef stored_data<value_type, null_type> stored_data_type;
+ };
+
+ /**
+ * Specialization of type_base for the case where the hash value
+ * is stored alongside each value.
+ */
+ template<typename Key, typename Mapped, typename _Alloc>
+ struct type_base<Key, Mapped, _Alloc, true>
+ {
+ public:
+ typedef typename _Alloc::size_type size_type;
+
+ private:
+ typedef typename _Alloc::template rebind<Mapped> __rebind_m;
+ typedef typename __rebind_m::other __rebind_ma;
+ typedef std::pair<const Key, Mapped> __value_type;
+ typedef typename _Alloc::template rebind<__value_type> __rebind_v;
+ typedef typename __rebind_v::other __rebind_va;
+
+ public:
+ typedef typename __rebind_ma::value_type mapped_type;
+ typedef typename __rebind_ma::pointer mapped_pointer;
+ typedef typename __rebind_ma::const_pointer mapped_const_pointer;
+ typedef typename __rebind_ma::reference mapped_reference;
+ typedef typename __rebind_ma::const_reference mapped_const_reference;
+
+ typedef typename __rebind_va::value_type value_type;
+ typedef typename __rebind_va::pointer pointer;
+ typedef typename __rebind_va::const_pointer const_pointer;
+ typedef typename __rebind_va::reference reference;
+ typedef typename __rebind_va::const_reference const_reference;
+
+ typedef stored_data<value_type, size_type> stored_data_type;
+ };
+
+
+ /**
+ * Specialization of type_base for the case where the hash value
+ * is not stored alongside each value.
+ */
+ template<typename Key, typename _Alloc>
+ struct type_base<Key, null_type, _Alloc, false>
+ {
+ public:
+ typedef typename _Alloc::size_type size_type;
+ typedef Key value_type;
+
+ private:
+ typedef typename _Alloc::template rebind<null_type> __rebind_m;
+ typedef typename __rebind_m::other __rebind_ma;
+ typedef typename _Alloc::template rebind<value_type> __rebind_v;
+ typedef typename __rebind_v::other __rebind_va;
+
+ public:
+ typedef typename __rebind_ma::value_type mapped_type;
+ typedef typename __rebind_ma::pointer mapped_pointer;
+ typedef typename __rebind_ma::const_pointer mapped_const_pointer;
+ typedef typename __rebind_ma::reference mapped_reference;
+ typedef typename __rebind_ma::const_reference mapped_const_reference;
+
+ typedef typename __rebind_va::pointer pointer;
+ typedef typename __rebind_va::const_pointer const_pointer;
+ typedef typename __rebind_va::reference reference;
+ typedef typename __rebind_va::const_reference const_reference;
+
+ typedef stored_data<value_type, null_type> stored_data_type;
+
+ static null_type s_null_type;
+ };
+
+ template<typename Key, typename _Alloc>
+ null_type
+ type_base<Key, null_type, _Alloc, false>::s_null_type;
+
+
+ /**
+ * Specialization of type_base for the case where the hash value
+ * is stored alongside each value.
+ */
+ template<typename Key, typename _Alloc>
+ struct type_base<Key, null_type, _Alloc, true>
+ {
+ public:
+ typedef typename _Alloc::size_type size_type;
+ typedef Key value_type;
+
+ private:
+ typedef typename _Alloc::template rebind<null_type> __rebind_m;
+ typedef typename __rebind_m::other __rebind_ma;
+ typedef typename _Alloc::template rebind<value_type> __rebind_v;
+ typedef typename __rebind_v::other __rebind_va;
+
+ public:
+ typedef typename __rebind_ma::value_type mapped_type;
+ typedef typename __rebind_ma::pointer mapped_pointer;
+ typedef typename __rebind_ma::const_pointer mapped_const_pointer;
+ typedef typename __rebind_ma::reference mapped_reference;
+ typedef typename __rebind_ma::const_reference mapped_const_reference;
+
+ typedef typename __rebind_va::pointer pointer;
+ typedef typename __rebind_va::const_pointer const_pointer;
+ typedef typename __rebind_va::reference reference;
+ typedef typename __rebind_va::const_reference const_reference;
+
+ typedef stored_data<value_type, size_type> stored_data_type;
+
+ static null_type s_null_type;
+ };
+
+ template<typename Key, typename _Alloc>
+ null_type
+ type_base<Key, null_type, _Alloc, true>::s_null_type;
+
+
+ /// Type base dispatch.
+ template<typename Key, typename Mapped, typename _Alloc, bool Store_Hash>
+ struct type_dispatch
+ {
+ typedef type_base<Key, Mapped, _Alloc, Store_Hash> type;
+ };
+
+ /// Traits for abstract types.
+ template<typename Key, typename Mapped, typename _Alloc, bool Store_Hash>
+ struct types_traits
+ : public type_dispatch<Key, Mapped, _Alloc, Store_Hash>::type
+ {
+ private:
+ typedef no_throw_copies<Key, Mapped> __nothrowcopy;
+ typedef typename _Alloc::template rebind<Key>::other __rebind_a;
+
+ public:
+ typedef typename _Alloc::size_type size_type;
+ typedef typename __rebind_a::value_type key_type;
+ typedef typename __rebind_a::pointer key_pointer;
+ typedef typename __rebind_a::const_pointer key_const_pointer;
+ typedef typename __rebind_a::reference key_reference;
+ typedef typename __rebind_a::const_reference key_const_reference;
+ typedef std::pair<size_type, size_type> comp_hash;
+ typedef integral_constant<int, Store_Hash> store_extra;
+ typedef typename __nothrowcopy::indicator no_throw_indicator;
- template<typename Key, typename Mapped, typename Alloc, bool Store_Extra>
- struct types_traits
- : public vt_base_selector<Key, Mapped, Alloc, Store_Extra>::type
- {
- typedef typename Alloc::template rebind<Key>::other key_allocator;
- typedef typename key_allocator::value_type key_type;
- typedef typename key_allocator::pointer key_pointer;
- typedef typename key_allocator::const_pointer const_key_pointer;
- typedef typename key_allocator::reference key_reference;
- typedef typename key_allocator::const_reference const_key_reference;
- typedef typename Alloc::size_type size_type;
-
- // Extra value (used when the extra value is stored with each value).
- typedef std::pair<size_type, size_type> comp_hash;
-
- typedef integral_constant<int, Store_Extra> store_extra;
- store_extra m_store_extra_indicator;
-
- typedef typename no_throw_copies<Key, Mapped>::indicator no_throw_copies;
- no_throw_copies m_no_throw_copies_indicator;
+ store_extra m_store_extra_indicator;
+ no_throw_indicator m_no_throw_copies_indicator;
};
+ //@}
} // namespace detail
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
index 1641792b5f..0cd75fc05a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
@@ -34,88 +34,71 @@
// warranty.
/**
- * @file const_iterator.hpp
+ * @file unordered_iterator/const_iterator.hpp
* Contains an iterator class used for const ranging over the elements of the
- * table.
+ * table.
*/
-// Const range-type iterator.
-class const_iterator_ :
- public const_point_iterator_
-
+/// Const range-type iterator.
+class const_iterator_
+: public point_const_iterator_
{
-
public:
-
- // Category.
+ /// Category.
typedef std::forward_iterator_tag iterator_category;
- // Difference type.
- typedef typename Allocator::difference_type difference_type;
+ /// Difference type.
+ typedef typename _Alloc::difference_type difference_type;
- // Iterator's value type.
+ /// Iterator's value type.
typedef value_type_ value_type;
- // Iterator's pointer type.
+ /// Iterator's pointer type.
typedef pointer_ pointer;
- // Iterator's const pointer type.
+ /// Iterator's const pointer type.
typedef const_pointer_ const_pointer;
- // Iterator's reference type.
+ /// Iterator's reference type.
typedef reference_ reference;
- // Iterator's const reference type.
+ /// Iterator's const reference type.
typedef const_reference_ const_reference;
-public:
-
- // Default constructor.
- inline
- const_iterator_()
-
- : m_p_tbl(0)
+ /// Default constructor.
+ const_iterator_() : m_p_tbl(0)
{ }
- // Increments.
- inline const_iterator_&
+ /// Increments.
+ const_iterator_&
operator++()
{
m_p_tbl->inc_it_state(base_type::m_p_value, m_pos);
-
- return (*this);
+ return *this;
}
- // Increments.
- inline const_iterator_
+ /// Increments.
+ const_iterator_
operator++(int)
{
const_iterator_ ret =* this;
-
m_p_tbl->inc_it_state(base_type::m_p_value, m_pos);
-
- return (ret);
+ return ret;
}
protected:
-
- typedef const_point_iterator_ base_type;
-
-protected:
+ typedef point_const_iterator_ base_type;
/**
* Constructor used by the table to initiate the generalized
* pointer and position (e.g., this is called from within a find()
* of a table.
* */
- inline
- const_iterator_(const_pointer_ p_value, PB_DS_GEN_POS pos, const PB_DS_CLASS_C_DEC* p_tbl) : const_point_iterator_(p_value),
- m_p_tbl(p_tbl),
- m_pos(pos)
+ const_iterator_(const_pointer_ p_value, PB_DS_GEN_POS pos,
+ const PB_DS_CLASS_C_DEC* p_tbl)
+ : point_const_iterator_(p_value), m_p_tbl(p_tbl), m_pos(pos)
{ }
-protected:
-
/**
* Pointer to the table object which created the iterator (used for
* incrementing its position.
@@ -126,4 +109,3 @@ protected:
friend class PB_DS_CLASS_C_DEC;
};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
deleted file mode 100644
index 1cda69bb83..0000000000
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file const_point_iterator.hpp
- * Contains an iterator class returned by the tables' const find and insert
- * methods.
- */
-
-class point_iterator_;
-
-// Const point-type iterator.
-class const_point_iterator_
-{
-
-public:
-
- // Category.
- typedef trivial_iterator_tag iterator_category;
-
- // Difference type.
- typedef trivial_iterator_difference_type difference_type;
-
- // Iterator's value type.
- typedef value_type_ value_type;
-
- // Iterator's pointer type.
- typedef pointer_ pointer;
-
- // Iterator's const pointer type.
- typedef const_pointer_ const_pointer;
-
- // Iterator's reference type.
- typedef reference_ reference;
-
- // Iterator's const reference type.
- typedef const_reference_ const_reference;
-
-public:
-
- inline
- const_point_iterator_(const_pointer p_value) : m_p_value(p_value)
- { }
-
- // Default constructor.
- inline
- const_point_iterator_()
-
- : m_p_value(0)
- { }
-
- // Copy constructor.
- inline
- const_point_iterator_(const const_point_iterator_& other)
-
- : m_p_value(other.m_p_value)
- { }
-
- // Copy constructor.
- inline
- const_point_iterator_(const point_iterator_& other)
-
- : m_p_value(other.m_p_value)
- { }
-
- // Access.
- inline const_pointer
- operator->() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
-
- return (m_p_value);
- }
-
- // Access.
- inline const_reference
- operator*() const
- {
- _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
-
- return (*m_p_value);
- }
-
- // Compares content to a different iterator object.
- inline bool
- operator==(const point_iterator_& other) const
- {
- return (m_p_value == other.m_p_value);
- }
-
- // Compares content to a different iterator object.
- inline bool
- operator==(const const_point_iterator_& other) const
- {
- return (m_p_value == other.m_p_value);
- }
-
- // Compares content (negatively) to a different iterator object.
- inline bool
- operator!=(const point_iterator_& other) const
- {
- return (m_p_value != other.m_p_value);
- }
-
- // Compares content (negatively) to a different iterator object.
- inline bool
- operator!=(const const_point_iterator_& other) const
- {
- return (m_p_value != other.m_p_value);
- }
-
-protected:
- const_pointer m_p_value;
-
- friend class point_iterator_;
-
- friend class PB_DS_CLASS_C_DEC;
-};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
index 1aaa6824a8..781bd44206 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
@@ -39,112 +39,92 @@
* table.
*/
-// Range-type iterator.
-class iterator_ :
- public const_iterator_
-
+/// Range-type iterator.
+class iterator_
+: public const_iterator_
{
-
public:
-
- // Category.
+ /// Category.
typedef std::forward_iterator_tag iterator_category;
- // Difference type.
- typedef typename Allocator::difference_type difference_type;
+ /// Difference type.
+ typedef typename _Alloc::difference_type difference_type;
- // Iterator's value type.
+ /// Iterator's value type.
typedef value_type_ value_type;
- // Iterator's pointer type.
+ /// Iterator's pointer type.
typedef pointer_ pointer;
- // Iterator's const pointer type.
+ /// Iterator's const pointer type.
typedef const_pointer_ const_pointer;
- // Iterator's reference type.
+ /// Iterator's reference type.
typedef reference_ reference;
- // Iterator's const reference type.
+ /// Iterator's const reference type.
typedef const_reference_ const_reference;
-public:
-
- // Default constructor.
+ /// Default constructor.
inline
iterator_()
+ : const_iterator_(0, PB_DS_GEN_POS(), 0) { }
- : const_iterator_(0, PB_DS_GEN_POS(), 0)
- { }
-
- // Conversion to a point-type iterator.
+ /// Conversion to a point-type iterator.
inline
operator point_iterator_()
- {
- return (point_iterator_(
- const_cast<pointer>(const_iterator_::m_p_value)));
- }
+ { return point_iterator_(const_cast<pointer>(const_iterator_::m_p_value)); }
- // Conversion to a point-type iterator.
+ /// Conversion to a point-type iterator.
inline
operator const point_iterator_() const
- {
- return (point_iterator_(
- const_cast<pointer>(const_iterator_::m_p_value)));
- }
+ { return point_iterator_(const_cast<pointer>(const_iterator_::m_p_value)); }
- // Access.
- inline pointer
+ /// Access.
+ pointer
operator->() const
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_p_value != 0);
-
return (const_cast<pointer>(base_type::m_p_value));
}
- // Access.
- inline reference
+ /// Access.
+ reference
operator*() const
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_p_value != 0);
-
return (const_cast<reference>(*base_type::m_p_value));
}
- // Increments.
- inline iterator_&
+ /// Increments.
+ iterator_&
operator++()
{
base_type::m_p_tbl->inc_it_state(base_type::m_p_value, base_type::m_pos);
-
- return (*this);
+ return *this;
}
- // Increments.
- inline iterator_
+ /// Increments.
+ iterator_
operator++(int)
{
iterator_ ret =* this;
-
base_type::m_p_tbl->inc_it_state(base_type::m_p_value, base_type::m_pos);
-
- return (ret);
+ return ret;
}
protected:
typedef const_iterator_ base_type;
-protected:
-
/**
* Constructor used by the table to initiate the generalized
* pointer and position (e.g., this is called from within a find()
* of a table.
* */
inline
- iterator_(pointer p_value, PB_DS_GEN_POS pos, PB_DS_CLASS_C_DEC* p_tbl) : const_iterator_(p_value, pos, p_tbl)
+ iterator_(pointer p_value, PB_DS_GEN_POS pos, PB_DS_CLASS_C_DEC* p_tbl)
+ : const_iterator_(p_value, pos, p_tbl)
{ }
friend class PB_DS_CLASS_C_DEC;
};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
new file mode 100644
index 0000000000..fa33f22df4
--- /dev/null
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
@@ -0,0 +1,133 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file unordered_iterator/point_const_iterator.hpp
+ * Contains an iterator class returned by the tables' const find and insert
+ * methods.
+ */
+
+class point_iterator_;
+
+/// Const point-type iterator.
+class point_const_iterator_
+{
+public:
+ /// Category.
+ typedef trivial_iterator_tag iterator_category;
+
+ /// Difference type.
+ typedef trivial_iterator_difference_type difference_type;
+
+ /// Iterator's value type.
+ typedef value_type_ value_type;
+
+ /// Iterator's pointer type.
+ typedef pointer_ pointer;
+
+ /// Iterator's const pointer type.
+ typedef const_pointer_ const_pointer;
+
+ /// Iterator's reference type.
+ typedef reference_ reference;
+
+ /// Iterator's const reference type.
+ typedef const_reference_ const_reference;
+
+ inline
+ point_const_iterator_(const_pointer p_value) : m_p_value(p_value)
+ { }
+
+ /// Default constructor.
+ inline
+ point_const_iterator_() : m_p_value(0)
+ { }
+
+ /// Copy constructor.
+ inline
+ point_const_iterator_(const point_const_iterator_& other)
+ : m_p_value(other.m_p_value)
+ { }
+
+ /// Copy constructor.
+ inline
+ point_const_iterator_(const point_iterator_& other)
+ : m_p_value(other.m_p_value)
+ { }
+
+ /// Access.
+ const_pointer
+ operator->() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
+ return m_p_value;
+ }
+
+ /// Access.
+ const_reference
+ operator*() const
+ {
+ _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
+ return *m_p_value;
+ }
+
+ /// Compares content to a different iterator object.
+ bool
+ operator==(const point_iterator_& other) const
+ { return m_p_value == other.m_p_value; }
+
+ /// Compares content to a different iterator object.
+ bool
+ operator==(const point_const_iterator_& other) const
+ { return m_p_value == other.m_p_value; }
+
+ /// Compares content (negatively) to a different iterator object.
+ bool
+ operator!=(const point_iterator_& other) const
+ { return m_p_value != other.m_p_value; }
+
+ /// Compares content (negatively) to a different iterator object.
+ bool
+ operator!=(const point_const_iterator_& other) const
+ { return m_p_value != other.m_p_value; }
+
+protected:
+ const_pointer m_p_value;
+
+ friend class point_iterator_;
+
+ friend class PB_DS_CLASS_C_DEC;
+};
+
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
index e17a5bf172..0dd3946bf5 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
@@ -39,105 +39,88 @@
* methods.
*/
-// Find type iterator.
+/// Find type iterator.
class point_iterator_
{
-
public:
-
- // Category.
+ /// Category.
typedef trivial_iterator_tag iterator_category;
- // Difference type.
+ /// Difference type.
typedef trivial_iterator_difference_type difference_type;
- // Iterator's value type.
+ /// Iterator's value type.
typedef value_type_ value_type;
- // Iterator's pointer type.
+ /// Iterator's pointer type.
typedef pointer_ pointer;
- // Iterator's const pointer type.
+ /// Iterator's const pointer type.
typedef const_pointer_ const_pointer;
- // Iterator's reference type.
+ /// Iterator's reference type.
typedef reference_ reference;
- // Iterator's const reference type.
+ /// Iterator's const reference type.
typedef const_reference_ const_reference;
-public:
-
- // Default constructor.
+ /// Default constructor.
inline
point_iterator_()
-
- : m_p_value(0)
+ : m_p_value(0)
{ }
- // Copy constructor.
+ /// Copy constructor.
inline
point_iterator_(const point_iterator_& other)
-
- : m_p_value(other.m_p_value)
+ : m_p_value(other.m_p_value)
{ }
- // Access.
- inline pointer
+ /// Access.
+ pointer
operator->() const
{
_GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
-
return (m_p_value);
}
- // Access.
- inline reference
+ /// Access.
+ reference
operator*() const
{
_GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
-
return (*m_p_value);
}
- // Compares content to a different iterator object.
- inline bool
+ /// Compares content to a different iterator object.
+ bool
operator==(const point_iterator_& other) const
- {
- return (m_p_value == other.m_p_value);
- }
+ { return m_p_value == other.m_p_value; }
- // Compares content to a different iterator object.
- inline bool
- operator==(const const_point_iterator_& other) const
- {
- return (m_p_value == other.m_p_value);
- }
+ /// Compares content to a different iterator object.
+ bool
+ operator==(const point_const_iterator_& other) const
+ { return m_p_value == other.m_p_value; }
- // Compares content to a different iterator object.
- inline bool
+ /// Compares content to a different iterator object.
+ bool
operator!=(const point_iterator_& other) const
- {
- return (m_p_value != other.m_p_value);
- }
+ { return m_p_value != other.m_p_value; }
- // Compares content (negatively) to a different iterator object.
- inline bool
- operator!=(const const_point_iterator_& other) const
- {
- return (m_p_value != other.m_p_value);
- }
+ /// Compares content (negatively) to a different iterator object.
+ bool
+ operator!=(const point_const_iterator_& other) const
+ { return m_p_value != other.m_p_value; }
inline
point_iterator_(pointer p_value) : m_p_value(p_value)
{ }
protected:
- friend class const_point_iterator_;
+ friend class point_const_iterator_;
friend class PB_DS_CLASS_C_DEC;
protected:
pointer m_p_value;
};
-
diff --git a/libstdc++-v3/include/ext/pb_ds/exception.hpp b/libstdc++-v3/include/ext/pb_ds/exception.hpp
index b34e3ed26f..5213fa43aa 100644
--- a/libstdc++-v3/include/ext/pb_ds/exception.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/exception.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,23 +48,29 @@
namespace __gnu_pbds
{
- // Base class for exceptions.
+ /**
+ * @defgroup exceptions-pbds Exceptions
+ * @ingroup pbds
+ * @{
+ */
+
+ /// Base class for exceptions.
struct container_error : public std::logic_error
{
- container_error()
+ container_error()
: std::logic_error(__N("__gnu_pbds::container_error")) { }
};
- // An entry cannot be inserted into a container object for logical
- // reasons (not, e.g., if memory is unabvailable, in which case
- // the allocator_type's exception will be thrown).
+ /// An entry cannot be inserted into a container object for logical
+ /// reasons (not, e.g., if memory is unabvailable, in which case
+ /// the allocator_type's exception will be thrown).
struct insert_error : public container_error { };
- // A join cannot be performed logical reasons (i.e., the ranges of
- // the two container objects being joined overlaps.
+ /// A join cannot be performed logical reasons (i.e., the ranges of
+ /// the two container objects being joined overlaps.
struct join_error : public container_error { };
- // A container cannot be resized.
+ /// A container cannot be resized.
struct resize_error : public container_error { };
#if __EXCEPTIONS
@@ -100,6 +106,7 @@ namespace __gnu_pbds
__throw_resize_error(void)
{ std::abort(); }
#endif
+ //@}
} // namespace __gnu_pbds
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp b/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
index f3bc86e973..dbada2110f 100644
--- a/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -53,20 +53,10 @@
namespace __gnu_pbds
{
- // A null hash function, indicating that the combining hash function
- // is actually a ranged hash function.
- struct null_hash_fn
- { };
-
- // A null probe function, indicating that the combining probe
- // function is actually a ranged probe function.
- struct null_probe_fn
- { };
-
#define PB_DS_CLASS_T_DEC template<typename Size_Type>
#define PB_DS_CLASS_C_DEC linear_probe_fn<Size_Type>
- // A probe sequence policy using fixed increments.
+ /// A probe sequence policy using fixed increments.
template<typename Size_Type = std::size_t>
class linear_probe_fn
{
@@ -77,7 +67,7 @@ namespace __gnu_pbds
swap(PB_DS_CLASS_C_DEC& other);
protected:
- // Returns the i-th offset from the hash value.
+ /// Returns the i-th offset from the hash value.
inline size_type
operator()(size_type i) const;
};
@@ -90,7 +80,7 @@ namespace __gnu_pbds
#define PB_DS_CLASS_T_DEC template<typename Size_Type>
#define PB_DS_CLASS_C_DEC quadratic_probe_fn<Size_Type>
- // A probe sequence policy using square increments.
+ /// A probe sequence policy using square increments.
template<typename Size_Type = std::size_t>
class quadratic_probe_fn
{
@@ -101,7 +91,7 @@ namespace __gnu_pbds
swap(PB_DS_CLASS_C_DEC& other);
protected:
- // Returns the i-th offset from the hash value.
+ /// Returns the i-th offset from the hash value.
inline size_type
operator()(size_type i) const;
};
@@ -114,9 +104,9 @@ namespace __gnu_pbds
#define PB_DS_CLASS_T_DEC template<typename Size_Type>
#define PB_DS_CLASS_C_DEC direct_mask_range_hashing<Size_Type>
- // A mask range-hashing class (uses a bit-mask).
+ /// A mask range-hashing class (uses a bitmask).
template<typename Size_Type = std::size_t>
- class direct_mask_range_hashing
+ class direct_mask_range_hashing
: public detail::mask_based_range_hashing<Size_Type>
{
private:
@@ -132,8 +122,8 @@ namespace __gnu_pbds
void
notify_resized(size_type size);
- // Transforms the __hash value hash into a ranged-hash value
- // (using a bit-mask).
+ /// Transforms the __hash value hash into a ranged-hash value
+ /// (using a bit-mask).
inline size_type
operator()(size_type hash) const;
};
@@ -146,26 +136,26 @@ namespace __gnu_pbds
#define PB_DS_CLASS_T_DEC template<typename Size_Type>
#define PB_DS_CLASS_C_DEC direct_mod_range_hashing<Size_Type>
- // A mod range-hashing class (uses the modulo function).
+ /// A mod range-hashing class (uses the modulo function).
template<typename Size_Type = std::size_t>
- class direct_mod_range_hashing
+ class direct_mod_range_hashing
: public detail::mod_based_range_hashing<Size_Type>
{
public:
typedef Size_Type size_type;
-
+
void
swap(PB_DS_CLASS_C_DEC& other);
protected:
void
notify_resized(size_type size);
-
- // Transforms the __hash value hash into a ranged-hash value
- // (using a modulo operation).
+
+ /// Transforms the __hash value hash into a ranged-hash value
+ /// (using a modulo operation).
inline size_type
operator()(size_type hash) const;
-
+
private:
typedef detail::mod_based_range_hashing<size_type> mod_based_base;
};
@@ -179,8 +169,8 @@ namespace __gnu_pbds
#define PB_DS_CLASS_C_DEC hash_load_check_resize_trigger<External_Load_Access, Size_Type>
#define PB_DS_SIZE_BASE_C_DEC detail::hash_load_check_resize_trigger_size_base<Size_Type, External_Load_Access>
- // A resize trigger policy based on a load check. It keeps the
- // load factor between some load factors load_min and load_max.
+ /// A resize trigger policy based on a load check. It keeps the
+ /// load factor between some load factors load_min and load_max.
template<bool External_Load_Access = false, typename Size_Type = std::size_t>
class hash_load_check_resize_trigger : private PB_DS_SIZE_BASE_C_DEC
{
@@ -189,12 +179,15 @@ namespace __gnu_pbds
enum
{
+ /// Specifies whether the load factor can be accessed
+ /// externally. The two options have different trade-offs in
+ /// terms of flexibility, genericity, and encapsulation.
external_load_access = External_Load_Access
};
- // Default constructor, or constructor taking load_min and
- // load_max load factors between which this policy will keep the
- // actual load.
+ /// Default constructor, or constructor taking load_min and
+ /// load_max load factors between which this policy will keep the
+ /// actual load.
hash_load_check_resize_trigger(float load_min = 0.125,
float load_max = 0.5);
@@ -204,12 +197,12 @@ namespace __gnu_pbds
virtual
~hash_load_check_resize_trigger();
- // Returns a pair of the minimal and maximal loads, respectively.
+ /// Returns a pair of the minimal and maximal loads, respectively.
inline std::pair<float, float>
get_loads() const;
- // Sets the loads through a pair of the minimal and maximal
- // loads, respectively.
+ /// Sets the loads through a pair of the minimal and maximal
+ /// loads, respectively.
void
set_loads(std::pair<float, float> load_pair);
@@ -241,20 +234,20 @@ namespace __gnu_pbds
inline void
notify_erase_search_end();
- // Notifies an element was inserted. The total number of entries
- // in the table is num_entries.
+ /// Notifies an element was inserted. The total number of entries
+ /// in the table is num_entries.
inline void
notify_inserted(size_type num_entries);
inline void
notify_erased(size_type num_entries);
- // Notifies the table was cleared.
+ /// Notifies the table was cleared.
void
notify_cleared();
- // Notifies the table was resized as a result of this object's
- // signifying that a resize is needed.
+ /// Notifies the table was resized as a result of this object's
+ /// signifying that a resize is needed.
void
notify_resized(size_type new_size);
@@ -275,8 +268,8 @@ namespace __gnu_pbds
#ifdef _GLIBCXX_DEBUG
void
- assert_valid() const;
-#endif
+ assert_valid(const char* file, int line) const;
+#endif
float m_load_min;
float m_load_max;
@@ -294,82 +287,101 @@ namespace __gnu_pbds
#define PB_DS_CLASS_T_DEC template<bool External_Load_Access, typename Size_Type>
#define PB_DS_CLASS_C_DEC cc_hash_max_collision_check_resize_trigger<External_Load_Access, Size_Type>
- // A resize trigger policy based on collision checks. It keeps the
- // simulated load factor lower than some given load factor.
+ /// A resize trigger policy based on collision checks. It keeps the
+ /// simulated load factor lower than some given load factor.
template<bool External_Load_Access = false, typename Size_Type = std::size_t>
class cc_hash_max_collision_check_resize_trigger
{
public:
- typedef Size_Type size_type;
+ typedef Size_Type size_type;
enum
{
+ /// Specifies whether the load factor can be accessed
+ /// externally. The two options have different trade-offs in
+ /// terms of flexibility, genericity, and encapsulation.
external_load_access = External_Load_Access
};
- // Default constructor, or constructor taking load, a __load
- // factor which it will attempt to maintain.
+ /// Default constructor, or constructor taking load, a __load
+ /// factor which it will attempt to maintain.
cc_hash_max_collision_check_resize_trigger(float load = 0.5);
void
swap(PB_DS_CLASS_C_DEC& other);
- // Returns the current load.
+ /// Returns the current load.
inline float
get_load() const;
- // Sets the load; does not resize the container.
+ /// Sets the load; does not resize the container.
void
set_load(float load);
protected:
+ /// Notifies an insert search started.
inline void
notify_insert_search_start();
+ /// Notifies a search encountered a collision.
inline void
notify_insert_search_collision();
+ /// Notifies a search ended.
inline void
notify_insert_search_end();
+ /// Notifies a find search started.
inline void
notify_find_search_start();
+ /// Notifies a search encountered a collision.
inline void
notify_find_search_collision();
+ /// Notifies a search ended.
inline void
notify_find_search_end();
+ /// Notifies an erase search started.
inline void
notify_erase_search_start();
+ /// Notifies a search encountered a collision.
inline void
notify_erase_search_collision();
+ /// Notifies a search ended.
inline void
notify_erase_search_end();
+ /// Notifies an element was inserted.
inline void
notify_inserted(size_type num_entries);
+ /// Notifies an element was erased.
inline void
notify_erased(size_type num_entries);
+ /// Notifies the table was cleared.
void
notify_cleared();
- // Notifies the table was resized as a result of this object's
- // signifying that a resize is needed.
+ /// Notifies the table was resized as a result of this object's
+ /// signifying that a resize is needed.
void
notify_resized(size_type new_size);
+ /// Notifies the table was resized externally.
void
notify_externally_resized(size_type new_size);
+ /// Queries whether a resize is needed.
inline bool
is_resize_needed() const;
+ /// Queries whether a grow is needed. This method is called only
+ /// if this object indicated is needed.
inline bool
is_grow_needed(size_type size, size_type num_entries) const;
@@ -395,18 +407,18 @@ namespace __gnu_pbds
#define PB_DS_CLASS_T_DEC template<typename Size_Type>
#define PB_DS_CLASS_C_DEC hash_exponential_size_policy<Size_Type>
- // A size policy whose sequence of sizes form an exponential
- // sequence (typically powers of 2.
+ /// A size policy whose sequence of sizes form an exponential
+ /// sequence (typically powers of 2.
template<typename Size_Type = std::size_t>
class hash_exponential_size_policy
{
public:
typedef Size_Type size_type;
- // Default constructor, or onstructor taking a start_size, or
- // constructor taking a start size and grow_factor. The policy
- // will use the sequence of sizes start_size, start_size*
- // grow_factor, start_size* grow_factor^2, ...
+ /// Default constructor, or onstructor taking a start_size, or
+ /// constructor taking a start size and grow_factor. The policy
+ /// will use the sequence of sizes start_size, start_size*
+ /// grow_factor, start_size* grow_factor^2, ...
hash_exponential_size_policy(size_type start_size = 8,
size_type grow_factor = 2);
@@ -433,17 +445,17 @@ namespace __gnu_pbds
#define PB_DS_CLASS_T_DEC
#define PB_DS_CLASS_C_DEC hash_prime_size_policy
- // A size policy whose sequence of sizes form a nearly-exponential
- // sequence of primes.
+ /// A size policy whose sequence of sizes form a nearly-exponential
+ /// sequence of primes.
class hash_prime_size_policy
{
public:
- // Size type.
+ /// Size type.
typedef std::size_t size_type;
- // Default constructor, or onstructor taking a start_size The
- // policy will use the sequence of sizes approximately
- // start_size, start_size* 2, start_size* 2^2, ...
+ /// Default constructor, or onstructor taking a start_size The
+ /// policy will use the sequence of sizes approximately
+ /// start_size, start_size* 2, start_size* 2^2, ...
hash_prime_size_policy(size_type start_size = 8);
inline void
@@ -469,12 +481,12 @@ namespace __gnu_pbds
#define PB_DS_CLASS_C_DEC hash_standard_resize_policy<Size_Policy, Trigger_Policy, External_Size_Access, Size_Type>
- // A resize policy which delegates operations to size and trigger policies.
+ /// A resize policy which delegates operations to size and trigger policies.
template<typename Size_Policy = hash_exponential_size_policy<>,
typename Trigger_Policy = hash_load_check_resize_trigger<>,
bool External_Size_Access = false,
typename Size_Type = std::size_t>
- class hash_standard_resize_policy
+ class hash_standard_resize_policy
: public Size_Policy, public Trigger_Policy
{
public:
@@ -487,18 +499,18 @@ namespace __gnu_pbds
external_size_access = External_Size_Access
};
- // Default constructor.
+ /// Default constructor.
hash_standard_resize_policy();
- // constructor taking some policies r_size_policy will be copied
- // by the Size_Policy object of this object.
+ /// constructor taking some policies r_size_policy will be copied
+ /// by the Size_Policy object of this object.
hash_standard_resize_policy(const Size_Policy& r_size_policy);
- // constructor taking some policies. r_size_policy will be
- // copied by the Size_Policy object of this
- // object. r_trigger_policy will be copied by the Trigger_Policy
- // object of this object.
- hash_standard_resize_policy(const Size_Policy& r_size_policy,
+ /// constructor taking some policies. r_size_policy will be
+ /// copied by the Size_Policy object of this
+ /// object. r_trigger_policy will be copied by the Trigger_Policy
+ /// object of this object.
+ hash_standard_resize_policy(const Size_Policy& r_size_policy,
const Trigger_Policy& r_trigger_policy);
virtual
@@ -507,29 +519,29 @@ namespace __gnu_pbds
inline void
swap(PB_DS_CLASS_C_DEC& other);
- // Access to the Size_Policy object used.
- Size_Policy&
+ /// Access to the Size_Policy object used.
+ Size_Policy&
get_size_policy();
- // Const access to the Size_Policy object used.
- const Size_Policy&
+ /// Const access to the Size_Policy object used.
+ const Size_Policy&
get_size_policy() const;
- // Access to the Trigger_Policy object used.
- Trigger_Policy&
+ /// Access to the Trigger_Policy object used.
+ Trigger_Policy&
get_trigger_policy();
- // Access to the Trigger_Policy object used.
- const Trigger_Policy&
+ /// Access to the Trigger_Policy object used.
+ const Trigger_Policy&
get_trigger_policy() const;
- // Returns the actual size of the container.
+ /// Returns the actual size of the container.
inline size_type
get_actual_size() const;
- // Resizes the container to suggested_new_size, a suggested size
- // (the actual size will be determined by the Size_Policy
- // object).
+ /// Resizes the container to suggested_new_size, a suggested size
+ /// (the actual size will be determined by the Size_Policy
+ /// object).
void
resize(size_type suggested_new_size);
@@ -576,15 +588,15 @@ namespace __gnu_pbds
inline bool
is_resize_needed() const;
- // Queries what the new size should be, when the container is
- // resized naturally. The current __size of the container is
- // size, and the number of used entries within the container is
- // num_used_e.
+ /// Queries what the new size should be, when the container is
+ /// resized naturally. The current __size of the container is
+ /// size, and the number of used entries within the container is
+ /// num_used_e.
size_type
get_new_size(size_type size, size_type num_used_e) const;
private:
- // Resizes to new_size.
+ /// Resizes to new_size.
virtual void
do_resize(size_type new_size);
@@ -602,4 +614,4 @@ namespace __gnu_pbds
} // namespace __gnu_pbds
-#endif
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
index 54a67c6e56..d73d55f0aa 100644
--- a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -44,96 +44,88 @@
#include <bits/c++config.h>
#include <cstdlib>
-#include <ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp>
+#include <ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp>
+#include <ext/pb_ds/tag_and_trait.hpp>
namespace __gnu_pbds
{
- // A null type that means that each link in a list-based container
- // does not actually need metadata.
- struct null_lu_metadata
- { };
-
-#define PB_DS_CLASS_T_DEC template<typename Allocator>
-#define PB_DS_CLASS_C_DEC move_to_front_lu_policy<Allocator>
-
- // A list-update policy that unconditionally moves elements to the
- // front of the list.
- template<typename Allocator = std::allocator<char> >
- class move_to_front_lu_policy
- {
- public:
- typedef Allocator allocator_type;
-
- // Metadata on which this functor operates.
- typedef null_lu_metadata metadata_type;
-
- // Reference to metadata on which this functor operates.
- typedef typename allocator_type::template rebind<metadata_type>::other metadata_rebind;
- typedef typename metadata_rebind::reference metadata_reference;
-
- // Creates a metadata object.
- metadata_type
- operator()() const;
-
- // Decides whether a metadata object should be moved to the front
- // of the list.
- inline bool
- operator()(metadata_reference r_metadata) const;
-
- private:
- static null_lu_metadata s_metadata;
- };
-
-#include <ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp>
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
-#define PB_DS_CLASS_T_DEC template<std::size_t Max_Count, class Allocator>
-#define PB_DS_CLASS_C_DEC counter_lu_policy<Max_Count, Allocator>
-
- // A list-update policy that moves elements to the front of the list
- // based on the counter algorithm.
- template<std::size_t Max_Count = 5,
- typename Allocator = std::allocator<char> >
- class counter_lu_policy
- : private detail::counter_lu_policy_base<typename Allocator::size_type>
- {
- public:
- typedef Allocator allocator_type;
-
- enum
- {
- max_count = Max_Count
- };
-
- typedef typename allocator_type::size_type size_type;
-
- // Metadata on which this functor operates.
- typedef detail::counter_lu_metadata<size_type> metadata_type;
-
- // Reference to metadata on which this functor operates.
- typedef typename Allocator::template rebind<metadata_type>::other metadata_rebind;
- typedef typename metadata_rebind::reference metadata_reference;
-
- // Creates a metadata object.
- metadata_type
- operator()() const;
-
- // Decides whether a metadata object should be moved to the front
- // of the list.
- bool
- operator()(metadata_reference r_metadata) const;
-
- private:
- typedef detail::counter_lu_policy_base<typename Allocator::size_type> base_type;
- };
-
-#include <ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp>
-
-#undef PB_DS_CLASS_T_DEC
-#undef PB_DS_CLASS_C_DEC
-
+ /**
+ * A list-update policy that unconditionally moves elements to the
+ * front of the list. A null type means that each link in a
+ * list-based container does not actually need metadata.
+ */
+ template<typename _Alloc = std::allocator<char> >
+ class lu_move_to_front_policy
+ {
+ public:
+ typedef _Alloc allocator_type;
+
+ /// Metadata on which this functor operates.
+ typedef null_type metadata_type;
+
+ private:
+ typedef typename _Alloc::template rebind<metadata_type> __rebind_m;
+
+ public:
+ /// Reference to metadata on which this functor operates.
+ typedef typename __rebind_m::other::reference metadata_reference;
+
+ /// Creates a metadata object.
+ metadata_type
+ operator()() const
+ { return s_metadata; }
+
+ /// Decides whether a metadata object should be moved to the front
+ /// of the list.
+ inline bool
+ operator()(metadata_reference r_metadata) const
+ { return true; }
+
+ private:
+ static null_type s_metadata;
+ };
+
+ /**
+ * A list-update policy that moves elements to the front of the
+ * list based on the counter algorithm.
+ */
+ template<std::size_t Max_Count = 5, typename _Alloc = std::allocator<char> >
+ class lu_counter_policy
+ : private detail::lu_counter_policy_base<typename _Alloc::size_type>
+ {
+ public:
+ typedef _Alloc allocator_type;
+ typedef typename allocator_type::size_type size_type;
+
+ enum
+ {
+ /// When some element is accessed this number of times, it
+ /// will be moved to the front of the list.
+ max_count = Max_Count
+ };
+
+ /// Metadata on which this functor operates.
+ typedef detail::lu_counter_metadata<size_type> metadata_type;
+
+ private:
+ typedef detail::lu_counter_policy_base<size_type> base_type;
+ typedef typename _Alloc::template rebind<metadata_type> __rebind_m;
+
+ public:
+ /// Reference to metadata on which this functor operates.
+ typedef typename __rebind_m::other::reference metadata_reference;
+
+ /// Creates a metadata object.
+ metadata_type
+ operator()() const
+ { return base_type::operator()(max_count); }
+
+ /// Decides whether a metadata object should be moved to the front
+ /// of the list.
+ bool
+ operator()(metadata_reference r_data) const
+ { return base_type::operator()(r_data, max_count); }
+ };
} // namespace __gnu_pbds
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
index b6088e7d73..825699f468 100644
--- a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
@@ -48,56 +48,84 @@
namespace __gnu_pbds
{
- // A priority queue.
- template<typename Value_Type,
- typename Cmp_Fn = std::less<Value_Type>,
+ /**
+ * @defgroup heap-based
+ * @ingroup containers-pbds
+ * @{
+ */
+
+ /**
+ * @defgroup heap-detail Base and Policy Classes
+ * @ingroup heap-based
+ */
+
+ /**
+ * A priority queue composed of one specific heap policy.
+ *
+ * @tparam _Tv Value type.
+ * @tparam Cmp_Fn Comparison functor.
+ * @tparam Tag Instantiating data structure type,
+ * see container_tag.
+ * @tparam _Alloc Allocator type.
+ *
+ * Base is dispatched at compile time via Tag, from the following
+ * choices: binary_heap_tag, binomial_heap_tag, pairing_heap_tag,
+ * rc_binomial_heap_tag, thin_heap_tag
+ *
+ * Base choices are: detail::binary_heap, detail::binomial_heap,
+ * detail::pairing_heap, detail::rc_binomial_heap,
+ * detail::thin_heap.
+ */
+ template<typename _Tv,
+ typename Cmp_Fn = std::less<_Tv>,
typename Tag = pairing_heap_tag,
- typename Allocator = std::allocator<char> >
- class priority_queue
- : public detail::priority_queue_base_dispatch<Value_Type,
- Cmp_Fn,Tag,Allocator>::type
+ typename _Alloc = std::allocator<char> >
+ class priority_queue
+ : public detail::container_base_dispatch<_Tv, Cmp_Fn, _Alloc, Tag>::type
{
- private:
- typedef typename
- detail::priority_queue_base_dispatch<Value_Type, Cmp_Fn,
- Tag, Allocator>::type base_type;
-
public:
- typedef Value_Type value_type;
+ typedef _Tv value_type;
typedef Cmp_Fn cmp_fn;
typedef Tag container_category;
- typedef Allocator allocator_type;
+ typedef _Alloc allocator_type;
typedef typename allocator_type::size_type size_type;
typedef typename allocator_type::difference_type difference_type;
- typedef typename allocator_type::template rebind<value_type>::other value_rebind;
- typedef typename value_rebind::reference reference;
- typedef typename value_rebind::const_reference const_reference;
- typedef typename value_rebind::pointer pointer;
- typedef typename value_rebind::const_pointer const_pointer;
+ private:
+ typedef typename detail::container_base_dispatch<_Tv, Cmp_Fn, _Alloc,
+ Tag>::type
+ base_type;
+ typedef typename _Alloc::template rebind<_Tv> __rebind_v;
+ typedef typename __rebind_v::other __rebind_va;
+
+ public:
+ typedef typename __rebind_va::reference reference;
+ typedef typename __rebind_va::const_reference const_reference;
+ typedef typename __rebind_va::pointer pointer;
+ typedef typename __rebind_va::const_pointer const_pointer;
- typedef typename base_type::const_point_iterator const_point_iterator;
typedef typename base_type::point_iterator point_iterator;
- typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::point_const_iterator point_const_iterator;
typedef typename base_type::iterator iterator;
+ typedef typename base_type::const_iterator const_iterator;
priority_queue() { }
- // Constructor taking some policy objects. r_cmp_fn will be copied
- // by the Cmp_Fn object of the container object.
+ /// Constructor taking some policy objects. r_cmp_fn will be
+ /// copied by the Cmp_Fn object of the container object.
priority_queue(const cmp_fn& r_cmp_fn) : base_type(r_cmp_fn) { }
- // Constructor taking __iterators to a range of value_types. The
- // value_types between first_it and last_it will be inserted into
- // the container object.
+ /// Constructor taking __iterators to a range of value_types. The
+ /// value_types between first_it and last_it will be inserted into
+ /// the container object.
template<typename It>
priority_queue(It first_it, It last_it)
{ base_type::copy_from_range(first_it, last_it); }
- // Constructor taking __iterators to a range of value_types and
- // some policy objects The value_types between first_it and
- // last_it will be inserted into the container object. r_cmp_fn
- // will be copied by the cmp_fn object of the container object.
+ /// Constructor taking __iterators to a range of value_types and
+ /// some policy objects The value_types between first_it and
+ /// last_it will be inserted into the container object. r_cmp_fn
+ /// will be copied by the cmp_fn object of the container object.
template<typename It>
priority_queue(It first_it, It last_it, const cmp_fn& r_cmp_fn)
: base_type(r_cmp_fn)
@@ -109,7 +137,7 @@ namespace __gnu_pbds
virtual
~priority_queue() { }
- priority_queue&
+ priority_queue&
operator=(const priority_queue& other)
{
if (this != &other)
@@ -125,5 +153,5 @@ namespace __gnu_pbds
{ base_type::swap(other); }
};
} // namespace __gnu_pbds
-
-#endif
+ //@} heap-based
+#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
index ef44533613..f7544ff7ef 100644
--- a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -36,7 +37,7 @@
/**
* @file tag_and_trait.hpp
* Contains tags and traits, e.g., ones describing underlying
- * data structures.
+ * data structures.
*/
#ifndef PB_DS_TAG_AND_TRAIT_HPP
@@ -51,59 +52,91 @@
*/
namespace __gnu_pbds
{
- // A trivial iterator tag. Signifies that the iterators has none of
- // the STL's movement abilities.
+ /** @defgroup pbds Policy-Based Data Structures
+ * @ingroup extensions
+ *
+ * This is a library of policy-based elementary data structures:
+ * associative containers and priority queues. It is designed for
+ * high-performance, flexibility, semantic safety, and conformance
+ * to the corresponding containers in std (except for some points
+ * where it differs by design).
+ *
+ * For details, see:
+ * http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
+ *
+ * @{
+ */
+
+ /**
+ * @defgroup tags Tags
+ * @{
+ */
+ /// A trivial iterator tag. Signifies that the iterators has none of
+ /// std::iterators's movement abilities.
struct trivial_iterator_tag
{ };
- // Prohibit moving trivial iterators.
+ /// Prohibit moving trivial iterators.
typedef void trivial_iterator_difference_type;
- // Signifies a basic invalidation guarantee that any iterator,
- // pointer, or reference to a container object's mapped value type
- // is valid as long as the container is not modified.
+ /**
+ * @defgroup invalidation_tags Invalidation Guarantees
+ * @ingroup tags
+ * @{
+ */
+
+ /**
+ * Signifies a basic invalidation guarantee that any iterator,
+ * pointer, or reference to a container object's mapped value type
+ * is valid as long as the container is not modified.
+ */
struct basic_invalidation_guarantee
{ };
- // Signifies an invalidation guarantee that includes all those of
- // its base, and additionally, that any point-type iterator,
- // pointer, or reference to a container object's mapped value type
- // is valid as long as its corresponding entry has not be erased,
- // regardless of modifications to the container object.
+ /**
+ * Signifies an invalidation guarantee that includes all those of
+ * its base, and additionally, that any point-type iterator,
+ * pointer, or reference to a container object's mapped value type
+ * is valid as long as its corresponding entry has not be erased,
+ * regardless of modifications to the container object.
+ */
struct point_invalidation_guarantee : public basic_invalidation_guarantee
{ };
- // Signifies an invalidation guarantee that includes all those of
- // its base, and additionally, that any range-type iterator
- // (including the returns of begin() and end()) is in the correct
- // relative positions to other range-type iterators as long as its
- // corresponding entry has not be erased, regardless of
- // modifications to the container object.
+ /**
+ * Signifies an invalidation guarantee that includes all those of
+ * its base, and additionally, that any range-type iterator
+ * (including the returns of begin() and end()) is in the correct
+ * relative positions to other range-type iterators as long as its
+ * corresponding entry has not be erased, regardless of
+ * modifications to the container object.
+ */
struct range_invalidation_guarantee : public point_invalidation_guarantee
{ };
+ //@}
- /// A mapped-policy indicating that an associative container is a set.
- // XXX should this be a trait of the form is_set<T> ??
- struct null_mapped_type { };
-
-
+ /**
+ * @defgroup ds_tags Data Structure Type
+ * @ingroup tags
+ * @{
+ */
/// Base data structure tag.
struct container_tag
{ };
- /// Basic string container, inclusive of strings, ropes, etc.
- struct string_tag : public container_tag { };
-
/// Basic sequence.
struct sequence_tag : public container_tag { };
+ /// Basic string container, inclusive of strings, ropes, etc.
+ struct string_tag : public sequence_tag { };
+
/// Basic associative-container.
- struct associative_container_tag : public container_tag { };
+ struct associative_tag : public container_tag { };
- /// Basic hash.
- struct basic_hash_tag : public associative_container_tag { };
+ /// Basic hash structure.
+ struct basic_hash_tag : public associative_tag { };
/// Collision-chaining hash.
struct cc_hash_tag : public basic_hash_tag { };
@@ -111,11 +144,11 @@ namespace __gnu_pbds
/// General-probing hash.
struct gp_hash_tag : public basic_hash_tag { };
- /// Basic tree.
- struct basic_tree_tag : public associative_container_tag { };
+ /// Basic branch structure.
+ struct basic_branch_tag : public associative_tag { };
- /// tree.
- struct tree_tag : public basic_tree_tag { };
+ /// Basic tree structure.
+ struct tree_tag : public basic_branch_tag { };
/// Red-black tree.
struct rb_tree_tag : public tree_tag { };
@@ -126,14 +159,14 @@ namespace __gnu_pbds
/// Ordered-vector tree.
struct ov_tree_tag : public tree_tag { };
- /// trie.
- struct trie_tag : public basic_tree_tag { };
+ /// Basic trie structure.
+ struct trie_tag : public basic_branch_tag { };
/// PATRICIA trie.
struct pat_trie_tag : public trie_tag { };
/// List-update.
- struct list_update_tag : public associative_container_tag { };
+ struct list_update_tag : public associative_tag { };
/// Basic priority-queue.
struct priority_queue_tag : public container_tag { };
@@ -152,213 +185,271 @@ namespace __gnu_pbds
/// Thin heap.
struct thin_heap_tag : public priority_queue_tag { };
-
-
- /// Base traits type for containers.
- template<typename Tag>
- struct container_traits_base;
-
+ //@}
+ //@}
+
+
+ /**
+ * @defgroup traits Traits
+ * @{
+ */
+
+ /**
+ * @brief Represents no type, or absence of type, for template tricks.
+ *
+ * In a mapped-policy, indicates that an associative container is a set.
+ *
+ * In a list-update policy, indicates that each link does not need
+ * metadata.
+ *
+ * In a hash policy, indicates that the combining hash function
+ * is actually a ranged hash function.
+ *
+ * In a probe policy, indicates that the combining probe function
+ * is actually a ranged probe function.
+ */
+ struct null_type { };
+
+ /// A null node updator, indicating that no node updates are required.
+ template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
+ struct null_node_update : public null_type
+ { };
+
+
+ /// Primary template, container traits base.
+ template<typename _Tag>
+ struct container_traits_base;
+
+ /// Specialization, cc hash.
template<>
struct container_traits_base<cc_hash_tag>
{
- typedef cc_hash_tag container_category;
- typedef point_invalidation_guarantee invalidation_guarantee;
+ typedef cc_hash_tag container_category;
+ typedef point_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = false,
reverse_iteration = false
};
};
+ /// Specialization, gp hash.
template<>
struct container_traits_base<gp_hash_tag>
{
- typedef gp_hash_tag container_category;
- typedef basic_invalidation_guarantee invalidation_guarantee;
+ typedef gp_hash_tag container_category;
+ typedef basic_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
+ order_preserving = false,
erase_can_throw = false,
split_join_can_throw = false,
reverse_iteration = false
};
};
+ /// Specialization, rb tree.
template<>
struct container_traits_base<rb_tree_tag>
{
- typedef rb_tree_tag container_category;
- typedef range_invalidation_guarantee invalidation_guarantee;
+ typedef rb_tree_tag container_category;
+ typedef range_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = true,
- erase_can_throw = false,
+ order_preserving = true,
+ erase_can_throw = false,
split_join_can_throw = false,
- reverse_iteration = true
+ reverse_iteration = true
};
};
+ /// Specialization, splay tree.
template<>
struct container_traits_base<splay_tree_tag>
{
- typedef splay_tree_tag container_category;
- typedef range_invalidation_guarantee invalidation_guarantee;
+ typedef splay_tree_tag container_category;
+ typedef range_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = true,
- erase_can_throw = false,
- split_join_can_throw = false,
- reverse_iteration = true
+ order_preserving = true,
+ erase_can_throw = false,
+ split_join_can_throw = false,
+ reverse_iteration = true
};
};
+ /// Specialization, ov tree.
template<>
struct container_traits_base<ov_tree_tag>
{
- typedef ov_tree_tag container_category;
- typedef basic_invalidation_guarantee invalidation_guarantee;
+ typedef ov_tree_tag container_category;
+ typedef basic_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = true,
- erase_can_throw = true,
- split_join_can_throw = true,
- reverse_iteration = false
+ order_preserving = true,
+ erase_can_throw = true,
+ split_join_can_throw = true,
+ reverse_iteration = false
};
};
+ /// Specialization, pat trie.
template<>
struct container_traits_base<pat_trie_tag>
{
- typedef pat_trie_tag container_category;
- typedef range_invalidation_guarantee invalidation_guarantee;
+ typedef pat_trie_tag container_category;
+ typedef range_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = true,
- erase_can_throw = false,
- split_join_can_throw = true,
- reverse_iteration = true
+ order_preserving = true,
+ erase_can_throw = false,
+ split_join_can_throw = true,
+ reverse_iteration = true
};
};
+ /// Specialization, list update.
template<>
struct container_traits_base<list_update_tag>
{
- typedef list_update_tag container_category;
- typedef point_invalidation_guarantee invalidation_guarantee;
+ typedef list_update_tag container_category;
+ typedef point_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = false,
- reverse_iteration = false
+ reverse_iteration = false
};
};
-
+ /// Specialization, pairing heap.
template<>
struct container_traits_base<pairing_heap_tag>
{
- typedef pairing_heap_tag container_category;
- typedef point_invalidation_guarantee invalidation_guarantee;
+ typedef pairing_heap_tag container_category;
+ typedef point_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = false,
- reverse_iteration = false
+ reverse_iteration = false
};
};
+ /// Specialization, thin heap.
template<>
struct container_traits_base<thin_heap_tag>
{
- typedef thin_heap_tag container_category;
- typedef point_invalidation_guarantee invalidation_guarantee;
+ typedef thin_heap_tag container_category;
+ typedef point_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = false,
- reverse_iteration = false
+ reverse_iteration = false
};
};
+ /// Specialization, binomial heap.
template<>
struct container_traits_base<binomial_heap_tag>
{
- typedef binomial_heap_tag container_category;
- typedef point_invalidation_guarantee invalidation_guarantee;
+ typedef binomial_heap_tag container_category;
+ typedef point_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = false,
- reverse_iteration = false
+ reverse_iteration = false
};
};
+ /// Specialization, rc binomial heap.
template<>
struct container_traits_base<rc_binomial_heap_tag>
{
- typedef rc_binomial_heap_tag container_category;
- typedef point_invalidation_guarantee invalidation_guarantee;
+ typedef rc_binomial_heap_tag container_category;
+ typedef point_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = false,
- reverse_iteration = false
+ reverse_iteration = false
};
};
+ /// Specialization, binary heap.
template<>
struct container_traits_base<binary_heap_tag>
{
- typedef binary_heap_tag container_category;
- typedef basic_invalidation_guarantee invalidation_guarantee;
+ typedef binary_heap_tag container_category;
+ typedef basic_invalidation_guarantee invalidation_guarantee;
enum
{
- order_preserving = false,
- erase_can_throw = false,
+ order_preserving = false,
+ erase_can_throw = false,
split_join_can_throw = true,
- reverse_iteration = false
+ reverse_iteration = false
};
};
- /// container_traits
+ /// Container traits.
// See Matt Austern for the name, S. Meyers MEFC++ #2, others.
template<typename Cntnr>
- struct container_traits
+ struct container_traits
: public container_traits_base<typename Cntnr::container_category>
{
- typedef Cntnr container_type;
- typedef typename Cntnr::container_category container_category;
- typedef container_traits_base<container_category> base_type;
+ typedef Cntnr container_type;
+ typedef typename Cntnr::container_category container_category;
+ typedef container_traits_base<container_category> base_type;
typedef typename base_type::invalidation_guarantee invalidation_guarantee;
enum
{
+ /// True only if Cntnr objects guarantee storing keys by order.
order_preserving = base_type::order_preserving,
+
+ /// True only if erasing a key can throw.
erase_can_throw = base_type::erase_can_throw,
+
+ /// True only if split or join operations can throw.
split_join_can_throw = base_type::split_join_can_throw,
+
+ /// True only reverse iterators are supported.
reverse_iteration = base_type::reverse_iteration
};
};
+ //@}
+
+
+ namespace detail
+ {
+ /// Dispatch mechanism, primary template for associative types.
+ template<typename Key, typename Mapped, typename _Alloc, typename Tag,
+ typename Policy_Tl = null_type>
+ struct container_base_dispatch;
+ } // namespace __detail
+ //@}
} // namespace __gnu_pbds
#endif
diff --git a/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp b/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
index 4af1adbde7..ecc4991f72 100644
--- a/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -44,109 +44,103 @@
#include <bits/c++config.h>
#include <iterator>
#include <ext/pb_ds/detail/type_utils.hpp>
-#include <ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp>
+#include <ext/pb_ds/detail/branch_policy/branch_policy.hpp>
namespace __gnu_pbds
{
- // A null node updator, indicating that no node updates are required.
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- typename Cmp_Fn,
- typename Allocator>
- struct null_tree_node_update
- { };
-
#define PB_DS_CLASS_T_DEC \
- template<typename Const_Node_Iterator, class Node_Iterator, class Cmp_Fn, class Allocator>
+ template<typename Node_CItr, typename Node_Itr, typename Cmp_Fn, \
+ typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- tree_order_statistics_node_update<Const_Node_Iterator, Node_Iterator, Cmp_Fn, Allocator>
+ tree_order_statistics_node_update<Node_CItr, Node_Itr, Cmp_Fn, _Alloc>
-#define PB_DS_BASE_C_DEC \
- detail::basic_tree_policy_base<Const_Node_Iterator, Node_Iterator, Allocator>
+#define PB_DS_BRANCH_POLICY_BASE \
+ detail::branch_policy<Node_CItr, Node_Itr, _Alloc>
- // Functor updating ranks of entrees.
- template<typename Const_Node_Iterator, typename Node_Iterator,
- typename Cmp_Fn, typename Allocator>
- class tree_order_statistics_node_update : private PB_DS_BASE_C_DEC
+ /// Functor updating ranks of entrees.
+ template<typename Node_CItr, typename Node_Itr,
+ typename Cmp_Fn, typename _Alloc>
+ class tree_order_statistics_node_update : private PB_DS_BRANCH_POLICY_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_BRANCH_POLICY_BASE base_type;
public:
- typedef Cmp_Fn cmp_fn;
- typedef Allocator allocator_type;
- typedef typename allocator_type::size_type size_type;
- typedef typename base_type::key_type key_type;
- typedef typename base_type::const_key_reference const_key_reference;
-
- typedef size_type metadata_type;
- typedef Const_Node_Iterator const_node_iterator;
- typedef Node_Iterator node_iterator;
- typedef typename const_node_iterator::value_type const_iterator;
- typedef typename node_iterator::value_type iterator;
-
- // Finds an entry by __order. Returns a const_iterator to the
- // entry with the __order order, or a const_iterator to the
- // container object's end if order is at least the size of the
- // container object.
+ typedef Cmp_Fn cmp_fn;
+ typedef _Alloc allocator_type;
+ typedef typename allocator_type::size_type size_type;
+ typedef typename base_type::key_type key_type;
+ typedef typename base_type::key_const_reference key_const_reference;
+
+ typedef size_type metadata_type;
+ typedef Node_CItr node_const_iterator;
+ typedef Node_Itr node_iterator;
+ typedef typename node_const_iterator::value_type const_iterator;
+ typedef typename node_iterator::value_type iterator;
+
+ /// Finds an entry by __order. Returns a const_iterator to the
+ /// entry with the __order order, or a const_iterator to the
+ /// container object's end if order is at least the size of the
+ /// container object.
inline const_iterator
- find_by_order(size_type order) const;
+ find_by_order(size_type) const;
- // Finds an entry by __order. Returns an iterator to the entry
- // with the __order order, or an iterator to the container
- // object's end if order is at least the size of the container
- // object.
+ /// Finds an entry by __order. Returns an iterator to the entry
+ /// with the __order order, or an iterator to the container
+ /// object's end if order is at least the size of the container
+ /// object.
inline iterator
- find_by_order(size_type order);
+ find_by_order(size_type);
- // Returns the order of a key within a sequence. For exapmle, if
- // r_key is the smallest key, this method will return 0; if r_key
- // is a key between the smallest and next key, this method will
- // return 1; if r_key is a key larger than the largest key, this
- // method will return the size of r_c.
+ /// Returns the order of a key within a sequence. For exapmle, if
+ /// r_key is the smallest key, this method will return 0; if r_key
+ /// is a key between the smallest and next key, this method will
+ /// return 1; if r_key is a key larger than the largest key, this
+ /// method will return the size of r_c.
inline size_type
- order_of_key(const_key_reference r_key) const;
+ order_of_key(key_const_reference) const;
private:
- // Const reference to the container's value-type.
- typedef typename base_type::const_reference const_reference;
+ /// Const reference to the container's value-type.
+ typedef typename base_type::const_reference const_reference;
+
+ /// Const pointer to the container's value-type.
+ typedef typename base_type::const_pointer const_pointer;
- // Const pointer to the container's value-type.
- typedef typename base_type::const_pointer const_pointer;
+ typedef typename _Alloc::template rebind<metadata_type>::other __rebind_m;
- typedef typename allocator_type::template rebind<metadata_type>::other metadata_rebind;
- // Const metadata reference.
- typedef typename metadata_rebind::const_reference const_metadata_reference;
+ /// Const metadata reference.
+ typedef typename __rebind_m::const_reference metadata_const_reference;
- // Metadata reference.
- typedef typename metadata_rebind::reference metadata_reference;
+ /// Metadata reference.
+ typedef typename __rebind_m::reference metadata_reference;
- // Returns the const_node_iterator associated with the tree's root node.
- virtual const_node_iterator
+ /// Returns the node_const_iterator associated with the tree's root node.
+ virtual node_const_iterator
node_begin() const = 0;
- // Returns the node_iterator associated with the tree's root node.
+ /// Returns the node_iterator associated with the tree's root node.
virtual node_iterator
node_begin() = 0;
- // Returns the const_node_iterator associated with a just-after leaf node.
- virtual const_node_iterator
+ /// Returns the node_const_iterator associated with a just-after leaf node.
+ virtual node_const_iterator
node_end() const = 0;
- // Returns the node_iterator associated with a just-after leaf node.
+ /// Returns the node_iterator associated with a just-after leaf node.
virtual node_iterator
node_end() = 0;
- // Access to the cmp_fn object.
+ /// Access to the cmp_fn object.
virtual cmp_fn&
get_cmp_fn() = 0;
protected:
- // Updates the rank of a node through a node_iterator node_it;
- // end_nd_it is the end node iterator.
+ /// Updates the rank of a node through a node_iterator node_it;
+ /// end_nd_it is the end node iterator.
inline void
- operator()(node_iterator node_it, const_node_iterator end_nd_it) const;
+ operator()(node_iterator, node_const_iterator) const;
virtual
~tree_order_statistics_node_update();
@@ -156,7 +150,7 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_BRANCH_POLICY_BASE
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp b/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
index fc452104f7..a5c3399f3f 100644
--- a/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,43 +49,48 @@
namespace __gnu_pbds
{
- // A null node updator, indicating that no node updates are required.
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- typename E_Access_Traits,
- typename Allocator>
- struct null_trie_node_update
- { };
-
-#define PB_DS_CLASS_T_DEC \
- template<typename String, typename String::value_type Min_E_Val, typename String::value_type Max_E_Val, bool Reverse, typename Allocator>
-
-#define PB_DS_CLASS_C_DEC \
- string_trie_e_access_traits<String, Min_E_Val,Max_E_Val,Reverse,Allocator>
+#define PB_DS_CLASS_T_DEC \
+ template<typename String, typename String::value_type Min_E_Val, \
+ typename String::value_type Max_E_Val, bool Reverse, \
+ typename _Alloc>
- // Element access traits for string types.
+#define PB_DS_CLASS_C_DEC \
+ trie_string_access_traits<String, Min_E_Val,Max_E_Val,Reverse,_Alloc>
+
+ /**
+ * Element access traits for string types.
+ *
+ * @tparam String String type.
+ * @tparam Min_E_Val Minimal element value.
+ * @tparam Max_E_Val Maximum element value.
+ * @tparam Reverse Reverse iteration should be used.
+ * Default: false.
+ * @tparam _Alloc Allocator type.
+ */
template<typename String = std::string,
- typename String::value_type Min_E_Val = detail::__numeric_traits<typename String::value_type>::__min,
- typename String::value_type Max_E_Val = detail::__numeric_traits<typename String::value_type>::__max,
+ typename String::value_type Min_E_Val = detail::__numeric_traits<typename String::value_type>::__min,
+ typename String::value_type Max_E_Val = detail::__numeric_traits<typename String::value_type>::__max,
bool Reverse = false,
- typename Allocator = std::allocator<char> >
- struct string_trie_e_access_traits
+ typename _Alloc = std::allocator<char> >
+ struct trie_string_access_traits
{
public:
- typedef typename Allocator::size_type size_type;
- typedef String key_type;
- typedef typename Allocator::template rebind<key_type>::other key_rebind;
- typedef typename key_rebind::const_reference const_key_reference;
+ typedef typename _Alloc::size_type size_type;
+ typedef String key_type;
+ typedef typename _Alloc::template rebind<key_type> __rebind_k;
+ typedef typename __rebind_k::other::const_reference key_const_reference;
enum
{
reverse = Reverse
};
- // Element const iterator type.
- typedef typename detail::__conditional_type<Reverse, typename String::const_reverse_iterator, typename String::const_iterator>::__type const_iterator;
+ /// Element const iterator type.
+ typedef typename detail::__conditional_type<Reverse, \
+ typename String::const_reverse_iterator, \
+ typename String::const_iterator>::__type const_iterator;
- // Element type.
+ /// Element type.
typedef typename std::iterator_traits<const_iterator>::value_type e_type;
enum
@@ -95,140 +101,141 @@ namespace __gnu_pbds
};
PB_DS_STATIC_ASSERT(min_max_size, max_size >= 2);
- // Returns a const_iterator to the first element of
- // const_key_reference agumnet.
+ /// Returns a const_iterator to the first element of
+ /// key_const_reference agumnet.
inline static const_iterator
- begin(const_key_reference);
+ begin(key_const_reference);
- // Returns a const_iterator to the after-last element of
- // const_key_reference argument.
+ /// Returns a const_iterator to the after-last element of
+ /// key_const_reference argument.
inline static const_iterator
- end(const_key_reference);
+ end(key_const_reference);
- // Maps an element to a position.
+ /// Maps an element to a position.
inline static size_type
e_pos(e_type e);
private:
-
inline static const_iterator
- begin_imp(const_key_reference, detail::false_type);
+ begin_imp(key_const_reference, detail::false_type);
inline static const_iterator
- begin_imp(const_key_reference, detail::true_type);
+ begin_imp(key_const_reference, detail::true_type);
inline static const_iterator
- end_imp(const_key_reference, detail::false_type);
+ end_imp(key_const_reference, detail::false_type);
inline static const_iterator
- end_imp(const_key_reference, detail::true_type);
+ end_imp(key_const_reference, detail::true_type);
static detail::integral_constant<int, Reverse> s_rev_ind;
};
-#include <ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp>
+#include <ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp>
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_T_DEC \
- template<typename Const_Node_Iterator,typename Node_Iterator,class E_Access_Traits, typename Allocator>
+ template<typename Node_CItr,typename Node_Itr, \
+ typename _ATraits, typename _Alloc>
#define PB_DS_CLASS_C_DEC \
- trie_prefix_search_node_update<Const_Node_Iterator, Node_Iterator, E_Access_Traits,Allocator>
-
-#define PB_DS_BASE_C_DEC \
- detail::trie_policy_base<Const_Node_Iterator,Node_Iterator,E_Access_Traits, Allocator>
-
- // A node updator that allows tries to be searched for the range of
- // values that match a certain prefix.
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- typename E_Access_Traits,
- typename Allocator>
- class trie_prefix_search_node_update : private PB_DS_BASE_C_DEC
+ trie_prefix_search_node_update<Node_CItr, Node_Itr, \
+ _ATraits,_Alloc>
+
+#define PB_DS_TRIE_POLICY_BASE \
+ detail::trie_policy_base<Node_CItr,Node_Itr,_ATraits, _Alloc>
+
+ /// A node updator that allows tries to be searched for the range of
+ /// values that match a certain prefix.
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename _ATraits,
+ typename _Alloc>
+ class trie_prefix_search_node_update : private PB_DS_TRIE_POLICY_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_TRIE_POLICY_BASE base_type;
public:
- typedef typename base_type::key_type key_type;
- typedef typename base_type::const_key_reference const_key_reference;
+ typedef typename base_type::key_type key_type;
+ typedef typename base_type::key_const_reference key_const_reference;
- // Element access traits.
- typedef E_Access_Traits e_access_traits;
+ /// Element access traits.
+ typedef _ATraits access_traits;
- // Const element iterator.
- typedef typename e_access_traits::const_iterator const_e_iterator;
+ /// Const element iterator.
+ typedef typename access_traits::const_iterator a_const_iterator;
- // Allocator type.
- typedef Allocator allocator_type;
+ /// _Alloc type.
+ typedef _Alloc allocator_type;
- // Size type.
- typedef typename allocator_type::size_type size_type;
- typedef detail::null_node_metadata metadata_type;
- typedef Const_Node_Iterator const_node_iterator;
- typedef Node_Iterator node_iterator;
- typedef typename const_node_iterator::value_type const_iterator;
- typedef typename node_iterator::value_type iterator;
+ /// Size type.
+ typedef typename allocator_type::size_type size_type;
+ typedef null_type metadata_type;
+ typedef Node_Itr node_iterator;
+ typedef Node_CItr node_const_iterator;
+ typedef typename node_iterator::value_type iterator;
+ typedef typename node_const_iterator::value_type const_iterator;
- // Finds the const iterator range corresponding to all values
- // whose prefixes match r_key.
+ /// Finds the const iterator range corresponding to all values
+ /// whose prefixes match r_key.
std::pair<const_iterator, const_iterator>
- prefix_range(const_key_reference) const;
+ prefix_range(key_const_reference) const;
- // Finds the iterator range corresponding to all values whose
- // prefixes match r_key.
+ /// Finds the iterator range corresponding to all values whose
+ /// prefixes match r_key.
std::pair<iterator, iterator>
- prefix_range(const_key_reference);
+ prefix_range(key_const_reference);
- // Finds the const iterator range corresponding to all values
- // whose prefixes match [b, e).
+ /// Finds the const iterator range corresponding to all values
+ /// whose prefixes match [b, e).
std::pair<const_iterator, const_iterator>
- prefix_range(const_e_iterator, const_e_iterator) const;
+ prefix_range(a_const_iterator, a_const_iterator) const;
- // Finds the iterator range corresponding to all values whose
- // prefixes match [b, e).
+ /// Finds the iterator range corresponding to all values whose
+ /// prefixes match [b, e).
std::pair<iterator, iterator>
- prefix_range(const_e_iterator, const_e_iterator);
+ prefix_range(a_const_iterator, a_const_iterator);
protected:
- // Called to update a node's metadata.
+ /// Called to update a node's metadata.
inline void
- operator()(node_iterator node_it, const_node_iterator end_nd_it) const;
+ operator()(node_iterator node_it, node_const_iterator end_nd_it) const;
private:
- // Returns the const iterator associated with the just-after last element.
+ node_iterator
+ next_child(node_iterator, a_const_iterator, a_const_iterator,
+ node_iterator, const access_traits&);
+
+ /// Returns the const iterator associated with the just-after last element.
virtual const_iterator
end() const = 0;
- // Returns the iterator associated with the just-after last element.
+ /// Returns the iterator associated with the just-after last element.
virtual iterator
end() = 0;
- // Returns the const_node_iterator associated with the trie's root node.
- virtual const_node_iterator
+ /// Returns the node_const_iterator associated with the trie's root node.
+ virtual node_const_iterator
node_begin() const = 0;
- // Returns the node_iterator associated with the trie's root node.
+ /// Returns the node_iterator associated with the trie's root node.
virtual node_iterator
node_begin() = 0;
- // Returns the const_node_iterator associated with a just-after leaf node.
- virtual const_node_iterator
+ /// Returns the node_const_iterator associated with a just-after leaf node.
+ virtual node_const_iterator
node_end() const = 0;
- // Returns the node_iterator associated with a just-after leaf node.
+ /// Returns the node_iterator associated with a just-after leaf node.
virtual node_iterator
node_end() = 0;
- // Access to the cmp_fn object.
- virtual const e_access_traits&
- get_e_access_traits() const = 0;
-
- node_iterator
- next_child(node_iterator, const_e_iterator, const_e_iterator,
- node_iterator, const e_access_traits&);
+ /// Access to the cmp_fn object.
+ virtual const access_traits&
+ get_access_traits() const = 0;
};
#include <ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp>
@@ -236,120 +243,118 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_C_DEC \
- trie_order_statistics_node_update<Const_Node_Iterator, Node_Iterator,E_Access_Traits, Allocator>
-
- // Functor updating ranks of entrees.
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- typename E_Access_Traits,
- typename Allocator>
- class trie_order_statistics_node_update : private PB_DS_BASE_C_DEC
+ trie_order_statistics_node_update<Node_CItr, Node_Itr, \
+ _ATraits, _Alloc>
+
+ /// Functor updating ranks of entrees.
+ template<typename Node_CItr,
+ typename Node_Itr,
+ typename _ATraits,
+ typename _Alloc>
+ class trie_order_statistics_node_update : private PB_DS_TRIE_POLICY_BASE
{
private:
- typedef PB_DS_BASE_C_DEC base_type;
+ typedef PB_DS_TRIE_POLICY_BASE base_type;
public:
- typedef E_Access_Traits e_access_traits;
- typedef typename e_access_traits::const_iterator const_e_iterator;
- typedef Allocator allocator_type;
- typedef typename allocator_type::size_type size_type;
- typedef typename base_type::key_type key_type;
- typedef typename base_type::const_key_reference const_key_reference;
-
- typedef size_type metadata_type;
- typedef Const_Node_Iterator const_node_iterator;
- typedef Node_Iterator node_iterator;
- typedef typename const_node_iterator::value_type const_iterator;
- typedef typename node_iterator::value_type iterator;
-
- // Finds an entry by __order. Returns a const_iterator to the
- // entry with the __order order, or a const_iterator to the
- // container object's end if order is at least the size of the
- // container object.
+ typedef _ATraits access_traits;
+ typedef typename access_traits::const_iterator a_const_iterator;
+ typedef _Alloc allocator_type;
+ typedef typename allocator_type::size_type size_type;
+ typedef typename base_type::key_type key_type;
+ typedef typename base_type::key_const_reference key_const_reference;
+
+ typedef size_type metadata_type;
+ typedef Node_CItr node_const_iterator;
+ typedef Node_Itr node_iterator;
+ typedef typename node_const_iterator::value_type const_iterator;
+ typedef typename node_iterator::value_type iterator;
+
+ /// Finds an entry by __order. Returns a const_iterator to the
+ /// entry with the __order order, or a const_iterator to the
+ /// container object's end if order is at least the size of the
+ /// container object.
inline const_iterator
find_by_order(size_type) const;
- // Finds an entry by __order. Returns an iterator to the entry
- // with the __order order, or an iterator to the container
- // object's end if order is at least the size of the container
- // object.
+ /// Finds an entry by __order. Returns an iterator to the entry
+ /// with the __order order, or an iterator to the container
+ /// object's end if order is at least the size of the container
+ /// object.
inline iterator
find_by_order(size_type);
- // Returns the order of a key within a sequence. For exapmle, if
- // r_key is the smallest key, this method will return 0; if r_key
- // is a key between the smallest and next key, this method will
- // return 1; if r_key is a key larger than the largest key, this
- // method will return the size of r_c.
+ /// Returns the order of a key within a sequence. For exapmle, if
+ /// r_key is the smallest key, this method will return 0; if r_key
+ /// is a key between the smallest and next key, this method will
+ /// return 1; if r_key is a key larger than the largest key, this
+ /// method will return the size of r_c.
inline size_type
- order_of_key(const_key_reference) const;
+ order_of_key(key_const_reference) const;
- // Returns the order of a prefix within a sequence. For exapmle,
- // if [b, e] is the smallest prefix, this method will return 0; if
- // r_key is a key between the smallest and next key, this method
- // will return 1; if r_key is a key larger than the largest key,
- // this method will return the size of r_c.
+ /// Returns the order of a prefix within a sequence. For exapmle,
+ /// if [b, e] is the smallest prefix, this method will return 0; if
+ /// r_key is a key between the smallest and next key, this method
+ /// will return 1; if r_key is a key larger than the largest key,
+ /// this method will return the size of r_c.
inline size_type
- order_of_prefix(const_e_iterator, const_e_iterator) const;
+ order_of_prefix(a_const_iterator, a_const_iterator) const;
+
+ protected:
+ /// Updates the rank of a node through a node_iterator node_it;
+ /// end_nd_it is the end node iterator.
+ inline void
+ operator()(node_iterator, node_const_iterator) const;
private:
- typedef typename base_type::const_reference const_reference;
- typedef typename base_type::const_pointer const_pointer;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::const_pointer const_pointer;
- typedef typename Allocator::template rebind<metadata_type>::other metadata_rebind;
- typedef typename metadata_rebind::const_reference const_metadata_reference;
- typedef typename metadata_rebind::reference metadata_reference;
+ typedef typename _Alloc::template rebind<metadata_type> __rebind_m;
+ typedef typename __rebind_m::other __rebind_ma;
+ typedef typename __rebind_ma::const_reference metadata_const_reference;
+ typedef typename __rebind_ma::reference metadata_reference;
- // Returns true if the container is empty.
+ /// Returns true if the container is empty.
virtual bool
empty() const = 0;
- // Returns the iterator associated with the trie's first element.
+ /// Returns the iterator associated with the trie's first element.
virtual iterator
begin() = 0;
- // Returns the iterator associated with the trie's
- // just-after-last element.
+ /// Returns the iterator associated with the trie's
+ /// just-after-last element.
virtual iterator
end() = 0;
- // Returns the const_node_iterator associated with the trie's root node.
- virtual const_node_iterator
+ /// Returns the node_const_iterator associated with the trie's root node.
+ virtual node_const_iterator
node_begin() const = 0;
- // Returns the node_iterator associated with the trie's root node.
+ /// Returns the node_iterator associated with the trie's root node.
virtual node_iterator
node_begin() = 0;
- // Returns the const_node_iterator associated with a just-after
- // leaf node.
- virtual const_node_iterator
+ /// Returns the node_const_iterator associated with a just-after
+ /// leaf node.
+ virtual node_const_iterator
node_end() const = 0;
- // Returns the node_iterator associated with a just-after leaf node.
+ /// Returns the node_iterator associated with a just-after leaf node.
virtual node_iterator
node_end() = 0;
- // Access to the cmp_fn object.
- virtual e_access_traits&
- get_e_access_traits() = 0;
-
- protected:
- // Updates the rank of a node through a node_iterator node_it;
- // end_nd_it is the end node iterator.
- inline void
- operator()(node_iterator, const_node_iterator) const;
-
- // Destructor.
- virtual
- ~trie_order_statistics_node_update();
+ /// Access to the cmp_fn object.
+ virtual access_traits&
+ get_access_traits() = 0;
};
#include <ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp>
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
-#undef PB_DS_BASE_C_DEC
+#undef PB_DS_TRIE_POLICY_BASE
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/include/ext/pod_char_traits.h b/libstdc++-v3/include/ext/pod_char_traits.h
index 3c9f0988a6..568af4b05b 100644
--- a/libstdc++-v3/include/ext/pod_char_traits.h
+++ b/libstdc++-v3/include/ext/pod_char_traits.h
@@ -1,6 +1,7 @@
// POD character, std::char_traits specialization -*- C++ -*-
-// Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,6 +33,8 @@
#ifndef _POD_CHAR_TRAITS_H
#define _POD_CHAR_TRAITS_H 1
+#pragma GCC system_header
+
#include <string>
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/include/ext/pointer.h b/libstdc++-v3/include/ext/pointer.h
index 158ae52e3b..302846a313 100644
--- a/libstdc++-v3/include/ext/pointer.h
+++ b/libstdc++-v3/include/ext/pointer.h
@@ -1,6 +1,6 @@
// Custom pointer adapter and sample storage policies
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,6 +42,10 @@
#include <bits/stl_iterator_base_types.h>
#include <ext/cast.h>
#include <ext/type_traits.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/move.h>
+# include <bits/ptr_traits.h>
+#endif
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
@@ -229,7 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ typedef const volatile _Invalid_type& reference; };
/**
- * This structure accomodates the way in which
+ * This structure accommodates the way in which
* std::iterator_traits<> is normally specialized for const T*, so
* that value_type is still T.
*/
@@ -241,14 +245,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Unqualified_type<const _Tp>
{ typedef _Tp type; };
- template<typename _Tp>
- struct _Unqualified_type<volatile _Tp>
- { typedef volatile _Tp type; };
-
- template<typename _Tp>
- struct _Unqualified_type<volatile const _Tp>
- { typedef volatile _Tp type; };
-
/**
* The following provides an 'alternative pointer' that works with
* the containers when specified as the pointer typedef of the
@@ -263,7 +259,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* so that it becomes reusable for creating other pointer types.
*
* A key point of this class is also that it allows container
- * writers to 'assume' Alocator::pointer is a typedef for a normal
+ * writers to 'assume' Allocator::pointer is a typedef for a normal
* pointer. This class supports most of the conventions of a true
* pointer, and can, for instance handle implicit conversion to
* const and base class pointer types. The only impositions on
@@ -271,7 +267,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Allocator::pointer typedef appropriately for pointer types. 2)
* if you need pointer casting, use the __pointer_cast<> functions
* from ext/cast.h. This allows pointer cast operations to be
- * overloaded is necessary by custom pointers.
+ * overloaded as necessary by custom pointers.
*
* Note: The const qualifier works with this pointer adapter as
* follows:
@@ -434,7 +430,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
} \
// END of _CXX_POINTER_ARITH_OPERATOR_SET macro
- // Expand into the various pointer arithmatic operators needed.
+ // Expand into the various pointer arithmetic operators needed.
_CXX_POINTER_ARITH_OPERATOR_SET(short);
_CXX_POINTER_ARITH_OPERATOR_SET(unsigned short);
_CXX_POINTER_ARITH_OPERATOR_SET(int);
@@ -525,7 +521,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __rhs.get() != reinterpret_cast<void*>(__lhs); }
/**
- * Comparison operators for _Pointer_adapter defer to the base class'es
+ * Comparison operators for _Pointer_adapter defer to the base class'
* comparison operators, when possible.
*/
template<typename _Tp>
@@ -567,4 +563,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<typename _Storage_policy>
+ struct pointer_traits<__gnu_cxx::_Pointer_adapter<_Storage_policy>>
+ {
+ /// The pointer type
+ typedef __gnu_cxx::_Pointer_adapter<_Storage_policy> pointer;
+ /// The type pointed to
+ typedef typename pointer::element_type element_type;
+ /// Type used to represent the difference between two pointers
+ typedef typename pointer::difference_type difference_type;
+
+ template<typename _Up>
+ using rebind = typename __gnu_cxx::_Pointer_adapter<
+ typename pointer_traits<_Storage_policy>::rebind<_Up>>;
+
+ static pointer pointer_to(typename pointer::reference __r) noexcept
+ { return pointer(std::addressof(__r)); }
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+#endif
+
#endif // _POINTER_H
diff --git a/libstdc++-v3/include/ext/pool_allocator.h b/libstdc++-v3/include/ext/pool_allocator.h
index 66ddced805..03d167ca23 100644
--- a/libstdc++-v3/include/ext/pool_allocator.h
+++ b/libstdc++-v3/include/ext/pool_allocator.h
@@ -1,6 +1,7 @@
// Allocators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -139,40 +140,46 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef __pool_alloc<_Tp1> other; };
- __pool_alloc() throw() { }
+ __pool_alloc() _GLIBCXX_USE_NOEXCEPT { }
- __pool_alloc(const __pool_alloc&) throw() { }
+ __pool_alloc(const __pool_alloc&) _GLIBCXX_USE_NOEXCEPT { }
template<typename _Tp1>
- __pool_alloc(const __pool_alloc<_Tp1>&) throw() { }
+ __pool_alloc(const __pool_alloc<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { }
- ~__pool_alloc() throw() { }
+ ~__pool_alloc() _GLIBCXX_USE_NOEXCEPT { }
pointer
- address(reference __x) const { return std::__addressof(__x); }
+ address(reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return std::__addressof(__x); }
+ address(const_reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_t(-1) / sizeof(_Tp); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p) { __p->~_Up(); }
+#else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
{ ::new((void *)__p) _Tp(__val); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p) { __p->~_Tp(); }
+#endif
pointer
allocate(size_type __n, const void* = 0);
diff --git a/libstdc++-v3/include/ext/rc_string_base.h b/libstdc++-v3/include/ext/rc_string_base.h
index 4a27ff6ef5..afd4d9e368 100644
--- a/libstdc++-v3/include/ext/rc_string_base.h
+++ b/libstdc++-v3/include/ext/rc_string_base.h
@@ -461,7 +461,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__alloc);
if (_M_info._M_length)
- _S_copy(__r->_M_refdata(), _M_refdata(), _M_info._M_length);
+ __rc_string_base::_S_copy(__r->_M_refdata(), _M_refdata(), _M_info._M_length);
__r->_M_set_length(_M_info._M_length);
return __r->_M_refdata();
@@ -569,7 +569,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Check for out_of_range and length_error exceptions.
_Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a);
__try
- { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
+ { __rc_string_base::_S_copy_chars(__r->_M_refdata(), __beg, __end); }
__catch(...)
{
__r->_M_destroy(__a);
@@ -590,7 +590,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Check for out_of_range and length_error exceptions.
_Rep* __r = _Rep::_S_create(__n, size_type(0), __a);
if (__n)
- _S_assign(__r->_M_refdata(), __n, __c);
+ __rc_string_base::_S_assign(__r->_M_refdata(), __n, __c);
__r->_M_set_length(__n);
return __r->_M_refdata();
@@ -659,11 +659,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_capacity(), _M_get_allocator());
if (__pos)
- _S_copy(__r->_M_refdata(), _M_data(), __pos);
+ this->_S_copy(__r->_M_refdata(), _M_data(), __pos);
if (__s && __len2)
- _S_copy(__r->_M_refdata() + __pos, __s, __len2);
+ this->_S_copy(__r->_M_refdata() + __pos, __s, __len2);
if (__how_much)
- _S_copy(__r->_M_refdata() + __pos + __len2,
+ this->_S_copy(__r->_M_refdata() + __pos + __len2,
_M_data() + __pos + __len1, __how_much);
_M_dispose();
@@ -685,9 +685,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_get_allocator());
if (__pos)
- _S_copy(__r->_M_refdata(), _M_data(), __pos);
+ this->_S_copy(__r->_M_refdata(), _M_data(), __pos);
if (__how_much)
- _S_copy(__r->_M_refdata() + __pos,
+ this->_S_copy(__r->_M_refdata() + __pos,
_M_data() + __pos + __n, __how_much);
_M_dispose();
@@ -696,7 +696,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
else if (__how_much && __n)
{
// Work in-place.
- _S_move(_M_data() + __pos,
+ this->_S_move(_M_data() + __pos,
_M_data() + __pos + __n, __how_much);
}
diff --git a/libstdc++-v3/include/ext/rope b/libstdc++-v3/include/ext/rope
index 42921516e4..d5b76ef49c 100644
--- a/libstdc++-v3/include/ext/rope
+++ b/libstdc++-v3/include/ext/rope
@@ -1,7 +1,7 @@
// SGI's rope class -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -44,6 +44,8 @@
#ifndef _ROPE
#define _ROPE 1
+#pragma GCC system_header
+
#include <algorithm>
#include <iosfwd>
#include <bits/stl_construct.h>
@@ -458,20 +460,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
volatile _RC_t _M_ref_count;
// Constructor
+#ifdef __GTHREAD_MUTEX_INIT
+ __gthread_mutex_t _M_ref_count_lock = __GTHREAD_MUTEX_INIT;
+#else
__gthread_mutex_t _M_ref_count_lock;
+#endif
- _Refcount_Base(_RC_t __n) : _M_ref_count(__n), _M_ref_count_lock()
+ _Refcount_Base(_RC_t __n) : _M_ref_count(__n)
{
-#ifdef __GTHREAD_MUTEX_INIT
- __gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT;
- _M_ref_count_lock = __tmp;
-#elif defined(__GTHREAD_MUTEX_INIT_FUNCTION)
+#ifndef __GTHREAD_MUTEX_INIT
+#ifdef __GTHREAD_MUTEX_INIT_FUNCTION
__GTHREAD_MUTEX_INIT_FUNCTION (&_M_ref_count_lock);
#else
#error __GTHREAD_MUTEX_INIT or __GTHREAD_MUTEX_INIT_FUNCTION should be defined by gthr.h abstraction layer, report problem to libstdc++@gcc.gnu.org.
#endif
+#endif
}
+#ifndef __GTHREAD_MUTEX_INIT
+ ~_Refcount_Base()
+ { __gthread_mutex_destroy(&_M_ref_count_lock); }
+#endif
+
void
_M_incr()
{
@@ -581,7 +591,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool _M_is_balanced:8;
unsigned char _M_depth;
__GC_CONST _CharT* _M_c_string;
+#ifdef __GTHREAD_MUTEX_INIT
+ __gthread_mutex_t _M_c_string_lock = __GTHREAD_MUTEX_INIT;
+#else
__gthread_mutex_t _M_c_string_lock;
+#endif
/* Flattened version of string, if needed. */
/* typically 0. */
/* If it's not 0, then the memory is owned */
@@ -602,13 +616,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
_M_tag(__t), _M_is_balanced(__b), _M_depth(__d), _M_c_string(0)
#ifdef __GTHREAD_MUTEX_INIT
- {
- // Do not copy a POSIX/gthr mutex once in use. However, bits are bits.
- __gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT;
- _M_c_string_lock = __tmp;
- }
+ { }
#else
- { __GTHREAD_MUTEX_INIT_FUNCTION (&_M_c_string_lock); }
+ { __GTHREAD_MUTEX_INIT_FUNCTION (&_M_c_string_lock); }
+ ~_Rope_RopeRep()
+ { __gthread_mutex_destroy (&_M_c_string_lock); }
#endif
#ifdef __GC
void
@@ -729,7 +741,7 @@ protected:
if (_M_data != this->_M_c_string)
this->_M_free_c_string();
- __STL_FREE_STRING(_M_data, this->_M_size, this->_M_get_allocator());
+ this->__STL_FREE_STRING(_M_data, this->_M_size, this->_M_get_allocator());
}
#endif
protected:
@@ -1170,7 +1182,7 @@ protected:
operator*()
{
if (0 == this->_M_buf_ptr)
- _S_setcache(*this);
+ this->_S_setcache(*this);
return *this->_M_buf_ptr;
}
@@ -1299,7 +1311,7 @@ protected:
_M_root_rope(__r)
{ _RopeRep::_S_ref(this->_M_root);
if (!(__r -> empty()))
- _S_setcache(*this);
+ this->_S_setcache(*this);
}
void _M_check();
diff --git a/libstdc++-v3/include/ext/ropeimpl.h b/libstdc++-v3/include/ext/ropeimpl.h
index 467b8fd93d..3ee06104c6 100644
--- a/libstdc++-v3/include/ext/ropeimpl.h
+++ b/libstdc++-v3/include/ext/ropeimpl.h
@@ -380,7 +380,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rope_RopeLeaf<_CharT, _Alloc>* __l
= (_Rope_RopeLeaf<_CharT, _Alloc>*)this;
__l->_Rope_RopeLeaf<_CharT, _Alloc>::~_Rope_RopeLeaf();
- _L_deallocate(__l, 1);
+ this->_L_deallocate(__l, 1);
break;
}
case __detail::_S_concat:
@@ -389,7 +389,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
= (_Rope_RopeConcatenation<_CharT, _Alloc>*)this;
__c->_Rope_RopeConcatenation<_CharT, _Alloc>::
~_Rope_RopeConcatenation();
- _C_deallocate(__c, 1);
+ this->_C_deallocate(__c, 1);
break;
}
case __detail::_S_function:
@@ -397,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rope_RopeFunction<_CharT, _Alloc>* __f
= (_Rope_RopeFunction<_CharT, _Alloc>*)this;
__f->_Rope_RopeFunction<_CharT, _Alloc>::~_Rope_RopeFunction();
- _F_deallocate(__f, 1);
+ this->_F_deallocate(__f, 1);
break;
}
case __detail::_S_substringfn:
@@ -406,7 +406,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
(_Rope_RopeSubstring<_CharT, _Alloc>*)this;
__ss->_Rope_RopeSubstring<_CharT, _Alloc>::
~_Rope_RopeSubstring();
- _S_deallocate(__ss, 1);
+ this->_S_deallocate(__ss, 1);
break;
}
}
@@ -430,7 +430,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
size_t __old_len = __r->_M_size;
_CharT* __new_data = (_CharT*)
- _Data_allocate(_S_rounded_up_size(__old_len + __len));
+ rope::_Data_allocate(_S_rounded_up_size(__old_len + __len));
_RopeLeaf* __result;
uninitialized_copy_n(__r->_M_data, __old_len, __new_data);
@@ -511,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
__catch(...)
{
- _C_deallocate(__result,1);
+ rope::_C_deallocate(__result,1);
__throw_exception_again;
}
// In case of exception, we need to deallocate
@@ -814,7 +814,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__result_len > __lazy_threshold)
goto lazy;
__section = (_CharT*)
- _Data_allocate(_S_rounded_up_size(__result_len));
+ rope::_Data_allocate(_S_rounded_up_size(__result_len));
__try
{ (*(__f->_M_fn))(__start, __result_len, __section); }
__catch(...)
diff --git a/libstdc++-v3/include/ext/stdio_filebuf.h b/libstdc++-v3/include/ext/stdio_filebuf.h
index 5ab2ff7adb..415f87567e 100644
--- a/libstdc++-v3/include/ext/stdio_filebuf.h
+++ b/libstdc++-v3/include/ext/stdio_filebuf.h
@@ -66,9 +66,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
stdio_filebuf() : std::basic_filebuf<_CharT, _Traits>() {}
/**
- * @param fd An open file descriptor.
- * @param mode Same meaning as in a standard filebuf.
- * @param size Optimal or preferred size of internal buffer, in chars.
+ * @param __fd An open file descriptor.
+ * @param __mode Same meaning as in a standard filebuf.
+ * @param __size Optimal or preferred size of internal buffer,
+ * in chars.
*
* This constructor associates a file stream buffer with an open
* POSIX file descriptor. The file descriptor will be automatically
@@ -78,10 +79,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t __size = static_cast<size_t>(BUFSIZ));
/**
- * @param f An open @c FILE*.
- * @param mode Same meaning as in a standard filebuf.
- * @param size Optimal or preferred size of internal buffer, in chars.
- * Defaults to system's @c BUFSIZ.
+ * @param __f An open @c FILE*.
+ * @param __mode Same meaning as in a standard filebuf.
+ * @param __size Optimal or preferred size of internal buffer,
+ * in chars. Defaults to system's @c BUFSIZ.
*
* This constructor associates a file stream buffer with an open
* C @c FILE*. The @c FILE* will not be automatically closed when the
diff --git a/libstdc++-v3/include/ext/string_conversions.h b/libstdc++-v3/include/ext/string_conversions.h
index f85ab99235..b017530e6c 100644
--- a/libstdc++-v3/include/ext/string_conversions.h
+++ b/libstdc++-v3/include/ext/string_conversions.h
@@ -1,6 +1,6 @@
// String Conversions -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,6 +31,10 @@
#pragma GCC system_header
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/c++0x_warning.h>
+#else
+
#include <bits/c++config.h>
#include <ext/numeric_traits.h>
#include <bits/functexcept.h>
@@ -98,4 +102,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
+#endif // C++11
+
#endif // _STRING_CONVERSIONS_H
diff --git a/libstdc++-v3/include/ext/throw_allocator.h b/libstdc++-v3/include/ext/throw_allocator.h
index 778b8dec16..4988f8a8a1 100644
--- a/libstdc++-v3/include/ext/throw_allocator.h
+++ b/libstdc++-v3/include/ext/throw_allocator.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -618,14 +618,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return _M_allocator.max_size(); }
pointer
- address(reference __x) const { return std::__addressof(__x); }
+ address(reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return std::__addressof(__x); }
+ address(const_reference __x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(__x); }
pointer
allocate(size_type __n, std::allocator<void>::const_pointer hint = 0)
@@ -639,20 +641,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return a;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { return _M_allocator.construct(__p, std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p)
+ { _M_allocator.destroy(__p); }
+#else
void
construct(pointer __p, const value_type& val)
{ return _M_allocator.construct(__p, val); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... _Args>
- void
- construct(pointer __p, _Args&&... __args)
- { return _M_allocator.construct(__p, std::forward<_Args>(__args)...); }
-#endif
-
void
destroy(pointer __p)
{ _M_allocator.destroy(__p); }
+#endif
void
deallocate(pointer __p, size_type __n)
@@ -694,14 +701,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef throw_allocator_limit<_Tp1> other; };
- throw_allocator_limit() throw() { }
+ throw_allocator_limit() _GLIBCXX_USE_NOEXCEPT { }
- throw_allocator_limit(const throw_allocator_limit&) throw() { }
+ throw_allocator_limit(const throw_allocator_limit&)
+ _GLIBCXX_USE_NOEXCEPT { }
template<typename _Tp1>
- throw_allocator_limit(const throw_allocator_limit<_Tp1>&) throw() { }
+ throw_allocator_limit(const throw_allocator_limit<_Tp1>&)
+ _GLIBCXX_USE_NOEXCEPT { }
- ~throw_allocator_limit() throw() { }
+ ~throw_allocator_limit() _GLIBCXX_USE_NOEXCEPT { }
};
/// Allocator throwing via random condition.
@@ -713,14 +722,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct rebind
{ typedef throw_allocator_random<_Tp1> other; };
- throw_allocator_random() throw() { }
+ throw_allocator_random() _GLIBCXX_USE_NOEXCEPT { }
- throw_allocator_random(const throw_allocator_random&) throw() { }
+ throw_allocator_random(const throw_allocator_random&)
+ _GLIBCXX_USE_NOEXCEPT { }
template<typename _Tp1>
- throw_allocator_random(const throw_allocator_random<_Tp1>&) throw() { }
+ throw_allocator_random(const throw_allocator_random<_Tp1>&)
+ _GLIBCXX_USE_NOEXCEPT { }
- ~throw_allocator_random() throw() { }
+ ~throw_allocator_random() _GLIBCXX_USE_NOEXCEPT { }
};
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/ext/type_traits.h b/libstdc++-v3/include/ext/type_traits.h
index 92747268a0..b0fa36bcec 100644
--- a/libstdc++-v3/include/ext/type_traits.h
+++ b/libstdc++-v3/include/ext/type_traits.h
@@ -161,44 +161,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __promote
{ typedef double __type; };
+ // No nested __type member for non-integer non-floating point types,
+ // allows this type to be used for SFINAE to constrain overloads in
+ // <cmath> and <complex> to only the intended types.
template<typename _Tp>
struct __promote<_Tp, false>
- { typedef _Tp __type; };
+ { };
+
+ template<>
+ struct __promote<long double>
+ { typedef long double __type; };
+
+ template<>
+ struct __promote<double>
+ { typedef double __type; };
+
+ template<>
+ struct __promote<float>
+ { typedef float __type; };
- template<typename _Tp, typename _Up>
+ template<typename _Tp, typename _Up,
+ typename _Tp2 = typename __promote<_Tp>::__type,
+ typename _Up2 = typename __promote<_Up>::__type>
struct __promote_2
{
- private:
- typedef typename __promote<_Tp>::__type __type1;
- typedef typename __promote<_Up>::__type __type2;
-
- public:
- typedef __typeof__(__type1() + __type2()) __type;
+ typedef __typeof__(_Tp2() + _Up2()) __type;
};
- template<typename _Tp, typename _Up, typename _Vp>
+ template<typename _Tp, typename _Up, typename _Vp,
+ typename _Tp2 = typename __promote<_Tp>::__type,
+ typename _Up2 = typename __promote<_Up>::__type,
+ typename _Vp2 = typename __promote<_Vp>::__type>
struct __promote_3
{
- private:
- typedef typename __promote<_Tp>::__type __type1;
- typedef typename __promote<_Up>::__type __type2;
- typedef typename __promote<_Vp>::__type __type3;
-
- public:
- typedef __typeof__(__type1() + __type2() + __type3()) __type;
+ typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type;
};
- template<typename _Tp, typename _Up, typename _Vp, typename _Wp>
+ template<typename _Tp, typename _Up, typename _Vp, typename _Wp,
+ typename _Tp2 = typename __promote<_Tp>::__type,
+ typename _Up2 = typename __promote<_Up>::__type,
+ typename _Vp2 = typename __promote<_Vp>::__type,
+ typename _Wp2 = typename __promote<_Wp>::__type>
struct __promote_4
{
- private:
- typedef typename __promote<_Tp>::__type __type1;
- typedef typename __promote<_Up>::__type __type2;
- typedef typename __promote<_Vp>::__type __type3;
- typedef typename __promote<_Wp>::__type __type4;
-
- public:
- typedef __typeof__(__type1() + __type2() + __type3() + __type4()) __type;
+ typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type;
};
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/ext/typelist.h b/libstdc++-v3/include/ext/typelist.h
index 7f94ecd728..de9b69048b 100644
--- a/libstdc++-v3/include/ext/typelist.h
+++ b/libstdc++-v3/include/ext/typelist.h
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -386,6 +387,11 @@ _GLIBCXX_END_NAMESPACE_VERSION
#define _GLIBCXX_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN12(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) >
#define _GLIBCXX_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN13(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) >
#define _GLIBCXX_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN14(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) >
+#define _GLIBCXX_TYPELIST_CHAIN16(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN15(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) >
+#define _GLIBCXX_TYPELIST_CHAIN17(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN16(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) >
+#define _GLIBCXX_TYPELIST_CHAIN18(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN17(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) >
+#define _GLIBCXX_TYPELIST_CHAIN19(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN18(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) >
+#define _GLIBCXX_TYPELIST_CHAIN20(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN19(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) >
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
diff --git a/libstdc++-v3/include/ext/vstring.h b/libstdc++-v3/include/ext/vstring.h
index 442a392257..8c4120a3be 100644
--- a/libstdc++-v3/include/ext/vstring.h
+++ b/libstdc++-v3/include/ext/vstring.h
@@ -32,7 +32,10 @@
#pragma GCC system_header
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
+
#include <ext/vstring_util.h>
#include <ext/rc_string_base.h>
#include <ext/sso_string_base.h>
@@ -141,7 +144,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// NB: per LWG issue 42, semantics different from IS:
/**
- * @brief Construct string with copy of value of @a str.
+ * @brief Construct string with copy of value of @a __str.
* @param __str Source string.
*/
__versa_string(const __versa_string& __str)
@@ -153,10 +156,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __str Source string.
*
* The newly-constructed %string contains the exact contents of
- * @a str. The contents of @a str are a valid, but unspecified
+ * @a __str. The contents of @a __str are a valid, but unspecified
* string.
*/
- __versa_string(__versa_string&& __str)
+ __versa_string(__versa_string&& __str) noexcept
: __vstring_base(std::move(__str)) { }
/**
@@ -243,7 +246,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Destroy the string instance.
*/
- ~__versa_string() { }
+ ~__versa_string() _GLIBCXX_NOEXCEPT { }
/**
* @brief Assign the value of @a str to this string.
@@ -309,7 +312,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the %string. Unshares the string.
*/
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{
this->_M_leak();
return iterator(this->_M_data());
@@ -320,7 +323,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* character in the %string.
*/
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(this->_M_data()); }
/**
@@ -328,7 +331,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* character in the %string. Unshares the string.
*/
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{
this->_M_leak();
return iterator(this->_M_data() + this->size());
@@ -339,7 +342,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* last character in the %string.
*/
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(this->_M_data() + this->size()); }
/**
@@ -348,7 +351,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* order. Unshares the string.
*/
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(this->end()); }
/**
@@ -357,7 +360,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* reverse element order.
*/
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(this->end()); }
/**
@@ -366,7 +369,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* element order. Unshares the string.
*/
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(this->begin()); }
/**
@@ -375,7 +378,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* is done in reverse element order.
*/
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(this->begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -384,7 +387,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* character in the %string.
*/
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(this->_M_data()); }
/**
@@ -392,7 +395,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* last character in the %string.
*/
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(this->_M_data() + this->size()); }
/**
@@ -401,7 +404,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* reverse element order.
*/
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(this->end()); }
/**
@@ -410,7 +413,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* is done in reverse element order.
*/
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(this->begin()); }
#endif
@@ -419,18 +422,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Returns the number of characters in the string, not including any
/// null-termination.
size_type
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return this->_M_length(); }
/// Returns the number of characters in the string, not including any
/// null-termination.
size_type
- length() const
+ length() const _GLIBCXX_NOEXCEPT
{ return this->_M_length(); }
/// Returns the size() of the largest possible %string.
size_type
- max_size() const
+ max_size() const _GLIBCXX_NOEXCEPT
{ return this->_M_max_size(); }
/**
@@ -465,10 +468,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
shrink_to_fit()
{
- __try
- { this->reserve(0); }
- __catch(...)
- { }
+ if (capacity() > size())
+ {
+ __try
+ { this->reserve(0); }
+ __catch(...)
+ { }
+ }
}
#endif
@@ -477,7 +483,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* hold before needing to allocate more memory.
*/
size_type
- capacity() const
+ capacity() const _GLIBCXX_NOEXCEPT
{ return this->_M_capacity(); }
/**
@@ -505,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Erases the string, making it empty.
*/
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ this->_M_clear(); }
/**
@@ -513,7 +519,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* <code>*this == ""</code>.
*/
bool
- empty() const
+ empty() const _GLIBCXX_NOEXCEPT
{ return this->size() == 0; }
// Element access:
@@ -1134,6 +1140,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return iterator(this->_M_data() + __pos);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Remove the last character.
+ *
+ * The string must be non-empty.
+ */
+ void
+ pop_back()
+ { this->_M_erase(size()-1, 1); }
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
/**
* @brief Replace characters with value from another string.
* @param __pos Index of first character to replace.
@@ -1484,7 +1501,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* happen.
*/
const _CharT*
- c_str() const
+ c_str() const _GLIBCXX_NOEXCEPT
{ return this->_M_data(); }
/**
@@ -1494,14 +1511,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* happen.
*/
const _CharT*
- data() const
+ data() const _GLIBCXX_NOEXCEPT
{ return this->_M_data(); }
/**
* @brief Return copy of allocator used to construct this string.
*/
allocator_type
- get_allocator() const
+ get_allocator() const _GLIBCXX_NOEXCEPT
{ return allocator_type(this->_M_get_allocator()); }
/**
@@ -1531,6 +1548,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
size_type
find(const __versa_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return this->find(__str.data(), __pos, __str.size()); }
/**
@@ -1561,7 +1579,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* found. If not found, returns npos.
*/
size_type
- find(_CharT __c, size_type __pos = 0) const;
+ find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT;
/**
* @brief Find last position of a string.
@@ -1575,6 +1593,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
size_type
rfind(const __versa_string& __str, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT
{ return this->rfind(__str.data(), __pos, __str.size()); }
/**
@@ -1620,7 +1639,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* found. If not found, returns npos.
*/
size_type
- rfind(_CharT __c, size_type __pos = npos) const;
+ rfind(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT;
/**
* @brief Find position of a character of string.
@@ -1634,6 +1653,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
size_type
find_first_of(const __versa_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_first_of(__str.data(), __pos, __str.size()); }
/**
@@ -1681,7 +1701,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: equivalent to find(c, pos).
*/
size_type
- find_first_of(_CharT __c, size_type __pos = 0) const
+ find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
{ return this->find(__c, __pos); }
/**
@@ -1697,6 +1717,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
size_type
find_last_of(const __versa_string& __str, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_last_of(__str.data(), __pos, __str.size()); }
/**
@@ -1744,7 +1765,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Note: equivalent to rfind(c, pos).
*/
size_type
- find_last_of(_CharT __c, size_type __pos = npos) const
+ find_last_of(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT
{ return this->rfind(__c, __pos); }
/**
@@ -1759,6 +1780,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
size_type
find_first_not_of(const __versa_string& __str, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT
{ return this->find_first_not_of(__str.data(), __pos, __str.size()); }
/**
@@ -1805,7 +1827,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* index where it was found. If not found, returns npos.
*/
size_type
- find_first_not_of(_CharT __c, size_type __pos = 0) const;
+ find_first_not_of(_CharT __c, size_type __pos = 0) const
+ _GLIBCXX_NOEXCEPT;
/**
* @brief Find last position of a character not in string.
@@ -1820,7 +1843,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
size_type
find_last_not_of(const __versa_string& __str,
- size_type __pos = npos) const
+ size_type __pos = npos) const _GLIBCXX_NOEXCEPT
{ return this->find_last_not_of(__str.data(), __pos, __str.size()); }
/**
@@ -1867,7 +1890,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* index where it was found. If not found, returns npos.
*/
size_type
- find_last_not_of(_CharT __c, size_type __pos = npos) const;
+ find_last_not_of(_CharT __c, size_type __pos = npos) const
+ _GLIBCXX_NOEXCEPT;
/**
* @brief Get a substring.
@@ -2012,14 +2036,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Compare substring against a character array.
- * @param __pos1 Index of first character of substring.
+ * @param __pos Index of first character of substring.
* @param __n1 Number of characters in substring.
* @param __s character array to compare against.
* @param __n2 Number of characters of s.
* @return Integer < 0, 0, or > 0.
*
* Form the substring of this string from the @a __n1
- * characters starting at @a __pos1. Form a string from the
+ * characters starting at @a __pos. Form a string from the
* first @a __n2 characters of @a __s. Returns an integer < 0
* if this substring is ordered before the string from @a __s,
* 0 if their values are equivalent, or > 0 if this substring
@@ -2027,11 +2051,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* effective length rlen of the strings to compare as the
* smallest of the length of the substring and @a __n2. The
* function then compares the two strings by calling
- * traits::compare(substring.data(),s,rlen). If the result of
+ * traits::compare(substring.data(),__s,rlen). If the result of
* the comparison is nonzero returns it, otherwise the shorter
* one is ordered first.
*
- * NB: s must have at least n2 characters, <em>\\0</em> has no special
+ * NB: __s must have at least n2 characters, <em>\\0</em> has no special
* meaning.
*/
int
@@ -2745,7 +2769,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, __gnu_cxx::__vstring>
{
size_t
- operator()(const __gnu_cxx::__vstring& __s) const
+ operator()(const __gnu_cxx::__vstring& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(), __s.length()); }
};
@@ -2756,7 +2780,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, __gnu_cxx::__wvstring>
{
size_t
- operator()(const __gnu_cxx::__wvstring& __s) const
+ operator()(const __gnu_cxx::__wvstring& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(wchar_t)); }
};
@@ -2769,7 +2793,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, __gnu_cxx::__u16vstring>
{
size_t
- operator()(const __gnu_cxx::__u16vstring& __s) const
+ operator()(const __gnu_cxx::__u16vstring& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(char16_t)); }
};
@@ -2780,7 +2804,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, __gnu_cxx::__u32vstring>
{
size_t
- operator()(const __gnu_cxx::__u32vstring& __s) const
+ operator()(const __gnu_cxx::__u32vstring& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(char32_t)); }
};
diff --git a/libstdc++-v3/include/ext/vstring.tcc b/libstdc++-v3/include/ext/vstring.tcc
index 588985bbe9..2e059e0764 100644
--- a/libstdc++-v3/include/ext/vstring.tcc
+++ b/libstdc++-v3/include/ext/vstring.tcc
@@ -291,7 +291,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <typename, typename, typename> class _Base>
typename __versa_string<_CharT, _Traits, _Alloc, _Base>::size_type
__versa_string<_CharT, _Traits, _Alloc, _Base>::
- find(_CharT __c, size_type __pos) const
+ find(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
size_type __ret = npos;
const size_type __size = this->size();
@@ -332,7 +332,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <typename, typename, typename> class _Base>
typename __versa_string<_CharT, _Traits, _Alloc, _Base>::size_type
__versa_string<_CharT, _Traits, _Alloc, _Base>::
- rfind(_CharT __c, size_type __pos) const
+ rfind(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
size_type __size = this->size();
if (__size)
@@ -402,7 +402,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <typename, typename, typename> class _Base>
typename __versa_string<_CharT, _Traits, _Alloc, _Base>::size_type
__versa_string<_CharT, _Traits, _Alloc, _Base>::
- find_first_not_of(_CharT __c, size_type __pos) const
+ find_first_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
for (; __pos < this->size(); ++__pos)
if (!traits_type::eq(this->_M_data()[__pos], __c))
@@ -436,7 +436,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <typename, typename, typename> class _Base>
typename __versa_string<_CharT, _Traits, _Alloc, _Base>::size_type
__versa_string<_CharT, _Traits, _Alloc, _Base>::
- find_last_not_of(_CharT __c, size_type __pos) const
+ find_last_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
{
size_type __size = this->size();
if (__size)
diff --git a/libstdc++-v3/include/parallel/algo.h b/libstdc++-v3/include/parallel/algo.h
index b27de9b37c..26d9e4c63f 100644
--- a/libstdc++-v3/include/parallel/algo.h
+++ b/libstdc++-v3/include/parallel/algo.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
diff --git a/libstdc++-v3/include/parallel/algobase.h b/libstdc++-v3/include/parallel/algobase.h
index 20456b57b2..8d6ec191d1 100644
--- a/libstdc++-v3/include/parallel/algobase.h
+++ b/libstdc++-v3/include/parallel/algobase.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -38,8 +38,7 @@
#include <bits/stl_algobase.h>
#include <parallel/base.h>
-#include <parallel/tags.h>
-#include <parallel/settings.h>
+#include <parallel/algorithmfwd.h>
#include <parallel/find.h>
#include <parallel/find_selectors.h>
diff --git a/libstdc++-v3/include/parallel/base.h b/libstdc++-v3/include/parallel/base.h
index 86adea8161..e4323bd1ec 100644
--- a/libstdc++-v3/include/parallel/base.h
+++ b/libstdc++-v3/include/parallel/base.h
@@ -365,7 +365,7 @@ namespace __gnu_parallel
typedef _PseudoSequenceIterator<_Tp, uint64_t> iterator;
/** @brief Constructor.
- * @param _M_val Element of the sequence.
+ * @param __val Element of the sequence.
* @param __count Number of (virtual) copies.
*/
_PseudoSequence(const _Tp& __val, _DifferenceType __count)
diff --git a/libstdc++-v3/include/parallel/compatibility.h b/libstdc++-v3/include/parallel/compatibility.h
index 9fffd8e012..ed75215cea 100644
--- a/libstdc++-v3/include/parallel/compatibility.h
+++ b/libstdc++-v3/include/parallel/compatibility.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -102,7 +102,7 @@ namespace __gnu_parallel
return _InterlockedExchangeAdd(reinterpret_cast<volatile long*>(__ptr),
__addend);
#elif defined(__GNUC__)
- return __sync_fetch_and_add(__ptr, __addend);
+ return __atomic_fetch_add(__ptr, __addend, __ATOMIC_ACQ_REL);
#elif defined(__SUNPRO_CC) && defined(__sparc)
volatile int32_t __before, __after;
do
@@ -145,11 +145,11 @@ namespace __gnu_parallel
return _InterlockedExchangeAdd64(__ptr, __addend);
#endif
#elif defined(__GNUC__) && defined(__x86_64)
- return __sync_fetch_and_add(__ptr, __addend);
+ return __atomic_fetch_add(__ptr, __addend, __ATOMIC_ACQ_REL);
#elif defined(__GNUC__) && defined(__i386) && \
(defined(__i686) || defined(__pentium4) || defined(__athlon) \
|| defined(__k8) || defined(__core2))
- return __sync_fetch_and_add(__ptr, __addend);
+ return __atomic_fetch_add(__ptr, __addend, __ATOMIC_ACQ_REL);
#elif defined(__SUNPRO_CC) && defined(__sparc)
volatile int64_t __before, __after;
do
@@ -252,7 +252,9 @@ namespace __gnu_parallel
__replacement, __comparand)
== __comparand;
#elif defined(__GNUC__)
- return __sync_bool_compare_and_swap(__ptr, __comparand, __replacement);
+ return __atomic_compare_exchange_n(__ptr, &__comparand, __replacement,
+ false, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
#elif defined(__SUNPRO_CC) && defined(__sparc)
return atomic_cas_32((volatile unsigned int*)__ptr, __comparand,
__replacement) == __comparand;
@@ -298,11 +300,15 @@ namespace __gnu_parallel
#endif
#elif defined(__GNUC__) && defined(__x86_64)
- return __sync_bool_compare_and_swap(__ptr, __comparand, __replacement);
+ return __atomic_compare_exchange_n(__ptr, &__comparand, __replacement,
+ false, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
#elif defined(__GNUC__) && defined(__i386) && \
(defined(__i686) || defined(__pentium4) || defined(__athlon) \
|| defined(__k8) || defined(__core2))
- return __sync_bool_compare_and_swap(__ptr, __comparand, __replacement);
+ return __atomic_compare_exchange_n(__ptr, &__comparand, __replacement,
+ false, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
#elif defined(__SUNPRO_CC) && defined(__sparc)
return atomic_cas_64((volatile unsigned long long*)__ptr,
__comparand, __replacement) == __comparand;
diff --git a/libstdc++-v3/include/parallel/equally_split.h b/libstdc++-v3/include/parallel/equally_split.h
index 481c988684..31a0fca72b 100644
--- a/libstdc++-v3/include/parallel/equally_split.h
+++ b/libstdc++-v3/include/parallel/equally_split.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -45,8 +45,8 @@ namespace __gnu_parallel
* @returns End of __splitter sequence, i.e. @c __s+__num_threads+1 */
template<typename _DifferenceType, typename _OutputIterator>
_OutputIterator
- equally_split(_DifferenceType __n, _ThreadIndex __num_threads,
- _OutputIterator __s)
+ __equally_split(_DifferenceType __n, _ThreadIndex __num_threads,
+ _OutputIterator __s)
{
_DifferenceType __chunk_length = __n / __num_threads;
_DifferenceType __num_longer_chunks = __n % __num_threads;
@@ -68,12 +68,13 @@ namespace __gnu_parallel
* thread number __thread_no+1 (excluded).
* @param __n Number of elements
* @param __num_threads Number of parts
+ * @param __thread_no Number of threads
* @returns splitting point */
template<typename _DifferenceType>
_DifferenceType
- equally_split_point(_DifferenceType __n,
- _ThreadIndex __num_threads,
- _ThreadIndex __thread_no)
+ __equally_split_point(_DifferenceType __n,
+ _ThreadIndex __num_threads,
+ _ThreadIndex __thread_no)
{
_DifferenceType __chunk_length = __n / __num_threads;
_DifferenceType __num_longer_chunks = __n % __num_threads;
diff --git a/libstdc++-v3/include/parallel/find.h b/libstdc++-v3/include/parallel/find.h
index 28bc703e58..bd4294a12a 100644
--- a/libstdc++-v3/include/parallel/find.h
+++ b/libstdc++-v3/include/parallel/find.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -118,7 +118,7 @@ namespace __gnu_parallel
{
__num_threads = omp_get_num_threads();
__borders = new _DifferenceType[__num_threads + 1];
- equally_split(__length, __num_threads, __borders);
+ __equally_split(__length, __num_threads, __borders);
} //single
_ThreadIndex __iam = omp_get_thread_num();
diff --git a/libstdc++-v3/include/parallel/for_each_selectors.h b/libstdc++-v3/include/parallel/for_each_selectors.h
index 3a37e5ca63..22c8b2cc77 100644
--- a/libstdc++-v3/include/parallel/for_each_selectors.h
+++ b/libstdc++-v3/include/parallel/for_each_selectors.h
@@ -228,8 +228,8 @@ namespace __gnu_parallel
_It2 __begin2_iterator;
/** @brief Constructor.
- * @param b1 Begin iterator of first sequence.
- * @param b2 Begin iterator of second sequence. */
+ * @param __b1 Begin iterator of first sequence.
+ * @param __b2 Begin iterator of second sequence. */
explicit
__inner_product_selector(_It __b1, _It2 __b2)
: __begin1_iterator(__b1), __begin2_iterator(__b2) { }
@@ -291,7 +291,7 @@ namespace __gnu_parallel
* @param __i iterator referencing object. */
template<typename _It>
void
- operator()(_It) { }
+ operator()(_It __i) { }
};
/** @brief Reduction function doing nothing. */
diff --git a/libstdc++-v3/include/parallel/losertree.h b/libstdc++-v3/include/parallel/losertree.h
index cb24f7f677..577497e787 100644
--- a/libstdc++-v3/include/parallel/losertree.h
+++ b/libstdc++-v3/include/parallel/losertree.h
@@ -171,6 +171,7 @@ namespace __gnu_parallel
{
typedef _LoserTreeBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
using _Base::_M_first_insert;
@@ -263,6 +264,7 @@ namespace __gnu_parallel
typedef _LoserTreeBase<_Tp, _Compare> _Base;
using _Base::_M_log_k;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
using _Base::_M_first_insert;
@@ -409,6 +411,7 @@ namespace __gnu_parallel
{
typedef _LoserTreePointerBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
public:
@@ -490,6 +493,7 @@ namespace __gnu_parallel
{
typedef _LoserTreePointerBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
public:
@@ -644,6 +648,7 @@ namespace __gnu_parallel
{
typedef _LoserTreeUnguardedBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
public:
@@ -731,6 +736,7 @@ namespace __gnu_parallel
{
typedef _LoserTreeUnguardedBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
public:
@@ -887,6 +893,7 @@ namespace __gnu_parallel
{
typedef _LoserTreePointerUnguardedBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
public:
@@ -972,6 +979,7 @@ namespace __gnu_parallel
{
typedef _LoserTreePointerUnguardedBase<_Tp, _Compare> _Base;
using _Base::_M_k;
+ using _Base::_M_comp;
using _Base::_M_losers;
public:
diff --git a/libstdc++-v3/include/parallel/multiseq_selection.h b/libstdc++-v3/include/parallel/multiseq_selection.h
index e77653aeef..cfba9c4366 100644
--- a/libstdc++-v3/include/parallel/multiseq_selection.h
+++ b/libstdc++-v3/include/parallel/multiseq_selection.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -46,8 +46,6 @@
#include <bits/stl_algo.h>
-#include <parallel/sort.h>
-
namespace __gnu_parallel
{
/** @brief Compare __a pair of types lexicographically, ascending. */
diff --git a/libstdc++-v3/include/parallel/multiway_merge.h b/libstdc++-v3/include/parallel/multiway_merge.h
index 00df31c131..a1977da3a8 100644
--- a/libstdc++-v3/include/parallel/multiway_merge.h
+++ b/libstdc++-v3/include/parallel/multiway_merge.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -45,6 +45,7 @@
#include <parallel/features.h>
#include <parallel/parallel.h>
#include <parallel/losertree.h>
+#include <parallel/multiseq_selection.h>
#if _GLIBCXX_ASSERTIONS
#include <parallel/checkers.h>
#endif
@@ -54,6 +55,12 @@
namespace __gnu_parallel
{
+ template<typename _RAIter1, typename _RAIter2, typename _OutputIterator,
+ typename _DifferenceTp, typename _Compare>
+ _OutputIterator
+ __merge_advance(_RAIter1&, _RAIter1, _RAIter2&, _RAIter2,
+ _OutputIterator, _DifferenceTp, _Compare);
+
/** @brief _Iterator wrapper supporting an implicit supremum at the end
* of the sequence, dominating all comparisons.
*
@@ -634,10 +641,7 @@ namespace __gnu_parallel
/** @brief Multi-way merging procedure for a high branching factor,
* requiring sentinels to exist.
*
- * @param __stable The value must the same as for the used LoserTrees.
- * @param UnguardedLoserTree _Loser Tree variant to use for the unguarded
- * merging.
- * @param GuardedLoserTree _Loser Tree variant to use for the guarded
+ * @tparam UnguardedLoserTree _Loser Tree variant to use for the unguarded
* merging.
*
* @param __seqs_begin Begin iterator of iterator pair input sequence.
@@ -904,7 +908,6 @@ namespace __gnu_parallel
* @param __comp Comparator.
* @param __length Maximum length to merge, possibly larger than the
* number of elements available.
- * @param __stable Stable merging incurs a performance penalty.
* @param __sentinel The sequences have __a __sentinel element.
* @return End iterator of output sequence. */
template<bool __stable,
@@ -1144,7 +1147,7 @@ namespace __gnu_parallel
_DifferenceType* __borders =
new _DifferenceType[__num_threads + 1];
- equally_split(__length, __num_threads, __borders);
+ __equally_split(__length, __num_threads, __borders);
for (_ThreadIndex __s = 0; __s < (__num_threads - 1); ++__s)
{
@@ -1199,7 +1202,9 @@ namespace __gnu_parallel
*
* Must not be called if the number of sequences is 1.
*
- * @param _Splitter functor to split input (either __exact or sampling based)
+ * @tparam _Splitter functor to split input (either __exact or sampling based)
+ * @tparam __stable Stable merging incurs a performance penalty.
+ * @tparam __sentinel Ignored.
*
* @param __seqs_begin Begin iterator of iterator pair input sequence.
* @param __seqs_end End iterator of iterator pair input sequence.
@@ -1207,8 +1212,6 @@ namespace __gnu_parallel
* @param __comp Comparator.
* @param __length Maximum length to merge, possibly larger than the
* number of elements available.
- * @param __stable Stable merging incurs a performance penalty.
- * @param __sentinel Ignored.
* @return End iterator of output sequence.
*/
template<bool __stable,
@@ -1389,11 +1392,11 @@ namespace __gnu_parallel
* @post return __value - __target = min(__length, number of elements in all
* sequences).
*
- * @param _RAIterPairIterator iterator over sequence
+ * @tparam _RAIterPairIterator iterator over sequence
* of pairs of iterators
- * @param _RAIterOut iterator over target sequence
- * @param _DifferenceTp difference type for the sequence
- * @param _Compare strict weak ordering type to compare elements
+ * @tparam _RAIterOut iterator over target sequence
+ * @tparam _DifferenceTp difference type for the sequence
+ * @tparam _Compare strict weak ordering type to compare elements
* in sequences
*
* @param __seqs_begin __begin of sequence __sequence
@@ -1753,11 +1756,11 @@ namespace __gnu_parallel
*
* @see stable_multiway_merge_sentinels
*
- * @param _RAIterPairIterator iterator over sequence
+ * @tparam _RAIterPairIterator iterator over sequence
* of pairs of iterators
- * @param _RAIterOut iterator over target sequence
- * @param _DifferenceTp difference type for the sequence
- * @param _Compare strict weak ordering type to compare elements
+ * @tparam _RAIterOut iterator over target sequence
+ * @tparam _DifferenceTp difference type for the sequence
+ * @tparam _Compare strict weak ordering type to compare elements
* in sequences
*
* @param __seqs_begin __begin of sequence __sequence
diff --git a/libstdc++-v3/include/parallel/multiway_mergesort.h b/libstdc++-v3/include/parallel/multiway_mergesort.h
index af7c10ac11..0a9e78c1a9 100644
--- a/libstdc++-v3/include/parallel/multiway_mergesort.h
+++ b/libstdc++-v3/include/parallel/multiway_mergesort.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -105,8 +105,8 @@ namespace __gnu_parallel
_DifferenceType* __es = new _DifferenceType[__num_samples + 2];
- equally_split(__sd->_M_starts[__iam + 1] - __sd->_M_starts[__iam],
- __num_samples + 1, __es);
+ __equally_split(__sd->_M_starts[__iam + 1] - __sd->_M_starts[__iam],
+ __num_samples + 1, __es);
for (_DifferenceType __i = 0; __i < __num_samples; ++__i)
::new(&(__sd->_M_samples[__iam * __num_samples + __i]))
@@ -387,7 +387,6 @@ namespace __gnu_parallel
* @param __begin Begin iterator of sequence.
* @param __end End iterator of sequence.
* @param __comp Comparator.
- * @param __n Length of sequence.
* @param __num_threads Number of threads to use.
*/
template<bool __stable, bool __exact, typename _RAIter,
diff --git a/libstdc++-v3/include/parallel/par_loop.h b/libstdc++-v3/include/parallel/par_loop.h
index b776df4b7c..d911690856 100644
--- a/libstdc++-v3/include/parallel/par_loop.h
+++ b/libstdc++-v3/include/parallel/par_loop.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -94,8 +94,8 @@ namespace __gnu_parallel
_Result* __reduct;
_DifferenceType
- __start = equally_split_point(__length, __num_threads, __iam),
- __stop = equally_split_point(__length, __num_threads, __iam + 1);
+ __start = __equally_split_point(__length, __num_threads, __iam),
+ __stop = __equally_split_point(__length, __num_threads, __iam + 1);
if (__start < __stop)
{
diff --git a/libstdc++-v3/include/parallel/partial_sum.h b/libstdc++-v3/include/parallel/partial_sum.h
index 0be9881781..aaf271256e 100644
--- a/libstdc++-v3/include/parallel/partial_sum.h
+++ b/libstdc++-v3/include/parallel/partial_sum.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -80,7 +80,6 @@ namespace __gnu_parallel
* @param __result Begin iterator of output sequence.
* @param __bin_op Associative binary function.
* @param __n Length of sequence.
- * @param __num_threads Number of threads to use.
* @return End iterator of output sequence.
*/
template<typename _IIter,
@@ -124,7 +123,7 @@ namespace __gnu_parallel
__borders = new _DifferenceType[__num_threads + 2];
if (__s.partial_sum_dilation == 1.0f)
- equally_split(__n, __num_threads + 1, __borders);
+ __equally_split(__n, __num_threads + 1, __borders);
else
{
_DifferenceType __first_part_length =
diff --git a/libstdc++-v3/include/parallel/queue.h b/libstdc++-v3/include/parallel/queue.h
index 03c1c78bb2..ea72c8acd4 100644
--- a/libstdc++-v3/include/parallel/queue.h
+++ b/libstdc++-v3/include/parallel/queue.h
@@ -64,7 +64,7 @@ namespace __gnu_parallel
public:
/** @brief Constructor. Not to be called concurrent, of course.
- * @param _M_max_size Maximal number of elements to be contained. */
+ * @param __max_size Maximal number of elements to be contained. */
_RestrictedBoundedConcurrentQueue(_SequenceIndex __max_size)
{
_M_max_size = __max_size;
diff --git a/libstdc++-v3/include/parallel/random_number.h b/libstdc++-v3/include/parallel/random_number.h
index c39f15e129..c8994bd9c2 100644
--- a/libstdc++-v3/include/parallel/random_number.h
+++ b/libstdc++-v3/include/parallel/random_number.h
@@ -104,7 +104,7 @@ namespace __gnu_parallel
}
/** @brief Generate a number of random bits, run-time parameter.
- * @param bits Number of bits to generate. */
+ * @param __bits Number of bits to generate. */
unsigned long
__genrand_bits(int __bits)
{
diff --git a/libstdc++-v3/include/parallel/search.h b/libstdc++-v3/include/parallel/search.h
index 9709925618..b58ee9b8ae 100644
--- a/libstdc++-v3/include/parallel/search.h
+++ b/libstdc++-v3/include/parallel/search.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -44,7 +44,7 @@ namespace __gnu_parallel
* @brief Precalculate __advances for Knuth-Morris-Pratt algorithm.
* @param __elements Begin iterator of sequence to search for.
* @param __length Length of sequence to search for.
- * @param __advances Returned __offsets.
+ * @param __off Returned __offsets.
*/
template<typename _RAIter, typename _DifferenceTp>
void
@@ -120,7 +120,7 @@ namespace __gnu_parallel
{
__num_threads = omp_get_num_threads();
__splitters = new _DifferenceType[__num_threads + 1];
- equally_split(__input_length, __num_threads, __splitters);
+ __equally_split(__input_length, __num_threads, __splitters);
}
_ThreadIndex __iam = omp_get_thread_num();
diff --git a/libstdc++-v3/include/parallel/set_operations.h b/libstdc++-v3/include/parallel/set_operations.h
index f552c1dda1..9699ae9840 100644
--- a/libstdc++-v3/include/parallel/set_operations.h
+++ b/libstdc++-v3/include/parallel/set_operations.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -383,7 +383,7 @@ namespace __gnu_parallel
__num_threads = omp_get_num_threads();
__borders = new _DifferenceType[__num_threads + 2];
- equally_split(__size, __num_threads + 1, __borders);
+ __equally_split(__size, __num_threads + 1, __borders);
__block_begins = new _IteratorPair[__num_threads + 1];
// Very __start.
__block_begins[0] = std::make_pair(__begin1, __begin2);
diff --git a/libstdc++-v3/include/parallel/sort.h b/libstdc++-v3/include/parallel/sort.h
index f1a163c63b..a038618e6a 100644
--- a/libstdc++-v3/include/parallel/sort.h
+++ b/libstdc++-v3/include/parallel/sort.h
@@ -67,6 +67,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
@@ -90,6 +91,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
@@ -110,6 +112,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
@@ -129,6 +132,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
@@ -149,7 +153,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
- * @param __stable Sort __stable.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
@@ -171,6 +175,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
@@ -190,7 +195,7 @@ namespace __gnu_parallel
* @param __begin Begin iterator of input sequence.
* @param __end End iterator of input sequence.
* @param __comp Comparator.
- * @param __stable Sort __stable.
+ * @tparam __stable Sort stable.
* @callgraph
*/
template<bool __stable, typename _RAIter, typename _Compare>
diff --git a/libstdc++-v3/include/parallel/unique_copy.h b/libstdc++-v3/include/parallel/unique_copy.h
index 72c84a9ccf..27221e78a3 100644
--- a/libstdc++-v3/include/parallel/unique_copy.h
+++ b/libstdc++-v3/include/parallel/unique_copy.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -74,7 +74,7 @@ namespace __gnu_parallel
{
__num_threads = omp_get_num_threads();
__borders = new _DifferenceType[__num_threads + 2];
- equally_split(__size, __num_threads + 1, __borders);
+ __equally_split(__size, __num_threads + 1, __borders);
__counter = new _DifferenceType[__num_threads + 1];
}
diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h
index 510a6552f5..b85b552447 100644
--- a/libstdc++-v3/include/precompiled/stdc++.h
+++ b/libstdc++-v3/include/precompiled/stdc++.h
@@ -1,6 +1,6 @@
// C++ includes used for precompiling -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -53,6 +53,7 @@
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
+#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
@@ -106,6 +107,7 @@
#include <random>
#include <ratio>
#include <regex>
+#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
diff --git a/libstdc++-v3/include/profile/base.h b/libstdc++-v3/include/profile/base.h
index ef17443b37..fd3e431df0 100644
--- a/libstdc++-v3/include/profile/base.h
+++ b/libstdc++-v3/include/profile/base.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/base.h
* @brief Sequential helper functions.
diff --git a/libstdc++-v3/include/profile/bitset b/libstdc++-v3/include/profile/bitset
index a995afa972..17ee49b5a6 100644
--- a/libstdc++-v3/include/profile/bitset
+++ b/libstdc++-v3/include/profile/bitset
@@ -1,6 +1,6 @@
// Profiling bitset implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -52,42 +52,42 @@ namespace __profile
friend class bitset;
reference();
- reference(const _Base_ref& __base, bitset* __seq)
+ reference(const _Base_ref& __base, bitset* __seq) _GLIBCXX_NOEXCEPT
: _Base_ref(__base)
{ }
public:
- reference(const reference& __x)
+ reference(const reference& __x) _GLIBCXX_NOEXCEPT
: _Base_ref(__x)
{ }
reference&
- operator=(bool __x)
+ operator=(bool __x) _GLIBCXX_NOEXCEPT
{
*static_cast<_Base_ref*>(this) = __x;
return *this;
}
reference&
- operator=(const reference& __x)
+ operator=(const reference& __x) _GLIBCXX_NOEXCEPT
{
*static_cast<_Base_ref*>(this) = __x;
return *this;
}
bool
- operator~() const
+ operator~() const _GLIBCXX_NOEXCEPT
{
return ~(*static_cast<const _Base_ref*>(this));
}
- operator bool() const
+ operator bool() const _GLIBCXX_NOEXCEPT
{
return *static_cast<const _Base_ref*>(this);
}
reference&
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
_Base_ref::flip();
return *this;
@@ -95,10 +95,11 @@ namespace __profile
};
// 23.3.5.1 constructors:
- _GLIBCXX_CONSTEXPR bitset() : _Base() { }
+ _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
+ : _Base() { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- constexpr bitset(unsigned long long __val)
+ constexpr bitset(unsigned long long __val) noexcept
#else
bitset(unsigned long __val)
#endif
@@ -138,42 +139,42 @@ namespace __profile
// 23.3.5.2 bitset operations:
bitset<_Nb>&
- operator&=(const bitset<_Nb>& __rhs)
+ operator&=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
_M_base() &= __rhs;
return *this;
}
bitset<_Nb>&
- operator|=(const bitset<_Nb>& __rhs)
+ operator|=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
_M_base() |= __rhs;
return *this;
}
bitset<_Nb>&
- operator^=(const bitset<_Nb>& __rhs)
+ operator^=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
_M_base() ^= __rhs;
return *this;
}
bitset<_Nb>&
- operator<<=(size_t __pos)
+ operator<<=(size_t __pos) _GLIBCXX_NOEXCEPT
{
_M_base() <<= __pos;
return *this;
}
bitset<_Nb>&
- operator>>=(size_t __pos)
+ operator>>=(size_t __pos) _GLIBCXX_NOEXCEPT
{
_M_base() >>= __pos;
return *this;
}
bitset<_Nb>&
- set()
+ set() _GLIBCXX_NOEXCEPT
{
_Base::set();
return *this;
@@ -189,7 +190,7 @@ namespace __profile
}
bitset<_Nb>&
- reset()
+ reset() _GLIBCXX_NOEXCEPT
{
_Base::reset();
return *this;
@@ -202,10 +203,12 @@ namespace __profile
return *this;
}
- bitset<_Nb> operator~() const { return bitset(~_M_base()); }
+ bitset<_Nb>
+ operator~() const _GLIBCXX_NOEXCEPT
+ { return bitset(~_M_base()); }
bitset<_Nb>&
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
_Base::flip();
return *this;
@@ -229,10 +232,10 @@ namespace __profile
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 11. Bitset minor problems
- bool
+ _GLIBCXX_CONSTEXPR bool
operator[](size_t __pos) const
{
- return _M_base()[__pos];
+ return _Base::operator[](__pos);
}
using _Base::to_ulong;
@@ -305,11 +308,11 @@ namespace __profile
using _Base::size;
bool
- operator==(const bitset<_Nb>& __rhs) const
+ operator==(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
{ return _M_base() == __rhs; }
bool
- operator!=(const bitset<_Nb>& __rhs) const
+ operator!=(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
{ return _M_base() != __rhs; }
using _Base::test;
@@ -318,33 +321,35 @@ namespace __profile
using _Base::none;
bitset<_Nb>
- operator<<(size_t __pos) const
+ operator<<(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(_M_base() << __pos); }
bitset<_Nb>
- operator>>(size_t __pos) const
+ operator>>(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(_M_base() >> __pos); }
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT
+ { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT
+ { return *this; }
};
template<size_t _Nb>
bitset<_Nb>
- operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(__x) &= __y; }
template<size_t _Nb>
bitset<_Nb>
- operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(__x) |= __y; }
template<size_t _Nb>
bitset<_Nb>
- operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(__x) ^= __y; }
template<typename _CharT, typename _Traits, size_t _Nb>
@@ -367,7 +372,7 @@ namespace __profile
: public __hash_base<size_t, __profile::bitset<_Nb>>
{
size_t
- operator()(const __profile::bitset<_Nb>& __b) const
+ operator()(const __profile::bitset<_Nb>& __b) const noexcept
{ return std::hash<_GLIBCXX_STD_C::bitset<_Nb>>()(__b._M_base()); }
};
#endif
diff --git a/libstdc++-v3/include/profile/deque b/libstdc++-v3/include/profile/deque
index 1c0e53c723..48a18c984d 100644
--- a/libstdc++-v3/include/profile/deque
+++ b/libstdc++-v3/include/profile/deque
@@ -1,6 +1,6 @@
// Profiling deque implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -101,7 +101,7 @@ namespace __profile
: _Base(__l, __a) { }
#endif
- ~deque() { }
+ ~deque() _GLIBCXX_NOEXCEPT { }
deque&
operator=(const deque& __x)
@@ -154,52 +154,52 @@ namespace __profile
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin()); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin()); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end()); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end()); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin()); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end()); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -392,16 +392,16 @@ namespace __profile
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
_Base::clear();
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
};
template<typename _Tp, typename _Alloc>
diff --git a/libstdc++-v3/include/profile/forward_list b/libstdc++-v3/include/profile/forward_list
index 00af855d78..618b2480ca 100644
--- a/libstdc++-v3/include/profile/forward_list
+++ b/libstdc++-v3/include/profile/forward_list
@@ -1,6 +1,6 @@
// <forward_list> -*- C++ -*-
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -83,7 +83,7 @@ namespace __profile
: _Base(__list)
{ }
- forward_list(forward_list&& __list)
+ forward_list(forward_list&& __list) noexcept
: _Base(std::move(__list)) { }
forward_list(std::initializer_list<_Tp> __il,
@@ -91,7 +91,7 @@ namespace __profile
: _Base(__il, __al)
{ }
- ~forward_list()
+ ~forward_list() noexcept
{ }
forward_list&
@@ -119,10 +119,10 @@ namespace __profile
}
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const noexcept { return *this; }
};
template<typename _Tp, typename _Alloc>
diff --git a/libstdc++-v3/include/profile/impl/profiler.h b/libstdc++-v3/include/profile/impl/profiler.h
index ab9cd90303..49785bbee8 100644
--- a/libstdc++-v3/include/profile/impl/profiler.h
+++ b/libstdc++-v3/include/profile/impl/profiler.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler.h
* @brief Interface of the profiling runtime library.
diff --git a/libstdc++-v3/include/profile/impl/profiler_algos.h b/libstdc++-v3/include/profile/impl/profiler_algos.h
index d4de43e9ee..977afaa800 100644
--- a/libstdc++-v3/include/profile/impl/profiler_algos.h
+++ b/libstdc++-v3/include/profile/impl/profiler_algos.h
@@ -3,30 +3,23 @@
// Copyright (C) 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_algos.h
* @brief Algorithms used by the profile extension.
diff --git a/libstdc++-v3/include/profile/impl/profiler_container_size.h b/libstdc++-v3/include/profile/impl/profiler_container_size.h
index 12cee54969..26b2c72c2e 100644
--- a/libstdc++-v3/include/profile/impl/profiler_container_size.h
+++ b/libstdc++-v3/include/profile/impl/profiler_container_size.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_container_size.h
* @brief Diagnostics for container sizes.
diff --git a/libstdc++-v3/include/profile/impl/profiler_hash_func.h b/libstdc++-v3/include/profile/impl/profiler_hash_func.h
index 9f6c641699..7ff11cd03b 100644
--- a/libstdc++-v3/include/profile/impl/profiler_hash_func.h
+++ b/libstdc++-v3/include/profile/impl/profiler_hash_func.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_hash_func.h
* @brief Data structures to represent profiling traces.
diff --git a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h
index 9d5cbc793e..8557a60731 100644
--- a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h
+++ b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_hashtable_size.h
* @brief Collection of hashtable size traces.
diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h
index 299a17d5af..2195ccf90d 100644
--- a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h
+++ b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_list_to_slist.h
* @brief Diagnostics for list to slist.
diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h
index df03267bd4..b3840a747c 100644
--- a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h
+++ b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_list_to_vector.h
* @brief diagnostics for list to vector.
diff --git a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h
index cc7c849a42..e232effe84 100644
--- a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h
+++ b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_map_to_unordered_map.h
* @brief Diagnostics for map to unordered_map.
diff --git a/libstdc++-v3/include/profile/impl/profiler_node.h b/libstdc++-v3/include/profile/impl/profiler_node.h
index c32b94e231..efdfe14678 100644
--- a/libstdc++-v3/include/profile/impl/profiler_node.h
+++ b/libstdc++-v3/include/profile/impl/profiler_node.h
@@ -1,32 +1,25 @@
// -*- C++ -*-
//
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_node.h
* @brief Data structures to represent a single profiling event.
@@ -102,10 +95,10 @@ namespace __gnu_profile
if (!__s)
return 0;
- __UINTPTR_TYPE__ __index = 0;
+ std::size_t __index = 0;
__stack_npt::const_iterator __it;
for (__it = __s->begin(); __it != __s->end(); ++__it)
- __index += reinterpret_cast<__UINTPTR_TYPE__>(*__it);
+ __index += reinterpret_cast<std::size_t>(*__it);
return __index;
}
diff --git a/libstdc++-v3/include/profile/impl/profiler_state.h b/libstdc++-v3/include/profile/impl/profiler_state.h
index 111b97e0ec..b0f5f8b275 100644
--- a/libstdc++-v3/include/profile/impl/profiler_state.h
+++ b/libstdc++-v3/include/profile/impl/profiler_state.h
@@ -1,32 +1,25 @@
// -*- C++ -*-
//
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_state.h
* @brief Global profiler state.
@@ -45,9 +38,12 @@ namespace __gnu_profile
inline bool
__turn(__state_type __s)
- { return (_GLIBCXX_PROFILE_DATA(__state)
- == __sync_val_compare_and_swap(&_GLIBCXX_PROFILE_DATA(__state),
- __INVALID, __s)); }
+ {
+ __state_type inv(__INVALID);
+ return __atomic_compare_exchange_n(&_GLIBCXX_PROFILE_DATA(__state),
+ &inv, __s, false, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED);
+ }
inline bool
__turn_on()
diff --git a/libstdc++-v3/include/profile/impl/profiler_trace.h b/libstdc++-v3/include/profile/impl/profiler_trace.h
index 1e0054208c..dadc5cac5e 100644
--- a/libstdc++-v3/include/profile/impl/profiler_trace.h
+++ b/libstdc++-v3/include/profile/impl/profiler_trace.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_trace.h
* @brief Data structures to represent profiling traces.
diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_size.h b/libstdc++-v3/include/profile/impl/profiler_vector_size.h
index 0af384f4ec..604984577e 100644
--- a/libstdc++-v3/include/profile/impl/profiler_vector_size.h
+++ b/libstdc++-v3/include/profile/impl/profiler_vector_size.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_vector_size.h
* @brief Collection of vector size traces.
diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h
index 91963139bd..7387ab6145 100644
--- a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h
+++ b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h
@@ -3,30 +3,23 @@
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/impl/profiler_vector_to_list.h
* @brief diagnostics for vector to list.
diff --git a/libstdc++-v3/include/profile/iterator_tracker.h b/libstdc++-v3/include/profile/iterator_tracker.h
index 733429daad..91f733cf75 100644
--- a/libstdc++-v3/include/profile/iterator_tracker.h
+++ b/libstdc++-v3/include/profile/iterator_tracker.h
@@ -93,7 +93,7 @@ namespace __profile
return *this;
}
- __iterator_tracker&
+ __iterator_tracker
operator++(int)
{
_M_ds->_M_profile_iterate();
@@ -110,7 +110,7 @@ namespace __profile
return *this;
}
- __iterator_tracker&
+ __iterator_tracker
operator--(int)
{
_M_ds->_M_profile_iterate(1);
diff --git a/libstdc++-v3/include/profile/list b/libstdc++-v3/include/profile/list
index 21279d2ccb..33b1ae64d8 100644
--- a/libstdc++-v3/include/profile/list
+++ b/libstdc++-v3/include/profile/list
@@ -1,6 +1,6 @@
// Profiling list implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -67,7 +67,7 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
explicit
list(const _Allocator& __a = _Allocator())
: _Base(__a)
- {
+ {
__profcxx_list_construct(this); // list2slist
__profcxx_list_construct2(this); // list2vector
}
@@ -76,7 +76,7 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
explicit
list(size_type __n)
: _Base(__n)
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
@@ -84,7 +84,7 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
list(size_type __n, const _Tp& __value,
const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a)
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
@@ -93,7 +93,7 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
list(size_type __n, const _Tp& __value = _Tp(),
const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a)
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
@@ -103,29 +103,29 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
list(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
: _Base(__first, __last, __a)
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
list(const list& __x)
: _Base(__x)
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
list(const _Base& __x)
: _Base(__x)
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- list(list&& __x)
+ list(list&& __x) noexcept
: _Base(std::move(__x))
- {
+ {
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
@@ -135,7 +135,8 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
: _Base(__l, __a) { }
#endif
- ~list() {
+ ~list() _GLIBCXX_NOEXCEPT
+ {
__profcxx_list_destruct(this);
__profcxx_list_destruct2(this);
}
@@ -183,64 +184,64 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{
__profcxx_list_rewind(this);
return iterator(_Base::end(), this);
}
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{
__profcxx_list_rewind(this);
return const_iterator(_Base::end(), this);
}
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{
__profcxx_list_rewind(this);
return reverse_iterator(end());
}
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{
__profcxx_list_rewind(this);
return const_reverse_iterator(end());
}
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -388,7 +389,7 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
{ _Base::swap(__x); }
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ _Base::clear(); }
// 23.2.2.4 list operations:
@@ -564,15 +565,15 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
using _Base::reverse;
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
- inline void _M_profile_find() const
+ void _M_profile_find() const
{ }
- inline void _M_profile_iterate(int __rewind = 0) const
+ void _M_profile_iterate(int __rewind = 0) const
{
__profcxx_list_operation(this);
__profcxx_list_iterate(this);
diff --git a/libstdc++-v3/include/profile/map b/libstdc++-v3/include/profile/map
index e396b85239..7806b992b5 100644
--- a/libstdc++-v3/include/profile/map
+++ b/libstdc++-v3/include/profile/map
@@ -5,27 +5,21 @@
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/map
* This file is a GNU profile extension to the Standard C++ Library.
diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h
index 1edc16c787..42c32aae4c 100644
--- a/libstdc++-v3/include/profile/map.h
+++ b/libstdc++-v3/include/profile/map.h
@@ -1,31 +1,25 @@
// Profiling map implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/map.h
* This file is a GNU profile extension to the Standard C++ Library.
@@ -92,6 +86,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
map(map&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _Base(std::move(__x))
{ }
@@ -101,7 +96,7 @@ namespace __profile
: _Base(__l, __c, __a) { }
#endif
- ~map()
+ ~map() _GLIBCXX_NOEXCEPT
{ __profcxx_map_to_unordered_map_destruct(this); }
map&
@@ -137,44 +132,44 @@ namespace __profile
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return _Base::begin(); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return _Base::begin(); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return _Base::end(); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return _Base::end(); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{
__profcxx_map_to_unordered_map_invalidate(this);
return reverse_iterator(end());
}
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{
__profcxx_map_to_unordered_map_invalidate(this);
return const_reverse_iterator(end());
}
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{
__profcxx_map_to_unordered_map_invalidate(this);
return reverse_iterator(begin());
}
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{
__profcxx_map_to_unordered_map_invalidate(this);
return const_reverse_iterator(begin());
@@ -182,22 +177,22 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin()); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end()); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{
__profcxx_map_to_unordered_map_invalidate(this);
return const_reverse_iterator(end());
}
const_reverse_iterator
- crend() const
+ crend() const noexcept
{
__profcxx_map_to_unordered_map_invalidate(this);
return const_reverse_iterator(begin());
@@ -253,8 +248,8 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
std::pair<iterator, bool>
insert(_Pair&& __x)
{
@@ -294,8 +289,8 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __position, _Pair&& __x)
{
@@ -326,6 +321,10 @@ namespace __profile
__profcxx_map_to_unordered_map_erase(this, size(), 1);
return __i;
}
+
+ iterator
+ erase(iterator __position)
+ { return erase(const_iterator(__position)); }
#else
void
erase(iterator __position)
@@ -359,12 +358,11 @@ namespace __profile
#endif
void
-
swap(map& __x)
{ _Base::swap(__x); }
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ this->erase(begin(), end()); }
// observers:
@@ -443,10 +441,10 @@ namespace __profile
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
};
diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h
index 76ce805f3d..608d6b76c6 100644
--- a/libstdc++-v3/include/profile/multimap.h
+++ b/libstdc++-v3/include/profile/multimap.h
@@ -1,6 +1,6 @@
// Profiling multimap implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -82,6 +82,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multimap(multimap&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _Base(std::move(__x))
{ }
@@ -91,7 +92,7 @@ namespace __profile
: _Base(__l, __c, __a) { }
#endif
- ~multimap() { }
+ ~multimap() _GLIBCXX_NOEXCEPT { }
multimap&
operator=(const multimap& __x)
@@ -124,52 +125,52 @@ namespace __profile
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin()); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin()); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end()); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end()); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin()); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end()); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -185,8 +186,8 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(_Pair&& __x)
{ return iterator(_Base::insert(std::forward<_Pair>(__x))); }
@@ -208,8 +209,8 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __position, _Pair&& __x)
{ return iterator(_Base::insert(__position,
@@ -225,6 +226,10 @@ namespace __profile
iterator
erase(const_iterator __position)
{ return iterator(_Base::erase(__position)); }
+
+ iterator
+ erase(iterator __position)
+ { return iterator(_Base::erase(__position)); }
#else
void
erase(iterator __position)
@@ -260,7 +265,7 @@ namespace __profile
{ _Base::swap(__x); }
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ this->erase(begin(), end()); }
// observers:
@@ -315,10 +320,10 @@ namespace __profile
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
};
template<typename _Key, typename _Tp,
diff --git a/libstdc++-v3/include/profile/multiset.h b/libstdc++-v3/include/profile/multiset.h
index c6902a0fed..a5779383a5 100644
--- a/libstdc++-v3/include/profile/multiset.h
+++ b/libstdc++-v3/include/profile/multiset.h
@@ -1,6 +1,6 @@
// Profiling multiset implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -82,6 +82,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multiset(multiset&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _Base(std::move(__x))
{ }
@@ -91,7 +92,7 @@ namespace __profile
: _Base(__l, __comp, __a) { }
#endif
- ~multiset() { }
+ ~multiset() _GLIBCXX_NOEXCEPT { }
multiset&
operator=(const multiset& __x)
@@ -124,52 +125,52 @@ namespace __profile
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin()); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin()); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end()); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end()); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin()); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end()); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -249,7 +250,7 @@ namespace __profile
{ _Base::swap(__x); }
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ this->erase(begin(), end()); }
// observers:
@@ -312,10 +313,10 @@ namespace __profile
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
};
diff --git a/libstdc++-v3/include/profile/set b/libstdc++-v3/include/profile/set
index 11603a8485..55ffe74dee 100644
--- a/libstdc++-v3/include/profile/set
+++ b/libstdc++-v3/include/profile/set
@@ -5,27 +5,21 @@
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/set
* This file is a GNU profile extension to the Standard C++ Library.
diff --git a/libstdc++-v3/include/profile/set.h b/libstdc++-v3/include/profile/set.h
index d10a11f2e5..47261e9160 100644
--- a/libstdc++-v3/include/profile/set.h
+++ b/libstdc++-v3/include/profile/set.h
@@ -1,6 +1,6 @@
// Profiling set implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -82,6 +82,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
set(set&& __x)
+ noexcept(is_nothrow_copy_constructible<_Compare>::value)
: _Base(std::move(__x))
{ }
@@ -91,7 +92,7 @@ namespace __profile
: _Base(__l, __comp, __a) { }
#endif
- ~set() { }
+ ~set() _GLIBCXX_NOEXCEPT { }
set&
operator=(const set& __x)
@@ -124,52 +125,52 @@ namespace __profile
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin()); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin()); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end()); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end()); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin()); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end()); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -259,7 +260,7 @@ namespace __profile
{ _Base::swap(__x); }
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{ this->erase(begin(), end()); }
// observers:
@@ -322,10 +323,10 @@ namespace __profile
}
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
};
diff --git a/libstdc++-v3/include/profile/unordered_map b/libstdc++-v3/include/profile/unordered_map
index cc54009e3f..266e804fe3 100644
--- a/libstdc++-v3/include/profile/unordered_map
+++ b/libstdc++-v3/include/profile/unordered_map
@@ -1,31 +1,25 @@
// Profiling unordered_map/unordered_multimap implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/unordered_map
* This file is a GNU profile extension to the Standard C++ Library.
@@ -96,6 +90,13 @@ namespace __profile
__profcxx_hashtable_construct2(this);
}
+ unordered_map(const unordered_map& __x)
+ : _Base(__x)
+ {
+ __profcxx_hashtable_construct(this, _Base::bucket_count());
+ __profcxx_hashtable_construct2(this);
+ }
+
unordered_map(const _Base& __x)
: _Base(__x)
{
@@ -142,7 +143,7 @@ namespace __profile
return *this;
}
- ~unordered_map()
+ ~unordered_map() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -150,14 +151,13 @@ namespace __profile
}
_Base&
- _M_base() { return *this; }
+ _M_base() noexcept { return *this; }
const _Base&
- _M_base() const { return *this; }
-
+ _M_base() const noexcept { return *this; }
void
- clear()
+ clear() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -165,6 +165,28 @@ namespace __profile
_Base::clear();
}
+ template<typename... _Args>
+ std::pair<iterator, bool>
+ emplace(_Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ std::pair<iterator, bool> __res
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __it, _Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ iterator __res
+ = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
void
insert(std::initializer_list<value_type> __l)
{
@@ -176,7 +198,7 @@ namespace __profile
std::pair<iterator, bool>
insert(const value_type& __obj)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
std::pair<iterator, bool> __res = _Base::insert(__obj);
_M_profile_resize(__old_size);
return __res;
@@ -192,12 +214,12 @@ namespace __profile
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
std::pair<iterator, bool>
insert(_Pair&& __obj)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
std::pair<iterator, bool> __res
= _Base::insert(std::forward<_Pair>(__obj));
_M_profile_resize(__old_size);
@@ -205,8 +227,8 @@ namespace __profile
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __iter, _Pair&& __v)
{
@@ -237,7 +259,7 @@ namespace __profile
mapped_type&
operator[](const _Key& __k)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
mapped_type& __res = _M_base()[__k];
_M_profile_resize(__old_size);
return __res;
@@ -246,7 +268,7 @@ namespace __profile
mapped_type&
operator[](_Key&& __k)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
mapped_type& __res = _M_base()[std::move(__k)];
_M_profile_resize(__old_size);
return __res;
@@ -258,9 +280,9 @@ namespace __profile
void rehash(size_type __n)
{
- size_type __old_size = _Base::bucket_count();
- _Base::rehash(__n);
- _M_profile_resize(__old_size);
+ size_type __old_size = _Base::bucket_count();
+ _Base::rehash(__n);
+ _M_profile_resize(__old_size);
}
private:
@@ -268,33 +290,33 @@ namespace __profile
_M_profile_resize(size_type __old_size)
{
size_type __new_size = _Base::bucket_count();
- if (__old_size != __new_size)
+ if (__old_size != __new_size)
__profcxx_hashtable_resize(this, __old_size, __new_size);
}
void
_M_profile_destruct()
{
- size_type __hops = 0, __lc = 0, __chain = 0;
- for (iterator __it = _M_base().begin(); __it != _M_base().end();
- ++__it)
+ size_type __hops = 0, __lc = 0, __chain = 0;
+ iterator __it = this->begin();
+ while (__it != this->end())
{
- while (__it._M_cur_node->_M_next)
- {
- ++__chain;
- ++__it;
- }
+ size_type __bkt = this->bucket(__it->first);
+ auto __lit = this->begin(__bkt);
+ auto __lend = this->end(__bkt);
+ for (++__it, ++__lit; __lit != __lend; ++__it, ++__lit)
+ ++__chain;
if (__chain)
{
++__chain;
- __lc = __lc > __chain ? __lc : __chain;
+ __lc = __lc > __chain ? __lc : __chain;
__hops += __chain * (__chain - 1) / 2;
__chain = 0;
}
}
- __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
+ __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
}
- };
+ };
template<typename _Key, typename _Tp, typename _Hash,
typename _Pred, typename _Alloc>
@@ -366,6 +388,12 @@ namespace __profile
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
+ unordered_multimap(const unordered_multimap& __x)
+ : _Base(__x)
+ {
+ __profcxx_hashtable_construct(this, _Base::bucket_count());
+ }
+
unordered_multimap(const _Base& __x)
: _Base(__x)
{
@@ -410,22 +438,15 @@ namespace __profile
return *this;
}
- ~unordered_multimap()
+ ~unordered_multimap() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
_M_profile_destruct();
}
- _Base&
- _M_base() { return *this; }
-
- const _Base&
- _M_base() const { return *this; }
-
-
void
- clear()
+ clear() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -433,20 +454,42 @@ namespace __profile
_Base::clear();
}
+ template<typename... _Args>
+ iterator
+ emplace(_Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ iterator __res
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __it, _Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ iterator __res
+ = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
void
insert(std::initializer_list<value_type> __l)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
_Base::insert(__l);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
iterator
insert(const value_type& __obj)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__obj);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -455,31 +498,31 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__iter, __v);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(_Pair&& __obj)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(std::forward<_Pair>(__obj));
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
template<typename _Pair, typename = typename
- std::enable_if<std::is_convertible<_Pair,
- value_type>::value>::type>
+ std::enable_if<std::is_constructible<value_type,
+ _Pair&&>::value>::type>
iterator
insert(const_iterator __iter, _Pair&& __v)
{
size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__iter, std::forward<_Pair>(__v));
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -489,7 +532,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
_Base::insert(__first, __last);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
void
@@ -497,7 +540,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
_Base::insert(__first, __last);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
void
@@ -506,15 +549,16 @@ namespace __profile
void rehash(size_type __n)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
_Base::rehash(__n);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
private:
void
- _M_profile_resize(size_type __old_size, size_type __new_size)
+ _M_profile_resize(size_type __old_size)
{
+ size_type __new_size = _Base::bucket_count();
if (__old_size != __new_size)
__profcxx_hashtable_resize(this, __old_size, __new_size);
}
@@ -522,15 +566,15 @@ namespace __profile
void
_M_profile_destruct()
{
- size_type __hops = 0, __lc = 0, __chain = 0;
- for (iterator __it = _M_base().begin(); __it != _M_base().end();
- ++__it)
+ size_type __hops = 0, __lc = 0, __chain = 0;
+ iterator __it = this->begin();
+ while (__it != this->end())
{
- while (__it._M_cur_node->_M_next)
- {
- ++__chain;
- ++__it;
- }
+ size_type __bkt = this->bucket(__it->first);
+ auto __lit = this->begin(__bkt);
+ auto __lend = this->end(__bkt);
+ for (++__it, ++__lit; __lit != __lend; ++__it, ++__lit)
+ ++__chain;
if (__chain)
{
++__chain;
@@ -539,10 +583,9 @@ namespace __profile
__chain = 0;
}
}
- __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
+ __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
}
-
- };
+ };
template<typename _Key, typename _Tp, typename _Hash,
typename _Pred, typename _Alloc>
diff --git a/libstdc++-v3/include/profile/unordered_set b/libstdc++-v3/include/profile/unordered_set
index 547fb764d2..6385605f8e 100644
--- a/libstdc++-v3/include/profile/unordered_set
+++ b/libstdc++-v3/include/profile/unordered_set
@@ -1,31 +1,25 @@
// Profiling unordered_set/unordered_multiset implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/unordered_set
* This file is a GNU profile extension to the Standard C++ Library.
@@ -95,6 +89,13 @@ namespace __profile
__profcxx_hashtable_construct2(this);
}
+ unordered_set(const unordered_set& __x)
+ : _Base(__x)
+ {
+ __profcxx_hashtable_construct(this, _Base::bucket_count());
+ __profcxx_hashtable_construct2(this);
+ }
+
unordered_set(const _Base& __x)
: _Base(__x)
{
@@ -141,7 +142,7 @@ namespace __profile
return *this;
}
- ~unordered_set()
+ ~unordered_set() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -155,7 +156,7 @@ namespace __profile
}
void
- clear()
+ clear() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -163,12 +164,34 @@ namespace __profile
_Base::clear();
}
+ template<typename... _Args>
+ std::pair<iterator, bool>
+ emplace(_Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ std::pair<iterator, bool> __res
+ = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __it, _Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ iterator __res
+ = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
void
insert(std::initializer_list<value_type> __l)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
_Base::insert(__l);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
std::pair<iterator, bool>
@@ -176,7 +199,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
std::pair<iterator, bool> __res = _Base::insert(__obj);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -185,7 +208,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__iter, __v);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -194,7 +217,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
std::pair<iterator, bool> __res = _Base::insert(std::move(__obj));
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -203,7 +226,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__iter, std::move(__v));
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -213,7 +236,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
_Base::insert(__first, __last);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
void
@@ -221,55 +244,48 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
_Base::insert(__first, __last);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
void rehash(size_type __n)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
_Base::rehash(__n);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
private:
- _Base&
- _M_base() { return *this; }
-
- const _Base&
- _M_base() const { return *this; }
-
void
- _M_profile_resize(size_type __old_size, size_type __new_size)
+ _M_profile_resize(size_type __old_size)
{
- if (__old_size != __new_size)
+ size_type __new_size = _Base::bucket_count();
+ if (__old_size != __new_size)
__profcxx_hashtable_resize(this, __old_size, __new_size);
}
void
_M_profile_destruct()
{
- size_type __hops = 0, __lc = 0, __chain = 0;
- for (iterator __it = _M_base().begin(); __it != _M_base().end();
- ++__it)
- {
- while (__it._M_cur_node->_M_next)
- {
- ++__chain;
- ++__it;
- }
-
- if (__chain)
- {
+ size_type __hops = 0, __lc = 0, __chain = 0;
+ iterator __it = this->begin();
+ while (__it != this->end())
+ {
+ size_type __bkt = this->bucket(*__it);
+ auto __lit = this->begin(__bkt);
+ auto __lend = this->end(__bkt);
+ for (++__it, ++__lit; __lit != __lend; ++__it, ++__lit)
++__chain;
- __lc = __lc > __chain ? __lc : __chain;
- __hops += __chain * (__chain - 1) / 2;
- __chain = 0;
- }
- }
- __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
- }
-
- };
+ if (__chain)
+ {
+ ++__chain;
+ __lc = __lc > __chain ? __lc : __chain;
+ __hops += __chain * (__chain - 1) / 2;
+ __chain = 0;
+ }
+ }
+ __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
+ }
+ };
template<typename _Value, typename _Hash, typename _Pred, typename _Alloc>
inline void
@@ -339,6 +355,12 @@ namespace __profile
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
+ unordered_multiset(const unordered_multiset& __x)
+ : _Base(__x)
+ {
+ __profcxx_hashtable_construct(this, _Base::bucket_count());
+ }
+
unordered_multiset(const _Base& __x)
: _Base(__x)
{
@@ -383,7 +405,7 @@ namespace __profile
return *this;
}
- ~unordered_multiset()
+ ~unordered_multiset() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -397,7 +419,7 @@ namespace __profile
}
void
- clear()
+ clear() noexcept
{
__profcxx_hashtable_destruct(this, _Base::bucket_count(),
_Base::size());
@@ -405,20 +427,41 @@ namespace __profile
_Base::clear();
}
+ template<typename... _Args>
+ iterator
+ emplace(_Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ iterator __res = _Base::emplace(std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
+ template<typename... _Args>
+ iterator
+ emplace_hint(const_iterator __it, _Args&&... __args)
+ {
+ size_type __old_size = _Base::bucket_count();
+ iterator __res
+ = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
+ _M_profile_resize(__old_size);
+ return __res;
+ }
+
void
insert(std::initializer_list<value_type> __l)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
_Base::insert(__l);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
iterator
insert(const value_type& __obj)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__obj);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -427,16 +470,16 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__iter, __v);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
iterator
insert(value_type&& __obj)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(std::move(__obj));
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -445,7 +488,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
iterator __res = _Base::insert(__iter, std::move(__v));
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
return __res;
}
@@ -455,7 +498,7 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
_Base::insert(__first, __last);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
void
@@ -463,26 +506,21 @@ namespace __profile
{
size_type __old_size = _Base::bucket_count();
_Base::insert(__first, __last);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
void rehash(size_type __n)
{
- size_type __old_size = _Base::bucket_count();
+ size_type __old_size = _Base::bucket_count();
_Base::rehash(__n);
- _M_profile_resize(__old_size, _Base::bucket_count());
+ _M_profile_resize(__old_size);
}
private:
- _Base&
- _M_base() { return *this; }
-
- const _Base&
- _M_base() const { return *this; }
-
void
- _M_profile_resize(size_type __old_size, size_type __new_size)
+ _M_profile_resize(size_type __old_size)
{
+ size_type __new_size = _Base::bucket_count();
if (__old_size != __new_size)
__profcxx_hashtable_resize(this, __old_size, __new_size);
}
@@ -490,27 +528,25 @@ namespace __profile
void
_M_profile_destruct()
{
- size_type __hops = 0, __lc = 0, __chain = 0;
- for (iterator __it = _M_base().begin(); __it != _M_base().end();
- ++__it)
- {
- while (__it._M_cur_node->_M_next)
- {
- ++__chain;
- ++__it;
- }
-
- if (__chain)
- {
+ size_type __hops = 0, __lc = 0, __chain = 0;
+ iterator __it = this->begin();
+ while (__it != this->end())
+ {
+ size_type __bkt = this->bucket(*__it);
+ auto __lit = this->begin(__bkt);
+ auto __lend = this->end(__bkt);
+ for (++__it, ++__lit; __lit != __lend; ++__it, ++__lit)
++__chain;
- __lc = __lc > __chain ? __lc : __chain;
- __hops += __chain * (__chain - 1) / 2;
- __chain = 0;
- }
- }
- __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
+ if (__chain)
+ {
+ ++__chain;
+ __lc = __lc > __chain ? __lc : __chain;
+ __hops += __chain * (__chain - 1) / 2;
+ __chain = 0;
+ }
+ }
+ __profcxx_hashtable_destruct2(this, __lc, _Base::size(), __hops);
}
-
};
template<typename _Value, typename _Hash, typename _Pred, typename _Alloc>
diff --git a/libstdc++-v3/include/profile/vector b/libstdc++-v3/include/profile/vector
index f8a9622e8b..8a3e681b84 100644
--- a/libstdc++-v3/include/profile/vector
+++ b/libstdc++-v3/include/profile/vector
@@ -1,31 +1,25 @@
// Profiling vector implementation -*- C++ -*-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
/** @file profile/vector
* This file is a GNU profile extension to the Standard C++ Library.
@@ -50,6 +44,10 @@ namespace __profile
{
typedef _GLIBCXX_STD_C::vector<_Tp, _Allocator> _Base;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ typedef __gnu_cxx::__alloc_traits<_Allocator> _Alloc_traits;
+#endif
+
public:
typedef typename _Base::reference reference;
typedef typename _Base::const_reference const_reference;
@@ -70,16 +68,16 @@ namespace __profile
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
_Base&
- _M_base() { return *this; }
+ _M_base() _GLIBCXX_NOEXCEPT { return *this; }
const _Base&
- _M_base() const { return *this; }
+ _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
// 23.2.4.1 construct/copy/destroy:
explicit
vector(const _Allocator& __a = _Allocator())
: _Base(__a)
- {
+ {
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
@@ -87,8 +85,8 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
explicit
vector(size_type __n)
- : _Base(__n)
- {
+ : _Base(__n)
+ {
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
@@ -96,7 +94,7 @@ namespace __profile
vector(size_type __n, const _Tp& __value,
const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a)
- {
+ {
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
@@ -104,8 +102,8 @@ namespace __profile
explicit
vector(size_type __n, const _Tp& __value = _Tp(),
const _Allocator& __a = _Allocator())
- : _Base(__n, __value, __a)
- {
+ : _Base(__n, __value, __a)
+ {
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
@@ -115,14 +113,14 @@ namespace __profile
vector(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
: _Base(__first, __last, __a)
- {
- __profcxx_vector_construct(this, this->capacity());
- __profcxx_vector_construct2(this);
- }
+ {
+ __profcxx_vector_construct(this, this->capacity());
+ __profcxx_vector_construct2(this);
+ }
vector(const vector& __x)
: _Base(__x)
- {
+ {
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
@@ -136,19 +134,34 @@ namespace __profile
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- vector(vector&& __x)
+ vector(vector&& __x) noexcept
: _Base(std::move(__x))
{
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
+ vector(const _Base& __x, const _Allocator& __a)
+ : _Base(__x)
+ {
+ __profcxx_vector_construct(this, this->capacity());
+ __profcxx_vector_construct2(this);
+ }
+
+ vector(vector&& __x, const _Allocator& __a) noexcept
+ : _Base(std::move(__x), __a)
+ {
+ __profcxx_vector_construct(this, this->capacity());
+ __profcxx_vector_construct2(this);
+ }
+
vector(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
: _Base(__l, __a) { }
#endif
- ~vector() {
+ ~vector() _GLIBCXX_NOEXCEPT
+ {
__profcxx_vector_destruct(this, this->capacity(), this->size());
__profcxx_vector_destruct2(this);
}
@@ -162,12 +175,11 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
vector&
- operator=(vector&& __x)
+ operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
{
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
+ __profcxx_vector_destruct(this, this->capacity(), this->size());
+ __profcxx_vector_destruct2(this);
+ static_cast<_Base&>(*this) = std::move(__x);
return *this;
}
@@ -185,52 +197,52 @@ namespace __profile
// iterators:
iterator
- begin()
+ begin() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::begin(), this); }
const_iterator
- begin() const
+ begin() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::begin(), this); }
iterator
- end()
+ end() _GLIBCXX_NOEXCEPT
{ return iterator(_Base::end(), this); }
const_iterator
- end() const
+ end() const _GLIBCXX_NOEXCEPT
{ return const_iterator(_Base::end(), this); }
reverse_iterator
- rbegin()
+ rbegin() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() _GLIBCXX_NOEXCEPT
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const _GLIBCXX_NOEXCEPT
{ return const_reverse_iterator(begin()); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(_Base::begin(), this); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(_Base::end(), this); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
#endif
@@ -328,7 +340,7 @@ namespace __profile
push_back(_Tp&& __x)
{
size_type __old_size = this->capacity();
- _Base::push_back(__x);
+ _Base::push_back(std::move(__x));
_M_profile_resize(this, __old_size, this->capacity());
}
@@ -372,6 +384,9 @@ namespace __profile
void
swap(vector& __x)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept(_Alloc_traits::_S_nothrow_swap())
+#endif
{
_Base::swap(__x);
}
@@ -417,7 +432,7 @@ namespace __profile
}
void
- clear()
+ clear() _GLIBCXX_NOEXCEPT
{
__profcxx_vector_destruct(this, this->capacity(), this->size());
__profcxx_vector_destruct2(this);
@@ -508,7 +523,7 @@ namespace __profile
: public __hash_base<size_t, __profile::vector<bool, _Alloc>>
{
size_t
- operator()(const __profile::vector<bool, _Alloc>& __b) const
+ operator()(const __profile::vector<bool, _Alloc>& __b) const noexcept
{ return std::hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>()
(__b._M_base()); }
};
diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
index a0bdd24a85..54cb98d7d9 100644
--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -1,6 +1,7 @@
// <array> -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,6 +36,7 @@
# include <bits/c++0x_warning.h>
#else
+#include <stdexcept>
#include <bits/stl_algobase.h>
#include <bits/range_access.h>
@@ -60,8 +62,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct array
{
typedef _Tp value_type;
- typedef _Tp* pointer;
- typedef const _Tp* const_pointer;
+ typedef value_type* pointer;
+ typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* iterator;
@@ -83,74 +85,75 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
swap(array& __other)
+ noexcept(noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())))
{ std::swap_ranges(begin(), end(), __other.begin()); }
// Iterators.
iterator
- begin()
- { return iterator(std::__addressof(_M_instance[0])); }
+ begin() noexcept
+ { return iterator(data()); }
const_iterator
- begin() const
- { return const_iterator(std::__addressof(_M_instance[0])); }
+ begin() const noexcept
+ { return const_iterator(data()); }
iterator
- end()
- { return iterator(std::__addressof(_M_instance[_Nm])); }
+ end() noexcept
+ { return iterator(data() + _Nm); }
const_iterator
- end() const
- { return const_iterator(std::__addressof(_M_instance[_Nm])); }
+ end() const noexcept
+ { return const_iterator(data() + _Nm); }
reverse_iterator
- rbegin()
+ rbegin() noexcept
{ return reverse_iterator(end()); }
const_reverse_iterator
- rbegin() const
+ rbegin() const noexcept
{ return const_reverse_iterator(end()); }
reverse_iterator
- rend()
+ rend() noexcept
{ return reverse_iterator(begin()); }
const_reverse_iterator
- rend() const
+ rend() const noexcept
{ return const_reverse_iterator(begin()); }
const_iterator
- cbegin() const
+ cbegin() const noexcept
{ return const_iterator(std::__addressof(_M_instance[0])); }
const_iterator
- cend() const
+ cend() const noexcept
{ return const_iterator(std::__addressof(_M_instance[_Nm])); }
const_reverse_iterator
- crbegin() const
+ crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
- crend() const
+ crend() const noexcept
{ return const_reverse_iterator(begin()); }
// Capacity.
constexpr size_type
- size() const { return _Nm; }
+ size() const noexcept { return _Nm; }
constexpr size_type
- max_size() const { return _Nm; }
+ max_size() const noexcept { return _Nm; }
constexpr bool
- empty() const { return size() == 0; }
+ empty() const noexcept { return size() == 0; }
// Element access.
reference
operator[](size_type __n)
{ return _M_instance[__n]; }
- const_reference
- operator[](size_type __n) const
+ constexpr const_reference
+ operator[](size_type __n) const noexcept
{ return _M_instance[__n]; }
reference
@@ -161,12 +164,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return _M_instance[__n];
}
- const_reference
+ constexpr const_reference
at(size_type __n) const
{
- if (__n >= _Nm)
- std::__throw_out_of_range(__N("array::at"));
- return _M_instance[__n];
+ // Result of conditional expression must be an lvalue so use
+ // boolean ? lvalue : (throw-expr, lvalue)
+ return __n < _Nm ? _M_instance[__n]
+ : (std::__throw_out_of_range(__N("array::at")), _M_instance[0]);
}
reference
@@ -185,12 +189,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
back() const
{ return _Nm ? *(end() - 1) : *end(); }
- _Tp*
- data()
+ pointer
+ data() noexcept
{ return std::__addressof(_M_instance[0]); }
- const _Tp*
- data() const
+ const_pointer
+ data() const noexcept
{ return std::__addressof(_M_instance[0]); }
};
@@ -228,43 +232,45 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one < __two); }
- // Specialized algorithms [6.2.2.2].
+ // Specialized algorithms.
template<typename _Tp, std::size_t _Nm>
inline void
swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
+ noexcept(noexcept(__one.swap(__two)))
{ __one.swap(__two); }
- // Tuple interface to class template array [6.2.2.5].
+ // Tuple interface to class template array.
/// tuple_size
template<typename _Tp>
class tuple_size;
+ template<typename _Tp, std::size_t _Nm>
+ struct tuple_size<array<_Tp, _Nm>>
+ : public integral_constant<std::size_t, _Nm> { };
+
/// tuple_element
template<std::size_t _Int, typename _Tp>
class tuple_element;
- template<typename _Tp, std::size_t _Nm>
- struct tuple_size<array<_Tp, _Nm> >
- { static const std::size_t value = _Nm; };
-
- template<typename _Tp, std::size_t _Nm>
- const std::size_t
- tuple_size<array<_Tp, _Nm> >::value;
-
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
struct tuple_element<_Int, array<_Tp, _Nm> >
{ typedef _Tp type; };
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
- inline _Tp&
- get(array<_Tp, _Nm>& __arr)
- { return __arr[_Int]; }
+ constexpr _Tp&
+ get(array<_Tp, _Nm>& __arr) noexcept
+ { return __arr._M_instance[_Int]; }
+
+ template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+ constexpr _Tp&&
+ get(array<_Tp, _Nm>&& __arr) noexcept
+ { return std::move(get<_Int>(__arr)); }
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
- inline const _Tp&
- get(const array<_Tp, _Nm>& __arr)
- { return __arr[_Int]; }
+ constexpr const _Tp&
+ get(const array<_Tp, _Nm>& __arr) noexcept
+ { return __arr._M_instance[_Int]; }
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic
index a19891dbdb..a2f8058c89 100644
--- a/libstdc++-v3/include/std/atomic
+++ b/libstdc++-v3/include/std/atomic
@@ -39,8 +39,6 @@
#endif
#include <bits/atomic_base.h>
-#include <bits/atomic_0.h>
-#include <bits/atomic_2.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -59,92 +57,97 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__atomic_base<bool> _M_base;
public:
- atomic_bool() = default;
- ~atomic_bool() = default;
+ atomic_bool() noexcept = default;
+ ~atomic_bool() noexcept = default;
atomic_bool(const atomic_bool&) = delete;
atomic_bool& operator=(const atomic_bool&) = delete;
atomic_bool& operator=(const atomic_bool&) volatile = delete;
- constexpr atomic_bool(bool __i) : _M_base(__i) { }
+ constexpr atomic_bool(bool __i) noexcept : _M_base(__i) { }
bool
- operator=(bool __i)
+ operator=(bool __i) noexcept
{ return _M_base.operator=(__i); }
- operator bool() const
+ bool
+ operator=(bool __i) volatile noexcept
+ { return _M_base.operator=(__i); }
+
+ operator bool() const noexcept
{ return _M_base.load(); }
- operator bool() const volatile
+ operator bool() const volatile noexcept
{ return _M_base.load(); }
bool
- is_lock_free() const { return _M_base.is_lock_free(); }
+ is_lock_free() const noexcept { return _M_base.is_lock_free(); }
bool
- is_lock_free() const volatile { return _M_base.is_lock_free(); }
+ is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); }
void
- store(bool __i, memory_order __m = memory_order_seq_cst)
+ store(bool __i, memory_order __m = memory_order_seq_cst) noexcept
{ _M_base.store(__i, __m); }
void
- store(bool __i, memory_order __m = memory_order_seq_cst) volatile
+ store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept
{ _M_base.store(__i, __m); }
bool
- load(memory_order __m = memory_order_seq_cst) const
+ load(memory_order __m = memory_order_seq_cst) const noexcept
{ return _M_base.load(__m); }
bool
- load(memory_order __m = memory_order_seq_cst) const volatile
+ load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{ return _M_base.load(__m); }
bool
- exchange(bool __i, memory_order __m = memory_order_seq_cst)
+ exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept
{ return _M_base.exchange(__i, __m); }
bool
- exchange(bool __i, memory_order __m = memory_order_seq_cst) volatile
+ exchange(bool __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_base.exchange(__i, __m); }
bool
compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
- memory_order __m2)
+ memory_order __m2) noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
bool
compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
- memory_order __m2) volatile
+ memory_order __m2) volatile noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
bool
compare_exchange_weak(bool& __i1, bool __i2,
- memory_order __m = memory_order_seq_cst)
+ memory_order __m = memory_order_seq_cst) noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m); }
bool
compare_exchange_weak(bool& __i1, bool __i2,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m); }
bool
compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
- memory_order __m2)
+ memory_order __m2) noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
bool
compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
- memory_order __m2) volatile
+ memory_order __m2) volatile noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
bool
compare_exchange_strong(bool& __i1, bool __i2,
- memory_order __m = memory_order_seq_cst)
+ memory_order __m = memory_order_seq_cst) noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m); }
bool
compare_exchange_strong(bool& __i1, bool __i2,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m); }
};
@@ -158,73 +161,124 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp _M_i;
public:
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(_Tp __i) : _M_i(__i) { }
+ constexpr atomic(_Tp __i) noexcept : _M_i(__i) { }
- operator _Tp() const;
+ operator _Tp() const noexcept
+ { return load(); }
- operator _Tp() const volatile;
+ operator _Tp() const volatile noexcept
+ { return load(); }
_Tp
- operator=(_Tp __i) { store(__i); return __i; }
+ operator=(_Tp __i) noexcept
+ { store(__i); return __i; }
_Tp
- operator=(_Tp __i) volatile { store(__i); return __i; }
+ operator=(_Tp __i) volatile noexcept
+ { store(__i); return __i; }
bool
- is_lock_free() const;
+ is_lock_free() const noexcept
+ { return __atomic_is_lock_free(sizeof(_M_i), &_M_i); }
bool
- is_lock_free() const volatile;
+ is_lock_free() const volatile noexcept
+ { return __atomic_is_lock_free(sizeof(_M_i), &_M_i); }
void
- store(_Tp, memory_order = memory_order_seq_cst);
+ store(_Tp __i, memory_order _m = memory_order_seq_cst) noexcept
+ { __atomic_store(&_M_i, &__i, _m); }
void
- store(_Tp, memory_order = memory_order_seq_cst) volatile;
+ store(_Tp __i, memory_order _m = memory_order_seq_cst) volatile noexcept
+ { __atomic_store(&_M_i, &__i, _m); }
_Tp
- load(memory_order = memory_order_seq_cst) const;
+ load(memory_order _m = memory_order_seq_cst) const noexcept
+ {
+ _Tp tmp;
+ __atomic_load(&_M_i, &tmp, _m);
+ return tmp;
+ }
_Tp
- load(memory_order = memory_order_seq_cst) const volatile;
+ load(memory_order _m = memory_order_seq_cst) const volatile noexcept
+ {
+ _Tp tmp;
+ __atomic_load(&_M_i, &tmp, _m);
+ return tmp;
+ }
_Tp
- exchange(_Tp __i, memory_order = memory_order_seq_cst);
+ exchange(_Tp __i, memory_order _m = memory_order_seq_cst) noexcept
+ {
+ _Tp tmp;
+ __atomic_exchange(&_M_i, &__i, &tmp, _m);
+ return tmp;
+ }
_Tp
- exchange(_Tp __i, memory_order = memory_order_seq_cst) volatile;
+ exchange(_Tp __i,
+ memory_order _m = memory_order_seq_cst) volatile noexcept
+ {
+ _Tp tmp;
+ __atomic_exchange(&_M_i, &__i, &tmp, _m);
+ return tmp;
+ }
bool
- compare_exchange_weak(_Tp&, _Tp, memory_order, memory_order);
+ compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
+ memory_order __f) noexcept
+ {
+ return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f);
+ }
bool
- compare_exchange_weak(_Tp&, _Tp, memory_order, memory_order) volatile;
+ compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
+ memory_order __f) volatile noexcept
+ {
+ return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f);
+ }
bool
- compare_exchange_weak(_Tp&, _Tp, memory_order = memory_order_seq_cst);
+ compare_exchange_weak(_Tp& __e, _Tp __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return compare_exchange_weak(__e, __i, __m, __m); }
bool
- compare_exchange_weak(_Tp&, _Tp,
- memory_order = memory_order_seq_cst) volatile;
+ compare_exchange_weak(_Tp& __e, _Tp __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return compare_exchange_weak(__e, __i, __m, __m); }
bool
- compare_exchange_strong(_Tp&, _Tp, memory_order, memory_order);
+ compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
+ memory_order __f) noexcept
+ {
+ return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f);
+ }
bool
- compare_exchange_strong(_Tp&, _Tp, memory_order, memory_order) volatile;
+ compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
+ memory_order __f) volatile noexcept
+ {
+ return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f);
+ }
bool
- compare_exchange_strong(_Tp&, _Tp, memory_order = memory_order_seq_cst);
+ compare_exchange_strong(_Tp& __e, _Tp __i,
+ memory_order __m = memory_order_seq_cst) noexcept
+ { return compare_exchange_strong(__e, __i, __m, __m); }
bool
- compare_exchange_strong(_Tp&, _Tp,
- memory_order = memory_order_seq_cst) volatile;
+ compare_exchange_strong(_Tp& __e, _Tp __i,
+ memory_order __m = memory_order_seq_cst) volatile noexcept
+ { return compare_exchange_strong(__e, __i, __m, __m); }
};
@@ -236,178 +290,184 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef __atomic_base<_Tp*> __base_type;
__base_type _M_b;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__pointer_type __p) : _M_b(__p) { }
+ constexpr atomic(__pointer_type __p) noexcept : _M_b(__p) { }
- operator __pointer_type() const
+ operator __pointer_type() const noexcept
{ return __pointer_type(_M_b); }
- operator __pointer_type() const volatile
+ operator __pointer_type() const volatile noexcept
{ return __pointer_type(_M_b); }
__pointer_type
- operator=(__pointer_type __p)
+ operator=(__pointer_type __p) noexcept
{ return _M_b.operator=(__p); }
__pointer_type
- operator=(__pointer_type __p) volatile
+ operator=(__pointer_type __p) volatile noexcept
{ return _M_b.operator=(__p); }
__pointer_type
- operator++(int)
+ operator++(int) noexcept
{ return _M_b++; }
__pointer_type
- operator++(int) volatile
+ operator++(int) volatile noexcept
{ return _M_b++; }
__pointer_type
- operator--(int)
+ operator--(int) noexcept
{ return _M_b--; }
__pointer_type
- operator--(int) volatile
+ operator--(int) volatile noexcept
{ return _M_b--; }
__pointer_type
- operator++()
+ operator++() noexcept
{ return ++_M_b; }
__pointer_type
- operator++() volatile
+ operator++() volatile noexcept
{ return ++_M_b; }
__pointer_type
- operator--()
+ operator--() noexcept
{ return --_M_b; }
__pointer_type
- operator--() volatile
+ operator--() volatile noexcept
{ return --_M_b; }
__pointer_type
- operator+=(ptrdiff_t __d)
+ operator+=(ptrdiff_t __d) noexcept
{ return _M_b.operator+=(__d); }
__pointer_type
- operator+=(ptrdiff_t __d) volatile
+ operator+=(ptrdiff_t __d) volatile noexcept
{ return _M_b.operator+=(__d); }
__pointer_type
- operator-=(ptrdiff_t __d)
+ operator-=(ptrdiff_t __d) noexcept
{ return _M_b.operator-=(__d); }
__pointer_type
- operator-=(ptrdiff_t __d) volatile
+ operator-=(ptrdiff_t __d) volatile noexcept
{ return _M_b.operator-=(__d); }
bool
- is_lock_free() const
+ is_lock_free() const noexcept
{ return _M_b.is_lock_free(); }
bool
- is_lock_free() const volatile
+ is_lock_free() const volatile noexcept
{ return _M_b.is_lock_free(); }
void
- store(__pointer_type __p, memory_order __m = memory_order_seq_cst)
+ store(__pointer_type __p,
+ memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.store(__p, __m); }
void
store(__pointer_type __p,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.store(__p, __m); }
__pointer_type
- load(memory_order __m = memory_order_seq_cst) const
+ load(memory_order __m = memory_order_seq_cst) const noexcept
{ return _M_b.load(__m); }
__pointer_type
- load(memory_order __m = memory_order_seq_cst) const volatile
+ load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{ return _M_b.load(__m); }
__pointer_type
- exchange(__pointer_type __p, memory_order __m = memory_order_seq_cst)
+ exchange(__pointer_type __p,
+ memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.exchange(__p, __m); }
__pointer_type
exchange(__pointer_type __p,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.exchange(__p, __m); }
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m1, memory_order __m2)
+ memory_order __m1, memory_order __m2) noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m1, memory_order __m2) volatile
+ memory_order __m1,
+ memory_order __m2) volatile noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m = memory_order_seq_cst)
+ memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_weak(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_weak(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m1, memory_order __m2)
+ memory_order __m1, memory_order __m2) noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m1, memory_order __m2) volatile
+ memory_order __m1,
+ memory_order __m2) volatile noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m = memory_order_seq_cst)
+ memory_order __m = memory_order_seq_cst) noexcept
{
return _M_b.compare_exchange_strong(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{
return _M_b.compare_exchange_strong(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
__pointer_type
- fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
+ fetch_add(ptrdiff_t __d,
+ memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.fetch_add(__d, __m); }
__pointer_type
fetch_add(ptrdiff_t __d,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.fetch_add(__d, __m); }
__pointer_type
- fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
+ fetch_sub(ptrdiff_t __d,
+ memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.fetch_sub(__d, __m); }
__pointer_type
fetch_sub(ptrdiff_t __d,
- memory_order __m = memory_order_seq_cst) volatile
+ memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.fetch_sub(__d, __m); }
};
@@ -419,13 +479,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef bool __integral_type;
typedef atomic_bool __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -438,13 +498,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef char __integral_type;
typedef atomic_char __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -457,13 +517,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef signed char __integral_type;
typedef atomic_schar __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept= default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -476,13 +536,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef unsigned char __integral_type;
typedef atomic_uchar __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept= default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -495,13 +555,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef short __integral_type;
typedef atomic_short __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -514,13 +574,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef unsigned short __integral_type;
typedef atomic_ushort __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -533,13 +593,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef int __integral_type;
typedef atomic_int __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -552,13 +612,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef unsigned int __integral_type;
typedef atomic_uint __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -571,13 +631,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef long __integral_type;
typedef atomic_long __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -590,13 +650,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef unsigned long __integral_type;
typedef atomic_ulong __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -609,13 +669,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef long long __integral_type;
typedef atomic_llong __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -628,13 +688,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef unsigned long long __integral_type;
typedef atomic_ullong __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -647,13 +707,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef wchar_t __integral_type;
typedef atomic_wchar_t __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -666,13 +726,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef char16_t __integral_type;
typedef atomic_char16_t __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -685,13 +745,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef char32_t __integral_type;
typedef atomic_char32_t __base_type;
- atomic() = default;
- ~atomic() = default;
+ atomic() noexcept = default;
+ ~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
- constexpr atomic(__integral_type __i) : __base_type(__i) { }
+ constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
@@ -700,104 +760,109 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Function definitions, atomic_flag operations.
inline bool
- atomic_flag_test_and_set_explicit(atomic_flag* __a, memory_order __m)
+ atomic_flag_test_and_set_explicit(atomic_flag* __a,
+ memory_order __m) noexcept
{ return __a->test_and_set(__m); }
inline bool
atomic_flag_test_and_set_explicit(volatile atomic_flag* __a,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->test_and_set(__m); }
inline void
- atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m)
+ atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept
{ __a->clear(__m); }
inline void
- atomic_flag_clear_explicit(volatile atomic_flag* __a, memory_order __m)
+ atomic_flag_clear_explicit(volatile atomic_flag* __a,
+ memory_order __m) noexcept
{ __a->clear(__m); }
inline bool
- atomic_flag_test_and_set(atomic_flag* __a)
+ atomic_flag_test_and_set(atomic_flag* __a) noexcept
{ return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
inline bool
- atomic_flag_test_and_set(volatile atomic_flag* __a)
+ atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept
{ return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
inline void
- atomic_flag_clear(atomic_flag* __a)
+ atomic_flag_clear(atomic_flag* __a) noexcept
{ atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
inline void
- atomic_flag_clear(volatile atomic_flag* __a)
+ atomic_flag_clear(volatile atomic_flag* __a) noexcept
{ atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
// Function templates generally applicable to atomic types.
template<typename _ITp>
inline bool
- atomic_is_lock_free(const atomic<_ITp>* __a)
+ atomic_is_lock_free(const atomic<_ITp>* __a) noexcept
{ return __a->is_lock_free(); }
template<typename _ITp>
inline bool
- atomic_is_lock_free(const volatile atomic<_ITp>* __a)
+ atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept
{ return __a->is_lock_free(); }
template<typename _ITp>
inline void
- atomic_init(atomic<_ITp>* __a, _ITp __i);
+ atomic_init(atomic<_ITp>* __a, _ITp __i) noexcept;
template<typename _ITp>
inline void
- atomic_init(volatile atomic<_ITp>* __a, _ITp __i);
+ atomic_init(volatile atomic<_ITp>* __a, _ITp __i) noexcept;
template<typename _ITp>
inline void
- atomic_store_explicit(atomic<_ITp>* __a, _ITp __i, memory_order __m)
+ atomic_store_explicit(atomic<_ITp>* __a, _ITp __i,
+ memory_order __m) noexcept
{ __a->store(__i, __m); }
template<typename _ITp>
inline void
atomic_store_explicit(volatile atomic<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ __a->store(__i, __m); }
template<typename _ITp>
inline _ITp
- atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m)
+ atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept
{ return __a->load(__m); }
template<typename _ITp>
inline _ITp
atomic_load_explicit(const volatile atomic<_ITp>* __a,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->load(__m); }
template<typename _ITp>
inline _ITp
atomic_exchange_explicit(atomic<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->exchange(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_exchange_explicit(volatile atomic<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->exchange(__i, __m); }
template<typename _ITp>
inline bool
atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
- memory_order __m1, memory_order __m2)
+ memory_order __m1,
+ memory_order __m2) noexcept
{ return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
inline bool
atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
- memory_order __m1, memory_order __m2)
+ memory_order __m1,
+ memory_order __m2) noexcept
{ return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
@@ -805,7 +870,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
memory_order __m1,
- memory_order __m2)
+ memory_order __m2) noexcept
{ return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
@@ -813,44 +878,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
memory_order __m1,
- memory_order __m2)
+ memory_order __m2) noexcept
{ return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
inline void
- atomic_store(atomic<_ITp>* __a, _ITp __i)
+ atomic_store(atomic<_ITp>* __a, _ITp __i) noexcept
{ atomic_store_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline void
- atomic_store(volatile atomic<_ITp>* __a, _ITp __i)
+ atomic_store(volatile atomic<_ITp>* __a, _ITp __i) noexcept
{ atomic_store_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_load(const atomic<_ITp>* __a)
+ atomic_load(const atomic<_ITp>* __a) noexcept
{ return atomic_load_explicit(__a, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_load(const volatile atomic<_ITp>* __a)
+ atomic_load(const volatile atomic<_ITp>* __a) noexcept
{ return atomic_load_explicit(__a, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_exchange(atomic<_ITp>* __a, _ITp __i)
+ atomic_exchange(atomic<_ITp>* __a, _ITp __i) noexcept
{ return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_exchange(volatile atomic<_ITp>* __a, _ITp __i)
+ atomic_exchange(volatile atomic<_ITp>* __a, _ITp __i) noexcept
{ return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline bool
atomic_compare_exchange_weak(atomic<_ITp>* __a,
- _ITp* __i1, _ITp __i2)
+ _ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
memory_order_seq_cst,
@@ -860,7 +925,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ITp>
inline bool
atomic_compare_exchange_weak(volatile atomic<_ITp>* __a,
- _ITp* __i1, _ITp __i2)
+ _ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
memory_order_seq_cst,
@@ -870,7 +935,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ITp>
inline bool
atomic_compare_exchange_strong(atomic<_ITp>* __a,
- _ITp* __i1, _ITp __i2)
+ _ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
memory_order_seq_cst,
@@ -880,7 +945,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ITp>
inline bool
atomic_compare_exchange_strong(volatile atomic<_ITp>* __a,
- _ITp* __i1, _ITp __i2)
+ _ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
memory_order_seq_cst,
@@ -894,111 +959,111 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ITp>
inline _ITp
atomic_fetch_add_explicit(__atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_add(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_add_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_add(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_sub_explicit(__atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_sub(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_sub_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_sub(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_and_explicit(__atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_and(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_and(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_or_explicit(__atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_or(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_or(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_xor(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_xor(__i, __m); }
template<typename _ITp>
inline _ITp
- atomic_fetch_add(__atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_add(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_sub(__atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_sub(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_and(__atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_and(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_or(__atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_or(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_xor(__atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_xor(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
- atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i)
+ atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
@@ -1006,45 +1071,45 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ITp>
inline _ITp*
atomic_fetch_add_explicit(atomic<_ITp*>* __a, ptrdiff_t __d,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_add(__d, __m); }
template<typename _ITp>
inline _ITp*
atomic_fetch_add_explicit(volatile atomic<_ITp*>* __a, ptrdiff_t __d,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_add(__d, __m); }
template<typename _ITp>
inline _ITp*
- atomic_fetch_add(volatile atomic<_ITp*>* __a, ptrdiff_t __d)
+ atomic_fetch_add(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_add(__d); }
template<typename _ITp>
inline _ITp*
- atomic_fetch_add(atomic<_ITp*>* __a, ptrdiff_t __d)
+ atomic_fetch_add(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_add(__d); }
template<typename _ITp>
inline _ITp*
atomic_fetch_sub_explicit(volatile atomic<_ITp*>* __a,
- ptrdiff_t __d, memory_order __m)
+ ptrdiff_t __d, memory_order __m) noexcept
{ return __a->fetch_sub(__d, __m); }
template<typename _ITp>
inline _ITp*
atomic_fetch_sub_explicit(atomic<_ITp*>* __a, ptrdiff_t __d,
- memory_order __m)
+ memory_order __m) noexcept
{ return __a->fetch_sub(__d, __m); }
template<typename _ITp>
inline _ITp*
- atomic_fetch_sub(volatile atomic<_ITp*>* __a, ptrdiff_t __d)
+ atomic_fetch_sub(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_sub(__d); }
template<typename _ITp>
inline _ITp*
- atomic_fetch_sub(atomic<_ITp*>* __a, ptrdiff_t __d)
+ atomic_fetch_sub(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_sub(__d); }
// @} group atomics
diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index d34351b5ef..7f3cb4dec8 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -77,16 +77,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// 0 is the least significant word.
_WordT _M_w[_Nw];
- _GLIBCXX_CONSTEXPR _Base_bitset()
+ _GLIBCXX_CONSTEXPR _Base_bitset() _GLIBCXX_NOEXCEPT
: _M_w() { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- constexpr _Base_bitset(unsigned long long __val)
- : _M_w({ _WordT(__val)
+ constexpr _Base_bitset(unsigned long long __val) noexcept
+ : _M_w{ _WordT(__val)
#if __SIZEOF_LONG_LONG__ > __SIZEOF_LONG__
, _WordT(__val >> _GLIBCXX_BITSET_BITS_PER_WORD)
#endif
- }) { }
+ } { }
#else
_Base_bitset(unsigned long __val)
: _M_w()
@@ -94,90 +94,90 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#endif
static _GLIBCXX_CONSTEXPR size_t
- _S_whichword(size_t __pos )
+ _S_whichword(size_t __pos) _GLIBCXX_NOEXCEPT
{ return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichbyte(size_t __pos )
+ _S_whichbyte(size_t __pos) _GLIBCXX_NOEXCEPT
{ return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichbit(size_t __pos )
+ _S_whichbit(size_t __pos) _GLIBCXX_NOEXCEPT
{ return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
static _GLIBCXX_CONSTEXPR _WordT
- _S_maskbit(size_t __pos )
+ _S_maskbit(size_t __pos) _GLIBCXX_NOEXCEPT
{ return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
_WordT&
- _M_getword(size_t __pos)
+ _M_getword(size_t __pos) _GLIBCXX_NOEXCEPT
{ return _M_w[_S_whichword(__pos)]; }
- _WordT
- _M_getword(size_t __pos) const
+ _GLIBCXX_CONSTEXPR _WordT
+ _M_getword(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return _M_w[_S_whichword(__pos)]; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const _WordT*
- _M_getdata() const
+ _M_getdata() const noexcept
{ return _M_w; }
#endif
_WordT&
- _M_hiword()
+ _M_hiword() _GLIBCXX_NOEXCEPT
{ return _M_w[_Nw - 1]; }
_GLIBCXX_CONSTEXPR _WordT
- _M_hiword() const
+ _M_hiword() const _GLIBCXX_NOEXCEPT
{ return _M_w[_Nw - 1]; }
void
- _M_do_and(const _Base_bitset<_Nw>& __x)
+ _M_do_and(const _Base_bitset<_Nw>& __x) _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
_M_w[__i] &= __x._M_w[__i];
}
void
- _M_do_or(const _Base_bitset<_Nw>& __x)
+ _M_do_or(const _Base_bitset<_Nw>& __x) _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
_M_w[__i] |= __x._M_w[__i];
}
void
- _M_do_xor(const _Base_bitset<_Nw>& __x)
+ _M_do_xor(const _Base_bitset<_Nw>& __x) _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
_M_w[__i] ^= __x._M_w[__i];
}
void
- _M_do_left_shift(size_t __shift);
+ _M_do_left_shift(size_t __shift) _GLIBCXX_NOEXCEPT;
void
- _M_do_right_shift(size_t __shift);
+ _M_do_right_shift(size_t __shift) _GLIBCXX_NOEXCEPT;
void
- _M_do_flip()
+ _M_do_flip() _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
_M_w[__i] = ~_M_w[__i];
}
void
- _M_do_set()
+ _M_do_set() _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
_M_w[__i] = ~static_cast<_WordT>(0);
}
void
- _M_do_reset()
+ _M_do_reset() _GLIBCXX_NOEXCEPT
{ __builtin_memset(_M_w, 0, _Nw * sizeof(_WordT)); }
bool
- _M_is_equal(const _Base_bitset<_Nw>& __x) const
+ _M_is_equal(const _Base_bitset<_Nw>& __x) const _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; ++__i)
if (_M_w[__i] != __x._M_w[__i])
@@ -185,18 +185,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
return true;
}
- size_t
- _M_are_all_aux() const
- {
- for (size_t __i = 0; __i < _Nw - 1; __i++)
- if (_M_w[__i] != ~static_cast<_WordT>(0))
- return 0;
- return ((_Nw - 1) * _GLIBCXX_BITSET_BITS_PER_WORD
- + __builtin_popcountl(_M_hiword()));
- }
+ template<size_t _Nb>
+ bool
+ _M_are_all() const _GLIBCXX_NOEXCEPT
+ {
+ for (size_t __i = 0; __i < _Nw - 1; __i++)
+ if (_M_w[__i] != ~static_cast<_WordT>(0))
+ return false;
+ return _M_hiword() == (~static_cast<_WordT>(0)
+ >> (_Nw * _GLIBCXX_BITSET_BITS_PER_WORD
+ - _Nb));
+ }
bool
- _M_is_any() const
+ _M_is_any() const _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
if (_M_w[__i] != static_cast<_WordT>(0))
@@ -205,7 +207,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
size_t
- _M_do_count() const
+ _M_do_count() const _GLIBCXX_NOEXCEPT
{
size_t __result = 0;
for (size_t __i = 0; __i < _Nw; __i++)
@@ -223,17 +225,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// find first "on" bit
size_t
- _M_do_find_first(size_t __not_found) const;
+ _M_do_find_first(size_t) const _GLIBCXX_NOEXCEPT;
// find the next "on" bit that follows "prev"
size_t
- _M_do_find_next(size_t __prev, size_t __not_found) const;
+ _M_do_find_next(size_t, size_t) const _GLIBCXX_NOEXCEPT;
};
// Definitions of non-inline functions from _Base_bitset.
template<size_t _Nw>
void
- _Base_bitset<_Nw>::_M_do_left_shift(size_t __shift)
+ _Base_bitset<_Nw>::_M_do_left_shift(size_t __shift) _GLIBCXX_NOEXCEPT
{
if (__builtin_expect(__shift != 0, 1))
{
@@ -259,7 +261,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<size_t _Nw>
void
- _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift)
+ _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift) _GLIBCXX_NOEXCEPT
{
if (__builtin_expect(__shift != 0, 1))
{
@@ -313,7 +315,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<size_t _Nw>
size_t
- _Base_bitset<_Nw>::_M_do_find_first(size_t __not_found) const
+ _Base_bitset<_Nw>::
+ _M_do_find_first(size_t __not_found) const _GLIBCXX_NOEXCEPT
{
for (size_t __i = 0; __i < _Nw; __i++)
{
@@ -328,7 +331,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<size_t _Nw>
size_t
- _Base_bitset<_Nw>::_M_do_find_next(size_t __prev, size_t __not_found) const
+ _Base_bitset<_Nw>::
+ _M_do_find_next(size_t __prev, size_t __not_found) const _GLIBCXX_NOEXCEPT
{
// make bound inclusive
++__prev;
@@ -372,12 +376,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef unsigned long _WordT;
_WordT _M_w;
- _GLIBCXX_CONSTEXPR _Base_bitset()
+ _GLIBCXX_CONSTEXPR _Base_bitset() _GLIBCXX_NOEXCEPT
: _M_w(0)
{ }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- constexpr _Base_bitset(unsigned long long __val)
+ constexpr _Base_bitset(unsigned long long __val) noexcept
#else
_Base_bitset(unsigned long __val)
#endif
@@ -385,103 +389,105 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichword(size_t __pos )
+ _S_whichword(size_t __pos) _GLIBCXX_NOEXCEPT
{ return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichbyte(size_t __pos )
+ _S_whichbyte(size_t __pos) _GLIBCXX_NOEXCEPT
{ return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichbit(size_t __pos )
+ _S_whichbit(size_t __pos) _GLIBCXX_NOEXCEPT
{ return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
static _GLIBCXX_CONSTEXPR _WordT
- _S_maskbit(size_t __pos )
+ _S_maskbit(size_t __pos) _GLIBCXX_NOEXCEPT
{ return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
_WordT&
- _M_getword(size_t)
+ _M_getword(size_t) _GLIBCXX_NOEXCEPT
{ return _M_w; }
- _WordT
- _M_getword(size_t) const
+ _GLIBCXX_CONSTEXPR _WordT
+ _M_getword(size_t) const _GLIBCXX_NOEXCEPT
{ return _M_w; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const _WordT*
- _M_getdata() const
+ _M_getdata() const noexcept
{ return &_M_w; }
#endif
_WordT&
- _M_hiword()
+ _M_hiword() _GLIBCXX_NOEXCEPT
{ return _M_w; }
_GLIBCXX_CONSTEXPR _WordT
- _M_hiword() const
+ _M_hiword() const _GLIBCXX_NOEXCEPT
{ return _M_w; }
void
- _M_do_and(const _Base_bitset<1>& __x)
+ _M_do_and(const _Base_bitset<1>& __x) _GLIBCXX_NOEXCEPT
{ _M_w &= __x._M_w; }
void
- _M_do_or(const _Base_bitset<1>& __x)
+ _M_do_or(const _Base_bitset<1>& __x) _GLIBCXX_NOEXCEPT
{ _M_w |= __x._M_w; }
void
- _M_do_xor(const _Base_bitset<1>& __x)
+ _M_do_xor(const _Base_bitset<1>& __x) _GLIBCXX_NOEXCEPT
{ _M_w ^= __x._M_w; }
void
- _M_do_left_shift(size_t __shift)
+ _M_do_left_shift(size_t __shift) _GLIBCXX_NOEXCEPT
{ _M_w <<= __shift; }
void
- _M_do_right_shift(size_t __shift)
+ _M_do_right_shift(size_t __shift) _GLIBCXX_NOEXCEPT
{ _M_w >>= __shift; }
void
- _M_do_flip()
+ _M_do_flip() _GLIBCXX_NOEXCEPT
{ _M_w = ~_M_w; }
void
- _M_do_set()
+ _M_do_set() _GLIBCXX_NOEXCEPT
{ _M_w = ~static_cast<_WordT>(0); }
void
- _M_do_reset()
+ _M_do_reset() _GLIBCXX_NOEXCEPT
{ _M_w = 0; }
bool
- _M_is_equal(const _Base_bitset<1>& __x) const
+ _M_is_equal(const _Base_bitset<1>& __x) const _GLIBCXX_NOEXCEPT
{ return _M_w == __x._M_w; }
- size_t
- _M_are_all_aux() const
- { return __builtin_popcountl(_M_w); }
+ template<size_t _Nb>
+ bool
+ _M_are_all() const _GLIBCXX_NOEXCEPT
+ { return _M_w == (~static_cast<_WordT>(0)
+ >> (_GLIBCXX_BITSET_BITS_PER_WORD - _Nb)); }
bool
- _M_is_any() const
+ _M_is_any() const _GLIBCXX_NOEXCEPT
{ return _M_w != 0; }
size_t
- _M_do_count() const
+ _M_do_count() const _GLIBCXX_NOEXCEPT
{ return __builtin_popcountl(_M_w); }
unsigned long
- _M_do_to_ulong() const
+ _M_do_to_ulong() const _GLIBCXX_NOEXCEPT
{ return _M_w; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
unsigned long long
- _M_do_to_ullong() const
+ _M_do_to_ullong() const noexcept
{ return _M_w; }
#endif
size_t
- _M_do_find_first(size_t __not_found) const
+ _M_do_find_first(size_t __not_found) const _GLIBCXX_NOEXCEPT
{
if (_M_w != 0)
return __builtin_ctzl(_M_w);
@@ -492,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// find the next "on" bit that follows "prev"
size_t
_M_do_find_next(size_t __prev, size_t __not_found) const
+ _GLIBCXX_NOEXCEPT
{
++__prev;
if (__prev >= ((size_t) _GLIBCXX_BITSET_BITS_PER_WORD))
@@ -515,30 +522,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
typedef unsigned long _WordT;
- _GLIBCXX_CONSTEXPR _Base_bitset()
+ _GLIBCXX_CONSTEXPR _Base_bitset() _GLIBCXX_NOEXCEPT
{ }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- constexpr _Base_bitset(unsigned long long)
+ constexpr _Base_bitset(unsigned long long) noexcept
#else
_Base_bitset(unsigned long)
#endif
{ }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichword(size_t __pos )
+ _S_whichword(size_t __pos) _GLIBCXX_NOEXCEPT
{ return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichbyte(size_t __pos )
+ _S_whichbyte(size_t __pos) _GLIBCXX_NOEXCEPT
{ return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
static _GLIBCXX_CONSTEXPR size_t
- _S_whichbit(size_t __pos )
+ _S_whichbit(size_t __pos) _GLIBCXX_NOEXCEPT
{ return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
static _GLIBCXX_CONSTEXPR _WordT
- _S_maskbit(size_t __pos )
+ _S_maskbit(size_t __pos) _GLIBCXX_NOEXCEPT
{ return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
// This would normally give access to the data. The bounds-checking
@@ -549,89 +556,90 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// make an unchecked call; all the memory ugliness is therefore
// localized to this single should-never-get-this-far function.
_WordT&
- _M_getword(size_t)
- {
+ _M_getword(size_t) _GLIBCXX_NOEXCEPT
+ {
__throw_out_of_range(__N("_Base_bitset::_M_getword"));
- return *new _WordT;
+ return *new _WordT;
}
- _WordT
- _M_getword(size_t __pos) const
+ _GLIBCXX_CONSTEXPR _WordT
+ _M_getword(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return 0; }
_GLIBCXX_CONSTEXPR _WordT
- _M_hiword() const
+ _M_hiword() const _GLIBCXX_NOEXCEPT
{ return 0; }
void
- _M_do_and(const _Base_bitset<0>&)
+ _M_do_and(const _Base_bitset<0>&) _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_or(const _Base_bitset<0>&)
+ _M_do_or(const _Base_bitset<0>&) _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_xor(const _Base_bitset<0>&)
+ _M_do_xor(const _Base_bitset<0>&) _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_left_shift(size_t)
+ _M_do_left_shift(size_t) _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_right_shift(size_t)
+ _M_do_right_shift(size_t) _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_flip()
+ _M_do_flip() _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_set()
+ _M_do_set() _GLIBCXX_NOEXCEPT
{ }
void
- _M_do_reset()
+ _M_do_reset() _GLIBCXX_NOEXCEPT
{ }
// Are all empty bitsets equal to each other? Are they equal to
// themselves? How to compare a thing which has no state? What is
// the sound of one zero-length bitset clapping?
bool
- _M_is_equal(const _Base_bitset<0>&) const
+ _M_is_equal(const _Base_bitset<0>&) const _GLIBCXX_NOEXCEPT
{ return true; }
- size_t
- _M_are_all_aux() const
- { return 0; }
+ template<size_t _Nb>
+ bool
+ _M_are_all() const _GLIBCXX_NOEXCEPT
+ { return true; }
bool
- _M_is_any() const
+ _M_is_any() const _GLIBCXX_NOEXCEPT
{ return false; }
size_t
- _M_do_count() const
+ _M_do_count() const _GLIBCXX_NOEXCEPT
{ return 0; }
unsigned long
- _M_do_to_ulong() const
+ _M_do_to_ulong() const _GLIBCXX_NOEXCEPT
{ return 0; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
unsigned long long
- _M_do_to_ullong() const
+ _M_do_to_ullong() const noexcept
{ return 0; }
#endif
// Normally "not found" is the size, but that could also be
// misinterpreted as an index in this corner case. Oh well.
size_t
- _M_do_find_first(size_t) const
+ _M_do_find_first(size_t) const _GLIBCXX_NOEXCEPT
{ return 0; }
size_t
- _M_do_find_next(size_t, size_t) const
+ _M_do_find_next(size_t, size_t) const _GLIBCXX_NOEXCEPT
{ return 0; }
};
@@ -642,18 +650,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
typedef unsigned long _WordT;
- static void
- _S_do_sanitize(_WordT& __val)
+ static void
+ _S_do_sanitize(_WordT& __val) _GLIBCXX_NOEXCEPT
{ __val &= ~((~static_cast<_WordT>(0)) << _Extrabits); }
};
template<>
struct _Sanitize<0>
- {
+ {
typedef unsigned long _WordT;
- static void
- _S_do_sanitize(_WordT) { }
+ static void
+ _S_do_sanitize(_WordT) _GLIBCXX_NOEXCEPT { }
};
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -675,7 +683,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#endif
/**
- * @brief The %bitset class represents a @e fixed-size sequence of bits.
+ * The %bitset class represents a @e fixed-size sequence of bits.
*
* @ingroup containers
*
@@ -747,7 +755,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef unsigned long _WordT;
void
- _M_do_sanitize()
+ _M_do_sanitize() _GLIBCXX_NOEXCEPT
{
typedef _Sanitize<_Nb % _GLIBCXX_BITSET_BITS_PER_WORD> __sanitize_type;
__sanitize_type::_S_do_sanitize(this->_M_hiword());
@@ -781,18 +789,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
reference();
public:
- reference(bitset& __b, size_t __pos)
+ reference(bitset& __b, size_t __pos) _GLIBCXX_NOEXCEPT
{
_M_wp = &__b._M_getword(__pos);
_M_bpos = _Base::_S_whichbit(__pos);
}
- ~reference()
+ ~reference() _GLIBCXX_NOEXCEPT
{ }
// For b[i] = __x;
reference&
- operator=(bool __x)
+ operator=(bool __x) _GLIBCXX_NOEXCEPT
{
if (__x)
*_M_wp |= _Base::_S_maskbit(_M_bpos);
@@ -803,7 +811,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// For b[i] = b[__j];
reference&
- operator=(const reference& __j)
+ operator=(const reference& __j) _GLIBCXX_NOEXCEPT
{
if ((*(__j._M_wp) & _Base::_S_maskbit(__j._M_bpos)))
*_M_wp |= _Base::_S_maskbit(_M_bpos);
@@ -814,16 +822,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// Flips the bit
bool
- operator~() const
+ operator~() const _GLIBCXX_NOEXCEPT
{ return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) == 0; }
// For __x = b[i];
- operator bool() const
+ operator bool() const _GLIBCXX_NOEXCEPT
{ return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) != 0; }
// For b[i].flip();
reference&
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
*_M_wp ^= _Base::_S_maskbit(_M_bpos);
return *this;
@@ -833,12 +841,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// 23.3.5.1 constructors:
/// All bits set to zero.
- _GLIBCXX_CONSTEXPR bitset()
+ _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
{ }
/// Initial bits bitwise-copied from a single word (others set to zero).
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- constexpr bitset(unsigned long long __val)
+ constexpr bitset(unsigned long long __val) noexcept
: _Base(_Sanitize_val<_Nb>::_S_do_sanitize_val(__val)) { }
#else
bitset(unsigned long __val)
@@ -847,11 +855,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#endif
/**
- * @brief Use a subset of a string.
- * @param s A string of @a 0 and @a 1 characters.
- * @param position Index of the first character in @a s to use;
+ * Use a subset of a string.
+ * @param __s A string of @a 0 and @a 1 characters.
+ * @param __position Index of the first character in @a __s to use;
* defaults to zero.
- * @throw std::out_of_range If @a pos is bigger the size of @a s.
+ * @throw std::out_of_range If @a pos is bigger the size of @a __s.
* @throw std::invalid_argument If a character appears in the string
* which is neither @a 0 nor @a 1.
*/
@@ -870,11 +878,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
/**
- * @brief Use a subset of a string.
- * @param s A string of @a 0 and @a 1 characters.
- * @param position Index of the first character in @a s to use.
- * @param n The number of characters to copy.
- * @throw std::out_of_range If @a pos is bigger the size of @a s.
+ * Use a subset of a string.
+ * @param __s A string of @a 0 and @a 1 characters.
+ * @param __position Index of the first character in @a __s to use.
+ * @param __n The number of characters to copy.
+ * @throw std::out_of_range If @a __position is bigger the size
+ * of @a __s.
* @throw std::invalid_argument If a character appears in the string
* which is neither @a 0 nor @a 1.
*/
@@ -905,13 +914,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
- * @brief Construct from a character %array.
- * @param str An %array of characters @a zero and @a one.
- * @param n The number of characters to use.
- * @param zero The character corresponding to the value 0.
- * @param one The character corresponding to the value 1.
- * @throw std::invalid_argument If a character appears in the string
- * which is neither @a zero nor @a one.
+ * Construct from a character %array.
+ * @param __str An %array of characters @a zero and @a one.
+ * @param __n The number of characters to use.
+ * @param __zero The character corresponding to the value 0.
+ * @param __one The character corresponding to the value 1.
+ * @throw std::invalid_argument If a character appears in the string
+ * which is neither @a __zero nor @a __one.
*/
template<typename _CharT>
explicit
@@ -935,27 +944,27 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// 23.3.5.2 bitset operations:
//@{
/**
- * @brief Operations on bitsets.
- * @param rhs A same-sized bitset.
+ * Operations on bitsets.
+ * @param __rhs A same-sized bitset.
*
* These should be self-explanatory.
*/
bitset<_Nb>&
- operator&=(const bitset<_Nb>& __rhs)
+ operator&=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
this->_M_do_and(__rhs);
return *this;
}
bitset<_Nb>&
- operator|=(const bitset<_Nb>& __rhs)
+ operator|=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
this->_M_do_or(__rhs);
return *this;
}
bitset<_Nb>&
- operator^=(const bitset<_Nb>& __rhs)
+ operator^=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
{
this->_M_do_xor(__rhs);
return *this;
@@ -964,13 +973,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
- * @brief Operations on bitsets.
- * @param position The number of places to shift.
+ * Operations on bitsets.
+ * @param __position The number of places to shift.
*
* These should be self-explanatory.
*/
bitset<_Nb>&
- operator<<=(size_t __position)
+ operator<<=(size_t __position) _GLIBCXX_NOEXCEPT
{
if (__builtin_expect(__position < _Nb, 1))
{
@@ -983,7 +992,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
bitset<_Nb>&
- operator>>=(size_t __position)
+ operator>>=(size_t __position) _GLIBCXX_NOEXCEPT
{
if (__builtin_expect(__position < _Nb, 1))
{
@@ -1003,14 +1012,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @ingroup SGIextensions
*/
bitset<_Nb>&
- _Unchecked_set(size_t __pos)
+ _Unchecked_set(size_t __pos) _GLIBCXX_NOEXCEPT
{
this->_M_getword(__pos) |= _Base::_S_maskbit(__pos);
return *this;
}
bitset<_Nb>&
- _Unchecked_set(size_t __pos, int __val)
+ _Unchecked_set(size_t __pos, int __val) _GLIBCXX_NOEXCEPT
{
if (__val)
this->_M_getword(__pos) |= _Base::_S_maskbit(__pos);
@@ -1020,21 +1029,21 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
bitset<_Nb>&
- _Unchecked_reset(size_t __pos)
+ _Unchecked_reset(size_t __pos) _GLIBCXX_NOEXCEPT
{
this->_M_getword(__pos) &= ~_Base::_S_maskbit(__pos);
return *this;
}
bitset<_Nb>&
- _Unchecked_flip(size_t __pos)
+ _Unchecked_flip(size_t __pos) _GLIBCXX_NOEXCEPT
{
this->_M_getword(__pos) ^= _Base::_S_maskbit(__pos);
return *this;
}
- bool
- _Unchecked_test(size_t __pos) const
+ _GLIBCXX_CONSTEXPR bool
+ _Unchecked_test(size_t __pos) const _GLIBCXX_NOEXCEPT
{ return ((this->_M_getword(__pos) & _Base::_S_maskbit(__pos))
!= static_cast<_WordT>(0)); }
//@}
@@ -1044,7 +1053,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @brief Sets every bit to true.
*/
bitset<_Nb>&
- set()
+ set() _GLIBCXX_NOEXCEPT
{
this->_M_do_set();
this->_M_do_sanitize();
@@ -1053,8 +1062,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Sets a given bit to a particular value.
- * @param position The index of the bit.
- * @param val Either true or false, defaults to true.
+ * @param __position The index of the bit.
+ * @param __val Either true or false, defaults to true.
* @throw std::out_of_range If @a pos is bigger the size of the %set.
*/
bitset<_Nb>&
@@ -1069,7 +1078,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @brief Sets every bit to false.
*/
bitset<_Nb>&
- reset()
+ reset() _GLIBCXX_NOEXCEPT
{
this->_M_do_reset();
return *this;
@@ -1077,7 +1086,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Sets a given bit to false.
- * @param position The index of the bit.
+ * @param __position The index of the bit.
* @throw std::out_of_range If @a pos is bigger the size of the %set.
*
* Same as writing @c set(pos,false).
@@ -1094,7 +1103,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @brief Toggles every bit to its opposite value.
*/
bitset<_Nb>&
- flip()
+ flip() _GLIBCXX_NOEXCEPT
{
this->_M_do_flip();
this->_M_do_sanitize();
@@ -1103,7 +1112,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
* @brief Toggles a given bit to its opposite value.
- * @param position The index of the bit.
+ * @param __position The index of the bit.
* @throw std::out_of_range If @a pos is bigger the size of the %set.
*/
bitset<_Nb>&
@@ -1116,13 +1125,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// See the no-argument flip().
bitset<_Nb>
- operator~() const
+ operator~() const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(*this).flip(); }
//@{
/**
* @brief Array-indexing support.
- * @param position Index into the %bitset.
+ * @param __position Index into the %bitset.
* @return A bool for a <em>const %bitset</em>. For non-const
* bitsets, an instance of the reference proxy class.
* @note These operators do no range checking and throw no exceptions,
@@ -1138,7 +1147,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
operator[](size_t __position)
{ return reference(*this, __position); }
- bool
+ _GLIBCXX_CONSTEXPR bool
operator[](size_t __position) const
{ return _Unchecked_test(__position); }
//@}
@@ -1267,28 +1276,28 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Returns the number of bits which are set.
size_t
- count() const
+ count() const _GLIBCXX_NOEXCEPT
{ return this->_M_do_count(); }
/// Returns the total number of bits.
_GLIBCXX_CONSTEXPR size_t
- size() const
+ size() const _GLIBCXX_NOEXCEPT
{ return _Nb; }
//@{
/// These comparisons for equality/inequality are, well, @e bitwise.
bool
- operator==(const bitset<_Nb>& __rhs) const
+ operator==(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
{ return this->_M_is_equal(__rhs); }
bool
- operator!=(const bitset<_Nb>& __rhs) const
+ operator!=(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
{ return !this->_M_is_equal(__rhs); }
//@}
/**
* @brief Tests the value of a bit.
- * @param position The index of a bit.
+ * @param __position The index of a bit.
* @return The value at @a pos.
* @throw std::out_of_range If @a pos is bigger the size of the %set.
*/
@@ -1307,15 +1316,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @return True if all the bits are set.
*/
bool
- all() const
- { return this->_M_are_all_aux() == _Nb; }
+ all() const _GLIBCXX_NOEXCEPT
+ { return this->template _M_are_all<_Nb>(); }
/**
* @brief Tests whether any of the bits are on.
* @return True if at least one bit is set.
*/
bool
- any() const
+ any() const _GLIBCXX_NOEXCEPT
{ return this->_M_is_any(); }
/**
@@ -1323,17 +1332,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @return True if none of the bits are set.
*/
bool
- none() const
+ none() const _GLIBCXX_NOEXCEPT
{ return !this->_M_is_any(); }
//@{
/// Self-explanatory.
bitset<_Nb>
- operator<<(size_t __position) const
+ operator<<(size_t __position) const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(*this) <<= __position; }
bitset<_Nb>
- operator>>(size_t __position) const
+ operator>>(size_t __position) const _GLIBCXX_NOEXCEPT
{ return bitset<_Nb>(*this) >>= __position; }
//@}
@@ -1344,18 +1353,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* @sa _Find_next
*/
size_t
- _Find_first() const
+ _Find_first() const _GLIBCXX_NOEXCEPT
{ return this->_M_do_find_first(_Nb); }
/**
* @brief Finds the index of the next "on" bit after prev.
* @return The index of the next bit set, or size() if not found.
- * @param prev Where to start searching.
+ * @param __prev Where to start searching.
* @ingroup SGIextensions
* @sa _Find_first
*/
size_t
- _Find_next(size_t __prev ) const
+ _Find_next(size_t __prev) const _GLIBCXX_NOEXCEPT
{ return this->_M_do_find_next(__prev, _Nb); }
};
@@ -1368,7 +1377,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
size_t __pos, size_t __n, _CharT __zero, _CharT __one)
{
reset();
- const size_t __nbits = std::min(_Nb, std::min(__n, __len - __pos));
+ const size_t __nbits = std::min(_Nb, std::min(__n, size_t(__len - __pos)));
for (size_t __i = __nbits; __i > 0; --__i)
{
const _CharT __c = __s[__pos + __nbits - __i];
@@ -1398,15 +1407,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
//@{
/**
* @brief Global bitwise operations on bitsets.
- * @param x A bitset.
- * @param y A bitset of the same size as @a x.
+ * @param __x A bitset.
+ * @param __y A bitset of the same size as @a __x.
* @return A new bitset.
*
* These should be self-explanatory.
*/
template<size_t _Nb>
inline bitset<_Nb>
- operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{
bitset<_Nb> __result(__x);
__result &= __y;
@@ -1415,7 +1424,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<size_t _Nb>
inline bitset<_Nb>
- operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{
bitset<_Nb> __result(__x);
__result |= __y;
@@ -1424,7 +1433,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template <size_t _Nb>
inline bitset<_Nb>
- operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y)
+ operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
{
bitset<_Nb> __result(__x);
__result ^= __y;
@@ -1546,7 +1555,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, _GLIBCXX_STD_C::bitset<_Nb>>
{
size_t
- operator()(const _GLIBCXX_STD_C::bitset<_Nb>& __b) const
+ operator()(const _GLIBCXX_STD_C::bitset<_Nb>& __b) const noexcept
{
const size_t __clength = (_Nb + __CHAR_BIT__ - 1) / __CHAR_BIT__;
return std::_Hash_impl::hash(__b._M_getdata(), __clength);
@@ -1558,7 +1567,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, _GLIBCXX_STD_C::bitset<0>>
{
size_t
- operator()(const _GLIBCXX_STD_C::bitset<0>&) const
+ operator()(const _GLIBCXX_STD_C::bitset<0>&) const noexcept
{ return 0; }
};
diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono
index 89ded2c80d..0806a5dc1c 100644
--- a/libstdc++-v3/include/std/chrono
+++ b/libstdc++-v3/include/std/chrono
@@ -168,8 +168,8 @@ _GLIBCXX_END_NAMESPACE_VERSION
/// duration_cast
template<typename _ToDur, typename _Rep, typename _Period>
- inline constexpr typename enable_if<__is_duration<_ToDur>::value,
- _ToDur>::type
+ constexpr typename enable_if<__is_duration<_ToDur>::value,
+ _ToDur>::type
duration_cast(const duration<_Rep, _Period>& __d)
{
typedef typename _ToDur::period __to_period;
@@ -203,7 +203,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
static constexpr _Rep
min()
- { return numeric_limits<_Rep>::min(); }
+ { return numeric_limits<_Rep>::lowest(); }
};
template<typename T>
@@ -352,28 +352,28 @@ _GLIBCXX_END_NAMESPACE_VERSION
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type
+ constexpr typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type
operator+(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{
typedef duration<_Rep1, _Period1> __dur1;
typedef duration<_Rep2, _Period2> __dur2;
- typedef typename common_type<__dur1,__dur2>::type __ct;
- return __ct(__lhs) += __rhs;
+ typedef typename common_type<__dur1,__dur2>::type __cd;
+ return __cd(__cd(__lhs).count() + __cd(__rhs).count());
}
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type
+ constexpr typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type
operator-(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{
typedef duration<_Rep1, _Period1> __dur1;
typedef duration<_Rep2, _Period2> __dur2;
- typedef typename common_type<__dur1,__dur2>::type __ct;
- return __ct(__lhs) -= __rhs;
+ typedef typename common_type<__dur1,__dur2>::type __cd;
+ return __cd(__cd(__lhs).count() - __cd(__rhs).count());
}
template<typename _Rep1, typename _Rep2, bool =
@@ -386,66 +386,71 @@ _GLIBCXX_END_NAMESPACE_VERSION
{ typedef typename common_type<_Rep1, _Rep2>::type type; };
template<typename _Rep1, typename _Period, typename _Rep2>
- inline duration<typename __common_rep_type<_Rep1, _Rep2>::type, _Period>
+ constexpr
+ duration<typename __common_rep_type<_Rep1, _Rep2>::type, _Period>
operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
{
- typedef typename common_type<_Rep1, _Rep2>::type __cr;
- return duration<__cr, _Period>(__d) *= __s;
+ typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+ __cd;
+ return __cd(__cd(__d).count() * __s);
}
- template<typename _Rep1, typename _Period, typename _Rep2>
- inline duration<typename __common_rep_type<_Rep2, _Rep1>::type, _Period>
+ template<typename _Rep1, typename _Rep2, typename _Period>
+ constexpr
+ duration<typename __common_rep_type<_Rep2, _Rep1>::type, _Period>
operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d)
{ return __d * __s; }
template<typename _Rep1, typename _Period, typename _Rep2>
- inline duration<typename __common_rep_type<_Rep1, typename
+ constexpr duration<typename __common_rep_type<_Rep1, typename
enable_if<!__is_duration<_Rep2>::value, _Rep2>::type>::type, _Period>
operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
{
- typedef typename common_type<_Rep1, _Rep2>::type __cr;
- return duration<__cr, _Period>(__d) /= __s;
+ typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+ __cd;
+ return __cd(__cd(__d).count() / __s);
}
- template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline typename common_type<_Rep1, _Rep2>::type
+ template<typename _Rep1, typename _Period1,
+ typename _Rep2, typename _Period2>
+ constexpr typename common_type<_Rep1, _Rep2>::type
operator/(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{
typedef duration<_Rep1, _Period1> __dur1;
typedef duration<_Rep2, _Period2> __dur2;
- typedef typename common_type<__dur1,__dur2>::type __ct;
- return __ct(__lhs).count() / __ct(__rhs).count();
+ typedef typename common_type<__dur1,__dur2>::type __cd;
+ return __cd(__lhs).count() / __cd(__rhs).count();
}
// DR 934.
template<typename _Rep1, typename _Period, typename _Rep2>
- inline duration<typename __common_rep_type<_Rep1, typename
+ constexpr duration<typename __common_rep_type<_Rep1, typename
enable_if<!__is_duration<_Rep2>::value, _Rep2>::type>::type, _Period>
operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
{
- typedef typename common_type<_Rep1, _Rep2>::type __cr;
- return duration<__cr, _Period>(__d) %= __s;
+ typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+ __cd;
+ return __cd(__cd(__d).count() % __s);
}
- template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type
+ template<typename _Rep1, typename _Period1,
+ typename _Rep2, typename _Period2>
+ constexpr typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type
operator%(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{
typedef duration<_Rep1, _Period1> __dur1;
typedef duration<_Rep2, _Period2> __dur2;
- typedef typename common_type<__dur1,__dur2>::type __ct;
- return __ct(__lhs) %= __rhs;
+ typedef typename common_type<__dur1,__dur2>::type __cd;
+ return __cd(__cd(__lhs).count() % __cd(__rhs).count());
}
// comparisons
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline constexpr bool
+ constexpr bool
operator==(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{
@@ -457,7 +462,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline constexpr bool
+ constexpr bool
operator<(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{
@@ -469,28 +474,28 @@ _GLIBCXX_END_NAMESPACE_VERSION
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline constexpr bool
+ constexpr bool
operator!=(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{ return !(__lhs == __rhs); }
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline constexpr bool
+ constexpr bool
operator<=(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{ return !(__rhs < __lhs); }
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline constexpr bool
+ constexpr bool
operator>(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{ return __rhs < __lhs; }
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline constexpr bool
+ constexpr bool
operator>=(const duration<_Rep1, _Period1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
{ return !(__lhs < __rhs); }
@@ -570,8 +575,8 @@ _GLIBCXX_END_NAMESPACE_VERSION
/// time_point_cast
template<typename _ToDur, typename _Clock, typename _Dur>
- inline constexpr typename enable_if<__is_duration<_ToDur>::value,
- time_point<_Clock, _ToDur>>::type
+ constexpr typename enable_if<__is_duration<_ToDur>::value,
+ time_point<_Clock, _ToDur>>::type
time_point_cast(const time_point<_Clock, _Dur>& __t)
{
typedef time_point<_Clock, _ToDur> __time_point;
@@ -580,7 +585,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
template<typename _Clock, typename _Dur1,
typename _Rep2, typename _Period2>
- inline time_point<_Clock,
+ constexpr time_point<_Clock,
typename common_type<_Dur1, duration<_Rep2, _Period2>>::type>
operator+(const time_point<_Clock, _Dur1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
@@ -588,63 +593,73 @@ _GLIBCXX_END_NAMESPACE_VERSION
typedef duration<_Rep2, _Period2> __dur2;
typedef typename common_type<_Dur1,__dur2>::type __ct;
typedef time_point<_Clock, __ct> __time_point;
- return __time_point(__lhs) += __rhs;
+ return __time_point(__lhs.time_since_epoch() + __rhs);
}
template<typename _Rep1, typename _Period1,
typename _Clock, typename _Dur2>
- inline time_point<_Clock,
+ constexpr time_point<_Clock,
typename common_type<duration<_Rep1, _Period1>, _Dur2>::type>
operator+(const duration<_Rep1, _Period1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
- { return __rhs + __lhs; }
+ {
+ typedef duration<_Rep1, _Period1> __dur1;
+ typedef typename common_type<__dur1,_Dur2>::type __ct;
+ typedef time_point<_Clock, __ct> __time_point;
+ return __time_point(__rhs.time_since_epoch() + __lhs);
+ }
template<typename _Clock, typename _Dur1,
typename _Rep2, typename _Period2>
- inline time_point<_Clock,
+ constexpr time_point<_Clock,
typename common_type<_Dur1, duration<_Rep2, _Period2>>::type>
operator-(const time_point<_Clock, _Dur1>& __lhs,
const duration<_Rep2, _Period2>& __rhs)
- { return __lhs + (-__rhs); }
+ {
+ typedef duration<_Rep2, _Period2> __dur2;
+ typedef typename common_type<_Dur1,__dur2>::type __ct;
+ typedef time_point<_Clock, __ct> __time_point;
+ return __time_point(__lhs.time_since_epoch() -__rhs);
+ }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline typename common_type<_Dur1, _Dur2>::type
+ constexpr typename common_type<_Dur1, _Dur2>::type
operator-(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return __lhs.time_since_epoch() - __rhs.time_since_epoch(); }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline constexpr bool
+ constexpr bool
operator==(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return __lhs.time_since_epoch() == __rhs.time_since_epoch(); }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline constexpr bool
+ constexpr bool
operator!=(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return !(__lhs == __rhs); }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline constexpr bool
+ constexpr bool
operator<(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return __lhs.time_since_epoch() < __rhs.time_since_epoch(); }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline constexpr bool
+ constexpr bool
operator<=(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return !(__rhs < __lhs); }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline constexpr bool
+ constexpr bool
operator>(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return __rhs < __lhs; }
template<typename _Clock, typename _Dur1, typename _Dur2>
- inline constexpr bool
+ constexpr bool
operator>=(const time_point<_Clock, _Dur1>& __lhs,
const time_point<_Clock, _Dur2>& __rhs)
{ return !(__lhs < __rhs); }
@@ -668,21 +683,21 @@ _GLIBCXX_END_NAMESPACE_VERSION
< system_clock::duration::zero(),
"a clock's minimum duration cannot be less than its epoch");
- static constexpr bool is_monotonic = false;
+ static constexpr bool is_steady = false;
static time_point
- now() throw ();
+ now() noexcept;
// Map to C API
static std::time_t
- to_time_t(const time_point& __t)
+ to_time_t(const time_point& __t) noexcept
{
return std::time_t(duration_cast<chrono::seconds>
(__t.time_since_epoch()).count());
}
static time_point
- from_time_t(std::time_t __t)
+ from_time_t(std::time_t __t) noexcept
{
typedef chrono::time_point<system_clock, seconds> __from;
return time_point_cast<system_clock::duration>
@@ -691,21 +706,21 @@ _GLIBCXX_END_NAMESPACE_VERSION
};
#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
- /// monotonic_clock
- struct monotonic_clock
+ /// steady_clock
+ struct steady_clock
{
typedef chrono::nanoseconds duration;
typedef duration::rep rep;
typedef duration::period period;
- typedef chrono::time_point<monotonic_clock, duration> time_point;
+ typedef chrono::time_point<steady_clock, duration> time_point;
- static constexpr bool is_monotonic = true;
+ static constexpr bool is_steady = true;
static time_point
- now();
+ now() noexcept;
};
#else
- typedef system_clock monotonic_clock;
+ typedef system_clock steady_clock;
#endif
typedef system_clock high_resolution_clock;
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index aa6e81d248..8ef7acb243 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -1,8 +1,6 @@
// The template and inlines for the -*- C++ -*- complex number classes.
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 1997-2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -142,10 +140,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
constexpr _Tp
- real() const { return _M_real; }
+ real() { return _M_real; }
constexpr _Tp
- imag() const { return _M_imag; }
+ imag() { return _M_imag; }
#else
/// Return real part of complex number.
_Tp&
@@ -531,12 +529,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Values
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Tp>
- inline constexpr _Tp
+ constexpr _Tp
real(const complex<_Tp>& __z)
{ return __z.real(); }
-
+
template<typename _Tp>
- inline constexpr _Tp
+ constexpr _Tp
imag(const complex<_Tp>& __z)
{ return __z.imag(); }
#else
@@ -976,7 +974,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pow(const complex<_Tp>& __z, int __n)
{
return __n < 0
- ? complex<_Tp>(1) / std::__complex_pow_unsigned(__z, -__n)
+ ? complex<_Tp>(1) / std::__complex_pow_unsigned(__z, -(unsigned)__n)
: std::__complex_pow_unsigned(__z, __n);
}
#endif
@@ -1035,8 +1033,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: std::pow(complex<_Tp>(__x), __y);
}
- // 26.2.3 complex specializations
- // complex<float> specialization
+ /// 26.2.3 complex specializations
+ /// complex<float> specialization
template<>
struct complex<float>
{
@@ -1047,10 +1045,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_CONSTEXPR complex(float __r = 0.0f, float __i = 0.0f)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- // The list-initialization extension to __complex__ types is
- // not available in GCC 4.6. Thus libstdc++/48760 cannot be
- // fixed in C++0x mode, unfortunately.
- : _M_value(__r + __i * 1.0fi) { }
+ : _M_value{ __r, __i } { }
#else
{
__real__ _M_value = __r;
@@ -1065,10 +1060,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
constexpr float
- real() const { return __real__ _M_value; }
+ real() { return __real__ _M_value; }
constexpr float
- imag() const { return __imag__ _M_value; }
+ imag() { return __imag__ _M_value; }
#else
float&
real() { return __real__ _M_value; }
@@ -1185,8 +1180,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ComplexT _M_value;
};
- // 26.2.3 complex specializations
- // complex<double> specialization
+ /// 26.2.3 complex specializations
+ /// complex<double> specialization
template<>
struct complex<double>
{
@@ -1197,10 +1192,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_CONSTEXPR complex(double __r = 0.0, double __i = 0.0)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- // The list-initialization extension to __complex__ types is
- // not available in GCC 4.6. Thus libstdc++/48760 cannot be
- // fixed in C++0x mode, unfortunately.
- : _M_value(__r + __i * 1.0i) { }
+ : _M_value{ __r, __i } { }
#else
{
__real__ _M_value = __r;
@@ -1217,10 +1209,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
constexpr double
- real() const { return __real__ _M_value; }
+ real() { return __real__ _M_value; }
constexpr double
- imag() const { return __imag__ _M_value; }
+ imag() { return __imag__ _M_value; }
#else
double&
real() { return __real__ _M_value; }
@@ -1336,8 +1328,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_ComplexT _M_value;
};
- // 26.2.3 complex specializations
- // complex<long double> specialization
+ /// 26.2.3 complex specializations
+ /// complex<long double> specialization
template<>
struct complex<long double>
{
@@ -1349,10 +1341,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_CONSTEXPR complex(long double __r = 0.0L,
long double __i = 0.0L)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- // The list-initialization extension to __complex__ types is
- // not available in GCC 4.6. Thus libstdc++/48760 cannot be
- // fixed in C++0x mode, unfortunately.
- : _M_value(__r + __i * 1.0Li) { }
+ : _M_value{ __r, __i } { }
#else
{
__real__ _M_value = __r;
@@ -1370,10 +1359,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
constexpr long double
- real() const { return __real__ _M_value; }
+ real() { return __real__ _M_value; }
constexpr long double
- imag() const { return __imag__ _M_value; }
+ imag() { return __imag__ _M_value; }
#else
long double&
real() { return __real__ _M_value; }
@@ -1695,12 +1684,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::complex<_Tp>
__complex_acosh(const std::complex<_Tp>& __z)
{
- std::complex<_Tp> __t((__z.real() - __z.imag())
- * (__z.real() + __z.imag()) - _Tp(1.0),
- _Tp(2.0) * __z.real() * __z.imag());
- __t = std::sqrt(__t);
-
- return std::log(__t + __z);
+ // Kahan's formula.
+ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
+ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
}
#if _GLIBCXX_USE_C99_COMPLEX_TR1
diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable
index a0a3c08794..60c72bacff 100644
--- a/libstdc++-v3/include/std/condition_variable
+++ b/libstdc++-v3/include/std/condition_variable
@@ -1,6 +1,6 @@
// <condition_variable> -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -60,22 +60,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
typedef chrono::system_clock __clock_t;
typedef __gthread_cond_t __native_type;
+
+#ifdef __GTHREAD_COND_INIT
+ __native_type _M_cond = __GTHREAD_COND_INIT;
+#else
__native_type _M_cond;
+#endif
public:
typedef __native_type* native_handle_type;
- condition_variable() throw ();
- ~condition_variable() throw ();
+ condition_variable() noexcept;
+ ~condition_variable() noexcept;
condition_variable(const condition_variable&) = delete;
condition_variable& operator=(const condition_variable&) = delete;
void
- notify_one();
+ notify_one() noexcept;
void
- notify_all();
+ notify_all() noexcept;
void
wait(unique_lock<mutex>& __lock);
@@ -102,8 +107,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// DR 887 - Sync unknown clock to known clock.
const typename _Clock::time_point __c_entry = _Clock::now();
const __clock_t::time_point __s_entry = __clock_t::now();
- const chrono::nanoseconds __delta = __atime - __c_entry;
- const __clock_t::time_point __s_atime = __s_entry + __delta;
+ const auto __delta = __atime - __c_entry;
+ const auto __s_atime = __s_entry + __delta;
return __wait_until_impl(__lock, __s_atime);
}
@@ -171,24 +176,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
condition_variable _M_cond;
mutex _M_mutex;
+ // scoped unlock - unlocks in ctor, re-locks in dtor
+ template<typename _Lock>
+ struct _Unlock
+ {
+ explicit _Unlock(_Lock& __lk) : _M_lock(__lk) { __lk.unlock(); }
+
+ ~_Unlock() noexcept(false)
+ {
+ if (uncaught_exception())
+ __try { _M_lock.lock(); } __catch(...) { }
+ else
+ _M_lock.lock();
+ }
+
+ _Unlock(const _Unlock&) = delete;
+ _Unlock& operator=(const _Unlock&) = delete;
+
+ _Lock& _M_lock;
+ };
+
public:
- typedef condition_variable::native_handle_type native_handle_type;
- condition_variable_any() throw ();
- ~condition_variable_any() throw ();
+ condition_variable_any() noexcept;
+ ~condition_variable_any() noexcept;
condition_variable_any(const condition_variable_any&) = delete;
condition_variable_any& operator=(const condition_variable_any&) = delete;
void
- notify_one()
+ notify_one() noexcept
{
lock_guard<mutex> __lock(_M_mutex);
_M_cond.notify_one();
}
void
- notify_all()
+ notify_all() noexcept
{
lock_guard<mutex> __lock(_M_mutex);
_M_cond.notify_all();
@@ -198,10 +222,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
wait(_Lock& __lock)
{
- unique_lock<mutex> __my_lock(_M_mutex);
- __lock.unlock();
- _M_cond.wait(__my_lock);
- __lock.lock();
+ unique_lock<mutex> __my_lock(_M_mutex);
+ _Unlock<_Lock> __unlock(__lock);
+ // _M_mutex must be unlocked before re-locking __lock so move
+ // ownership of _M_mutex lock to an object with shorter lifetime.
+ unique_lock<mutex> __my_lock2(std::move(__my_lock));
+ _M_cond.wait(__my_lock2);
}
@@ -218,11 +244,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
wait_until(_Lock& __lock,
const chrono::time_point<_Clock, _Duration>& __atime)
{
- unique_lock<mutex> __my_lock(_M_mutex);
- __lock.unlock();
- cv_status __status = _M_cond.wait_until(__my_lock, __atime);
- __lock.lock();
- return __status;
+ unique_lock<mutex> __my_lock(_M_mutex);
+ _Unlock<_Lock> __unlock(__lock);
+ // _M_mutex must be unlocked before re-locking __lock so move
+ // ownership of _M_mutex lock to an object with shorter lifetime.
+ unique_lock<mutex> __my_lock2(std::move(__my_lock));
+ return _M_cond.wait_until(__my_lock2, __atime);
}
template<typename _Lock, typename _Clock,
@@ -249,10 +276,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
wait_for(_Lock& __lock,
const chrono::duration<_Rep, _Period>& __rtime, _Predicate __p)
{ return wait_until(__lock, __clock_t::now() + __rtime, std::move(__p)); }
-
- native_handle_type
- native_handle()
- { return _M_cond.native_handle(); }
};
// @} group condition_variables
diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream
index 8ad6e5ca11..65de272811 100644
--- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream
@@ -226,12 +226,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
* @return @c this on success, NULL on failure
*
* If a file is already open, this function immediately fails.
- * Otherwise it tries to open the file named @a s using the flags
+ * Otherwise it tries to open the file named @a __s using the flags
* given in @a mode.
*
* Table 92, adapted here, gives the relation between openmode
@@ -269,8 +269,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
* @return @c this on success, NULL on failure
*/
__filebuf_type*
@@ -332,12 +332,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulates the buffer.
- * @param s Pointer to a buffer area.
- * @param n Size of @a s.
+ * @param __s Pointer to a buffer area.
+ * @param __n Size of @a __s.
* @return @c this
*
- * If no file has been opened, and both @a s and @a n are zero, then
- * the stream becomes unbuffered. Otherwise, @c s is used as a
+ * If no file has been opened, and both @a __s and @a __n are zero, then
+ * the stream becomes unbuffered. Otherwise, @c __s is used as a
* buffer; see
* http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
* for more.
@@ -448,10 +448,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Create an input file stream.
- * @param s Null terminated string specifying the filename.
- * @param mode Open file in specified mode (see std::ios_base).
+ * @param __s Null terminated string specifying the filename.
+ * @param __mode Open file in specified mode (see std::ios_base).
*
- * @c ios_base::in is automatically included in @a mode.
+ * @c ios_base::in is automatically included in @a __mode.
*
* Tip: When using std::string to hold the filename, you must use
* .c_str() before passing it to this constructor.
@@ -467,10 +467,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Create an input file stream.
- * @param s std::string specifying the filename.
- * @param mode Open file in specified mode (see std::ios_base).
+ * @param __s std::string specifying the filename.
+ * @param __mode Open file in specified mode (see std::ios_base).
*
- * @c ios_base::in is automatically included in @a mode.
+ * @c ios_base::in is automatically included in @a __mode.
*/
explicit
basic_ifstream(const std::string& __s,
@@ -518,10 +518,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
*
- * Calls @c std::basic_filebuf::open(s,mode|in). If that function
+ * Calls @c std::basic_filebuf::open(s,__mode|in). If that function
* fails, @c failbit is set in the stream's error state.
*
* Tip: When using std::string to hold the filename, you must use
@@ -541,10 +541,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
*
- * Calls @c std::basic_filebuf::open(s,mode|in). If that function
+ * Calls @c std::basic_filebuf::open(__s,__mode|in). If that function
* fails, @c failbit is set in the stream's error state.
*/
void
@@ -616,11 +616,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Create an output file stream.
- * @param s Null terminated string specifying the filename.
- * @param mode Open file in specified mode (see std::ios_base).
+ * @param __s Null terminated string specifying the filename.
+ * @param __mode Open file in specified mode (see std::ios_base).
*
* @c ios_base::out|ios_base::trunc is automatically included in
- * @a mode.
+ * @p __mode.
*
* Tip: When using std::string to hold the filename, you must use
* .c_str() before passing it to this constructor.
@@ -637,11 +637,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Create an output file stream.
- * @param s std::string specifying the filename.
- * @param mode Open file in specified mode (see std::ios_base).
+ * @param __s std::string specifying the filename.
+ * @param __mode Open file in specified mode (see std::ios_base).
*
* @c ios_base::out|ios_base::trunc is automatically included in
- * @a mode.
+ * @a __mode.
*/
explicit
basic_ofstream(const std::string& __s,
@@ -689,10 +689,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
*
- * Calls @c std::basic_filebuf::open(s,mode|out|trunc). If that
+ * Calls @c std::basic_filebuf::open(__s,__mode|out|trunc). If that
* function fails, @c failbit is set in the stream's error state.
*
* Tip: When using std::string to hold the filename, you must use
@@ -713,8 +713,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
*
* Calls @c std::basic_filebuf::open(s,mode|out|trunc). If that
* function fails, @c failbit is set in the stream's error state.
@@ -791,8 +791,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Create an input/output file stream.
- * @param s Null terminated string specifying the filename.
- * @param mode Open file in specified mode (see std::ios_base).
+ * @param __s Null terminated string specifying the filename.
+ * @param __mode Open file in specified mode (see std::ios_base).
*
* Tip: When using std::string to hold the filename, you must use
* .c_str() before passing it to this constructor.
@@ -809,8 +809,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Create an input/output file stream.
- * @param s Null terminated string specifying the filename.
- * @param mode Open file in specified mode (see std::ios_base).
+ * @param __s Null terminated string specifying the filename.
+ * @param __mode Open file in specified mode (see std::ios_base).
*/
explicit
basic_fstream(const std::string& __s,
@@ -858,10 +858,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
*
- * Calls @c std::basic_filebuf::open(s,mode). If that
+ * Calls @c std::basic_filebuf::open(__s,__mode). If that
* function fails, @c failbit is set in the stream's error state.
*
* Tip: When using std::string to hold the filename, you must use
@@ -882,10 +882,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Opens an external file.
- * @param s The name of the file.
- * @param mode The open mode flags.
+ * @param __s The name of the file.
+ * @param __mode The open mode flags.
*
- * Calls @c std::basic_filebuf::open(s,mode). If that
+ * Calls @c std::basic_filebuf::open(__s,__mode). If that
* function fails, @c failbit is set in the stream's error state.
*/
void
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 45bee8112c..e2cdd65f4c 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1,7 +1,7 @@
// <functional> -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -62,6 +62,12 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ template<typename _MemberPointer>
+ class _Mem_fn;
+ template<typename _Tp, typename _Class>
+ _Mem_fn<_Tp _Class::*>
+ mem_fn(_Tp _Class::*);
+
_GLIBCXX_HAS_NESTED_TYPE(result_type)
/// If we have found a result_type, extract it.
@@ -239,7 +245,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
>::type
__invoke(_Functor& __f, _Args&&... __args)
{
- return mem_fn(__f)(std::forward<_Args>(__args)...);
+ return std::mem_fn(__f)(std::forward<_Args>(__args)...);
}
// To pick up function references (that will become function pointers)
@@ -431,28 +437,28 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
public:
typedef _Tp type;
- reference_wrapper(_Tp& __indata)
+ reference_wrapper(_Tp& __indata) noexcept
: _M_data(std::__addressof(__indata))
{ }
reference_wrapper(_Tp&&) = delete;
- reference_wrapper(const reference_wrapper<_Tp>& __inref):
- _M_data(__inref._M_data)
+ reference_wrapper(const reference_wrapper<_Tp>& __inref) noexcept
+ : _M_data(__inref._M_data)
{ }
reference_wrapper&
- operator=(const reference_wrapper<_Tp>& __inref)
+ operator=(const reference_wrapper<_Tp>& __inref) noexcept
{
_M_data = __inref._M_data;
return *this;
}
- operator _Tp&() const
+ operator _Tp&() const noexcept
{ return this->get(); }
_Tp&
- get() const
+ get() const noexcept
{ return *_M_data; }
template<typename... _Args>
@@ -467,13 +473,13 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/// Denotes a reference should be taken to a variable.
template<typename _Tp>
inline reference_wrapper<_Tp>
- ref(_Tp& __t)
+ ref(_Tp& __t) noexcept
{ return reference_wrapper<_Tp>(__t); }
/// Denotes a const reference should be taken to a variable.
template<typename _Tp>
inline reference_wrapper<const _Tp>
- cref(const _Tp& __t)
+ cref(const _Tp& __t) noexcept
{ return reference_wrapper<const _Tp>(__t); }
template<typename _Tp>
@@ -485,20 +491,17 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/// Partial specialization.
template<typename _Tp>
inline reference_wrapper<_Tp>
- ref(reference_wrapper<_Tp> __t)
+ ref(reference_wrapper<_Tp> __t) noexcept
{ return ref(__t.get()); }
/// Partial specialization.
template<typename _Tp>
inline reference_wrapper<const _Tp>
- cref(reference_wrapper<_Tp> __t)
+ cref(reference_wrapper<_Tp> __t) noexcept
{ return cref(__t.get()); }
// @} group functors
- template<typename _MemberPointer>
- class _Mem_fn;
-
/**
* Derives from @c unary_function or @c binary_function, or perhaps
* nothing, depending on the number of arguments provided. The
@@ -840,22 +843,24 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
: public integral_constant<int, 0>
{ };
- /// The type of placeholder objects defined by libstdc++.
+ /** @brief The type of placeholder objects defined by libstdc++.
+ * @ingroup binders
+ */
template<int _Num> struct _Placeholder { };
_GLIBCXX_END_NAMESPACE_VERSION
/** @namespace std::placeholders
- * @brief ISO C++ 0x entities sub namespace for functional.
+ * @brief ISO C++11 entities sub-namespace for functional.
* @ingroup binders
- *
- * Define a large number of placeholders. There is no way to
- * simplify this with variadic templates, because we're introducing
- * unique names for each.
*/
namespace placeholders
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ /* Define a large number of placeholders. There is no way to
+ * simplify this with variadic templates, because we're introducing
+ * unique names for each.
+ */
extern const _Placeholder<1> _1;
extern const _Placeholder<2> _2;
extern const _Placeholder<3> _3;
@@ -900,6 +905,11 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
: public integral_constant<int, _Num>
{ };
+ template<int _Num>
+ struct is_placeholder<const _Placeholder<_Num> >
+ : public integral_constant<int, _Num>
+ { };
+
/**
* Used by _Safe_tuple_element to indicate that there is no tuple
* element at this position.
@@ -911,7 +921,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* template handles the case where it is safe to use @c
* tuple_element.
*/
- template<int __i, typename _Tuple, bool _IsSafe>
+ template<std::size_t __i, typename _Tuple, bool _IsSafe>
struct _Safe_tuple_element_impl
: tuple_element<__i, _Tuple> { };
@@ -920,7 +930,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* specialization handles the case where it is not safe to use @c
* tuple_element. We just return @c _No_tuple_element.
*/
- template<int __i, typename _Tuple>
+ template<std::size_t __i, typename _Tuple>
struct _Safe_tuple_element_impl<__i, _Tuple, false>
{
typedef _No_tuple_element type;
@@ -930,10 +940,10 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* Like tuple_element, but returns @c _No_tuple_element when
* tuple_element would return an error.
*/
- template<int __i, typename _Tuple>
+ template<std::size_t __i, typename _Tuple>
struct _Safe_tuple_element
: _Safe_tuple_element_impl<__i, _Tuple,
- (__i >= 0 && __i < tuple_size<_Tuple>::value)>
+ (__i < tuple_size<_Tuple>::value)>
{ };
/**
@@ -996,7 +1006,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
private:
// Invokes the underlying function object __arg by unpacking all
// of the arguments in the tuple.
- template<typename _CVArg, typename... _Args, int... _Indexes>
+ template<typename _CVArg, typename... _Args, std::size_t... _Indexes>
auto
__call(_CVArg& __arg, tuple<_Args...>& __tuple,
const _Index_tuple<_Indexes...>&) const volatile
@@ -1109,14 +1119,14 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
};
// std::get<I> for volatile-qualified tuples
- template<size_t _Ind, typename... _Tp>
+ template<std::size_t _Ind, typename... _Tp>
inline auto
__volget(volatile tuple<_Tp...>& __tuple)
-> typename tuple_element<_Ind, tuple<_Tp...>>::type volatile&
{ return std::get<_Ind>(const_cast<tuple<_Tp...>&>(__tuple)); }
// std::get<I> for const-volatile-qualified tuples
- template<size_t _Ind, typename... _Tp>
+ template<std::size_t _Ind, typename... _Tp>
inline auto
__volget(const volatile tuple<_Tp...>& __tuple)
-> typename tuple_element<_Ind, tuple<_Tp...>>::type const volatile&
@@ -1138,7 +1148,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
tuple<_Bound_args...> _M_bound_args;
// Call unqualified
- template<typename _Result, typename... _Args, int... _Indexes>
+ template<typename _Result, typename... _Args, std::size_t... _Indexes>
_Result
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
{
@@ -1147,7 +1157,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as const
- template<typename _Result, typename... _Args, int... _Indexes>
+ template<typename _Result, typename... _Args, std::size_t... _Indexes>
_Result
__call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
{
@@ -1156,7 +1166,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as volatile
- template<typename _Result, typename... _Args, int... _Indexes>
+ template<typename _Result, typename... _Args, std::size_t... _Indexes>
_Result
__call_v(tuple<_Args...>&& __args,
_Index_tuple<_Indexes...>) volatile
@@ -1166,7 +1176,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as const volatile
- template<typename _Result, typename... _Args, int... _Indexes>
+ template<typename _Result, typename... _Args, std::size_t... _Indexes>
_Result
__call_c_v(tuple<_Args...>&& __args,
_Index_tuple<_Indexes...>) const volatile
@@ -1269,7 +1279,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
struct __disable_if_void : enable_if<!is_void<_Res>::value, int> { };
// Call unqualified
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __disable_if_void<_Res>::type = 0)
@@ -1279,7 +1289,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call unqualified, return void
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
void
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __enable_if_void<_Res>::type = 0)
@@ -1289,7 +1299,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as const
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __disable_if_void<_Res>::type = 0) const
@@ -1299,7 +1309,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as const, return void
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
void
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __enable_if_void<_Res>::type = 0) const
@@ -1309,7 +1319,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as volatile
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __disable_if_void<_Res>::type = 0) volatile
@@ -1319,7 +1329,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as volatile, return void
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
void
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __enable_if_void<_Res>::type = 0) volatile
@@ -1329,7 +1339,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as const volatile
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>,
typename __disable_if_void<_Res>::type = 0) const volatile
@@ -1339,7 +1349,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
}
// Call as const volatile, return void
- template<typename _Res, typename... _Args, int... _Indexes>
+ template<typename _Res, typename... _Args, std::size_t... _Indexes>
void
__call(tuple<_Args...>&& __args,
_Index_tuple<_Indexes...>,
@@ -1421,43 +1431,110 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* @brief Class template _Bind is always a bind expression.
* @ingroup binders
*/
+ template<typename _Signature>
+ struct is_bind_expression<const _Bind<_Signature> >
+ : public true_type { };
+
+ /**
+ * @brief Class template _Bind is always a bind expression.
+ * @ingroup binders
+ */
+ template<typename _Signature>
+ struct is_bind_expression<volatile _Bind<_Signature> >
+ : public true_type { };
+
+ /**
+ * @brief Class template _Bind is always a bind expression.
+ * @ingroup binders
+ */
+ template<typename _Signature>
+ struct is_bind_expression<const volatile _Bind<_Signature>>
+ : public true_type { };
+
+ /**
+ * @brief Class template _Bind_result is always a bind expression.
+ * @ingroup binders
+ */
template<typename _Result, typename _Signature>
- struct is_bind_expression<_Bind_result<_Result, _Signature> >
+ struct is_bind_expression<_Bind_result<_Result, _Signature>>
: public true_type { };
- template<typename _Functor, typename... _ArgTypes>
+ /**
+ * @brief Class template _Bind_result is always a bind expression.
+ * @ingroup binders
+ */
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const _Bind_result<_Result, _Signature>>
+ : public true_type { };
+
+ /**
+ * @brief Class template _Bind_result is always a bind expression.
+ * @ingroup binders
+ */
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<volatile _Bind_result<_Result, _Signature>>
+ : public true_type { };
+
+ /**
+ * @brief Class template _Bind_result is always a bind expression.
+ * @ingroup binders
+ */
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const volatile _Bind_result<_Result, _Signature>>
+ : public true_type { };
+
+ // Trait type used to remove std::bind() from overload set via SFINAE
+ // when first argument has integer type, so that std::bind() will
+ // not be a better match than ::bind() from the BSD Sockets API.
+ template<typename _Tp>
+ class __is_socketlike
+ {
+ typedef typename decay<_Tp>::type _Tp2;
+ public:
+ static const bool value =
+ is_integral<_Tp2>::value || is_enum<_Tp2>::value;
+ };
+
+ template<bool _SocketLike, typename _Func, typename... _BoundArgs>
struct _Bind_helper
{
- typedef _Maybe_wrap_member_pointer<typename decay<_Functor>::type>
+ typedef _Maybe_wrap_member_pointer<typename decay<_Func>::type>
__maybe_type;
- typedef typename __maybe_type::type __functor_type;
- typedef _Bind<__functor_type(typename decay<_ArgTypes>::type...)> type;
+ typedef typename __maybe_type::type __func_type;
+ typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type;
};
+ // Partial specialization for is_socketlike == true, does not define
+ // nested type so std::bind() will not participate in overload resolution
+ // when the first argument might be a socket file descriptor.
+ template<typename _Func, typename... _BoundArgs>
+ struct _Bind_helper<true, _Func, _BoundArgs...>
+ { };
+
/**
* @brief Function template for std::bind.
* @ingroup binders
*/
- template<typename _Functor, typename... _ArgTypes>
- inline
- typename _Bind_helper<_Functor, _ArgTypes...>::type
- bind(_Functor&& __f, _ArgTypes&&... __args)
+ template<typename _Func, typename... _BoundArgs>
+ inline typename
+ _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
+ bind(_Func&& __f, _BoundArgs&&... __args)
{
- typedef _Bind_helper<_Functor, _ArgTypes...> __helper_type;
+ typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
typedef typename __helper_type::__maybe_type __maybe_type;
typedef typename __helper_type::type __result_type;
- return __result_type(__maybe_type::__do_wrap(std::forward<_Functor>(__f)),
- std::forward<_ArgTypes>(__args)...);
+ return __result_type(__maybe_type::__do_wrap(std::forward<_Func>(__f)),
+ std::forward<_BoundArgs>(__args)...);
}
- template<typename _Result, typename _Functor, typename... _ArgTypes>
+ template<typename _Result, typename _Func, typename... _BoundArgs>
struct _Bindres_helper
{
- typedef _Maybe_wrap_member_pointer<typename decay<_Functor>::type>
+ typedef _Maybe_wrap_member_pointer<typename decay<_Func>::type>
__maybe_type;
typedef typename __maybe_type::type __functor_type;
typedef _Bind_result<_Result,
- __functor_type(typename decay<_ArgTypes>::type...)>
+ __functor_type(typename decay<_BoundArgs>::type...)>
type;
};
@@ -1465,16 +1542,87 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* @brief Function template for std::bind<R>.
* @ingroup binders
*/
- template<typename _Result, typename _Functor, typename... _ArgTypes>
+ template<typename _Result, typename _Func, typename... _BoundArgs>
inline
- typename _Bindres_helper<_Result, _Functor, _ArgTypes...>::type
- bind(_Functor&& __f, _ArgTypes&&... __args)
+ typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type
+ bind(_Func&& __f, _BoundArgs&&... __args)
{
- typedef _Bindres_helper<_Result, _Functor, _ArgTypes...> __helper_type;
+ typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type;
typedef typename __helper_type::__maybe_type __maybe_type;
typedef typename __helper_type::type __result_type;
- return __result_type(__maybe_type::__do_wrap(std::forward<_Functor>(__f)),
- std::forward<_ArgTypes>(__args)...);
+ return __result_type(__maybe_type::__do_wrap(std::forward<_Func>(__f)),
+ std::forward<_BoundArgs>(__args)...);
+ }
+
+ template<typename _Signature>
+ struct _Bind_simple;
+
+ template<typename _Callable, typename... _Args>
+ struct _Bind_simple<_Callable(_Args...)>
+ {
+ typedef typename result_of<_Callable(_Args...)>::type result_type;
+
+ template<typename... _Args2, typename = typename
+ enable_if< sizeof...(_Args) == sizeof...(_Args2)>::type>
+ explicit
+ _Bind_simple(const _Callable& __callable, _Args2&&... __args)
+ : _M_bound(__callable, std::forward<_Args2>(__args)...)
+ { }
+
+ template<typename... _Args2, typename = typename
+ enable_if< sizeof...(_Args) == sizeof...(_Args2)>::type>
+ explicit
+ _Bind_simple(_Callable&& __callable, _Args2&&... __args)
+ : _M_bound(std::move(__callable), std::forward<_Args2>(__args)...)
+ { }
+
+ _Bind_simple(const _Bind_simple&) = default;
+ _Bind_simple(_Bind_simple&&) = default;
+
+ result_type
+ operator()()
+ {
+ typedef typename _Build_index_tuple<sizeof...(_Args)>::__type _Indices;
+ return _M_invoke(_Indices());
+ }
+
+ private:
+
+ template<std::size_t... _Indices>
+ typename result_of<_Callable(_Args...)>::type
+ _M_invoke(_Index_tuple<_Indices...>)
+ {
+ // std::bind always forwards bound arguments as lvalues,
+ // but this type can call functions which only accept rvalues.
+ return std::forward<_Callable>(std::get<0>(_M_bound))(
+ std::forward<_Args>(std::get<_Indices+1>(_M_bound))...);
+ }
+
+ std::tuple<_Callable, _Args...> _M_bound;
+ };
+
+ template<typename _Func, typename... _BoundArgs>
+ struct _Bind_simple_helper
+ {
+ typedef _Maybe_wrap_member_pointer<typename decay<_Func>::type>
+ __maybe_type;
+ typedef typename __maybe_type::type __func_type;
+ typedef _Bind_simple<__func_type(typename decay<_BoundArgs>::type...)>
+ __type;
+ };
+
+ // Simplified version of std::bind for internal use, without support for
+ // unbound arguments, placeholders or nested bind expressions.
+ template<typename _Callable, typename... _Args>
+ typename _Bind_simple_helper<_Callable, _Args...>::__type
+ __bind_simple(_Callable&& __callable, _Args&&... __args)
+ {
+ typedef _Bind_simple_helper<_Callable, _Args...> __helper_type;
+ typedef typename __helper_type::__maybe_type __maybe_type;
+ typedef typename __helper_type::__type __result_type;
+ return __result_type(
+ __maybe_type::__do_wrap( std::forward<_Callable>(__callable)),
+ std::forward<_Args>(__args)...);
}
/**
@@ -1485,7 +1633,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
class bad_function_call : public std::exception
{
public:
- virtual ~bad_function_call() throw();
+ virtual ~bad_function_call() noexcept;
};
/**
@@ -1561,12 +1709,12 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
template<typename _Member, typename _Class>
inline _Mem_fn<_Member _Class::*>
__callable_functor(_Member _Class::* &__p)
- { return mem_fn(__p); }
+ { return std::mem_fn(__p); }
template<typename _Member, typename _Class>
inline _Mem_fn<_Member _Class::*>
__callable_functor(_Member _Class::* const &__p)
- { return mem_fn(__p); }
+ { return std::mem_fn(__p); }
template<typename _Signature>
class function;
@@ -1724,8 +1872,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
static void
_M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f)
{
- // TBD: Use address_of function instead.
- _Base::_M_init_functor(__functor, &__f.get());
+ _Base::_M_init_functor(__functor, std::__addressof(__f.get()));
}
};
@@ -1822,7 +1969,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
static _Res
_M_invoke(const _Any_data& __functor, _ArgTypes... __args)
{
- return mem_fn(_Base::_M_get_pointer(__functor)->__value)(
+ return std::mem_fn(_Base::_M_get_pointer(__functor)->__value)(
std::forward<_ArgTypes>(__args)...);
}
};
@@ -1862,7 +2009,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
static void
_M_invoke(const _Any_data& __functor, _ArgTypes... __args)
{
- mem_fn(_Base::_M_get_pointer(__functor)->__value)(
+ std::mem_fn(_Base::_M_get_pointer(__functor)->__value)(
std::forward<_ArgTypes>(__args)...);
}
};
@@ -1891,29 +2038,31 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
* @brief Default construct creates an empty function call wrapper.
* @post @c !(bool)*this
*/
- function() : _Function_base() { }
+ function() noexcept
+ : _Function_base() { }
/**
* @brief Creates an empty function call wrapper.
* @post @c !(bool)*this
*/
- function(nullptr_t) : _Function_base() { }
+ function(nullptr_t) noexcept
+ : _Function_base() { }
/**
* @brief %Function copy constructor.
- * @param x A %function object with identical call signature.
- * @post @c (bool)*this == (bool)x
+ * @param __x A %function object with identical call signature.
+ * @post @c bool(*this) == bool(__x)
*
* The newly-created %function contains a copy of the target of @a
- * x (if it has one).
+ * __x (if it has one).
*/
function(const function& __x);
/**
* @brief %Function move constructor.
- * @param x A %function object rvalue with identical call signature.
+ * @param __x A %function object rvalue with identical call signature.
*
- * The newly-created %function contains the target of @a x
+ * The newly-created %function contains the target of @a __x
* (if it has one).
*/
function(function&& __x) : _Function_base()
@@ -1926,17 +2075,17 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/**
* @brief Builds a %function that targets a copy of the incoming
* function object.
- * @param f A %function object that is callable with parameters of
+ * @param __f A %function object that is callable with parameters of
* type @c T1, @c T2, ..., @c TN and returns a value convertible
* to @c Res.
*
- * The newly-created %function object will target a copy of @a
- * f. If @a f is @c reference_wrapper<F>, then this function
+ * The newly-created %function object will target a copy of
+ * @a __f. If @a __f is @c reference_wrapper<F>, then this function
* object will contain a reference to the function object @c
- * f.get(). If @a f is a NULL function pointer or NULL
+ * __f.get(). If @a __f is a NULL function pointer or NULL
* pointer-to-member, the newly-created object will be empty.
*
- * If @a f is a non-NULL function pointer or an object of type @c
+ * If @a __f is a non-NULL function pointer or an object of type @c
* reference_wrapper<F>, this function will not throw.
*/
template<typename _Functor>
@@ -1947,14 +2096,14 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/**
* @brief %Function assignment operator.
- * @param x A %function with identical call signature.
+ * @param __x A %function with identical call signature.
* @post @c (bool)*this == (bool)x
* @returns @c *this
*
- * The target of @a x is copied to @c *this. If @a x has no
+ * The target of @a __x is copied to @c *this. If @a __x has no
* target, then @c *this will be empty.
*
- * If @a x targets a function pointer or a reference to a function
+ * If @a __x targets a function pointer or a reference to a function
* object, then this operation will not throw an %exception.
*/
function&
@@ -1966,13 +2115,13 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/**
* @brief %Function move-assignment operator.
- * @param x A %function rvalue with identical call signature.
+ * @param __x A %function rvalue with identical call signature.
* @returns @c *this
*
- * The target of @a x is moved to @c *this. If @a x has no
+ * The target of @a __x is moved to @c *this. If @a __x has no
* target, then @c *this will be empty.
*
- * If @a x targets a function pointer or a reference to a function
+ * If @a __x targets a function pointer or a reference to a function
* object, then this operation will not throw an %exception.
*/
function&
@@ -2003,18 +2152,18 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/**
* @brief %Function assignment to a new target.
- * @param f A %function object that is callable with parameters of
+ * @param __f A %function object that is callable with parameters of
* type @c T1, @c T2, ..., @c TN and returns a value convertible
* to @c Res.
* @return @c *this
*
* This %function object wrapper will target a copy of @a
- * f. If @a f is @c reference_wrapper<F>, then this function
+ * __f. If @a __f is @c reference_wrapper<F>, then this function
* object will contain a reference to the function object @c
- * f.get(). If @a f is a NULL function pointer or NULL
+ * __f.get(). If @a __f is a NULL function pointer or NULL
* pointer-to-member, @c this object will be empty.
*
- * If @a f is a non-NULL function pointer or an object of type @c
+ * If @a __f is a non-NULL function pointer or an object of type @c
* reference_wrapper<F>, this function will not throw.
*/
template<typename _Functor>
@@ -2028,7 +2177,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/// @overload
template<typename _Functor>
typename enable_if<!is_integral<_Functor>::value, function&>::type
- operator=(reference_wrapper<_Functor> __f)
+ operator=(reference_wrapper<_Functor> __f) noexcept
{
function(__f).swap(*this);
return *this;
@@ -2038,9 +2187,9 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
/**
* @brief Swap the targets of two %function objects.
- * @param f A %function with identical call signature.
+ * @param __x A %function with identical call signature.
*
- * Swap the targets of @c this function object and @a f. This
+ * Swap the targets of @c this function object and @a __f. This
* function will not throw an %exception.
*/
void swap(function& __x)
@@ -2071,7 +2220,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
*
* This function will not throw an %exception.
*/
- explicit operator bool() const
+ explicit operator bool() const noexcept
{ return !_M_empty(); }
// [3.7.2.4] function invocation
@@ -2097,7 +2246,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
*
* This function will not throw an %exception.
*/
- const type_info& target_type() const;
+ const type_info& target_type() const noexcept;
/**
* @brief Access the stored target function object.
@@ -2108,10 +2257,10 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
*
* This function will not throw an %exception.
*/
- template<typename _Functor> _Functor* target();
+ template<typename _Functor> _Functor* target() noexcept;
/// @overload
- template<typename _Functor> const _Functor* target() const;
+ template<typename _Functor> const _Functor* target() const noexcept;
#endif
private:
@@ -2145,9 +2294,9 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
if (_My_handler::_M_not_empty_function(__f))
{
+ _My_handler::_M_init_functor(_M_functor, std::move(__f));
_M_invoker = &_My_handler::_M_invoke;
_M_manager = &_My_handler::_M_manager;
- _My_handler::_M_init_functor(_M_functor, std::move(__f));
}
}
@@ -2165,7 +2314,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
template<typename _Res, typename... _ArgTypes>
const type_info&
function<_Res(_ArgTypes...)>::
- target_type() const
+ target_type() const noexcept
{
if (_M_manager)
{
@@ -2181,7 +2330,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
template<typename _Functor>
_Functor*
function<_Res(_ArgTypes...)>::
- target()
+ target() noexcept
{
if (typeid(_Functor) == target_type() && _M_manager)
{
@@ -2200,7 +2349,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
template<typename _Functor>
const _Functor*
function<_Res(_ArgTypes...)>::
- target() const
+ target() const noexcept
{
if (typeid(_Functor) == target_type() && _M_manager)
{
@@ -2224,13 +2373,13 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
*/
template<typename _Res, typename... _Args>
inline bool
- operator==(const function<_Res(_Args...)>& __f, nullptr_t)
+ operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
{ return !static_cast<bool>(__f); }
/// @overload
template<typename _Res, typename... _Args>
inline bool
- operator==(nullptr_t, const function<_Res(_Args...)>& __f)
+ operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
{ return !static_cast<bool>(__f); }
/**
@@ -2242,13 +2391,13 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
*/
template<typename _Res, typename... _Args>
inline bool
- operator!=(const function<_Res(_Args...)>& __f, nullptr_t)
+ operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
{ return static_cast<bool>(__f); }
/// @overload
template<typename _Res, typename... _Args>
inline bool
- operator!=(nullptr_t, const function<_Res(_Args...)>& __f)
+ operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
{ return static_cast<bool>(__f); }
// [20.7.15.2.7] specialized algorithms
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 970ce76497..98c7b84381 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -1,6 +1,6 @@
// <future> -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -60,10 +60,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Error code for futures
enum class future_errc
{
- broken_promise,
- future_already_retrieved,
+ future_already_retrieved = 1,
promise_already_satisfied,
- no_state
+ no_state,
+ broken_promise
};
/// Specialization.
@@ -72,16 +72,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Points to a statically-allocated object derived from error_category.
const error_category&
- future_category();
+ future_category() noexcept;
/// Overload for make_error_code.
- inline error_code
- make_error_code(future_errc __errc)
+ inline error_code
+ make_error_code(future_errc __errc) noexcept
{ return error_code(static_cast<int>(__errc), future_category()); }
/// Overload for make_error_condition.
- inline error_condition
- make_error_condition(future_errc __errc)
+ inline error_condition
+ make_error_condition(future_errc __errc) noexcept
{ return error_condition(static_cast<int>(__errc), future_category()); }
/**
@@ -97,13 +97,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: logic_error("std::future_error"), _M_code(__ec)
{ }
- virtual ~future_error() throw();
+ virtual ~future_error() noexcept;
- virtual const char*
- what() const throw();
+ virtual const char*
+ what() const noexcept;
- const error_code&
- code() const throw() { return _M_code; }
+ const error_code&
+ code() const noexcept { return _M_code; }
};
// Forward declarations.
@@ -113,25 +113,51 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Res>
class shared_future;
- template<typename _Res>
- class atomic_future;
-
- template<typename _Signature>
+ template<typename _Signature>
class packaged_task;
template<typename _Res>
class promise;
/// Launch code for futures
- enum class launch
- {
- any,
- async,
- sync
+ enum class launch
+ {
+ async = 1,
+ deferred = 2
};
+ constexpr launch operator&(launch __x, launch __y)
+ {
+ return static_cast<launch>(
+ static_cast<int>(__x) & static_cast<int>(__y));
+ }
+
+ constexpr launch operator|(launch __x, launch __y)
+ {
+ return static_cast<launch>(
+ static_cast<int>(__x) | static_cast<int>(__y));
+ }
+
+ constexpr launch operator^(launch __x, launch __y)
+ {
+ return static_cast<launch>(
+ static_cast<int>(__x) ^ static_cast<int>(__y));
+ }
+
+ constexpr launch operator~(launch __x)
+ { return static_cast<launch>(~static_cast<int>(__x)); }
+
+ inline launch& operator&=(launch& __x, launch __y)
+ { return __x = __x & __y; }
+
+ inline launch& operator|=(launch& __x, launch __y)
+ { return __x = __x | __y; }
+
+ inline launch& operator^=(launch& __x, launch __y)
+ { return __x = __x ^ __y; }
+
/// Status code for futures
- enum class future_status
+ enum class future_status
{
ready,
timeout,
@@ -158,7 +184,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
async(_Fn&& __fn, _Args&&... __args);
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
- && defined(_GLIBCXX_ATOMIC_BUILTINS_4)
+ && (ATOMIC_INT_LOCK_FREE > 1)
/// Base class and enclosing scope.
struct __future_base
@@ -197,7 +223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool _M_initialized;
public:
- _Result() : _M_initialized() { }
+ _Result() noexcept : _M_initialized() { }
~_Result()
{
@@ -206,8 +232,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
// Return lvalue, future will add const or rvalue-reference
- _Res&
- _M_value() { return *static_cast<_Res*>(_M_addr()); }
+ _Res&
+ _M_value() noexcept { return *static_cast<_Res*>(_M_addr()); }
void
_M_set(const _Res& __res)
@@ -226,27 +252,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
void _M_destroy() { delete this; }
- void* _M_addr() { return static_cast<void*>(&_M_storage); }
+ void* _M_addr() noexcept { return static_cast<void*>(&_M_storage); }
};
- // TODO: use template alias when available
- /*
- template<typename _Res>
- using _Ptr = unique_ptr<_Res, _Result_base::_Deleter>;
- */
/// A unique_ptr based on the instantiating type.
template<typename _Res>
- struct _Ptr
- {
- typedef unique_ptr<_Res, _Result_base::_Deleter> type;
- };
+ using _Ptr = unique_ptr<_Res, _Result_base::_Deleter>;
/// Result_alloc.
template<typename _Res, typename _Alloc>
- struct _Result_alloc : _Result<_Res>, _Alloc
+ struct _Result_alloc final : _Result<_Res>, _Alloc
{
- typedef typename _Alloc::template rebind<_Result_alloc>::other
- __allocator_type;
+ typedef typename allocator_traits<_Alloc>::template
+ rebind_alloc<_Result_alloc> __allocator_type;
explicit
_Result_alloc(const _Alloc& __a) : _Result<_Res>(), _Alloc(__a)
@@ -255,29 +273,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
void _M_destroy()
{
+ typedef allocator_traits<__allocator_type> __traits;
__allocator_type __a(*this);
- __a.destroy(this);
- __a.deallocate(this, 1);
+ __traits::destroy(__a, this);
+ __traits::deallocate(__a, this, 1);
}
};
template<typename _Res, typename _Allocator>
- static typename _Ptr<_Result_alloc<_Res, _Allocator>>::type
+ static _Ptr<_Result_alloc<_Res, _Allocator>>
_S_allocate_result(const _Allocator& __a)
{
typedef _Result_alloc<_Res, _Allocator> __result_type;
- typename __result_type::__allocator_type __a2(__a);
- __result_type* __p = __a2.allocate(1);
+ typedef allocator_traits<typename __result_type::__allocator_type>
+ __traits;
+ typename __traits::allocator_type __a2(__a);
+ __result_type* __p = __traits::allocate(__a2, 1);
__try
{
- __a2.construct(__p, __a);
+ __traits::construct(__a2, __p, __a);
}
__catch(...)
{
- __a2.deallocate(__p, 1);
+ __traits::deallocate(__a2, __p, 1);
__throw_exception_again;
}
- return typename _Ptr<__result_type>::type(__p);
+ return _Ptr<__result_type>(__p);
}
@@ -285,7 +306,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// associated futures.
class _State_base
{
- typedef _Ptr<_Result_base>::type _Ptr_type;
+ typedef _Ptr<_Result_base> _Ptr_type;
_Ptr_type _M_result;
mutex _M_mutex;
@@ -294,7 +315,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
once_flag _M_once;
public:
- _State_base() : _M_result(), _M_retrieved(ATOMIC_FLAG_INIT) { }
+ _State_base() noexcept : _M_result(), _M_retrieved(ATOMIC_FLAG_INIT) { }
_State_base(const _State_base&) = delete;
_State_base& operator=(const _State_base&) = delete;
virtual ~_State_base();
@@ -304,27 +325,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_M_run_deferred();
unique_lock<mutex> __lock(_M_mutex);
- if (!_M_ready())
- _M_cond.wait(__lock, std::bind<bool>(&_State_base::_M_ready, this));
+ _M_cond.wait(__lock, [&] { return _M_ready(); });
return *_M_result;
}
template<typename _Rep, typename _Period>
- bool
+ future_status
wait_for(const chrono::duration<_Rep, _Period>& __rel)
{
unique_lock<mutex> __lock(_M_mutex);
- auto __bound = std::bind<bool>(&_State_base::_M_ready, this);
- return _M_ready() || _M_cond.wait_for(__lock, __rel, __bound);
+ if (_M_cond.wait_for(__lock, __rel, [&] { return _M_ready(); }))
+ return future_status::ready;
+ return future_status::timeout;
}
template<typename _Clock, typename _Duration>
- bool
+ future_status
wait_until(const chrono::time_point<_Clock, _Duration>& __abs)
{
unique_lock<mutex> __lock(_M_mutex);
- auto __bound = std::bind<bool>(&_State_base::_M_ready, this);
- return _M_ready() || _M_cond.wait_until(__lock, __abs, __bound);
+ if (_M_cond.wait_until(__lock, __abs, [&] { return _M_ready(); }))
+ return future_status::ready;
+ return future_status::timeout;
}
void
@@ -454,37 +476,65 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__set = true;
}
- bool _M_ready() const { return static_cast<bool>(_M_result); }
+ bool _M_ready() const noexcept { return static_cast<bool>(_M_result); }
+ // Misnamed: waits for completion of async function.
virtual void _M_run_deferred() { }
};
- template<typename _Res>
+ template<typename _BoundFn, typename = typename _BoundFn::result_type>
class _Deferred_state;
- template<typename _Res>
- class _Async_state;
+ class _Async_state_common;
+
+ template<typename _BoundFn, typename = typename _BoundFn::result_type>
+ class _Async_state_impl;
template<typename _Signature>
class _Task_state;
- template<typename _StateT, typename _Res = typename _StateT::_Res_type>
+ template<typename _BoundFn>
+ static std::shared_ptr<_State_base>
+ _S_make_deferred_state(_BoundFn&& __fn);
+
+ template<typename _BoundFn>
+ static std::shared_ptr<_State_base>
+ _S_make_async_state(_BoundFn&& __fn);
+
+ template<typename _Res_ptr, typename _Res>
struct _Task_setter;
+
+ template<typename _Res_ptr, typename _BoundFn>
+ class _Task_setter_helper
+ {
+ typedef typename remove_reference<_BoundFn>::type::result_type __res;
+ public:
+ typedef _Task_setter<_Res_ptr, __res> __type;
+ };
+
+ template<typename _Res_ptr, typename _BoundFn>
+ static typename _Task_setter_helper<_Res_ptr, _BoundFn>::__type
+ _S_task_setter(_Res_ptr& __ptr, _BoundFn&& __call)
+ {
+ typedef _Task_setter_helper<_Res_ptr, _BoundFn> __helper_type;
+ typedef typename __helper_type::__type _Setter;
+ return _Setter{ __ptr, std::ref(__call) };
+ }
};
/// Partial specialization for reference types.
template<typename _Res>
struct __future_base::_Result<_Res&> : __future_base::_Result_base
{
- _Result() : _M_value_ptr() { }
+ _Result() noexcept : _M_value_ptr() { }
- void _M_set(_Res& __res) { _M_value_ptr = &__res; }
+ void _M_set(_Res& __res) noexcept { _M_value_ptr = &__res; }
- _Res& _M_get() { return *_M_value_ptr; }
+ _Res& _M_get() noexcept { return *_M_value_ptr; }
private:
_Res* _M_value_ptr;
-
+
void _M_destroy() { delete this; }
};
@@ -513,10 +563,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__basic_future(const __basic_future&) = delete;
__basic_future& operator=(const __basic_future&) = delete;
- bool
- valid() const { return static_cast<bool>(_M_state); }
+ bool
+ valid() const noexcept { return static_cast<bool>(_M_state); }
- void
+ void
wait() const
{
_State_base::_S_check(_M_state);
@@ -524,7 +574,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Rep, typename _Period>
- bool
+ future_status
wait_for(const chrono::duration<_Rep, _Period>& __rel) const
{
_State_base::_S_check(_M_state);
@@ -532,7 +582,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Clock, typename _Duration>
- bool
+ future_status
wait_until(const chrono::time_point<_Clock, _Duration>& __abs) const
{
_State_base::_S_check(_M_state);
@@ -551,7 +601,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return static_cast<__result_type>(__res);
}
- void _M_swap(__basic_future& __that)
+ void _M_swap(__basic_future& __that) noexcept
{
_M_state.swap(__that._M_state);
}
@@ -566,21 +616,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Copy construction from a shared_future
explicit
- __basic_future(const shared_future<_Res>&);
+ __basic_future(const shared_future<_Res>&) noexcept;
// Move construction from a shared_future
explicit
- __basic_future(shared_future<_Res>&&);
+ __basic_future(shared_future<_Res>&&) noexcept;
// Move construction from a future
explicit
- __basic_future(future<_Res>&&);
+ __basic_future(future<_Res>&&) noexcept;
- constexpr __basic_future() : _M_state() { }
+ constexpr __basic_future() noexcept : _M_state() { }
struct _Reset
{
- explicit _Reset(__basic_future& __fut) : _M_fut(__fut) { }
+ explicit _Reset(__basic_future& __fut) noexcept : _M_fut(__fut) { }
~_Reset() { _M_fut._M_state.reset(); }
__basic_future& _M_fut;
};
@@ -604,16 +654,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
future(const __state_type& __state) : _Base_type(__state) { }
public:
- constexpr future() : _Base_type() { }
+ constexpr future() noexcept : _Base_type() { }
/// Move constructor
- future(future&& __uf) : _Base_type(std::move(__uf)) { }
+ future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
// Disable copying
future(const future&) = delete;
future& operator=(const future&) = delete;
- future& operator=(future&& __fut)
+ future& operator=(future&& __fut) noexcept
{
future(std::move(__fut))._M_swap(*this);
return *this;
@@ -626,8 +676,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typename _Base_type::_Reset __reset(*this);
return std::move(this->_M_get_result()._M_value());
}
+
+ shared_future<_Res> share();
};
-
+
/// Partial specialization for future<R&>
template<typename _Res>
class future<_Res&> : public __basic_future<_Res&>
@@ -645,28 +697,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
future(const __state_type& __state) : _Base_type(__state) { }
public:
- constexpr future() : _Base_type() { }
+ constexpr future() noexcept : _Base_type() { }
/// Move constructor
- future(future&& __uf) : _Base_type(std::move(__uf)) { }
+ future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
// Disable copying
future(const future&) = delete;
future& operator=(const future&) = delete;
- future& operator=(future&& __fut)
+ future& operator=(future&& __fut) noexcept
{
future(std::move(__fut))._M_swap(*this);
return *this;
}
/// Retrieving the value
- _Res&
+ _Res&
get()
{
typename _Base_type::_Reset __reset(*this);
return this->_M_get_result()._M_get();
}
+
+ shared_future<_Res&> share();
};
/// Explicit specialization for future<void>
@@ -686,28 +740,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
future(const __state_type& __state) : _Base_type(__state) { }
public:
- constexpr future() : _Base_type() { }
+ constexpr future() noexcept : _Base_type() { }
/// Move constructor
- future(future&& __uf) : _Base_type(std::move(__uf)) { }
+ future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
// Disable copying
future(const future&) = delete;
future& operator=(const future&) = delete;
- future& operator=(future&& __fut)
+ future& operator=(future&& __fut) noexcept
{
future(std::move(__fut))._M_swap(*this);
return *this;
}
/// Retrieving the value
- void
+ void
get()
{
typename _Base_type::_Reset __reset(*this);
this->_M_get_result();
}
+
+ shared_future<void> share();
};
@@ -718,18 +774,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef __basic_future<_Res> _Base_type;
public:
- constexpr shared_future() : _Base_type() { }
+ constexpr shared_future() noexcept : _Base_type() { }
/// Copy constructor
shared_future(const shared_future& __sf) : _Base_type(__sf) { }
/// Construct from a future rvalue
- shared_future(future<_Res>&& __uf)
+ shared_future(future<_Res>&& __uf) noexcept
: _Base_type(std::move(__uf))
{ }
/// Construct from a shared_future rvalue
- shared_future(shared_future&& __sf)
+ shared_future(shared_future&& __sf) noexcept
: _Base_type(std::move(__sf))
{ }
@@ -739,7 +795,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- shared_future& operator=(shared_future&& __sf)
+ shared_future& operator=(shared_future&& __sf) noexcept
{
shared_future(std::move(__sf))._M_swap(*this);
return *this;
@@ -754,7 +810,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __rs;
}
};
-
+
/// Partial specialization for shared_future<R&>
template<typename _Res>
class shared_future<_Res&> : public __basic_future<_Res&>
@@ -762,18 +818,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef __basic_future<_Res&> _Base_type;
public:
- constexpr shared_future() : _Base_type() { }
+ constexpr shared_future() noexcept : _Base_type() { }
/// Copy constructor
shared_future(const shared_future& __sf) : _Base_type(__sf) { }
/// Construct from a future rvalue
- shared_future(future<_Res&>&& __uf)
+ shared_future(future<_Res&>&& __uf) noexcept
: _Base_type(std::move(__uf))
{ }
/// Construct from a shared_future rvalue
- shared_future(shared_future&& __sf)
+ shared_future(shared_future&& __sf) noexcept
: _Base_type(std::move(__sf))
{ }
@@ -783,14 +839,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- shared_future& operator=(shared_future&& __sf)
+ shared_future& operator=(shared_future&& __sf) noexcept
{
shared_future(std::move(__sf))._M_swap(*this);
return *this;
}
/// Retrieving the value
- _Res&
+ _Res&
get() { return this->_M_get_result()._M_get(); }
};
@@ -801,18 +857,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef __basic_future<void> _Base_type;
public:
- constexpr shared_future() : _Base_type() { }
+ constexpr shared_future() noexcept : _Base_type() { }
/// Copy constructor
shared_future(const shared_future& __sf) : _Base_type(__sf) { }
/// Construct from a future rvalue
- shared_future(future<void>&& __uf)
+ shared_future(future<void>&& __uf) noexcept
: _Base_type(std::move(__uf))
{ }
/// Construct from a shared_future rvalue
- shared_future(shared_future&& __sf)
+ shared_future(shared_future&& __sf) noexcept
: _Base_type(std::move(__sf))
{ }
@@ -822,46 +878,59 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- shared_future& operator=(shared_future&& __sf)
+ shared_future& operator=(shared_future&& __sf) noexcept
{
shared_future(std::move(__sf))._M_swap(*this);
return *this;
}
// Retrieving the value
- void
+ void
get() { this->_M_get_result(); }
};
// Now we can define the protected __basic_future constructors.
template<typename _Res>
inline __basic_future<_Res>::
- __basic_future(const shared_future<_Res>& __sf)
+ __basic_future(const shared_future<_Res>& __sf) noexcept
: _M_state(__sf._M_state)
{ }
template<typename _Res>
inline __basic_future<_Res>::
- __basic_future(shared_future<_Res>&& __sf)
+ __basic_future(shared_future<_Res>&& __sf) noexcept
: _M_state(std::move(__sf._M_state))
{ }
template<typename _Res>
inline __basic_future<_Res>::
- __basic_future(future<_Res>&& __uf)
+ __basic_future(future<_Res>&& __uf) noexcept
: _M_state(std::move(__uf._M_state))
{ }
+ template<typename _Res>
+ inline shared_future<_Res>
+ future<_Res>::share()
+ { return shared_future<_Res>(std::move(*this)); }
+
+ template<typename _Res>
+ inline shared_future<_Res&>
+ future<_Res&>::share()
+ { return shared_future<_Res&>(std::move(*this)); }
+
+ inline shared_future<void>
+ future<void>::share()
+ { return shared_future<void>(std::move(*this)); }
/// Primary template for promise
template<typename _Res>
class promise
{
- typedef __future_base::_State_base _State;
- typedef __future_base::_Result<_Res> _Res_type;
- typedef typename __future_base::_Ptr<_Res_type>::type _Ptr_type;
+ typedef __future_base::_State_base _State;
+ typedef __future_base::_Result<_Res> _Res_type;
+ typedef __future_base::_Ptr<_Res_type> _Ptr_type;
template<typename, typename> friend class _State::_Setter;
-
+
shared_ptr<_State> _M_future;
_Ptr_type _M_storage;
@@ -871,7 +940,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_storage(new _Res_type())
{ }
- promise(promise&& __rhs)
+ promise(promise&& __rhs) noexcept
: _M_future(std::move(__rhs._M_future)),
_M_storage(std::move(__rhs._M_storage))
{ }
@@ -882,6 +951,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_storage(__future_base::_S_allocate_result<_Res>(__a))
{ }
+ template<typename _Allocator>
+ promise(allocator_arg_t, const _Allocator&, promise&& __rhs)
+ : _M_future(std::move(__rhs._M_future)),
+ _M_storage(std::move(__rhs._M_storage))
+ { }
+
promise(const promise&) = delete;
~promise()
@@ -892,7 +967,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Assignment
promise&
- operator=(promise&& __rhs)
+ operator=(promise&& __rhs) noexcept
{
promise(std::move(__rhs)).swap(*this);
return *this;
@@ -901,7 +976,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
promise& operator=(const promise&) = delete;
void
- swap(promise& __rhs)
+ swap(promise& __rhs) noexcept
{
_M_future.swap(__rhs._M_future);
_M_storage.swap(__rhs._M_storage);
@@ -937,7 +1012,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Res>
inline void
- swap(promise<_Res>& __x, promise<_Res>& __y)
+ swap(promise<_Res>& __x, promise<_Res>& __y) noexcept
{ __x.swap(__y); }
template<typename _Res, typename _Alloc>
@@ -949,9 +1024,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Res>
class promise<_Res&>
{
- typedef __future_base::_State_base _State;
- typedef __future_base::_Result<_Res&> _Res_type;
- typedef typename __future_base::_Ptr<_Res_type>::type _Ptr_type;
+ typedef __future_base::_State_base _State;
+ typedef __future_base::_Result<_Res&> _Res_type;
+ typedef __future_base::_Ptr<_Res_type> _Ptr_type;
template<typename, typename> friend class _State::_Setter;
shared_ptr<_State> _M_future;
@@ -963,8 +1038,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_storage(new _Res_type())
{ }
- promise(promise&& __rhs)
- : _M_future(std::move(__rhs._M_future)),
+ promise(promise&& __rhs) noexcept
+ : _M_future(std::move(__rhs._M_future)),
_M_storage(std::move(__rhs._M_storage))
{ }
@@ -974,6 +1049,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_storage(__future_base::_S_allocate_result<_Res&>(__a))
{ }
+ template<typename _Allocator>
+ promise(allocator_arg_t, const _Allocator&, promise&& __rhs)
+ : _M_future(std::move(__rhs._M_future)),
+ _M_storage(std::move(__rhs._M_storage))
+ { }
+
promise(const promise&) = delete;
~promise()
@@ -984,7 +1065,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Assignment
promise&
- operator=(promise&& __rhs)
+ operator=(promise&& __rhs) noexcept
{
promise(std::move(__rhs)).swap(*this);
return *this;
@@ -993,7 +1074,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
promise& operator=(const promise&) = delete;
void
- swap(promise& __rhs)
+ swap(promise& __rhs) noexcept
{
_M_future.swap(__rhs._M_future);
_M_storage.swap(__rhs._M_storage);
@@ -1024,9 +1105,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<>
class promise<void>
{
- typedef __future_base::_State_base _State;
- typedef __future_base::_Result<void> _Res_type;
- typedef typename __future_base::_Ptr<_Res_type>::type _Ptr_type;
+ typedef __future_base::_State_base _State;
+ typedef __future_base::_Result<void> _Res_type;
+ typedef __future_base::_Ptr<_Res_type> _Ptr_type;
template<typename, typename> friend class _State::_Setter;
shared_ptr<_State> _M_future;
@@ -1038,7 +1119,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_storage(new _Res_type())
{ }
- promise(promise&& __rhs)
+ promise(promise&& __rhs) noexcept
: _M_future(std::move(__rhs._M_future)),
_M_storage(std::move(__rhs._M_storage))
{ }
@@ -1049,6 +1130,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_storage(__future_base::_S_allocate_result<void>(__a))
{ }
+ template<typename _Allocator>
+ promise(allocator_arg_t, const _Allocator&, promise&& __rhs)
+ : _M_future(std::move(__rhs._M_future)),
+ _M_storage(std::move(__rhs._M_storage))
+ { }
+
promise(const promise&) = delete;
~promise()
@@ -1059,7 +1146,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Assignment
promise&
- operator=(promise&& __rhs)
+ operator=(promise&& __rhs) noexcept
{
promise(std::move(__rhs)).swap(*this);
return *this;
@@ -1068,7 +1155,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
promise& operator=(const promise&) = delete;
void
- swap(promise& __rhs)
+ swap(promise& __rhs) noexcept
{
_M_future.swap(__rhs._M_future);
_M_storage.swap(__rhs._M_storage);
@@ -1117,29 +1204,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
- template<typename _StateT, typename _Res>
+ template<typename _Ptr_type, typename _Res>
struct __future_base::_Task_setter
{
- typename _StateT::_Ptr_type operator()()
+ _Ptr_type operator()()
{
__try
{
- _M_state->_M_result->_M_set(_M_fn());
+ _M_result->_M_set(_M_fn());
}
__catch(...)
{
- _M_state->_M_result->_M_error = current_exception();
+ _M_result->_M_error = current_exception();
}
- return std::move(_M_state->_M_result);
+ return std::move(_M_result);
}
- _StateT* _M_state;
+ _Ptr_type& _M_result;
std::function<_Res()> _M_fn;
};
- template<typename _StateT>
- struct __future_base::_Task_setter<_StateT, void>
+ template<typename _Ptr_type>
+ struct __future_base::_Task_setter<_Ptr_type, void>
{
- typename _StateT::_Ptr_type operator()()
+ _Ptr_type operator()()
{
__try
{
@@ -1147,16 +1234,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
__catch(...)
{
- _M_state->_M_result->_M_error = current_exception();
+ _M_result->_M_error = current_exception();
}
- return std::move(_M_state->_M_result);
+ return std::move(_M_result);
}
- _StateT* _M_state;
+ _Ptr_type& _M_result;
std::function<void()> _M_fn;
};
template<typename _Res, typename... _Args>
- struct __future_base::_Task_state<_Res(_Args...)>
+ struct __future_base::_Task_state<_Res(_Args...)> final
: __future_base::_State_base
{
typedef _Res _Res_type;
@@ -1175,14 +1262,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_run(_Args... __args)
{
// bound arguments decay so wrap lvalue references
- auto __bound = std::bind<_Res>(std::ref(_M_task),
- _S_maybe_wrap_ref(std::forward<_Args>(__args))...);
- _Task_setter<_Task_state> __setter{ this, std::move(__bound) };
+ auto __boundfn = std::__bind_simple(std::ref(_M_task),
+ _S_maybe_wrap_ref(std::forward<_Args>(__args))...);
+ auto __setter = _S_task_setter(_M_result, std::move(__boundfn));
_M_set_result(std::move(__setter));
}
- template<typename, typename> friend class _Task_setter;
- typedef typename __future_base::_Ptr<_Result<_Res>>::type _Ptr_type;
+ typedef __future_base::_Ptr<_Result<_Res>> _Ptr_type;
_Ptr_type _M_result;
std::function<_Res(_Args...)> _M_task;
@@ -1198,6 +1284,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return std::forward<_Tp>(__t); }
};
+ template<typename _Task, typename _Fn, bool
+ = is_same<_Task, typename decay<_Fn>::type>::value>
+ struct __constrain_pkgdtask
+ { typedef void __type; };
+
+ template<typename _Task, typename _Fn>
+ struct __constrain_pkgdtask<_Task, _Fn, true>
+ { };
+
/// packaged_task
template<typename _Res, typename... _ArgTypes>
class packaged_task<_Res(_ArgTypes...)>
@@ -1206,32 +1301,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
shared_ptr<_State_type> _M_state;
public:
- typedef _Res result_type;
-
// Construction and destruction
- packaged_task() { }
+ packaged_task() noexcept { }
- template<typename _Fn>
+ template<typename _Allocator>
explicit
- packaged_task(const _Fn& __fn)
- : _M_state(std::make_shared<_State_type>(__fn))
+ packaged_task(allocator_arg_t, const _Allocator& __a) noexcept
{ }
- template<typename _Fn>
+ template<typename _Fn, typename = typename
+ __constrain_pkgdtask<packaged_task, _Fn>::__type>
explicit
packaged_task(_Fn&& __fn)
- : _M_state(std::make_shared<_State_type>(std::move(__fn)))
+ : _M_state(std::make_shared<_State_type>(std::forward<_Fn>(__fn)))
{ }
- explicit
- packaged_task(_Res(*__fn)(_ArgTypes...))
- : _M_state(std::make_shared<_State_type>(__fn))
- { }
-
- template<typename _Fn, typename _Allocator>
+ template<typename _Fn, typename _Allocator, typename = typename
+ __constrain_pkgdtask<packaged_task, _Fn>::__type>
explicit
- packaged_task(allocator_arg_t __tag, const _Allocator& __a, _Fn __fn)
- : _M_state(std::allocate_shared<_State_type>(__a, std::move(__fn)))
+ packaged_task(allocator_arg_t, const _Allocator& __a, _Fn&& __fn)
+ : _M_state(std::allocate_shared<_State_type>(__a,
+ std::forward<_Fn>(__fn)))
{ }
~packaged_task()
@@ -1241,25 +1331,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
// No copy
- packaged_task(packaged_task&) = delete;
- packaged_task& operator=(packaged_task&) = delete;
+ packaged_task(const packaged_task&) = delete;
+ packaged_task& operator=(const packaged_task&) = delete;
+
+ template<typename _Allocator>
+ explicit
+ packaged_task(allocator_arg_t, const _Allocator&,
+ const packaged_task&) = delete;
// Move support
- packaged_task(packaged_task&& __other)
+ packaged_task(packaged_task&& __other) noexcept
{ this->swap(__other); }
- packaged_task& operator=(packaged_task&& __other)
+ template<typename _Allocator>
+ explicit
+ packaged_task(allocator_arg_t, const _Allocator&,
+ packaged_task&& __other) noexcept
+ { this->swap(__other); }
+
+ packaged_task& operator=(packaged_task&& __other) noexcept
{
packaged_task(std::move(__other)).swap(*this);
return *this;
}
void
- swap(packaged_task& __other)
+ swap(packaged_task& __other) noexcept
{ _M_state.swap(__other._M_state); }
bool
- valid() const
+ valid() const noexcept
{ return static_cast<bool>(_M_state); }
// Result retrieval
@@ -1287,7 +1388,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Res, typename... _ArgTypes>
inline void
swap(packaged_task<_Res(_ArgTypes...)>& __x,
- packaged_task<_Res(_ArgTypes...)>& __y)
+ packaged_task<_Res(_ArgTypes...)>& __y) noexcept
{ __x.swap(__y); }
template<typename _Res, typename _Alloc>
@@ -1295,77 +1396,104 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public true_type { };
- template<typename _Res>
- class __future_base::_Deferred_state : public __future_base::_State_base
+ template<typename _BoundFn, typename _Res>
+ class __future_base::_Deferred_state final
+ : public __future_base::_State_base
{
public:
- typedef _Res _Res_type;
-
explicit
- _Deferred_state(std::function<_Res()>&& __fn)
+ _Deferred_state(_BoundFn&& __fn)
: _M_result(new _Result<_Res>()), _M_fn(std::move(__fn))
{ }
private:
- template<typename, typename> friend class _Task_setter;
- typedef typename __future_base::_Ptr<_Result<_Res>>::type _Ptr_type;
+ typedef __future_base::_Ptr<_Result<_Res>> _Ptr_type;
_Ptr_type _M_result;
- std::function<_Res()> _M_fn;
+ _BoundFn _M_fn;
virtual void
_M_run_deferred()
{
- _Task_setter<_Deferred_state> __setter{ this, _M_fn };
// safe to call multiple times so ignore failure
- _M_set_result(std::move(__setter), true);
+ _M_set_result(_S_task_setter(_M_result, _M_fn), true);
}
};
- template<typename _Res>
- class __future_base::_Async_state : public __future_base::_State_base
- {
- public:
- typedef _Res _Res_type;
+ class __future_base::_Async_state_common : public __future_base::_State_base
+ {
+ protected:
+#ifdef _GLIBCXX_ASYNC_ABI_COMPAT
+ ~_Async_state_common();
+#else
+ ~_Async_state_common() = default;
+#endif
- explicit
- _Async_state(std::function<_Res()>&& __fn)
- : _M_result(new _Result<_Res>()), _M_fn(std::move(__fn)),
- _M_thread(mem_fn(&_Async_state::_M_do_run), this)
- { }
+ // Allow non-timed waiting functions to block until the thread completes,
+ // as if joined.
+ virtual void _M_run_deferred() { _M_join(); }
- ~_Async_state() { _M_thread.join(); }
+ void _M_join() { std::call_once(_M_once, &thread::join, ref(_M_thread)); }
- private:
- void _M_do_run()
+ thread _M_thread;
+ once_flag _M_once;
+ };
+
+ template<typename _BoundFn, typename _Res>
+ class __future_base::_Async_state_impl final
+ : public __future_base::_Async_state_common
+ {
+ public:
+ explicit
+ _Async_state_impl(_BoundFn&& __fn)
+ : _M_result(new _Result<_Res>()), _M_fn(std::move(__fn))
{
- _Task_setter<_Async_state> __setter{ this, std::move(_M_fn) };
- _M_set_result(std::move(__setter));
+ _M_thread = std::thread{ [this] {
+ _M_set_result(_S_task_setter(_M_result, _M_fn));
+ } };
}
- template<typename, typename> friend class _Task_setter;
- typedef typename __future_base::_Ptr<_Result<_Res>>::type _Ptr_type;
+ ~_Async_state_impl() { _M_join(); }
+
+ private:
+ typedef __future_base::_Ptr<_Result<_Res>> _Ptr_type;
_Ptr_type _M_result;
- std::function<_Res()> _M_fn;
- thread _M_thread;
+ _BoundFn _M_fn;
};
- /// async
+ template<typename _BoundFn>
+ inline std::shared_ptr<__future_base::_State_base>
+ __future_base::_S_make_deferred_state(_BoundFn&& __fn)
+ {
+ typedef typename remove_reference<_BoundFn>::type __fn_type;
+ typedef _Deferred_state<__fn_type> __state_type;
+ return std::make_shared<__state_type>(std::move(__fn));
+ }
+
+ template<typename _BoundFn>
+ inline std::shared_ptr<__future_base::_State_base>
+ __future_base::_S_make_async_state(_BoundFn&& __fn)
+ {
+ typedef typename remove_reference<_BoundFn>::type __fn_type;
+ typedef _Async_state_impl<__fn_type> __state_type;
+ return std::make_shared<__state_type>(std::move(__fn));
+ }
+
+
+ /// async
template<typename _Fn, typename... _Args>
future<typename result_of<_Fn(_Args...)>::type>
async(launch __policy, _Fn&& __fn, _Args&&... __args)
{
typedef typename result_of<_Fn(_Args...)>::type result_type;
std::shared_ptr<__future_base::_State_base> __state;
- if (__policy == launch::async)
+ if ((__policy & (launch::async|launch::deferred)) == launch::async)
{
- typedef typename __future_base::_Async_state<result_type> _State;
- __state = std::make_shared<_State>(std::bind<result_type>(
+ __state = __future_base::_S_make_async_state(std::__bind_simple(
std::forward<_Fn>(__fn), std::forward<_Args>(__args)...));
}
else
{
- typedef typename __future_base::_Deferred_state<result_type> _State;
- __state = std::make_shared<_State>(std::bind<result_type>(
+ __state = __future_base::_S_make_deferred_state(std::__bind_simple(
std::forward<_Fn>(__fn), std::forward<_Args>(__args)...));
}
return future<result_type>(__state);
@@ -1377,12 +1505,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__async_sfinae_helper<typename decay<_Fn>::type, _Fn, _Args...>::type
async(_Fn&& __fn, _Args&&... __args)
{
- return async(launch::any, std::forward<_Fn>(__fn),
+ return async(launch::async|launch::deferred, std::forward<_Fn>(__fn),
std::forward<_Args>(__args)...);
}
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
- // && _GLIBCXX_ATOMIC_BUILTINS_4
+ // && ATOMIC_INT_LOCK_FREE
// @} group futures
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip
index 91f90e5cb6..840d756620 100644
--- a/libstdc++-v3/include/std/iomanip
+++ b/libstdc++-v3/include/std/iomanip
@@ -1,7 +1,7 @@
// Standard stream manipulators -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -56,10 +56,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulator for @c setf.
- * @param mask A format flags mask.
+ * @param __mask A format flags mask.
*
* Sent to a stream object, this manipulator resets the specified flags,
- * via @e stream.setf(0,mask).
+ * via @e stream.setf(0,__mask).
*/
inline _Resetiosflags
resetiosflags(ios_base::fmtflags __mask)
@@ -86,10 +86,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulator for @c setf.
- * @param mask A format flags mask.
+ * @param __mask A format flags mask.
*
* Sent to a stream object, this manipulator sets the format flags
- * to @a mask.
+ * to @a __mask.
*/
inline _Setiosflags
setiosflags(ios_base::fmtflags __mask)
@@ -116,11 +116,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulator for @c setf.
- * @param base A numeric base.
+ * @param __base A numeric base.
*
* Sent to a stream object, this manipulator changes the
* @c ios_base::basefield flags to @c oct, @c dec, or @c hex when @a base
- * is 8, 10, or 16, accordingly, and to 0 if @a base is any other value.
+ * is 8, 10, or 16, accordingly, and to 0 if @a __base is any other value.
*/
inline _Setbase
setbase(int __base)
@@ -154,9 +154,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulator for @c fill.
- * @param c The new fill character.
+ * @param __c The new fill character.
*
- * Sent to a stream object, this manipulator calls @c fill(c) for that
+ * Sent to a stream object, this manipulator calls @c fill(__c) for that
* object.
*/
template<typename _CharT>
@@ -185,9 +185,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulator for @c precision.
- * @param n The new precision.
+ * @param __n The new precision.
*
- * Sent to a stream object, this manipulator calls @c precision(n) for
+ * Sent to a stream object, this manipulator calls @c precision(__n) for
* that object.
*/
inline _Setprecision
@@ -215,9 +215,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulator for @c width.
- * @param n The new width.
+ * @param __n The new width.
*
- * Sent to a stream object, this manipulator calls @c width(n) for
+ * Sent to a stream object, this manipulator calls @c width(__n) for
* that object.
*/
inline _Setw
@@ -247,11 +247,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Extended manipulator for extracting money.
- * @param mon Either long double or a specialization of @c basic_string.
- * @param intl A bool indicating whether international format
- * is to be used.
+ * @param __mon Either long double or a specialization of @c basic_string.
+ * @param __intl A bool indicating whether international format
+ * is to be used.
*
- * Sent to a stream object, this manipulator extracts @a mon.
+ * Sent to a stream object, this manipulator extracts @a __mon.
*/
template<typename _MoneyT>
inline _Get_money<_MoneyT>
@@ -262,18 +262,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f)
{
- typedef istreambuf_iterator<_CharT, _Traits> _Iter;
- typedef money_get<_CharT, _Iter> _MoneyGet;
-
- ios_base::iostate __err = ios_base::goodbit;
- const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc());
-
- __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl,
- __is, __err, __f._M_mon);
-
- if (ios_base::goodbit != __err)
- __is.setstate(__err);
-
+ typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false);
+ if (__cerb)
+ {
+ ios_base::iostate __err = ios_base::goodbit;
+ __try
+ {
+ typedef istreambuf_iterator<_CharT, _Traits> _Iter;
+ typedef money_get<_CharT, _Iter> _MoneyGet;
+
+ const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc());
+ __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl,
+ __is, __err, __f._M_mon);
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __is._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { __is._M_setstate(ios_base::badbit); }
+ if (__err)
+ __is.setstate(__err);
+ }
return __is;
}
@@ -283,11 +294,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Extended manipulator for inserting money.
- * @param mon Either long double or a specialization of @c basic_string.
- * @param intl A bool indicating whether international format
- * is to be used.
+ * @param __mon Either long double or a specialization of @c basic_string.
+ * @param __intl A bool indicating whether international format
+ * is to be used.
*
- * Sent to a stream object, this manipulator inserts @a mon.
+ * Sent to a stream object, this manipulator inserts @a __mon.
*/
template<typename _MoneyT>
inline _Put_money<_MoneyT>
@@ -298,16 +309,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f)
{
- typedef ostreambuf_iterator<_CharT, _Traits> _Iter;
- typedef money_put<_CharT, _Iter> _MoneyPut;
-
- const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc());
- const _Iter __end = __mp.put(_Iter(__os.rdbuf()), __f._M_intl,
- __os, __os.fill(), __f._M_mon);
-
- if (__end.failed())
- __os.setstate(ios_base::badbit);
-
+ typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os);
+ if (__cerb)
+ {
+ ios_base::iostate __err = ios_base::goodbit;
+ __try
+ {
+ typedef ostreambuf_iterator<_CharT, _Traits> _Iter;
+ typedef money_put<_CharT, _Iter> _MoneyPut;
+
+ const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc());
+ if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os,
+ __os.fill(), __f._M_mon).failed())
+ __err |= ios_base::badbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __os._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { __os._M_setstate(ios_base::badbit); }
+ if (__err)
+ __os.setstate(__err);
+ }
return __os;
}
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index fb393921fd..57b21130fc 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -44,9 +44,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- // [27.6.1.1] Template class basic_istream
/**
- * @brief Controlling input.
+ * @brief Template class basic_istream.
* @ingroup io
*
* This is the base class for all input streams. It provides text
@@ -58,19 +57,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
// Types (inherited from basic_ios (27.4.4)):
- typedef _CharT char_type;
+ typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
- typedef _Traits traits_type;
-
+ typedef _Traits traits_type;
+
// Non-standard Types:
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_ios<_CharT, _Traits> __ios_type;
typedef basic_istream<_CharT, _Traits> __istream_type;
- typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
+ typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
__num_get_type;
- typedef ctype<_CharT> __ctype_type;
+ typedef ctype<_CharT> __ctype_type;
protected:
// Data Members:
@@ -81,7 +80,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
streamsize _M_gcount;
public:
- // [27.6.1.1.1] constructor/destructor
/**
* @brief Base constructor.
*
@@ -99,23 +97,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This does very little apart from providing a virtual base dtor.
*/
- virtual
- ~basic_istream()
+ virtual
+ ~basic_istream()
{ _M_gcount = streamsize(0); }
- // [27.6.1.1.2] prefix/suffix
+ /// Safe prefix/suffix operations.
class sentry;
friend class sentry;
- // [27.6.1.2] formatted input
- // [27.6.1.2.3] basic_istream::operator>>
//@{
/**
* @brief Interface for manipulators.
*
* Manipulators such as @c std::ws and @c std::dec use these
- * functions in constructs like
- * <code>std::cin >> std::ws</code>.
+ * functions in constructs like
+ * <code>std::cin >> std::ws</code>.
* For more information, see the iomanip header.
*/
__istream_type&
@@ -124,7 +120,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__istream_type&
operator>>(__ios_type& (*__pf)(__ios_type&))
- {
+ {
__pf(*this);
return *this;
}
@@ -136,10 +132,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
//@}
-
- // [27.6.1.2.2] arithmetic extractors
+
+ //@{
/**
- * @name Arithmetic Extractors
+ * @name Extractors
*
* All the @c operator>> functions (aka <em>formatted input
* functions</em>) have some common behavior. Each starts by
@@ -156,79 +152,99 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* ios_base::failure to be thrown. The original exception will then
* be rethrown.
*/
+
//@{
/**
- * @brief Basic arithmetic extractors
- * @param A variable of builtin type.
+ * @brief Integer arithmetic extractors
+ * @param __n A variable of builtin integral type.
* @return @c *this if successful
*
* These functions use the stream's current locale (specifically, the
* @c num_get facet) to parse the input data.
*/
- __istream_type&
+ __istream_type&
operator>>(bool& __n)
{ return _M_extract(__n); }
-
- __istream_type&
+
+ __istream_type&
operator>>(short& __n);
-
- __istream_type&
+
+ __istream_type&
operator>>(unsigned short& __n)
{ return _M_extract(__n); }
- __istream_type&
+ __istream_type&
operator>>(int& __n);
-
- __istream_type&
+
+ __istream_type&
operator>>(unsigned int& __n)
{ return _M_extract(__n); }
- __istream_type&
+ __istream_type&
operator>>(long& __n)
{ return _M_extract(__n); }
-
- __istream_type&
+
+ __istream_type&
operator>>(unsigned long& __n)
{ return _M_extract(__n); }
#ifdef _GLIBCXX_USE_LONG_LONG
- __istream_type&
+ __istream_type&
operator>>(long long& __n)
{ return _M_extract(__n); }
- __istream_type&
+ __istream_type&
operator>>(unsigned long long& __n)
{ return _M_extract(__n); }
#endif
+ //@}
- __istream_type&
+ //@{
+ /**
+ * @brief Floating point arithmetic extractors
+ * @param __f A variable of builtin floating point type.
+ * @return @c *this if successful
+ *
+ * These functions use the stream's current locale (specifically, the
+ * @c num_get facet) to parse the input data.
+ */
+ __istream_type&
operator>>(float& __f)
{ return _M_extract(__f); }
- __istream_type&
+ __istream_type&
operator>>(double& __f)
{ return _M_extract(__f); }
- __istream_type&
+ __istream_type&
operator>>(long double& __f)
{ return _M_extract(__f); }
+ //@}
- __istream_type&
+ /**
+ * @brief Basic arithmetic extractors
+ * @param __p A variable of pointer type.
+ * @return @c *this if successful
+ *
+ * These functions use the stream's current locale (specifically, the
+ * @c num_get facet) to parse the input data.
+ */
+ __istream_type&
operator>>(void*& __p)
{ return _M_extract(__p); }
/**
* @brief Extracting into another streambuf.
- * @param sb A pointer to a streambuf
+ * @param __sb A pointer to a streambuf
*
* This function behaves like one of the basic arithmetic extractors,
* in that it also constructs a sentry object and has the same error
* handling behavior.
*
- * If @a sb is NULL, the stream will set failbit in its error state.
+ * If @p __sb is NULL, the stream will set failbit in its error state.
*
* Characters are extracted from this stream and inserted into the
- * @a sb streambuf until one of the following occurs:
+ * @p __sb streambuf until one of the following occurs:
*
* - the input stream reaches end-of-file,
* - insertion into the output buffer fails (in this case, the
@@ -237,20 +253,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* If the function inserts no characters, failbit is set.
*/
- __istream_type&
+ __istream_type&
operator>>(__streambuf_type* __sb);
//@}
-
+
// [27.6.1.3] unformatted input
/**
* @brief Character counting
* @return The number of characters extracted by the previous
* unformatted input function dispatched for this stream.
*/
- streamsize
- gcount() const
+ streamsize
+ gcount() const
{ return _M_gcount; }
-
+
+ //@{
/**
* @name Unformatted Input Functions
*
@@ -271,7 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* ios_base::failure to be thrown. The original exception will then
* be rethrown.
*/
- //@{
+
/**
* @brief Simple extraction.
* @return A character, or eof().
@@ -279,36 +296,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Tries to extract a character. If none are available, sets failbit
* and returns traits::eof().
*/
- int_type
+ int_type
get();
/**
* @brief Simple extraction.
- * @param c The character in which to store data.
+ * @param __c The character in which to store data.
* @return *this
*
- * Tries to extract a character and store it in @a c. If none are
+ * Tries to extract a character and store it in @a __c. If none are
* available, sets failbit and returns traits::eof().
*
* @note This function is not overloaded on signed char and
* unsigned char.
*/
- __istream_type&
+ __istream_type&
get(char_type& __c);
/**
* @brief Simple multiple-character extraction.
- * @param s Pointer to an array.
- * @param n Maximum number of characters to store in @a s.
- * @param delim A "stop" character.
+ * @param __s Pointer to an array.
+ * @param __n Maximum number of characters to store in @a __s.
+ * @param __delim A "stop" character.
* @return *this
*
- * Characters are extracted and stored into @a s until one of the
+ * Characters are extracted and stored into @a __s until one of the
* following happens:
*
- * - @c n-1 characters are stored
+ * - @c __n-1 characters are stored
* - the input sequence reaches EOF
- * - the next character equals @a delim, in which case the character
+ * - the next character equals @a __delim, in which case the character
* is not extracted
*
* If no characters are stored, failbit is set in the stream's error
@@ -320,34 +337,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @note This function is not overloaded on signed char and
* unsigned char.
*/
- __istream_type&
+ __istream_type&
get(char_type* __s, streamsize __n, char_type __delim);
/**
* @brief Simple multiple-character extraction.
- * @param s Pointer to an array.
- * @param n Maximum number of characters to store in @a s.
+ * @param __s Pointer to an array.
+ * @param __n Maximum number of characters to store in @a s.
* @return *this
*
- * Returns @c get(s,n,widen(&apos;\\n&apos;)).
+ * Returns @c get(__s,__n,widen(&apos;\\n&apos;)).
*/
- __istream_type&
+ __istream_type&
get(char_type* __s, streamsize __n)
{ return this->get(__s, __n, this->widen('\n')); }
/**
* @brief Extraction into another streambuf.
- * @param sb A streambuf in which to store data.
- * @param delim A "stop" character.
+ * @param __sb A streambuf in which to store data.
+ * @param __delim A "stop" character.
* @return *this
*
- * Characters are extracted and inserted into @a sb until one of the
+ * Characters are extracted and inserted into @a __sb until one of the
* following happens:
*
* - the input sequence reaches EOF
* - insertion into the output buffer fails (in this case, the
* character that would have been inserted is not extracted)
- * - the next character equals @a delim (in this case, the character
+ * - the next character equals @a __delim (in this case, the character
* is not extracted)
* - an exception occurs (and in this case is caught)
*
@@ -359,10 +376,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Extraction into another streambuf.
- * @param sb A streambuf in which to store data.
+ * @param __sb A streambuf in which to store data.
* @return *this
*
- * Returns @c get(sb,widen(&apos;\\n&apos;)).
+ * Returns @c get(__sb,widen(&apos;\\n&apos;)).
*/
__istream_type&
get(__streambuf_type& __sb)
@@ -370,21 +387,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief String extraction.
- * @param s A character array in which to store the data.
- * @param n Maximum number of characters to extract.
- * @param delim A "stop" character.
+ * @param __s A character array in which to store the data.
+ * @param __n Maximum number of characters to extract.
+ * @param __delim A "stop" character.
* @return *this
*
- * Extracts and stores characters into @a s until one of the
+ * Extracts and stores characters into @a __s until one of the
* following happens. Note that these criteria are required to be
* tested in the order listed here, to allow an input line to exactly
- * fill the @a s array without setting failbit.
+ * fill the @a __s array without setting failbit.
*
* -# the input sequence reaches end-of-file, in which case eofbit
* is set in the stream error state
- * -# the next character equals @c delim, in which case the character
+ * -# the next character equals @c __delim, in which case the character
* is extracted (and therefore counted in @c gcount()) but not stored
- * -# @c n-1 characters are stored, in which case failbit is set
+ * -# @c __n-1 characters are stored, in which case failbit is set
* in the stream error state
*
* If no characters are extracted, failbit is set. (An empty line of
@@ -393,50 +410,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* In any case, a null character is stored in the next location in
* the array.
*/
- __istream_type&
+ __istream_type&
getline(char_type* __s, streamsize __n, char_type __delim);
/**
* @brief String extraction.
- * @param s A character array in which to store the data.
- * @param n Maximum number of characters to extract.
+ * @param __s A character array in which to store the data.
+ * @param __n Maximum number of characters to extract.
* @return *this
*
- * Returns @c getline(s,n,widen(&apos;\\n&apos;)).
+ * Returns @c getline(__s,__n,widen(&apos;\\n&apos;)).
*/
- __istream_type&
+ __istream_type&
getline(char_type* __s, streamsize __n)
{ return this->getline(__s, __n, this->widen('\n')); }
/**
* @brief Discarding characters
- * @param n Number of characters to discard.
- * @param delim A "stop" character.
+ * @param __n Number of characters to discard.
+ * @param __delim A "stop" character.
* @return *this
*
* Extracts characters and throws them away until one of the
* following happens:
- * - if @a n @c != @c std::numeric_limits<int>::max(), @a n
+ * - if @a __n @c != @c std::numeric_limits<int>::max(), @a __n
* characters are extracted
* - the input sequence reaches end-of-file
- * - the next character equals @a delim (in this case, the character
+ * - the next character equals @a __delim (in this case, the character
* is extracted); note that this condition will never occur if
- * @a delim equals @c traits::eof().
+ * @a __delim equals @c traits::eof().
*
* NB: Provide three overloads, instead of the single function
* (with defaults) mandated by the Standard: this leads to a
* better performing implementation, while still conforming to
* the Standard.
*/
- __istream_type&
- ignore();
+ __istream_type&
+ ignore(streamsize __n, int_type __delim);
- __istream_type&
+ __istream_type&
ignore(streamsize __n);
- __istream_type&
- ignore(streamsize __n, int_type __delim);
-
+ __istream_type&
+ ignore();
+
/**
* @brief Looking ahead in the stream
* @return The next character, or eof().
@@ -445,34 +462,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* returns @c traits::eof(). Otherwise reads but does not extract
* the next input character.
*/
- int_type
+ int_type
peek();
-
+
/**
* @brief Extraction without delimiters.
- * @param s A character array.
- * @param n Maximum number of characters to store.
+ * @param __s A character array.
+ * @param __n Maximum number of characters to store.
* @return *this
*
* If the stream state is @c good(), extracts characters and stores
- * them into @a s until one of the following happens:
- * - @a n characters are stored
+ * them into @a __s until one of the following happens:
+ * - @a __n characters are stored
* - the input sequence reaches end-of-file, in which case the error
* state is set to @c failbit|eofbit.
*
* @note This function is not overloaded on signed char and
* unsigned char.
*/
- __istream_type&
+ __istream_type&
read(char_type* __s, streamsize __n);
/**
* @brief Extraction until the buffer is exhausted, but no more.
- * @param s A character array.
- * @param n Maximum number of characters to store.
+ * @param __s A character array.
+ * @param __n Maximum number of characters to store.
* @return The number of characters extracted.
*
- * Extracts characters and stores them into @a s depending on the
+ * Extracts characters and stores them into @a __s depending on the
* number of characters remaining in the streambuf's buffer,
* @c rdbuf()->in_avail(), called @c A here:
* - if @c A @c == @c -1, sets eofbit and extracts no characters
@@ -482,12 +499,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* The goal is to empty the current buffer, and to not request any
* more from the external input sequence controlled by the streambuf.
*/
- streamsize
+ streamsize
readsome(char_type* __s, streamsize __n);
-
+
/**
* @brief Unextracting a single character.
- * @param c The character to push back into the input stream.
+ * @param __c The character to push back into the input stream.
* @return *this
*
* If @c rdbuf() is not null, calls @c rdbuf()->sputbackc(c).
@@ -499,7 +516,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* are extracted, the next call to @c gcount() will return 0,
* as required by DR 60.
*/
- __istream_type&
+ __istream_type&
putback(char_type __c);
/**
@@ -515,7 +532,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* are extracted, the next call to @c gcount() will return 0,
* as required by DR 60.
*/
- __istream_type&
+ __istream_type&
unget();
/**
@@ -533,7 +550,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* extracted, if any, and therefore does not affect the next
* call to @c gcount().
*/
- int
+ int
sync();
/**
@@ -553,10 +570,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Changing the current read position.
- * @param pos A file position object.
+ * @param __pos A file position object.
* @return *this
*
- * If @c fail() is not true, calls @c rdbuf()->pubseekpos(pos). If
+ * If @c fail() is not true, calls @c rdbuf()->pubseekpos(__pos). If
* that function fails, sets failbit.
*
* @note This function first clears eofbit. It does not count the
@@ -568,18 +585,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Changing the current read position.
- * @param off A file offset object.
- * @param dir The direction in which to seek.
+ * @param __off A file offset object.
+ * @param __dir The direction in which to seek.
* @return *this
*
- * If @c fail() is not true, calls @c rdbuf()->pubseekoff(off,dir).
+ * If @c fail() is not true, calls @c rdbuf()->pubseekoff(__off,__dir).
* If that function fails, sets failbit.
*
* @note This function first clears eofbit. It does not count the
* number of characters extracted, if any, and therefore does
* not affect the next call to @c gcount().
*/
- __istream_type&
+ __istream_type&
seekg(off_type, ios_base::seekdir);
//@}
@@ -589,29 +606,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ this->init(0); }
template<typename _ValueT>
- __istream_type&
- _M_extract(_ValueT& __v);
+ __istream_type&
+ _M_extract(_ValueT& __v);
};
- // Explicit specialization declarations, defined in src/istream.cc.
- template<>
- basic_istream<char>&
+ /// Explicit specialization declarations, defined in src/istream.cc.
+ template<>
+ basic_istream<char>&
basic_istream<char>::
getline(char_type* __s, streamsize __n, char_type __delim);
-
+
template<>
basic_istream<char>&
basic_istream<char>::
ignore(streamsize __n);
-
+
template<>
basic_istream<char>&
basic_istream<char>::
ignore(streamsize __n, int_type __delim);
#ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- basic_istream<wchar_t>&
+ template<>
+ basic_istream<wchar_t>&
basic_istream<wchar_t>::
getline(char_type* __s, streamsize __n, char_type __delim);
@@ -619,7 +636,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
basic_istream<wchar_t>&
basic_istream<wchar_t>::
ignore(streamsize __n);
-
+
template<>
basic_istream<wchar_t>&
basic_istream<wchar_t>::
@@ -650,10 +667,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief The constructor performs all the work.
- * @param is The input stream to guard.
- * @param noskipws Whether to consume whitespace or not.
+ * @param __is The input stream to guard.
+ * @param __noskipws Whether to consume whitespace or not.
*
- * If the stream state is good (@a is.good() is true), then the
+ * If the stream state is good (@a __is.good() is true), then the
* following actions are performed, otherwise the sentry state
* is false (<em>not okay</em>) and failbit is set in the
* stream state.
@@ -662,7 +679,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* -# if the stream is tied to an output stream, @c is.tie()->flush()
* is called to synchronize the output sequence
- * -# if @a noskipws is false, and @c ios_base::skipws is set in
+ * -# if @a __noskipws is false, and @c ios_base::skipws is set in
* @c is.flags(), the sentry extracts and discards whitespace
* characters from the stream. The currently imbued locale is
* used to determine whether each character is whitespace.
@@ -687,18 +704,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return _M_ok; }
};
- // [27.6.1.2.3] character extraction templates
//@{
/**
* @brief Character extractors
- * @param in An input stream.
- * @param c A character reference.
+ * @param __in An input stream.
+ * @param __c A character reference.
* @return in
*
* Behaves like one of the formatted arithmetic extractors described in
* std::basic_istream. After constructing a sentry object with good
* status, this function extracts a character (if one is available) and
- * stores it in @a c. Otherwise, sets failbit in the input stream.
+ * stores it in @a __c. Otherwise, sets failbit in the input stream.
*/
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
@@ -718,14 +734,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
//@{
/**
* @brief Character string extractors
- * @param in An input stream.
- * @param s A pointer to a character array.
- * @return in
+ * @param __in An input stream.
+ * @param __s A pointer to a character array.
+ * @return __in
*
* Behaves like one of the formatted arithmetic extractors described in
* std::basic_istream. After constructing a sentry object with good
* status, this function extracts up to @c n characters and stores them
- * into the array starting at @a s. @c n is defined as:
+ * into the array starting at @a __s. @c n is defined as:
*
* - if @c width() is greater than zero, @c n is width() otherwise
* - @c n is <em>the number of elements of the largest array of *
@@ -762,9 +778,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return (__in >> reinterpret_cast<char*>(__s)); }
//@}
- // 27.6.1.5 Template class basic_iostream
/**
- * @brief Merging istream and ostream capabilities.
+ * @brief Template class basic_iostream
* @ingroup io
*
* This class multiply inherits from the input and output stream classes
@@ -772,18 +787,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _CharT, typename _Traits>
class basic_iostream
- : public basic_istream<_CharT, _Traits>,
+ : public basic_istream<_CharT, _Traits>,
public basic_ostream<_CharT, _Traits>
{
public:
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 271. basic_iostream missing typedefs
// Types (inherited):
- typedef _CharT char_type;
+ typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
- typedef _Traits traits_type;
+ typedef _Traits traits_type;
// Non-standard Types:
typedef basic_istream<_CharT, _Traits> __istream_type;
@@ -802,7 +817,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Destructor does nothing.
*/
- virtual
+ virtual
~basic_iostream() { }
protected:
@@ -810,7 +825,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: __istream_type(), __ostream_type() { }
};
- // [27.6.1.4] standard basic_istream manipulators
/**
* @brief Quick and easy way to eat whitespace
*
@@ -832,15 +846,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* std::basic_istream::sentry inside your definition of operator>>.
*/
template<typename _CharT, typename _Traits>
- basic_istream<_CharT, _Traits>&
+ basic_istream<_CharT, _Traits>&
ws(basic_istream<_CharT, _Traits>& __is);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
// [27.7.1.6] Rvalue stream extraction
/**
* @brief Generic extractor for rvalue stream
- * @param is An input stream.
- * @param x A reference to the extraction target.
+ * @param __is An input stream.
+ * @param __x A reference to the extraction target.
* @return is
*
* This is just a forwarding function to allow extraction from
diff --git a/libstdc++-v3/include/std/limits b/libstdc++-v3/include/std/limits
index 9a311973c4..ea37d9d20c 100644
--- a/libstdc++-v3/include/std/limits
+++ b/libstdc++-v3/include/std/limits
@@ -1,7 +1,7 @@
// The template and inlines for the numeric_limits classes. -*- C++ -*-
// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-// 2008, 2009, 2010 Free Software Foundation, Inc.
+// 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -129,7 +129,7 @@
#define __glibcxx_signed(T) ((T)(-1) < 0)
#define __glibcxx_min(T) \
- (__glibcxx_signed (T) ? (T)1 << __glibcxx_digits (T) : (T)0)
+ (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0)
#define __glibcxx_max(T) \
(__glibcxx_signed (T) ? \
@@ -306,47 +306,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/** The minimum finite value, or for floating types with
denormalization, the minimum positive normalized value. */
static _GLIBCXX_CONSTEXPR _Tp
- min() throw() { return static_cast<_Tp>(0); }
+ min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
/** The maximum finite value. */
static _GLIBCXX_CONSTEXPR _Tp
- max() throw() { return static_cast<_Tp>(0); }
+ max() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/** A finite value x such that there is no other finite value y
* where y < x. */
static constexpr _Tp
- lowest() throw() { return static_cast<_Tp>(0); }
+ lowest() noexcept { return static_cast<_Tp>(0); }
#endif
/** The @e machine @e epsilon: the difference between 1 and the least
value greater than 1 that is representable. */
static _GLIBCXX_CONSTEXPR _Tp
- epsilon() throw() { return static_cast<_Tp>(0); }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
/** The maximum rounding error measurement (see LIA-1). */
static _GLIBCXX_CONSTEXPR _Tp
- round_error() throw() { return static_cast<_Tp>(0); }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
/** The representation of positive infinity, if @c has_infinity. */
static _GLIBCXX_CONSTEXPR _Tp
- infinity() throw() { return static_cast<_Tp>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
/** The representation of a quiet <em>Not a Number</em>,
if @c has_quiet_NaN. */
static _GLIBCXX_CONSTEXPR _Tp
- quiet_NaN() throw() { return static_cast<_Tp>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
/** The representation of a signaling <em>Not a Number</em>, if
@c has_signaling_NaN. */
static _GLIBCXX_CONSTEXPR _Tp
- signaling_NaN() throw() { return static_cast<_Tp>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
/** The minimum positive denormalized value. For types where
@c has_denorm is false, this is the minimum positive normalized
value. */
static _GLIBCXX_CONSTEXPR _Tp
- denorm_min() throw() { return static_cast<_Tp>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); }
};
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -373,14 +373,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR bool
- min() throw() { return false; }
+ min() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_CONSTEXPR bool
- max() throw() { return true; }
+ max() _GLIBCXX_USE_NOEXCEPT { return true; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr bool
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = 1;
static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
@@ -393,10 +393,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR bool
- epsilon() throw() { return false; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_CONSTEXPR bool
- round_error() throw() { return false; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -411,16 +411,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR bool
- infinity() throw() { return false; }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_CONSTEXPR bool
- quiet_NaN() throw() { return false; }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_CONSTEXPR bool
- signaling_NaN() throw() { return false; }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_CONSTEXPR bool
- denorm_min() throw() { return false; }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -442,14 +442,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR char
- min() throw() { return __glibcxx_min(char); }
+ min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
static _GLIBCXX_CONSTEXPR char
- max() throw() { return __glibcxx_max(char); }
+ max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr char
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
@@ -463,10 +463,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR char
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR char
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -481,16 +481,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR
- char infinity() throw() { return char(); }
+ char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
static _GLIBCXX_CONSTEXPR char
- quiet_NaN() throw() { return char(); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
static _GLIBCXX_CONSTEXPR char
- signaling_NaN() throw() { return char(); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
static _GLIBCXX_CONSTEXPR char
- denorm_min() throw() { return static_cast<char>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -509,14 +509,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR signed char
- min() throw() { return -__SCHAR_MAX__ - 1; }
+ min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
static _GLIBCXX_CONSTEXPR signed char
- max() throw() { return __SCHAR_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr signed char
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
@@ -531,10 +531,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR signed char
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR signed char
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -549,16 +549,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR signed char
- infinity() throw() { return static_cast<signed char>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
static _GLIBCXX_CONSTEXPR signed char
- quiet_NaN() throw() { return static_cast<signed char>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
static _GLIBCXX_CONSTEXPR signed char
- signaling_NaN() throw() { return static_cast<signed char>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<signed char>(0); }
static _GLIBCXX_CONSTEXPR signed char
- denorm_min() throw() { return static_cast<signed char>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<signed char>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -577,14 +579,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR unsigned char
- min() throw() { return 0; }
+ min() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned char
- max() throw() { return __SCHAR_MAX__ * 2U + 1; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr unsigned char
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits
@@ -600,10 +602,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR unsigned char
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned char
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -618,16 +620,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR unsigned char
- infinity() throw() { return static_cast<unsigned char>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned char>(0); }
static _GLIBCXX_CONSTEXPR unsigned char
- quiet_NaN() throw() { return static_cast<unsigned char>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned char>(0); }
static _GLIBCXX_CONSTEXPR unsigned char
- signaling_NaN() throw() { return static_cast<unsigned char>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned char>(0); }
static _GLIBCXX_CONSTEXPR unsigned char
- denorm_min() throw() { return static_cast<unsigned char>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned char>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -646,14 +652,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR wchar_t
- min() throw() { return __glibcxx_min (wchar_t); }
+ min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
static _GLIBCXX_CONSTEXPR wchar_t
- max() throw() { return __glibcxx_max (wchar_t); }
+ max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- static constexpr wchar_t
- lowest() throw() { return min(); }
+ static constexpr wchar_t
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
@@ -668,10 +674,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR wchar_t
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR wchar_t
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -686,16 +692,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR wchar_t
- infinity() throw() { return wchar_t(); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
static _GLIBCXX_CONSTEXPR wchar_t
- quiet_NaN() throw() { return wchar_t(); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
static _GLIBCXX_CONSTEXPR wchar_t
- signaling_NaN() throw() { return wchar_t(); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
static _GLIBCXX_CONSTEXPR wchar_t
- denorm_min() throw() { return wchar_t(); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -712,139 +718,122 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<>
struct numeric_limits<char16_t>
{
- static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+ static constexpr bool is_specialized = true;
- static _GLIBCXX_CONSTEXPR char16_t
- min() throw() { return __glibcxx_min (char16_t); }
+ static constexpr char16_t
+ min() noexcept { return __glibcxx_min (char16_t); }
- static _GLIBCXX_CONSTEXPR char16_t
- max() throw() { return __glibcxx_max (char16_t); }
+ static constexpr char16_t
+ max() noexcept { return __glibcxx_max (char16_t); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr char16_t
- lowest() throw() { return min(); }
-#endif
+ lowest() noexcept { return min(); }
- static _GLIBCXX_USE_CONSTEXPR int digits
- = __glibcxx_digits (char16_t);
- static _GLIBCXX_USE_CONSTEXPR int digits10
- = __glibcxx_digits10 (char16_t);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ static constexpr int digits = __glibcxx_digits (char16_t);
+ static constexpr int digits10 = __glibcxx_digits10 (char16_t);
static constexpr int max_digits10 = 0;
-#endif
- static _GLIBCXX_USE_CONSTEXPR bool is_signed
- = __glibcxx_signed (char16_t);
- static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
- static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
- static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+ static constexpr bool is_signed = __glibcxx_signed (char16_t);
+ static constexpr bool is_integer = true;
+ static constexpr bool is_exact = true;
+ static constexpr int radix = 2;
- static _GLIBCXX_CONSTEXPR char16_t
- epsilon() throw() { return 0; }
+ static constexpr char16_t
+ epsilon() noexcept { return 0; }
- static _GLIBCXX_CONSTEXPR char16_t
- round_error() throw() { return 0; }
+ static constexpr char16_t
+ round_error() noexcept { return 0; }
- static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
- static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
- static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
- static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+ static constexpr int min_exponent = 0;
+ static constexpr int min_exponent10 = 0;
+ static constexpr int max_exponent = 0;
+ static constexpr int max_exponent10 = 0;
- static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
- static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
- static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
- static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
- = denorm_absent;
- static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+ static constexpr bool has_infinity = false;
+ static constexpr bool has_quiet_NaN = false;
+ static constexpr bool has_signaling_NaN = false;
+ static constexpr float_denorm_style has_denorm = denorm_absent;
+ static constexpr bool has_denorm_loss = false;
- static _GLIBCXX_CONSTEXPR char16_t
- infinity() throw() { return char16_t(); }
+ static constexpr char16_t
+ infinity() noexcept { return char16_t(); }
- static _GLIBCXX_CONSTEXPR char16_t
- quiet_NaN() throw() { return char16_t(); }
+ static constexpr char16_t
+ quiet_NaN() noexcept { return char16_t(); }
- static _GLIBCXX_CONSTEXPR char16_t
- signaling_NaN() throw() { return char16_t(); }
+ static constexpr char16_t
+ signaling_NaN() noexcept { return char16_t(); }
- static _GLIBCXX_CONSTEXPR char16_t
- denorm_min() throw() { return char16_t(); }
+ static constexpr char16_t
+ denorm_min() noexcept { return char16_t(); }
- static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
- static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
- static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+ static constexpr bool is_iec559 = false;
+ static constexpr bool is_bounded = true;
+ static constexpr bool is_modulo = true;
- static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
- static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
- static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
- = round_toward_zero;
+ static constexpr bool traps = __glibcxx_integral_traps;
+ static constexpr bool tinyness_before = false;
+ static constexpr float_round_style round_style = round_toward_zero;
};
/// numeric_limits<char32_t> specialization.
template<>
struct numeric_limits<char32_t>
{
- static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+ static constexpr bool is_specialized = true;
- static _GLIBCXX_CONSTEXPR char32_t
- min() throw() { return __glibcxx_min (char32_t); }
+ static constexpr char32_t
+ min() noexcept { return __glibcxx_min (char32_t); }
- static _GLIBCXX_CONSTEXPR char32_t
- max() throw() { return __glibcxx_max (char32_t); }
+ static constexpr char32_t
+ max() noexcept { return __glibcxx_max (char32_t); }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr char32_t
- lowest() throw() { return min(); }
-#endif
+ lowest() noexcept { return min(); }
- static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char32_t);
- static _GLIBCXX_USE_CONSTEXPR int digits10
- = __glibcxx_digits10 (char32_t);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ static constexpr int digits = __glibcxx_digits (char32_t);
+ static constexpr int digits10 = __glibcxx_digits10 (char32_t);
static constexpr int max_digits10 = 0;
-#endif
- static _GLIBCXX_USE_CONSTEXPR bool is_signed
- = __glibcxx_signed (char32_t);
- static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
- static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
- static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+ static constexpr bool is_signed = __glibcxx_signed (char32_t);
+ static constexpr bool is_integer = true;
+ static constexpr bool is_exact = true;
+ static constexpr int radix = 2;
- static _GLIBCXX_CONSTEXPR char32_t
- epsilon() throw() { return 0; }
+ static constexpr char32_t
+ epsilon() noexcept { return 0; }
- static _GLIBCXX_CONSTEXPR char32_t
- round_error() throw() { return 0; }
+ static constexpr char32_t
+ round_error() noexcept { return 0; }
- static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
- static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
- static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
- static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+ static constexpr int min_exponent = 0;
+ static constexpr int min_exponent10 = 0;
+ static constexpr int max_exponent = 0;
+ static constexpr int max_exponent10 = 0;
- static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
- static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
- static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
- static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
- = denorm_absent;
- static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+ static constexpr bool has_infinity = false;
+ static constexpr bool has_quiet_NaN = false;
+ static constexpr bool has_signaling_NaN = false;
+ static constexpr float_denorm_style has_denorm = denorm_absent;
+ static constexpr bool has_denorm_loss = false;
- static _GLIBCXX_CONSTEXPR char32_t
- infinity() throw() { return char32_t(); }
+ static constexpr char32_t
+ infinity() noexcept { return char32_t(); }
- static _GLIBCXX_CONSTEXPR char32_t
- quiet_NaN() throw() { return char32_t(); }
+ static constexpr char32_t
+ quiet_NaN() noexcept { return char32_t(); }
- static _GLIBCXX_CONSTEXPR char32_t
- signaling_NaN() throw() { return char32_t(); }
+ static constexpr char32_t
+ signaling_NaN() noexcept { return char32_t(); }
- static _GLIBCXX_CONSTEXPR char32_t
- denorm_min() throw() { return char32_t(); }
+ static constexpr char32_t
+ denorm_min() noexcept { return char32_t(); }
- static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
- static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
- static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+ static constexpr bool is_iec559 = false;
+ static constexpr bool is_bounded = true;
+ static constexpr bool is_modulo = true;
- static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
- static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
- static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
- = round_toward_zero;
+ static constexpr bool traps = __glibcxx_integral_traps;
+ static constexpr bool tinyness_before = false;
+ static constexpr float_round_style round_style = round_toward_zero;
};
#endif
@@ -855,14 +844,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR short
- min() throw() { return -__SHRT_MAX__ - 1; }
+ min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
static _GLIBCXX_CONSTEXPR short
- max() throw() { return __SHRT_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr short
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
@@ -876,10 +865,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR short
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR short
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -894,16 +883,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR short
- infinity() throw() { return short(); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
static _GLIBCXX_CONSTEXPR short
- quiet_NaN() throw() { return short(); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
static _GLIBCXX_CONSTEXPR short
- signaling_NaN() throw() { return short(); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
static _GLIBCXX_CONSTEXPR short
- denorm_min() throw() { return short(); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -922,14 +911,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR unsigned short
- min() throw() { return 0; }
+ min() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned short
- max() throw() { return __SHRT_MAX__ * 2U + 1; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr unsigned short
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits
@@ -945,10 +934,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR unsigned short
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned short
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -963,16 +952,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR unsigned short
- infinity() throw() { return static_cast<unsigned short>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned short>(0); }
static _GLIBCXX_CONSTEXPR unsigned short
- quiet_NaN() throw() { return static_cast<unsigned short>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned short>(0); }
static _GLIBCXX_CONSTEXPR unsigned short
- signaling_NaN() throw() { return static_cast<unsigned short>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned short>(0); }
static _GLIBCXX_CONSTEXPR unsigned short
- denorm_min() throw() { return static_cast<unsigned short>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned short>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -991,14 +984,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR int
- min() throw() { return -__INT_MAX__ - 1; }
+ min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
static _GLIBCXX_CONSTEXPR int
- max() throw() { return __INT_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr int
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
@@ -1012,10 +1005,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR int
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR int
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -1030,16 +1023,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR int
- infinity() throw() { return static_cast<int>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
static _GLIBCXX_CONSTEXPR int
- quiet_NaN() throw() { return static_cast<int>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
static _GLIBCXX_CONSTEXPR int
- signaling_NaN() throw() { return static_cast<int>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
static _GLIBCXX_CONSTEXPR int
- denorm_min() throw() { return static_cast<int>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -1058,14 +1051,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR unsigned int
- min() throw() { return 0; }
+ min() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned int
- max() throw() { return __INT_MAX__ * 2U + 1; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr unsigned int
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits
@@ -1081,10 +1074,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR unsigned int
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned int
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -1099,16 +1092,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR unsigned int
- infinity() throw() { return static_cast<unsigned int>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
static _GLIBCXX_CONSTEXPR unsigned int
- quiet_NaN() throw() { return static_cast<unsigned int>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned int>(0); }
static _GLIBCXX_CONSTEXPR unsigned int
- signaling_NaN() throw() { return static_cast<unsigned int>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned int>(0); }
static _GLIBCXX_CONSTEXPR unsigned int
- denorm_min() throw() { return static_cast<unsigned int>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned int>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -1127,14 +1123,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR long
- min() throw() { return -__LONG_MAX__ - 1; }
+ min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
static _GLIBCXX_CONSTEXPR long
- max() throw() { return __LONG_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr long
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
@@ -1148,10 +1144,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR long
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR long
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -1166,16 +1162,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR long
- infinity() throw() { return static_cast<long>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
static _GLIBCXX_CONSTEXPR long
- quiet_NaN() throw() { return static_cast<long>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
static _GLIBCXX_CONSTEXPR long
- signaling_NaN() throw() { return static_cast<long>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
static _GLIBCXX_CONSTEXPR long
- denorm_min() throw() { return static_cast<long>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -1194,14 +1190,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR unsigned long
- min() throw() { return 0; }
+ min() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned long
- max() throw() { return __LONG_MAX__ * 2UL + 1; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr unsigned long
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits
@@ -1217,10 +1213,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR unsigned long
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned long
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -1235,16 +1231,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR unsigned long
- infinity() throw() { return static_cast<unsigned long>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long>(0); }
static _GLIBCXX_CONSTEXPR unsigned long
- quiet_NaN() throw() { return static_cast<unsigned long>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long>(0); }
static _GLIBCXX_CONSTEXPR unsigned long
- signaling_NaN() throw() { return static_cast<unsigned long>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long>(0); }
static _GLIBCXX_CONSTEXPR unsigned long
- denorm_min() throw() { return static_cast<unsigned long>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -1263,14 +1263,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR long long
- min() throw() { return -__LONG_LONG_MAX__ - 1; }
+ min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
static _GLIBCXX_CONSTEXPR long long
- max() throw() { return __LONG_LONG_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr long long
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits
@@ -1286,10 +1286,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR long long
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR long long
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -1304,16 +1304,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR long long
- infinity() throw() { return static_cast<long long>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
static _GLIBCXX_CONSTEXPR long long
- quiet_NaN() throw() { return static_cast<long long>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
static _GLIBCXX_CONSTEXPR long long
- signaling_NaN() throw() { return static_cast<long long>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<long long>(0); }
static _GLIBCXX_CONSTEXPR long long
- denorm_min() throw() { return static_cast<long long>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -1332,14 +1333,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR unsigned long long
- min() throw() { return 0; }
+ min() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned long long
- max() throw() { return __LONG_LONG_MAX__ * 2ULL + 1; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr unsigned long long
- lowest() throw() { return min(); }
+ lowest() noexcept { return min(); }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits
@@ -1355,10 +1356,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = 2;
static _GLIBCXX_CONSTEXPR unsigned long long
- epsilon() throw() { return 0; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_CONSTEXPR unsigned long long
- round_error() throw() { return 0; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
@@ -1373,16 +1374,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
static _GLIBCXX_CONSTEXPR unsigned long long
- infinity() throw() { return static_cast<unsigned long long>(0); }
+ infinity() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long long>(0); }
static _GLIBCXX_CONSTEXPR unsigned long long
- quiet_NaN() throw() { return static_cast<unsigned long long>(0); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long long>(0); }
static _GLIBCXX_CONSTEXPR unsigned long long
- signaling_NaN() throw() { return static_cast<unsigned long long>(0); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long long>(0); }
static _GLIBCXX_CONSTEXPR unsigned long long
- denorm_min() throw() { return static_cast<unsigned long long>(0); }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned long long>(0); }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
@@ -1394,6 +1399,155 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
= round_toward_zero;
};
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ /// numeric_limits<__int128> specialization.
+ template<>
+ struct numeric_limits<__int128>
+ {
+ static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+
+ static _GLIBCXX_CONSTEXPR __int128
+ min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
+
+ static _GLIBCXX_CONSTEXPR __int128
+ max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ static constexpr __int128
+ lowest() noexcept { return min(); }
+#endif
+
+ static _GLIBCXX_USE_CONSTEXPR int digits
+ = __glibcxx_digits (__int128);
+ static _GLIBCXX_USE_CONSTEXPR int digits10
+ = __glibcxx_digits10 (__int128);
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ static constexpr int max_digits10 = 0;
+#endif
+ static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+ static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+
+ static _GLIBCXX_CONSTEXPR __int128
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+
+ static _GLIBCXX_CONSTEXPR __int128
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+
+ static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+ static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+ static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+ static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+
+ static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+ static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+ static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+ static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+ = denorm_absent;
+ static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+
+ static _GLIBCXX_CONSTEXPR __int128
+ infinity() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<__int128>(0); }
+
+ static _GLIBCXX_CONSTEXPR __int128
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<__int128>(0); }
+
+ static _GLIBCXX_CONSTEXPR __int128
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<__int128>(0); }
+
+ static _GLIBCXX_CONSTEXPR __int128
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<__int128>(0); }
+
+ static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+ static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+
+ static _GLIBCXX_USE_CONSTEXPR bool traps
+ = __glibcxx_integral_traps;
+ static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+ static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+ = round_toward_zero;
+ };
+
+ /// numeric_limits<unsigned __int128> specialization.
+ template<>
+ struct numeric_limits<unsigned __int128>
+ {
+ static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ min() _GLIBCXX_USE_NOEXCEPT { return 0; }
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ static constexpr unsigned __int128
+ lowest() noexcept { return min(); }
+#endif
+
+ static _GLIBCXX_USE_CONSTEXPR int digits
+ = __glibcxx_digits (unsigned __int128);
+ static _GLIBCXX_USE_CONSTEXPR int digits10
+ = __glibcxx_digits10 (unsigned __int128);
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ static constexpr int max_digits10 = 0;
+#endif
+ static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+ static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+ static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+
+ static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+ static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+ static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+ static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+
+ static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+ static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+ static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+ static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+ = denorm_absent;
+ static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ infinity() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned __int128>(0); }
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned __int128>(0); }
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned __int128>(0); }
+
+ static _GLIBCXX_CONSTEXPR unsigned __int128
+ denorm_min() _GLIBCXX_USE_NOEXCEPT
+ { return static_cast<unsigned __int128>(0); }
+
+ static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+ static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+
+ static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+ static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+ static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+ = round_toward_zero;
+ };
+#endif
+
/// numeric_limits<float> specialization.
template<>
struct numeric_limits<float>
@@ -1401,14 +1555,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR float
- min() throw() { return __FLT_MIN__; }
+ min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
static _GLIBCXX_CONSTEXPR float
- max() throw() { return __FLT_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr float
- lowest() throw() { return -__FLT_MAX__; }
+ lowest() noexcept { return -__FLT_MAX__; }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
@@ -1423,10 +1577,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
static _GLIBCXX_CONSTEXPR float
- epsilon() throw() { return __FLT_EPSILON__; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
static _GLIBCXX_CONSTEXPR float
- round_error() throw() { return 0.5F; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
@@ -1442,16 +1596,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
= __glibcxx_float_has_denorm_loss;
static _GLIBCXX_CONSTEXPR float
- infinity() throw() { return __builtin_huge_valf (); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
static _GLIBCXX_CONSTEXPR float
- quiet_NaN() throw() { return __builtin_nanf (""); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
static _GLIBCXX_CONSTEXPR float
- signaling_NaN() throw() { return __builtin_nansf (""); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
static _GLIBCXX_CONSTEXPR float
- denorm_min() throw() { return __FLT_DENORM_MIN__; }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559
= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
@@ -1476,14 +1630,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR double
- min() throw() { return __DBL_MIN__; }
+ min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
static _GLIBCXX_CONSTEXPR double
- max() throw() { return __DBL_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr double
- lowest() throw() { return -__DBL_MAX__; }
+ lowest() noexcept { return -__DBL_MAX__; }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
@@ -1498,10 +1652,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
static _GLIBCXX_CONSTEXPR double
- epsilon() throw() { return __DBL_EPSILON__; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
static _GLIBCXX_CONSTEXPR double
- round_error() throw() { return 0.5; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
@@ -1517,16 +1671,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
= __glibcxx_double_has_denorm_loss;
static _GLIBCXX_CONSTEXPR double
- infinity() throw() { return __builtin_huge_val(); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
static _GLIBCXX_CONSTEXPR double
- quiet_NaN() throw() { return __builtin_nan (""); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
static _GLIBCXX_CONSTEXPR double
- signaling_NaN() throw() { return __builtin_nans (""); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
static _GLIBCXX_CONSTEXPR double
- denorm_min() throw() { return __DBL_DENORM_MIN__; }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559
= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
@@ -1551,14 +1705,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
static _GLIBCXX_CONSTEXPR long double
- min() throw() { return __LDBL_MIN__; }
+ min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
static _GLIBCXX_CONSTEXPR long double
- max() throw() { return __LDBL_MAX__; }
+ max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
static constexpr long double
- lowest() throw() { return -__LDBL_MAX__; }
+ lowest() noexcept { return -__LDBL_MAX__; }
#endif
static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
@@ -1573,10 +1727,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
static _GLIBCXX_CONSTEXPR long double
- epsilon() throw() { return __LDBL_EPSILON__; }
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
static _GLIBCXX_CONSTEXPR long double
- round_error() throw() { return 0.5L; }
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
@@ -1592,16 +1746,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
= __glibcxx_long_double_has_denorm_loss;
static _GLIBCXX_CONSTEXPR long double
- infinity() throw() { return __builtin_huge_vall (); }
+ infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
static _GLIBCXX_CONSTEXPR long double
- quiet_NaN() throw() { return __builtin_nanl (""); }
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
static _GLIBCXX_CONSTEXPR long double
- signaling_NaN() throw() { return __builtin_nansl (""); }
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
static _GLIBCXX_CONSTEXPR long double
- denorm_min() throw() { return __LDBL_DENORM_MIN__; }
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
static _GLIBCXX_USE_CONSTEXPR bool is_iec559
= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory
index 791ffe048a..e846eba489 100644
--- a/libstdc++-v3/include/std/memory
+++ b/libstdc++-v3/include/std/memory
@@ -76,6 +76,7 @@
# include <ext/concurrence.h>
# include <bits/functexcept.h>
# include <bits/stl_function.h> // std::less
+# include <bits/uses_allocator.h>
# include <type_traits>
# include <functional>
# include <debug/debug.h>
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex
index 36f894efeb..fc9691971c 100644
--- a/libstdc++-v3/include/std/mutex
+++ b/libstdc++-v3/include/std/mutex
@@ -1,6 +1,6 @@
// <mutex> -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,12 +46,101 @@
#include <bits/gthr.h>
#include <bits/move.h> // for std::swap
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+#ifdef _GLIBCXX_HAS_GTHREADS
+ // Common base class for std::mutex and std::timed_mutex
+ class __mutex_base
+ {
+ protected:
+ typedef __gthread_mutex_t __native_type;
+
+#ifdef __GTHREAD_MUTEX_INIT
+ __native_type _M_mutex = __GTHREAD_MUTEX_INIT;
+
+ constexpr __mutex_base() noexcept = default;
+#else
+ __native_type _M_mutex;
+
+ __mutex_base() noexcept
+ {
+ // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
+ __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
+ }
+
+ ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
+#endif
+
+ __mutex_base(const __mutex_base&) = delete;
+ __mutex_base& operator=(const __mutex_base&) = delete;
+ };
+
+ // Common base class for std::recursive_mutex and std::timed_recursive_mutex
+ class __recursive_mutex_base
+ {
+ protected:
+ typedef __gthread_recursive_mutex_t __native_type;
+
+ __recursive_mutex_base(const __recursive_mutex_base&) = delete;
+ __recursive_mutex_base& operator=(const __recursive_mutex_base&) = delete;
+
+#ifdef __GTHREAD_RECURSIVE_MUTEX_INIT
+ __native_type _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT;
+
+ __recursive_mutex_base() = default;
+#else
+ __native_type _M_mutex;
+
+ __recursive_mutex_base()
+ {
+ // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
+ __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
+ }
+
+ ~__recursive_mutex_base()
+ { _S_destroy(&_M_mutex); }
+
+ private:
+ // FIXME: gthreads doesn't define __gthread_recursive_mutex_destroy
+ // so we need to obtain a __gthread_mutex_t to destroy
+
+ // matches when there's only one mutex type
+ template<typename _Rm>
+ static
+ typename enable_if<is_same<_Rm, __gthread_mutex_t>::value, void>::type
+ _S_destroy(_Rm* __mx)
+ { __gthread_mutex_destroy(__mx); }
+
+ // matches a recursive mutex with a member 'actual'
+ template<typename _Rm>
+ static typename enable_if<(bool)sizeof(&_Rm::actual), void>::type
+ _S_destroy(_Rm* __mx)
+ { __gthread_mutex_destroy(&__mx->actual); }
+
+ // matches a gthr-win32.h recursive mutex
+ template<typename _Rm>
+ static typename enable_if<(bool)sizeof(&_Rm::sema), void>::type
+ _S_destroy(_Rm* __mx)
+ {
+ __gthread_mutex_t __tmp;
+ _S_destroy_win32(&__tmp, __mx);
+ }
+
+ template<typename _Mx, typename _Rm>
+ static void
+ _S_destroy_win32(_Mx* __mx, _Rm const* __rmx)
+ {
+ __mx->counter = __rmx->counter;
+ __mx->sema = __rmx->sema;
+ __gthread_mutex_destroy(__mx);
+ }
+#endif
+ };
+
/**
* @defgroup mutexes Mutexes
* @ingroup concurrency
@@ -61,25 +150,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
/// mutex
- class mutex
+ class mutex : private __mutex_base
{
- typedef __gthread_mutex_t __native_type;
- __native_type _M_mutex;
-
public:
typedef __native_type* native_handle_type;
#ifdef __GTHREAD_MUTEX_INIT
- constexpr mutex() : _M_mutex(__GTHREAD_MUTEX_INIT) { }
-#else
- mutex()
- {
- // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
- __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
- }
-
- ~mutex() { __gthread_mutex_destroy(&_M_mutex); }
+ constexpr
#endif
+ mutex() noexcept = default;
+ ~mutex() = default;
mutex(const mutex&) = delete;
mutex& operator=(const mutex&) = delete;
@@ -95,7 +175,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
bool
- try_lock()
+ try_lock() noexcept
{
// XXX EINVAL, EAGAIN, EBUSY
return !__gthread_mutex_trylock(&_M_mutex);
@@ -113,66 +193,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return &_M_mutex; }
};
-#ifndef __GTHREAD_RECURSIVE_MUTEX_INIT
- // FIXME: gthreads doesn't define __gthread_recursive_mutex_destroy
- // so we need to obtain a __gthread_mutex_t to destroy
- class __destroy_recursive_mutex
- {
- template<typename _Mx, typename _Rm>
- static void
- _S_destroy_win32(_Mx* __mx, _Rm const* __rmx)
- {
- __mx->counter = __rmx->counter;
- __mx->sema = __rmx->sema;
- __gthread_mutex_destroy(__mx);
- }
-
- public:
- // matches a gthr-win32.h recursive mutex
- template<typename _Rm>
- static typename enable_if<sizeof(&_Rm::sema), void>::type
- _S_destroy(_Rm* __mx)
- {
- __gthread_mutex_t __tmp;
- _S_destroy_win32(&__tmp, __mx);
- }
-
- // matches a recursive mutex with a member 'actual'
- template<typename _Rm>
- static typename enable_if<sizeof(&_Rm::actual), void>::type
- _S_destroy(_Rm* __mx)
- { __gthread_mutex_destroy(&__mx->actual); }
-
- // matches when there's only one mutex type
- template<typename _Rm>
- static
- typename enable_if<is_same<_Rm, __gthread_mutex_t>::value, void>::type
- _S_destroy(_Rm* __mx)
- { __gthread_mutex_destroy(__mx); }
- };
-#endif
-
/// recursive_mutex
- class recursive_mutex
+ class recursive_mutex : private __recursive_mutex_base
{
- typedef __gthread_recursive_mutex_t __native_type;
- __native_type _M_mutex;
-
public:
typedef __native_type* native_handle_type;
-#ifdef __GTHREAD_RECURSIVE_MUTEX_INIT
- recursive_mutex() : _M_mutex(__GTHREAD_RECURSIVE_MUTEX_INIT) { }
-#else
- recursive_mutex()
- {
- // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
- __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
- }
-
- ~recursive_mutex()
- { __destroy_recursive_mutex::_S_destroy(&_M_mutex); }
-#endif
+ recursive_mutex() = default;
+ ~recursive_mutex() = default;
recursive_mutex(const recursive_mutex&) = delete;
recursive_mutex& operator=(const recursive_mutex&) = delete;
@@ -188,7 +216,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
bool
- try_lock()
+ try_lock() noexcept
{
// XXX EINVAL, EAGAIN, EBUSY
return !__gthread_recursive_mutex_trylock(&_M_mutex);
@@ -206,32 +234,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return &_M_mutex; }
};
+#if _GTHREAD_USE_MUTEX_TIMEDLOCK
/// timed_mutex
- class timed_mutex
+ class timed_mutex : private __mutex_base
{
- typedef __gthread_mutex_t __native_type;
-
#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
- typedef chrono::monotonic_clock __clock_t;
+ typedef chrono::steady_clock __clock_t;
#else
typedef chrono::high_resolution_clock __clock_t;
#endif
- __native_type _M_mutex;
-
public:
typedef __native_type* native_handle_type;
-#ifdef __GTHREAD_MUTEX_INIT
- timed_mutex() : _M_mutex(__GTHREAD_MUTEX_INIT) { }
-#else
- timed_mutex()
- {
- __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
- }
-
- ~timed_mutex() { __gthread_mutex_destroy(&_M_mutex); }
-#endif
+ timed_mutex() = default;
+ ~timed_mutex() = default;
timed_mutex(const timed_mutex&) = delete;
timed_mutex& operator=(const timed_mutex&) = delete;
@@ -247,7 +264,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
bool
- try_lock()
+ try_lock() noexcept
{
// XXX EINVAL, EAGAIN, EBUSY
return !__gthread_mutex_trylock(&_M_mutex);
@@ -312,33 +329,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/// recursive_timed_mutex
- class recursive_timed_mutex
+ class recursive_timed_mutex : private __recursive_mutex_base
{
- typedef __gthread_recursive_mutex_t __native_type;
-
#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
- typedef chrono::monotonic_clock __clock_t;
+ typedef chrono::steady_clock __clock_t;
#else
typedef chrono::high_resolution_clock __clock_t;
#endif
- __native_type _M_mutex;
-
public:
typedef __native_type* native_handle_type;
-#ifdef __GTHREAD_RECURSIVE_MUTEX_INIT
- recursive_timed_mutex() : _M_mutex(__GTHREAD_RECURSIVE_MUTEX_INIT) { }
-#else
- recursive_timed_mutex()
- {
- // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
- __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
- }
-
- ~recursive_timed_mutex()
- { __destroy_recursive_mutex::_S_destroy(&_M_mutex); }
-#endif
+ recursive_timed_mutex() = default;
+ ~recursive_timed_mutex() = default;
recursive_timed_mutex(const recursive_timed_mutex&) = delete;
recursive_timed_mutex& operator=(const recursive_timed_mutex&) = delete;
@@ -354,7 +357,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
bool
- try_lock()
+ try_lock() noexcept
{
// XXX EINVAL, EAGAIN, EBUSY
return !__gthread_recursive_mutex_trylock(&_M_mutex);
@@ -417,6 +420,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return try_lock_until(__atime);
}
};
+#endif
+#endif // _GLIBCXX_HAS_GTHREADS
/// Do not acquire ownership of the mutex.
struct defer_lock_t { };
@@ -464,7 +469,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
typedef _Mutex mutex_type;
- unique_lock()
+ unique_lock() noexcept
: _M_device(0), _M_owns(false)
{ }
@@ -475,7 +480,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_owns = true;
}
- unique_lock(mutex_type& __m, defer_lock_t)
+ unique_lock(mutex_type& __m, defer_lock_t) noexcept
: _M_device(&__m), _M_owns(false)
{ }
@@ -510,14 +515,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
unique_lock(const unique_lock&) = delete;
unique_lock& operator=(const unique_lock&) = delete;
- unique_lock(unique_lock&& __u)
+ unique_lock(unique_lock&& __u) noexcept
: _M_device(__u._M_device), _M_owns(__u._M_owns)
{
__u._M_device = 0;
__u._M_owns = false;
}
- unique_lock& operator=(unique_lock&& __u)
+ unique_lock& operator=(unique_lock&& __u) noexcept
{
if(_M_owns)
unlock();
@@ -601,14 +606,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- swap(unique_lock& __u)
+ swap(unique_lock& __u) noexcept
{
std::swap(_M_device, __u._M_device);
std::swap(_M_owns, __u._M_owns);
}
mutex_type*
- release()
+ release() noexcept
{
mutex_type* __ret = _M_device;
_M_device = 0;
@@ -617,14 +622,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
bool
- owns_lock() const
+ owns_lock() const noexcept
{ return _M_owns; }
- explicit operator bool() const
+ explicit operator bool() const noexcept
{ return owns_lock(); }
mutex_type*
- mutex() const
+ mutex() const noexcept
{ return _M_device; }
private:
@@ -632,9 +637,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool _M_owns; // XXX use atomic_bool
};
+ /// Partial specialization for unique_lock objects.
template<typename _Mutex>
inline void
- swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y)
+ swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept
{ __x.swap(__y); }
template<int _Idx>
@@ -751,17 +757,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
}
+#ifdef _GLIBCXX_HAS_GTHREADS
/// once_flag
struct once_flag
{
private:
typedef __gthread_once_t __native_type;
- __native_type _M_once;
+ __native_type _M_once = __GTHREAD_ONCE_INIT;
public:
- constexpr once_flag() : _M_once(__GTHREAD_ONCE_INIT) { }
+ /// Constructor
+ constexpr once_flag() noexcept = default;
+ /// Deleted copy constructor
once_flag(const once_flag&) = delete;
+ /// Deleted assignment operator
once_flag& operator=(const once_flag&) = delete;
template<typename _Callable, typename... _Args>
@@ -789,7 +799,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__get_once_mutex();
#endif
- extern "C" void __once_proxy();
+ extern "C" void __once_proxy(void);
/// call_once
template<typename _Callable, typename... _Args>
@@ -797,14 +807,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
call_once(once_flag& __once, _Callable&& __f, _Args&&... __args)
{
#ifdef _GLIBCXX_HAVE_TLS
- auto __bound_functor = std::bind<void>(std::forward<_Callable>(__f),
+ auto __bound_functor = std::__bind_simple(std::forward<_Callable>(__f),
std::forward<_Args>(__args)...);
__once_callable = &__bound_functor;
__once_call = &__once_call_impl<decltype(__bound_functor)>;
#else
unique_lock<mutex> __functor_lock(__get_once_mutex());
- __once_functor = std::bind<void>(std::forward<_Callable>(__f),
+ auto __callable = std::__bind_simple(std::forward<_Callable>(__f),
std::forward<_Args>(__args)...);
+ __once_functor = [&]() { __callable(); };
__set_once_functor_lock_ptr(&__functor_lock);
#endif
@@ -818,12 +829,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__e)
__throw_system_error(__e);
}
+#endif // _GLIBCXX_HAS_GTHREADS
// @} group mutexes
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
-#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
+#endif // _GLIBCXX_USE_C99_STDINT_TR1
#endif // __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index 3004d4b69c..498a060c2f 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -44,9 +44,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- // [27.6.2.1] Template class basic_ostream
/**
- * @brief Controlling output.
+ * @brief Template class basic_ostream.
* @ingroup io
*
* This is the base class for all output streams. It provides text
@@ -57,22 +56,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class basic_ostream : virtual public basic_ios<_CharT, _Traits>
{
public:
- // Types (inherited from basic_ios (27.4.4)):
- typedef _CharT char_type;
+ // Types (inherited from basic_ios):
+ typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
- typedef _Traits traits_type;
-
+ typedef _Traits traits_type;
+
// Non-standard Types:
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_ios<_CharT, _Traits> __ios_type;
typedef basic_ostream<_CharT, _Traits> __ostream_type;
- typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
+ typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
__num_put_type;
- typedef ctype<_CharT> __ctype_type;
+ typedef ctype<_CharT> __ctype_type;
- // [27.6.2.2] constructor/destructor
/**
* @brief Base constructor.
*
@@ -80,7 +78,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* derived classes' initialization lists, which pass a pointer to
* their own stream buffer.
*/
- explicit
+ explicit
basic_ostream(__streambuf_type* __sb)
{ this->init(__sb); }
@@ -89,15 +87,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* This does very little apart from providing a virtual base dtor.
*/
- virtual
+ virtual
~basic_ostream() { }
- // [27.6.2.3] prefix/suffix
+ /// Safe prefix/suffix operations.
class sentry;
friend class sentry;
-
- // [27.6.2.5] formatted output
- // [27.6.2.5.3] basic_ostream::operator<<
+
//@{
/**
* @brief Interface for manipulators.
@@ -136,9 +132,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
//@}
- // [27.6.2.5.2] arithmetic inserters
+ //@{
/**
- * @name Arithmetic Inserters
+ * @name Inserters
*
* All the @c operator<< functions (aka <em>formatted output
* functions</em>) have some common behavior. Each starts by
@@ -154,31 +150,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* ios_base::failure to be thrown. The original exception will then
* be rethrown.
*/
+
//@{
/**
- * @brief Basic arithmetic inserters
- * @param A variable of builtin type.
+ * @brief Integer arithmetic inserters
+ * @param __n A variable of builtin integral type.
* @return @c *this if successful
*
* These functions use the stream's current locale (specifically, the
* @c num_get facet) to perform numeric formatting.
*/
- __ostream_type&
+ __ostream_type&
operator<<(long __n)
{ return _M_insert(__n); }
-
- __ostream_type&
+
+ __ostream_type&
operator<<(unsigned long __n)
- { return _M_insert(__n); }
+ { return _M_insert(__n); }
- __ostream_type&
+ __ostream_type&
operator<<(bool __n)
{ return _M_insert(__n); }
- __ostream_type&
+ __ostream_type&
operator<<(short __n);
- __ostream_type&
+ __ostream_type&
operator<<(unsigned short __n)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -186,10 +183,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return _M_insert(static_cast<unsigned long>(__n));
}
- __ostream_type&
+ __ostream_type&
operator<<(int __n);
- __ostream_type&
+ __ostream_type&
operator<<(unsigned int __n)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -198,20 +195,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
#ifdef _GLIBCXX_USE_LONG_LONG
- __ostream_type&
+ __ostream_type&
operator<<(long long __n)
{ return _M_insert(__n); }
- __ostream_type&
+ __ostream_type&
operator<<(unsigned long long __n)
- { return _M_insert(__n); }
+ { return _M_insert(__n); }
#endif
+ //@}
- __ostream_type&
+ //@{
+ /**
+ * @brief Floating point arithmetic inserters
+ * @param __f A variable of builtin floating point type.
+ * @return @c *this if successful
+ *
+ * These functions use the stream's current locale (specifically, the
+ * @c num_get facet) to perform numeric formatting.
+ */
+ __ostream_type&
operator<<(double __f)
{ return _M_insert(__f); }
- __ostream_type&
+ __ostream_type&
operator<<(float __f)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -219,40 +226,49 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return _M_insert(static_cast<double>(__f));
}
- __ostream_type&
+ __ostream_type&
operator<<(long double __f)
{ return _M_insert(__f); }
+ //@}
- __ostream_type&
+ /**
+ * @brief Pointer arithmetic inserters
+ * @param __p A variable of pointer type.
+ * @return @c *this if successful
+ *
+ * These functions use the stream's current locale (specifically, the
+ * @c num_get facet) to perform numeric formatting.
+ */
+ __ostream_type&
operator<<(const void* __p)
{ return _M_insert(__p); }
/**
* @brief Extracting from another streambuf.
- * @param sb A pointer to a streambuf
+ * @param __sb A pointer to a streambuf
*
* This function behaves like one of the basic arithmetic extractors,
* in that it also constructs a sentry object and has the same error
* handling behavior.
*
- * If @a sb is NULL, the stream will set failbit in its error state.
+ * If @p __sb is NULL, the stream will set failbit in its error state.
*
- * Characters are extracted from @a sb and inserted into @c *this
+ * Characters are extracted from @p __sb and inserted into @c *this
* until one of the following occurs:
*
* - the input stream reaches end-of-file,
* - insertion into the output sequence fails (in this case, the
* character that would have been inserted is not extracted), or
- * - an exception occurs while getting a character from @a sb, which
+ * - an exception occurs while getting a character from @p __sb, which
* sets failbit in the error state
*
* If the function inserts no characters, failbit is set.
*/
- __ostream_type&
+ __ostream_type&
operator<<(__streambuf_type* __sb);
//@}
- // [27.6.2.6] unformatted output functions
+ //@{
/**
* @name Unformatted Output Functions
*
@@ -270,21 +286,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the stream's exceptions mask, the exception will be rethrown
* without completing its actions.
*/
- //@{
+
/**
* @brief Simple insertion.
- * @param c The character to insert.
+ * @param __c The character to insert.
* @return *this
*
- * Tries to insert @a c.
+ * Tries to insert @p __c.
*
* @note This function is not overloaded on signed char and
* unsigned char.
*/
- __ostream_type&
+ __ostream_type&
put(char_type __c);
- // Core write functionality, without sentry.
+ /**
+ * @brief Core write functionality, without sentry.
+ * @param __s The array to insert.
+ * @param __n Maximum number of characters to insert.
+ */
void
_M_write(const char_type* __s, streamsize __n)
{
@@ -295,21 +315,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Character string insertion.
- * @param s The array to insert.
- * @param n Maximum number of characters to insert.
+ * @param __s The array to insert.
+ * @param __n Maximum number of characters to insert.
* @return *this
*
- * Characters are copied from @a s and inserted into the stream until
+ * Characters are copied from @p __s and inserted into the stream until
* one of the following happens:
*
- * - @a n characters are inserted
+ * - @p __n characters are inserted
* - inserting into the output sequence fails (in this case, badbit
* will be set in the stream's error state)
*
* @note This function is not overloaded on signed char and
* unsigned char.
*/
- __ostream_type&
+ __ostream_type&
write(const char_type* __s, streamsize __n);
//@}
@@ -322,10 +342,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Otherwise, calls @c rdbuf()->pubsync(), and if that returns -1,
* sets badbit.
*/
- __ostream_type&
+ __ostream_type&
flush();
- // [27.6.2.4] seek members
/**
* @brief Getting the current write position.
* @return A file position object.
@@ -333,39 +352,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* If @c fail() is not false, returns @c pos_type(-1) to indicate
* failure. Otherwise returns @c rdbuf()->pubseekoff(0,cur,out).
*/
- pos_type
+ pos_type
tellp();
/**
* @brief Changing the current write position.
- * @param pos A file position object.
+ * @param __pos A file position object.
* @return *this
*
* If @c fail() is not true, calls @c rdbuf()->pubseekpos(pos). If
* that function fails, sets failbit.
*/
- __ostream_type&
+ __ostream_type&
seekp(pos_type);
/**
* @brief Changing the current write position.
- * @param off A file offset object.
- * @param dir The direction in which to seek.
+ * @param __off A file offset object.
+ * @param __dir The direction in which to seek.
* @return *this
*
* If @c fail() is not true, calls @c rdbuf()->pubseekoff(off,dir).
* If that function fails, sets failbit.
*/
- __ostream_type&
+ __ostream_type&
seekp(off_type, ios_base::seekdir);
-
+
protected:
basic_ostream()
{ this->init(0); }
template<typename _ValueT>
- __ostream_type&
- _M_insert(_ValueT __v);
+ __ostream_type&
+ _M_insert(_ValueT __v);
};
/**
@@ -381,13 +400,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Data Members.
bool _M_ok;
basic_ostream<_CharT, _Traits>& _M_os;
-
+
public:
/**
* @brief The constructor performs preparatory work.
- * @param os The output stream to guard.
+ * @param __os The output stream to guard.
*
- * If the stream state is good (@a os.good() is true), then if the
+ * If the stream state is good (@a __os.good() is true), then if the
* stream is tied to another output stream, @c is.tie()->flush()
* is called to synchronize the output sequences.
*
@@ -429,21 +448,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return _M_ok; }
};
- // [27.6.2.5.4] character insertion templates
//@{
/**
* @brief Character inserters
- * @param out An output stream.
- * @param c A character.
+ * @param __out An output stream.
+ * @param __c A character.
* @return out
*
* Behaves like one of the formatted arithmetic inserters described in
* std::basic_ostream. After constructing a sentry object with good
* status, this function inserts a single character and any required
- * padding (as determined by [22.2.2.2.2]). @c out.width(0) is then
+ * padding (as determined by [22.2.2.2.2]). @c __out.width(0) is then
* called.
*
- * If @a c is of type @c char and the character type of the stream is not
+ * If @p __c is of type @c char and the character type of the stream is not
* @c char, the character is widened before insertion.
*/
template<typename _CharT, typename _Traits>
@@ -457,7 +475,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return (__out << __out.widen(__c)); }
// Specialization
- template <class _Traits>
+ template <class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, char __c)
{ return __ostream_insert(__out, &__c, 1); }
@@ -467,26 +485,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
{ return (__out << static_cast<char>(__c)); }
-
+
template<class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
{ return (__out << static_cast<char>(__c)); }
//@}
-
+
//@{
/**
* @brief String inserters
- * @param out An output stream.
- * @param s A character string.
+ * @param __out An output stream.
+ * @param __s A character string.
* @return out
- * @pre @a s must be a non-NULL pointer
+ * @pre @p __s must be a non-NULL pointer
*
* Behaves like one of the formatted arithmetic inserters described in
* std::basic_ostream. After constructing a sentry object with good
- * status, this function inserts @c traits::length(s) characters starting
- * at @a s, widened if necessary, followed by any required padding (as
- * determined by [22.2.2.2.2]). @c out.width(0) is then called.
+ * status, this function inserts @c traits::length(__s) characters starting
+ * at @p __s, widened if necessary, followed by any required padding (as
+ * determined by [22.2.2.2.2]). @c __out.width(0) is then called.
*/
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
@@ -529,7 +547,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return (__out << reinterpret_cast<const char*>(__s)); }
//@}
- // [27.6.2.7] standard basic_ostream manipulators
+ // Standard basic_ostream manipulators
+
/**
* @brief Write a newline and flush the stream.
*
@@ -539,37 +558,37 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* for more on this subject.
*/
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT, _Traits>&
+ inline basic_ostream<_CharT, _Traits>&
endl(basic_ostream<_CharT, _Traits>& __os)
{ return flush(__os.put(__os.widen('\n'))); }
/**
* @brief Write a null character into the output sequence.
*
- * <em>Null character</em> is @c CharT() by definition. For CharT of @c char,
- * this correctly writes the ASCII @c NUL character string terminator.
+ * <em>Null character</em> is @c CharT() by definition. For CharT
+ * of @c char, this correctly writes the ASCII @c NUL character
+ * string terminator.
*/
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT, _Traits>&
+ inline basic_ostream<_CharT, _Traits>&
ends(basic_ostream<_CharT, _Traits>& __os)
{ return __os.put(_CharT()); }
-
+
/**
* @brief Flushes the output stream.
*
* This manipulator simply calls the stream's @c flush() member function.
*/
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT, _Traits>&
+ inline basic_ostream<_CharT, _Traits>&
flush(basic_ostream<_CharT, _Traits>& __os)
{ return __os.flush(); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- // [27.7.2.9] Rvalue stream insertion
/**
* @brief Generic inserter for rvalue stream
- * @param os An input stream.
- * @param x A reference to the object being inserted.
+ * @param __os An input stream.
+ * @param __x A reference to the object being inserted.
* @return os
*
* This is just a forwarding function to allow insertion to
@@ -583,7 +602,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif // __GXX_EXPERIMENTAL_CXX0X__
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
+} // namespace std
#include <bits/ostream.tcc>
diff --git a/libstdc++-v3/include/std/ratio b/libstdc++-v3/include/std/ratio
index 17d28a10f4..a9cbfe246e 100644
--- a/libstdc++-v3/include/std/ratio
+++ b/libstdc++-v3/include/std/ratio
@@ -98,41 +98,154 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static const uintmax_t __b1 = __static_abs<_Qn>::value / __c;
static_assert(__a1 == 0 || __b1 == 0,
- "overflow in multiplication");
+ "overflow in multiplication");
static_assert(__a0 * __b1 + __b0 * __a1 < (__c >> 1),
- "overflow in multiplication");
+ "overflow in multiplication");
static_assert(__b0 * __a0 <= __INTMAX_MAX__,
- "overflow in multiplication");
- static_assert((__a0 * __b1 + __b0 * __a1) * __c <=
- __INTMAX_MAX__ - __b0 * __a0, "overflow in multiplication");
+ "overflow in multiplication");
+ static_assert((__a0 * __b1 + __b0 * __a1) * __c
+ <= __INTMAX_MAX__ - __b0 * __a0,
+ "overflow in multiplication");
public:
static const intmax_t value = _Pn * _Qn;
};
- // Helpers for __safe_add
- template<intmax_t _Pn, intmax_t _Qn, bool>
- struct __add_overflow_check_impl
- : integral_constant<bool, (_Pn <= __INTMAX_MAX__ - _Qn)>
+ // Some double-precision utilities, where numbers are represented as
+ // __hi*2^(8*sizeof(uintmax_t)) + __lo.
+ template<uintmax_t __hi1, uintmax_t __lo1, uintmax_t __hi2, uintmax_t __lo2>
+ struct __big_less
+ : integral_constant<bool, (__hi1 < __hi2
+ || (__hi1 == __hi2 && __lo1 < __lo2))>
{ };
- template<intmax_t _Pn, intmax_t _Qn>
- struct __add_overflow_check_impl<_Pn, _Qn, false>
- : integral_constant<bool, (_Pn >= -__INTMAX_MAX__ - _Qn)>
- { };
+ template<uintmax_t __hi1, uintmax_t __lo1, uintmax_t __hi2, uintmax_t __lo2>
+ struct __big_add
+ {
+ static constexpr uintmax_t __lo = __lo1 + __lo2;
+ static constexpr uintmax_t __hi = (__hi1 + __hi2 +
+ (__lo1 + __lo2 < __lo1)); // carry
+ };
- template<intmax_t _Pn, intmax_t _Qn>
- struct __add_overflow_check
- : __add_overflow_check_impl<_Pn, _Qn, (_Qn >= 0)>
- { };
+ // Subtract a number from a bigger one.
+ template<uintmax_t __hi1, uintmax_t __lo1, uintmax_t __hi2, uintmax_t __lo2>
+ struct __big_sub
+ {
+ static_assert(!__big_less<__hi1, __lo1, __hi2, __lo2>::value,
+ "Internal library error");
+ static constexpr uintmax_t __lo = __lo1 - __lo2;
+ static constexpr uintmax_t __hi = (__hi1 - __hi2 -
+ (__lo1 < __lo2)); // carry
+ };
- template<intmax_t _Pn, intmax_t _Qn>
- struct __safe_add
+ // Same principle as __safe_multiply.
+ template<uintmax_t __x, uintmax_t __y>
+ struct __big_mul
+ {
+ private:
+ static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4);
+ static constexpr uintmax_t __x0 = __x % __c;
+ static constexpr uintmax_t __x1 = __x / __c;
+ static constexpr uintmax_t __y0 = __y % __c;
+ static constexpr uintmax_t __y1 = __y / __c;
+ static constexpr uintmax_t __x0y0 = __x0 * __y0;
+ static constexpr uintmax_t __x0y1 = __x0 * __y1;
+ static constexpr uintmax_t __x1y0 = __x1 * __y0;
+ static constexpr uintmax_t __x1y1 = __x1 * __y1;
+ static constexpr uintmax_t __mix = __x0y1 + __x1y0; // possible carry...
+ static constexpr uintmax_t __mix_lo = __mix * __c;
+ static constexpr uintmax_t __mix_hi
+ = __mix / __c + ((__mix < __x0y1) ? __c : 0); // ... added here
+ typedef __big_add<__mix_hi, __mix_lo, __x1y1, __x0y0> _Res;
+ public:
+ static constexpr uintmax_t __hi = _Res::__hi;
+ static constexpr uintmax_t __lo = _Res::__lo;
+ };
+
+ // Adapted from __udiv_qrnnd_c in longlong.h
+ // This version assumes that the high bit of __d is 1.
+ template<uintmax_t __n1, uintmax_t __n0, uintmax_t __d>
+ struct __big_div_impl
+ {
+ private:
+ static_assert(__d >= (uintmax_t(1) << (sizeof(intmax_t) * 8 - 1)),
+ "Internal library error");
+ static_assert(__n1 < __d, "Internal library error");
+ static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4);
+ static constexpr uintmax_t __d1 = __d / __c;
+ static constexpr uintmax_t __d0 = __d % __c;
+
+ static constexpr uintmax_t __q1x = __n1 / __d1;
+ static constexpr uintmax_t __r1x = __n1 % __d1;
+ static constexpr uintmax_t __m = __q1x * __d0;
+ static constexpr uintmax_t __r1y = __r1x * __c + __n0 / __c;
+ static constexpr uintmax_t __r1z = __r1y + __d;
+ static constexpr uintmax_t __r1
+ = ((__r1y < __m) ? ((__r1z >= __d) && (__r1z < __m))
+ ? (__r1z + __d) : __r1z : __r1y) - __m;
+ static constexpr uintmax_t __q1
+ = __q1x - ((__r1y < __m)
+ ? ((__r1z >= __d) && (__r1z < __m)) ? 2 : 1 : 0);
+ static constexpr uintmax_t __q0x = __r1 / __d1;
+ static constexpr uintmax_t __r0x = __r1 % __d1;
+ static constexpr uintmax_t __n = __q0x * __d0;
+ static constexpr uintmax_t __r0y = __r0x * __c + __n0 % __c;
+ static constexpr uintmax_t __r0z = __r0y + __d;
+ static constexpr uintmax_t __r0
+ = ((__r0y < __n) ? ((__r0z >= __d) && (__r0z < __n))
+ ? (__r0z + __d) : __r0z : __r0y) - __n;
+ static constexpr uintmax_t __q0
+ = __q0x - ((__r0y < __n) ? ((__r0z >= __d)
+ && (__r0z < __n)) ? 2 : 1 : 0);
+
+ public:
+ static constexpr uintmax_t __quot = __q1 * __c + __q0;
+ static constexpr uintmax_t __rem = __r0;
+
+ private:
+ typedef __big_mul<__quot, __d> _Prod;
+ typedef __big_add<_Prod::__hi, _Prod::__lo, 0, __rem> _Sum;
+ static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0,
+ "Internal library error");
+ };
+
+ template<uintmax_t __n1, uintmax_t __n0, uintmax_t __d>
+ struct __big_div
{
- static_assert(__add_overflow_check<_Pn, _Qn>::value != 0,
- "overflow in addition");
+ private:
+ static_assert(__d != 0, "Internal library error");
+ static_assert(sizeof (uintmax_t) == sizeof (unsigned long long),
+ "This library calls __builtin_clzll on uintmax_t, which "
+ "is unsafe on your platform. Please complain to "
+ "http://gcc.gnu.org/bugzilla/");
+ static constexpr int __shift = __builtin_clzll(__d);
+ static constexpr int __coshift_ = sizeof(uintmax_t) * 8 - __shift;
+ static constexpr int __coshift = (__shift != 0) ? __coshift_ : 0;
+ static constexpr uintmax_t __c1 = uintmax_t(1) << __shift;
+ static constexpr uintmax_t __c2 = uintmax_t(1) << __coshift;
+ static constexpr uintmax_t __new_d = __d * __c1;
+ static constexpr uintmax_t __new_n0 = __n0 * __c1;
+ static constexpr uintmax_t __n1_shifted = (__n1 % __d) * __c1;
+ static constexpr uintmax_t __n0_top = (__shift != 0) ? (__n0 / __c2) : 0;
+ static constexpr uintmax_t __new_n1 = __n1_shifted + __n0_top;
+ typedef __big_div_impl<__new_n1, __new_n0, __new_d> _Res;
+
+ public:
+ static constexpr uintmax_t __quot_hi = __n1 / __d;
+ static constexpr uintmax_t __quot_lo = _Res::__quot;
+ static constexpr uintmax_t __rem = _Res::__rem / __c1;
- static const intmax_t value = _Pn + _Qn;
+ private:
+ typedef __big_mul<__quot_lo, __d> _P0;
+ typedef __big_mul<__quot_hi, __d> _P1;
+ typedef __big_add<_P0::__hi, _P0::__lo, _P1::__lo, __rem> _Sum;
+ // No overflow.
+ static_assert(_P1::__hi == 0, "Internal library error");
+ static_assert(_Sum::__hi >= _P0::__hi, "Internal library error");
+ // Matches the input data.
+ static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0,
+ "Internal library error");
+ static_assert(__rem < __d, "Internal library error");
};
/**
@@ -172,53 +285,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<intmax_t _Num, intmax_t _Den>
constexpr intmax_t ratio<_Num, _Den>::den;
- /// ratio_add
- template<typename _R1, typename _R2>
- struct ratio_add
- {
- private:
- static constexpr intmax_t __gcd =
- __static_gcd<_R1::den, _R2::den>::value;
- static constexpr intmax_t __n = __safe_add<
- __safe_multiply<_R1::num, (_R2::den / __gcd)>::value,
- __safe_multiply<_R2::num, (_R1::den / __gcd)>::value>::value;
-
- // The new numerator may have common factors with the denominator,
- // but they have to also be factors of __gcd.
- static constexpr intmax_t __gcd2 = __static_gcd<__n, __gcd>::value;
-
- public:
- typedef ratio<__n / __gcd2,
- __safe_multiply<_R1::den / __gcd2, _R2::den / __gcd>::value> type;
-
- static constexpr intmax_t num = type::num;
- static constexpr intmax_t den = type::den;
- };
-
- template<typename _R1, typename _R2>
- constexpr intmax_t ratio_add<_R1, _R2>::num;
-
- template<typename _R1, typename _R2>
- constexpr intmax_t ratio_add<_R1, _R2>::den;
-
- /// ratio_subtract
- template<typename _R1, typename _R2>
- struct ratio_subtract
- {
- typedef typename ratio_add<
- _R1,
- ratio<-_R2::num, _R2::den>>::type type;
-
- static constexpr intmax_t num = type::num;
- static constexpr intmax_t den = type::den;
- };
-
- template<typename _R1, typename _R2>
- constexpr intmax_t ratio_subtract<_R1, _R2>::num;
-
- template<typename _R1, typename _R2>
- constexpr intmax_t ratio_subtract<_R1, _R2>::den;
-
/// ratio_multiply
template<typename _R1, typename _R2>
struct ratio_multiply
@@ -278,45 +344,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: integral_constant<bool, !ratio_equal<_R1, _R2>::value>
{ };
- // 0 <= _Ri < 1
- // If one is 0, conclude
- // Otherwise, x < y iff 1/y < 1/x
- template<typename _R1, typename _R2>
- struct __ratio_less_impl_2;
-
- // _Ri > 0
- // Compare the integral parts, and remove them if they are equal
- template<typename _R1, typename _R2, intmax_t __q1 = _R1::num / _R1::den,
- intmax_t __q2 = _R2::num / _R2::den, bool __eq = (__q1 == __q2)>
+ // Both numbers are positive.
+ template<typename _R1, typename _R2,
+ typename _Left = __big_mul<_R1::num,_R2::den>,
+ typename _Right = __big_mul<_R2::num,_R1::den> >
struct __ratio_less_impl_1
- : __ratio_less_impl_2<ratio<_R1::num % _R1::den, _R1::den>,
- ratio<_R2::num % _R2::den, _R2::den> >::type
- { };
-
- template<typename _R1, typename _R2, intmax_t __q1, intmax_t __q2>
- struct __ratio_less_impl_1<_R1, _R2, __q1, __q2, false>
- : integral_constant<bool, (__q1 < __q2) >
- { };
-
- template<typename _R1, typename _R2>
- struct __ratio_less_impl_2
- : __ratio_less_impl_1<ratio<_R2::den, _R2::num>,
- ratio<_R1::den, _R1::num> >::type
- { };
-
- template<intmax_t __d1, typename _R2>
- struct __ratio_less_impl_2<ratio<0, __d1>, _R2>
- : integral_constant<bool, true>
- { };
-
- template<typename _R1, intmax_t __d2>
- struct __ratio_less_impl_2<_R1, ratio<0, __d2> >
- : integral_constant<bool, false>
- { };
-
- template<intmax_t __d1, intmax_t __d2>
- struct __ratio_less_impl_2<ratio<0, __d1>, ratio<0, __d2> >
- : integral_constant<bool, false>
+ : integral_constant<bool, __big_less<_Left::__hi, _Left::__lo,
+ _Right::__hi, _Right::__lo>::value>
{ };
template<typename _R1, typename _R2,
@@ -341,7 +375,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ };
/// ratio_less
- // using a continued fraction expansion
template<typename _R1, typename _R2>
struct ratio_less
: __ratio_less_impl<_R1, _R2>::type
@@ -365,6 +398,110 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: integral_constant<bool, !ratio_less<_R1, _R2>::value>
{ };
+ template<typename _R1, typename _R2,
+ bool = (_R1::num >= 0),
+ bool = (_R2::num >= 0),
+ bool = ratio_less<ratio<__static_abs<_R1::num>::value, _R1::den>,
+ ratio<__static_abs<_R2::num>::value, _R2::den> >::value>
+ struct __ratio_add_impl
+ {
+ private:
+ typedef typename __ratio_add_impl<
+ ratio<-_R1::num, _R1::den>,
+ ratio<-_R2::num, _R2::den> >::type __t;
+ public:
+ typedef ratio<-__t::num, __t::den> type;
+ };
+
+ // True addition of nonnegative numbers.
+ template<typename _R1, typename _R2, bool __b>
+ struct __ratio_add_impl<_R1, _R2, true, true, __b>
+ {
+ private:
+ static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value;
+ static constexpr uintmax_t __d2 = _R2::den / __g;
+ typedef __big_mul<_R1::den, __d2> __d;
+ typedef __big_mul<_R1::num, _R2::den / __g> __x;
+ typedef __big_mul<_R2::num, _R1::den / __g> __y;
+ typedef __big_add<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n;
+ static_assert(__n::__hi >= __x::__hi, "Internal library error");
+ typedef __big_div<__n::__hi, __n::__lo, __g> __ng;
+ static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value;
+ typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final;
+ static_assert(__n_final::__rem == 0, "Internal library error");
+ static_assert(__n_final::__quot_hi == 0 &&
+ __n_final::__quot_lo <= __INTMAX_MAX__, "overflow in addition");
+ typedef __big_mul<_R1::den / __g2, __d2> __d_final;
+ static_assert(__d_final::__hi == 0 &&
+ __d_final::__lo <= __INTMAX_MAX__, "overflow in addition");
+ public:
+ typedef ratio<__n_final::__quot_lo, __d_final::__lo> type;
+ };
+
+ template<typename _R1, typename _R2>
+ struct __ratio_add_impl<_R1, _R2, false, true, true>
+ : __ratio_add_impl<_R2, _R1>
+ { };
+
+ // True subtraction of nonnegative numbers yielding a nonnegative result.
+ template<typename _R1, typename _R2>
+ struct __ratio_add_impl<_R1, _R2, true, false, false>
+ {
+ private:
+ static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value;
+ static constexpr uintmax_t __d2 = _R2::den / __g;
+ typedef __big_mul<_R1::den, __d2> __d;
+ typedef __big_mul<_R1::num, _R2::den / __g> __x;
+ typedef __big_mul<-_R2::num, _R1::den / __g> __y;
+ typedef __big_sub<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n;
+ typedef __big_div<__n::__hi, __n::__lo, __g> __ng;
+ static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value;
+ typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final;
+ static_assert(__n_final::__rem == 0, "Internal library error");
+ static_assert(__n_final::__quot_hi == 0 &&
+ __n_final::__quot_lo <= __INTMAX_MAX__, "overflow in addition");
+ typedef __big_mul<_R1::den / __g2, __d2> __d_final;
+ static_assert(__d_final::__hi == 0 &&
+ __d_final::__lo <= __INTMAX_MAX__, "overflow in addition");
+ public:
+ typedef ratio<__n_final::__quot_lo, __d_final::__lo> type;
+ };
+
+ /// ratio_add
+ template<typename _R1, typename _R2>
+ struct ratio_add
+ {
+ typedef typename __ratio_add_impl<_R1, _R2>::type type;
+ static constexpr intmax_t num = type::num;
+ static constexpr intmax_t den = type::den;
+ };
+
+ template<typename _R1, typename _R2>
+ constexpr intmax_t ratio_add<_R1, _R2>::num;
+
+ template<typename _R1, typename _R2>
+ constexpr intmax_t ratio_add<_R1, _R2>::den;
+
+ /// ratio_subtract
+ template<typename _R1, typename _R2>
+ struct ratio_subtract
+ {
+ typedef typename ratio_add<
+ _R1,
+ ratio<-_R2::num, _R2::den>>::type type;
+
+ static constexpr intmax_t num = type::num;
+ static constexpr intmax_t den = type::den;
+ };
+
+ template<typename _R1, typename _R2>
+ constexpr intmax_t ratio_subtract<_R1, _R2>::num;
+
+ template<typename _R1, typename _R2>
+ constexpr intmax_t ratio_subtract<_R1, _R2>::den;
+
+
+
typedef ratio<1, 1000000000000000000> atto;
typedef ratio<1, 1000000000000000> femto;
typedef ratio<1, 1000000000000> pico;
diff --git a/libstdc++-v3/include/std/scoped_allocator b/libstdc++-v3/include/std/scoped_allocator
new file mode 100644
index 0000000000..fc2db7cbd6
--- /dev/null
+++ b/libstdc++-v3/include/std/scoped_allocator
@@ -0,0 +1,387 @@
+// <scoped_allocator> -*- C++ -*-
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file include/scoped_allocator
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _SCOPED_ALLOCATOR
+#define _SCOPED_ALLOCATOR 1
+
+#pragma GCC system_header
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/c++0x_warning.h>
+#else
+
+#include <utility>
+#include <tuple>
+#include <bits/alloc_traits.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<template<typename> class _Pred, typename... _Allocs>
+ struct __any_of;
+
+ template<template<typename> class _Pred, typename _Alloc, typename... _Allocs>
+ struct __any_of<_Pred, _Alloc, _Allocs...>
+ : __or_<_Pred<_Alloc>, __any_of<_Pred, _Allocs...>>
+ { };
+
+ template<template<typename> class _Pred, typename _Alloc>
+ struct __any_of<_Pred, _Alloc>
+ : _Pred<_Alloc>
+ { };
+
+ /**
+ * @addtogroup allocators
+ * @{
+ */
+
+ template<typename _Alloc>
+ struct __propagate_on_copy
+ : allocator_traits<_Alloc>::propagate_on_container_copy_assignment
+ { };
+ template<typename _Alloc>
+ struct __propagate_on_move
+ : allocator_traits<_Alloc>::propagate_on_container_move_assignment
+ { };
+ template<typename _Alloc>
+ struct __propagate_on_swap
+ : allocator_traits<_Alloc>::propagate_on_container_swap
+ { };
+
+
+ template<typename _Alloc>
+ inline auto
+ __do_outermost(_Alloc& __a, _Alloc*) -> decltype(__a.outer_allocator())
+ { return __a.outer_allocator(); }
+
+ template<typename _Alloc>
+ inline _Alloc&
+ __do_outermost(_Alloc& __a, ...)
+ { return __a; }
+
+ template<typename _Alloc>
+ inline auto
+ __outermost(_Alloc& __a) -> decltype(__do_outermost(__a, &__a))
+ { return __do_outermost(__a, &__a); }
+
+ template<typename _OuterAlloc, typename... _InnerAllocs>
+ class scoped_allocator_adaptor;
+
+ template<typename...>
+ struct __inner_type_impl;
+
+ template<typename _Outer>
+ struct __inner_type_impl<_Outer>
+ {
+ typedef scoped_allocator_adaptor<_Outer> __type;
+
+ __inner_type_impl() = default;
+ __inner_type_impl(const __inner_type_impl&) = default;
+ __inner_type_impl(__inner_type_impl&&) = default;
+
+ template<typename _Alloc>
+ __inner_type_impl(const __inner_type_impl<_Alloc>& __other)
+ { }
+
+ template<typename _Alloc>
+ __inner_type_impl(__inner_type_impl<_Alloc>&& __other)
+ { }
+
+ __type&
+ _M_get(__type* __p) noexcept { return *__p; }
+
+ const __type&
+ _M_get(const __type* __p) const noexcept { return *__p; }
+
+ tuple<>
+ _M_tie() const noexcept { return tuple<>(); }
+
+ bool
+ operator==(const __inner_type_impl&) const noexcept
+ { return true; }
+ };
+
+ template<typename _Outer, typename _InnerHead, typename... _InnerTail>
+ struct __inner_type_impl<_Outer, _InnerHead, _InnerTail...>
+ {
+ typedef scoped_allocator_adaptor<_InnerHead, _InnerTail...> __type;
+
+ __inner_type_impl() = default;
+ __inner_type_impl(const __inner_type_impl&) = default;
+ __inner_type_impl(__inner_type_impl&&) = default;
+
+ template<typename... _Allocs>
+ __inner_type_impl(const __inner_type_impl<_Allocs...>& __other)
+ : _M_inner(__other._M_inner) { }
+
+ template<typename... _Allocs>
+ __inner_type_impl(__inner_type_impl<_Allocs...>&& __other)
+ : _M_inner(std::move(__other._M_inner)) { }
+
+ template<typename... _Args>
+ explicit
+ __inner_type_impl(_Args&&... __args)
+ : _M_inner(std::forward<_Args>(__args)...) { }
+
+ __type&
+ _M_get(void*) noexcept { return _M_inner; }
+
+ const __type&
+ _M_get(const void*) const noexcept { return _M_inner; }
+
+ tuple<const _InnerHead&, const _InnerTail&...>
+ _M_tie() const noexcept
+ { return _M_inner._M_tie(); }
+
+ bool
+ operator==(const __inner_type_impl& __other) const noexcept
+ { return _M_inner == __other._M_inner; }
+
+ private:
+ template<typename...> friend class __inner_type_impl;
+ template<typename, typename...> friend class scoped_allocator_adaptor;
+
+ __type _M_inner;
+ };
+
+ /// Primary class template.
+ template<typename _OuterAlloc, typename... _InnerAllocs>
+ class scoped_allocator_adaptor
+ : public _OuterAlloc
+ {
+ typedef allocator_traits<_OuterAlloc> __traits;
+
+ typedef __inner_type_impl<_OuterAlloc, _InnerAllocs...> __inner_type;
+ __inner_type _M_inner;
+
+ template<typename _Outer, typename... _Inner>
+ friend class scoped_allocator_adaptor;
+
+ template<typename...>
+ friend class __inner_type_impl;
+
+ tuple<const _OuterAlloc&, const _InnerAllocs&...>
+ _M_tie() const noexcept
+ { return std::tuple_cat(std::tie(outer_allocator()), _M_inner._M_tie()); }
+
+
+ template<typename _Tp, typename... _Args>
+ void
+ _M_construct(__uses_alloc0, _Tp* __p, _Args&&... __args)
+ {
+ auto& __outer = __outermost(*this);
+ typedef typename std::decay<decltype(__outer)>::type __outer_type;
+ typedef allocator_traits<__outer_type> __o_traits;
+ __o_traits::construct(__outer, __p, std::forward<_Args>(__args)...);
+ }
+
+ typedef __uses_alloc1<typename __inner_type::__type> __uses_alloc1_;
+ typedef __uses_alloc2<typename __inner_type::__type> __uses_alloc2_;
+
+ template<typename _Tp, typename... _Args>
+ void
+ _M_construct(__uses_alloc1_, _Tp* __p, _Args&&... __args)
+ {
+ auto& __outer = __outermost(*this);
+ typedef typename std::decay<decltype(__outer)>::type __outer_type;
+ typedef allocator_traits<__outer_type> __o_traits;
+ __o_traits::construct(__outer, __p, allocator_arg, inner_allocator(),
+ std::forward<_Args>(__args)...);
+ }
+
+ template<typename _Tp, typename... _Args>
+ void
+ _M_construct(__uses_alloc2_, _Tp* __p, _Args&&... __args)
+ {
+ auto& __outer = __outermost(*this);
+ typedef typename std::decay<decltype(__outer)>::type __outer_type;
+ typedef allocator_traits<__outer_type> __o_traits;
+ __o_traits::construct(__outer, __p, std::forward<_Args>(__args)...,
+ inner_allocator());
+ }
+
+ template<typename _Alloc>
+ static _Alloc
+ _S_select_on_copy(const _Alloc& __a)
+ {
+ typedef allocator_traits<_Alloc> __a_traits;
+ return __a_traits::select_on_container_copy_construction(__a);
+ }
+
+ template<std::size_t... _Indices>
+ scoped_allocator_adaptor(tuple<const _OuterAlloc&,
+ const _InnerAllocs&...> __refs,
+ _Index_tuple<_Indices...>)
+ : _OuterAlloc(_S_select_on_copy(std::get<0>(__refs))),
+ _M_inner(_S_select_on_copy(std::get<_Indices+1>(__refs))...)
+ { }
+
+ public:
+ typedef _OuterAlloc outer_allocator_type;
+ typedef typename __inner_type::__type inner_allocator_type;
+
+ typedef typename __traits::value_type value_type;
+ typedef typename __traits::size_type size_type;
+ typedef typename __traits::difference_type difference_type;
+ typedef typename __traits::pointer pointer;
+ typedef typename __traits::const_pointer const_pointer;
+ typedef typename __traits::void_pointer void_pointer;
+ typedef typename __traits::const_void_pointer const_void_pointer;
+
+ typedef typename conditional<
+ __any_of<__propagate_on_copy, _OuterAlloc, _InnerAllocs...>::value,
+ true_type, false_type>::type propagate_on_container_copy_assignment;
+ typedef typename conditional<
+ __any_of<__propagate_on_move, _OuterAlloc, _InnerAllocs...>::value,
+ true_type, false_type>::type propagate_on_container_move_assignment;
+ typedef typename conditional<
+ __any_of<__propagate_on_swap, _OuterAlloc, _InnerAllocs...>::value,
+ true_type, false_type>::type propagate_on_container_swap;
+
+ template <class _Tp>
+ struct rebind
+ {
+ typedef scoped_allocator_adaptor<
+ typename __traits::template rebind_alloc<_Tp>,
+ _InnerAllocs...> other;
+ };
+
+ scoped_allocator_adaptor() : _OuterAlloc(), _M_inner() { }
+
+ template<typename _Outer2>
+ scoped_allocator_adaptor(_Outer2&& __outer,
+ const _InnerAllocs&... __inner)
+ : _OuterAlloc(std::forward<_Outer2>(__outer)),
+ _M_inner(__inner...)
+ { }
+
+ scoped_allocator_adaptor(const scoped_allocator_adaptor& __other)
+ : _OuterAlloc(__other.outer_allocator()),
+ _M_inner(__other._M_inner)
+ { }
+
+ scoped_allocator_adaptor(scoped_allocator_adaptor&& __other)
+ : _OuterAlloc(std::move(__other.outer_allocator())),
+ _M_inner(std::move(__other._M_inner))
+ { }
+
+ template<typename _Outer2>
+ scoped_allocator_adaptor(
+ const scoped_allocator_adaptor<_Outer2, _InnerAllocs...>& __other)
+ : _OuterAlloc(__other.outer_allocator()),
+ _M_inner(__other._M_inner)
+ { }
+
+ template<typename _Outer2>
+ scoped_allocator_adaptor(
+ scoped_allocator_adaptor<_Outer2, _InnerAllocs...>&& __other)
+ : _OuterAlloc(std::move(__other.outer_allocator())),
+ _M_inner(std::move(__other._M_inner))
+ { }
+
+ inner_allocator_type& inner_allocator() noexcept
+ { return _M_inner._M_get(this); }
+
+ const inner_allocator_type& inner_allocator() const noexcept
+ { return _M_inner._M_get(this); }
+
+ outer_allocator_type& outer_allocator() noexcept
+ { return static_cast<_OuterAlloc&>(*this); }
+
+ const outer_allocator_type& outer_allocator() const noexcept
+ { return static_cast<const _OuterAlloc&>(*this); }
+
+ pointer allocate(size_type __n)
+ { return __traits::allocate(outer_allocator(), __n); }
+
+ pointer allocate(size_type __n, const_void_pointer __hint)
+ { return __traits::allocate(outer_allocator(), __n, __hint); }
+
+ void deallocate(pointer __p, size_type __n)
+ { return __traits::deallocate(outer_allocator(), __p, __n); }
+
+ size_type max_size() const
+ { return __traits::max_size(outer_allocator()); }
+
+ template<typename _Tp, typename... _Args>
+ void construct(_Tp* __p, _Args&&... __args)
+ {
+ auto& __inner = inner_allocator();
+ auto __use_tag
+ = __use_alloc<_Tp, inner_allocator_type, _Args...>(__inner);
+ _M_construct(__use_tag, __p, std::forward<_Args>(__args)...);
+ }
+
+ // TODO: construct pairs
+
+ template<typename _Tp>
+ void destroy(_Tp* __p)
+ {
+ auto& __outer = __outermost(*this);
+ typedef typename std::decay<decltype(__outer)>::type __outer_type;
+ allocator_traits<__outer_type>::destroy(__outer, __p);
+ }
+
+ scoped_allocator_adaptor
+ select_on_container_copy_construction() const
+ {
+ typedef typename _Build_index_tuple<sizeof...(_InnerAllocs)>::__type
+ _Indices;
+ return scoped_allocator_adaptor(_M_tie(), _Indices());
+ }
+
+ template <typename _OutA1, typename _OutA2, typename... _InA>
+ friend bool
+ operator==(const scoped_allocator_adaptor<_OutA1, _InA...>& __a,
+ const scoped_allocator_adaptor<_OutA2, _InA...>& __b) noexcept;
+ };
+
+ template <typename _OutA1, typename _OutA2, typename... _InA>
+ inline bool
+ operator==(const scoped_allocator_adaptor<_OutA1, _InA...>& __a,
+ const scoped_allocator_adaptor<_OutA2, _InA...>& __b) noexcept
+ {
+ return __a.outer_allocator() == __b.outer_allocator()
+ && __a._M_inner == __b._M_inner;
+ }
+
+ template <typename _OutA1, typename _OutA2, typename... _InA>
+ inline bool
+ operator!=(const scoped_allocator_adaptor<_OutA1, _InA...>& __a,
+ const scoped_allocator_adaptor<_OutA2, _InA...>& __b) noexcept
+ { return !(__a == __b); }
+
+ /// @}
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
+#endif // _SCOPED_ALLOCATOR
diff --git a/libstdc++-v3/include/std/sstream b/libstdc++-v3/include/std/sstream
index bf2862add3..d9889d7fe2 100644
--- a/libstdc++-v3/include/std/sstream
+++ b/libstdc++-v3/include/std/sstream
@@ -85,7 +85,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Constructors:
/**
* @brief Starts with an empty string buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __mode Whether the buffer can read, or write, or both.
*
* The default constructor initializes the parent class using its
* own default ctor.
@@ -97,8 +97,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Starts with an existing string buffer.
- * @param str A string to copy as a starting buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __str A string to copy as a starting buffer.
+ * @param __mode Whether the buffer can read, or write, or both.
*
* This constructor initializes the parent class using its
* own default ctor.
@@ -137,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting a new buffer.
- * @param s The string to use as a new sequence.
+ * @param __s The string to use as a new sequence.
*
* Deallocates any previous stored sequence, then copies @a s to
* use as a new one.
@@ -185,12 +185,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Manipulates the buffer.
- * @param s Pointer to a buffer area.
- * @param n Size of @a s.
+ * @param __s Pointer to a buffer area.
+ * @param __n Size of @a __s.
* @return @c this
*
- * If no buffer has already been created, and both @a s and @a n are
- * non-zero, then @c s is used as a buffer; see
+ * If no buffer has already been created, and both @a __s and @a __n are
+ * non-zero, then @c __s is used as a buffer; see
* http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
* for more.
*/
@@ -285,11 +285,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Constructors:
/**
* @brief Default constructor starts with an empty string buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __mode Whether the buffer can read, or write, or both.
*
- * @c ios_base::in is automatically included in @a mode.
+ * @c ios_base::in is automatically included in @a __mode.
*
- * Initializes @c sb using @c mode|in, and passes @c &sb to the base
+ * Initializes @c sb using @c __mode|in, and passes @c &sb to the base
* class initializer. Does not allocate any buffer.
*
* That's a lie. We initialize the base class with NULL, because the
@@ -302,8 +302,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Starts with an existing string buffer.
- * @param str A string to copy as a starting buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __str A string to copy as a starting buffer.
+ * @param __mode Whether the buffer can read, or write, or both.
*
* @c ios_base::in is automatically included in @a mode.
*
@@ -349,7 +349,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting a new buffer.
- * @param s The string to use as a new sequence.
+ * @param __s The string to use as a new sequence.
*
* Calls @c rdbuf()->str(s).
*/
@@ -395,7 +395,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Constructors/destructor:
/**
* @brief Default constructor starts with an empty string buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __mode Whether the buffer can read, or write, or both.
*
* @c ios_base::out is automatically included in @a mode.
*
@@ -412,8 +412,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Starts with an existing string buffer.
- * @param str A string to copy as a starting buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __str A string to copy as a starting buffer.
+ * @param __mode Whether the buffer can read, or write, or both.
*
* @c ios_base::out is automatically included in @a mode.
*
@@ -459,7 +459,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting a new buffer.
- * @param s The string to use as a new sequence.
+ * @param __s The string to use as a new sequence.
*
* Calls @c rdbuf()->str(s).
*/
@@ -505,10 +505,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Constructors/destructors
/**
* @brief Default constructor starts with an empty string buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __m Whether the buffer can read, or write, or both.
*
- * Initializes @c sb using @c mode, and passes @c &sb to the base
- * class initializer. Does not allocate any buffer.
+ * Initializes @c sb using the mode from @c __m, and passes @c
+ * &sb to the base class initializer. Does not allocate any
+ * buffer.
*
* That's a lie. We initialize the base class with NULL, because the
* string class does its own memory management.
@@ -520,10 +521,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Starts with an existing string buffer.
- * @param str A string to copy as a starting buffer.
- * @param mode Whether the buffer can read, or write, or both.
+ * @param __str A string to copy as a starting buffer.
+ * @param __m Whether the buffer can read, or write, or both.
*
- * Initializes @c sb using @a str and @c mode, and passes @c &sb
+ * Initializes @c sb using @a __str and @c __m, and passes @c &sb
* to the base class initializer.
*
* That's a lie. We initialize the base class with NULL, because the
@@ -565,7 +566,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting a new buffer.
- * @param s The string to use as a new sequence.
+ * @param __s The string to use as a new sequence.
*
* Calls @c rdbuf()->str(s).
*/
diff --git a/libstdc++-v3/include/std/stdexcept b/libstdc++-v3/include/std/stdexcept
index a461795d7e..2cbf207df9 100644
--- a/libstdc++-v3/include/std/stdexcept
+++ b/libstdc++-v3/include/std/stdexcept
@@ -62,12 +62,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit
logic_error(const string& __arg);
- virtual ~logic_error() throw();
+ virtual ~logic_error() _GLIBCXX_USE_NOEXCEPT;
/** Returns a C-style character string describing the general cause of
* the current error (the same string passed to the ctor). */
virtual const char*
- what() const throw();
+ what() const _GLIBCXX_USE_NOEXCEPT;
};
/** Thrown by the library, or by you, to report domain errors (domain in
@@ -76,7 +76,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit domain_error(const string& __arg);
- virtual ~domain_error() throw();
+ virtual ~domain_error() _GLIBCXX_USE_NOEXCEPT;
};
/** Thrown to report invalid arguments to functions. */
@@ -84,7 +84,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit invalid_argument(const string& __arg);
- virtual ~invalid_argument() throw();
+ virtual ~invalid_argument() _GLIBCXX_USE_NOEXCEPT;
};
/** Thrown when an object is constructed that would exceed its maximum
@@ -93,7 +93,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit length_error(const string& __arg);
- virtual ~length_error() throw();
+ virtual ~length_error() _GLIBCXX_USE_NOEXCEPT;
};
/** This represents an argument whose value is not within the expected
@@ -102,7 +102,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit out_of_range(const string& __arg);
- virtual ~out_of_range() throw();
+ virtual ~out_of_range() _GLIBCXX_USE_NOEXCEPT;
};
/** Runtime errors represent problems outside the scope of a program;
@@ -119,12 +119,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit
runtime_error(const string& __arg);
- virtual ~runtime_error() throw();
+ virtual ~runtime_error() _GLIBCXX_USE_NOEXCEPT;
/** Returns a C-style character string describing the general cause of
* the current error (the same string passed to the ctor). */
virtual const char*
- what() const throw();
+ what() const _GLIBCXX_USE_NOEXCEPT;
};
/** Thrown to indicate range errors in internal computations. */
@@ -132,7 +132,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit range_error(const string& __arg);
- virtual ~range_error() throw();
+ virtual ~range_error() _GLIBCXX_USE_NOEXCEPT;
};
/** Thrown to indicate arithmetic overflow. */
@@ -140,7 +140,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit overflow_error(const string& __arg);
- virtual ~overflow_error() throw();
+ virtual ~overflow_error() _GLIBCXX_USE_NOEXCEPT;
};
/** Thrown to indicate arithmetic underflow. */
@@ -148,7 +148,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
public:
explicit underflow_error(const string& __arg);
- virtual ~underflow_error() throw();
+ virtual ~underflow_error() _GLIBCXX_USE_NOEXCEPT;
};
// @} group exceptions
diff --git a/libstdc++-v3/include/std/streambuf b/libstdc++-v3/include/std/streambuf
index b46efec460..535088068e 100644
--- a/libstdc++-v3/include/std/streambuf
+++ b/libstdc++-v3/include/std/streambuf
@@ -1,7 +1,7 @@
// Stream buffer classes -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// 2006, 2007, 2008, 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -171,20 +171,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2);
protected:
- //@{
- /**
+ /*
* This is based on _IO_FILE, just reordered to be more consistent,
* and is intended to be the most minimal abstraction for an
* internal buffer.
* - get == input == read
* - put == output == write
*/
- char_type* _M_in_beg; // Start of get area.
- char_type* _M_in_cur; // Current read area.
- char_type* _M_in_end; // End of get area.
- char_type* _M_out_beg; // Start of put area.
- char_type* _M_out_cur; // Current put area.
- char_type* _M_out_end; // End of put area.
+ char_type* _M_in_beg; ///< Start of get area.
+ char_type* _M_in_cur; ///< Current read area.
+ char_type* _M_in_end; ///< End of get area.
+ char_type* _M_out_beg; ///< Start of put area.
+ char_type* _M_out_cur; ///< Current put area.
+ char_type* _M_out_end; ///< End of put area.
/// Current locale setting.
locale _M_buf_locale;
@@ -198,13 +197,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.5.2.2.1] locales
/**
* @brief Entry point for imbue().
- * @param loc The new locale.
+ * @param __loc The new locale.
* @return The previous locale.
*
- * Calls the derived imbue(loc).
+ * Calls the derived imbue(__loc).
*/
locale
- pubimbue(const locale &__loc)
+ pubimbue(const locale& __loc)
{
locale __tmp(this->getloc());
this->imbue(__loc);
@@ -237,16 +236,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pubsetbuf(char_type* __s, streamsize __n)
{ return this->setbuf(__s, __n); }
+ /**
+ * @brief Alters the stream position.
+ * @param __off Offset.
+ * @param __way Value for ios_base::seekdir.
+ * @param __mode Value for ios_base::openmode.
+ *
+ * Calls virtual seekoff function.
+ */
pos_type
pubseekoff(off_type __off, ios_base::seekdir __way,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return this->seekoff(__off, __way, __mode); }
+ /**
+ * @brief Alters the stream position.
+ * @param __sp Position
+ * @param __mode Value for ios_base::openmode.
+ *
+ * Calls virtual seekpos function.
+ */
pos_type
pubseekpos(pos_type __sp,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return this->seekpos(__sp, __mode); }
+ /**
+ * @brief Calls virtual sync function.
+ */
int
pubsync() { return this->sync(); }
//@}
@@ -327,11 +344,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Entry point for xsgetn.
- * @param s A buffer area.
- * @param n A count.
+ * @param __s A buffer area.
+ * @param __n A count.
*
- * Returns xsgetn(s,n). The effect is to fill @a s[0] through
- * @a s[n-1] with characters from the input sequence, if possible.
+ * Returns xsgetn(__s,__n). The effect is to fill @a __s[0] through
+ * @a __s[__n-1] with characters from the input sequence, if possible.
*/
streamsize
sgetn(char_type* __s, streamsize __n)
@@ -340,13 +357,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.5.2.2.4] putback
/**
* @brief Pushing characters back into the input stream.
- * @param c The character to push back.
+ * @param __c The character to push back.
* @return The previous character, if possible.
*
- * Similar to sungetc(), but @a c is pushed onto the stream
+ * Similar to sungetc(), but @a __c is pushed onto the stream
* instead of <em>the previous character.</em> If successful,
* the next character fetched from the input stream will be @a
- * c.
+ * __c.
*/
int_type
sputbackc(char_type __c)
@@ -390,15 +407,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.5.2.2.5] put area
/**
* @brief Entry point for all single-character output functions.
- * @param c A character to output.
- * @return @a c, if possible.
+ * @param __c A character to output.
+ * @return @a __c, if possible.
*
* One of two public output functions.
*
* If a write position is available for the output sequence (i.e.,
- * the buffer is not full), stores @a c in that position, increments
- * the position, and returns @c traits::to_int_type(c). If a write
- * position is not available, returns @c overflow(c).
+ * the buffer is not full), stores @a __c in that position, increments
+ * the position, and returns @c traits::to_int_type(__c). If a write
+ * position is not available, returns @c overflow(__c).
*/
int_type
sputc(char_type __c)
@@ -417,14 +434,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Entry point for all single-character output functions.
- * @param s A buffer read area.
- * @param n A count.
+ * @param __s A buffer read area.
+ * @param __n A count.
*
* One of two public output functions.
*
*
- * Returns xsputn(s,n). The effect is to write @a s[0] through
- * @a s[n-1] to the output sequence, if possible.
+ * Returns xsputn(__s,__n). The effect is to write @a __s[0] through
+ * @a __s[__n-1] to the output sequence, if possible.
*/
streamsize
sputn(const char_type* __s, streamsize __n)
@@ -470,7 +487,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Moving the read position.
- * @param n The delta by which to move.
+ * @param __n The delta by which to move.
*
* This just advances the read position without returning any data.
*/
@@ -479,11 +496,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting the three read area pointers.
- * @param gbeg A pointer.
- * @param gnext A pointer.
- * @param gend A pointer.
- * @post @a gbeg == @c eback(), @a gnext == @c gptr(), and
- * @a gend == @c egptr()
+ * @param __gbeg A pointer.
+ * @param __gnext A pointer.
+ * @param __gend A pointer.
+ * @post @a __gbeg == @c eback(), @a __gnext == @c gptr(), and
+ * @a __gend == @c egptr()
*/
void
setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
@@ -517,7 +534,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Moving the write position.
- * @param n The delta by which to move.
+ * @param __n The delta by which to move.
*
* This just advances the write position without returning any data.
*/
@@ -526,10 +543,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Setting the three write area pointers.
- * @param pbeg A pointer.
- * @param pend A pointer.
- * @post @a pbeg == @c pbase(), @a pbeg == @c pptr(), and
- * @a pend == @c epptr()
+ * @param __pbeg A pointer.
+ * @param __pend A pointer.
+ * @post @a __pbeg == @c pbase(), @a __pbeg == @c pptr(), and
+ * @a __pend == @c epptr()
*/
void
setp(char_type* __pbeg, char_type* __pend)
@@ -542,7 +559,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.5.2.4.1] locales
/**
* @brief Changes translations.
- * @param loc A new locale.
+ * @param __loc A new locale.
*
* Translations done during I/O which depend on the current
* locale are changed by this call. The standard adds,
@@ -553,7 +570,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @note Base class version does nothing.
*/
virtual void
- imbue(const locale&)
+ imbue(const locale& __loc)
{ }
// [27.5.2.4.2] buffer management and positioning
@@ -630,12 +647,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Multiple character extraction.
- * @param s A buffer area.
- * @param n Maximum number of characters to assign.
+ * @param __s A buffer area.
+ * @param __n Maximum number of characters to assign.
* @return The number of characters assigned.
*
- * Fills @a s[0] through @a s[n-1] with characters from the input
- * sequence, as if by @c sbumpc(). Stops when either @a n characters
+ * Fills @a __s[0] through @a __s[__n-1] with characters from the input
+ * sequence, as if by @c sbumpc(). Stops when either @a __n characters
* have been copied, or when @c traits::eof() would be copied.
*
* It is expected that derived classes provide a more efficient
@@ -693,7 +710,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// [27.5.2.4.4] putback
/**
* @brief Tries to back up the input sequence.
- * @param c The character to be inserted back into the sequence.
+ * @param __c The character to be inserted back into the sequence.
* @return eof() on failure, <em>some other value</em> on success
* @post The constraints of @c gptr(), @c eback(), and @c pptr()
* are the same as for @c underflow().
@@ -701,17 +718,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @note Base class version does nothing, returns eof().
*/
virtual int_type
- pbackfail(int_type /* __c */ = traits_type::eof())
+ pbackfail(int_type __c = traits_type::eof())
{ return traits_type::eof(); }
// Put area:
/**
* @brief Multiple character insertion.
- * @param s A buffer area.
- * @param n Maximum number of characters to write.
+ * @param __s A buffer area.
+ * @param __n Maximum number of characters to write.
* @return The number of characters written.
*
- * Writes @a s[0] through @a s[n-1] to the output sequence, as if
+ * Writes @a __s[0] through @a __s[__n-1] to the output sequence, as if
* by @c sputc(). Stops when either @a n characters have been
* copied, or when @c sputc() would return @c traits::eof().
*
@@ -724,9 +741,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Consumes data from the buffer; writes to the
* controlled sequence.
- * @param c An additional character to consume.
+ * @param __c An additional character to consume.
* @return eof() to indicate failure, something else (usually
- * @a c, or not_eof())
+ * @a __c, or not_eof())
*
* Informally, this function is called when the output buffer
* is full (or does not exist, as buffering need not actually
@@ -734,7 +751,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* <em>some effect</em> on the controlled sequence.
* (Typically, the buffer is written out to the sequence
* verbatim.) In either case, the character @a c is also
- * written out, if @a c is not @c eof().
+ * written out, if @a __c is not @c eof().
*
* For a formal definition of this function, see a good text
* such as Langer & Kreft, or [27.5.2.4.5]/3-7.
@@ -745,7 +762,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @note Base class version does nothing, returns eof().
*/
virtual int_type
- overflow(int_type /* __c */ = traits_type::eof())
+ overflow(int_type __c = traits_type::eof())
{ return traits_type::eof(); }
#if _GLIBCXX_USE_DEPRECATED
diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error
index da09a75882..129cbeefe5 100644
--- a/libstdc++-v3/include/std/system_error
+++ b/libstdc++-v3/include/std/system_error
@@ -66,47 +66,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class error_category
{
protected:
- error_category();
+ error_category() noexcept;
public:
- virtual ~error_category();
+ virtual ~error_category() noexcept;
error_category(const error_category&) = delete;
error_category& operator=(const error_category&) = delete;
virtual const char*
- name() const = 0;
+ name() const noexcept = 0;
virtual string
message(int) const = 0;
virtual error_condition
- default_error_condition(int __i) const;
+ default_error_condition(int __i) const noexcept;
virtual bool
- equivalent(int __i, const error_condition& __cond) const;
+ equivalent(int __i, const error_condition& __cond) const noexcept;
virtual bool
- equivalent(const error_code& __code, int __i) const;
+ equivalent(const error_code& __code, int __i) const noexcept;
bool
- operator<(const error_category& __other) const
+ operator<(const error_category& __other) const noexcept
{ return less<const error_category*>()(this, &__other); }
bool
- operator==(const error_category& __other) const
+ operator==(const error_category& __other) const noexcept
{ return this == &__other; }
bool
- operator!=(const error_category& __other) const
+ operator!=(const error_category& __other) const noexcept
{ return this != &__other; }
};
// DR 890.
- _GLIBCXX_CONST const error_category& system_category() throw();
- _GLIBCXX_CONST const error_category& generic_category() throw();
+ _GLIBCXX_CONST const error_category& system_category() noexcept;
+ _GLIBCXX_CONST const error_category& generic_category() noexcept;
- error_code make_error_code(errc);
+ error_code make_error_code(errc) noexcept;
template<typename _Tp>
struct hash;
@@ -115,49 +115,49 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Implementation-specific error identification
struct error_code
{
- error_code()
+ error_code() noexcept
: _M_value(0), _M_cat(&system_category()) { }
- error_code(int __v, const error_category& __cat)
+ error_code(int __v, const error_category& __cat) noexcept
: _M_value(__v), _M_cat(&__cat) { }
- template<typename _ErrorCodeEnum>
- error_code(_ErrorCodeEnum __e,
- typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type* = 0)
+ template<typename _ErrorCodeEnum, typename = typename
+ enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type>
+ error_code(_ErrorCodeEnum __e) noexcept
{ *this = make_error_code(__e); }
void
- assign(int __v, const error_category& __cat)
+ assign(int __v, const error_category& __cat) noexcept
{
_M_value = __v;
_M_cat = &__cat;
}
void
- clear()
+ clear() noexcept
{ assign(0, system_category()); }
// DR 804.
template<typename _ErrorCodeEnum>
typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,
error_code&>::type
- operator=(_ErrorCodeEnum __e)
+ operator=(_ErrorCodeEnum __e) noexcept
{ return *this = make_error_code(__e); }
int
- value() const { return _M_value; }
+ value() const noexcept { return _M_value; }
const error_category&
- category() const { return *_M_cat; }
+ category() const noexcept { return *_M_cat; }
error_condition
- default_error_condition() const;
+ default_error_condition() const noexcept;
string
message() const
{ return category().message(value()); }
- explicit operator bool() const
+ explicit operator bool() const noexcept
{ return _M_value != 0 ? true : false; }
// DR 804.
@@ -170,11 +170,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 19.4.2.6 non-member functions
inline error_code
- make_error_code(errc __e)
+ make_error_code(errc __e) noexcept
{ return error_code(static_cast<int>(__e), generic_category()); }
inline bool
- operator<(const error_code& __lhs, const error_code& __rhs)
+ operator<(const error_code& __lhs, const error_code& __rhs) noexcept
{
return (__lhs.category() < __rhs.category()
|| (__lhs.category() == __rhs.category()
@@ -186,26 +186,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
{ return (__os << __e.category().name() << ':' << __e.value()); }
- error_condition make_error_condition(errc);
+ error_condition make_error_condition(errc) noexcept;
/// error_condition
// Portable error identification
struct error_condition
{
- error_condition()
+ error_condition() noexcept
: _M_value(0), _M_cat(&generic_category()) { }
- error_condition(int __v, const error_category& __cat)
+ error_condition(int __v, const error_category& __cat) noexcept
: _M_value(__v), _M_cat(&__cat) { }
- template<typename _ErrorConditionEnum>
- error_condition(_ErrorConditionEnum __e,
- typename enable_if<is_error_condition_enum
- <_ErrorConditionEnum>::value>::type* = 0)
+ template<typename _ErrorConditionEnum, typename = typename
+ enable_if<is_error_condition_enum<_ErrorConditionEnum>::value>::type>
+ error_condition(_ErrorConditionEnum __e) noexcept
{ *this = make_error_condition(__e); }
void
- assign(int __v, const error_category& __cat)
+ assign(int __v, const error_category& __cat) noexcept
{
_M_value = __v;
_M_cat = &__cat;
@@ -215,25 +214,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ErrorConditionEnum>
typename enable_if<is_error_condition_enum
<_ErrorConditionEnum>::value, error_condition&>::type
- operator=(_ErrorConditionEnum __e)
+ operator=(_ErrorConditionEnum __e) noexcept
{ return *this = make_error_condition(__e); }
void
- clear()
+ clear() noexcept
{ assign(0, generic_category()); }
// 19.4.3.4 observers
- int
- value() const { return _M_value; }
+ int
+ value() const noexcept { return _M_value; }
const error_category&
- category() const { return *_M_cat; }
+ category() const noexcept { return *_M_cat; }
string
message() const
{ return category().message(value()); }
- explicit operator bool() const
+ explicit operator bool() const noexcept
{ return _M_value != 0 ? true : false; }
// DR 804.
@@ -244,11 +243,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 19.4.3.6 non-member functions
inline error_condition
- make_error_condition(errc __e)
+ make_error_condition(errc __e) noexcept
{ return error_condition(static_cast<int>(__e), generic_category()); }
inline bool
- operator<(const error_condition& __lhs, const error_condition& __rhs)
+ operator<(const error_condition& __lhs,
+ const error_condition& __rhs) noexcept
{
return (__lhs.category() < __rhs.category()
|| (__lhs.category() == __rhs.category()
@@ -257,45 +257,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 19.4.4 Comparison operators
inline bool
- operator==(const error_code& __lhs, const error_code& __rhs)
+ operator==(const error_code& __lhs, const error_code& __rhs) noexcept
{ return (__lhs.category() == __rhs.category()
&& __lhs.value() == __rhs.value()); }
inline bool
- operator==(const error_code& __lhs, const error_condition& __rhs)
+ operator==(const error_code& __lhs, const error_condition& __rhs) noexcept
{
return (__lhs.category().equivalent(__lhs.value(), __rhs)
|| __rhs.category().equivalent(__lhs, __rhs.value()));
}
inline bool
- operator==(const error_condition& __lhs, const error_code& __rhs)
+ operator==(const error_condition& __lhs, const error_code& __rhs) noexcept
{
return (__rhs.category().equivalent(__rhs.value(), __lhs)
|| __lhs.category().equivalent(__rhs, __lhs.value()));
}
inline bool
- operator==(const error_condition& __lhs, const error_condition& __rhs)
+ operator==(const error_condition& __lhs,
+ const error_condition& __rhs) noexcept
{
return (__lhs.category() == __rhs.category()
&& __lhs.value() == __rhs.value());
}
inline bool
- operator!=(const error_code& __lhs, const error_code& __rhs)
+ operator!=(const error_code& __lhs, const error_code& __rhs) noexcept
{ return !(__lhs == __rhs); }
inline bool
- operator!=(const error_code& __lhs, const error_condition& __rhs)
+ operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept
{ return !(__lhs == __rhs); }
inline bool
- operator!=(const error_condition& __lhs, const error_code& __rhs)
+ operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept
{ return !(__lhs == __rhs); }
inline bool
- operator!=(const error_condition& __lhs, const error_condition& __rhs)
+ operator!=(const error_condition& __lhs,
+ const error_condition& __rhs) noexcept
{ return !(__lhs == __rhs); }
@@ -335,10 +337,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: runtime_error(__what + ": " + error_code(__v, __ecat).message()),
_M_code(__v, __ecat) { }
- virtual ~system_error() throw();
+ virtual ~system_error() noexcept;
const error_code&
- code() const throw() { return _M_code; }
+ code() const noexcept { return _M_code; }
};
_GLIBCXX_END_NAMESPACE_VERSION
@@ -359,7 +361,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, error_code>
{
size_t
- operator()(const error_code& __e) const
+ operator()(const error_code& __e) const noexcept
{
const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread
index de58e81410..f6b19ab632 100644
--- a/libstdc++-v3/include/std/thread
+++ b/libstdc++-v3/include/std/thread
@@ -1,6 +1,6 @@
// <thread> -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,8 +38,6 @@
#include <chrono>
#include <functional>
#include <memory>
-#include <mutex>
-#include <condition_variable>
#include <bits/functexcept.h>
#include <bits/functional_hash.h>
#include <bits/gthr.h>
@@ -72,7 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
native_handle_type _M_thread;
public:
- id() : _M_thread() { }
+ id() noexcept : _M_thread() { }
explicit
id(native_handle_type __id) : _M_thread(__id) { }
@@ -82,11 +80,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend class hash<thread::id>;
friend bool
- operator==(thread::id __x, thread::id __y)
+ operator==(thread::id __x, thread::id __y) noexcept
{ return __gthread_equal(__x._M_thread, __y._M_thread); }
friend bool
- operator<(thread::id __x, thread::id __y)
+ operator<(thread::id __x, thread::id __y) noexcept
{ return __x._M_thread < __y._M_thread; }
template<class _CharT, class _Traits>
@@ -121,18 +119,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
id _M_id;
public:
- thread() = default;
+ thread() noexcept = default;
thread(thread&) = delete;
thread(const thread&) = delete;
- thread(thread&& __t)
+ thread(thread&& __t) noexcept
{ swap(__t); }
template<typename _Callable, typename... _Args>
explicit
thread(_Callable&& __f, _Args&&... __args)
{
- _M_start_thread(_M_make_routine(std::bind<void>(
+ _M_start_thread(_M_make_routine(std::__bind_simple(
std::forward<_Callable>(__f),
std::forward<_Args>(__args)...)));
}
@@ -145,7 +143,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
thread& operator=(const thread&) = delete;
- thread& operator=(thread&& __t)
+ thread& operator=(thread&& __t) noexcept
{
if (joinable())
std::terminate();
@@ -154,11 +152,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
void
- swap(thread& __t)
+ swap(thread& __t) noexcept
{ std::swap(_M_id, __t._M_id); }
bool
- joinable() const
+ joinable() const noexcept
{ return !(_M_id == id()); }
void
@@ -168,7 +166,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
detach();
thread::id
- get_id() const
+ get_id() const noexcept
{ return _M_id; }
/** @pre thread is joinable
@@ -179,8 +177,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Returns a value that hints at the number of hardware thread contexts.
static unsigned int
- hardware_concurrency()
- { return 0; }
+ hardware_concurrency() noexcept;
private:
void
@@ -191,30 +188,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_make_routine(_Callable&& __f)
{
// Create and allocate full data structure, not base.
- return make_shared<_Impl<_Callable>>(std::forward<_Callable>(__f));
+ return std::make_shared<_Impl<_Callable>>(std::forward<_Callable>(__f));
}
};
inline thread::_Impl_base::~_Impl_base() = default;
inline void
- swap(thread& __x, thread& __y)
+ swap(thread& __x, thread& __y) noexcept
{ __x.swap(__y); }
inline bool
- operator!=(thread::id __x, thread::id __y)
+ operator!=(thread::id __x, thread::id __y) noexcept
{ return !(__x == __y); }
inline bool
- operator<=(thread::id __x, thread::id __y)
+ operator<=(thread::id __x, thread::id __y) noexcept
{ return !(__y < __x); }
inline bool
- operator>(thread::id __x, thread::id __y)
+ operator>(thread::id __x, thread::id __y) noexcept
{ return __y < __x; }
inline bool
- operator>=(thread::id __x, thread::id __y)
+ operator>=(thread::id __x, thread::id __y) noexcept
{ return !(__x < __y); }
// DR 889.
@@ -224,7 +221,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public __hash_base<size_t, thread::id>
{
size_t
- operator()(const thread::id& __id) const
+ operator()(const thread::id& __id) const noexcept
{ return std::_Hash_impl::hash(__id._M_thread); }
};
@@ -250,22 +247,16 @@ _GLIBCXX_END_NAMESPACE_VERSION
/// get_id
inline thread::id
- get_id() { return thread::id(__gthread_self()); }
+ get_id() noexcept { return thread::id(__gthread_self()); }
#ifdef _GLIBCXX_USE_SCHED_YIELD
/// yield
inline void
- yield()
+ yield() noexcept
{ __gthread_yield(); }
#endif
#ifdef _GLIBCXX_USE_NANOSLEEP
- /// sleep_until
- template<typename _Clock, typename _Duration>
- inline void
- sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
- { sleep_for(__atime - _Clock::now()); }
-
/// sleep_for
template<typename _Rep, typename _Period>
inline void
@@ -285,6 +276,12 @@ _GLIBCXX_END_NAMESPACE_VERSION
::nanosleep(&__ts, 0);
}
+
+ /// sleep_until
+ template<typename _Clock, typename _Duration>
+ inline void
+ sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
+ { sleep_for(__atime - _Clock::now()); }
#endif
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index fb452aeb43..4d4691f104 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -36,6 +36,7 @@
#else
#include <utility>
+#include <bits/uses_allocator.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -59,7 +60,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __add_ref<_Tp&>
{ typedef _Tp& type; };
- template<std::size_t _Idx, typename _Head, bool _IsEmpty>
+ // Adds an rvalue reference to a non-reference type.
+ template<typename _Tp>
+ struct __add_r_ref
+ { typedef _Tp&& type; };
+
+ template<typename _Tp>
+ struct __add_r_ref<_Tp&>
+ { typedef _Tp& type; };
+
+ template<std::size_t _Idx, typename _Head, bool _IsEmptyNotFinal>
struct _Head_base;
template<std::size_t _Idx, typename _Head>
@@ -72,19 +82,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr _Head_base(const _Head& __h)
: _Head(__h) { }
- template<typename _UHead>
- _Head_base(_UHead&& __h)
+ template<typename _UHead, typename = typename
+ enable_if<!is_convertible<_UHead,
+ __uses_alloc_base>::value>::type>
+ constexpr _Head_base(_UHead&& __h)
: _Head(std::forward<_UHead>(__h)) { }
- _Head& _M_head() { return *this; }
- const _Head& _M_head() const { return *this; }
-
- void
- _M_swap_impl(_Head& __h)
- {
- using std::swap;
- swap(__h, _M_head());
- }
+ _Head_base(__uses_alloc0)
+ : _Head() { }
+
+ template<typename _Alloc>
+ _Head_base(__uses_alloc1<_Alloc> __a)
+ : _Head(allocator_arg, *__a._M_a) { }
+
+ template<typename _Alloc>
+ _Head_base(__uses_alloc2<_Alloc> __a)
+ : _Head(*__a._M_a) { }
+
+ template<typename _UHead>
+ _Head_base(__uses_alloc0, _UHead&& __uhead)
+ : _Head(std::forward<_UHead>(__uhead)) { }
+
+ template<typename _Alloc, typename _UHead>
+ _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+ : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { }
+
+ template<typename _Alloc, typename _UHead>
+ _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+ : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { }
+
+ static constexpr _Head&
+ _M_head(_Head_base& __b) noexcept { return __b; }
+
+ static constexpr const _Head&
+ _M_head(const _Head_base& __b) noexcept { return __b; }
};
template<std::size_t _Idx, typename _Head>
@@ -96,21 +127,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr _Head_base(const _Head& __h)
: _M_head_impl(__h) { }
- template<typename _UHead>
- _Head_base(_UHead&& __h)
+ template<typename _UHead, typename = typename
+ enable_if<!is_convertible<_UHead,
+ __uses_alloc_base>::value>::type>
+ constexpr _Head_base(_UHead&& __h)
: _M_head_impl(std::forward<_UHead>(__h)) { }
- _Head& _M_head() { return _M_head_impl; }
- const _Head& _M_head() const { return _M_head_impl; }
+ _Head_base(__uses_alloc0)
+ : _M_head_impl() { }
- void
- _M_swap_impl(_Head& __h)
- {
- using std::swap;
- swap(__h, _M_head());
- }
+ template<typename _Alloc>
+ _Head_base(__uses_alloc1<_Alloc> __a)
+ : _M_head_impl(allocator_arg, *__a._M_a) { }
+
+ template<typename _Alloc>
+ _Head_base(__uses_alloc2<_Alloc> __a)
+ : _M_head_impl(*__a._M_a) { }
+
+ template<typename _UHead>
+ _Head_base(__uses_alloc0, _UHead&& __uhead)
+ : _M_head_impl(std::forward<_UHead>(__uhead)) { }
- _Head _M_head_impl;
+ template<typename _Alloc, typename _UHead>
+ _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+ : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
+ { }
+
+ template<typename _Alloc, typename _UHead>
+ _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+ : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }
+
+ static constexpr _Head&
+ _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }
+
+ static constexpr const _Head&
+ _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }
+
+ _Head _M_head_impl;
};
/**
@@ -130,11 +183,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<std::size_t _Idx>
struct _Tuple_impl<_Idx>
- {
+ {
+ template<std::size_t, typename...> friend class _Tuple_impl;
+
+ _Tuple_impl() = default;
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t, const _Alloc&) { }
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t, const _Alloc&, const _Tuple_impl&) { }
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t, const _Alloc&, _Tuple_impl&&) { }
+
protected:
- void _M_swap_impl(_Tuple_impl&) { /* no-op */ }
+ void _M_swap(_Tuple_impl&) noexcept { /* no-op */ }
};
+ // Use the Empty Base-class Optimization for empty, non-final types.
+ template<typename _Tp>
+ using __empty_not_final
+ = typename conditional<__is_final(_Tp), false_type, is_empty<_Tp>>::type;
+
/**
* Recursive tuple implementation. Here we store the @c Head element
* and derive from a @c Tuple_impl containing the remaining elements
@@ -143,16 +214,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<std::size_t _Idx, typename _Head, typename... _Tail>
struct _Tuple_impl<_Idx, _Head, _Tail...>
: public _Tuple_impl<_Idx + 1, _Tail...>,
- private _Head_base<_Idx, _Head, std::is_empty<_Head>::value>
+ private _Head_base<_Idx, _Head, __empty_not_final<_Head>::value>
{
+ template<std::size_t, typename...> friend class _Tuple_impl;
+
typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
- typedef _Head_base<_Idx, _Head, std::is_empty<_Head>::value> _Base;
+ typedef _Head_base<_Idx, _Head, __empty_not_final<_Head>::value> _Base;
- _Head& _M_head() { return _Base::_M_head(); }
- const _Head& _M_head() const { return _Base::_M_head(); }
+ static constexpr _Head&
+ _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
- _Inherited& _M_tail() { return *this; }
- const _Inherited& _M_tail() const { return *this; }
+ static constexpr const _Head&
+ _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+
+ static constexpr _Inherited&
+ _M_tail(_Tuple_impl& __t) noexcept { return __t; }
+
+ static constexpr const _Inherited&
+ _M_tail(const _Tuple_impl& __t) noexcept { return __t; }
constexpr _Tuple_impl()
: _Inherited(), _Base() { }
@@ -161,40 +240,99 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr _Tuple_impl(const _Head& __head, const _Tail&... __tail)
: _Inherited(__tail...), _Base(__head) { }
- template<typename _UHead, typename... _UTail>
+ template<typename _UHead, typename... _UTail, typename = typename
+ enable_if<sizeof...(_Tail) == sizeof...(_UTail)>::type>
explicit
- _Tuple_impl(_UHead&& __head, _UTail&&... __tail)
+ constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail)
: _Inherited(std::forward<_UTail>(__tail)...),
_Base(std::forward<_UHead>(__head)) { }
constexpr _Tuple_impl(const _Tuple_impl&) = default;
+ constexpr
_Tuple_impl(_Tuple_impl&& __in)
- : _Inherited(std::move(__in._M_tail())),
- _Base(std::forward<_Head>(__in._M_head())) { }
+ noexcept(__and_<is_nothrow_move_constructible<_Head>,
+ is_nothrow_move_constructible<_Inherited>>::value)
+ : _Inherited(std::move(_M_tail(__in))),
+ _Base(std::forward<_Head>(_M_head(__in))) { }
template<typename... _UElements>
- _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
- : _Inherited(__in._M_tail()), _Base(__in._M_head()) { }
+ constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
+ : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
+ _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { }
template<typename _UHead, typename... _UTails>
- _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
- : _Inherited(std::move(__in._M_tail())),
- _Base(std::forward<_UHead>(__in._M_head())) { }
+ constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+ : _Inherited(std::move
+ (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+ _Base(std::forward<_UHead>
+ (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { }
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
+ : _Inherited(__tag, __a),
+ _Base(__use_alloc<_Head>(__a)) { }
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+ const _Head& __head, const _Tail&... __tail)
+ : _Inherited(__tag, __a, __tail...),
+ _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { }
+
+ template<typename _Alloc, typename _UHead, typename... _UTail,
+ typename = typename enable_if<sizeof...(_Tail)
+ == sizeof...(_UTail)>::type>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+ _UHead&& __head, _UTail&&... __tail)
+ : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...),
+ _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+ std::forward<_UHead>(__head)) { }
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+ const _Tuple_impl& __in)
+ : _Inherited(__tag, __a, _M_tail(__in)),
+ _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { }
+
+ template<typename _Alloc>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+ _Tuple_impl&& __in)
+ : _Inherited(__tag, __a, std::move(_M_tail(__in))),
+ _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+ std::forward<_Head>(_M_head(__in))) { }
+
+ template<typename _Alloc, typename... _UElements>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+ const _Tuple_impl<_Idx, _UElements...>& __in)
+ : _Inherited(__tag, __a,
+ _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
+ _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+ _Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { }
+
+ template<typename _Alloc, typename _UHead, typename... _UTails>
+ _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+ _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+ : _Inherited(__tag, __a, std::move
+ (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+ _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+ std::forward<_UHead>
+ (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { }
_Tuple_impl&
operator=(const _Tuple_impl& __in)
{
- _M_head() = __in._M_head();
- _M_tail() = __in._M_tail();
+ _M_head(*this) = _M_head(__in);
+ _M_tail(*this) = _M_tail(__in);
return *this;
}
_Tuple_impl&
operator=(_Tuple_impl&& __in)
+ noexcept(__and_<is_nothrow_move_assignable<_Head>,
+ is_nothrow_move_assignable<_Inherited>>::value)
{
- _M_head() = std::forward<_Head>(__in._M_head());
- _M_tail() = std::move(__in._M_tail());
+ _M_head(*this) = std::forward<_Head>(_M_head(__in));
+ _M_tail(*this) = std::move(_M_tail(__in));
return *this;
}
@@ -202,8 +340,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tuple_impl&
operator=(const _Tuple_impl<_Idx, _UElements...>& __in)
{
- _M_head() = __in._M_head();
- _M_tail() = __in._M_tail();
+ _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in);
+ _M_tail(*this) = _Tuple_impl<_Idx, _UElements...>::_M_tail(__in);
return *this;
}
@@ -211,21 +349,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tuple_impl&
operator=(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
{
- _M_head() = std::forward<_UHead>(__in._M_head());
- _M_tail() = std::move(__in._M_tail());
+ _M_head(*this) = std::forward<_UHead>
+ (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in));
+ _M_tail(*this) = std::move
+ (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in));
return *this;
}
protected:
void
- _M_swap_impl(_Tuple_impl& __in)
+ _M_swap(_Tuple_impl& __in)
+ noexcept(noexcept(swap(std::declval<_Head&>(),
+ std::declval<_Head&>()))
+ && noexcept(_M_tail(__in)._M_swap(_M_tail(__in))))
{
- _Base::_M_swap_impl(__in._M_head());
- _Inherited::_M_swap_impl(__in._M_tail());
+ using std::swap;
+ swap(_M_head(*this), _M_head(__in));
+ _Inherited::_M_swap(_M_tail(__in));
}
};
- /// tuple
+ /// Primary class template, tuple
template<typename... _Elements>
class tuple : public _Tuple_impl<0, _Elements...>
{
@@ -240,30 +384,74 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: _Inherited(__elements...) { }
template<typename... _UElements, typename = typename
- std::enable_if<sizeof...(_UElements)
- == sizeof...(_Elements)>::type>
- explicit
- tuple(_UElements&&... __elements)
+ enable_if<__and_<is_convertible<_UElements,
+ _Elements>...>::value>::type>
+ explicit
+ constexpr tuple(_UElements&&... __elements)
: _Inherited(std::forward<_UElements>(__elements)...) { }
constexpr tuple(const tuple&) = default;
- tuple(tuple&& __in)
- : _Inherited(static_cast<_Inherited&&>(__in)) { }
+ constexpr tuple(tuple&&) = default;
template<typename... _UElements, typename = typename
- std::enable_if<sizeof...(_UElements)
- == sizeof...(_Elements)>::type>
- tuple(const tuple<_UElements...>& __in)
+ enable_if<__and_<is_convertible<const _UElements&,
+ _Elements>...>::value>::type>
+ constexpr tuple(const tuple<_UElements...>& __in)
: _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
{ }
template<typename... _UElements, typename = typename
- std::enable_if<sizeof...(_UElements)
- == sizeof...(_Elements)>::type>
- tuple(tuple<_UElements...>&& __in)
+ enable_if<__and_<is_convertible<_UElements,
+ _Elements>...>::value>::type>
+ constexpr tuple(tuple<_UElements...>&& __in)
: _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
+ // Allocator-extended constructors.
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a)
+ : _Inherited(__tag, __a) { }
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ const _Elements&... __elements)
+ : _Inherited(__tag, __a, __elements...) { }
+
+ template<typename _Alloc, typename... _UElements, typename = typename
+ enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ _UElements&&... __elements)
+ : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
+ { }
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
+ : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
+ : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
+
+ template<typename _Alloc, typename... _UElements, typename = typename
+ enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ const tuple<_UElements...>& __in)
+ : _Inherited(__tag, __a,
+ static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+ { }
+
+ template<typename _Alloc, typename... _UElements, typename = typename
+ enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ tuple<_UElements...>&& __in)
+ : _Inherited(__tag, __a,
+ static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
+ { }
+
tuple&
operator=(const tuple& __in)
{
@@ -273,14 +461,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
tuple&
operator=(tuple&& __in)
+ noexcept(is_nothrow_move_assignable<_Inherited>::value)
{
static_cast<_Inherited&>(*this) = std::move(__in);
return *this;
}
template<typename... _UElements, typename = typename
- std::enable_if<sizeof...(_UElements)
- == sizeof...(_Elements)>::type>
+ enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
tuple&
operator=(const tuple<_UElements...>& __in)
{
@@ -289,8 +478,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename... _UElements, typename = typename
- std::enable_if<sizeof...(_UElements)
- == sizeof...(_Elements)>::type>
+ enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
tuple&
operator=(tuple<_UElements...>&& __in)
{
@@ -300,17 +489,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
swap(tuple& __in)
- { _Inherited::_M_swap_impl(__in); }
+ noexcept(noexcept(__in._M_swap(__in)))
+ { _Inherited::_M_swap(__in); }
};
+ // Explicit specialization, zero-element tuple.
template<>
class tuple<>
{
public:
- void swap(tuple&) { /* no-op */ }
+ void swap(tuple&) noexcept { /* no-op */ }
};
- /// tuple (2-element), with construction and assignment from a pair.
+ /// Partial specialization, 2-element tuple.
+ /// Includes construction and assignment from a pair.
template<typename _T1, typename _T2>
class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2>
{
@@ -324,33 +516,88 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr tuple(const _T1& __a1, const _T2& __a2)
: _Inherited(__a1, __a2) { }
- template<typename _U1, typename _U2>
+ template<typename _U1, typename _U2, typename = typename
+ enable_if<__and_<is_convertible<_U1, _T1>,
+ is_convertible<_U2, _T2>>::value>::type>
explicit
- tuple(_U1&& __a1, _U2&& __a2)
+ constexpr tuple(_U1&& __a1, _U2&& __a2)
: _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
constexpr tuple(const tuple&) = default;
- tuple(tuple&& __in)
- : _Inherited(static_cast<_Inherited&&>(__in)) { }
+ constexpr tuple(tuple&&) = default;
- template<typename _U1, typename _U2>
- tuple(const tuple<_U1, _U2>& __in)
+ template<typename _U1, typename _U2, typename = typename
+ enable_if<__and_<is_convertible<const _U1&, _T1>,
+ is_convertible<const _U2&, _T2>>::value>::type>
+ constexpr tuple(const tuple<_U1, _U2>& __in)
: _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
- template<typename _U1, typename _U2>
- tuple(tuple<_U1, _U2>&& __in)
+ template<typename _U1, typename _U2, typename = typename
+ enable_if<__and_<is_convertible<_U1, _T1>,
+ is_convertible<_U2, _T2>>::value>::type>
+ constexpr tuple(tuple<_U1, _U2>&& __in)
: _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
- template<typename _U1, typename _U2>
- tuple(const pair<_U1, _U2>& __in)
+ template<typename _U1, typename _U2, typename = typename
+ enable_if<__and_<is_convertible<const _U1&, _T1>,
+ is_convertible<const _U2&, _T2>>::value>::type>
+ constexpr tuple(const pair<_U1, _U2>& __in)
: _Inherited(__in.first, __in.second) { }
- template<typename _U1, typename _U2>
- tuple(pair<_U1, _U2>&& __in)
+ template<typename _U1, typename _U2, typename = typename
+ enable_if<__and_<is_convertible<_U1, _T1>,
+ is_convertible<_U2, _T2>>::value>::type>
+ constexpr tuple(pair<_U1, _U2>&& __in)
: _Inherited(std::forward<_U1>(__in.first),
std::forward<_U2>(__in.second)) { }
+ // Allocator-extended constructors.
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a)
+ : _Inherited(__tag, __a) { }
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ const _T1& __a1, const _T2& __a2)
+ : _Inherited(__tag, __a, __a1, __a2) { }
+
+ template<typename _Alloc, typename _U1, typename _U2>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2)
+ : _Inherited(__tag, __a, std::forward<_U1>(__a1),
+ std::forward<_U2>(__a2)) { }
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
+ : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
+
+ template<typename _Alloc>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
+ : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
+
+ template<typename _Alloc, typename _U1, typename _U2>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ const tuple<_U1, _U2>& __in)
+ : _Inherited(__tag, __a,
+ static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
+ { }
+
+ template<typename _Alloc, typename _U1, typename _U2>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
+ : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
+ { }
+
+ template<typename _Alloc, typename _U1, typename _U2>
+ tuple(allocator_arg_t __tag, const _Alloc& __a,
+ const pair<_U1, _U2>& __in)
+ : _Inherited(__tag, __a, __in.first, __in.second) { }
+
+ template<typename _Alloc, typename _U1, typename _U2>
+ tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
+ : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
+ std::forward<_U2>(__in.second)) { }
+
tuple&
operator=(const tuple& __in)
{
@@ -360,6 +607,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
tuple&
operator=(tuple&& __in)
+ noexcept(is_nothrow_move_assignable<_Inherited>::value)
{
static_cast<_Inherited&>(*this) = std::move(__in);
return *this;
@@ -385,8 +633,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
tuple&
operator=(const pair<_U1, _U2>& __in)
{
- this->_M_head() = __in.first;
- this->_M_tail()._M_head() = __in.second;
+ this->_M_head(*this) = __in.first;
+ this->_M_tail(*this)._M_head(*this) = __in.second;
return *this;
}
@@ -394,86 +642,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
tuple&
operator=(pair<_U1, _U2>&& __in)
{
- this->_M_head() = std::forward<_U1>(__in.first);
- this->_M_tail()._M_head() = std::forward<_U2>(__in.second);
- return *this;
- }
-
- void
- swap(tuple& __in)
- {
- using std::swap;
- swap(this->_M_head(), __in._M_head());
- swap(this->_M_tail()._M_head(), __in._M_tail()._M_head());
- }
- };
-
- /// tuple (1-element).
- template<typename _T1>
- class tuple<_T1> : public _Tuple_impl<0, _T1>
- {
- typedef _Tuple_impl<0, _T1> _Inherited;
-
- public:
- constexpr tuple()
- : _Inherited() { }
-
- explicit
- constexpr tuple(const _T1& __a1)
- : _Inherited(__a1) { }
-
- template<typename _U1, typename = typename
- std::enable_if<std::is_convertible<_U1, _T1>::value>::type>
- explicit
- tuple(_U1&& __a1)
- : _Inherited(std::forward<_U1>(__a1)) { }
-
- constexpr tuple(const tuple&) = default;
-
- tuple(tuple&& __in)
- : _Inherited(static_cast<_Inherited&&>(__in)) { }
-
- template<typename _U1>
- tuple(const tuple<_U1>& __in)
- : _Inherited(static_cast<const _Tuple_impl<0, _U1>&>(__in)) { }
-
- template<typename _U1>
- tuple(tuple<_U1>&& __in)
- : _Inherited(static_cast<_Tuple_impl<0, _U1>&&>(__in)) { }
-
- tuple&
- operator=(const tuple& __in)
- {
- static_cast<_Inherited&>(*this) = __in;
- return *this;
- }
-
- tuple&
- operator=(tuple&& __in)
- {
- static_cast<_Inherited&>(*this) = std::move(__in);
- return *this;
- }
-
- template<typename _U1>
- tuple&
- operator=(const tuple<_U1>& __in)
- {
- static_cast<_Inherited&>(*this) = __in;
- return *this;
- }
-
- template<typename _U1>
- tuple&
- operator=(tuple<_U1>&& __in)
- {
- static_cast<_Inherited&>(*this) = std::move(__in);
+ this->_M_head(*this) = std::forward<_U1>(__in.first);
+ this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second);
return *this;
}
void
swap(tuple& __in)
- { _Inherited::_M_swap_impl(__in); }
+ noexcept(noexcept(__in._M_swap(__in)))
+ { _Inherited::_M_swap(__in); }
};
@@ -498,46 +675,89 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Head type;
};
+ template<std::size_t __i, typename _Tp>
+ struct tuple_element<__i, const _Tp>
+ {
+ typedef typename
+ add_const<typename tuple_element<__i, _Tp>::type>::type type;
+ };
+
+ template<std::size_t __i, typename _Tp>
+ struct tuple_element<__i, volatile _Tp>
+ {
+ typedef typename
+ add_volatile<typename tuple_element<__i, _Tp>::type>::type type;
+ };
+
+ template<std::size_t __i, typename _Tp>
+ struct tuple_element<__i, const volatile _Tp>
+ {
+ typedef typename
+ add_cv<typename tuple_element<__i, _Tp>::type>::type type;
+ };
+
/// Finds the size of a given tuple type.
template<typename _Tp>
struct tuple_size;
- /// class tuple_size
- template<typename... _Elements>
- struct tuple_size<tuple<_Elements...> >
- {
- static const std::size_t value = sizeof...(_Elements);
- };
+ template<typename _Tp>
+ struct tuple_size<const _Tp>
+ : public integral_constant<
+ typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
+ tuple_size<_Tp>::value> { };
+
+ template<typename _Tp>
+ struct tuple_size<volatile _Tp>
+ : public integral_constant<
+ typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
+ tuple_size<_Tp>::value> { };
+ template<typename _Tp>
+ struct tuple_size<const volatile _Tp>
+ : public integral_constant<
+ typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
+ tuple_size<_Tp>::value> { };
+
+ /// class tuple_size
template<typename... _Elements>
- const std::size_t tuple_size<tuple<_Elements...> >::value;
+ struct tuple_size<tuple<_Elements...>>
+ : public integral_constant<std::size_t, sizeof...(_Elements)> { };
template<std::size_t __i, typename _Head, typename... _Tail>
- inline typename __add_ref<_Head>::type
- __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t)
- { return __t._M_head(); }
+ constexpr typename __add_ref<_Head>::type
+ __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+ { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
template<std::size_t __i, typename _Head, typename... _Tail>
- inline typename __add_c_ref<_Head>::type
- __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t)
- { return __t._M_head(); }
+ constexpr typename __add_c_ref<_Head>::type
+ __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+ { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
- // Return a reference (const reference) to the ith element of a tuple.
- // Any const or non-const ref elements are returned with their original type.
+ // Return a reference (const reference, rvalue reference) to the ith element
+ // of a tuple. Any const or non-const ref elements are returned with their
+ // original type.
template<std::size_t __i, typename... _Elements>
- inline typename __add_ref<
- typename tuple_element<__i, tuple<_Elements...> >::type
+ constexpr typename __add_ref<
+ typename tuple_element<__i, tuple<_Elements...>>::type
>::type
- get(tuple<_Elements...>& __t)
+ get(tuple<_Elements...>& __t) noexcept
{ return __get_helper<__i>(__t); }
template<std::size_t __i, typename... _Elements>
- inline typename __add_c_ref<
- typename tuple_element<__i, tuple<_Elements...> >::type
+ constexpr typename __add_c_ref<
+ typename tuple_element<__i, tuple<_Elements...>>::type
>::type
- get(const tuple<_Elements...>& __t)
+ get(const tuple<_Elements...>& __t) noexcept
{ return __get_helper<__i>(__t); }
+ template<std::size_t __i, typename... _Elements>
+ constexpr typename __add_r_ref<
+ typename tuple_element<__i, tuple<_Elements...>>::type
+ >::type
+ get(tuple<_Elements...>&& __t) noexcept
+ { return std::forward<typename tuple_element<__i,
+ tuple<_Elements...>>::type&&>(get<__i>(__t)); }
+
// This class helps construct the various comparison operations on tuples
template<std::size_t __check_equal_size, std::size_t __i, std::size_t __j,
typename _Tp, typename _Up>
@@ -546,13 +766,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<std::size_t __i, std::size_t __j, typename _Tp, typename _Up>
struct __tuple_compare<0, __i, __j, _Tp, _Up>
{
- static bool __eq(const _Tp& __t, const _Up& __u)
+ static bool
+ __eq(const _Tp& __t, const _Up& __u)
{
return (get<__i>(__t) == get<__i>(__u) &&
__tuple_compare<0, __i + 1, __j, _Tp, _Up>::__eq(__t, __u));
}
- static bool __less(const _Tp& __t, const _Up& __u)
+ static bool
+ __less(const _Tp& __t, const _Up& __u)
{
return ((get<__i>(__t) < get<__i>(__u))
|| !(get<__i>(__u) < get<__i>(__t)) &&
@@ -563,11 +785,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<std::size_t __i, typename _Tp, typename _Up>
struct __tuple_compare<0, __i, __i, _Tp, _Up>
{
- static bool __eq(const _Tp&, const _Up&)
- { return true; }
+ static bool
+ __eq(const _Tp&, const _Up&) { return true; }
- static bool __less(const _Tp&, const _Up&)
- { return false; }
+ static bool
+ __less(const _Tp&, const _Up&) { return false; }
};
template<typename... _TElements, typename... _UElements>
@@ -618,7 +840,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// NB: DR 705.
template<typename... _Elements>
- inline tuple<typename __decay_and_strip<_Elements>::__type...>
+ constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
make_tuple(_Elements&&... __args)
{
typedef tuple<typename __decay_and_strip<_Elements>::__type...>
@@ -627,122 +849,199 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename... _Elements>
- inline tuple<_Elements&&...>
- forward_as_tuple(_Elements&&... __args)
+ constexpr tuple<_Elements&&...>
+ forward_as_tuple(_Elements&&... __args) noexcept
{ return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
- template<std::size_t...> struct __index_holder { };
- template<std::size_t __i, typename _IdxHolder, typename... _Elements>
- struct __index_holder_impl;
+ template<typename, std::size_t> struct array;
+
+ template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+ constexpr _Tp& get(array<_Tp, _Nm>&) noexcept;
+
+ template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+ constexpr _Tp&& get(array<_Tp, _Nm>&&) noexcept;
+
+ template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+ constexpr const _Tp& get(const array<_Tp, _Nm>&) noexcept;
+
+ template<typename>
+ struct __is_tuple_like_impl : false_type
+ { };
+
+ template<typename... _Tps>
+ struct __is_tuple_like_impl<tuple<_Tps...>> : true_type
+ { };
+
+ template<typename _T1, typename _T2>
+ struct __is_tuple_like_impl<pair<_T1, _T2>> : true_type
+ { };
+
+ template<typename _Tp, std::size_t _Nm>
+ struct __is_tuple_like_impl<array<_Tp, _Nm>> : true_type
+ { };
- template<std::size_t __i, std::size_t... _Indexes, typename _IdxHolder,
- typename... _Elements>
- struct __index_holder_impl<__i, __index_holder<_Indexes...>,
- _IdxHolder, _Elements...>
+ // Internal type trait that allows us to sfinae-protect tuple_cat.
+ template<typename _Tp>
+ struct __is_tuple_like
+ : public __is_tuple_like_impl<typename std::remove_cv
+ <typename std::remove_reference<_Tp>::type>::type>::type
+ { };
+
+ // Stores a tuple of indices. Also used by bind() to extract the elements
+ // in a tuple.
+ template<std::size_t... _Indexes>
+ struct _Index_tuple
{
- typedef typename __index_holder_impl<__i + 1,
- __index_holder<_Indexes..., __i>,
- _Elements...>::type type;
+ typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
};
-
- template<std::size_t __i, std::size_t... _Indexes>
- struct __index_holder_impl<__i, __index_holder<_Indexes...> >
- { typedef __index_holder<_Indexes...> type; };
- template<typename... _Elements>
- struct __make_index_holder
- : __index_holder_impl<0, __index_holder<>, _Elements...> { };
-
- template<typename... _TElements, std::size_t... _TIdx,
- typename... _UElements, std::size_t... _UIdx>
- inline tuple<_TElements..., _UElements...>
- __tuple_cat_helper(const tuple<_TElements...>& __t,
- const __index_holder<_TIdx...>&,
- const tuple<_UElements...>& __u,
- const __index_holder<_UIdx...>&)
- { return tuple<_TElements..., _UElements...>(get<_TIdx>(__t)...,
- get<_UIdx>(__u)...); }
-
- template<typename... _TElements, std::size_t... _TIdx,
- typename... _UElements, std::size_t... _UIdx>
- inline tuple<_TElements..., _UElements...>
- __tuple_cat_helper(tuple<_TElements...>&& __t,
- const __index_holder<_TIdx...>&,
- const tuple<_UElements...>& __u,
- const __index_holder<_UIdx...>&)
- { return tuple<_TElements..., _UElements...>
- (std::forward<_TElements>(get<_TIdx>(__t))..., get<_UIdx>(__u)...); }
-
- template<typename... _TElements, std::size_t... _TIdx,
- typename... _UElements, std::size_t... _UIdx>
- inline tuple<_TElements..., _UElements...>
- __tuple_cat_helper(const tuple<_TElements...>& __t,
- const __index_holder<_TIdx...>&,
- tuple<_UElements...>&& __u,
- const __index_holder<_UIdx...>&)
- { return tuple<_TElements..., _UElements...>
- (get<_TIdx>(__t)..., std::forward<_UElements>(get<_UIdx>(__u))...); }
-
- template<typename... _TElements, std::size_t... _TIdx,
- typename... _UElements, std::size_t... _UIdx>
- inline tuple<_TElements..., _UElements...>
- __tuple_cat_helper(tuple<_TElements...>&& __t,
- const __index_holder<_TIdx...>&,
- tuple<_UElements...>&& __u,
- const __index_holder<_UIdx...>&)
- { return tuple<_TElements..., _UElements...>
- (std::forward<_TElements>(get<_TIdx>(__t))...,
- std::forward<_UElements>(get<_UIdx>(__u))...); }
+ // Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
+ template<std::size_t _Num>
+ struct _Build_index_tuple
+ {
+ typedef typename _Build_index_tuple<_Num - 1>::__type::__next __type;
+ };
- template<typename... _TElements, typename... _UElements>
- inline tuple<_TElements..., _UElements...>
- tuple_cat(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u)
+ template<>
+ struct _Build_index_tuple<0>
{
- return __tuple_cat_helper(__t, typename
- __make_index_holder<_TElements...>::type(),
- __u, typename
- __make_index_holder<_UElements...>::type());
- }
+ typedef _Index_tuple<> __type;
+ };
- template<typename... _TElements, typename... _UElements>
- inline tuple<_TElements..., _UElements...>
- tuple_cat(tuple<_TElements...>&& __t, const tuple<_UElements...>& __u)
+ template<std::size_t, typename, typename, std::size_t>
+ struct __make_tuple_impl;
+
+ template<std::size_t _Idx, typename _Tuple, typename... _Tp,
+ std::size_t _Nm>
+ struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm>
{
- return __tuple_cat_helper(std::move(__t), typename
- __make_index_holder<_TElements...>::type(),
- __u, typename
- __make_index_holder<_UElements...>::type());
- }
+ typedef typename __make_tuple_impl<_Idx + 1, tuple<_Tp...,
+ typename std::tuple_element<_Idx, _Tuple>::type>, _Tuple, _Nm>::__type
+ __type;
+ };
- template<typename... _TElements, typename... _UElements>
- inline tuple<_TElements..., _UElements...>
- tuple_cat(const tuple<_TElements...>& __t, tuple<_UElements...>&& __u)
+ template<std::size_t _Nm, typename _Tuple, typename... _Tp>
+ struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm>
{
- return __tuple_cat_helper(__t, typename
- __make_index_holder<_TElements...>::type(),
- std::move(__u), typename
- __make_index_holder<_UElements...>::type());
- }
+ typedef tuple<_Tp...> __type;
+ };
- template<typename... _TElements, typename... _UElements>
- inline tuple<_TElements..., _UElements...>
- tuple_cat(tuple<_TElements...>&& __t, tuple<_UElements...>&& __u)
+ template<typename _Tuple>
+ struct __do_make_tuple
+ : public __make_tuple_impl<0, tuple<>, _Tuple,
+ std::tuple_size<_Tuple>::value>
+ { };
+
+ // Returns the std::tuple equivalent of a tuple-like type.
+ template<typename _Tuple>
+ struct __make_tuple
+ : public __do_make_tuple<typename std::remove_cv
+ <typename std::remove_reference<_Tuple>::type>::type>
+ { };
+
+ // Combines several std::tuple's into a single one.
+ template<typename...>
+ struct __combine_tuples;
+
+ template<>
+ struct __combine_tuples<>
+ {
+ typedef tuple<> __type;
+ };
+
+ template<typename... _Ts>
+ struct __combine_tuples<tuple<_Ts...>>
+ {
+ typedef tuple<_Ts...> __type;
+ };
+
+ template<typename... _T1s, typename... _T2s, typename... _Rem>
+ struct __combine_tuples<tuple<_T1s...>, tuple<_T2s...>, _Rem...>
+ {
+ typedef typename __combine_tuples<tuple<_T1s..., _T2s...>,
+ _Rem...>::__type __type;
+ };
+
+ // Computes the result type of tuple_cat given a set of tuple-like types.
+ template<typename... _Tpls>
+ struct __tuple_cat_result
+ {
+ typedef typename __combine_tuples
+ <typename __make_tuple<_Tpls>::__type...>::__type __type;
+ };
+
+ // Helper to determine the index set for the first tuple-like
+ // type of a given set.
+ template<typename...>
+ struct __make_1st_indices;
+
+ template<>
+ struct __make_1st_indices<>
{
- return __tuple_cat_helper(std::move(__t), typename
- __make_index_holder<_TElements...>::type(),
- std::move(__u), typename
- __make_index_holder<_UElements...>::type());
+ typedef std::_Index_tuple<> __type;
+ };
+
+ template<typename _Tp, typename... _Tpls>
+ struct __make_1st_indices<_Tp, _Tpls...>
+ {
+ typedef typename std::_Build_index_tuple<std::tuple_size<
+ typename std::remove_reference<_Tp>::type>::value>::__type __type;
+ };
+
+ // Performs the actual concatenation by step-wise expanding tuple-like
+ // objects into the elements, which are finally forwarded into the
+ // result tuple.
+ template<typename _Ret, typename _Indices, typename... _Tpls>
+ struct __tuple_concater;
+
+ template<typename _Ret, std::size_t... _Is, typename _Tp, typename... _Tpls>
+ struct __tuple_concater<_Ret, std::_Index_tuple<_Is...>, _Tp, _Tpls...>
+ {
+ template<typename... _Us>
+ static constexpr _Ret
+ _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us)
+ {
+ typedef typename __make_1st_indices<_Tpls...>::__type __idx;
+ typedef __tuple_concater<_Ret, __idx, _Tpls...> __next;
+ return __next::_S_do(std::forward<_Tpls>(__tps)...,
+ std::forward<_Us>(__us)...,
+ std::get<_Is>(std::forward<_Tp>(__tp))...);
+ }
+ };
+
+ template<typename _Ret>
+ struct __tuple_concater<_Ret, std::_Index_tuple<>>
+ {
+ template<typename... _Us>
+ static constexpr _Ret
+ _S_do(_Us&&... __us)
+ {
+ return _Ret(std::forward<_Us>(__us)...);
+ }
+ };
+
+ template<typename... _Tpls, typename = typename
+ enable_if<__and_<__is_tuple_like<_Tpls>...>::value>::type>
+ constexpr auto
+ tuple_cat(_Tpls&&... __tpls)
+ -> typename __tuple_cat_result<_Tpls...>::__type
+ {
+ typedef typename __tuple_cat_result<_Tpls...>::__type __ret;
+ typedef typename __make_1st_indices<_Tpls...>::__type __idx;
+ typedef __tuple_concater<__ret, __idx, _Tpls...> __concater;
+ return __concater::_S_do(std::forward<_Tpls>(__tpls)...);
}
template<typename... _Elements>
inline tuple<_Elements&...>
- tie(_Elements&... __args)
+ tie(_Elements&... __args) noexcept
{ return tuple<_Elements&...>(__args...); }
template<typename... _Elements>
inline void
swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y)
+ noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
// A class (and instance) which can be used in 'tie' when an element
@@ -757,48 +1056,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const _Swallow_assign ignore{};
- /**
- * Stores a tuple of indices. Used by bind() to extract the elements
- * in a tuple.
- */
- template<int... _Indexes>
- struct _Index_tuple
- {
- typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
- };
-
- /// Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
- template<std::size_t _Num>
- struct _Build_index_tuple
- {
- typedef typename _Build_index_tuple<_Num-1>::__type::__next __type;
- };
-
- template<>
- struct _Build_index_tuple<0>
- {
- typedef _Index_tuple<> __type;
- };
+ /// Partial specialization for tuples
+ template<typename... _Types, typename _Alloc>
+ struct uses_allocator<tuple<_Types...>, _Alloc> : true_type { };
// See stl_pair.h...
template<class _T1, class _T2>
- template<typename _Tp, typename... _Args>
- inline _Tp
+ template<typename... _Args1, typename... _Args2>
+ inline
pair<_T1, _T2>::
- __cons(tuple<_Args...>&& __tuple)
- {
- typedef typename _Build_index_tuple<sizeof...(_Args)>::__type
- _Indexes;
- return __do_cons<_Tp>(std::move(__tuple), _Indexes());
- }
+ pair(piecewise_construct_t,
+ tuple<_Args1...> __first, tuple<_Args2...> __second)
+ : pair(__first, __second,
+ typename _Build_index_tuple<sizeof...(_Args1)>::__type(),
+ typename _Build_index_tuple<sizeof...(_Args2)>::__type())
+ { }
template<class _T1, class _T2>
- template<typename _Tp, typename... _Args, int... _Indexes>
- inline _Tp
+ template<typename... _Args1, std::size_t... _Indexes1,
+ typename... _Args2, std::size_t... _Indexes2>
+ inline
pair<_T1, _T2>::
- __do_cons(tuple<_Args...>&& __tuple,
- const _Index_tuple<_Indexes...>&)
- { return _Tp(std::forward<_Args>(get<_Indexes>(__tuple))...); }
+ pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2,
+ _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>)
+ : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...),
+ second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
+ { }
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 23611525be..e3ec7ad5de 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -1,6 +1,6 @@
-// C++0x type_traits -*- C++ -*-
+// C++11 type_traits -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,30 +42,15 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @addtogroup metaprogramming
+ * @defgroup metaprogramming Metaprogramming and type traits
+ * @ingroup utilities
+ *
+ * Template utilities for compile-time introspection and modification,
+ * including type classification traits, type property inspection traits
+ * and type transformation traits.
+ *
* @{
*/
- struct __sfinae_types
- {
- typedef char __one;
- typedef struct { char __arr[2]; } __two;
- };
-
-#define _DEFINE_SPEC_0_HELPER \
- template<>
-
-#define _DEFINE_SPEC_1_HELPER \
- template<typename _Tp>
-
-#define _DEFINE_SPEC_2_HELPER \
- template<typename _Tp, typename _Cp>
-
-#define _DEFINE_SPEC(_Order, _Trait, _Type, _Value) \
- _DEFINE_SPEC_##_Order##_HELPER \
- struct _Trait<_Type> \
- : public integral_constant<bool, _Value> { };
-
- // helper classes.
/// integral_constant
template<typename _Tp, _Tp __v>
@@ -77,25 +62,89 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr operator value_type() { return value; }
};
- /// typedef for true_type
+ /// The type used as a compile-time boolean with true value.
typedef integral_constant<bool, true> true_type;
- /// typedef for false_type
+ /// The type used as a compile-time boolean with false value.
typedef integral_constant<bool, false> false_type;
template<typename _Tp, _Tp __v>
constexpr _Tp integral_constant<_Tp, __v>::value;
- /// remove_cv
+ // Meta programming helper types.
+
+ template<bool, typename, typename>
+ struct conditional;
+
+ template<typename...>
+ struct __or_;
+
+ template<>
+ struct __or_<>
+ : public false_type
+ { };
+
+ template<typename _B1>
+ struct __or_<_B1>
+ : public _B1
+ { };
+
+ template<typename _B1, typename _B2>
+ struct __or_<_B1, _B2>
+ : public conditional<_B1::value, _B1, _B2>::type
+ { };
+
+ template<typename _B1, typename _B2, typename _B3, typename... _Bn>
+ struct __or_<_B1, _B2, _B3, _Bn...>
+ : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
+ { };
+
+ template<typename...>
+ struct __and_;
+
+ template<>
+ struct __and_<>
+ : public true_type
+ { };
+
+ template<typename _B1>
+ struct __and_<_B1>
+ : public _B1
+ { };
+
+ template<typename _B1, typename _B2>
+ struct __and_<_B1, _B2>
+ : public conditional<_B1::value, _B2, _B1>::type
+ { };
+
+ template<typename _B1, typename _B2, typename _B3, typename... _Bn>
+ struct __and_<_B1, _B2, _B3, _Bn...>
+ : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
+ { };
+
+ template<typename _Pp>
+ struct __not_
+ : public integral_constant<bool, !_Pp::value>
+ { };
+
+ struct __sfinae_types
+ {
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+ };
+
+ // primary type categories.
+
template<typename>
struct remove_cv;
template<typename>
struct __is_void_helper
: public false_type { };
- _DEFINE_SPEC(0, __is_void_helper, void, true)
- // primary type categories.
+ template<>
+ struct __is_void_helper<void>
+ : public true_type { };
/// is_void
template<typename _Tp>
@@ -107,23 +156,78 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename>
struct __is_integral_helper
: public false_type { };
- _DEFINE_SPEC(0, __is_integral_helper, bool, true)
- _DEFINE_SPEC(0, __is_integral_helper, char, true)
- _DEFINE_SPEC(0, __is_integral_helper, signed char, true)
- _DEFINE_SPEC(0, __is_integral_helper, unsigned char, true)
+
+ template<>
+ struct __is_integral_helper<bool>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<char>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<signed char>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<unsigned char>
+ : public true_type { };
+
#ifdef _GLIBCXX_USE_WCHAR_T
- _DEFINE_SPEC(0, __is_integral_helper, wchar_t, true)
+ template<>
+ struct __is_integral_helper<wchar_t>
+ : public true_type { };
+#endif
+
+ template<>
+ struct __is_integral_helper<char16_t>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<char32_t>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<short>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<unsigned short>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<int>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<unsigned int>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<long>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<unsigned long>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<long long>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<unsigned long long>
+ : public true_type { };
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ template<>
+ struct __is_integral_helper<__int128>
+ : public true_type { };
+
+ template<>
+ struct __is_integral_helper<unsigned __int128>
+ : public true_type { };
#endif
- _DEFINE_SPEC(0, __is_integral_helper, char16_t, true)
- _DEFINE_SPEC(0, __is_integral_helper, char32_t, true)
- _DEFINE_SPEC(0, __is_integral_helper, short, true)
- _DEFINE_SPEC(0, __is_integral_helper, unsigned short, true)
- _DEFINE_SPEC(0, __is_integral_helper, int, true)
- _DEFINE_SPEC(0, __is_integral_helper, unsigned int, true)
- _DEFINE_SPEC(0, __is_integral_helper, long, true)
- _DEFINE_SPEC(0, __is_integral_helper, unsigned long, true)
- _DEFINE_SPEC(0, __is_integral_helper, long long, true)
- _DEFINE_SPEC(0, __is_integral_helper, unsigned long long, true)
/// is_integral
template<typename _Tp>
@@ -135,9 +239,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename>
struct __is_floating_point_helper
: public false_type { };
- _DEFINE_SPEC(0, __is_floating_point_helper, float, true)
- _DEFINE_SPEC(0, __is_floating_point_helper, double, true)
- _DEFINE_SPEC(0, __is_floating_point_helper, long double, true)
+
+ template<>
+ struct __is_floating_point_helper<float>
+ : public true_type { };
+
+ template<>
+ struct __is_floating_point_helper<double>
+ : public true_type { };
+
+ template<>
+ struct __is_floating_point_helper<long double>
+ : public true_type { };
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+ template<>
+ struct __is_floating_point_helper<__float128>
+ : public true_type { };
+#endif
/// is_floating_point
template<typename _Tp>
@@ -162,7 +281,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename>
struct __is_pointer_helper
: public false_type { };
- _DEFINE_SPEC(1, __is_pointer_helper, _Tp*, true)
+
+ template<typename _Tp>
+ struct __is_pointer_helper<_Tp*>
+ : public true_type { };
/// is_pointer
template<typename _Tp>
@@ -171,19 +293,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
remove_cv<_Tp>::type>::value)>
{ };
- /// is_reference
+ /// is_lvalue_reference
+ template<typename>
+ struct is_lvalue_reference
+ : public false_type { };
+
template<typename _Tp>
- struct is_reference;
+ struct is_lvalue_reference<_Tp&>
+ : public true_type { };
+
+ /// is_rvalue_reference
+ template<typename>
+ struct is_rvalue_reference
+ : public false_type { };
- /// is_function
template<typename _Tp>
+ struct is_rvalue_reference<_Tp&&>
+ : public true_type { };
+
+ template<typename>
struct is_function;
template<typename>
struct __is_member_object_pointer_helper
: public false_type { };
- _DEFINE_SPEC(2, __is_member_object_pointer_helper, _Tp _Cp::*,
- !is_function<_Tp>::value)
+
+ template<typename _Tp, typename _Cp>
+ struct __is_member_object_pointer_helper<_Tp _Cp::*>
+ : public integral_constant<bool, !is_function<_Tp>::value> { };
/// is_member_object_pointer
template<typename _Tp>
@@ -195,8 +332,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename>
struct __is_member_function_pointer_helper
: public false_type { };
- _DEFINE_SPEC(2, __is_member_function_pointer_helper, _Tp _Cp::*,
- is_function<_Tp>::value)
+
+ template<typename _Tp, typename _Cp>
+ struct __is_member_function_pointer_helper<_Tp _Cp::*>
+ : public integral_constant<bool, is_function<_Tp>::value> { };
/// is_member_function_pointer
template<typename _Tp>
@@ -227,27 +366,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename>
struct is_function
: public false_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...)>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......)>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) volatile>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) volatile>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const volatile>
: public true_type { };
+
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const volatile>
: public true_type { };
@@ -255,7 +402,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename>
struct __is_nullptr_t_helper
: public false_type { };
- _DEFINE_SPEC(0, __is_nullptr_t_helper, std::nullptr_t, true)
+
+ template<>
+ struct __is_nullptr_t_helper<std::nullptr_t>
+ : public true_type { };
// __is_nullptr_t (extension).
template<typename _Tp>
@@ -264,42 +414,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
remove_cv<_Tp>::type>::value)>
{ };
- // composite type traits.
-
+ // composite type categories.
+
+ /// is_reference
+ template<typename _Tp>
+ struct is_reference
+ : public __or_<is_lvalue_reference<_Tp>,
+ is_rvalue_reference<_Tp>>::type
+ { };
+
/// is_arithmetic
template<typename _Tp>
struct is_arithmetic
- : public integral_constant<bool, (is_integral<_Tp>::value
- || is_floating_point<_Tp>::value)>
+ : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
{ };
/// is_fundamental
template<typename _Tp>
struct is_fundamental
- : public integral_constant<bool, (is_arithmetic<_Tp>::value
- || is_void<_Tp>::value)>
+ : public __or_<is_arithmetic<_Tp>, is_void<_Tp>>::type
{ };
/// is_object
template<typename _Tp>
struct is_object
- : public integral_constant<bool, !(is_function<_Tp>::value
- || is_reference<_Tp>::value
- || is_void<_Tp>::value)>
+ : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
+ is_void<_Tp>>>::type
{ };
- /// is_member_pointer
- template<typename _Tp>
+ template<typename>
struct is_member_pointer;
/// is_scalar
template<typename _Tp>
struct is_scalar
- : public integral_constant<bool, (is_arithmetic<_Tp>::value
- || is_enum<_Tp>::value
- || is_pointer<_Tp>::value
- || is_member_pointer<_Tp>::value
- || __is_nullptr_t<_Tp>::value)>
+ : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
+ is_member_pointer<_Tp>, __is_nullptr_t<_Tp>>::type
{ };
/// is_compound
@@ -307,19 +457,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct is_compound
: public integral_constant<bool, !is_fundamental<_Tp>::value> { };
- /// is_member_pointer
template<typename _Tp>
struct __is_member_pointer_helper
: public false_type { };
- _DEFINE_SPEC(2, __is_member_pointer_helper, _Tp _Cp::*, true)
+ template<typename _Tp, typename _Cp>
+ struct __is_member_pointer_helper<_Tp _Cp::*>
+ : public true_type { };
+
+ /// is_member_pointer
template<typename _Tp>
- struct is_member_pointer
+ struct is_member_pointer
: public integral_constant<bool, (__is_member_pointer_helper<
typename remove_cv<_Tp>::type>::value)>
{ };
// type properties.
+
/// is_const
template<typename>
struct is_const
@@ -338,6 +492,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct is_volatile<_Tp volatile>
: public true_type { };
+ /// is_trivial
+ template<typename _Tp>
+ struct is_trivial
+ : public integral_constant<bool, __is_trivial(_Tp)>
+ { };
+
+ // is_trivially_copyable (still unimplemented)
+
+ /// is_standard_layout
+ template<typename _Tp>
+ struct is_standard_layout
+ : public integral_constant<bool, __is_standard_layout(_Tp)>
+ { };
+
+ /// is_pod
+ // Could use is_standard_layout && is_trivial instead of the builtin.
+ template<typename _Tp>
+ struct is_pod
+ : public integral_constant<bool, __is_pod(_Tp)>
+ { };
+
+ /// is_literal_type
+ template<typename _Tp>
+ struct is_literal_type
+ : public integral_constant<bool, __is_literal_type(_Tp)>
+ { };
+
/// is_empty
template<typename _Tp>
struct is_empty
@@ -356,356 +537,613 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public integral_constant<bool, __is_abstract(_Tp)>
{ };
- /// has_virtual_destructor
- template<typename _Tp>
- struct has_virtual_destructor
- : public integral_constant<bool, __has_virtual_destructor(_Tp)>
- { };
+ template<typename _Tp,
+ bool = is_integral<_Tp>::value,
+ bool = is_floating_point<_Tp>::value>
+ struct __is_signed_helper
+ : public false_type { };
- /// alignment_of
template<typename _Tp>
- struct alignment_of
- : public integral_constant<std::size_t, __alignof__(_Tp)> { };
-
- /// rank
- template<typename>
- struct rank
- : public integral_constant<std::size_t, 0> { };
-
- template<typename _Tp, std::size_t _Size>
- struct rank<_Tp[_Size]>
- : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+ struct __is_signed_helper<_Tp, false, true>
+ : public true_type { };
template<typename _Tp>
- struct rank<_Tp[]>
- : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+ struct __is_signed_helper<_Tp, true, false>
+ : public integral_constant<bool, static_cast<bool>(_Tp(-1) < _Tp(0))>
+ { };
- /// extent
- template<typename, unsigned _Uint = 0>
- struct extent
- : public integral_constant<std::size_t, 0> { };
-
- template<typename _Tp, unsigned _Uint, std::size_t _Size>
- struct extent<_Tp[_Size], _Uint>
- : public integral_constant<std::size_t,
- _Uint == 0 ? _Size : extent<_Tp,
- _Uint - 1>::value>
+ /// is_signed
+ template<typename _Tp>
+ struct is_signed
+ : public integral_constant<bool, __is_signed_helper<_Tp>::value>
{ };
- template<typename _Tp, unsigned _Uint>
- struct extent<_Tp[], _Uint>
- : public integral_constant<std::size_t,
- _Uint == 0 ? 0 : extent<_Tp,
- _Uint - 1>::value>
+ /// is_unsigned
+ template<typename _Tp>
+ struct is_unsigned
+ : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
{ };
- // relationships between types [4.6].
- /// is_same
- template<typename, typename>
- struct is_same
- : public false_type { };
+ // destructible and constructible type properties
+
+ template<typename>
+ struct add_rvalue_reference;
+ /**
+ * @brief Utility to simplify expressions used in unevaluated operands
+ * @ingroup utilities
+ */
template<typename _Tp>
- struct is_same<_Tp, _Tp>
- : public true_type { };
+ typename add_rvalue_reference<_Tp>::type declval() noexcept;
- // const-volatile modifications [4.7.1].
+ template<typename, unsigned = 0>
+ struct extent;
- /// remove_const
- template<typename _Tp>
- struct remove_const
- { typedef _Tp type; };
+ template<typename>
+ struct remove_all_extents;
template<typename _Tp>
- struct remove_const<_Tp const>
- { typedef _Tp type; };
-
- /// remove_volatile
- template<typename _Tp>
- struct remove_volatile
- { typedef _Tp type; };
+ struct __is_array_known_bounds
+ : public integral_constant<bool, (extent<_Tp>::value > 0)>
+ { };
template<typename _Tp>
- struct remove_volatile<_Tp volatile>
- { typedef _Tp type; };
-
- /// remove_cv
+ struct __is_array_unknown_bounds
+ : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>::type
+ { };
+
+ // In N3290 is_destructible does not say anything about function
+ // types and abstract types, see LWG 2049. This implementation
+ // describes function types as trivially nothrow destructible and
+ // abstract types as destructible, iff the explicit destructor
+ // call expression is wellformed.
+ struct __do_is_destructible_impl_1
+ {
+ template<typename _Up>
+ struct __w { _Up __u; };
+
+ template<typename _Tp, typename
+ = decltype(declval<__w<_Tp>&>().~__w<_Tp>())>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+ };
+
template<typename _Tp>
- struct remove_cv
+ struct __is_destructible_impl_1
+ : public __do_is_destructible_impl_1
{
- typedef typename
- remove_const<typename remove_volatile<_Tp>::type>::type type;
+ typedef decltype(__test<_Tp>(0)) type;
};
-
- /// add_const
- template<typename _Tp>
- struct add_const
- { typedef _Tp const type; };
-
- /// add_volatile
- template<typename _Tp>
- struct add_volatile
- { typedef _Tp volatile type; };
-
- /// add_cv
+
+ // Special implementation for abstract types
+ struct __do_is_destructible_impl_2
+ {
+ template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+ };
+
template<typename _Tp>
- struct add_cv
+ struct __is_destructible_impl_2
+ : public __do_is_destructible_impl_2
{
- typedef typename
- add_const<typename add_volatile<_Tp>::type>::type type;
+ typedef decltype(__test<_Tp>(0)) type;
};
- // array modifications.
+ template<typename _Tp,
+ bool = __or_<is_void<_Tp>,
+ __is_array_unknown_bounds<_Tp>>::value,
+ bool = __or_<is_reference<_Tp>, is_function<_Tp>>::value>
+ struct __is_destructible_safe;
- /// remove_extent
template<typename _Tp>
- struct remove_extent
- { typedef _Tp type; };
+ struct __is_destructible_safe<_Tp, false, false>
+ : public conditional<is_abstract<_Tp>::value,
+ __is_destructible_impl_2<_Tp>,
+ __is_destructible_impl_1<_Tp>>::type::type
+ { };
- template<typename _Tp, std::size_t _Size>
- struct remove_extent<_Tp[_Size]>
- { typedef _Tp type; };
+ template<typename _Tp>
+ struct __is_destructible_safe<_Tp, true, false>
+ : public false_type { };
template<typename _Tp>
- struct remove_extent<_Tp[]>
- { typedef _Tp type; };
+ struct __is_destructible_safe<_Tp, false, true>
+ : public true_type { };
- /// remove_all_extents
+ /// is_destructible
template<typename _Tp>
- struct remove_all_extents
- { typedef _Tp type; };
+ struct is_destructible
+ : public integral_constant<bool, (__is_destructible_safe<_Tp>::value)>
+ { };
- template<typename _Tp, std::size_t _Size>
- struct remove_all_extents<_Tp[_Size]>
- { typedef typename remove_all_extents<_Tp>::type type; };
+ struct __do_is_default_constructible_impl
+ {
+ template<typename _Tp, typename = decltype(_Tp())>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+ };
template<typename _Tp>
- struct remove_all_extents<_Tp[]>
- { typedef typename remove_all_extents<_Tp>::type type; };
+ struct __is_default_constructible_impl
+ : public __do_is_default_constructible_impl
+ {
+ typedef decltype(__test<_Tp>(0)) type;
+ };
- // pointer modifications.
+ template<typename _Tp>
+ struct __is_default_constructible_atom
+ : public __and_<__not_<is_void<_Tp>>,
+ __is_default_constructible_impl<_Tp>>::type
+ { };
- template<typename _Tp, typename>
- struct __remove_pointer_helper
- { typedef _Tp type; };
+ template<typename _Tp, bool = is_array<_Tp>::value>
+ struct __is_default_constructible_safe;
- template<typename _Tp, typename _Up>
- struct __remove_pointer_helper<_Tp, _Up*>
- { typedef _Up type; };
+ // The following technique is a workaround for a current core language
+ // restriction, which does not allow for array types to occur in
+ // functional casts of the form T(). Complete arrays can be default-
+ // constructed, if the element type is default-constructible, but
+ // arrays with unknown bounds are not.
+ template<typename _Tp>
+ struct __is_default_constructible_safe<_Tp, true>
+ : public __and_<__is_array_known_bounds<_Tp>,
+ __is_default_constructible_atom<typename
+ remove_all_extents<_Tp>::type>>::type
+ { };
- /// remove_pointer
template<typename _Tp>
- struct remove_pointer
- : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
+ struct __is_default_constructible_safe<_Tp, false>
+ : public __is_default_constructible_atom<_Tp>::type
+ { };
+
+ /// is_default_constructible
+ template<typename _Tp>
+ struct is_default_constructible
+ : public integral_constant<bool, (__is_default_constructible_safe<
+ _Tp>::value)>
+ { };
+
+
+ // Implementation of is_constructible.
+
+ // The hardest part of this trait is the binary direct-initialization
+ // case, because we hit into a functional cast of the form T(arg).
+ // This implementation uses different strategies depending on the
+ // target type to reduce the test overhead as much as possible:
+ //
+ // a) For a reference target type, we use a static_cast expression
+ // modulo its extra cases.
+ //
+ // b) For a non-reference target type we use a ::new expression.
+ struct __do_is_static_castable_impl
+ {
+ template<typename _From, typename _To, typename
+ = decltype(static_cast<_To>(declval<_From>()))>
+ static true_type __test(int);
+
+ template<typename, typename>
+ static false_type __test(...);
+ };
+
+ template<typename _From, typename _To>
+ struct __is_static_castable_impl
+ : public __do_is_static_castable_impl
+ {
+ typedef decltype(__test<_From, _To>(0)) type;
+ };
+
+ template<typename _From, typename _To>
+ struct __is_static_castable_safe
+ : public __is_static_castable_impl<_From, _To>::type
+ { };
+
+ // __is_static_castable
+ template<typename _From, typename _To>
+ struct __is_static_castable
+ : public integral_constant<bool, (__is_static_castable_safe<
+ _From, _To>::value)>
+ { };
+
+ // Implementation for non-reference types. To meet the proper
+ // variable definition semantics, we also need to test for
+ // is_destructible in this case.
+ // This form should be simplified by a single expression:
+ // ::delete ::new _Tp(declval<_Arg>()), see c++/51222.
+ struct __do_is_direct_constructible_impl
+ {
+ template<typename _Tp, typename _Arg, typename
+ = decltype(::new _Tp(declval<_Arg>()))>
+ static true_type __test(int);
+
+ template<typename, typename>
+ static false_type __test(...);
+ };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_impl
+ : public __do_is_direct_constructible_impl
+ {
+ typedef decltype(__test<_Tp, _Arg>(0)) type;
+ };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_new_safe
+ : public __and_<is_destructible<_Tp>,
+ __is_direct_constructible_impl<_Tp, _Arg>>::type
{ };
+ template<typename, typename>
+ struct is_same;
+
+ template<typename, typename>
+ struct is_base_of;
+
template<typename>
struct remove_reference;
- /// add_pointer
- template<typename _Tp>
- struct add_pointer
- { typedef typename remove_reference<_Tp>::type* type; };
+ template<typename _From, typename _To, bool
+ = __not_<__or_<is_void<_From>,
+ is_function<_From>>>::value>
+ struct __is_base_to_derived_ref;
- // Primary classification traits.
+ // Detect whether we have a downcast situation during
+ // reference binding.
+ template<typename _From, typename _To>
+ struct __is_base_to_derived_ref<_From, _To, true>
+ {
+ typedef typename remove_cv<typename remove_reference<_From
+ >::type>::type __src_t;
+ typedef typename remove_cv<typename remove_reference<_To
+ >::type>::type __dst_t;
+ typedef __and_<__not_<is_same<__src_t, __dst_t>>,
+ is_base_of<__src_t, __dst_t>> type;
+ static constexpr bool value = type::value;
+ };
- /// is_lvalue_reference
- template<typename>
- struct is_lvalue_reference
- : public false_type { };
+ template<typename _From, typename _To>
+ struct __is_base_to_derived_ref<_From, _To, false>
+ : public false_type
+ { };
- template<typename _Tp>
- struct is_lvalue_reference<_Tp&>
- : public true_type { };
+ template<typename _From, typename _To, bool
+ = __and_<is_lvalue_reference<_From>,
+ is_rvalue_reference<_To>>::value>
+ struct __is_lvalue_to_rvalue_ref;
- /// is_rvalue_reference
- template<typename>
- struct is_rvalue_reference
- : public false_type { };
+ // Detect whether we have an lvalue of non-function type
+ // bound to a reference-compatible rvalue-reference.
+ template<typename _From, typename _To>
+ struct __is_lvalue_to_rvalue_ref<_From, _To, true>
+ {
+ typedef typename remove_cv<typename remove_reference<
+ _From>::type>::type __src_t;
+ typedef typename remove_cv<typename remove_reference<
+ _To>::type>::type __dst_t;
+ typedef __and_<__not_<is_function<__src_t>>,
+ __or_<is_same<__src_t, __dst_t>,
+ is_base_of<__dst_t, __src_t>>> type;
+ static constexpr bool value = type::value;
+ };
- template<typename _Tp>
- struct is_rvalue_reference<_Tp&&>
- : public true_type { };
+ template<typename _From, typename _To>
+ struct __is_lvalue_to_rvalue_ref<_From, _To, false>
+ : public false_type
+ { };
- // Secondary classification traits.
+ // Here we handle direct-initialization to a reference type as
+ // equivalent to a static_cast modulo overshooting conversions.
+ // These are restricted to the following conversions:
+ // a) A base class value to a derived class reference
+ // b) An lvalue to an rvalue-reference of reference-compatible
+ // types that are not functions
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_ref_cast
+ : public __and_<__is_static_castable<_Arg, _Tp>,
+ __not_<__or_<__is_base_to_derived_ref<_Arg, _Tp>,
+ __is_lvalue_to_rvalue_ref<_Arg, _Tp>
+ >>>::type
+ { };
- /// is_reference
- template<typename _Tp>
- struct is_reference
- : public integral_constant<bool, (is_lvalue_reference<_Tp>::value
- || is_rvalue_reference<_Tp>::value)>
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_new
+ : public conditional<is_reference<_Tp>::value,
+ __is_direct_constructible_ref_cast<_Tp, _Arg>,
+ __is_direct_constructible_new_safe<_Tp, _Arg>
+ >::type
{ };
- // Reference transformations.
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible
+ : public integral_constant<bool, (__is_direct_constructible_new<
+ _Tp, _Arg>::value)>
+ { };
- /// remove_reference
- template<typename _Tp>
- struct remove_reference
- { typedef _Tp type; };
+ // Since default-construction and binary direct-initialization have
+ // been handled separately, the implementation of the remaining
+ // n-ary construction cases is rather straightforward. We can use
+ // here a functional cast, because array types are excluded anyway
+ // and this form is never interpreted as a C cast.
+ struct __do_is_nary_constructible_impl
+ {
+ template<typename _Tp, typename... _Args, typename
+ = decltype(_Tp(declval<_Args>()...))>
+ static true_type __test(int);
- template<typename _Tp>
- struct remove_reference<_Tp&>
- { typedef _Tp type; };
+ template<typename, typename...>
+ static false_type __test(...);
+ };
- template<typename _Tp>
- struct remove_reference<_Tp&&>
- { typedef _Tp type; };
+ template<typename _Tp, typename... _Args>
+ struct __is_nary_constructible_impl
+ : public __do_is_nary_constructible_impl
+ {
+ typedef decltype(__test<_Tp, _Args...>(0)) type;
+ };
- template<typename _Tp,
- bool = !is_reference<_Tp>::value && !is_void<_Tp>::value,
- bool = is_rvalue_reference<_Tp>::value>
- struct __add_lvalue_reference_helper
- { typedef _Tp type; };
+ template<typename _Tp, typename... _Args>
+ struct __is_nary_constructible
+ : public __is_nary_constructible_impl<_Tp, _Args...>::type
+ {
+ static_assert(sizeof...(_Args) > 1,
+ "Only useful for > 1 arguments");
+ };
- template<typename _Tp>
- struct __add_lvalue_reference_helper<_Tp, true, false>
- { typedef _Tp& type; };
+ template<typename _Tp, typename... _Args>
+ struct __is_constructible_impl
+ : public __is_nary_constructible<_Tp, _Args...>
+ { };
- template<typename _Tp>
- struct __add_lvalue_reference_helper<_Tp, false, true>
- { typedef typename remove_reference<_Tp>::type& type; };
+ template<typename _Tp, typename _Arg>
+ struct __is_constructible_impl<_Tp, _Arg>
+ : public __is_direct_constructible<_Tp, _Arg>
+ { };
- /// add_lvalue_reference
template<typename _Tp>
- struct add_lvalue_reference
- : public __add_lvalue_reference_helper<_Tp>
+ struct __is_constructible_impl<_Tp>
+ : public is_default_constructible<_Tp>
{ };
- template<typename _Tp,
- bool = !is_reference<_Tp>::value && !is_void<_Tp>::value>
- struct __add_rvalue_reference_helper
- { typedef _Tp type; };
+ /// is_constructible
+ template<typename _Tp, typename... _Args>
+ struct is_constructible
+ : public integral_constant<bool, (__is_constructible_impl<_Tp,
+ _Args...>::value)>
+ { };
+
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_copy_constructible_impl;
template<typename _Tp>
- struct __add_rvalue_reference_helper<_Tp, true>
- { typedef _Tp&& type; };
+ struct __is_copy_constructible_impl<_Tp, true>
+ : public false_type { };
- /// add_rvalue_reference
template<typename _Tp>
- struct add_rvalue_reference
- : public __add_rvalue_reference_helper<_Tp>
+ struct __is_copy_constructible_impl<_Tp, false>
+ : public is_constructible<_Tp, const _Tp&>
{ };
- // Scalar properties and transformations.
+ /// is_copy_constructible
+ template<typename _Tp>
+ struct is_copy_constructible
+ : public __is_copy_constructible_impl<_Tp>
+ { };
- template<typename _Tp,
- bool = is_integral<_Tp>::value,
- bool = is_floating_point<_Tp>::value>
- struct __is_signed_helper
- : public false_type { };
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_move_constructible_impl;
template<typename _Tp>
- struct __is_signed_helper<_Tp, false, true>
- : public true_type { };
+ struct __is_move_constructible_impl<_Tp, true>
+ : public false_type { };
template<typename _Tp>
- struct __is_signed_helper<_Tp, true, false>
- : public integral_constant<bool, static_cast<bool>(_Tp(-1) < _Tp(0))>
+ struct __is_move_constructible_impl<_Tp, false>
+ : public is_constructible<_Tp, _Tp&&>
{ };
- /// is_signed
+ /// is_move_constructible
template<typename _Tp>
- struct is_signed
- : public integral_constant<bool, __is_signed_helper<_Tp>::value>
+ struct is_move_constructible
+ : public __is_move_constructible_impl<_Tp>
{ };
- /// is_unsigned
template<typename _Tp>
- struct is_unsigned
- : public integral_constant<bool, (is_arithmetic<_Tp>::value
- && !is_signed<_Tp>::value)>
+ struct __is_nt_default_constructible_atom
+ : public integral_constant<bool, noexcept(_Tp())>
{ };
- // Member introspection.
+ template<typename _Tp, bool = is_array<_Tp>::value>
+ struct __is_nt_default_constructible_impl;
- /// is_trivial
template<typename _Tp>
- struct is_trivial
- : public integral_constant<bool, __is_trivial(_Tp)>
+ struct __is_nt_default_constructible_impl<_Tp, true>
+ : public __and_<__is_array_known_bounds<_Tp>,
+ __is_nt_default_constructible_atom<typename
+ remove_all_extents<_Tp>::type>>::type
{ };
- /// is_standard_layout
template<typename _Tp>
- struct is_standard_layout
- : public integral_constant<bool, __is_standard_layout(_Tp)>
+ struct __is_nt_default_constructible_impl<_Tp, false>
+ : public __is_nt_default_constructible_atom<_Tp>
{ };
- /// is_pod
- // Could use is_standard_layout && is_trivial instead of the builtin.
+ /// is_nothrow_default_constructible
template<typename _Tp>
- struct is_pod
- : public integral_constant<bool, __is_pod(_Tp)>
+ struct is_nothrow_default_constructible
+ : public __and_<is_default_constructible<_Tp>,
+ __is_nt_default_constructible_impl<_Tp>>::type
{ };
- /// is_literal_type
- template<typename _Tp>
- struct is_literal_type
- : public integral_constant<bool, __is_literal_type(_Tp)>
+ template<typename _Tp, typename... _Args>
+ struct __is_nt_constructible_impl
+ : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
+ { };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_nt_constructible_impl<_Tp, _Arg>
+ : public integral_constant<bool,
+ noexcept(static_cast<_Tp>(declval<_Arg>()))>
{ };
template<typename _Tp>
- typename add_rvalue_reference<_Tp>::type declval() noexcept;
+ struct __is_nt_constructible_impl<_Tp>
+ : public is_nothrow_default_constructible<_Tp>
+ { };
+ /// is_nothrow_constructible
template<typename _Tp, typename... _Args>
- class __is_constructible_helper
- : public __sfinae_types
- {
- template<typename _Tp1, typename... _Args1>
- static decltype(_Tp1(declval<_Args1>()...), __one()) __test(int);
+ struct is_nothrow_constructible
+ : public __and_<is_constructible<_Tp, _Args...>,
+ __is_nt_constructible_impl<_Tp, _Args...>>::type
+ { };
- template<typename, typename...>
- static __two __test(...);
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_nothrow_copy_constructible_impl;
- public:
- static const bool __value = sizeof(__test<_Tp, _Args...>(0)) == 1;
- };
+ template<typename _Tp>
+ struct __is_nothrow_copy_constructible_impl<_Tp, true>
+ : public false_type { };
- template<typename _Tp, typename _Arg>
- class __is_constructible_helper<_Tp, _Arg>
+ template<typename _Tp>
+ struct __is_nothrow_copy_constructible_impl<_Tp, false>
+ : public is_nothrow_constructible<_Tp, const _Tp&>
+ { };
+
+ /// is_nothrow_copy_constructible
+ template<typename _Tp>
+ struct is_nothrow_copy_constructible
+ : public __is_nothrow_copy_constructible_impl<_Tp>
+ { };
+
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_nothrow_move_constructible_impl;
+
+ template<typename _Tp>
+ struct __is_nothrow_move_constructible_impl<_Tp, true>
+ : public false_type { };
+
+ template<typename _Tp>
+ struct __is_nothrow_move_constructible_impl<_Tp, false>
+ : public is_nothrow_constructible<_Tp, _Tp&&>
+ { };
+
+ /// is_nothrow_move_constructible
+ template<typename _Tp>
+ struct is_nothrow_move_constructible
+ : public __is_nothrow_move_constructible_impl<_Tp>
+ { };
+
+ template<typename _Tp, typename _Up>
+ class __is_assignable_helper
: public __sfinae_types
{
- template<typename _Tp1, typename _Arg1>
- static decltype(static_cast<_Tp1>(declval<_Arg1>()), __one())
+ template<typename _Tp1, typename _Up1>
+ static decltype(declval<_Tp1>() = declval<_Up1>(), __one())
__test(int);
template<typename, typename>
static __two __test(...);
public:
- static const bool __value = sizeof(__test<_Tp, _Arg>(0)) == 1;
+ static constexpr bool value = sizeof(__test<_Tp, _Up>(0)) == 1;
};
- /// is_constructible
- // XXX FIXME
- // The C++0x specifications require front-end support, see N2255.
- template<typename _Tp, typename... _Args>
- struct is_constructible
+ /// is_assignable
+ template<typename _Tp, typename _Up>
+ struct is_assignable
: public integral_constant<bool,
- __is_constructible_helper<_Tp,
- _Args...>::__value>
+ __is_assignable_helper<_Tp, _Up>::value>
{ };
- template<bool, typename _Tp, typename... _Args>
- struct __is_nt_constructible_helper
- { static const bool __value = false; };
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_copy_assignable_impl;
- template<typename _Tp, typename... _Args>
- struct __is_nt_constructible_helper<true, _Tp, _Args...>
- { static const bool __value = noexcept(_Tp(declval<_Args>()...)); };
+ template<typename _Tp>
+ struct __is_copy_assignable_impl<_Tp, true>
+ : public false_type { };
- template<typename _Tp, typename _Arg>
- struct __is_nt_constructible_helper<true, _Tp, _Arg>
- {
- static const bool __value = noexcept(static_cast<_Tp>(declval<_Arg>()));
- };
+ template<typename _Tp>
+ struct __is_copy_assignable_impl<_Tp, false>
+ : public is_assignable<_Tp&, const _Tp&>
+ { };
- /// is_nothrow_constructible
- template<typename _Tp, typename... _Args>
- struct is_nothrow_constructible
- : public integral_constant<bool,
- __is_nt_constructible_helper<is_constructible<_Tp, _Args...>::value,
- _Tp, _Args...>::__value>
+ /// is_copy_assignable
+ template<typename _Tp>
+ struct is_copy_assignable
+ : public __is_copy_assignable_impl<_Tp>
+ { };
+
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_move_assignable_impl;
+
+ template<typename _Tp>
+ struct __is_move_assignable_impl<_Tp, true>
+ : public false_type { };
+
+ template<typename _Tp>
+ struct __is_move_assignable_impl<_Tp, false>
+ : public is_assignable<_Tp&, _Tp&&>
+ { };
+
+ /// is_move_assignable
+ template<typename _Tp>
+ struct is_move_assignable
+ : public __is_move_assignable_impl<_Tp>
+ { };
+
+ template<typename _Tp, typename _Up>
+ struct __is_nt_assignable_impl
+ : public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
+ { };
+
+ /// is_nothrow_assignable
+ template<typename _Tp, typename _Up>
+ struct is_nothrow_assignable
+ : public __and_<is_assignable<_Tp, _Up>,
+ __is_nt_assignable_impl<_Tp, _Up>>::type
+ { };
+
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_nt_copy_assignable_impl;
+
+ template<typename _Tp>
+ struct __is_nt_copy_assignable_impl<_Tp, true>
+ : public false_type { };
+
+ template<typename _Tp>
+ struct __is_nt_copy_assignable_impl<_Tp, false>
+ : public is_nothrow_assignable<_Tp&, const _Tp&>
+ { };
+
+ /// is_nothrow_copy_assignable
+ template<typename _Tp>
+ struct is_nothrow_copy_assignable
+ : public __is_nt_copy_assignable_impl<_Tp>
+ { };
+
+ template<typename _Tp, bool = is_void<_Tp>::value>
+ struct __is_nt_move_assignable_impl;
+
+ template<typename _Tp>
+ struct __is_nt_move_assignable_impl<_Tp, true>
+ : public false_type { };
+
+ template<typename _Tp>
+ struct __is_nt_move_assignable_impl<_Tp, false>
+ : public is_nothrow_assignable<_Tp&, _Tp&&>
+ { };
+
+ /// is_nothrow_move_assignable
+ template<typename _Tp>
+ struct is_nothrow_move_assignable
+ : public __is_nt_move_assignable_impl<_Tp>
{ };
/// has_trivial_default_constructor
@@ -732,25 +1170,63 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public integral_constant<bool, __has_trivial_destructor(_Tp)>
{ };
- /// has_nothrow_default_constructor
+ /// has_virtual_destructor
template<typename _Tp>
- struct has_nothrow_default_constructor
- : public integral_constant<bool, __has_nothrow_constructor(_Tp)>
+ struct has_virtual_destructor
+ : public integral_constant<bool, __has_virtual_destructor(_Tp)>
{ };
- /// has_nothrow_copy_constructor
+
+ // type property queries.
+
+ /// alignment_of
template<typename _Tp>
- struct has_nothrow_copy_constructor
- : public integral_constant<bool, __has_nothrow_copy(_Tp)>
- { };
+ struct alignment_of
+ : public integral_constant<std::size_t, __alignof__(_Tp)> { };
+
+ /// rank
+ template<typename>
+ struct rank
+ : public integral_constant<std::size_t, 0> { };
+
+ template<typename _Tp, std::size_t _Size>
+ struct rank<_Tp[_Size]>
+ : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
- /// has_nothrow_copy_assign
template<typename _Tp>
- struct has_nothrow_copy_assign
- : public integral_constant<bool, __has_nothrow_assign(_Tp)>
+ struct rank<_Tp[]>
+ : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+
+ /// extent
+ template<typename, unsigned _Uint>
+ struct extent
+ : public integral_constant<std::size_t, 0> { };
+
+ template<typename _Tp, unsigned _Uint, std::size_t _Size>
+ struct extent<_Tp[_Size], _Uint>
+ : public integral_constant<std::size_t,
+ _Uint == 0 ? _Size : extent<_Tp,
+ _Uint - 1>::value>
+ { };
+
+ template<typename _Tp, unsigned _Uint>
+ struct extent<_Tp[], _Uint>
+ : public integral_constant<std::size_t,
+ _Uint == 0 ? 0 : extent<_Tp,
+ _Uint - 1>::value>
{ };
- // Relationships between types.
+
+ // type relations.
+
+ /// is_same
+ template<typename, typename>
+ struct is_same
+ : public false_type { };
+
+ template<typename _Tp>
+ struct is_same<_Tp, _Tp>
+ : public true_type { };
/// is_base_of
template<typename _Base, typename _Derived>
@@ -759,10 +1235,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ };
template<typename _From, typename _To,
- bool = (is_void<_From>::value || is_function<_To>::value
- || is_array<_To>::value)>
+ bool = __or_<is_void<_From>, is_function<_To>,
+ is_array<_To>>::value>
struct __is_convertible_helper
- { static const bool __value = is_void<_To>::value; };
+ { static constexpr bool value = is_void<_To>::value; };
template<typename _From, typename _To>
class __is_convertible_helper<_From, _To, false>
@@ -779,16 +1255,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static __two __test(...);
public:
- static const bool __value = sizeof(__test<_From, _To>(0)) == 1;
+ static constexpr bool value = sizeof(__test<_From, _To>(0)) == 1;
};
/// is_convertible
- // XXX FIXME
- // The C++0x specifications require front-end support, see N2255.
template<typename _From, typename _To>
struct is_convertible
: public integral_constant<bool,
- __is_convertible_helper<_From, _To>::__value>
+ __is_convertible_helper<_From, _To>::value>
{ };
/// is_explicitly_convertible
@@ -797,124 +1271,109 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public is_constructible<_To, _From>
{ };
- template<std::size_t _Len>
- struct __aligned_storage_msa
- {
- union __type
- {
- unsigned char __data[_Len];
- struct __attribute__((__aligned__)) { } __align;
- };
- };
-
- /**
- * @brief Alignment type.
- *
- * The value of _Align is a default-alignment which shall be the
- * most stringent alignment requirement for any C++ object type
- * whose size is no greater than _Len (3.9). The member typedef
- * type shall be a POD type suitable for use as uninitialized
- * storage for any object whose size is at most _Len and whose
- * alignment is a divisor of _Align.
- */
- template<std::size_t _Len, std::size_t _Align =
- __alignof__(typename __aligned_storage_msa<_Len>::__type)>
- struct aligned_storage
- {
- union type
- {
- unsigned char __data[_Len];
- struct __attribute__((__aligned__((_Align)))) { } __align;
- };
- };
+ // const-volatile modifications.
- // Define a nested type if some predicate holds.
- // Primary template.
- /// enable_if
- template<bool, typename _Tp = void>
- struct enable_if
- { };
-
- // Partial specialization for true.
+ /// remove_const
template<typename _Tp>
- struct enable_if<true, _Tp>
- { typedef _Tp type; };
-
-
- // A conditional expression, but for types. If true, first, if false, second.
- // Primary template.
- /// conditional
- template<bool _Cond, typename _Iftrue, typename _Iffalse>
- struct conditional
- { typedef _Iftrue type; };
+ struct remove_const
+ { typedef _Tp type; };
- // Partial specialization for false.
- template<typename _Iftrue, typename _Iffalse>
- struct conditional<false, _Iftrue, _Iffalse>
- { typedef _Iffalse type; };
+ template<typename _Tp>
+ struct remove_const<_Tp const>
+ { typedef _Tp type; };
+
+ /// remove_volatile
+ template<typename _Tp>
+ struct remove_volatile
+ { typedef _Tp type; };
+ template<typename _Tp>
+ struct remove_volatile<_Tp volatile>
+ { typedef _Tp type; };
+
+ /// remove_cv
+ template<typename _Tp>
+ struct remove_cv
+ {
+ typedef typename
+ remove_const<typename remove_volatile<_Tp>::type>::type type;
+ };
+
+ /// add_const
+ template<typename _Tp>
+ struct add_const
+ { typedef _Tp const type; };
+
+ /// add_volatile
+ template<typename _Tp>
+ struct add_volatile
+ { typedef _Tp volatile type; };
+
+ /// add_cv
+ template<typename _Tp>
+ struct add_cv
+ {
+ typedef typename
+ add_const<typename add_volatile<_Tp>::type>::type type;
+ };
- // Decay trait for arrays and functions, used for perfect forwarding
- // in make_pair, make_tuple, etc.
- template<typename _Up,
- bool _IsArray = is_array<_Up>::value,
- bool _IsFunction = is_function<_Up>::value>
- struct __decay_selector;
- // NB: DR 705.
- template<typename _Up>
- struct __decay_selector<_Up, false, false>
- { typedef typename remove_cv<_Up>::type __type; };
+ // Reference transformations.
- template<typename _Up>
- struct __decay_selector<_Up, true, false>
- { typedef typename remove_extent<_Up>::type* __type; };
+ /// remove_reference
+ template<typename _Tp>
+ struct remove_reference
+ { typedef _Tp type; };
- template<typename _Up>
- struct __decay_selector<_Up, false, true>
- { typedef typename add_pointer<_Up>::type __type; };
+ template<typename _Tp>
+ struct remove_reference<_Tp&>
+ { typedef _Tp type; };
- /// decay
- template<typename _Tp>
- class decay
- {
- typedef typename remove_reference<_Tp>::type __remove_type;
+ template<typename _Tp>
+ struct remove_reference<_Tp&&>
+ { typedef _Tp type; };
- public:
- typedef typename __decay_selector<__remove_type>::__type type;
- };
+ template<typename _Tp,
+ bool = __and_<__not_<is_reference<_Tp>>,
+ __not_<is_void<_Tp>>>::value,
+ bool = is_rvalue_reference<_Tp>::value>
+ struct __add_lvalue_reference_helper
+ { typedef _Tp type; };
template<typename _Tp>
- class reference_wrapper;
+ struct __add_lvalue_reference_helper<_Tp, true, false>
+ { typedef _Tp& type; };
- // Helper which adds a reference to a type when given a reference_wrapper
template<typename _Tp>
- struct __strip_reference_wrapper
- {
- typedef _Tp __type;
- };
+ struct __add_lvalue_reference_helper<_Tp, false, true>
+ { typedef typename remove_reference<_Tp>::type& type; };
+ /// add_lvalue_reference
template<typename _Tp>
- struct __strip_reference_wrapper<reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
+ struct add_lvalue_reference
+ : public __add_lvalue_reference_helper<_Tp>
+ { };
+
+ template<typename _Tp,
+ bool = __and_<__not_<is_reference<_Tp>>,
+ __not_<is_void<_Tp>>>::value>
+ struct __add_rvalue_reference_helper
+ { typedef _Tp type; };
template<typename _Tp>
- struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
+ struct __add_rvalue_reference_helper<_Tp, true>
+ { typedef _Tp&& type; };
+ /// add_rvalue_reference
template<typename _Tp>
- struct __decay_and_strip
- {
- typedef typename __strip_reference_wrapper<
- typename decay<_Tp>::type>::__type __type;
- };
+ struct add_rvalue_reference
+ : public __add_rvalue_reference_helper<_Tp>
+ { };
+ // sign modifications.
+
// Utility for constructing identically cv-qualified types.
template<typename _Unqualified, bool _IsConst, bool _IsVol>
struct __cv_selector;
@@ -946,7 +1405,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename __match::__type __type;
};
-
// Utility for finding the unsigned versions of signed integral types.
template<typename _Tp>
struct __make_unsigned
@@ -976,6 +1434,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __make_unsigned<long long>
{ typedef unsigned long long __type; };
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ template<>
+ struct __make_unsigned<__int128>
+ { typedef unsigned __int128 __type; };
+#endif
// Select between integral and enum: not possible to be both.
template<typename _Tp,
@@ -1053,6 +1516,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __make_signed<unsigned long long>
{ typedef signed long long __type; };
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ template<>
+ struct __make_signed<unsigned __int128>
+ { typedef __int128 __type; };
+#endif
// Select between integral and enum: not possible to be both.
template<typename _Tp,
@@ -1100,6 +1568,174 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<>
struct make_signed<bool>;
+
+ // array modifications.
+
+ /// remove_extent
+ template<typename _Tp>
+ struct remove_extent
+ { typedef _Tp type; };
+
+ template<typename _Tp, std::size_t _Size>
+ struct remove_extent<_Tp[_Size]>
+ { typedef _Tp type; };
+
+ template<typename _Tp>
+ struct remove_extent<_Tp[]>
+ { typedef _Tp type; };
+
+ /// remove_all_extents
+ template<typename _Tp>
+ struct remove_all_extents
+ { typedef _Tp type; };
+
+ template<typename _Tp, std::size_t _Size>
+ struct remove_all_extents<_Tp[_Size]>
+ { typedef typename remove_all_extents<_Tp>::type type; };
+
+ template<typename _Tp>
+ struct remove_all_extents<_Tp[]>
+ { typedef typename remove_all_extents<_Tp>::type type; };
+
+
+ // pointer modifications.
+
+ template<typename _Tp, typename>
+ struct __remove_pointer_helper
+ { typedef _Tp type; };
+
+ template<typename _Tp, typename _Up>
+ struct __remove_pointer_helper<_Tp, _Up*>
+ { typedef _Up type; };
+
+ /// remove_pointer
+ template<typename _Tp>
+ struct remove_pointer
+ : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
+ { };
+
+ /// add_pointer
+ template<typename _Tp>
+ struct add_pointer
+ { typedef typename remove_reference<_Tp>::type* type; };
+
+
+ template<std::size_t _Len>
+ struct __aligned_storage_msa
+ {
+ union __type
+ {
+ unsigned char __data[_Len];
+ struct __attribute__((__aligned__)) { } __align;
+ };
+ };
+
+ /**
+ * @brief Alignment type.
+ *
+ * The value of _Align is a default-alignment which shall be the
+ * most stringent alignment requirement for any C++ object type
+ * whose size is no greater than _Len (3.9). The member typedef
+ * type shall be a POD type suitable for use as uninitialized
+ * storage for any object whose size is at most _Len and whose
+ * alignment is a divisor of _Align.
+ */
+ template<std::size_t _Len, std::size_t _Align =
+ __alignof__(typename __aligned_storage_msa<_Len>::__type)>
+ struct aligned_storage
+ {
+ union type
+ {
+ unsigned char __data[_Len];
+ struct __attribute__((__aligned__((_Align)))) { } __align;
+ };
+ };
+
+
+ // Decay trait for arrays and functions, used for perfect forwarding
+ // in make_pair, make_tuple, etc.
+ template<typename _Up,
+ bool _IsArray = is_array<_Up>::value,
+ bool _IsFunction = is_function<_Up>::value>
+ struct __decay_selector;
+
+ // NB: DR 705.
+ template<typename _Up>
+ struct __decay_selector<_Up, false, false>
+ { typedef typename remove_cv<_Up>::type __type; };
+
+ template<typename _Up>
+ struct __decay_selector<_Up, true, false>
+ { typedef typename remove_extent<_Up>::type* __type; };
+
+ template<typename _Up>
+ struct __decay_selector<_Up, false, true>
+ { typedef typename add_pointer<_Up>::type __type; };
+
+ /// decay
+ template<typename _Tp>
+ class decay
+ {
+ typedef typename remove_reference<_Tp>::type __remove_type;
+
+ public:
+ typedef typename __decay_selector<__remove_type>::__type type;
+ };
+
+ template<typename _Tp>
+ class reference_wrapper;
+
+ // Helper which adds a reference to a type when given a reference_wrapper
+ template<typename _Tp>
+ struct __strip_reference_wrapper
+ {
+ typedef _Tp __type;
+ };
+
+ template<typename _Tp>
+ struct __strip_reference_wrapper<reference_wrapper<_Tp> >
+ {
+ typedef _Tp& __type;
+ };
+
+ template<typename _Tp>
+ struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
+ {
+ typedef _Tp& __type;
+ };
+
+ template<typename _Tp>
+ struct __decay_and_strip
+ {
+ typedef typename __strip_reference_wrapper<
+ typename decay<_Tp>::type>::__type __type;
+ };
+
+
+ // Primary template.
+ /// Define a member typedef @c type only if a boolean constant is true.
+ template<bool, typename _Tp = void>
+ struct enable_if
+ { };
+
+ // Partial specialization for true.
+ template<typename _Tp>
+ struct enable_if<true, _Tp>
+ { typedef _Tp type; };
+
+
+ // Primary template.
+ /// Define a member typedef @c type to one of two argument types.
+ template<bool _Cond, typename _Iftrue, typename _Iffalse>
+ struct conditional
+ { typedef _Iftrue type; };
+
+ // Partial specialization for false.
+ template<typename _Iftrue, typename _Iffalse>
+ struct conditional<false, _Iftrue, _Iffalse>
+ { typedef _Iffalse type; };
+
+
/// common_type
template<typename... _Tp>
struct common_type;
@@ -1119,7 +1755,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
};
- /// declval
+ /// The underlying type of an enum.
+ template<typename _Tp>
+ struct underlying_type
+ {
+ typedef __underlying_type(_Tp) type;
+ };
+
template<typename _Tp>
struct __declval_protector
{
@@ -1248,7 +1890,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static __two __test(...); \
\
public: \
- static const bool value = sizeof(__test<_Tp>(0)) == 1; \
+ static constexpr bool value = sizeof(__test<_Tp>(0)) == 1; \
}; \
\
template<typename _Tp> \
@@ -1257,12 +1899,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
<typename remove_cv<_Tp>::type>::value> \
{ };
-#undef _DEFINE_SPEC_0_HELPER
-#undef _DEFINE_SPEC_1_HELPER
-#undef _DEFINE_SPEC_2_HELPER
-#undef _DEFINE_SPEC
-
- // @} group metaprogramming
+ /// @} group metaprogramming
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/std/typeindex b/libstdc++-v3/include/std/typeindex
index 79b3eadf7a..fa07ac620e 100644
--- a/libstdc++-v3/include/std/typeindex
+++ b/libstdc++-v3/include/std/typeindex
@@ -1,6 +1,6 @@
// C++0x typeindex -*- C++ -*-
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,35 +48,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
struct type_index
{
- type_index(const type_info& __rhs)
+ type_index(const type_info& __rhs) noexcept
: _M_target(&__rhs) { }
bool
- operator==(const type_index& __rhs) const
+ operator==(const type_index& __rhs) const noexcept
{ return *_M_target == *__rhs._M_target; }
bool
- operator!=(const type_index& __rhs) const
+ operator!=(const type_index& __rhs) const noexcept
{ return *_M_target != *__rhs._M_target; }
bool
- operator<(const type_index& __rhs) const
+ operator<(const type_index& __rhs) const noexcept
{ return _M_target->before(*__rhs._M_target); }
bool
- operator<=(const type_index& __rhs) const
+ operator<=(const type_index& __rhs) const noexcept
{ return !__rhs._M_target->before(*_M_target); }
bool
- operator>(const type_index& __rhs) const
+ operator>(const type_index& __rhs) const noexcept
{ return __rhs._M_target->before(*_M_target); }
bool
- operator>=(const type_index& __rhs) const
+ operator>=(const type_index& __rhs) const noexcept
{ return !_M_target->before(*__rhs._M_target); }
size_t
- hash_code() const
+ hash_code() const noexcept
{ return _M_target->hash_code(); }
const char*
@@ -97,7 +97,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef type_index argument_type;
size_t
- operator()(const type_index& __ti) const
+ operator()(const type_index& __ti) const noexcept
{ return __ti.hash_code(); }
};
diff --git a/libstdc++-v3/include/std/unordered_map b/libstdc++-v3/include/std/unordered_map
index e77a2972af..1476a0c037 100644
--- a/libstdc++-v3/include/std/unordered_map
+++ b/libstdc++-v3/include/std/unordered_map
@@ -1,6 +1,6 @@
// <unordered_map> -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,6 +40,7 @@
#include <initializer_list>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
+#include <bits/alloc_traits.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <bits/functional_hash.h>
#include <bits/hashtable.h>
diff --git a/libstdc++-v3/include/std/unordered_set b/libstdc++-v3/include/std/unordered_set
index 739e0a4a44..aafbb7663b 100644
--- a/libstdc++-v3/include/std/unordered_set
+++ b/libstdc++-v3/include/std/unordered_set
@@ -1,6 +1,6 @@
// <unordered_set> -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,6 +40,7 @@
#include <initializer_list>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
+#include <bits/alloc_traits.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <bits/functional_hash.h>
#include <bits/hashtable.h>
diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility
index 245c41fa75..11efd74335 100644
--- a/libstdc++-v3/include/std/utility
+++ b/libstdc++-v3/include/std/utility
@@ -1,6 +1,7 @@
// <utility> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -86,19 +87,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Various functions which give std::pair a tuple-like interface.
template<class _Tp1, class _Tp2>
- struct tuple_size<std::pair<_Tp1, _Tp2> >
- { static const std::size_t value = 2; };
+ struct tuple_size<std::pair<_Tp1, _Tp2>>
+ : public integral_constant<std::size_t, 2> { };
template<class _Tp1, class _Tp2>
- const std::size_t
- tuple_size<std::pair<_Tp1, _Tp2> >::value;
-
- template<class _Tp1, class _Tp2>
- struct tuple_element<0, std::pair<_Tp1, _Tp2> >
+ struct tuple_element<0, std::pair<_Tp1, _Tp2>>
{ typedef _Tp1 type; };
template<class _Tp1, class _Tp2>
- struct tuple_element<1, std::pair<_Tp1, _Tp2> >
+ struct tuple_element<1, std::pair<_Tp1, _Tp2>>
{ typedef _Tp2 type; };
template<std::size_t _Int>
@@ -108,34 +105,53 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __pair_get<0>
{
template<typename _Tp1, typename _Tp2>
- static _Tp1& __get(std::pair<_Tp1, _Tp2>& __pair)
- { return __pair.first; }
+ static constexpr _Tp1&
+ __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
+ { return __pair.first; }
+
+ template<typename _Tp1, typename _Tp2>
+ static constexpr _Tp1&&
+ __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
+ { return std::forward<_Tp1>(__pair.first); }
template<typename _Tp1, typename _Tp2>
- static const _Tp1& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
- { return __pair.first; }
+ static constexpr const _Tp1&
+ __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
+ { return __pair.first; }
};
template<>
struct __pair_get<1>
{
template<typename _Tp1, typename _Tp2>
- static _Tp2& __get(std::pair<_Tp1, _Tp2>& __pair)
- { return __pair.second; }
+ static constexpr _Tp2&
+ __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
+ { return __pair.second; }
template<typename _Tp1, typename _Tp2>
- static const _Tp2& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
- { return __pair.second; }
+ static constexpr _Tp2&&
+ __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
+ { return std::forward<_Tp2>(__pair.second); }
+
+ template<typename _Tp1, typename _Tp2>
+ static constexpr const _Tp2&
+ __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
+ { return __pair.second; }
};
template<std::size_t _Int, class _Tp1, class _Tp2>
- inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
- get(std::pair<_Tp1, _Tp2>& __in)
+ constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
+ get(std::pair<_Tp1, _Tp2>& __in) noexcept
{ return __pair_get<_Int>::__get(__in); }
template<std::size_t _Int, class _Tp1, class _Tp2>
- inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
- get(const std::pair<_Tp1, _Tp2>& __in)
+ constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
+ get(std::pair<_Tp1, _Tp2>&& __in) noexcept
+ { return __pair_get<_Int>::__move_get(std::move(__in)); }
+
+ template<std::size_t _Int, class _Tp1, class _Tp2>
+ constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
+ get(const std::pair<_Tp1, _Tp2>& __in) noexcept
{ return __pair_get<_Int>::__const_get(__in); }
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/std/valarray b/libstdc++-v3/include/std/valarray
index 9c18e05031..a159aab51a 100644
--- a/libstdc++-v3/include/std/valarray
+++ b/libstdc++-v3/include/std/valarray
@@ -1,7 +1,7 @@
// The template and inlines for the -*- C++ -*- valarray class.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -39,7 +39,9 @@
#include <cmath>
#include <algorithm>
#include <debug/debug.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <initializer_list>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -110,7 +112,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* one-dimensional array from which different multidimensional subsets can
* be accessed and modified.
*
- * @param Tp Type of object in the array.
+ * @tparam _Tp Type of object in the array.
*/
template<class _Tp>
class valarray
@@ -140,6 +142,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Copy constructor.
valarray(const valarray&);
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /// Move constructor.
+ valarray(valarray&&) noexcept;
+#endif
+
/// Construct an array with the same size and values in @a sa.
valarray(const slice_array<_Tp>&);
@@ -160,27 +167,37 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<class _Dom>
valarray(const _Expr<_Dom, _Tp>& __e);
- ~valarray();
+ ~valarray() _GLIBCXX_NOEXCEPT;
// _lib.valarray.assign_ assignment:
/**
* @brief Assign elements to an array.
*
- * Assign elements of array to values in @a v. Results are undefined
- * if @a v does not have the same size as this array.
+ * Assign elements of array to values in @a v.
*
- * @param v Valarray to get values from.
+ * @param __v Valarray to get values from.
*/
- valarray<_Tp>& operator=(const valarray<_Tp>&);
+ valarray<_Tp>& operator=(const valarray<_Tp>& __v);
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Move assign elements to an array.
+ *
+ * Move assign elements of array to values in @a v.
+ *
+ * @param __v Valarray to get values from.
+ */
+ valarray<_Tp>& operator=(valarray<_Tp>&& __v) noexcept;
+#endif
/**
* @brief Assign elements to a value.
*
* Assign all elements of array to @a t.
*
- * @param t Value for elements.
+ * @param __t Value for elements.
*/
- valarray<_Tp>& operator=(const _Tp&);
+ valarray<_Tp>& operator=(const _Tp& __t);
/**
* @brief Assign elements to an array subset.
@@ -188,9 +205,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Assign elements of array to values in @a sa. Results are undefined
* if @a sa does not have the same size as this array.
*
- * @param sa Array slice to get values from.
+ * @param __sa Array slice to get values from.
*/
- valarray<_Tp>& operator=(const slice_array<_Tp>&);
+ valarray<_Tp>& operator=(const slice_array<_Tp>& __sa);
/**
* @brief Assign elements to an array subset.
@@ -198,9 +215,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Assign elements of array to values in @a ga. Results are undefined
* if @a ga does not have the same size as this array.
*
- * @param ga Array slice to get values from.
+ * @param __ga Array slice to get values from.
*/
- valarray<_Tp>& operator=(const gslice_array<_Tp>&);
+ valarray<_Tp>& operator=(const gslice_array<_Tp>& __ga);
/**
* @brief Assign elements to an array subset.
@@ -208,9 +225,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Assign elements of array to values in @a ma. Results are undefined
* if @a ma does not have the same size as this array.
*
- * @param ma Array slice to get values from.
+ * @param __ma Array slice to get values from.
*/
- valarray<_Tp>& operator=(const mask_array<_Tp>&);
+ valarray<_Tp>& operator=(const mask_array<_Tp>& __ma);
/**
* @brief Assign elements to an array subset.
@@ -218,20 +235,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Assign elements of array to values in @a ia. Results are undefined
* if @a ia does not have the same size as this array.
*
- * @param ia Array slice to get values from.
+ * @param __ia Array slice to get values from.
*/
- valarray<_Tp>& operator=(const indirect_array<_Tp>&);
+ valarray<_Tp>& operator=(const indirect_array<_Tp>& __ia);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Assign elements to an initializer_list.
*
- * Assign elements of array to values in @a l. Results are undefined
- * if @a l does not have the same size as this array.
+ * Assign elements of array to values in @a __l. Results are undefined
+ * if @a __l does not have the same size as this array.
*
- * @param l initializer_list to get values from.
+ * @param __l initializer_list to get values from.
*/
- valarray& operator=(initializer_list<_Tp>);
+ valarray& operator=(initializer_list<_Tp> __l);
#endif
template<class _Dom> valarray<_Tp>&
@@ -241,10 +258,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return a reference to the i'th array element.
*
- * @param i Index of element to return.
+ * @param __i Index of element to return.
* @return Reference to the i'th element.
*/
- _Tp& operator[](size_t);
+ _Tp& operator[](size_t __i);
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 389. Const overload of valarray::operator[] returns by value.
@@ -258,10 +275,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* indicated by the slice argument. The new valarray has the same size
* as the input slice. @see slice.
*
- * @param s The source slice.
- * @return New valarray containing elements in @a s.
+ * @param __s The source slice.
+ * @return New valarray containing elements in @a __s.
*/
- _Expr<_SClos<_ValArray, _Tp>, _Tp> operator[](slice) const;
+ _Expr<_SClos<_ValArray, _Tp>, _Tp> operator[](slice __s) const;
/**
* @brief Return a reference to an array subset.
@@ -270,10 +287,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* indicated by the slice argument. The new valarray has the same size
* as the input slice. @see slice.
*
- * @param s The source slice.
- * @return New valarray containing elements in @a s.
+ * @param __s The source slice.
+ * @return New valarray containing elements in @a __s.
*/
- slice_array<_Tp> operator[](slice);
+ slice_array<_Tp> operator[](slice __s);
/**
* @brief Return an array subset.
@@ -281,10 +298,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Returns a slice_array referencing the elements of the array
* indicated by the slice argument. @see gslice.
*
- * @param s The source slice.
- * @return Slice_array referencing elements indicated by @a s.
+ * @param __s The source slice.
+ * @return Slice_array referencing elements indicated by @a __s.
*/
- _Expr<_GClos<_ValArray, _Tp>, _Tp> operator[](const gslice&) const;
+ _Expr<_GClos<_ValArray, _Tp>, _Tp> operator[](const gslice& __s) const;
/**
* @brief Return a reference to an array subset.
@@ -293,10 +310,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* indicated by the gslice argument. The new valarray has
* the same size as the input gslice. @see gslice.
*
- * @param s The source gslice.
- * @return New valarray containing elements in @a s.
+ * @param __s The source gslice.
+ * @return New valarray containing elements in @a __s.
*/
- gslice_array<_Tp> operator[](const gslice&);
+ gslice_array<_Tp> operator[](const gslice& __s);
/**
* @brief Return an array subset.
@@ -307,10 +324,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* the new valarray. Each element of the array is added to the return
* valarray if the corresponding element of the argument is true.
*
- * @param m The valarray bitmask.
- * @return New valarray containing elements indicated by @a m.
+ * @param __m The valarray bitmask.
+ * @return New valarray containing elements indicated by @a __m.
*/
- valarray<_Tp> operator[](const valarray<bool>&) const;
+ valarray<_Tp> operator[](const valarray<bool>& __m) const;
/**
* @brief Return a reference to an array subset.
@@ -321,10 +338,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* subset. Elements of the array are part of the subset if the
* corresponding element of the argument is true.
*
- * @param m The valarray bitmask.
- * @return New valarray containing elements indicated by @a m.
+ * @param __m The valarray bitmask.
+ * @return New valarray containing elements indicated by @a __m.
*/
- mask_array<_Tp> operator[](const valarray<bool>&);
+ mask_array<_Tp> operator[](const valarray<bool>& __m);
/**
* @brief Return an array subset.
@@ -334,11 +351,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* interpreted as the indices of elements of this valarray to copy to
* the return valarray.
*
- * @param i The valarray element index list.
- * @return New valarray containing elements in @a s.
+ * @param __i The valarray element index list.
+ * @return New valarray containing elements in @a __s.
*/
_Expr<_IClos<_ValArray, _Tp>, _Tp>
- operator[](const valarray<size_t>&) const;
+ operator[](const valarray<size_t>& __i) const;
/**
* @brief Return a reference to an array subset.
@@ -349,10 +366,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* in the subset. The returned indirect_array refers to these
* elements.
*
- * @param i The valarray element index list.
- * @return Indirect_array referencing elements in @a i.
+ * @param __i The valarray element index list.
+ * @return Indirect_array referencing elements in @a __i.
*/
- indirect_array<_Tp> operator[](const valarray<size_t>&);
+ indirect_array<_Tp> operator[](const valarray<size_t>& __i);
// _lib.valarray.unary_ unary operators:
/// Return a new valarray by applying unary + to each element.
@@ -450,6 +467,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
valarray<_Tp>& operator>>=(const _Expr<_Dom, _Tp>&);
// _lib.valarray.members_ member functions:
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /// Swap.
+ void swap(valarray<_Tp>& __v) noexcept;
+#endif
+
/// Return the number of elements in array.
size_t size() const;
@@ -479,10 +501,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Positive arguments shift toward index 0, discarding elements [0, n).
* Negative arguments discard elements from the top of the array.
*
- * @param n Number of element positions to shift.
+ * @param __n Number of element positions to shift.
* @return New valarray with elements in shifted positions.
*/
- valarray<_Tp> shift (int) const;
+ valarray<_Tp> shift (int __n) const;
/**
* @brief Return a rotated array.
@@ -496,10 +518,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Positive arguments shift toward index 0, wrapping around the top.
* Negative arguments shift towards the top, wrapping around to 0.
*
- * @param n Number of element positions to rotate.
+ * @param __n Number of element positions to rotate.
* @return New valarray with elements in shifted positions.
*/
- valarray<_Tp> cshift(int) const;
+ valarray<_Tp> cshift(int __n) const;
/**
* @brief Apply a function to the array.
@@ -531,8 +553,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Resize this array to @a size and set all elements to @a c. All
* references and iterators are invalidated.
*
- * @param size New array size.
- * @param c New value for all elements.
+ * @param __size New array size.
+ * @param __c New value for all elements.
*/
void resize(size_t __size, _Tp __c = _Tp());
@@ -612,6 +634,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ std::__valarray_copy_construct(__v._M_data, __v._M_data + _M_size,
_M_data); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Tp>
+ inline
+ valarray<_Tp>::valarray(valarray<_Tp>&& __v) noexcept
+ : _M_size(__v._M_size), _M_data(__v._M_data)
+ {
+ __v._M_size = 0;
+ __v._M_data = 0;
+ }
+#endif
+
template<typename _Tp>
inline
valarray<_Tp>::valarray(const slice_array<_Tp>& __sa)
@@ -655,7 +688,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline
valarray<_Tp>::valarray(initializer_list<_Tp> __l)
: _M_size(__l.size()), _M_data(__valarray_get_storage<_Tp>(__l.size()))
- { std::__valarray_copy_construct (__l.begin(), __l.end(), _M_data); }
+ { std::__valarray_copy_construct(__l.begin(), __l.end(), _M_data); }
#endif
template<typename _Tp> template<class _Dom>
@@ -666,7 +699,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
inline
- valarray<_Tp>::~valarray()
+ valarray<_Tp>::~valarray() _GLIBCXX_NOEXCEPT
{
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
std::__valarray_release_memory(_M_data);
@@ -698,6 +731,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Tp>
inline valarray<_Tp>&
+ valarray<_Tp>::operator=(valarray<_Tp>&& __v) noexcept
+ {
+ if (_M_data)
+ {
+ std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
+ std::__valarray_release_memory(_M_data);
+ }
+ _M_size = __v._M_size;
+ _M_data = __v._M_data;
+ __v._M_size = 0;
+ __v._M_data = 0;
+ return *this;
+ }
+
+ template<typename _Tp>
+ inline valarray<_Tp>&
valarray<_Tp>::operator=(initializer_list<_Tp> __l)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -846,6 +895,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Array<size_t>(__i));
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<class _Tp>
+ inline void
+ valarray<_Tp>::swap(valarray<_Tp>& __v) noexcept
+ {
+ std::swap(_M_size, __v._M_size);
+ std::swap(_M_data, __v._M_data);
+ }
+#endif
+
template<class _Tp>
inline size_t
valarray<_Tp>::size() const
@@ -1119,7 +1178,7 @@ _DEFINE_BINARY_OPERATOR(>=, __greater_equal)
/**
* @brief Return an iterator pointing to the first element of
* the valarray.
- * @param va valarray.
+ * @param __va valarray.
*/
template<class _Tp>
inline _Tp*
@@ -1129,7 +1188,7 @@ _DEFINE_BINARY_OPERATOR(>=, __greater_equal)
/**
* @brief Return an iterator pointing to the first element of
* the const valarray.
- * @param va valarray.
+ * @param __va valarray.
*/
template<class _Tp>
inline const _Tp*
@@ -1139,7 +1198,7 @@ _DEFINE_BINARY_OPERATOR(>=, __greater_equal)
/**
* @brief Return an iterator pointing to one past the last element of
* the valarray.
- * @param va valarray.
+ * @param __va valarray.
*/
template<class _Tp>
inline _Tp*
@@ -1149,7 +1208,7 @@ _DEFINE_BINARY_OPERATOR(>=, __greater_equal)
/**
* @brief Return an iterator pointing to one past the last element of
* the const valarray.
- * @param va valarray.
+ * @param __va valarray.
*/
template<class _Tp>
inline const _Tp*
diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath
index 21bdee8865..e702bee16f 100644
--- a/libstdc++-v3/include/tr1/cmath
+++ b/libstdc++-v3/include/tr1/cmath
@@ -429,12 +429,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_acoshl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
acosh(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return acosh(__type(__x));
- }
+ { return __builtin_acosh(__x); }
using std::asin;
@@ -447,12 +445,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_asinhl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
asinh(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return asinh(__type(__x));
- }
+ { return __builtin_asinh(__x); }
using std::atan;
using std::atan2;
@@ -466,12 +462,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_atanhl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
atanh(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return atanh(__type(__x));
- }
+ { return __builtin_atanh(__x); }
inline float
cbrt(float __x)
@@ -482,12 +476,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_cbrtl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
cbrt(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return cbrt(__type(__x));
- }
+ { return __builtin_cbrt(__x); }
using std::ceil;
@@ -519,12 +511,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_erfl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
erf(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return erf(__type(__x));
- }
+ { return __builtin_erf(__x); }
inline float
erfc(float __x)
@@ -535,12 +525,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_erfcl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
erfc(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return erfc(__type(__x));
- }
+ { return __builtin_erfc(__x); }
using std::exp;
@@ -553,12 +541,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_exp2l(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
exp2(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return exp2(__type(__x));
- }
+ { return __builtin_exp2(__x); }
inline float
expm1(float __x)
@@ -569,18 +555,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_expm1l(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
expm1(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return expm1(__type(__x));
- }
+ { return __builtin_expm1(__x); }
// Note: we deal with fabs in a special way, because an using std::fabs
// would bring in also the overloads for complex types, which in C++0x
// mode have a different return type.
+ // With __CORRECT_ISO_CPP_MATH_H_PROTO1, math.h imports std::fabs in the
+ // global namespace after the declarations of the float / double / long
+ // double overloads but before the std::complex overloads.
using ::fabs;
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
inline float
fabs(float __x)
{ return __builtin_fabsf(__x); }
@@ -594,6 +582,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
double>::__type
fabs(_Tp __x)
{ return __builtin_fabs(__x); }
+#endif
inline float
fdim(float __x, float __y)
@@ -674,10 +663,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp, typename _Up>
inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- hypot(_Tp __x, _Up __y)
+ hypot(_Tp __y, _Up __x)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return hypot(__type(__x), __type(__y));
+ return hypot(__type(__y), __type(__x));
}
inline int
@@ -689,12 +678,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_ilogbl(__x); }
template<typename _Tp>
- inline int
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ int>::__type
ilogb(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return ilogb(__type(__x));
- }
+ { return __builtin_ilogb(__x); }
using std::ldexp;
@@ -707,12 +694,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_lgammal(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
lgamma(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return lgamma(__type(__x));
- }
+ { return __builtin_lgamma(__x); }
inline long long
llrint(float __x)
@@ -723,12 +708,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_llrintl(__x); }
template<typename _Tp>
- inline long long
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long long>::__type
llrint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return llrint(__type(__x));
- }
+ { return __builtin_llrint(__x); }
inline long long
llround(float __x)
@@ -739,12 +722,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_llroundl(__x); }
template<typename _Tp>
- inline long long
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long long>::__type
llround(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return llround(__type(__x));
- }
+ { return __builtin_llround(__x); }
using std::log;
using std::log10;
@@ -758,12 +739,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_log1pl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
log1p(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return log1p(__type(__x));
- }
+ { return __builtin_log1p(__x); }
// DR 568.
inline float
@@ -775,12 +754,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_log2l(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
log2(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return log2(__type(__x));
- }
+ { return __builtin_log2(__x); }
inline float
logb(float __x)
@@ -791,11 +768,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_logbl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
logb(_Tp __x)
{
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return logb(__type(__x));
+ return __builtin_logb(__x);
}
inline long
@@ -807,12 +784,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_lrintl(__x); }
template<typename _Tp>
- inline long
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long>::__type
lrint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return lrint(__type(__x));
- }
+ { return __builtin_lrint(__x); }
inline long
lround(float __x)
@@ -823,12 +798,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_lroundl(__x); }
template<typename _Tp>
- inline long
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ long>::__type
lround(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return lround(__type(__x));
- }
+ { return __builtin_lround(__x); }
inline float
nearbyint(float __x)
@@ -839,12 +812,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_nearbyintl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
nearbyint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return nearbyint(__type(__x));
- }
+ { return __builtin_nearbyint(__x); }
inline float
nextafter(float __x, float __y)
@@ -871,12 +842,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_nexttowardl(__x, __y); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
nexttoward(_Tp __x, long double __y)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return nexttoward(__type(__x), __y);
- }
+ { return __builtin_nexttoward(__x, __y); }
// DR 550. What should the return type of pow(float,int) be?
// NB: C++0x and TR1 != C++03.
@@ -923,12 +892,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_rintl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
rint(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return rint(__type(__x));
- }
+ { return __builtin_rint(__x); }
inline float
round(float __x)
@@ -939,12 +906,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_roundl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
round(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return round(__type(__x));
- }
+ { return __builtin_round(__x); }
inline float
scalbln(float __x, long __ex)
@@ -955,12 +920,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_scalblnl(__x, __ex); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
scalbln(_Tp __x, long __ex)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return scalbln(__type(__x), __ex);
- }
+ { return __builtin_scalbln(__x, __ex); }
inline float
scalbn(float __x, int __ex)
@@ -971,12 +934,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_scalbnl(__x, __ex); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
scalbn(_Tp __x, int __ex)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return scalbn(__type(__x), __ex);
- }
+ { return __builtin_scalbn(__x, __ex); }
using std::sin;
using std::sinh;
@@ -993,12 +954,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_tgammal(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
tgamma(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return tgamma(__type(__x));
- }
+ { return __builtin_tgamma(__x); }
inline float
trunc(float __x)
@@ -1009,12 +968,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __builtin_truncl(__x); }
template<typename _Tp>
- inline typename __gnu_cxx::__promote<_Tp>::__type
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
trunc(_Tp __x)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return trunc(__type(__x));
- }
+ { return __builtin_trunc(__x); }
#endif
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/tr1/complex b/libstdc++-v3/include/tr1/complex
index fc213b8f1d..689ea167ba 100644
--- a/libstdc++-v3/include/tr1/complex
+++ b/libstdc++-v3/include/tr1/complex
@@ -185,12 +185,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::complex<_Tp>
__complex_acosh(const std::complex<_Tp>& __z)
{
- std::complex<_Tp> __t((__z.real() - __z.imag())
- * (__z.real() + __z.imag()) - _Tp(1.0),
- _Tp(2.0) * __z.real() * __z.imag());
- __t = std::sqrt(__t);
-
- return std::log(__t + __z);
+ // Kahan's formula.
+ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
+ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
}
#if _GLIBCXX_USE_C99_COMPLEX_TR1
diff --git a/libstdc++-v3/include/tr1/exp_integral.tcc b/libstdc++-v3/include/tr1/exp_integral.tcc
index cf3bd63536..6a49b354ca 100644
--- a/libstdc++-v3/include/tr1/exp_integral.tcc
+++ b/libstdc++-v3/include/tr1/exp_integral.tcc
@@ -59,6 +59,8 @@ namespace tr1
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ template<typename _Tp> _Tp __expint_E1(const _Tp);
+
/**
* @brief Return the exponential integral @f$ E_1(x) @f$
* by series summation. This should be good
diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional
index 31e72d63ab..ef1461b694 100644
--- a/libstdc++-v3/include/tr1/functional
+++ b/libstdc++-v3/include/tr1/functional
@@ -1,6 +1,6 @@
// TR1 functional header -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -43,15 +43,29 @@
#include <tr1/functional_hash.h>
#include <ext/type_traits.h>
#include <bits/move.h> // for std::__addressof
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <type_traits> // for integral_constant, true_type, false_type
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ template<int> struct _Placeholder;
+ template<typename> class _Bind;
+ template<typename, typename> class _Bind_result;
+_GLIBCXX_END_NAMESPACE_VERSION
+#endif
+
namespace tr1
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _MemberPointer>
class _Mem_fn;
+ template<typename _Tp, typename _Class>
+ _Mem_fn<_Tp _Class::*>
+ mem_fn(_Tp _Class::*);
/**
* Actual implementation of _Has_result_type, which uses SFINAE to
@@ -844,16 +858,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
- /** @namespace std::placeholders
- * @brief ISO C++ 0x entities sub namespace for functional.
- *
- * Define a large number of placeholders. There is no way to
- * simplify this with variadic templates, because we're introducing
- * unique names for each.
+ /** @namespace std::tr1::placeholders
+ * @brief Sub-namespace for tr1/functional.
*/
namespace placeholders
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ /* Define a large number of placeholders. There is no way to
+ * simplify this with variadic templates, because we're introducing
+ * unique names for each.
+ */
namespace
{
_Placeholder<1> _1;
@@ -901,6 +915,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<int _Num>
const int is_placeholder<_Placeholder<_Num> >::value;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<int _Num>
+ struct is_placeholder<std::_Placeholder<_Num>>
+ : std::integral_constant<int, _Num>
+ { };
+
+ template<int _Num>
+ struct is_placeholder<const std::_Placeholder<_Num>>
+ : std::integral_constant<int, _Num>
+ { };
+#endif
+
/**
* Stores a tuple of indices. Used by bind() to extract the elements
* in a tuple.
@@ -1344,6 +1370,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Signature>
const bool is_bind_expression<_Bind<_Signature> >::value;
+ /// Class template _Bind is always a bind expression.
+ template<typename _Signature>
+ struct is_bind_expression<const _Bind<_Signature> >
+ { static const bool value = true; };
+
+ template<typename _Signature>
+ const bool is_bind_expression<const _Bind<_Signature> >::value;
+
+ /// Class template _Bind is always a bind expression.
+ template<typename _Signature>
+ struct is_bind_expression<volatile _Bind<_Signature> >
+ { static const bool value = true; };
+
+ template<typename _Signature>
+ const bool is_bind_expression<volatile _Bind<_Signature> >::value;
+
+ /// Class template _Bind is always a bind expression.
+ template<typename _Signature>
+ struct is_bind_expression<const volatile _Bind<_Signature> >
+ { static const bool value = true; };
+
+ template<typename _Signature>
+ const bool is_bind_expression<const volatile _Bind<_Signature> >::value;
+
/// Class template _Bind_result is always a bind expression.
template<typename _Result, typename _Signature>
struct is_bind_expression<_Bind_result<_Result, _Signature> >
@@ -1352,6 +1402,70 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Result, typename _Signature>
const bool is_bind_expression<_Bind_result<_Result, _Signature> >::value;
+ /// Class template _Bind_result is always a bind expression.
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const _Bind_result<_Result, _Signature> >
+ { static const bool value = true; };
+
+ template<typename _Result, typename _Signature>
+ const bool
+ is_bind_expression<const _Bind_result<_Result, _Signature> >::value;
+
+ /// Class template _Bind_result is always a bind expression.
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<volatile _Bind_result<_Result, _Signature> >
+ { static const bool value = true; };
+
+ template<typename _Result, typename _Signature>
+ const bool
+ is_bind_expression<volatile _Bind_result<_Result, _Signature> >::value;
+
+ /// Class template _Bind_result is always a bind expression.
+ template<typename _Result, typename _Signature>
+ struct
+ is_bind_expression<const volatile _Bind_result<_Result, _Signature> >
+ { static const bool value = true; };
+
+ template<typename _Result, typename _Signature>
+ const bool
+ is_bind_expression<const volatile _Bind_result<_Result,
+ _Signature> >::value;
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Signature>
+ struct is_bind_expression<std::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Signature>
+ struct is_bind_expression<const std::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Signature>
+ struct is_bind_expression<volatile std::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Signature>
+ struct is_bind_expression<const volatile std::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<std::_Bind_result<_Result, _Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const std::_Bind_result<_Result, _Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<volatile std::_Bind_result<_Result, _Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const volatile std::_Bind_result<_Result,
+ _Signature>>
+ : true_type { };
+#endif
+
/// bind
template<typename _Functor, typename... _ArgTypes>
inline
@@ -1502,7 +1616,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_get_pointer(const _Any_data& __source)
{
const _Functor* __ptr =
- __stored_locally? &__source._M_access<_Functor>()
+ __stored_locally? std::__addressof(__source._M_access<_Functor>())
/* have stored a pointer */ : __source._M_access<_Functor*>();
return const_cast<_Functor*>(__ptr);
}
@@ -1631,8 +1745,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static void
_M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f)
{
- // TBD: Use address_of function instead.
- _Base::_M_init_functor(__functor, &__f.get());
+ _Base::_M_init_functor(__functor, std::__addressof(__f.get()));
}
};
@@ -2144,6 +2257,59 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
}
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<typename> struct is_placeholder;
+
+ template<int _Num>
+ struct is_placeholder<tr1::_Placeholder<_Num>>
+ : integral_constant<int, _Num>
+ { };
+
+ template<int _Num>
+ struct is_placeholder<const tr1::_Placeholder<_Num>>
+ : integral_constant<int, _Num>
+ { };
+
+ template<typename> struct is_bind_expression;
+
+ template<typename _Signature>
+ struct is_bind_expression<tr1::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Signature>
+ struct is_bind_expression<const tr1::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Signature>
+ struct is_bind_expression<volatile tr1::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Signature>
+ struct is_bind_expression<const volatile tr1::_Bind<_Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<tr1::_Bind_result<_Result, _Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const tr1::_Bind_result<_Result, _Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<volatile tr1::_Bind_result<_Result, _Signature>>
+ : true_type { };
+
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<const volatile tr1::_Bind_result<_Result,
+ _Signature>>
+ : true_type { };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+#endif
}
#endif // _GLIBCXX_TR1_FUNCTIONAL
diff --git a/libstdc++-v3/include/tr1/hashtable.h b/libstdc++-v3/include/tr1/hashtable.h
index 5d1e02c259..5e17b238a1 100644
--- a/libstdc++-v3/include/tr1/hashtable.h
+++ b/libstdc++-v3/include/tr1/hashtable.h
@@ -813,7 +813,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
// Find the node whose key compares equal to k, beginning the search
- // at p (usually the head of a bucket). Return nil if no node is found.
+ // at p (usually the head of a bucket). Return zero if no node is found.
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
@@ -829,7 +829,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (; __p; __p = __p->_M_next)
if (this->_M_compare(__k, __code, __p))
return __p;
- return false;
+ return 0;
}
// Insert v in bucket n (assumes no element with its key already present).
diff --git a/libstdc++-v3/include/tr1/poly_hermite.tcc b/libstdc++-v3/include/tr1/poly_hermite.tcc
index e86b3777c7..95e8079d54 100644
--- a/libstdc++-v3/include/tr1/poly_hermite.tcc
+++ b/libstdc++-v3/include/tr1/poly_hermite.tcc
@@ -1,6 +1,6 @@
// Special functions -*- C++ -*-
-// Copyright (C) 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -84,7 +84,7 @@ namespace tr1
unsigned int __i;
for (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i)
{
- __H_n = 2 * (__x * __H_nm1 + (__i - 1) * __H_nm2);
+ __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2);
__H_nm2 = __H_nm1;
__H_nm1 = __H_n;
}
diff --git a/libstdc++-v3/include/tr1/shared_ptr.h b/libstdc++-v3/include/tr1/shared_ptr.h
index c42084c953..5a1eb038a3 100644
--- a/libstdc++-v3/include/tr1/shared_ptr.h
+++ b/libstdc++-v3/include/tr1/shared_ptr.h
@@ -1,6 +1,7 @@
// <tr1/shared_ptr.h> -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -236,19 +237,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_add_ref_lock()
{
// Perform lock-free add-if-not-zero operation.
- _Atomic_word __count;
+ _Atomic_word __count = _M_use_count;
do
{
- __count = _M_use_count;
if (__count == 0)
__throw_bad_weak_ptr();
-
// Replace the current counter value with the old value + 1, as
// long as it's not changed meanwhile.
}
- while (!__sync_bool_compare_and_swap(&_M_use_count, __count,
- __count + 1));
- }
+ while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
+ true, __ATOMIC_ACQ_REL,
+ __ATOMIC_RELAXED));
+ }
template<typename _Ptr, typename _Deleter, _Lock_policy _Lp>
class _Sp_counted_base_impl
diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits
index 2825fe6f4e..f15123ace5 100644
--- a/libstdc++-v3/include/tr1/type_traits
+++ b/libstdc++-v3/include/tr1/type_traits
@@ -1,6 +1,6 @@
// TR1 type_traits -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -41,10 +41,7 @@ namespace tr1
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @defgroup metaprogramming Type Traits
- * @ingroup utilities
- *
- * Compile time type transformation and information.
+ * @addtogroup metaprogramming
* @{
*/
@@ -682,6 +679,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#undef _DEFINE_SPEC_2_HELPER
#undef _DEFINE_SPEC
+ /// @} group metaprogramming
+
_GLIBCXX_END_NAMESPACE_VERSION
}
}
diff --git a/libstdc++-v3/include/tr2/bool_set b/libstdc++-v3/include/tr2/bool_set
new file mode 100644
index 0000000000..f577ed0c76
--- /dev/null
+++ b/libstdc++-v3/include/tr2/bool_set
@@ -0,0 +1,320 @@
+// TR2 <bool_set> -*- C++ -*-
+
+// Copyright (C) 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file tr2/bool_set
+ * This is a TR2 C++ Library header.
+ */
+
+#ifndef _GLIBCXX_TR2_BOOL_SET
+#define _GLIBCXX_TR2_BOOL_SET 1
+
+#pragma GCC system_header
+
+#include <typeinfo>
+#include <iostream>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace tr2
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * bool_set
+ *
+ * See N2136, Bool_set: multi-valued logic
+ * by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion.
+ *
+ * The implicit conversion to bool is slippery! I may use the new
+ * explicit conversion. This has been specialized in the language
+ * so that in contexts requiring a bool the conversion happens
+ * implicitly. Thus most objections should be eliminated.
+ */
+ class bool_set
+ {
+ public:
+
+ /// Default constructor.
+ bool_set() : _M_b(_S_false) { }
+
+ /// Constructor from bool.
+ bool_set(bool __t) : _M_b(_Bool_set_val(__t)) { }
+
+ // I'm not sure about this.
+ bool contains(bool_set __b) const
+ { return this->is_singleton() && this->equals(__b); }
+
+ /// Return true if states are equal.
+ bool equals(bool_set __b) const
+ { return __b._M_b == _M_b; }
+
+ /// Return true if this is empty.
+ bool is_emptyset() const
+ { return _M_b == _S_empty; }
+
+ /// Return true if this is indeterminate.
+ bool is_indeterminate() const
+ { return _M_b == _S_indet; }
+
+ /// Return true if this is false or true (normal boolean).
+ bool is_singleton() const
+ { return _M_b == _S_false || _M_b == _S_true_; }
+
+ /// Conversion to bool.
+ //explicit
+ operator bool() const
+ {
+ if (! is_singleton())
+ throw std::bad_cast();
+ return _M_b;
+ }
+
+ ///
+ static bool_set indeterminate()
+ {
+ bool_set __b;
+ __b._M_b = _S_indet;
+ return __b;
+ }
+
+ ///
+ static bool_set emptyset()
+ {
+ bool_set __b;
+ __b._M_b = _S_empty;
+ return __b;
+ }
+
+ friend bool_set
+ operator!(bool_set __b)
+ { return __b._M_not(); }
+
+ friend bool_set
+ operator^(bool_set __s, bool_set __t)
+ { return __s._M_xor(__t); }
+
+ friend bool_set
+ operator|(bool_set __s, bool_set __t)
+ { return __s._M_or(__t); }
+
+ friend bool_set
+ operator&(bool_set __s, bool_set __t)
+ { return __s._M_and(__t); }
+
+ friend bool_set
+ operator==(bool_set __s, bool_set __t)
+ { return __s._M_eq(__t); }
+
+
+ // These overloads replace the facet additions in the paper!
+
+ template<typename CharT, typename Traits>
+ friend std::basic_ostream<CharT, Traits>&
+ operator<<(std::basic_ostream<CharT, Traits>& __out, bool_set __b)
+ {
+ int __a = __b._M_b;
+ __out << __a;
+ }
+
+ template<typename CharT, typename Traits>
+ friend std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& __in, bool_set& __b)
+ {
+ long __c;
+ __in >> __c;
+ if (__c >= _S_false && __c < _S_empty)
+ __b._M_b = static_cast<_Bool_set_val>(__c);
+ }
+
+ private:
+
+ ///
+ enum _Bool_set_val: unsigned char
+ {
+ _S_false = 0,
+ _S_true_ = 1,
+ _S_indet = 2,
+ _S_empty = 3
+ };
+
+ /// Bool set state.
+ _Bool_set_val _M_b;
+
+ ///
+ bool_set(_Bool_set_val __c) : _M_b(__c) { }
+
+ ///
+ bool_set _M_not() const
+ { return _S_not[this->_M_b]; }
+
+ ///
+ bool_set _M_xor(bool_set __b) const
+ { return _S_xor[this->_M_b][__b._M_b]; }
+
+ ///
+ bool_set _M_or(bool_set __b) const
+ { return _S_or[this->_M_b][__b._M_b]; }
+
+ ///
+ bool_set _M_and(bool_set __b) const
+ { return _S_and[this->_M_b][__b._M_b]; }
+
+ ///
+ bool_set _M_eq(bool_set __b) const
+ { return _S_eq[this->_M_b][__b._M_b]; }
+
+ ///
+ static _Bool_set_val _S_not[4];
+
+ ///
+ static _Bool_set_val _S_xor[4][4];
+
+ ///
+ static _Bool_set_val _S_or[4][4];
+
+ ///
+ static _Bool_set_val _S_and[4][4];
+
+ ///
+ static _Bool_set_val _S_eq[4][4];
+ };
+
+ // 20.2.3.2 bool_set values
+
+ inline bool
+ contains(bool_set __s, bool_set __t)
+ { return __s.contains(__t); }
+
+ inline bool
+ equals(bool_set __s, bool_set __t)
+ { return __s.equals(__t); }
+
+ inline bool
+ is_emptyset(bool_set __b)
+ { return __b.is_emptyset(); }
+
+ inline bool
+ is_indeterminate(bool_set __b)
+ { return __b.is_indeterminate(); }
+
+ inline bool
+ is_singleton(bool_set __b)
+ { return __b.is_singleton(); }
+
+ inline bool
+ certainly(bool_set __b)
+ { return ! __b.contains(false); }
+
+ inline bool
+ possibly(bool_set __b)
+ { return __b.contains(true); }
+
+
+ // 20.2.3.3 bool_set set operations
+
+ inline bool_set
+ set_union(bool __s, bool_set __t)
+ { return bool_set(__s) | __t; }
+
+ inline bool_set
+ set_union(bool_set __s, bool __t)
+ { return __s | bool_set(__t); }
+
+ inline bool_set
+ set_union(bool_set __s, bool_set __t)
+ { return __s | __t; }
+
+ inline bool_set
+ set_intersection(bool __s, bool_set __t)
+ { return bool_set(__s) & __t; }
+
+ inline bool_set
+ set_intersection(bool_set __s, bool __t)
+ { return __s & bool_set(__t); }
+
+ inline bool_set
+ set_intersection(bool_set __s, bool_set __t)
+ { return __s & __t; }
+
+ inline bool_set
+ set_complement(bool_set __b)
+ { return ! __b; }
+
+
+ // 20.2.3.4 bool_set logical operators
+
+ inline bool_set
+ operator^(bool __s, bool_set __t)
+ { return bool_set(__s) ^ __t; }
+
+ inline bool_set
+ operator^(bool_set __s, bool __t)
+ { return __s ^ bool_set(__t); }
+
+ inline bool_set
+ operator|(bool __s, bool_set __t)
+ { return bool_set(__s) | __t; }
+
+ inline bool_set
+ operator|(bool_set __s, bool __t)
+ { return __s | bool_set(__t); }
+
+ inline bool_set
+ operator&(bool __s, bool_set __t)
+ { return bool_set(__s) & __t; }
+
+ inline bool_set
+ operator&(bool_set __s, bool __t)
+ { return __s & bool_set(__t); }
+
+
+ // 20.2.3.5 bool_set relational operators
+
+ inline bool_set
+ operator==(bool __s, bool_set __t)
+ { return bool_set(__s) == __t; }
+
+ inline bool_set
+ operator==(bool_set __s, bool __t)
+ { return __s == bool_set(__t); }
+
+ inline bool_set
+ operator!=(bool __s, bool_set __t)
+ { return ! (__s == __t); }
+
+ inline bool_set
+ operator!=(bool_set __s, bool __t)
+ { return ! (__s == __t); }
+
+ inline bool_set
+ operator!=(bool_set __s, bool_set __t)
+ { return ! (__s == __t); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+}
+}
+
+#include <tr2/bool_set.tcc>
+
+#endif // _GLIBCXX_TR2_BOOL_SET
diff --git a/libstdc++-v3/include/tr2/bool_set.tcc b/libstdc++-v3/include/tr2/bool_set.tcc
new file mode 100644
index 0000000000..f24d448239
--- /dev/null
+++ b/libstdc++-v3/include/tr2/bool_set.tcc
@@ -0,0 +1,277 @@
+// TR2 <bool_set> support files -*- C++ -*-
+
+// Copyright (C) 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file tr2/bool_set.tcc
+ * This is a TR2 C++ Library header.
+ */
+
+#ifndef _GLIBCXX_TR2_BOOL_SET_TCC
+#define _GLIBCXX_TR2_BOOL_SET_TCC 1
+
+#pragma GCC system_header
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace tr2
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ bool_set::_Bool_set_val
+ bool_set::_S_not[4] =
+ { _S_true_, _S_false, _S_indet, _S_empty };
+
+ bool_set::_Bool_set_val
+ bool_set::_S_xor[4][4] =
+ { { _S_false, _S_true_, _S_indet, _S_empty },
+ { _S_true_, _S_false, _S_indet, _S_empty },
+ { _S_indet, _S_indet, _S_indet, _S_empty },
+ { _S_empty, _S_empty, _S_empty, _S_empty } };
+
+ bool_set::_Bool_set_val
+ bool_set::_S_or[4][4] =
+ { { _S_false, _S_true_, _S_indet, _S_empty },
+ { _S_true_, _S_true_, _S_true_, _S_empty },
+ { _S_indet, _S_true_, _S_indet, _S_empty },
+ { _S_empty, _S_empty, _S_empty, _S_empty } };
+
+ bool_set::_Bool_set_val
+ bool_set::_S_and[4][4] =
+ { { _S_false, _S_false, _S_false, _S_empty },
+ { _S_false, _S_true_, _S_indet, _S_empty },
+ { _S_false, _S_indet, _S_indet, _S_empty },
+ { _S_empty, _S_empty, _S_empty, _S_empty } };
+
+ bool_set::_Bool_set_val
+ bool_set::_S_eq[4][4] =
+ { { _S_true_, _S_false, _S_indet, _S_empty },
+ { _S_false, _S_true_, _S_indet, _S_empty },
+ { _S_indet, _S_indet, _S_indet, _S_empty },
+ { _S_empty, _S_empty, _S_empty, _S_empty } };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+}
+}
+
+// I object to these things.
+// The stuff in locale facets are for basic types.
+// I think we could hack operator<< and operator>>.
+
+ /**
+ * @brief Numeric parsing.
+ *
+ * Parses the input stream into the bool @a v. It does so by calling
+ * num_get::do_get().
+ *
+ * If ios_base::boolalpha is set, attempts to read
+ * ctype<CharT>::truename() or ctype<CharT>::falsename(). Sets
+ * @a v to true or false if successful. Sets err to
+ * ios_base::failbit if reading the string fails. Sets err to
+ * ios_base::eofbit if the stream is emptied.
+ *
+ * If ios_base::boolalpha is not set, proceeds as with reading a long,
+ * except if the value is 1, sets @a v to true, if the value is 0, sets
+ * @a v to false, and otherwise set err to ios_base::failbit.
+ *
+ * @param in Start of input stream.
+ * @param end End of input stream.
+ * @param io Source of locale and flags.
+ * @param err Error flags to set.
+ * @param v Value to format and insert.
+ * @return Iterator after reading.
+ iter_type
+ get(iter_type __in, iter_type __end, ios_base& __io,
+ ios_base::iostate& __err, bool& __v) const
+ { return this->do_get(__in, __end, __io, __err, __v); }
+ */
+/*
+ template<typename _CharT, typename _InIter>
+ _InIter
+ num_get<_CharT, _InIter>::
+ do_get(iter_type __beg, iter_type __end, ios_base& __io,
+ ios_base::iostate& __err, bool_set& __v) const
+ {
+ if (!(__io.flags() & ios_base::boolalpha))
+ {
+ // Parse bool values as long.
+ // NB: We can't just call do_get(long) here, as it might
+ // refer to a derived class.
+ long __l = -1;
+ __beg = _M_extract_int(__beg, __end, __io, __err, __l);
+ if (__c >= _S_false && __c < _S_empty)
+ __b._M_b = static_cast<_Bool_set_val>(__c);
+ else
+ {
+ // What should we do here?
+ __v = true;
+ __err = ios_base::failbit;
+ if (__beg == __end)
+ __err |= ios_base::eofbit;
+ }
+ }
+ else
+ {
+ // Parse bool values as alphanumeric.
+ typedef __numpunct_cache<_CharT> __cache_type;
+ __use_cache<__cache_type> __uc;
+ const locale& __loc = __io._M_getloc();
+ const __cache_type* __lc = __uc(__loc);
+
+ bool __testf = true;
+ bool __testt = true;
+ bool __donef = __lc->_M_falsename_size == 0;
+ bool __donet = __lc->_M_truename_size == 0;
+ bool __testeof = false;
+ size_t __n = 0;
+ while (!__donef || !__donet)
+ {
+ if (__beg == __end)
+ {
+ __testeof = true;
+ break;
+ }
+
+ const char_type __c = *__beg;
+
+ if (!__donef)
+ __testf = __c == __lc->_M_falsename[__n];
+
+ if (!__testf && __donet)
+ break;
+
+ if (!__donet)
+ __testt = __c == __lc->_M_truename[__n];
+
+ if (!__testt && __donef)
+ break;
+
+ if (!__testt && !__testf)
+ break;
+
+ ++__n;
+ ++__beg;
+
+ __donef = !__testf || __n >= __lc->_M_falsename_size;
+ __donet = !__testt || __n >= __lc->_M_truename_size;
+ }
+ if (__testf && __n == __lc->_M_falsename_size && __n)
+ {
+ __v = false;
+ if (__testt && __n == __lc->_M_truename_size)
+ __err = ios_base::failbit;
+ else
+ __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
+ }
+ else if (__testt && __n == __lc->_M_truename_size && __n)
+ {
+ __v = true;
+ __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
+ }
+ else
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 23. Num_get overflow result.
+ __v = false;
+ __err = ios_base::failbit;
+ if (__testeof)
+ __err |= ios_base::eofbit;
+ }
+ }
+ return __beg;
+ }
+*/
+
+ /**
+ * @brief Numeric formatting.
+ *
+ * Formats the boolean @a v and inserts it into a stream. It does so
+ * by calling num_put::do_put().
+ *
+ * If ios_base::boolalpha is set, writes ctype<CharT>::truename() or
+ * ctype<CharT>::falsename(). Otherwise formats @a v as an int.
+ *
+ * @param s Stream to write to.
+ * @param io Source of locale and flags.
+ * @param fill Char_type to use for filling.
+ * @param v Value to format and insert.
+ * @return Iterator after writing.
+ iter_type
+ put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const
+ { return this->do_put(__s, __f, __fill, __v); }
+ */
+
+/*
+ template<typename _CharT, typename _OutIter>
+ _OutIter
+ num_put<_CharT, _OutIter>::
+ do_put(iter_type __s, ios_base& __io, char_type __fill, bool_set __v) const
+ {
+ const ios_base::fmtflags __flags = __io.flags();
+ if ((__flags & ios_base::boolalpha) == 0)
+ {
+ const long __l = __v;
+ __s = _M_insert_int(__s, __io, __fill, __l);
+ }
+ else
+ {
+ typedef __numpunct_cache<_CharT> __cache_type;
+ __use_cache<__cache_type> __uc;
+ const locale& __loc = __io._M_getloc();
+ const __cache_type* __lc = __uc(__loc);
+
+ const _CharT* __name = __v ? __lc->_M_truename
+ : __lc->_M_falsename;
+ int __len = __v ? __lc->_M_truename_size
+ : __lc->_M_falsename_size;
+
+ const streamsize __w = __io.width();
+ if (__w > static_cast<streamsize>(__len))
+ {
+ const streamsize __plen = __w - __len;
+ _CharT* __ps
+ = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __plen));
+
+ char_traits<_CharT>::assign(__ps, __plen, __fill);
+ __io.width(0);
+
+ if ((__flags & ios_base::adjustfield) == ios_base::left)
+ {
+ __s = std::__write(__s, __name, __len);
+ __s = std::__write(__s, __ps, __plen);
+ }
+ else
+ {
+ __s = std::__write(__s, __ps, __plen);
+ __s = std::__write(__s, __name, __len);
+ }
+ return __s;
+ }
+ __io.width(0);
+ __s = std::__write(__s, __name, __len);
+ }
+ return __s;
+ }
+*/
+
+#endif // _GLIBCXX_TR2_BOOL_SET_TCC
diff --git a/libstdc++-v3/include/tr2/dynamic_bitset b/libstdc++-v3/include/tr2/dynamic_bitset
new file mode 100644
index 0000000000..4c06b84c2a
--- /dev/null
+++ b/libstdc++-v3/include/tr2/dynamic_bitset
@@ -0,0 +1,1472 @@
+// TR2 <dynamic_bitset> -*- C++ -*-
+
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file tr2/dynamic_bitset
+ * This is a TR2 C++ Library header.
+ */
+
+#ifndef _GLIBCXX_TR2_DYNAMIC_BITSET
+#define _GLIBCXX_TR2_DYNAMIC_BITSET 1
+
+#pragma GCC system_header
+
+#include <limits>
+#include <vector>
+#include <cstddef> // For size_t
+#include <string>
+#include <memory> // For std::allocator
+#include <bits/functexcept.h> // For invalid_argument, out_of_range,
+ // overflow_error
+#include <iosfwd>
+#include <cxxabi_forced.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace tr2
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Dynamic Bitset.
+ *
+ * See N2050,
+ * Proposal to Add a Dynamically Sizeable Bitset to the Standard Library.
+ */
+namespace __detail
+{
+
+template<typename T>
+class _Bool2UChar
+{
+ typedef T type;
+};
+
+template<>
+class _Bool2UChar<bool>
+{
+public:
+ typedef unsigned char type;
+};
+
+}
+
+ /**
+ * Base class, general case.
+ *
+ * See documentation for dynamic_bitset.
+ */
+ template<typename _WordT = unsigned long long,
+ typename _Alloc = std::allocator<_WordT>>
+ struct __dynamic_bitset_base
+ {
+ static_assert(std::is_unsigned<_WordT>::value, "template argument "
+ "_WordT not an unsigned integral type");
+
+ typedef _WordT block_type;
+ typedef _Alloc allocator_type;
+ typedef size_t size_type;
+
+ static const size_type _S_bits_per_block = __CHAR_BIT__ * sizeof(block_type);
+ static const size_type npos = static_cast<size_type>(-1);
+
+ /// 0 is the least significant word.
+ std::vector<block_type, allocator_type> _M_w;
+
+ explicit
+ __dynamic_bitset_base(const allocator_type& __alloc = allocator_type())
+ : _M_w(__alloc)
+ { }
+
+ explicit
+ __dynamic_bitset_base(__dynamic_bitset_base&& __b)
+ { this->_M_w.swap(__b._M_w); }
+
+ explicit
+ __dynamic_bitset_base(size_type __nbits, unsigned long long __val = 0ULL,
+ const allocator_type& __alloc = allocator_type())
+ : _M_w(__nbits / _S_bits_per_block
+ + (__nbits % _S_bits_per_block > 0),
+ __val, __alloc)
+ {
+ unsigned long long __mask = ~static_cast<block_type>(0);
+ size_t __n = std::min(this->_M_w.size(),
+ sizeof(unsigned long long) / sizeof(block_type));
+ for (size_t __i = 0; __i < __n; ++__i)
+ {
+ this->_M_w[__i] = (__val & __mask) >> (__i * _S_bits_per_block);
+ __mask <<= _S_bits_per_block;
+ }
+ }
+
+ void
+ _M_assign(const __dynamic_bitset_base& __b)
+ { this->_M_w = __b._M_w; }
+
+ void
+ _M_swap(__dynamic_bitset_base& __b)
+ { this->_M_w.swap(__b._M_w); }
+
+ void
+ _M_clear()
+ { this->_M_w.clear(); }
+
+ void
+ _M_resize(size_t __nbits, bool __value)
+ {
+ size_t __sz = __nbits / _S_bits_per_block;
+ if (__nbits % _S_bits_per_block > 0)
+ ++__sz;
+ if (__sz != this->_M_w.size())
+ this->_M_w.resize(__sz);
+ }
+
+ allocator_type
+ _M_get_allocator() const
+ { return this->_M_w.get_allocator(); }
+
+ static size_type
+ _S_whichword(size_type __pos)
+ { return __pos / _S_bits_per_block; }
+
+ static size_type
+ _S_whichbyte(size_type __pos)
+ { return (__pos % _S_bits_per_block) / __CHAR_BIT__; }
+
+ static size_type
+ _S_whichbit(size_type __pos)
+ { return __pos % _S_bits_per_block; }
+
+ static block_type
+ _S_maskbit(size_type __pos)
+ { return (static_cast<block_type>(1)) << _S_whichbit(__pos); }
+
+ block_type&
+ _M_getword(size_type __pos)
+ { return this->_M_w[_S_whichword(__pos)]; }
+
+ block_type
+ _M_getword(size_type __pos) const
+ { return this->_M_w[_S_whichword(__pos)]; }
+
+ block_type&
+ _M_hiword()
+ { return this->_M_w[_M_w.size() - 1]; }
+
+ block_type
+ _M_hiword() const
+ { return this->_M_w[_M_w.size() - 1]; }
+
+ void
+ _M_do_and(const __dynamic_bitset_base& __x)
+ {
+ if (__x._M_w.size() == this->_M_w.size())
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] &= __x._M_w[__i];
+ else
+ return;
+ }
+
+ void
+ _M_do_or(const __dynamic_bitset_base& __x)
+ {
+ if (__x._M_w.size() == this->_M_w.size())
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] |= __x._M_w[__i];
+ else
+ return;
+ }
+
+ void
+ _M_do_xor(const __dynamic_bitset_base& __x)
+ {
+ if (__x._M_w.size() == this->_M_w.size())
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] ^= __x._M_w[__i];
+ else
+ return;
+ }
+
+ void
+ _M_do_dif(const __dynamic_bitset_base& __x)
+ {
+ if (__x._M_w.size() == this->_M_w.size())
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] &= ~__x._M_w[__i];
+ else
+ return;
+ }
+
+ void
+ _M_do_left_shift(size_t __shift);
+
+ void
+ _M_do_right_shift(size_t __shift);
+
+ void
+ _M_do_flip()
+ {
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] = ~this->_M_w[__i];
+ }
+
+ void
+ _M_do_set()
+ {
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] = ~static_cast<block_type>(0);
+ }
+
+ void
+ _M_do_reset()
+ {
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ this->_M_w[__i] = static_cast<block_type>(0);
+ }
+
+ bool
+ _M_is_equal(const __dynamic_bitset_base& __x) const
+ {
+ if (__x.size() == this->size())
+ {
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ if (this->_M_w[__i] != __x._M_w[__i])
+ return false;
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool
+ _M_is_less(const __dynamic_bitset_base& __x) const
+ {
+ if (__x.size() == this->size())
+ {
+ for (size_t __i = this->_M_w.size(); __i > 0; --__i)
+ {
+ if (this->_M_w[__i-1] < __x._M_w[__i-1])
+ return true;
+ else if (this->_M_w[__i-1] > __x._M_w[__i-1])
+ return false;
+ }
+ return false;
+ }
+ else
+ return false;
+ }
+
+ size_t
+ _M_are_all_aux() const
+ {
+ for (size_t __i = 0; __i < this->_M_w.size() - 1; ++__i)
+ if (_M_w[__i] != ~static_cast<block_type>(0))
+ return 0;
+ return ((this->_M_w.size() - 1) * _S_bits_per_block
+ + __builtin_popcountl(this->_M_hiword()));
+ }
+
+ bool
+ _M_is_any() const
+ {
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ if (this->_M_w[__i] != static_cast<block_type>(0))
+ return true;
+ return false;
+ }
+
+ bool
+ _M_is_subset_of(const __dynamic_bitset_base& __b)
+ {
+ if (__b.size() == this->size())
+ {
+ for (size_t __i = 0; __i < _M_w.size(); ++__i)
+ if (this->_M_w[__i] != (this->_M_w[__i] | __b._M_w[__i]))
+ return false;
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool
+ _M_is_proper_subset_of(const __dynamic_bitset_base& __b) const
+ {
+ if (this->is_subset_of(__b))
+ {
+ if (*this == __b)
+ return false;
+ else
+ return true;
+ }
+ else
+ return false;
+ }
+
+ size_t
+ _M_do_count() const
+ {
+ size_t __result = 0;
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ __result += __builtin_popcountl(this->_M_w[__i]);
+ return __result;
+ }
+
+ size_type
+ _M_size() const
+ { return this->_M_w.size(); }
+
+ unsigned long
+ _M_do_to_ulong() const;
+
+ unsigned long long
+ _M_do_to_ullong() const;
+
+ // find first "on" bit
+ size_type
+ _M_do_find_first(size_t __not_found) const;
+
+ // find the next "on" bit that follows "prev"
+ size_type
+ _M_do_find_next(size_t __prev, size_t __not_found) const;
+
+ // do append of block
+ void
+ _M_do_append_block(block_type __block, size_type __pos)
+ {
+ size_t __offset = __pos % _S_bits_per_block;
+ if (__offset == 0)
+ this->_M_w.push_back(__block);
+ else
+ {
+ this->_M_hiword() |= (__block << __offset);
+ this->_M_w.push_back(__block >> (_S_bits_per_block - __offset));
+ }
+ }
+ };
+
+ // Definitions of non-inline functions from __dynamic_bitset_base.
+ template<typename _WordT, typename _Alloc>
+ void
+ __dynamic_bitset_base<_WordT, _Alloc>::_M_do_left_shift(size_t __shift)
+ {
+ if (__builtin_expect(__shift != 0, 1))
+ {
+ const size_t __wshift = __shift / _S_bits_per_block;
+ const size_t __offset = __shift % _S_bits_per_block;
+
+ if (__offset == 0)
+ for (size_t __n = this->_M_w.size() - 1; __n >= __wshift; --__n)
+ this->_M_w[__n] = this->_M_w[__n - __wshift];
+ else
+ {
+ const size_t __sub_offset = _S_bits_per_block - __offset;
+ for (size_t __n = _M_w.size() - 1; __n > __wshift; --__n)
+ this->_M_w[__n] = ((this->_M_w[__n - __wshift] << __offset)
+ | (this->_M_w[__n - __wshift - 1] >> __sub_offset));
+ this->_M_w[__wshift] = this->_M_w[0] << __offset;
+ }
+
+ //// std::fill(this->_M_w.begin(), this->_M_w.begin() + __wshift,
+ //// static_cast<_WordT>(0));
+ }
+ }
+
+ template<typename _WordT, typename _Alloc>
+ void
+ __dynamic_bitset_base<_WordT, _Alloc>::_M_do_right_shift(size_t __shift)
+ {
+ if (__builtin_expect(__shift != 0, 1))
+ {
+ const size_t __wshift = __shift / _S_bits_per_block;
+ const size_t __offset = __shift % _S_bits_per_block;
+ const size_t __limit = this->_M_w.size() - __wshift - 1;
+
+ if (__offset == 0)
+ for (size_t __n = 0; __n <= __limit; ++__n)
+ this->_M_w[__n] = this->_M_w[__n + __wshift];
+ else
+ {
+ const size_t __sub_offset = (_S_bits_per_block
+ - __offset);
+ for (size_t __n = 0; __n < __limit; ++__n)
+ this->_M_w[__n] = ((this->_M_w[__n + __wshift] >> __offset)
+ | (this->_M_w[__n + __wshift + 1] << __sub_offset));
+ this->_M_w[__limit] = this->_M_w[_M_w.size()-1] >> __offset;
+ }
+
+ ////std::fill(this->_M_w.begin() + __limit + 1, this->_M_w.end(),
+ //// static_cast<_WordT>(0));
+ }
+ }
+
+ template<typename _WordT, typename _Alloc>
+ unsigned long
+ __dynamic_bitset_base<_WordT, _Alloc>::_M_do_to_ulong() const
+ {
+ size_t __n = sizeof(unsigned long) / sizeof(block_type);
+ for (size_t __i = __n; __i < this->_M_w.size(); ++__i)
+ if (this->_M_w[__i])
+ __throw_overflow_error(__N("__dynamic_bitset_base::_M_do_to_ulong"));
+ unsigned long __res = 0UL;
+ for (size_t __i = 0; __i < __n && __i < this->_M_w.size(); ++__i)
+ __res += this->_M_w[__i] << (__i * _S_bits_per_block);
+ return __res;
+ }
+
+ template<typename _WordT, typename _Alloc>
+ unsigned long long
+ __dynamic_bitset_base<_WordT, _Alloc>::_M_do_to_ullong() const
+ {
+ size_t __n = sizeof(unsigned long long) / sizeof(block_type);
+ for (size_t __i = __n; __i < this->_M_w.size(); ++__i)
+ if (this->_M_w[__i])
+ __throw_overflow_error(__N("__dynamic_bitset_base::_M_do_to_ullong"));
+ unsigned long long __res = 0ULL;
+ for (size_t __i = 0; __i < __n && __i < this->_M_w.size(); ++__i)
+ __res += this->_M_w[__i] << (__i * _S_bits_per_block);
+ return __res;
+ }
+
+ template<typename _WordT, typename _Alloc>
+ size_t
+ __dynamic_bitset_base<_WordT, _Alloc>
+ ::_M_do_find_first(size_t __not_found) const
+ {
+ for (size_t __i = 0; __i < this->_M_w.size(); ++__i)
+ {
+ _WordT __thisword = this->_M_w[__i];
+ if (__thisword != static_cast<_WordT>(0))
+ return (__i * _S_bits_per_block
+ + __builtin_ctzl(__thisword));
+ }
+ // not found, so return an indication of failure.
+ return __not_found;
+ }
+
+ template<typename _WordT, typename _Alloc>
+ size_t
+ __dynamic_bitset_base<_WordT, _Alloc>
+ ::_M_do_find_next(size_t __prev, size_t __not_found) const
+ {
+ // make bound inclusive
+ ++__prev;
+
+ // check out of bounds
+ if (__prev >= this->_M_w.size() * _S_bits_per_block)
+ return __not_found;
+
+ // search first word
+ size_t __i = _S_whichword(__prev);
+ _WordT __thisword = this->_M_w[__i];
+
+ // mask off bits below bound
+ __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
+
+ if (__thisword != static_cast<_WordT>(0))
+ return (__i * _S_bits_per_block
+ + __builtin_ctzl(__thisword));
+
+ // check subsequent words
+ for (++__i; __i < this->_M_w.size(); ++__i)
+ {
+ __thisword = this->_M_w[__i];
+ if (__thisword != static_cast<_WordT>(0))
+ return (__i * _S_bits_per_block
+ + __builtin_ctzl(__thisword));
+ }
+ // not found, so return an indication of failure.
+ return __not_found;
+ } // end _M_do_find_next
+
+ /**
+ * @brief The %dynamic_bitset class represents a sequence of bits.
+ *
+ * @ingroup containers
+ *
+ * (Note that %dynamic_bitset does @e not meet the formal
+ * requirements of a <a href="tables.html#65">container</a>.
+ * Mainly, it lacks iterators.)
+ *
+ * The template argument, @a Nb, may be any non-negative number,
+ * specifying the number of bits (e.g., "0", "12", "1024*1024").
+ *
+ * In the general unoptimized case, storage is allocated in
+ * word-sized blocks. Let B be the number of bits in a word, then
+ * (Nb+(B-1))/B words will be used for storage. B - Nb%B bits are
+ * unused. (They are the high-order bits in the highest word.) It
+ * is a class invariant that those unused bits are always zero.
+ *
+ * If you think of %dynamic_bitset as "a simple array of bits," be
+ * aware that your mental picture is reversed: a %dynamic_bitset
+ * behaves the same way as bits in integers do, with the bit at
+ * index 0 in the "least significant / right-hand" position, and
+ * the bit at index Nb-1 in the "most significant / left-hand"
+ * position. Thus, unlike other containers, a %dynamic_bitset's
+ * index "counts from right to left," to put it very loosely.
+ *
+ * This behavior is preserved when translating to and from strings.
+ * For example, the first line of the following program probably
+ * prints "b('a') is 0001100001" on a modern ASCII system.
+ *
+ * @code
+ * #include <dynamic_bitset>
+ * #include <iostream>
+ * #include <sstream>
+ *
+ * using namespace std;
+ *
+ * int main()
+ * {
+ * long a = 'a';
+ * dynamic_bitset b(a);
+ *
+ * cout << "b('a') is " << b << endl;
+ *
+ * ostringstream s;
+ * s << b;
+ * string str = s.str();
+ * cout << "index 3 in the string is " << str[3] << " but\n"
+ * << "index 3 in the bitset is " << b[3] << endl;
+ * }
+ * @endcode
+ *
+ * Also see:
+ * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch33s02.html
+ * for a description of extensions.
+ *
+ * Most of the actual code isn't contained in %dynamic_bitset<>
+ * itself, but in the base class __dynamic_bitset_base. The base
+ * class works with whole words, not with individual bits. This
+ * allows us to specialize __dynamic_bitset_base for the important
+ * special case where the %dynamic_bitset is only a single word.
+ *
+ * Extra confusion can result due to the fact that the storage for
+ * __dynamic_bitset_base @e is a vector, and is indexed as such. This is
+ * carefully encapsulated.
+ */
+ template<typename _WordT = unsigned long long,
+ typename _Alloc = std::allocator<_WordT>>
+ class dynamic_bitset
+ : private __dynamic_bitset_base<_WordT, _Alloc>
+ {
+ static_assert(std::is_unsigned<_WordT>::value, "template argument "
+ "_WordT not an unsigned integral type");
+
+ public:
+
+ typedef __dynamic_bitset_base<_WordT, _Alloc> _Base;
+ typedef _WordT block_type;
+ typedef _Alloc allocator_type;
+ typedef size_t size_type;
+
+ static const size_type bits_per_block = __CHAR_BIT__ * sizeof(block_type);
+ // Use this: constexpr size_type std::numeric_limits<size_type>::max().
+ static const size_type npos = static_cast<size_type>(-1);
+
+ private:
+
+ // Clear the unused bits in the uppermost word.
+ void
+ _M_do_sanitize()
+ {
+ size_type __shift = this->_M_Nb % bits_per_block;
+ if (__shift > 0)
+ this->_M_hiword() &= ~((~static_cast<block_type>(0)) << __shift);
+ }
+
+ /**
+ * These versions of single-bit set, reset, flip, and test
+ * do no range checking.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ _M_unchecked_set(size_type __pos)
+ {
+ this->_M_getword(__pos) |= _Base::_S_maskbit(__pos);
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ _M_unchecked_set(size_type __pos, int __val)
+ {
+ if (__val)
+ this->_M_getword(__pos) |= _Base::_S_maskbit(__pos);
+ else
+ this->_M_getword(__pos) &= ~_Base::_S_maskbit(__pos);
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ _M_unchecked_reset(size_type __pos)
+ {
+ this->_M_getword(__pos) &= ~_Base::_S_maskbit(__pos);
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ _M_unchecked_flip(size_type __pos)
+ {
+ this->_M_getword(__pos) ^= _Base::_S_maskbit(__pos);
+ return *this;
+ }
+
+ bool
+ _M_unchecked_test(size_type __pos) const
+ { return ((this->_M_getword(__pos) & _Base::_S_maskbit(__pos))
+ != static_cast<_WordT>(0)); }
+
+ size_type _M_Nb;
+
+ public:
+ /**
+ * This encapsulates the concept of a single bit. An instance
+ * of this class is a proxy for an actual bit; this way the
+ * individual bit operations are done as faster word-size
+ * bitwise instructions.
+ *
+ * Most users will never need to use this class directly;
+ * conversions to and from bool are automatic and should be
+ * transparent. Overloaded operators help to preserve the
+ * illusion.
+ *
+ * (On a typical system, this "bit %reference" is 64 times the
+ * size of an actual bit. Ha.)
+ */
+ class reference
+ {
+ friend class dynamic_bitset;
+
+ block_type *_M_wp;
+ size_type _M_bpos;
+
+ // left undefined
+ reference();
+
+ public:
+ reference(dynamic_bitset& __b, size_type __pos)
+ {
+ this->_M_wp = &__b._M_getword(__pos);
+ this->_M_bpos = _Base::_S_whichbit(__pos);
+ }
+
+ ~reference()
+ { }
+
+ // For b[i] = __x;
+ reference&
+ operator=(bool __x)
+ {
+ if (__x)
+ *this->_M_wp |= _Base::_S_maskbit(this->_M_bpos);
+ else
+ *this->_M_wp &= ~_Base::_S_maskbit(this->_M_bpos);
+ return *this;
+ }
+
+ // For b[i] = b[__j];
+ reference&
+ operator=(const reference& __j)
+ {
+ if ((*(__j._M_wp) & _Base::_S_maskbit(__j._M_bpos)))
+ *this->_M_wp |= _Base::_S_maskbit(this->_M_bpos);
+ else
+ *this->_M_wp &= ~_Base::_S_maskbit(this->_M_bpos);
+ return *this;
+ }
+
+ // Flips the bit
+ bool
+ operator~() const
+ { return (*(_M_wp) & _Base::_S_maskbit(this->_M_bpos)) == 0; }
+
+ // For __x = b[i];
+ operator bool() const
+ { return (*(this->_M_wp) & _Base::_S_maskbit(this->_M_bpos)) != 0; }
+
+ // For b[i].flip();
+ reference&
+ flip()
+ {
+ *this->_M_wp ^= _Base::_S_maskbit(this->_M_bpos);
+ return *this;
+ }
+ };
+
+ friend class reference;
+
+ typedef bool const_reference;
+
+ // 23.3.5.1 constructors:
+ /// All bits set to zero.
+ explicit
+ dynamic_bitset(const allocator_type& __alloc = allocator_type())
+ : _Base(__alloc), _M_Nb(0)
+ { }
+
+ /// Initial bits bitwise-copied from a single word (others set to zero).
+ explicit
+ dynamic_bitset(size_type __nbits, unsigned long long __val = 0ULL,
+ const allocator_type& __alloc = allocator_type())
+ : _Base(__nbits, __val, __alloc),
+ _M_Nb(__nbits)
+ { }
+
+ dynamic_bitset(initializer_list<block_type> __il,
+ const allocator_type& __alloc = allocator_type())
+ : _Base(__alloc), _M_Nb(0)
+ { this->append(__il); }
+
+ /**
+ * @brief Use a subset of a string.
+ * @param __str A string of '0' and '1' characters.
+ * @param __pos Index of the first character in @p __str to use.
+ * @param __n The number of characters to copy.
+ * @throw std::out_of_range If @p __pos is bigger the size of @p __str.
+ * @throw std::invalid_argument If a character appears in the string
+ * which is neither '0' nor '1'.
+ */
+ template<typename _CharT, typename _Traits, typename _Alloc1>
+ explicit
+ dynamic_bitset(const std::basic_string<_CharT, _Traits, _Alloc1>& __str,
+ typename basic_string<_CharT,_Traits,_Alloc1>::size_type
+ __pos = 0,
+ typename basic_string<_CharT,_Traits,_Alloc1>::size_type
+ __n = std::basic_string<_CharT, _Traits, _Alloc1>::npos,
+ _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'),
+ const allocator_type& __alloc = allocator_type())
+ : _Base(__alloc),
+ _M_Nb(0) // Watch for npos.
+ {
+ if (__pos > __str.size())
+ __throw_out_of_range(__N("dynamic_bitset::bitset initial position "
+ "not valid"));
+
+ // Watch for npos.
+ this->_M_Nb = (__n > __str.size() ? __str.size() - __pos : __n);
+ this->resize(this->_M_Nb);
+ this->_M_copy_from_string(__str, __pos, __n,
+ _CharT('0'), _CharT('1'));
+ }
+
+ /**
+ * @brief Construct from a string.
+ * @param __str A string of '0' and '1' characters.
+ * @throw std::invalid_argument If a character appears in the string
+ * which is neither '0' nor '1'.
+ */
+ explicit
+ dynamic_bitset(const char* __str,
+ const allocator_type& __alloc = allocator_type())
+ : _Base(__alloc)
+ {
+ size_t __len = 0;
+ if (__str)
+ while (__str[__len] != '\0')
+ ++__len;
+ this->resize(__len);
+ this->_M_copy_from_ptr<char,std::char_traits<char>>
+ (__str, __len, 0, __len, '0', '1');
+ }
+
+ /**
+ * @brief Copy constructor.
+ */
+ dynamic_bitset(const dynamic_bitset& __b)
+ : _Base(__b), _M_Nb(__b.size())
+ { }
+
+ /**
+ * @brief Move constructor.
+ */
+ dynamic_bitset(dynamic_bitset&& __b)
+ : _Base(std::forward<_Base>(__b)), _M_Nb(__b.size())
+ { }
+
+ /**
+ * @brief Swap with another bitset.
+ */
+ void
+ swap(dynamic_bitset& __b)
+ {
+ this->_M_swap(__b);
+ std::swap(this->_M_Nb, __b._M_Nb);
+ }
+
+ /**
+ * @brief Assignment.
+ */
+ dynamic_bitset&
+ operator=(const dynamic_bitset& __b)
+ {
+ if (&__b != this)
+ {
+ this->_M_assign(__b);
+ this->_M_Nb = __b._M_Nb;
+ }
+ }
+
+ /**
+ * @brief Move assignment.
+ */
+ dynamic_bitset&
+ operator=(dynamic_bitset&& __b)
+ {
+ this->swap(__b);
+ return *this;
+ }
+
+ /**
+ * @brief Return the allocator for the bitset.
+ */
+ allocator_type
+ get_allocator() const
+ { return this->_M_get_allocator(); }
+
+ /**
+ * @brief Resize the bitset.
+ */
+ void
+ resize(size_type __nbits, bool __value = false)
+ {
+ this->_M_resize(__nbits, __value);
+ this->_M_Nb = __nbits;
+ this->_M_do_sanitize();
+ }
+
+ /**
+ * @brief Clear the bitset.
+ */
+ void
+ clear()
+ {
+ this->_M_clear();
+ this->_M_Nb = 0;
+ }
+
+ /**
+ * @brief Push a bit onto the high end of the bitset.
+ */
+ void
+ push_back(bool __bit)
+ {
+ if (size_t __offset = this->size() % bits_per_block == 0)
+ this->_M_do_append_block(block_type(0), this->_M_Nb);
+ ++this->_M_Nb;
+ this->_M_unchecked_set(this->_M_Nb, __bit);
+ }
+
+ /**
+ * @brief Append a block.
+ */
+ void
+ append(block_type __block)
+ {
+ this->_M_do_append_block(__block, this->_M_Nb);
+ this->_M_Nb += bits_per_block;
+ }
+
+ /**
+ * @brief
+ */
+ void
+ append(initializer_list<block_type> __il)
+ { this->append(__il.begin(), __il.end()); }
+
+ /**
+ * @brief Append an iterator range of blocks.
+ */
+ template <typename _BlockInputIterator>
+ void
+ append(_BlockInputIterator __first, _BlockInputIterator __last)
+ {
+ for (; __first != __last; ++__first)
+ this->append(*__first);
+ }
+
+ // 23.3.5.2 dynamic_bitset operations:
+ //@{
+ /**
+ * @brief Operations on dynamic_bitsets.
+ * @param __rhs A same-sized dynamic_bitset.
+ *
+ * These should be self-explanatory.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ operator&=(const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ {
+ this->_M_do_and(__rhs);
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ operator&=(dynamic_bitset<_WordT, _Alloc>&& __rhs)
+ {
+ this->_M_do_and(std::move(__rhs));
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ operator|=(const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ {
+ this->_M_do_or(__rhs);
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ operator^=(const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ {
+ this->_M_do_xor(__rhs);
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ operator-=(const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ {
+ this->_M_do_dif(__rhs);
+ return *this;
+ }
+ //@}
+
+ //@{
+ /**
+ * @brief Operations on dynamic_bitsets.
+ * @param __pos The number of places to shift.
+ *
+ * These should be self-explanatory.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ operator<<=(size_type __pos)
+ {
+ if (__builtin_expect(__pos < this->_M_Nb, 1))
+ {
+ this->_M_do_left_shift(__pos);
+ this->_M_do_sanitize();
+ }
+ else
+ this->_M_do_reset();
+ return *this;
+ }
+
+ dynamic_bitset<_WordT, _Alloc>&
+ operator>>=(size_type __pos)
+ {
+ if (__builtin_expect(__pos < this->_M_Nb, 1))
+ {
+ this->_M_do_right_shift(__pos);
+ this->_M_do_sanitize();
+ }
+ else
+ this->_M_do_reset();
+ return *this;
+ }
+ //@}
+
+ // Set, reset, and flip.
+ /**
+ * @brief Sets every bit to true.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ set()
+ {
+ this->_M_do_set();
+ this->_M_do_sanitize();
+ return *this;
+ }
+
+ /**
+ * @brief Sets a given bit to a particular value.
+ * @param __pos The index of the bit.
+ * @param __val Either true or false, defaults to true.
+ * @throw std::out_of_range If @a __pos is bigger the size of the %set.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ set(size_type __pos, bool __val = true)
+ {
+ if (__pos >= _M_Nb)
+ __throw_out_of_range(__N("dynamic_bitset::set"));
+ return this->_M_unchecked_set(__pos, __val);
+ }
+
+ /**
+ * @brief Sets every bit to false.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ reset()
+ {
+ this->_M_do_reset();
+ return *this;
+ }
+
+ /**
+ * @brief Sets a given bit to false.
+ * @param __pos The index of the bit.
+ * @throw std::out_of_range If @a __pos is bigger the size of the %set.
+ *
+ * Same as writing @c set(__pos, false).
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ reset(size_type __pos)
+ {
+ if (__pos >= _M_Nb)
+ __throw_out_of_range(__N("dynamic_bitset::reset"));
+ return this->_M_unchecked_reset(__pos);
+ }
+
+ /**
+ * @brief Toggles every bit to its opposite value.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ flip()
+ {
+ this->_M_do_flip();
+ this->_M_do_sanitize();
+ return *this;
+ }
+
+ /**
+ * @brief Toggles a given bit to its opposite value.
+ * @param __pos The index of the bit.
+ * @throw std::out_of_range If @a __pos is bigger the size of the %set.
+ */
+ dynamic_bitset<_WordT, _Alloc>&
+ flip(size_type __pos)
+ {
+ if (__pos >= _M_Nb)
+ __throw_out_of_range(__N("dynamic_bitset::flip"));
+ return this->_M_unchecked_flip(__pos);
+ }
+
+ /// See the no-argument flip().
+ dynamic_bitset<_WordT, _Alloc>
+ operator~() const
+ { return dynamic_bitset<_WordT, _Alloc>(*this).flip(); }
+
+ //@{
+ /**
+ * @brief Array-indexing support.
+ * @param __pos Index into the %dynamic_bitset.
+ * @return A bool for a 'const %dynamic_bitset'. For non-const
+ * bitsets, an instance of the reference proxy class.
+ * @note These operators do no range checking and throw no
+ * exceptions, as required by DR 11 to the standard.
+ */
+ reference
+ operator[](size_type __pos)
+ { return reference(*this,__pos); }
+
+ const_reference
+ operator[](size_type __pos) const
+ { return _M_unchecked_test(__pos); }
+ //@}
+
+ /**
+ * @brief Returns a numerical interpretation of the %dynamic_bitset.
+ * @return The integral equivalent of the bits.
+ * @throw std::overflow_error If there are too many bits to be
+ * represented in an @c unsigned @c long.
+ */
+ unsigned long
+ to_ulong() const
+ { return this->_M_do_to_ulong(); }
+
+ /**
+ * @brief Returns a numerical interpretation of the %dynamic_bitset.
+ * @return The integral equivalent of the bits.
+ * @throw std::overflow_error If there are too many bits to be
+ * represented in an @c unsigned @c long.
+ */
+ unsigned long long
+ to_ullong() const
+ { return this->_M_do_to_ullong(); }
+
+ /**
+ * @brief Returns a character interpretation of the %dynamic_bitset.
+ * @return The string equivalent of the bits.
+ *
+ * Note the ordering of the bits: decreasing character positions
+ * correspond to increasing bit positions (see the main class notes for
+ * an example).
+ */
+ template<typename _CharT = char,
+ typename _Traits = std::char_traits<_CharT>,
+ typename _Alloc1 = std::allocator<_CharT>>
+ std::basic_string<_CharT, _Traits, _Alloc1>
+ to_string(_CharT __zero = _CharT('0'), _CharT __one = _CharT('1')) const
+ {
+ std::basic_string<_CharT, _Traits, _Alloc1> __result;
+ _M_copy_to_string(__result, __zero, __one);
+ return __result;
+ }
+
+ // Helper functions for string operations.
+ template<typename _CharT, typename _Traits>
+ void
+ _M_copy_from_ptr(const _CharT*, size_t, size_t, size_t,
+ _CharT, _CharT);
+
+ template<typename _CharT, typename _Traits, typename _Alloc1>
+ void
+ _M_copy_from_string(const std::basic_string<_CharT,
+ _Traits, _Alloc1>& __str, size_t __pos, size_t __n,
+ _CharT __zero = _CharT('0'),
+ _CharT __one = _CharT('1'))
+ { _M_copy_from_ptr<_CharT, _Traits>(__str.data(), __str.size(),
+ __pos, __n, __zero, __one); }
+
+ template<typename _CharT, typename _Traits, typename _Alloc1>
+ void
+ _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc1>& __str,
+ _CharT __zero = _CharT('0'),
+ _CharT __one = _CharT('1')) const;
+
+ /// Returns the number of bits which are set.
+ size_type
+ count() const
+ { return this->_M_do_count(); }
+
+ /// Returns the total number of bits.
+ size_type
+ size() const
+ { return this->_M_Nb; }
+
+ /// Returns the total number of blocks.
+ size_type num_blocks() const
+ { return this->_M_size(); }
+
+ /// Returns true if the dynamic_bitset is empty.
+ bool
+ empty() const
+ { return (this->_M_Nb == 0); }
+
+ /// Returns the maximum size of a dynamic_bitset object having the same
+ /// type as *this.
+ /// The real answer is max() * bits_per_block but is likely to overflow.
+ /*constexpr*/ size_type
+ max_size() const
+ { return std::numeric_limits<block_type>::max(); }
+
+ /**
+ * @brief Tests the value of a bit.
+ * @param __pos The index of a bit.
+ * @return The value at @a __pos.
+ * @throw std::out_of_range If @a __pos is bigger the size of the %set.
+ */
+ bool
+ test(size_type __pos) const
+ {
+ if (__pos >= _M_Nb)
+ __throw_out_of_range(__N("dynamic_bitset::test"));
+ return _M_unchecked_test(__pos);
+ }
+
+ /**
+ * @brief Tests whether all the bits are on.
+ * @return True if all the bits are set.
+ */
+ bool
+ all() const
+ { return this->_M_are_all_aux() == _M_Nb; }
+
+ /**
+ * @brief Tests whether any of the bits are on.
+ * @return True if at least one bit is set.
+ */
+ bool
+ any() const
+ { return this->_M_is_any(); }
+
+ /**
+ * @brief Tests whether any of the bits are on.
+ * @return True if none of the bits are set.
+ */
+ bool
+ none() const
+ { return !this->_M_is_any(); }
+
+ //@{
+ /// Self-explanatory.
+ dynamic_bitset<_WordT, _Alloc>
+ operator<<(size_type __pos) const
+ { return dynamic_bitset<_WordT, _Alloc>(*this) <<= __pos; }
+
+ dynamic_bitset<_WordT, _Alloc>
+ operator>>(size_type __pos) const
+ { return dynamic_bitset<_WordT, _Alloc>(*this) >>= __pos; }
+ //@}
+
+ /**
+ * @brief Finds the index of the first "on" bit.
+ * @return The index of the first bit set, or size() if not found.
+ * @sa find_next
+ */
+ size_type
+ find_first() const
+ { return this->_M_do_find_first(this->_M_Nb); }
+
+ /**
+ * @brief Finds the index of the next "on" bit after prev.
+ * @return The index of the next bit set, or size() if not found.
+ * @param __prev Where to start searching.
+ * @sa find_first
+ */
+ size_type
+ find_next(size_t __prev) const
+ { return this->_M_do_find_next(__prev, this->_M_Nb); }
+
+ bool
+ is_subset_of(const dynamic_bitset& __b) const
+ { return this->_M_is_subset_of(__b); }
+
+ bool
+ is_proper_subset_of(const dynamic_bitset& __b) const
+ { return this->_M_is_proper_subset_of(__b); }
+ };
+
+ // Definitions of non-inline member functions.
+ template<typename _WordT, typename _Alloc>
+ template<typename _CharT, typename _Traits>
+ void
+ dynamic_bitset<_WordT, _Alloc>::
+ _M_copy_from_ptr(const _CharT* __str, size_t __len,
+ size_t __pos, size_t __n, _CharT __zero, _CharT __one)
+ {
+ reset();
+ const size_t __nbits = std::min(_M_Nb, std::min(__n, __len - __pos));
+ for (size_t __i = __nbits; __i > 0; --__i)
+ {
+ const _CharT __c = __str[__pos + __nbits - __i];
+ if (_Traits::eq(__c, __zero))
+ ;
+ else if (_Traits::eq(__c, __one))
+ _M_unchecked_set(__i - 1);
+ else
+ __throw_invalid_argument(__N("dynamic_bitset::_M_copy_from_ptr"));
+ }
+ }
+
+ template<typename _WordT, typename _Alloc>
+ template<typename _CharT, typename _Traits, typename _Alloc1>
+ void
+ dynamic_bitset<_WordT, _Alloc>::
+ _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc1>& __str,
+ _CharT __zero, _CharT __one) const
+ {
+ __str.assign(_M_Nb, __zero);
+ for (size_t __i = _M_Nb; __i > 0; --__i)
+ if (_M_unchecked_test(__i - 1))
+ _Traits::assign(__str[_M_Nb - __i], __one);
+ }
+
+
+ //@{
+ /// These comparisons for equality/inequality are, well, @e bitwise.
+ template<typename _WordT, typename _Alloc>
+ bool
+ operator==(const dynamic_bitset<_WordT, _Alloc>& __lhs,
+ const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ { return __lhs._M_is_equal(__rhs); }
+
+ template<typename _WordT, typename _Alloc>
+ bool
+ operator!=(const dynamic_bitset<_WordT, _Alloc>& __lhs,
+ const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ { return !__lhs._M_is_equal(__rhs); }
+
+ template<typename _WordT, typename _Alloc>
+ bool
+ operator<(const dynamic_bitset<_WordT, _Alloc>& __lhs,
+ const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ { return __lhs._M_is_less(__rhs); }
+
+ template<typename _WordT, typename _Alloc>
+ bool
+ operator<=(const dynamic_bitset<_WordT, _Alloc>& __lhs,
+ const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ { return !(__lhs > __rhs); }
+
+ template<typename _WordT, typename _Alloc>
+ bool
+ operator>(const dynamic_bitset<_WordT, _Alloc>& __lhs,
+ const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ { return __rhs < __lhs; }
+
+ template<typename _WordT, typename _Alloc>
+ bool
+ operator>=(const dynamic_bitset<_WordT, _Alloc>& __lhs,
+ const dynamic_bitset<_WordT, _Alloc>& __rhs)
+ { return !(__lhs < __rhs); }
+ //@}
+
+ // 23.3.5.3 bitset operations:
+ //@{
+ /**
+ * @brief Global bitwise operations on bitsets.
+ * @param __x A bitset.
+ * @param __y A bitset of the same size as @a __x.
+ * @return A new bitset.
+ *
+ * These should be self-explanatory.
+ */
+ template<typename _WordT, typename _Alloc>
+ inline dynamic_bitset<_WordT, _Alloc>
+ operator&(const dynamic_bitset<_WordT, _Alloc>& __x,
+ const dynamic_bitset<_WordT, _Alloc>& __y)
+ {
+ dynamic_bitset<_WordT, _Alloc> __result(__x);
+ __result &= __y;
+ return __result;
+ }
+
+ template<typename _WordT, typename _Alloc>
+ inline dynamic_bitset<_WordT, _Alloc>
+ operator|(const dynamic_bitset<_WordT, _Alloc>& __x,
+ const dynamic_bitset<_WordT, _Alloc>& __y)
+ {
+ dynamic_bitset<_WordT, _Alloc> __result(__x);
+ __result |= __y;
+ return __result;
+ }
+
+ template <typename _WordT, typename _Alloc>
+ inline dynamic_bitset<_WordT, _Alloc>
+ operator^(const dynamic_bitset<_WordT, _Alloc>& __x,
+ const dynamic_bitset<_WordT, _Alloc>& __y)
+ {
+ dynamic_bitset<_WordT, _Alloc> __result(__x);
+ __result ^= __y;
+ return __result;
+ }
+
+ template <typename _WordT, typename _Alloc>
+ inline dynamic_bitset<_WordT, _Alloc>
+ operator-(const dynamic_bitset<_WordT, _Alloc>& __x,
+ const dynamic_bitset<_WordT, _Alloc>& __y)
+ {
+ dynamic_bitset<_WordT, _Alloc> __result(__x);
+ __result -= __y;
+ return __result;
+ }
+ //@}
+
+ //@{
+ /**
+ * @brief Global I/O operators for bitsets.
+ *
+ * Direct I/O between streams and bitsets is supported. Output is
+ * straightforward. Input will skip whitespace and only accept '0'
+ * and '1' characters. The %dynamic_bitset will grow as necessary
+ * to hold the string of bits.
+ */
+ template<typename _CharT, typename _Traits,
+ typename _WordT, typename _Alloc>
+ std::basic_istream<_CharT, _Traits>&
+ operator>>(std::basic_istream<_CharT, _Traits>& __is,
+ dynamic_bitset<_WordT, _Alloc>& __x)
+ {
+ typedef typename _Traits::char_type char_type;
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ std::basic_string<_CharT, _Traits> __tmp;
+ __tmp.reserve(__x.size());
+
+ const char_type __zero = __is.widen('0');
+ const char_type __one = __is.widen('1');
+
+ typename __ios_base::iostate __state = __ios_base::goodbit;
+ typename __istream_type::sentry __sentry(__is);
+ if (__sentry)
+ {
+ __try
+ {
+ while (1)
+ {
+ static typename _Traits::int_type __eof = _Traits::eof();
+
+ typename _Traits::int_type __c1 = __is.rdbuf()->sbumpc();
+ if (_Traits::eq_int_type(__c1, __eof))
+ {
+ __state |= __ios_base::eofbit;
+ break;
+ }
+ else
+ {
+ const char_type __c2 = _Traits::to_char_type(__c1);
+ if (_Traits::eq(__c2, __zero))
+ __tmp.push_back(__zero);
+ else if (_Traits::eq(__c2, __one))
+ __tmp.push_back(__one);
+ else if (_Traits::
+ eq_int_type(__is.rdbuf()->sputbackc(__c2),
+ __eof))
+ {
+ __state |= __ios_base::failbit;
+ break;
+ }
+ else
+ break;
+ }
+ }
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __is._M_setstate(__ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { __is._M_setstate(__ios_base::badbit); }
+ }
+
+ __x.resize(__tmp.size());
+
+ if (__tmp.empty() && __x.size())
+ __state |= __ios_base::failbit;
+ else
+ __x._M_copy_from_string(__tmp, static_cast<size_t>(0), __x.size(),
+ __zero, __one);
+ if (__state)
+ __is.setstate(__state);
+ return __is;
+ }
+
+ template <typename _CharT, typename _Traits,
+ typename _WordT, typename _Alloc>
+ std::basic_ostream<_CharT, _Traits>&
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ const dynamic_bitset<_WordT, _Alloc>& __x)
+ {
+ std::basic_string<_CharT, _Traits> __tmp;
+
+ const ctype<_CharT>& __ct = use_facet<ctype<_CharT>>(__os.getloc());
+ __x._M_copy_to_string(__tmp, __ct.widen('0'), __ct.widen('1'));
+ return __os << __tmp;
+ }
+ //@}
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // tr2
+} // std
+
+#undef _GLIBCXX_BITSET_BITS_PER_WORD
+
+#endif /* _GLIBCXX_TR2_DYNAMIC_BITSET */
diff --git a/libstdc++-v3/include/tr2/ratio b/libstdc++-v3/include/tr2/ratio
new file mode 100644
index 0000000000..34a9553c44
--- /dev/null
+++ b/libstdc++-v3/include/tr2/ratio
@@ -0,0 +1,59 @@
+// TR2 <ratio> -*- C++ -*-
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file tr2/ratio
+ * This is a TR2 C++ Library header.
+ */
+
+#include <ratio>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace tr2
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<intmax_t _Pn, size_t _Bit,
+ bool = _Bit < static_cast<size_t>
+ (std::numeric_limits<intmax_t>::digits)>
+ struct __safe_lshift
+ { static const intmax_t __value = 0; };
+
+ template<intmax_t _Pn, size_t _Bit>
+ struct __safe_lshift<_Pn, _Bit, true>
+ { static const intmax_t __value = _Pn << _Bit; };
+
+ /// Add binary prefixes (IEC 60027-2 A.2 and ISO/IEC 80000).
+ typedef ratio<__safe_lshift<1, 10>::__value, 1> kibi;
+ typedef ratio<__safe_lshift<1, 20>::__value, 1> mebi;
+ typedef ratio<__safe_lshift<1, 30>::__value, 1> gibi;
+ typedef ratio<__safe_lshift<1, 40>::__value, 1> tebi;
+ typedef ratio<__safe_lshift<1, 50>::__value, 1> pebi;
+ typedef ratio<__safe_lshift<1, 60>::__value, 1> exbi;
+ //typedef ratio<__safe_lshift<1, 70>::__value, 1> zebi;
+ //typedef ratio<__safe_lshift<1, 80>::__value, 1> yobi;
+
+_GLIBCXX_END_NAMESPACE_VERSION
+}
+}
diff --git a/libstdc++-v3/include/tr2/type_traits b/libstdc++-v3/include/tr2/type_traits
new file mode 100644
index 0000000000..eb8c012d58
--- /dev/null
+++ b/libstdc++-v3/include/tr2/type_traits
@@ -0,0 +1,106 @@
+// TR2 <type_traits> -*- C++ -*-
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file tr2/type_traits
+ * This is a TR2 C++ Library header.
+ */
+
+#ifndef _GLIBCXX_TR2_TYPE_TRAITS
+#define _GLIBCXX_TR2_TYPE_TRAITS 1
+
+#pragma GCC system_header
+#include <type_traits>
+#include <bits/c++config.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace tr2
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @addtogroup metaprogramming
+ * @{
+ */
+
+ /**
+ * See N2965: Type traits and base classes
+ * by Michael Spertus
+ */
+
+ /**
+ * Simple typelist. Compile-time list of types.
+ */
+ template<typename... _Elements>
+ struct __reflection_typelist;
+
+ /// Specialization for an empty typelist.
+ template<>
+ struct __reflection_typelist<>
+ {
+ typedef std::true_type empty;
+ };
+
+ /// Partial specialization.
+ template<typename _First, typename... _Rest>
+ struct __reflection_typelist<_First, _Rest...>
+ {
+ typedef std::false_type empty;
+
+ struct first
+ {
+ typedef _First type;
+ };
+
+ struct rest
+ {
+ typedef __reflection_typelist<_Rest...> type;
+ };
+ };
+
+ /// Sequence abstraction metafunctions for manipulating a typelist.
+
+
+
+ /// Enumerate all the base classes of a class. Form of a typelist.
+ template<typename _Tp>
+ struct bases
+ {
+ typedef __reflection_typelist<__bases(_Tp)...> type;
+ };
+
+ /// Enumerate all the direct base classes of a class. Form of a typelist.
+ template<typename _Tp>
+ struct direct_bases
+ {
+ typedef __reflection_typelist<__direct_bases(_Tp)...> type;
+ };
+
+ /// @} group metaprogramming
+
+_GLIBCXX_END_NAMESPACE_VERSION
+}
+}
+
+#endif // _GLIBCXX_TR2_TYPE_TRAITS
diff --git a/libstdc++-v3/libsupc++/Makefile.am b/libstdc++-v3/libsupc++/Makefile.am
index 701c2d9a76..7c72f58df8 100644
--- a/libstdc++-v3/libsupc++/Makefile.am
+++ b/libstdc++-v3/libsupc++/Makefile.am
@@ -1,7 +1,7 @@
## Makefile for the GNU C++ Support library.
##
## Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-## 2009, 2010, 2011
+## 2009, 2010, 2011, 2012
## Free Software Foundation, Inc.
##
## Process this file with automake to produce Makefile.in.
@@ -32,17 +32,17 @@ toolexeclib_LTLIBRARIES = libsupc++.la
noinst_LTLIBRARIES = libsupc++convenience.la
std_HEADERS = \
- cxxabi.h exception initializer_list new typeinfo
+ cxxabi.h exception initializer_list new typeinfo
bits_HEADERS = \
- cxxabi_forced.h hash_bytes.h \
- exception_defines.h exception_ptr.h nested_exception.h
+ atomic_lockfree_defines.h cxxabi_forced.h \
+ exception_defines.h exception_ptr.h hash_bytes.h nested_exception.h
headers = $(std_HEADERS) $(bits_HEADERS)
if GLIBCXX_HOSTED
c_sources = \
- cp-demangle.c
+ cp-demangle.c
endif
sources = \
@@ -68,6 +68,7 @@ sources = \
eh_ptr.cc \
eh_term_handler.cc \
eh_terminate.cc \
+ eh_tm.cc \
eh_throw.cc \
eh_type.cc \
eh_unex_handler.cc \
@@ -94,20 +95,48 @@ sources = \
vmi_class_type_info.cc \
vterminate.cc
-libsupc___la_SOURCES = $(sources) $(c_sources)
+libsupc___la_SOURCES = $(sources) $(c_sources)
libsupc__convenience_la_SOURCES = $(sources) $(c_sources)
+cp-demangle.c:
+ rm -f $@
+ $(LN_S) $(toplevel_srcdir)/libiberty/cp-demangle.c $@
+cp-demangle.lo: cp-demangle.c
+ $(LTCOMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
+cp-demangle.o: cp-demangle.c
+ $(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
+
+
+# Use special rules for the C++0x sources so that the proper flags are passed.
+eh_ptr.lo: eh_ptr.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+eh_ptr.o: eh_ptr.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
+eh_throw.lo: eh_throw.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+eh_throw.o: eh_throw.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
+guard.lo: guard.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+guard.o: guard.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
+nested_exception.lo: nested_exception.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+nested_exception.o: nested_exception.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion call for it.
AM_CXXFLAGS = \
- -fno-implicit-templates \
- $(LIBSUPCXX_PICFLAGS) \
- $(WARN_CXXFLAGS) \
- $(OPTIMIZE_CXXFLAGS) \
- $(CONFIG_CXXFLAGS)
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(XTEMPLATE_FLAGS) \
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
AM_MAKEFLAGS = \
"gxx_include_dir=$(gxx_include_dir)"
@@ -123,30 +152,13 @@ C_COMPILE = \
# LTCOMPILE is copied from LTCXXCOMPILE below.
LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared $(LIBTOOLFLAGS) --mode=compile \
- $(CC) $(DEFS) $(C_INCLUDES) $(LIBSUPCXX_PICFLAGS) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-
-cp-demangle.c:
- rm -f $@
- $(LN_S) $(toplevel_srcdir)/libiberty/cp-demangle.c $@
-cp-demangle.lo: cp-demangle.c
- $(LTCOMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
-cp-demangle.o: cp-demangle.c
- $(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
-
-
-nested_exception.lo: nested_exception.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-nested_exception.o: nested_exception.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
+ $(CC) $(DEFS) $(C_INCLUDES) \
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
# Libtool notes
-# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
-# last. (That way, things like -O2 passed down from the toplevel can
-# be overridden by --enable-debug.)
-
-# 2) In general, libtool expects an argument such as `--tag=CXX' when
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
# using the C++ compiler, because that will enable the settings
# detected when C++ support was being configured. However, when no
# such flag is given in the command line, libtool attempts to figure
@@ -158,12 +170,23 @@ nested_exception.o: nested_exception.cc
# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
# attempt to infer which configuration to use.
-#
-# We have to put --tag disable-shared after --tag CXX lest things
-# CXX undo the affect of disable-shared.
-LTCXXCOMPILE = $(LIBTOOL) --tag CXX --tag disable-shared $(LIBTOOLFLAGS) \
- --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
@@ -173,10 +196,11 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
# course is problematic at this point. So, we get the top-level
# directory to configure libstdc++-v3 to use gcc as the C++
# compilation driver.
-CXXLINK = $(LIBTOOL) --tag CXX --tag disable-shared $(LIBTOOLFLAGS) \
- --mode=link $(CXX) \
- $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
-
+CXXLINK = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
# Install notes
# We have to have rules modified from the default to counteract SUN make
diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in
index 18ba840180..a75d543028 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -95,13 +95,14 @@ am__objects_1 = array_type_info.lo atexit_arm.lo bad_alloc.lo \
del_opnt.lo del_opv.lo del_opvnt.lo dyncast.lo eh_alloc.lo \
eh_arm.lo eh_aux_runtime.lo eh_call.lo eh_catch.lo \
eh_exception.lo eh_globals.lo eh_personality.lo eh_ptr.lo \
- eh_term_handler.lo eh_terminate.lo eh_throw.lo eh_type.lo \
- eh_unex_handler.lo enum_type_info.lo function_type_info.lo \
- fundamental_type_info.lo guard.lo guard_error.lo hash_bytes.lo \
- nested_exception.lo new_handler.lo new_op.lo new_opnt.lo \
- new_opv.lo new_opvnt.lo pbase_type_info.lo pmem_type_info.lo \
- pointer_type_info.lo pure.lo si_class_type_info.lo tinfo.lo \
- tinfo2.lo vec.lo vmi_class_type_info.lo vterminate.lo
+ eh_term_handler.lo eh_terminate.lo eh_tm.lo eh_throw.lo \
+ eh_type.lo eh_unex_handler.lo enum_type_info.lo \
+ function_type_info.lo fundamental_type_info.lo guard.lo \
+ guard_error.lo hash_bytes.lo nested_exception.lo \
+ new_handler.lo new_op.lo new_opnt.lo new_opv.lo new_opvnt.lo \
+ pbase_type_info.lo pmem_type_info.lo pointer_type_info.lo \
+ pure.lo si_class_type_info.lo tinfo.lo tinfo2.lo vec.lo \
+ vmi_class_type_info.lo vterminate.lo
@GLIBCXX_HOSTED_TRUE@am__objects_2 = cp-demangle.lo
am_libsupc___la_OBJECTS = $(am__objects_1) $(am__objects_2)
libsupc___la_OBJECTS = $(am_libsupc___la_OBJECTS)
@@ -166,7 +167,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -194,7 +194,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -222,7 +221,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -249,6 +247,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -268,10 +267,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -299,6 +300,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -311,6 +313,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -321,14 +324,16 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
@@ -341,15 +346,15 @@ toolexeclib_LTLIBRARIES = libsupc++.la
# 2) integrated libsupc++convenience.la that is to be a part of libstdc++.a
noinst_LTLIBRARIES = libsupc++convenience.la
std_HEADERS = \
- cxxabi.h exception initializer_list new typeinfo
+ cxxabi.h exception initializer_list new typeinfo
bits_HEADERS = \
- cxxabi_forced.h hash_bytes.h \
- exception_defines.h exception_ptr.h nested_exception.h
+ atomic_lockfree_defines.h cxxabi_forced.h \
+ exception_defines.h exception_ptr.h hash_bytes.h nested_exception.h
headers = $(std_HEADERS) $(bits_HEADERS)
@GLIBCXX_HOSTED_TRUE@c_sources = \
-@GLIBCXX_HOSTED_TRUE@ cp-demangle.c
+@GLIBCXX_HOSTED_TRUE@ cp-demangle.c
sources = \
array_type_info.cc \
@@ -374,6 +379,7 @@ sources = \
eh_ptr.cc \
eh_term_handler.cc \
eh_terminate.cc \
+ eh_tm.cc \
eh_throw.cc \
eh_type.cc \
eh_unex_handler.cc \
@@ -400,7 +406,7 @@ sources = \
vmi_class_type_info.cc \
vterminate.cc
-libsupc___la_SOURCES = $(sources) $(c_sources)
+libsupc___la_SOURCES = $(sources) $(c_sources)
libsupc__convenience_la_SOURCES = $(sources) $(c_sources)
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
@@ -409,11 +415,9 @@ libsupc__convenience_la_SOURCES = $(sources) $(c_sources)
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion call for it.
AM_CXXFLAGS = \
- -fno-implicit-templates \
- $(LIBSUPCXX_PICFLAGS) \
- $(WARN_CXXFLAGS) \
- $(OPTIMIZE_CXXFLAGS) \
- $(CONFIG_CXXFLAGS)
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(XTEMPLATE_FLAGS) \
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
AM_MAKEFLAGS = \
"gxx_include_dir=$(gxx_include_dir)"
@@ -430,17 +434,14 @@ C_COMPILE = \
# LTCOMPILE is copied from LTCXXCOMPILE below.
LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared $(LIBTOOLFLAGS) --mode=compile \
- $(CC) $(DEFS) $(C_INCLUDES) $(LIBSUPCXX_PICFLAGS) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ $(CC) $(DEFS) $(C_INCLUDES) \
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
# Libtool notes
-# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
-# last. (That way, things like -O2 passed down from the toplevel can
-# be overridden by --enable-debug.)
-
-# 2) In general, libtool expects an argument such as `--tag=CXX' when
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
# using the C++ compiler, because that will enable the settings
# detected when C++ support was being configured. However, when no
# such flag is given in the command line, libtool attempts to figure
@@ -452,12 +453,23 @@ LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared $(LIBTOOLFLAGS) --mode=comp
# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
# attempt to infer which configuration to use.
-#
-# We have to put --tag disable-shared after --tag CXX lest things
-# CXX undo the affect of disable-shared.
-LTCXXCOMPILE = $(LIBTOOL) --tag CXX --tag disable-shared $(LIBTOOLFLAGS) \
- --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
@@ -467,9 +479,11 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
# course is problematic at this point. So, we get the top-level
# directory to configure libstdc++-v3 to use gcc as the C++
# compilation driver.
-CXXLINK = $(LIBTOOL) --tag CXX --tag disable-shared $(LIBTOOLFLAGS) \
- --mode=link $(CXX) \
- $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+CXXLINK = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
# Install notes
@@ -767,6 +781,22 @@ cp-demangle.lo: cp-demangle.c
cp-demangle.o: cp-demangle.c
$(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
+# Use special rules for the C++0x sources so that the proper flags are passed.
+eh_ptr.lo: eh_ptr.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+eh_ptr.o: eh_ptr.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
+eh_throw.lo: eh_throw.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+eh_throw.o: eh_throw.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
+guard.lo: guard.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+guard.o: guard.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
nested_exception.lo: nested_exception.cc
$(LTCXXCOMPILE) -std=gnu++0x -c $<
nested_exception.o: nested_exception.cc
diff --git a/libstdc++-v3/libsupc++/atomic_lockfree_defines.h b/libstdc++-v3/libsupc++/atomic_lockfree_defines.h
new file mode 100644
index 0000000000..22331b6153
--- /dev/null
+++ b/libstdc++-v3/libsupc++/atomic_lockfree_defines.h
@@ -0,0 +1,63 @@
+// -*- C++ -*- header.
+
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/atomic_lockfree_defines.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{atomic}
+ */
+
+#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H
+#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1
+
+#pragma GCC system_header
+
+/**
+ * @addtogroup atomics
+ * @{
+ */
+
+/**
+ * Lock-free property.
+ *
+ * 0 indicates that the types are never lock-free.
+ * 1 indicates that the types are sometimes lock-free.
+ * 2 indicates that the types are always lock-free.
+ */
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE
+#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
+#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE
+#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE
+#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE
+#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
+#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
+#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
+#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
+#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
+#endif
+
+// @} group atomics
+
+#endif
diff --git a/libstdc++-v3/libsupc++/bad_alloc.cc b/libstdc++-v3/libsupc++/bad_alloc.cc
index 16076cef93..b5ed6da490 100644
--- a/libstdc++-v3/libsupc++/bad_alloc.cc
+++ b/libstdc++-v3/libsupc++/bad_alloc.cc
@@ -1,6 +1,6 @@
// Implementation file for the -*- C++ -*- dynamic memory management header.
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2011 Free Software Foundation
//
// This file is part of GCC.
//
@@ -25,10 +25,10 @@
#include "new"
-std::bad_alloc::~bad_alloc() throw() { }
+std::bad_alloc::~bad_alloc() _GLIBCXX_USE_NOEXCEPT { }
const char*
-std::bad_alloc::what() const throw()
+std::bad_alloc::what() const _GLIBCXX_USE_NOEXCEPT
{
return "std::bad_alloc";
}
diff --git a/libstdc++-v3/libsupc++/bad_cast.cc b/libstdc++-v3/libsupc++/bad_cast.cc
index 2f56e4e82b..e6d492d7f2 100644
--- a/libstdc++-v3/libsupc++/bad_cast.cc
+++ b/libstdc++-v3/libsupc++/bad_cast.cc
@@ -1,5 +1,5 @@
// Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2007,
-// 2009 Free Software Foundation
+// 2009, 2010, 2011 Free Software Foundation
//
// This file is part of GCC.
//
@@ -26,10 +26,10 @@
namespace std {
-bad_cast::~bad_cast() throw() { }
+bad_cast::~bad_cast() _GLIBCXX_USE_NOEXCEPT { }
const char*
-bad_cast::what() const throw()
+bad_cast::what() const _GLIBCXX_USE_NOEXCEPT
{
return "std::bad_cast";
}
diff --git a/libstdc++-v3/libsupc++/bad_typeid.cc b/libstdc++-v3/libsupc++/bad_typeid.cc
index 54d7ef59d6..36a0d601b7 100644
--- a/libstdc++-v3/libsupc++/bad_typeid.cc
+++ b/libstdc++-v3/libsupc++/bad_typeid.cc
@@ -1,5 +1,5 @@
// Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2007,
-// 2009 Free Software Foundation
+// 2009, 2010, 2011 Free Software Foundation
//
// This file is part of GCC.
//
@@ -26,10 +26,10 @@
namespace std {
-bad_typeid::~bad_typeid() throw() { }
+bad_typeid::~bad_typeid() _GLIBCXX_USE_NOEXCEPT { }
const char*
-bad_typeid::what() const throw()
+bad_typeid::what() const _GLIBCXX_USE_NOEXCEPT
{
return "std::bad_typeid";
}
diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxabi.h
index c93085a072..b924fc1707 100644
--- a/libstdc++-v3/libsupc++/cxxabi.h
+++ b/libstdc++-v3/libsupc++/cxxabi.h
@@ -51,6 +51,10 @@
#include <bits/cxxabi_tweaks.h>
#include <bits/cxxabi_forced.h>
+#ifndef _GLIBCXX_CDTOR_CALLABI
+#define _GLIBCXX_CDTOR_CALLABI
+#endif
+
#ifdef __cplusplus
namespace __cxxabiv1
{
@@ -123,23 +127,26 @@ namespace __cxxabiv1
void
__cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW;
+ // DSO destruction.
+ int
+ __cxa_atexit(void (*)(void*), void*, void*) _GLIBCXX_NOTHROW;
+
+ int
+ __cxa_finalize(void*);
+
// Pure virtual functions.
void
__cxa_pure_virtual(void) __attribute__ ((__noreturn__));
- // Exception handling.
void
- __cxa_bad_cast();
+ __cxa_deleted_virtual(void) __attribute__ ((__noreturn__));
- void
- __cxa_bad_typeid();
+ // Exception handling auxillary.
+ void
+ __cxa_bad_cast() __attribute__((__noreturn__));
- // DSO destruction.
- int
- __cxa_atexit(void (*)(void*), void*, void*) _GLIBCXX_NOTHROW;
-
- int
- __cxa_finalize(void*);
+ void
+ __cxa_bad_typeid() __attribute__((__noreturn__));
/**
@@ -185,6 +192,7 @@ namespace __cxxabiv1
char*
__cxa_demangle(const char* __mangled_name, char* __output_buffer,
size_t* __length, int* __status);
+
#ifdef __cplusplus
}
} // namespace __cxxabiv1
@@ -547,30 +555,89 @@ namespace __cxxabiv1
__upcast_result& __restrict __result) const;
};
+ // Exception handling forward declarations.
+ struct __cxa_exception;
+ struct __cxa_refcounted_exception;
+ struct __cxa_dependent_exception;
+ struct __cxa_eh_globals;
+
+ extern "C"
+ {
// Dynamic cast runtime.
+
// src2dst has the following possible values
// >-1: src_type is a unique public non-virtual base of dst_type
// dst_ptr + src2dst == src_ptr
// -1: unspecified relationship
// -2: src_type is not a public base of dst_type
// -3: src_type is a multiple public non-virtual base of dst_type
- extern "C" void*
+ void*
__dynamic_cast(const void* __src_ptr, // Starting object.
const __class_type_info* __src_type, // Static type of object.
const __class_type_info* __dst_type, // Desired target type.
ptrdiff_t __src2dst); // How src and dst are related.
+ // Exception handling runtime.
+
+ // The __cxa_eh_globals for the current thread can be obtained by using
+ // either of the following functions. The "fast" version assumes at least
+ // one prior call of __cxa_get_globals has been made from the current
+ // thread, so no initialization is necessary.
+ __cxa_eh_globals*
+ __cxa_get_globals() _GLIBCXX_NOTHROW __attribute__ ((__const__));
+
+ __cxa_eh_globals*
+ __cxa_get_globals_fast() _GLIBCXX_NOTHROW __attribute__ ((__const__));
+
+ // Allocate memory for the primary exception plus the thrown object.
+ void*
+ __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW;
+
+ // Free the space allocated for the primary exception.
+ void
+ __cxa_free_exception(void*) _GLIBCXX_NOTHROW;
+
+ // Throw the exception.
+ void
+ __cxa_throw(void*, std::type_info*, void (_GLIBCXX_CDTOR_CALLABI *) (void *))
+ __attribute__((__noreturn__));
+
+ // Used to implement exception handlers.
+ void*
+ __cxa_get_exception_ptr(void*) _GLIBCXX_NOTHROW __attribute__ ((__pure__));
+
+ void*
+ __cxa_begin_catch(void*) _GLIBCXX_NOTHROW;
+
+ void
+ __cxa_end_catch();
+
+ void
+ __cxa_rethrow() __attribute__((__noreturn__));
+
// Returns the type_info for the currently handled exception [15.3/8], or
// null if there is none.
- extern "C" std::type_info*
+ std::type_info*
__cxa_current_exception_type() _GLIBCXX_NOTHROW __attribute__ ((__pure__));
+ // GNU Extensions.
+
+ // Allocate memory for a dependent exception.
+ __cxa_dependent_exception*
+ __cxa_allocate_dependent_exception() _GLIBCXX_NOTHROW;
+
+ // Free the space allocated for the dependent exception.
+ void
+ __cxa_free_dependent_exception(__cxa_dependent_exception*) _GLIBCXX_NOTHROW;
+
+ } // extern "C"
+
// A magic placeholder class that can be caught by reference
// to recognize foreign exceptions.
class __foreign_exception
{
- virtual ~__foreign_exception() _GLIBCXX_NOTHROW;
+ virtual ~__foreign_exception() throw();
virtual void __pure_dummy() = 0; // prevent catch by value
};
@@ -583,7 +650,7 @@ namespace __cxxabiv1
*
* A brief overview of an ABI is given in the libstdc++ FAQ, question
* 5.8 (you may have a copy of the FAQ locally, or you can view the online
- * version at http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_8).
+ * version at http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#5_8 ).
*
* GCC subscribes to a cross-vendor ABI for C++, sometimes
* called the IA64 ABI because it happens to be the native ABI for that
diff --git a/libstdc++-v3/libsupc++/del_op.cc b/libstdc++-v3/libsupc++/del_op.cc
index 86d4c1e298..0d69aa3aa3 100644
--- a/libstdc++-v3/libsupc++/del_op.cc
+++ b/libstdc++-v3/libsupc++/del_op.cc
@@ -1,6 +1,7 @@
// Boilerplate support routines for -*- C++ -*- dynamic memory management.
-// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2007, 2009 Free Software Foundation
+// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2007, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of GCC.
//
@@ -41,7 +42,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
#include "new"
_GLIBCXX_WEAK_DEFINITION void
-operator delete(void* ptr) throw ()
+operator delete(void* ptr) _GLIBCXX_USE_NOEXCEPT
{
if (ptr)
std::free(ptr);
diff --git a/libstdc++-v3/libsupc++/del_opnt.cc b/libstdc++-v3/libsupc++/del_opnt.cc
index 75051d5bee..1a43ca4e78 100644
--- a/libstdc++-v3/libsupc++/del_opnt.cc
+++ b/libstdc++-v3/libsupc++/del_opnt.cc
@@ -1,6 +1,7 @@
// Boilerplate support routines for -*- C++ -*- dynamic memory management.
-// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009 Free Software Foundation
+// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of GCC.
//
@@ -29,8 +30,7 @@
extern "C" void free (void *);
_GLIBCXX_WEAK_DEFINITION void
-operator delete (void *ptr, const std::nothrow_t&) throw ()
+operator delete (void *ptr, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
{
- if (ptr)
- free (ptr);
+ free (ptr);
}
diff --git a/libstdc++-v3/libsupc++/del_opv.cc b/libstdc++-v3/libsupc++/del_opv.cc
index c56df07d9d..594f86262d 100644
--- a/libstdc++-v3/libsupc++/del_opv.cc
+++ b/libstdc++-v3/libsupc++/del_opv.cc
@@ -1,6 +1,7 @@
// Boilerplate support routines for -*- C++ -*- dynamic memory management.
-// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009 Free Software Foundation
+// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of GCC.
//
@@ -27,7 +28,7 @@
#include "new"
_GLIBCXX_WEAK_DEFINITION void
-operator delete[] (void *ptr) throw ()
+operator delete[] (void *ptr) _GLIBCXX_USE_NOEXCEPT
{
::operator delete (ptr);
}
diff --git a/libstdc++-v3/libsupc++/del_opvnt.cc b/libstdc++-v3/libsupc++/del_opvnt.cc
index fec64953e6..e27eb5826e 100644
--- a/libstdc++-v3/libsupc++/del_opvnt.cc
+++ b/libstdc++-v3/libsupc++/del_opvnt.cc
@@ -1,6 +1,7 @@
// Boilerplate support routines for -*- C++ -*- dynamic memory management.
-// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009 Free Software Foundation
+// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of GCC.
//
@@ -27,7 +28,7 @@
#include "new"
_GLIBCXX_WEAK_DEFINITION void
-operator delete[] (void *ptr, const std::nothrow_t&) throw ()
+operator delete[] (void *ptr, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
{
::operator delete (ptr);
}
diff --git a/libstdc++-v3/libsupc++/eh_alloc.cc b/libstdc++-v3/libsupc++/eh_alloc.cc
index 818af0fe1f..74474d82ec 100644
--- a/libstdc++-v3/libsupc++/eh_alloc.cc
+++ b/libstdc++-v3/libsupc++/eh_alloc.cc
@@ -1,5 +1,5 @@
// -*- C++ -*- Allocate exception objects.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2011
// Free Software Foundation, Inc.
//
// This file is part of GCC.
@@ -94,7 +94,7 @@ namespace
}
extern "C" void *
-__cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) throw()
+__cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) _GLIBCXX_NOTHROW
{
void *ret;
@@ -139,7 +139,7 @@ __cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) throw()
extern "C" void
-__cxxabiv1::__cxa_free_exception(void *vptr) throw()
+__cxxabiv1::__cxa_free_exception(void *vptr) _GLIBCXX_NOTHROW
{
char *base = (char *) emergency_buffer;
char *ptr = (char *) vptr;
@@ -158,7 +158,7 @@ __cxxabiv1::__cxa_free_exception(void *vptr) throw()
extern "C" __cxa_dependent_exception*
-__cxxabiv1::__cxa_allocate_dependent_exception() throw()
+__cxxabiv1::__cxa_allocate_dependent_exception() _GLIBCXX_NOTHROW
{
__cxa_dependent_exception *ret;
@@ -202,7 +202,7 @@ __cxxabiv1::__cxa_allocate_dependent_exception() throw()
extern "C" void
__cxxabiv1::__cxa_free_dependent_exception
- (__cxa_dependent_exception *vptr) throw()
+ (__cxa_dependent_exception *vptr) _GLIBCXX_NOTHROW
{
char *base = (char *) dependents_buffer;
char *ptr = (char *) vptr;
diff --git a/libstdc++-v3/libsupc++/eh_arm.cc b/libstdc++-v3/libsupc++/eh_arm.cc
index f0acb705eb..0f0b026710 100644
--- a/libstdc++-v3/libsupc++/eh_arm.cc
+++ b/libstdc++-v3/libsupc++/eh_arm.cc
@@ -30,10 +30,11 @@
using namespace __cxxabiv1;
-// Given the thrown type THROW_TYPE, pointer to a variable containing a
-// pointer to the exception object THROWN_PTR_P and a type CATCH_TYPE to
-// compare against, return whether or not there is a match and if so,
-// update *THROWN_PTR_P.
+// Given the thrown type THROW_TYPE, exception object UE_HEADER and a
+// type CATCH_TYPE to compare against, return whether or not there is
+// a match and if so, update *THROWN_PTR_P to point to either the
+// type-matched object, or in the case of a pointer type, the object
+// pointed to by the pointer.
extern "C" __cxa_type_match_result
__cxa_type_match(_Unwind_Exception* ue_header,
@@ -41,51 +42,51 @@ __cxa_type_match(_Unwind_Exception* ue_header,
bool is_reference __attribute__((__unused__)),
void** thrown_ptr_p)
{
- bool forced_unwind = __is_gxx_forced_unwind_class(ue_header->exception_class);
- bool foreign_exception = !forced_unwind && !__is_gxx_exception_class(ue_header->exception_class);
- bool dependent_exception =
- __is_dependent_exception(ue_header->exception_class);
+ bool forced_unwind
+ = __is_gxx_forced_unwind_class(ue_header->exception_class);
+ bool foreign_exception
+ = !forced_unwind && !__is_gxx_exception_class(ue_header->exception_class);
+ bool dependent_exception
+ = __is_dependent_exception(ue_header->exception_class);
__cxa_exception* xh = __get_exception_header_from_ue(ue_header);
__cxa_dependent_exception *dx = __get_dependent_exception_from_ue(ue_header);
const std::type_info* throw_type;
+ void *thrown_ptr = 0;
if (forced_unwind)
throw_type = &typeid(abi::__forced_unwind);
else if (foreign_exception)
throw_type = &typeid(abi::__foreign_exception);
- else if (dependent_exception)
- throw_type = __get_exception_header_from_obj
- (dx->primaryException)->exceptionType;
else
- throw_type = xh->exceptionType;
-
- void* thrown_ptr = *thrown_ptr_p;
+ {
+ if (dependent_exception)
+ xh = __get_exception_header_from_obj (dx->primaryException);
+ throw_type = xh->exceptionType;
+ // We used to require the caller set the target of thrown_ptr_p,
+ // but that's incorrect -- the EHABI makes no such requirement
+ // -- and not all callers will set it. Fortunately callers that
+ // do initialize will always pass us the value we calculate
+ // here, so there's no backwards compatibility problem.
+ thrown_ptr = __get_object_from_ue (ue_header);
+ }
+
+ __cxa_type_match_result result = ctm_succeeded;
// Pointer types need to adjust the actual pointer, not
// the pointer to pointer that is the exception object.
// This also has the effect of passing pointer types
// "by value" through the __cxa_begin_catch return value.
if (throw_type->__is_pointer_p())
- thrown_ptr = *(void**) thrown_ptr;
+ {
+ thrown_ptr = *(void**) thrown_ptr;
+ // We need to indicate the indirection to our caller.
+ result = ctm_succeeded_with_ptr_to_base;
+ }
if (catch_type->__do_catch(throw_type, &thrown_ptr, 1))
{
*thrown_ptr_p = thrown_ptr;
-
- if (typeid(*catch_type) == typeid (typeid(void*)))
- {
- const __pointer_type_info *catch_pointer_type =
- static_cast<const __pointer_type_info *> (catch_type);
- const __pointer_type_info *throw_pointer_type =
- static_cast<const __pointer_type_info *> (throw_type);
-
- if (typeid (*catch_pointer_type->__pointee) != typeid (void)
- && (*catch_pointer_type->__pointee !=
- *throw_pointer_type->__pointee))
- return ctm_succeeded_with_ptr_to_base;
- }
-
- return ctm_succeeded;
+ return result;
}
return ctm_failed;
@@ -154,6 +155,49 @@ __gnu_end_cleanup(void)
return &header->unwindHeader;
}
+#ifdef __TMS320C6X__
+// Assembly wrapper to call __gnu_end_cleanup without clobbering
+// function arguments to _Unwind_Resume.
+asm (".global __cxa_end_cleanup\n"
+" .type __cxa_end_cleanup, \"function\"\n"
+"__cxa_end_cleanup:\n"
+" stw .d2t2 B9, *B15--[10]\n"
+" stw .d2t2 B8, *+B15[9]\n"
+" stw .d2t2 B7, *+B15[8]\n"
+" stw .d2t2 B6, *+B15[7]\n"
+" stw .d2t2 B5, *+B15[6]\n"
+" stw .d2t2 B4, *+B15[5]\n"
+" stw .d2t1 A9, *+B15[4]\n"
+" stw .d2t1 A8, *+B15[3]\n"
+" stw .d2t1 A7, *+B15[2]\n"
+" stw .d2t1 A6, *+B15[1]\n"
+#ifdef _TMS320C6400_PLUS
+" callp .s2 (__gnu_end_cleanup), B3\n"
+#elif defined(_TMS320C6400)
+" call .s2 (__gnu_end_cleanup)\n"
+" addkpc .s2 1f, B3, 0\n"
+" nop 4\n"
+"1:\n"
+#else
+" call .s2 (__gnu_end_cleanup)\n"
+" mvkl .s2 1f, B3\n"
+" mvkh .s2 1f, B3\n"
+" nop 3\n"
+"1:\n"
+#endif
+" ldw .d2t1 *+B15[1], A6\n"
+" ldw .d2t1 *+B15[2], A7\n"
+" ldw .d2t1 *+B15[3], A8\n"
+" ldw .d2t1 *+B15[4], A9\n"
+" ldw .d2t2 *+B15[5], B4\n"
+" ldw .d2t2 *+B15[6], B5\n"
+" ldw .d2t2 *+B15[7], B6\n"
+" ldw .d2t2 *+B15[8], B7\n"
+" ldw .d2t2 *+B15[9], B8\n"
+" ldw .d2t2 *++B15[10], B9\n"
+" b .s2 _Unwind_Resume\n"
+" nop 5\n");
+#else
// Assembly wrapper to call __gnu_end_cleanup without clobbering r1-r3.
// Also push r4 to preserve stack alignment.
#ifdef __thumb__
@@ -178,5 +222,6 @@ asm (" .pushsection .text.__cxa_end_cleanup\n"
" bl\t_Unwind_Resume @ Never returns\n"
" .popsection\n");
#endif
+#endif
#endif
diff --git a/libstdc++-v3/libsupc++/eh_call.cc b/libstdc++-v3/libsupc++/eh_call.cc
index f519f35f02..a6a55a4d9d 100644
--- a/libstdc++-v3/libsupc++/eh_call.cc
+++ b/libstdc++-v3/libsupc++/eh_call.cc
@@ -73,6 +73,7 @@ __cxa_call_unexpected(void* exc_obj_in)
int rtti_count = 0;
_Unwind_Word rtti_stride = 0;
_Unwind_Word* rtti_list = NULL;
+ _Unwind_Ptr rtti_base = 0;
bool foreign_exception;
std::unexpected_handler unexpectedHandler = NULL;
std::terminate_handler terminateHandler = NULL;
@@ -84,7 +85,7 @@ __cxa_call_unexpected(void* exc_obj_in)
unexpectedHandler = xh->unexpectedHandler;
terminateHandler = xh->terminateHandler;
rtti_count = exc_obj->barrier_cache.bitpattern[1];
-
+ rtti_base = (_Unwind_Ptr) exc_obj->barrier_cache.bitpattern[2];
rtti_stride = exc_obj->barrier_cache.bitpattern[3];
rtti_list = (_Unwind_Word*) exc_obj->barrier_cache.bitpattern[4];
foreign_exception = false;
@@ -134,7 +135,7 @@ __cxa_call_unexpected(void* exc_obj_in)
_Unwind_Word offset;
offset = (_Unwind_Word) &rtti_list[n * (rtti_stride >> 2)];
- offset = _Unwind_decode_target2(offset);
+ offset = _Unwind_decode_typeinfo_ptr(rtti_base, offset);
catch_type = (const std::type_info*) (offset);
if (__cxa_type_match(&new_xh->unwindHeader, catch_type, false,
diff --git a/libstdc++-v3/libsupc++/eh_catch.cc b/libstdc++-v3/libsupc++/eh_catch.cc
index 567222aa5f..b111497688 100644
--- a/libstdc++-v3/libsupc++/eh_catch.cc
+++ b/libstdc++-v3/libsupc++/eh_catch.cc
@@ -1,5 +1,5 @@
// -*- C++ -*- Exception handling routines for catching.
-// Copyright (C) 2001, 2003, 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003, 2004, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -28,7 +28,7 @@
using namespace __cxxabiv1;
extern "C" void *
-__cxxabiv1::__cxa_get_exception_ptr(void *exc_obj_in) throw()
+__cxxabiv1::__cxa_get_exception_ptr(void *exc_obj_in) _GLIBCXX_NOTHROW
{
_Unwind_Exception *exceptionObject
= reinterpret_cast <_Unwind_Exception *>(exc_obj_in);
@@ -37,7 +37,7 @@ __cxxabiv1::__cxa_get_exception_ptr(void *exc_obj_in) throw()
}
extern "C" void *
-__cxxabiv1::__cxa_begin_catch (void *exc_obj_in) throw()
+__cxxabiv1::__cxa_begin_catch (void *exc_obj_in) _GLIBCXX_NOTHROW
{
_Unwind_Exception *exceptionObject
= reinterpret_cast <_Unwind_Exception *>(exc_obj_in);
diff --git a/libstdc++-v3/libsupc++/eh_exception.cc b/libstdc++-v3/libsupc++/eh_exception.cc
index 2f752b3108..cbdca199ba 100644
--- a/libstdc++-v3/libsupc++/eh_exception.cc
+++ b/libstdc++-v3/libsupc++/eh_exception.cc
@@ -1,6 +1,6 @@
// -*- C++ -*- std::exception implementation.
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-// 2003, 2004, 2005, 2006, 2007, 2009
+// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
// Free Software Foundation
//
// This file is part of GCC.
@@ -28,16 +28,16 @@
#include "exception"
#include <cxxabi.h>
-std::exception::~exception() throw() { }
+std::exception::~exception() _GLIBCXX_USE_NOEXCEPT { }
-std::bad_exception::~bad_exception() throw() { }
+std::bad_exception::~bad_exception() _GLIBCXX_USE_NOEXCEPT { }
abi::__forced_unwind::~__forced_unwind() throw() { }
abi::__foreign_exception::~__foreign_exception() throw() { }
const char*
-std::exception::what() const throw()
+std::exception::what() const _GLIBCXX_USE_NOEXCEPT
{
// NB: Another elegant option would be returning typeid(*this).name()
// and not overriding what() in bad_exception, bad_alloc, etc. In
@@ -46,7 +46,7 @@ std::exception::what() const throw()
}
const char*
-std::bad_exception::what() const throw()
+std::bad_exception::what() const _GLIBCXX_USE_NOEXCEPT
{
return "std::bad_exception";
}
diff --git a/libstdc++-v3/libsupc++/eh_globals.cc b/libstdc++-v3/libsupc++/eh_globals.cc
index 63f46a99e0..0c7f6b7608 100644
--- a/libstdc++-v3/libsupc++/eh_globals.cc
+++ b/libstdc++-v3/libsupc++/eh_globals.cc
@@ -1,5 +1,5 @@
// -*- C++ -*- Manage the thread-local exception globals.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2011
// Free Software Foundation, Inc.
//
// This file is part of GCC.
@@ -47,7 +47,7 @@ using namespace __cxxabiv1;
namespace
{
abi::__cxa_eh_globals*
- get_global() throw()
+ get_global() _GLIBCXX_NOTHROW
{
static __thread abi::__cxa_eh_globals global;
return &global;
@@ -55,11 +55,11 @@ namespace
} // anonymous namespace
extern "C" __cxa_eh_globals*
-__cxxabiv1::__cxa_get_globals_fast() throw()
+__cxxabiv1::__cxa_get_globals_fast() _GLIBCXX_NOTHROW
{ return get_global(); }
extern "C" __cxa_eh_globals*
-__cxxabiv1::__cxa_get_globals() throw()
+__cxxabiv1::__cxa_get_globals() _GLIBCXX_NOTHROW
{ return get_global(); }
@@ -110,7 +110,7 @@ struct __eh_globals_init
static __eh_globals_init init;
extern "C" __cxa_eh_globals*
-__cxxabiv1::__cxa_get_globals_fast() throw()
+__cxxabiv1::__cxa_get_globals_fast() _GLIBCXX_NOTHROW
{
__cxa_eh_globals* g;
if (init._M_init)
@@ -121,7 +121,7 @@ __cxxabiv1::__cxa_get_globals_fast() throw()
}
extern "C" __cxa_eh_globals*
-__cxxabiv1::__cxa_get_globals() throw()
+__cxxabiv1::__cxa_get_globals() _GLIBCXX_NOTHROW
{
__cxa_eh_globals* g;
if (init._M_init)
@@ -148,11 +148,11 @@ __cxxabiv1::__cxa_get_globals() throw()
#else
extern "C" __cxa_eh_globals*
-__cxxabiv1::__cxa_get_globals_fast() throw()
+__cxxabiv1::__cxa_get_globals_fast() _GLIBCXX_NOTHROW
{ return &eh_globals; }
extern "C" __cxa_eh_globals*
-__cxxabiv1::__cxa_get_globals() throw()
+__cxxabiv1::__cxa_get_globals() _GLIBCXX_NOTHROW
{ return &eh_globals; }
#endif
diff --git a/libstdc++-v3/libsupc++/eh_personality.cc b/libstdc++-v3/libsupc++/eh_personality.cc
index 19c2044736..729d688d7c 100644
--- a/libstdc++-v3/libsupc++/eh_personality.cc
+++ b/libstdc++-v3/libsupc++/eh_personality.cc
@@ -30,11 +30,8 @@
#include <cxxabi.h>
#include "unwind-cxx.h"
-using namespace __cxxabiv1;
-#ifdef __ARM_EABI_UNWINDER__
-#define NO_SIZE_OF_ENCODED_VALUE
-#endif
+using namespace __cxxabiv1;
#include "unwind-pe.h"
@@ -70,6 +67,11 @@ parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
info->ttype_encoding = *p++;
if (info->ttype_encoding != DW_EH_PE_omit)
{
+#if _GLIBCXX_OVERRIDE_TTYPE_ENCODING
+ /* Older ARM EABI toolchains set this value incorrectly, so use a
+ hardcoded OS-specific format. */
+ info->ttype_encoding = _GLIBCXX_OVERRIDE_TTYPE_ENCODING;
+#endif
p = read_uleb128 (p, &tmp);
info->TType = p + tmp;
}
@@ -85,21 +87,22 @@ parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
return p;
}
-#ifdef __ARM_EABI_UNWINDER__
-
// Return an element from a type table.
-static const std::type_info*
-get_ttype_entry(lsda_header_info* info, _uleb128_t i)
+static const std::type_info *
+get_ttype_entry (lsda_header_info *info, _uleb128_t i)
{
_Unwind_Ptr ptr;
- ptr = (_Unwind_Ptr) (info->TType - (i * 4));
- ptr = _Unwind_decode_target2(ptr);
-
+ i *= size_of_encoded_value (info->ttype_encoding);
+ read_encoded_value_with_base (info->ttype_encoding, info->ttype_base,
+ info->TType - i, &ptr);
+
return reinterpret_cast<const std::type_info *>(ptr);
}
+#ifdef __ARM_EABI_UNWINDER__
+
// The ABI provides a routine for matching exception object types.
typedef _Unwind_Control_Block _throw_typet;
#define get_adjusted_ptr(catch_type, throw_type, thrown_ptr_p) \
@@ -127,7 +130,7 @@ check_exception_spec(lsda_header_info* info, _throw_typet* throw_type,
if (tmp == 0)
return false;
- tmp = _Unwind_decode_target2((_Unwind_Word) e);
+ tmp = _Unwind_decode_typeinfo_ptr(info->ttype_base, (_Unwind_Word) e);
// Match a ttype entry.
catch_type = reinterpret_cast<const std::type_info*>(tmp);
@@ -157,7 +160,7 @@ save_caught_exception(struct _Unwind_Exception* ue_header,
const unsigned char* action_record
__attribute__((__unused__)))
{
- ue_header->barrier_cache.sp = _Unwind_GetGR(context, 13);
+ ue_header->barrier_cache.sp = _Unwind_GetGR(context, UNWIND_STACK_REG);
ue_header->barrier_cache.bitpattern[0] = (_uw) thrown_ptr;
ue_header->barrier_cache.bitpattern[1]
= (_uw) handler_switch_value;
@@ -205,20 +208,6 @@ empty_exception_spec (lsda_header_info *info, _Unwind_Sword filter_value)
typedef const std::type_info _throw_typet;
-// Return an element from a type table.
-
-static const std::type_info *
-get_ttype_entry (lsda_header_info *info, _uleb128_t i)
-{
- _Unwind_Ptr ptr;
-
- i *= size_of_encoded_value (info->ttype_encoding);
- read_encoded_value_with_base (info->ttype_encoding, info->ttype_base,
- info->TType - i, &ptr);
-
- return reinterpret_cast<const std::type_info *>(ptr);
-}
-
// Given the thrown type THROW_TYPE, pointer to a variable containing a
// pointer to the exception object THROWN_PTR_P and a type CATCH_TYPE to
// compare against, return whether or not there is a match and if so,
@@ -390,7 +379,8 @@ PERSONALITY_FUNCTION (int version,
case _US_UNWIND_FRAME_STARTING:
actions = _UA_CLEANUP_PHASE;
if (!(state & _US_FORCE_UNWIND)
- && ue_header->barrier_cache.sp == _Unwind_GetGR(context, 13))
+ && ue_header->barrier_cache.sp == _Unwind_GetGR(context,
+ UNWIND_STACK_REG))
actions |= _UA_HANDLER_FRAME;
break;
@@ -410,10 +400,10 @@ PERSONALITY_FUNCTION (int version,
// The dwarf unwinder assumes the context structure holds things like the
// function and LSDA pointers. The ARM implementation caches these in
- // the exception header (UCB). To avoid rewriting everything we make the
- // virtual IP register point at the UCB.
+ // the exception header (UCB). To avoid rewriting everything we make a
+ // virtual scratch register point at the UCB.
ip = (_Unwind_Ptr) ue_header;
- _Unwind_SetGR(context, 12, ip);
+ _Unwind_SetGR(context, UNWIND_POINTER_REG, ip);
#else
__cxa_exception* xh = __get_exception_header_from_ue(ue_header);
@@ -679,6 +669,8 @@ PERSONALITY_FUNCTION (int version,
if (handler_switch_value < 0)
{
parse_lsda_header (context, language_specific_data, &info);
+ info.ttype_base = base_of_encoded_value (info.ttype_encoding,
+ context);
#ifdef __ARM_EABI_UNWINDER__
const _Unwind_Word* e;
@@ -692,8 +684,8 @@ PERSONALITY_FUNCTION (int version,
// Count.
ue_header->barrier_cache.bitpattern[1] = n;
- // Base (obsolete)
- ue_header->barrier_cache.bitpattern[2] = 0;
+ // Base
+ ue_header->barrier_cache.bitpattern[2] = info.ttype_base;
// Stride.
ue_header->barrier_cache.bitpattern[3] = 4;
// List head.
diff --git a/libstdc++-v3/libsupc++/eh_ptr.cc b/libstdc++-v3/libsupc++/eh_ptr.cc
index 94c28427d6..82ebb0b173 100644
--- a/libstdc++-v3/libsupc++/eh_ptr.cc
+++ b/libstdc++-v3/libsupc++/eh_ptr.cc
@@ -1,5 +1,5 @@
// -*- C++ -*- Implement the members of exception_ptr.
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -23,8 +23,9 @@
// <http://www.gnu.org/licenses/>.
#include <bits/c++config.h>
+#include <bits/atomic_lockfree_defines.h>
-#ifdef _GLIBCXX_ATOMIC_BUILTINS_4
+#if ATOMIC_INT_LOCK_FREE > 1
#define _GLIBCXX_EH_PTR_COMPAT
@@ -34,31 +35,33 @@
using namespace __cxxabiv1;
-std::__exception_ptr::exception_ptr::exception_ptr() throw()
+std::__exception_ptr::exception_ptr::exception_ptr() _GLIBCXX_USE_NOEXCEPT
: _M_exception_object(0) { }
-std::__exception_ptr::exception_ptr::exception_ptr(void* obj) throw()
+std::__exception_ptr::exception_ptr::exception_ptr(void* obj)
+_GLIBCXX_USE_NOEXCEPT
: _M_exception_object(obj) { _M_addref(); }
-std::__exception_ptr::exception_ptr::exception_ptr(__safe_bool) throw()
+std::__exception_ptr::exception_ptr::exception_ptr(__safe_bool)
+_GLIBCXX_USE_NOEXCEPT
: _M_exception_object(0) { }
std::__exception_ptr::
-exception_ptr::exception_ptr(const exception_ptr& other) throw()
+exception_ptr::exception_ptr(const exception_ptr& other) _GLIBCXX_USE_NOEXCEPT
: _M_exception_object(other._M_exception_object)
{ _M_addref(); }
-std::__exception_ptr::exception_ptr::~exception_ptr() throw()
+std::__exception_ptr::exception_ptr::~exception_ptr() _GLIBCXX_USE_NOEXCEPT
{ _M_release(); }
std::__exception_ptr::exception_ptr&
std::__exception_ptr::
-exception_ptr::operator=(const exception_ptr& other) throw()
+exception_ptr::operator=(const exception_ptr& other) _GLIBCXX_USE_NOEXCEPT
{
exception_ptr(other).swap(*this);
return *this;
@@ -66,25 +69,25 @@ exception_ptr::operator=(const exception_ptr& other) throw()
void
-std::__exception_ptr::exception_ptr::_M_addref() throw()
+std::__exception_ptr::exception_ptr::_M_addref() _GLIBCXX_USE_NOEXCEPT
{
if (_M_exception_object)
{
__cxa_refcounted_exception *eh =
__get_refcounted_exception_header_from_obj (_M_exception_object);
- __sync_add_and_fetch (&eh->referenceCount, 1);
+ __atomic_add_fetch (&eh->referenceCount, 1, __ATOMIC_ACQ_REL);
}
}
void
-std::__exception_ptr::exception_ptr::_M_release() throw()
+std::__exception_ptr::exception_ptr::_M_release() _GLIBCXX_USE_NOEXCEPT
{
if (_M_exception_object)
{
__cxa_refcounted_exception *eh =
__get_refcounted_exception_header_from_obj (_M_exception_object);
- if (__sync_sub_and_fetch (&eh->referenceCount, 1) == 0)
+ if (__atomic_sub_fetch (&eh->referenceCount, 1, __ATOMIC_ACQ_REL) == 0)
{
if (eh->exc.exceptionDestructor)
eh->exc.exceptionDestructor (_M_exception_object);
@@ -97,12 +100,13 @@ std::__exception_ptr::exception_ptr::_M_release() throw()
void*
-std::__exception_ptr::exception_ptr::_M_get() const throw()
+std::__exception_ptr::exception_ptr::_M_get() const _GLIBCXX_USE_NOEXCEPT
{ return _M_exception_object; }
void
-std::__exception_ptr::exception_ptr::swap(exception_ptr &other) throw()
+std::__exception_ptr::exception_ptr::swap(exception_ptr &other)
+ _GLIBCXX_USE_NOEXCEPT
{
void *tmp = _M_exception_object;
_M_exception_object = other._M_exception_object;
@@ -112,24 +116,27 @@ std::__exception_ptr::exception_ptr::swap(exception_ptr &other) throw()
// Retained for compatibility with CXXABI_1.3.
void
-std::__exception_ptr::exception_ptr::_M_safe_bool_dummy() throw () { }
+std::__exception_ptr::exception_ptr::_M_safe_bool_dummy()
+ _GLIBCXX_USE_NOEXCEPT { }
// Retained for compatibility with CXXABI_1.3.
bool
-std::__exception_ptr::exception_ptr::operator!() const throw()
+std::__exception_ptr::exception_ptr::operator!() const _GLIBCXX_USE_NOEXCEPT
{ return _M_exception_object == 0; }
// Retained for compatibility with CXXABI_1.3.
-std::__exception_ptr::exception_ptr::operator __safe_bool() const throw()
+std::__exception_ptr::exception_ptr::operator __safe_bool() const
+_GLIBCXX_USE_NOEXCEPT
{
return _M_exception_object ? &exception_ptr::_M_safe_bool_dummy : 0;
}
const std::type_info*
-std::__exception_ptr::exception_ptr::__cxa_exception_type() const throw()
+std::__exception_ptr::exception_ptr::__cxa_exception_type() const
+ _GLIBCXX_USE_NOEXCEPT
{
__cxa_exception *eh = __get_exception_header_from_obj (_M_exception_object);
return eh->exceptionType;
@@ -137,17 +144,19 @@ std::__exception_ptr::exception_ptr::__cxa_exception_type() const throw()
bool std::__exception_ptr::operator==(const exception_ptr& lhs,
- const exception_ptr& rhs) throw()
+ const exception_ptr& rhs)
+ _GLIBCXX_USE_NOEXCEPT
{ return lhs._M_exception_object == rhs._M_exception_object; }
bool std::__exception_ptr::operator!=(const exception_ptr& lhs,
- const exception_ptr& rhs) throw()
+ const exception_ptr& rhs)
+ _GLIBCXX_USE_NOEXCEPT
{ return !(lhs == rhs);}
std::exception_ptr
-std::current_exception() throw()
+std::current_exception() _GLIBCXX_USE_NOEXCEPT
{
__cxa_eh_globals *globals = __cxa_get_globals ();
__cxa_exception *header = globals->caughtExceptions;
@@ -182,7 +191,7 @@ __gxx_dependent_exception_cleanup(_Unwind_Reason_Code code,
__cxa_free_dependent_exception (dep);
- if (__sync_sub_and_fetch (&header->referenceCount, 1) == 0)
+ if (__atomic_sub_fetch (&header->referenceCount, 1, __ATOMIC_ACQ_REL) == 0)
{
if (header->exc.exceptionDestructor)
header->exc.exceptionDestructor (header + 1);
@@ -201,7 +210,7 @@ std::rethrow_exception(std::exception_ptr ep)
__cxa_dependent_exception *dep = __cxa_allocate_dependent_exception ();
dep->primaryException = obj;
- __sync_add_and_fetch (&eh->referenceCount, 1);
+ __atomic_add_fetch (&eh->referenceCount, 1, __ATOMIC_ACQ_REL);
dep->unexpectedHandler = __unexpected_handler;
dep->terminateHandler = __terminate_handler;
diff --git a/libstdc++-v3/libsupc++/eh_throw.cc b/libstdc++-v3/libsupc++/eh_throw.cc
index 78cfc13956..de00602cde 100644
--- a/libstdc++-v3/libsupc++/eh_throw.cc
+++ b/libstdc++-v3/libsupc++/eh_throw.cc
@@ -1,6 +1,6 @@
// -*- C++ -*- Exception handling routines for throwing.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -43,23 +43,23 @@ __gxx_exception_cleanup (_Unwind_Reason_Code code, _Unwind_Exception *exc)
if (code != _URC_FOREIGN_EXCEPTION_CAUGHT && code != _URC_NO_REASON)
__terminate (header->exc.terminateHandler);
-#ifdef _GLIBCXX_ATOMIC_BUILTINS_4
- if (__sync_sub_and_fetch (&header->referenceCount, 1) == 0)
+#if ATOMIC_INT_LOCK_FREE > 1
+ if (__atomic_sub_fetch (&header->referenceCount, 1, __ATOMIC_ACQ_REL) == 0)
{
#endif
if (header->exc.exceptionDestructor)
header->exc.exceptionDestructor (header + 1);
__cxa_free_exception (header + 1);
-#ifdef _GLIBCXX_ATOMIC_BUILTINS_4
+#if ATOMIC_INT_LOCK_FREE > 1
}
#endif
}
extern "C" void
-__cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
- void (*dest) (void *))
+__cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
+ void (_GLIBCXX_CDTOR_CALLABI *dest) (void *))
{
// Definitely a primary.
__cxa_refcounted_exception *header
diff --git a/libstdc++-v3/libsupc++/eh_tm.cc b/libstdc++-v3/libsupc++/eh_tm.cc
new file mode 100644
index 0000000000..bd9de6c60e
--- /dev/null
+++ b/libstdc++-v3/libsupc++/eh_tm.cc
@@ -0,0 +1,126 @@
+// -*- C++ -*- Exception handling routines for Transactional Memory.
+// Copyright (C) 2009, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of GCC.
+//
+// GCC is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// GCC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <cstdlib>
+#include "unwind-cxx.h"
+
+using namespace __cxxabiv1;
+
+// Free one C++ exception.
+
+static void
+free_any_cxa_exception (_Unwind_Exception *eo)
+{
+ __cxa_refcounted_exception *h
+ = __get_refcounted_exception_header_from_ue (eo);
+
+ if (__is_dependent_exception (eo->exception_class))
+ {
+ __cxa_dependent_exception *dep
+ = __get_dependent_exception_from_ue (eo);
+
+ h = __get_refcounted_exception_header_from_obj (dep->primaryException);
+
+ __cxa_free_dependent_exception (dep);
+ }
+
+#if __GCC_ATOMIC_INT_LOCK_FREE > 1
+ if (__atomic_sub_fetch (&h->referenceCount, 1, __ATOMIC_ACQ_REL) == 0)
+#endif
+ __cxa_free_exception (h + 1);
+}
+
+// Cleanup exception handling state while rolling back state for
+// a software transactional memory transaction.
+//
+// UNTHROWN_OBJ is non-null if we've called __cxa_allocate_exception
+// but not yet called __cxa_throw for it.
+//
+// CLEANUP_EXC is non-null if we're currently processing a cleanup
+// along an exception path, but we've not caught the exception yet.
+//
+// CAUGHT_COUNT is the nesting depth of __cxa_begin_catch within
+// the transaction; undo as if calling __cxa_end_catch that many times.
+
+extern "C" void
+__cxxabiv1::__cxa_tm_cleanup (void *unthrown_obj,
+ void *cleanup_exc,
+ unsigned int caught_count) throw()
+{
+ __cxa_eh_globals *globals = __cxa_get_globals_fast ();
+
+ // Handle a C++ exception not yet thrown.
+ if (unthrown_obj)
+ {
+ globals->uncaughtExceptions -= 1;
+ __cxa_free_exception (unthrown_obj);
+ }
+
+ // Handle an exception not yet caught ie. processing a cleanup
+ // in between the throw and the catch.
+ if (cleanup_exc)
+ {
+ _Unwind_Exception *eo
+ = reinterpret_cast <_Unwind_Exception *>(cleanup_exc);
+ if (__is_gxx_exception_class (eo->exception_class))
+ free_any_cxa_exception (eo);
+ else
+ _Unwind_DeleteException (eo);
+ }
+
+ // Do __cxa_end_catch caught_count times, but don't bother running
+ // the destructors for the objects involved. All of that is being
+ // undone by the transaction restart.
+ if (caught_count > 0)
+ {
+ __cxa_exception *h = globals->caughtExceptions;
+
+ // Rethrown foreign exceptions are removed from the stack immediately.
+ // We would have freed this exception via THIS_EXC above.
+ if (h == NULL)
+ return;
+
+ do
+ {
+ __cxa_exception *next;
+ _Unwind_Exception *eo = &h->unwindHeader;
+
+ if (__is_gxx_exception_class (eo->exception_class))
+ {
+ next = h->nextException;
+ free_any_cxa_exception (eo);
+ }
+ else
+ {
+ _Unwind_DeleteException (eo);
+ next = 0;
+ }
+
+ h = next;
+ }
+ while (--caught_count);
+
+ globals->caughtExceptions = h;
+ }
+}
diff --git a/libstdc++-v3/libsupc++/eh_type.cc b/libstdc++-v3/libsupc++/eh_type.cc
index bb8be0b752..245e0eaab9 100644
--- a/libstdc++-v3/libsupc++/eh_type.cc
+++ b/libstdc++-v3/libsupc++/eh_type.cc
@@ -1,5 +1,5 @@
// -*- C++ -*- Exception handling routines for catching.
-// Copyright (C) 2001, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2008, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -33,7 +33,7 @@ namespace __cxxabiv1
// Returns the type_info for the currently handled exception [15.3/8], or
// null if there is none.
extern "C"
-std::type_info *__cxa_current_exception_type () throw()
+std::type_info *__cxa_current_exception_type () _GLIBCXX_NOTHROW
{
__cxa_eh_globals *globals = __cxa_get_globals ();
__cxa_exception *header = globals->caughtExceptions;
diff --git a/libstdc++-v3/libsupc++/exception b/libstdc++-v3/libsupc++/exception
index db75ad115f..94a0bcbc66 100644
--- a/libstdc++-v3/libsupc++/exception
+++ b/libstdc++-v3/libsupc++/exception
@@ -37,6 +37,7 @@
#pragma GCC visibility push(default)
#include <bits/c++config.h>
+#include <bits/atomic_lockfree_defines.h>
extern "C++" {
@@ -61,12 +62,12 @@ namespace std
class exception
{
public:
- exception() throw() { }
- virtual ~exception() throw();
+ exception() _GLIBCXX_USE_NOEXCEPT { }
+ virtual ~exception() _GLIBCXX_USE_NOEXCEPT;
/** Returns a C-style character string describing the general cause
* of the current error. */
- virtual const char* what() const throw();
+ virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
};
/** If an %exception is thrown which is not listed in a function's
@@ -74,14 +75,14 @@ namespace std
class bad_exception : public exception
{
public:
- bad_exception() throw() { }
+ bad_exception() _GLIBCXX_USE_NOEXCEPT { }
// This declaration is not useless:
// http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
- virtual ~bad_exception() throw();
+ virtual ~bad_exception() _GLIBCXX_USE_NOEXCEPT;
// See comment in eh_exception.cc.
- virtual const char* what() const throw();
+ virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
};
/// If you write a replacement %terminate handler, it must be of this type.
@@ -91,14 +92,14 @@ namespace std
typedef void (*unexpected_handler) ();
/// Takes a new handler function as an argument, returns the old function.
- terminate_handler set_terminate(terminate_handler) throw();
+ terminate_handler set_terminate(terminate_handler) _GLIBCXX_USE_NOEXCEPT;
/** The runtime will call this function if %exception handling must be
* abandoned for any reason. It can also be called by the user. */
- void terminate() throw() __attribute__ ((__noreturn__));
+ void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
/// Takes a new handler function as an argument, returns the old function.
- unexpected_handler set_unexpected(unexpected_handler) throw();
+ unexpected_handler set_unexpected(unexpected_handler) _GLIBCXX_USE_NOEXCEPT;
/** The runtime will call this function if an %exception is thrown which
* violates the function's %exception specification. */
@@ -115,7 +116,7 @@ namespace std
* %exception can result in a call of @c terminate()
* (15.5.1).'
*/
- bool uncaught_exception() throw() __attribute__ ((__pure__));
+ bool uncaught_exception() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__));
// @} group exceptions
} // namespace std
@@ -149,8 +150,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
#pragma GCC visibility pop
-#if (defined(__GXX_EXPERIMENTAL_CXX0X__) \
- && defined(_GLIBCXX_ATOMIC_BUILTINS_4))
+#if defined(__GXX_EXPERIMENTAL_CXX0X__) && (ATOMIC_INT_LOCK_FREE > 1)
#include <bits/exception_ptr.h>
#include <bits/nested_exception.h>
#endif
diff --git a/libstdc++-v3/libsupc++/exception_ptr.h b/libstdc++-v3/libsupc++/exception_ptr.h
index 26117cd5d0..d9f8cc44a5 100644
--- a/libstdc++-v3/libsupc++/exception_ptr.h
+++ b/libstdc++-v3/libsupc++/exception_ptr.h
@@ -36,7 +36,7 @@
#include <bits/c++config.h>
#include <bits/exception_defines.h>
-#if !defined(_GLIBCXX_ATOMIC_BUILTINS_4)
+#if ATOMIC_INT_LOCK_FREE < 2
# error This platform does not support exception propagation.
#endif
@@ -44,6 +44,8 @@ extern "C++" {
namespace std
{
+ class type_info;
+
/**
* @addtogroup exceptions
* @{
@@ -59,7 +61,7 @@ namespace std
* is none, or the currently handled exception is foreign, return the null
* value.
*/
- exception_ptr current_exception() throw();
+ exception_ptr current_exception() _GLIBCXX_USE_NOEXCEPT;
/// Throw the object pointed to by the exception_ptr.
void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
@@ -74,58 +76,62 @@ namespace std
{
void* _M_exception_object;
- explicit exception_ptr(void* __e) throw();
+ explicit exception_ptr(void* __e) _GLIBCXX_USE_NOEXCEPT;
- void _M_addref() throw();
- void _M_release() throw();
+ void _M_addref() _GLIBCXX_USE_NOEXCEPT;
+ void _M_release() _GLIBCXX_USE_NOEXCEPT;
- void *_M_get() const throw() __attribute__ ((__pure__));
+ void *_M_get() const _GLIBCXX_NOEXCEPT __attribute__ ((__pure__));
- friend exception_ptr std::current_exception() throw();
+ friend exception_ptr std::current_exception() _GLIBCXX_USE_NOEXCEPT;
friend void std::rethrow_exception(exception_ptr);
public:
- exception_ptr() throw();
+ exception_ptr() _GLIBCXX_USE_NOEXCEPT;
- exception_ptr(const exception_ptr&) throw();
+ exception_ptr(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- exception_ptr(nullptr_t) throw()
+ exception_ptr(nullptr_t) noexcept
: _M_exception_object(0)
{ }
- exception_ptr(exception_ptr&& __o) throw()
+ exception_ptr(exception_ptr&& __o) noexcept
: _M_exception_object(__o._M_exception_object)
{ __o._M_exception_object = 0; }
-#else
+#endif
+
+#if !defined (__GXX_EXPERIMENTAL_CXX0X__) || defined (_GLIBCXX_EH_PTR_COMPAT)
typedef void (exception_ptr::*__safe_bool)();
// For construction from nullptr or 0.
- exception_ptr(__safe_bool) throw();
+ exception_ptr(__safe_bool) _GLIBCXX_USE_NOEXCEPT;
#endif
exception_ptr&
- operator=(const exception_ptr&) throw();
+ operator=(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
#ifdef __GXX_EXPERIMENTAL_CXX0X__
exception_ptr&
- operator=(exception_ptr&& __o) throw()
+ operator=(exception_ptr&& __o) noexcept
{
exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
return *this;
}
#endif
- ~exception_ptr() throw();
+ ~exception_ptr() _GLIBCXX_USE_NOEXCEPT;
void
- swap(exception_ptr&) throw();
+ swap(exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
#ifdef _GLIBCXX_EH_PTR_COMPAT
// Retained for compatibility with CXXABI_1.3.
- void _M_safe_bool_dummy() throw() __attribute__ ((__const__));
- bool operator!() const throw() __attribute__ ((__pure__));
- operator __safe_bool() const throw();
+ void _M_safe_bool_dummy() _GLIBCXX_USE_NOEXCEPT
+ __attribute__ ((__const__));
+ bool operator!() const _GLIBCXX_USE_NOEXCEPT
+ __attribute__ ((__pure__));
+ operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT;
#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -134,20 +140,21 @@ namespace std
#endif
friend bool
- operator==(const exception_ptr&, const exception_ptr&) throw()
- __attribute__ ((__pure__));
+ operator==(const exception_ptr&, const exception_ptr&)
+ _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__));
- const class type_info*
- __cxa_exception_type() const throw() __attribute__ ((__pure__));
+ const class std::type_info*
+ __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT
+ __attribute__ ((__pure__));
};
bool
- operator==(const exception_ptr&, const exception_ptr&) throw()
- __attribute__ ((__pure__));
+ operator==(const exception_ptr&, const exception_ptr&)
+ _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__));
bool
- operator!=(const exception_ptr&, const exception_ptr&) throw()
- __attribute__ ((__pure__));
+ operator!=(const exception_ptr&, const exception_ptr&)
+ _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__));
inline void
swap(exception_ptr& __lhs, exception_ptr& __rhs)
@@ -159,7 +166,7 @@ namespace std
/// Obtain an exception_ptr pointing to a copy of the supplied object.
template<typename _Ex>
exception_ptr
- copy_exception(_Ex __ex) throw()
+ copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
{
__try
{
@@ -178,7 +185,7 @@ namespace std
/// Obtain an exception_ptr pointing to a copy of the supplied object.
template<typename _Ex>
exception_ptr
- make_exception_ptr(_Ex __ex) throw()
+ make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
{ return std::copy_exception<_Ex>(__ex); }
// @} group exceptions
diff --git a/libstdc++-v3/libsupc++/guard.cc b/libstdc++-v3/libsupc++/guard.cc
index 6e3d415cd1..f8550c03fa 100644
--- a/libstdc++-v3/libsupc++/guard.cc
+++ b/libstdc++-v3/libsupc++/guard.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010, 2011
+// Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of GCC.
@@ -32,9 +32,10 @@
#include <ext/atomicity.h>
#include <ext/concurrence.h>
#if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \
- && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+ && (ATOMIC_INT_LOCK_FREE > 1) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
# include <climits>
# include <syscall.h>
+# include <unistd.h>
# define _GLIBCXX_USE_FUTEX
# define _GLIBCXX_FUTEX_WAIT 0
# define _GLIBCXX_FUTEX_WAKE 1
@@ -85,7 +86,7 @@ namespace
# if defined(__GTHREAD_HAS_COND) && !defined(_GLIBCXX_USE_FUTEX)
namespace
{
- // A single conditional variable controlling all static initializations.
+ // A single condition variable controlling all static initializations.
static __gnu_cxx::__cond* static_cond;
// using a fake type to avoid initializing a static class.
@@ -136,7 +137,7 @@ __set_and_release (__cxxabiv1::__guard *g)
#endif /* __GTHREADS */
//
-// Here are C++ run-time routines for guarded initiailization of static
+// Here are C++ run-time routines for guarded initialization of static
// variables. There are 4 scenarios under which these routines are called:
//
// 1. Threads not supported (__GTHREADS not defined)
@@ -147,24 +148,24 @@ __set_and_release (__cxxabiv1::__guard *g)
//
// The old code supported scenarios 1-3 but was broken since it used a global
// mutex for all threads and had the mutex locked during the whole duration of
-// initlization of a guarded static variable. The following created a dead-lock
-// with the old code.
+// initialization of a guarded static variable. The following created a
+// dead-lock with the old code.
//
// Thread 1 acquires the global mutex.
// Thread 1 starts initializing static variable.
// Thread 1 creates thread 2 during initialization.
-// Thread 2 attempts to acuqire mutex to initialize another variable.
+// Thread 2 attempts to acquire mutex to initialize another variable.
// Thread 2 blocks since thread 1 is locking the mutex.
// Thread 1 waits for result from thread 2 and also blocks. A deadlock.
//
-// The new code here can handle this situation and thus is more robust. Howere,
-// we need to use the POSIX thread conditional variable, which is not supported
+// The new code here can handle this situation and thus is more robust. However,
+// we need to use the POSIX thread condition variable, which is not supported
// in all platforms, notably older versions of Microsoft Windows. The gthr*.h
// headers define a symbol __GTHREAD_HAS_COND for platforms that support POSIX
-// like conditional variables. For platforms that do not support conditional
+// like condition variables. For platforms that do not support condition
// variables, we need to fall back to the old code.
-// If _GLIBCXX_USE_FUTEX, no global mutex or conditional variable is used,
+// If _GLIBCXX_USE_FUTEX, no global mutex or condition variable is used,
// only atomic operations are used together with futex syscall.
// Valid values of the first integer in guard are:
// 0 No thread encountered the guarded init
@@ -211,7 +212,7 @@ namespace __cxxabiv1
#endif
}
- // acuire() is a helper function used to acquire guard if thread support is
+ // acquire() is a helper function used to acquire guard if thread support is
// not compiled in or is compiled in but not enabled at run-time.
static int
acquire(__guard *g)
@@ -238,7 +239,7 @@ namespace __cxxabiv1
return 0;
# ifdef _GLIBCXX_USE_FUTEX
- // If __sync_* and futex syscall are supported, don't use any global
+ // If __atomic_* and futex syscall are supported, don't use any global
// mutex.
if (__gthread_active_p ())
{
@@ -249,23 +250,45 @@ namespace __cxxabiv1
while (1)
{
- int old = __sync_val_compare_and_swap (gi, 0, pending_bit);
- if (old == 0)
- return 1; // This thread should do the initialization.
-
- if (old == guard_bit)
- return 0; // Already initialized.
-
- if (old == pending_bit)
+ int expected(0);
+ if (__atomic_compare_exchange_n(gi, &expected, pending_bit, false,
+ __ATOMIC_ACQ_REL,
+ __ATOMIC_ACQUIRE))
{
- int newv = old | waiting_bit;
- if (__sync_val_compare_and_swap (gi, old, newv) != old)
- continue;
-
- old = newv;
+ // This thread should do the initialization.
+ return 1;
+ }
+
+ if (expected == guard_bit)
+ {
+ // Already initialized.
+ return 0;
}
- syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAIT, old, 0);
+ if (expected == pending_bit)
+ {
+ // Use acquire here.
+ int newv = expected | waiting_bit;
+ if (!__atomic_compare_exchange_n(gi, &expected, newv, false,
+ __ATOMIC_ACQ_REL,
+ __ATOMIC_ACQUIRE))
+ {
+ if (expected == guard_bit)
+ {
+ // Make a thread that failed to set the
+ // waiting bit exit the function earlier,
+ // if it detects that another thread has
+ // successfully finished initialising.
+ return 0;
+ }
+ if (expected == 0)
+ continue;
+ }
+
+ expected = newv;
+ }
+
+ syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAIT, expected, 0);
}
}
# else
@@ -284,7 +307,7 @@ namespace __cxxabiv1
{
// The guarded static is currently being initialized by
// another thread, so we release mutex and wait for the
- // conditional variable. We will lock the mutex again after
+ // condition variable. We will lock the mutex again after
// this.
get_static_cond().wait_recursive(&get_static_mutex());
}
@@ -295,7 +318,7 @@ namespace __cxxabiv1
}
# else
// This provides compatibility with older systems not supporting
- // POSIX like conditional variables.
+ // POSIX like condition variables.
if (acquire(g))
{
mw.unlock = false;
@@ -315,13 +338,13 @@ namespace __cxxabiv1
void __cxa_guard_abort (__guard *g) throw ()
{
#ifdef _GLIBCXX_USE_FUTEX
- // If __sync_* and futex syscall are supported, don't use any global
+ // If __atomic_* and futex syscall are supported, don't use any global
// mutex.
if (__gthread_active_p ())
{
int *gi = (int *) (void *) g;
const int waiting_bit = _GLIBCXX_GUARD_WAITING_BIT;
- int old = __sync_lock_test_and_set (gi, 0);
+ int old = __atomic_exchange_n (gi, 0, __ATOMIC_ACQ_REL);
if ((old & waiting_bit) != 0)
syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAKE, INT_MAX);
@@ -335,7 +358,7 @@ namespace __cxxabiv1
set_init_in_progress_flag(g, 0);
// If we abort, we still need to wake up all other threads waiting for
- // the conditional variable.
+ // the condition variable.
get_static_cond().broadcast();
return;
}
@@ -344,7 +367,7 @@ namespace __cxxabiv1
set_init_in_progress_flag(g, 0);
#if defined(__GTHREADS) && !defined(__GTHREAD_HAS_COND)
// This provides compatibility with older systems not supporting POSIX like
- // conditional variables.
+ // condition variables.
if (__gthread_active_p ())
static_mutex->unlock();
#endif
@@ -354,14 +377,14 @@ namespace __cxxabiv1
void __cxa_guard_release (__guard *g) throw ()
{
#ifdef _GLIBCXX_USE_FUTEX
- // If __sync_* and futex syscall are supported, don't use any global
+ // If __atomic_* and futex syscall are supported, don't use any global
// mutex.
if (__gthread_active_p ())
{
int *gi = (int *) (void *) g;
const int guard_bit = _GLIBCXX_GUARD_BIT;
const int waiting_bit = _GLIBCXX_GUARD_WAITING_BIT;
- int old = __sync_lock_test_and_set (gi, guard_bit);
+ int old = __atomic_exchange_n (gi, guard_bit, __ATOMIC_ACQ_REL);
if ((old & waiting_bit) != 0)
syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAKE, INT_MAX);
@@ -385,7 +408,7 @@ namespace __cxxabiv1
#if defined(__GTHREADS) && !defined(__GTHREAD_HAS_COND)
// This provides compatibility with older systems not supporting POSIX like
- // conditional variables.
+ // condition variables.
if (__gthread_active_p())
static_mutex->unlock();
#endif
diff --git a/libstdc++-v3/libsupc++/initializer_list b/libstdc++-v3/libsupc++/initializer_list
index 1048d44de0..481e5d1414 100644
--- a/libstdc++-v3/libsupc++/initializer_list
+++ b/libstdc++-v3/libsupc++/initializer_list
@@ -1,6 +1,6 @@
// std::initializer_list support -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -32,7 +32,9 @@
#pragma GCC system_header
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/c++0x_warning.h>
+#else // C++0x
#pragma GCC visibility push(default)
@@ -61,42 +63,45 @@ namespace std
: _M_array(__a), _M_len(__l) { }
public:
- constexpr initializer_list() : _M_array(0), _M_len(0) { }
+ constexpr initializer_list() noexcept
+ : _M_array(0), _M_len(0) { }
// Number of elements.
constexpr size_type
- size() { return _M_len; }
+ size() const noexcept { return _M_len; }
// First element.
constexpr const_iterator
- begin() { return _M_array; }
+ begin() const noexcept { return _M_array; }
// One past the last element.
constexpr const_iterator
- end() { return begin() + size(); }
- };
+ end() const noexcept { return begin() + size(); }
+ };
/**
* @brief Return an iterator pointing to the first element of
* the initilizer_list.
- * @param il Initializer list.
+ * @param __ils Initializer list.
*/
template<class _Tp>
constexpr const _Tp*
- begin(initializer_list<_Tp> __ils)
+ begin(initializer_list<_Tp> __ils) noexcept
{ return __ils.begin(); }
/**
* @brief Return an iterator pointing to one past the last element
* of the initilizer_list.
- * @param il Initializer list.
+ * @param __ils Initializer list.
*/
template<class _Tp>
constexpr const _Tp*
- end(initializer_list<_Tp> __ils)
+ end(initializer_list<_Tp> __ils) noexcept
{ return __ils.end(); }
}
#pragma GCC visibility pop
-#endif // C++0x
+
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
#endif // _INITIALIZER_LIST
diff --git a/libstdc++-v3/libsupc++/nested_exception.cc b/libstdc++-v3/libsupc++/nested_exception.cc
index ecbc4c8115..ec56369393 100644
--- a/libstdc++-v3/libsupc++/nested_exception.cc
+++ b/libstdc++-v3/libsupc++/nested_exception.cc
@@ -25,7 +25,7 @@
namespace std
{
-#ifdef _GLIBCXX_ATOMIC_BUILTINS_4
- nested_exception::~nested_exception() = default;
+#if ATOMIC_INT_LOCK_FREE > 1
+ nested_exception::~nested_exception() noexcept = default;
#endif
} // namespace std
diff --git a/libstdc++-v3/libsupc++/nested_exception.h b/libstdc++-v3/libsupc++/nested_exception.h
index d4804bbedc..d88f021c5c 100644
--- a/libstdc++-v3/libsupc++/nested_exception.h
+++ b/libstdc++-v3/libsupc++/nested_exception.h
@@ -38,7 +38,7 @@
#include <bits/c++config.h>
-#if !defined(_GLIBCXX_ATOMIC_BUILTINS_4)
+#if ATOMIC_INT_LOCK_FREE < 2
# error This platform does not support exception propagation.
#endif
@@ -57,13 +57,13 @@ namespace std
exception_ptr _M_ptr;
public:
- nested_exception() throw() : _M_ptr(current_exception()) { }
+ nested_exception() noexcept : _M_ptr(current_exception()) { }
nested_exception(const nested_exception&) = default;
nested_exception& operator=(const nested_exception&) = default;
- virtual ~nested_exception();
+ virtual ~nested_exception() noexcept;
void
rethrow_nested() const __attribute__ ((__noreturn__))
diff --git a/libstdc++-v3/libsupc++/new b/libstdc++-v3/libsupc++/new
index 80ee3ba0fd..1c258002e6 100644
--- a/libstdc++-v3/libsupc++/new
+++ b/libstdc++-v3/libsupc++/new
@@ -1,7 +1,7 @@
// The -*- C++ -*- dynamic memory management header.
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-// 2003, 2004, 2005, 2006, 2007, 2009, 2010
+// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
// Free Software Foundation
// This file is part of GCC.
@@ -90,22 +90,32 @@ namespace std
* Placement new and delete signatures (take a memory address argument,
* does nothing) may not be replaced by a user's program.
*/
-void* operator new(std::size_t) throw (std::bad_alloc);
-void* operator new[](std::size_t) throw (std::bad_alloc);
-void operator delete(void*) throw();
-void operator delete[](void*) throw();
-void* operator new(std::size_t, const std::nothrow_t&) throw();
-void* operator new[](std::size_t, const std::nothrow_t&) throw();
-void operator delete(void*, const std::nothrow_t&) throw();
-void operator delete[](void*, const std::nothrow_t&) throw();
+void* operator new(std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ __attribute__((__externally_visible__));
+void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ __attribute__((__externally_visible__));
+void operator delete(void*) _GLIBCXX_USE_NOEXCEPT
+ __attribute__((__externally_visible__));
+void operator delete[](void*) _GLIBCXX_USE_NOEXCEPT
+ __attribute__((__externally_visible__));
+void* operator new(std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+ __attribute__((__externally_visible__));
+void* operator new[](std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+ __attribute__((__externally_visible__));
+void operator delete(void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+ __attribute__((__externally_visible__));
+void operator delete[](void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+ __attribute__((__externally_visible__));
// Default placement versions of operator new.
-inline void* operator new(std::size_t, void* __p) throw() { return __p; }
-inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
+inline void* operator new(std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT
+{ return __p; }
+inline void* operator new[](std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT
+{ return __p; }
// Default placement versions of operator delete.
-inline void operator delete (void*, void*) throw() { }
-inline void operator delete[](void*, void*) throw() { }
+inline void operator delete (void*, void*) _GLIBCXX_USE_NOEXCEPT { }
+inline void operator delete[](void*, void*) _GLIBCXX_USE_NOEXCEPT { }
//@}
} // extern "C++"
diff --git a/libstdc++-v3/libsupc++/new_op.cc b/libstdc++-v3/libsupc++/new_op.cc
index c61e941bcf..bb0199e969 100644
--- a/libstdc++-v3/libsupc++/new_op.cc
+++ b/libstdc++-v3/libsupc++/new_op.cc
@@ -42,7 +42,7 @@ extern "C" void *malloc (std::size_t);
extern new_handler __new_handler;
_GLIBCXX_WEAK_DEFINITION void *
-operator new (std::size_t sz) throw (std::bad_alloc)
+operator new (std::size_t sz) _GLIBCXX_THROW (std::bad_alloc)
{
void *p;
diff --git a/libstdc++-v3/libsupc++/new_opnt.cc b/libstdc++-v3/libsupc++/new_opnt.cc
index 1bcdead584..71600a63c3 100644
--- a/libstdc++-v3/libsupc++/new_opnt.cc
+++ b/libstdc++-v3/libsupc++/new_opnt.cc
@@ -34,7 +34,7 @@ extern "C" void *malloc (std::size_t);
extern new_handler __new_handler;
_GLIBCXX_WEAK_DEFINITION void *
-operator new (std::size_t sz, const std::nothrow_t&) throw()
+operator new (std::size_t sz, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
{
void *p;
diff --git a/libstdc++-v3/libsupc++/new_opv.cc b/libstdc++-v3/libsupc++/new_opv.cc
index b200e23c3e..4080bd25b4 100644
--- a/libstdc++-v3/libsupc++/new_opv.cc
+++ b/libstdc++-v3/libsupc++/new_opv.cc
@@ -1,6 +1,7 @@
// Boilerplate support routines for -*- C++ -*- dynamic memory management.
-// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009 Free Software Foundation
+// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of GCC.
//
@@ -27,7 +28,7 @@
#include "new"
_GLIBCXX_WEAK_DEFINITION void*
-operator new[] (std::size_t sz) throw (std::bad_alloc)
+operator new[] (std::size_t sz) _GLIBCXX_THROW (std::bad_alloc)
{
return ::operator new(sz);
}
diff --git a/libstdc++-v3/libsupc++/new_opvnt.cc b/libstdc++-v3/libsupc++/new_opvnt.cc
index da4ae80b69..0609e687ab 100644
--- a/libstdc++-v3/libsupc++/new_opvnt.cc
+++ b/libstdc++-v3/libsupc++/new_opvnt.cc
@@ -1,6 +1,7 @@
// Boilerplate support routines for -*- C++ -*- dynamic memory management.
-// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009 Free Software Foundation
+// Copyright (C) 1997, 1998, 1999, 2000, 2004, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of GCC.
//
@@ -27,7 +28,8 @@
#include "new"
_GLIBCXX_WEAK_DEFINITION void*
-operator new[] (std::size_t sz, const std::nothrow_t& nothrow) throw()
+operator new[] (std::size_t sz, const std::nothrow_t& nothrow)
+ _GLIBCXX_USE_NOEXCEPT
{
return ::operator new(sz, nothrow);
}
diff --git a/libstdc++-v3/libsupc++/pure.cc b/libstdc++-v3/libsupc++/pure.cc
index acf72327a4..4879e59de3 100644
--- a/libstdc++-v3/libsupc++/pure.cc
+++ b/libstdc++-v3/libsupc++/pure.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-// Copyright (C) 2000, 2001, 2009 Free Software Foundation
+// Copyright (C) 2000, 2001, 2009, 2011 Free Software Foundation
//
// This file is part of GCC.
//
@@ -49,3 +49,10 @@ __cxxabiv1::__cxa_pure_virtual (void)
writestr ("pure virtual method called\n");
std::terminate ();
}
+
+extern "C" void
+__cxxabiv1::__cxa_deleted_virtual (void)
+{
+ writestr ("deleted virtual method called\n");
+ std::terminate ();
+}
diff --git a/libstdc++-v3/libsupc++/tinfo.cc b/libstdc++-v3/libsupc++/tinfo.cc
index d939a3fdab..eba74dbdad 100644
--- a/libstdc++-v3/libsupc++/tinfo.cc
+++ b/libstdc++-v3/libsupc++/tinfo.cc
@@ -41,8 +41,11 @@ operator== (const std::type_info& arg) const
#if __GXX_MERGED_TYPEINFO_NAMES
return name () == arg.name ();
#else
+ /* The name() method will strip any leading '*' prefix. Therefore
+ take care to look at __name rather than name() when looking for
+ the "pointer" prefix. */
return (&arg == this)
- || (name ()[0] != '*' && (__builtin_strcmp (name (), arg.name ()) == 0));
+ || (__name[0] != '*' && (__builtin_strcmp (name (), arg.name ()) == 0));
#endif
}
diff --git a/libstdc++-v3/libsupc++/typeinfo b/libstdc++-v3/libsupc++/typeinfo
index 69311d69e9..f0382d64f7 100644
--- a/libstdc++-v3/libsupc++/typeinfo
+++ b/libstdc++-v3/libsupc++/typeinfo
@@ -1,6 +1,6 @@
// RTTI support for -*- C++ -*-
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
+// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012
// Free Software Foundation
//
// This file is part of GCC.
@@ -9,12 +9,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3, or (at your option)
// any later version.
-//
+//
// GCC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-//
+//
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
@@ -38,7 +38,6 @@
#include <bits/hash_bytes.h>
#endif
-
#pragma GCC visibility push(default)
extern "C++" {
@@ -80,7 +79,7 @@ namespace __cxxabiv1
#endif
#endif
-namespace std
+namespace std
{
/**
* @brief Part of RTTI.
@@ -88,7 +87,7 @@ namespace std
* The @c type_info class describes type information generated by
* an implementation.
*/
- class type_info
+ class type_info
{
public:
/** Destructor first. Being the first non-inline virtual function, this
@@ -140,7 +139,7 @@ namespace std
{ return !operator==(__arg); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- size_t hash_code() const throw()
+ size_t hash_code() const noexcept
{
# if !__GXX_MERGED_TYPEINFO_NAMES
return _Hash_bytes(name(), __builtin_strlen(name()),
@@ -172,9 +171,9 @@ namespace std
protected:
const char *__name;
-
+
explicit type_info(const char *__n): __name(__n) { }
-
+
private:
/// Assigning type_info is not supported.
type_info& operator=(const type_info&);
@@ -187,38 +186,39 @@ namespace std
*
* If you attempt an invalid @c dynamic_cast expression, an instance of
* this class (or something derived from this class) is thrown. */
- class bad_cast : public exception
+ class bad_cast : public exception
{
public:
- bad_cast() throw() { }
+ bad_cast() _GLIBCXX_USE_NOEXCEPT { }
// This declaration is not useless:
// http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
- virtual ~bad_cast() throw();
+ virtual ~bad_cast() _GLIBCXX_USE_NOEXCEPT;
// See comment in eh_exception.cc.
- virtual const char* what() const throw();
+ virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
};
-
- /**
+
+ /**
* @brief Thrown when a NULL pointer in a @c typeid expression is used.
* @ingroup exceptions
*/
- class bad_typeid : public exception
+ class bad_typeid : public exception
{
public:
- bad_typeid () throw() { }
+ bad_typeid () _GLIBCXX_USE_NOEXCEPT { }
// This declaration is not useless:
// http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
- virtual ~bad_typeid() throw();
+ virtual ~bad_typeid() _GLIBCXX_USE_NOEXCEPT;
// See comment in eh_exception.cc.
- virtual const char* what() const throw();
+ virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
};
} // namespace std
+} // extern "C++"
+
#pragma GCC visibility pop
-} // extern "C++"
#endif
diff --git a/libstdc++-v3/libsupc++/unwind-cxx.h b/libstdc++-v3/libsupc++/unwind-cxx.h
index e62ea7c38b..b0cdeae115 100644
--- a/libstdc++-v3/libsupc++/unwind-cxx.h
+++ b/libstdc++-v3/libsupc++/unwind-cxx.h
@@ -1,6 +1,6 @@
// -*- C++ -*- Exception handling and frame unwind runtime interface routines.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+// 2011 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -36,6 +36,7 @@
#include <cstddef>
#include "unwind.h"
#include <bits/atomic_word.h>
+#include <cxxabi.h>
#pragma GCC visibility push(default)
@@ -50,7 +51,7 @@ struct __cxa_exception
{
// Manage the exception object itself.
std::type_info *exceptionType;
- void (*exceptionDestructor)(void *);
+ void (_GLIBCXX_CDTOR_CALLABI *exceptionDestructor)(void *);
// The C++ standard has entertaining rules wrt calling set_terminate
// and set_unexpected in the middle of the exception cleanup process.
@@ -143,47 +144,6 @@ struct __cxa_eh_globals
#endif
};
-
-// The __cxa_eh_globals for the current thread can be obtained by using
-// either of the following functions. The "fast" version assumes at least
-// one prior call of __cxa_get_globals has been made from the current
-// thread, so no initialization is necessary.
-extern "C" __cxa_eh_globals *__cxa_get_globals () throw()
- __attribute__ ((__const__));
-extern "C" __cxa_eh_globals *__cxa_get_globals_fast () throw()
- __attribute__ ((__const__));
-
-// Allocate memory for the primary exception plus the thrown object.
-extern "C" void *__cxa_allocate_exception(std::size_t thrown_size) throw();
-
-// Free the space allocated for the primary exception.
-extern "C" void __cxa_free_exception(void *thrown_exception) throw();
-
-// Allocate memory for a dependent exception.
-extern "C" __cxa_dependent_exception*
-__cxa_allocate_dependent_exception() throw();
-
-// Free the space allocated for the dependent exception.
-extern "C" void
-__cxa_free_dependent_exception(__cxa_dependent_exception *ex) throw();
-
-// Throw the exception.
-extern "C" void __cxa_throw (void *thrown_exception,
- std::type_info *tinfo,
- void (*dest) (void *))
- __attribute__((__noreturn__));
-
-// Used to implement exception handlers.
-extern "C" void *__cxa_get_exception_ptr (void *) throw()
- __attribute__ ((__pure__));
-extern "C" void *__cxa_begin_catch (void *) throw();
-extern "C" void __cxa_end_catch ();
-extern "C" void __cxa_rethrow () __attribute__((__noreturn__));
-
-// These facilitate code generation for recurring situations.
-extern "C" void __cxa_bad_cast () __attribute__((__noreturn__));
-extern "C" void __cxa_bad_typeid () __attribute__((__noreturn__));
-
// @@@ These are not directly specified by the IA-64 C++ ABI.
// Handles re-checking the exception specification if unexpectedHandler
@@ -207,6 +167,9 @@ extern "C" bool __cxa_begin_cleanup (_Unwind_Exception*);
extern "C" void __cxa_end_cleanup (void);
#endif
+// Handles cleanup from transactional memory restart.
+extern "C" void __cxa_tm_cleanup (void *, void *, unsigned int) throw();
+
// Invokes given handler, dying appropriately if the user handler was
// so inconsiderate as to return.
extern void __terminate(std::terminate_handler) throw ()
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
index f552c6bf96..a307650584 100644
--- a/libstdc++-v3/po/Makefile.in
+++ b/libstdc++-v3/po/Makefile.in
@@ -107,7 +107,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -135,7 +134,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -163,7 +161,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -190,6 +187,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -209,10 +207,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -240,6 +240,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -252,6 +253,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -262,14 +264,16 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
diff --git a/libstdc++-v3/python/Makefile.am b/libstdc++-v3/python/Makefile.am
index 457e45ba46..3626d7a1ed 100644
--- a/libstdc++-v3/python/Makefile.am
+++ b/libstdc++-v3/python/Makefile.am
@@ -1,6 +1,6 @@
## Makefile for the python subdirectory of the GNU C++ Standard library.
##
-## Copyright (C) 2009 Free Software Foundation, Inc.
+## Copyright (C) 2009, 2012 Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
## Process this file with automake to produce Makefile.in.
@@ -8,23 +8,26 @@
## This file is part of the GNU ISO C++ Library. This library is free
## software; you can redistribute it and/or modify it under the
## terms of the GNU General Public License as published by the
-## Free Software Foundation; either version 2, or (at your option)
+## Free Software Foundation; either version 3, or (at your option)
## any later version.
-
+##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
-
+##
## You should have received a copy of the GNU General Public License along
-## with this library; see the file COPYING. If not, write to the Free
-## Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-## USA.
+## with this library; see the file COPYING3. If not see
+## <http://www.gnu.org/licenses/>.
include $(top_srcdir)/fragment.am
## Where to install the module code.
+if ENABLE_PYTHONDIR
+pythondir = $(prefix)/$(python_mod_dir)
+else
pythondir = $(datadir)/gcc-$(gcc_version)/python
+endif
all-local: gdb.py
diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in
index b8ea31a8e0..249d56f5e5 100644
--- a/libstdc++-v3/python/Makefile.in
+++ b/libstdc++-v3/python/Makefile.in
@@ -131,7 +131,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -159,7 +158,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -187,7 +185,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -214,6 +211,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -233,10 +231,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -264,6 +264,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -276,6 +277,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -286,19 +288,22 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
-pythondir = $(datadir)/gcc-$(gcc_version)/python
+@ENABLE_PYTHONDIR_FALSE@pythondir = $(datadir)/gcc-$(gcc_version)/python
+@ENABLE_PYTHONDIR_TRUE@pythondir = $(prefix)/$(python_mod_dir)
nobase_python_DATA = \
libstdcxx/v6/printers.py \
libstdcxx/v6/__init__.py \
diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py
index fb999bf525..76c54b1598 100644
--- a/libstdc++-v3/python/libstdcxx/v6/printers.py
+++ b/libstdc++-v3/python/libstdcxx/v6/printers.py
@@ -1,6 +1,6 @@
# Pretty-printers for libstc++.
-# Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,24 +19,55 @@ import gdb
import itertools
import re
-class StdPointerPrinter:
- "Print a smart pointer of some kind"
+# Try to use the new-style pretty-printing if available.
+_use_gdb_pp = True
+try:
+ import gdb.printing
+except ImportError:
+ _use_gdb_pp = False
+
+# Starting with the type ORIG, search for the member type NAME. This
+# handles searching upward through superclasses. This is needed to
+# work around http://sourceware.org/bugzilla/show_bug.cgi?id=13615.
+def find_type(orig, name):
+ typ = orig.strip_typedefs()
+ while True:
+ search = str(typ) + '::' + name
+ try:
+ return gdb.lookup_type(search)
+ except RuntimeError:
+ pass
+ # The type was not found, so try the superclass. We only need
+ # to check the first superclass, so we don't bother with
+ # anything fancier here.
+ field = typ.fields()[0]
+ if not field.is_base_class:
+ raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
+ typ = field.type
+
+class SharedPointerPrinter:
+ "Print a shared_ptr or weak_ptr"
def __init__ (self, typename, val):
self.typename = typename
self.val = val
def to_string (self):
- if self.val['_M_refcount']['_M_pi'] == 0:
- return '%s (empty) %s' % (self.typename, self.val['_M_ptr'])
- return '%s (count %d) %s' % (self.typename,
- self.val['_M_refcount']['_M_pi']['_M_use_count'],
- self.val['_M_ptr'])
+ state = 'empty'
+ refcounts = self.val['_M_refcount']['_M_pi']
+ if refcounts != 0:
+ usecount = refcounts['_M_use_count']
+ weakcount = refcounts['_M_weak_count']
+ if usecount == 0:
+ state = 'expired, weak %d' % weakcount
+ else:
+ state = 'count %d, weak %d' % (usecount, weakcount - 1)
+ return '%s (%s) %s' % (self.typename, state, self.val['_M_ptr'])
class UniquePointerPrinter:
"Print a unique_ptr"
- def __init__ (self, val):
+ def __init__ (self, typename, val):
self.val = val
def to_string (self):
@@ -69,15 +100,8 @@ class StdListPrinter:
self.val = val
def children(self):
- itype = self.val.type.template_argument(0)
- # If the inferior program is compiled with -D_GLIBCXX_DEBUG
- # some of the internal implementation details change.
- if self.typename == "std::list":
- nodetype = gdb.lookup_type('std::_List_node<%s>' % itype).pointer()
- elif self.typename == "std::__debug::list":
- nodetype = gdb.lookup_type('std::__norm::_List_node<%s>' % itype).pointer()
- else:
- raise ValueError, "Cannot cast list node for list printer."
+ nodetype = find_type(self.val.type, '_Node')
+ nodetype = nodetype.strip_typedefs().pointer()
return self._iterator(nodetype, self.val['_M_impl']['_M_node'])
def to_string(self):
@@ -93,15 +117,8 @@ class StdListIteratorPrinter:
self.typename = typename
def to_string(self):
- itype = self.val.type.template_argument(0)
- # If the inferior program is compiled with -D_GLIBCXX_DEBUG
- # some of the internal implementation details change.
- if self.typename == "std::_List_iterator" or self.typename == "std::_List_const_iterator":
- nodetype = gdb.lookup_type('std::_List_node<%s>' % itype).pointer()
- elif self.typename == "std::__norm::_List_iterator" or self.typename == "std::__norm::_List_const_iterator":
- nodetype = gdb.lookup_type('std::__norm::_List_node<%s>' % itype).pointer()
- else:
- raise ValueError, "Cannot cast list node for list iterator printer."
+ nodetype = find_type(self.val.type, '_Node')
+ nodetype = nodetype.strip_typedefs().pointer()
return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
class StdSlistPrinter:
@@ -125,12 +142,12 @@ class StdSlistPrinter:
self.count = self.count + 1
return ('[%d]' % count, elt['_M_data'])
- def __init__(self, val):
+ def __init__(self, typename, val):
self.val = val
def children(self):
- itype = self.val.type.template_argument(0)
- nodetype = gdb.lookup_type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
+ nodetype = find_type(self.val.type, '_Node')
+ nodetype = nodetype.strip_typedefs().pointer()
return self._iterator(nodetype, self.val)
def to_string(self):
@@ -141,12 +158,12 @@ class StdSlistPrinter:
class StdSlistIteratorPrinter:
"Print __gnu_cxx::slist::iterator"
- def __init__(self, val):
+ def __init__(self, typename, val):
self.val = val
def to_string(self):
- itype = self.val.type.template_argument(0)
- nodetype = gdb.lookup_type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
+ nodetype = find_type(self.val.type, '_Node')
+ nodetype = nodetype.strip_typedefs().pointer()
return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
class StdVectorPrinter:
@@ -228,7 +245,7 @@ class StdVectorPrinter:
class StdVectorIteratorPrinter:
"Print std::vector::iterator"
- def __init__(self, val):
+ def __init__(self, typename, val):
self.val = val
def to_string(self):
@@ -244,11 +261,11 @@ class StdTuplePrinter:
# Set the base class as the initial head of the
# tuple.
nodes = self.head.type.fields ()
- if len (nodes) != 1:
+ if len (nodes) == 1:
+ # Set the actual head to the first pair.
+ self.head = self.head.cast (nodes[0].type)
+ elif len (nodes) != 0:
raise ValueError, "Top of tuple tree does not consist of a single node."
-
- # Set the actual head to the first pair.
- self.head = self.head.cast (nodes[0].type)
self.count = 0
def __iter__ (self):
@@ -290,6 +307,8 @@ class StdTuplePrinter:
return self._iterator (self.val)
def to_string (self):
+ if len (self.val.type.fields ()) == 0:
+ return 'empty %s' % (self.typename)
return '%s containing' % (self.typename)
class StdStackOrQueuePrinter:
@@ -351,19 +370,18 @@ class RbtreeIterator:
class StdRbtreeIteratorPrinter:
"Print std::map::iterator"
- def __init__ (self, val):
+ def __init__ (self, typename, val):
self.val = val
def to_string (self):
- valuetype = self.val.type.template_argument(0)
- nodetype = gdb.lookup_type('std::_Rb_tree_node < %s >' % valuetype)
- nodetype = nodetype.pointer()
+ typename = str(self.val.type.strip_typedefs()) + '::_Link_type'
+ nodetype = gdb.lookup_type(typename).strip_typedefs()
return self.val.cast(nodetype).dereference()['_M_value_field']
class StdDebugIteratorPrinter:
"Print a debug enabled version of an iterator"
- def __init__ (self, val):
+ def __init__ (self, typename, val):
self.val = val
# Just strip away the encapsulating __gnu_debug::_Safe_iterator
@@ -406,11 +424,10 @@ class StdMapPrinter:
len (RbtreeIterator (self.val)))
def children (self):
- keytype = self.val.type.template_argument(0).const()
- valuetype = self.val.type.template_argument(1)
- nodetype = gdb.lookup_type('std::_Rb_tree_node< std::pair< %s, %s > >' % (keytype, valuetype))
- nodetype = nodetype.pointer()
- return self._iter (RbtreeIterator (self.val), nodetype)
+ rep_type = find_type(self.val.type, '_Rep_type')
+ node = find_type(rep_type, '_Link_type')
+ node = node.strip_typedefs()
+ return self._iter (RbtreeIterator (self.val), node)
def display_hint (self):
return 'map'
@@ -446,9 +463,10 @@ class StdSetPrinter:
len (RbtreeIterator (self.val)))
def children (self):
- keytype = self.val.type.template_argument(0)
- nodetype = gdb.lookup_type('std::_Rb_tree_node< %s >' % keytype).pointer()
- return self._iter (RbtreeIterator (self.val), nodetype)
+ rep_type = find_type(self.val.type, '_Rep_type')
+ node = find_type(rep_type, '_Link_type')
+ node = node.strip_typedefs()
+ return self._iter (RbtreeIterator (self.val), node)
class StdBitsetPrinter:
"Print a std::bitset"
@@ -557,7 +575,7 @@ class StdDequePrinter:
class StdDequeIteratorPrinter:
"Print std::deque::iterator"
- def __init__(self, val):
+ def __init__(self, typename, val):
self.val = val
def to_string(self):
@@ -566,7 +584,7 @@ class StdDequeIteratorPrinter:
class StdStringPrinter:
"Print a std::basic_string of some kind"
- def __init__(self, val):
+ def __init__(self, typename, val):
self.val = val
def to_string(self):
@@ -592,38 +610,18 @@ class StdStringPrinter:
class Tr1HashtableIterator:
def __init__ (self, hash):
- self.count = 0
- self.n_buckets = hash['_M_element_count']
- if self.n_buckets == 0:
- self.node = False
- else:
- self.bucket = hash['_M_buckets']
- self.node = self.bucket[0]
- self.update ()
+ self.node = hash['_M_before_begin']['_M_nxt']
+ self.node_type = find_type(hash.type, '_Node').pointer()
def __iter__ (self):
return self
- def update (self):
- # If we advanced off the end of the chain, move to the next
- # bucket.
- while self.node == 0:
- self.bucket = self.bucket + 1
- self.node = self.bucket[0]
-
- # If we advanced off the end of the bucket array, then
- # we're done.
- if self.count == self.n_buckets:
- self.node = False
- else:
- self.count = self.count + 1
-
def next (self):
- if not self.node:
+ if self.node == 0:
raise StopIteration
- result = self.node.dereference()['_M_v']
- self.node = self.node.dereference()['_M_next']
- self.update ()
+ node = self.node.cast(self.node_type)
+ result = node.dereference()['_M_v']
+ self.node = node.dereference()['_M_nxt']
return result
class Tr1UnorderedSetPrinter:
@@ -678,125 +676,253 @@ class Tr1UnorderedMapPrinter:
def display_hint (self):
return 'map'
-def register_libstdcxx_printers (obj):
- "Register libstdc++ pretty-printers with objfile Obj."
+class StdForwardListPrinter:
+ "Print a std::forward_list"
- if obj == None:
- obj = gdb
+ class _iterator:
+ def __init__(self, nodetype, head):
+ self.nodetype = nodetype
+ self.base = head['_M_next']
+ self.count = 0
- obj.pretty_printers.append (lookup_function)
+ def __iter__(self):
+ return self
-def lookup_function (val):
- "Look-up and return a pretty-printer that can print val."
+ def next(self):
+ if self.base == 0:
+ raise StopIteration
+ elt = self.base.cast(self.nodetype).dereference()
+ self.base = elt['_M_next']
+ count = self.count
+ self.count = self.count + 1
+ return ('[%d]' % count, elt['_M_value'])
+
+ def __init__(self, typename, val):
+ self.val = val
+ self.typename = typename
+
+ def children(self):
+ nodetype = find_type(self.val.type, '_Node')
+ nodetype = nodetype.strip_typedefs().pointer()
+ return self._iterator(nodetype, self.val['_M_impl']['_M_head'])
+
+ def to_string(self):
+ if self.val['_M_impl']['_M_head']['_M_next'] == 0:
+ return 'empty %s' % (self.typename)
+ return '%s' % (self.typename)
- # Get the type.
- type = val.type
- # If it points to a reference, get the reference.
- if type.code == gdb.TYPE_CODE_REF:
- type = type.target ()
+# A "regular expression" printer which conforms to the
+# "SubPrettyPrinter" protocol from gdb.printing.
+class RxPrinter(object):
+ def __init__(self, name, function):
+ super(RxPrinter, self).__init__()
+ self.name = name
+ self.function = function
+ self.enabled = True
+
+ def invoke(self, value):
+ if not self.enabled:
+ return None
+ return self.function(self.name, value)
+
+# A pretty-printer that conforms to the "PrettyPrinter" protocol from
+# gdb.printing. It can also be used directly as an old-style printer.
+class Printer(object):
+ def __init__(self, name):
+ super(Printer, self).__init__()
+ self.name = name
+ self.subprinters = []
+ self.lookup = {}
+ self.enabled = True
+ self.compiled_rx = re.compile('^([a-zA-Z0-9_:]+)<.*>$')
+
+ def add(self, name, function):
+ # A small sanity check.
+ # FIXME
+ if not self.compiled_rx.match(name + '<>'):
+ raise ValueError, 'libstdc++ programming error: "%s" does not match' % name
+ printer = RxPrinter(name, function)
+ self.subprinters.append(printer)
+ self.lookup[name] = printer
+
+ # Add a name using _GLIBCXX_BEGIN_NAMESPACE_VERSION.
+ def add_version(self, base, name, function):
+ self.add(base + name, function)
+ self.add(base + '__7::' + name, function)
+
+ # Add a name using _GLIBCXX_BEGIN_NAMESPACE_CONTAINER.
+ def add_container(self, base, name, function):
+ self.add_version(base, name, function)
+ self.add_version(base + '__cxx1998::', name, function)
- # Get the unqualified type, stripped of typedefs.
- type = type.unqualified ().strip_typedefs ()
+ @staticmethod
+ def get_basic_type(type):
+ # If it points to a reference, get the reference.
+ if type.code == gdb.TYPE_CODE_REF:
+ type = type.target ()
+
+ # Get the unqualified type, stripped of typedefs.
+ type = type.unqualified ().strip_typedefs ()
+
+ return type.tag
+
+ def __call__(self, val):
+ typename = self.get_basic_type(val.type)
+ if not typename:
+ return None
+
+ # All the types we match are template types, so we can use a
+ # dictionary.
+ match = self.compiled_rx.match(typename)
+ if not match:
+ return None
+
+ basename = match.group(1)
+ if basename in self.lookup:
+ return self.lookup[basename].invoke(val)
- # Get the type name.
- typename = type.tag
- if typename == None:
+ # Cannot find a pretty printer. Return None.
return None
- # Iterate over local dictionary of types to determine
- # if a printer is registered for that type. Return an
- # instantiation of the printer if found.
- for function in pretty_printers_dict:
- if function.search (typename):
- return pretty_printers_dict[function] (val)
-
- # Cannot find a pretty printer. Return None.
- return None
+libstdcxx_printer = None
+
+def register_libstdcxx_printers (obj):
+ "Register libstdc++ pretty-printers with objfile Obj."
+
+ global _use_gdb_pp
+ global libstdcxx_printer
+
+ if _use_gdb_pp:
+ gdb.printing.register_pretty_printer(obj, libstdcxx_printer)
+ else:
+ if obj is None:
+ obj = gdb
+ obj.pretty_printers.append(libstdcxx_printer)
def build_libstdcxx_dictionary ():
+ global libstdcxx_printer
+
+ libstdcxx_printer = Printer("libstdc++-v6")
+
+ # For _GLIBCXX_BEGIN_NAMESPACE_VERSION.
+ vers = '(__7::)?'
+ # For _GLIBCXX_BEGIN_NAMESPACE_CONTAINER.
+ container = '(__cxx1998::' + vers + ')?'
+
# libstdc++ objects requiring pretty-printing.
# In order from:
# http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01847.html
- pretty_printers_dict[re.compile('^std::basic_string<.*>$')] = lambda val: StdStringPrinter(val)
- pretty_printers_dict[re.compile('^std::bitset<.*>$')] = lambda val: StdBitsetPrinter("std::bitset", val)
- pretty_printers_dict[re.compile('^std::deque<.*>$')] = lambda val: StdDequePrinter("std::deque", val)
- pretty_printers_dict[re.compile('^std::list<.*>$')] = lambda val: StdListPrinter("std::list", val)
- pretty_printers_dict[re.compile('^std::map<.*>$')] = lambda val: StdMapPrinter("std::map", val)
- pretty_printers_dict[re.compile('^std::multimap<.*>$')] = lambda val: StdMapPrinter("std::multimap", val)
- pretty_printers_dict[re.compile('^std::multiset<.*>$')] = lambda val: StdSetPrinter("std::multiset", val)
- pretty_printers_dict[re.compile('^std::priority_queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::priority_queue", val)
- pretty_printers_dict[re.compile('^std::queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::queue", val)
- pretty_printers_dict[re.compile('^std::tuple<.*>$')] = lambda val: StdTuplePrinter("std::tuple", val)
- pretty_printers_dict[re.compile('^std::set<.*>$')] = lambda val: StdSetPrinter("std::set", val)
- pretty_printers_dict[re.compile('^std::stack<.*>$')] = lambda val: StdStackOrQueuePrinter("std::stack", val)
- pretty_printers_dict[re.compile('^std::unique_ptr<.*>$')] = UniquePointerPrinter
- pretty_printers_dict[re.compile('^std::vector<.*>$')] = lambda val: StdVectorPrinter("std::vector", val)
+ libstdcxx_printer.add_version('std::', 'basic_string', StdStringPrinter)
+ libstdcxx_printer.add_container('std::', 'bitset', StdBitsetPrinter)
+ libstdcxx_printer.add_container('std::', 'deque', StdDequePrinter)
+ libstdcxx_printer.add_container('std::', 'list', StdListPrinter)
+ libstdcxx_printer.add_container('std::', 'map', StdMapPrinter)
+ libstdcxx_printer.add_container('std::', 'multimap', StdMapPrinter)
+ libstdcxx_printer.add_container('std::', 'multiset', StdSetPrinter)
+ libstdcxx_printer.add_version('std::', 'priority_queue',
+ StdStackOrQueuePrinter)
+ libstdcxx_printer.add_version('std::', 'queue', StdStackOrQueuePrinter)
+ libstdcxx_printer.add_version('std::', 'tuple', StdTuplePrinter)
+ libstdcxx_printer.add_container('std::', 'set', StdSetPrinter)
+ libstdcxx_printer.add_version('std::', 'stack', StdStackOrQueuePrinter)
+ libstdcxx_printer.add_version('std::', 'unique_ptr', UniquePointerPrinter)
+ libstdcxx_printer.add_container('std::', 'vector', StdVectorPrinter)
# vector<bool>
# Printer registrations for classes compiled with -D_GLIBCXX_DEBUG.
- pretty_printers_dict[re.compile('^std::__debug::bitset<.*>$')] = lambda val: StdBitsetPrinter("std::__debug::bitset", val)
- pretty_printers_dict[re.compile('^std::__debug::deque<.*>$')] = lambda val: StdDequePrinter("std::__debug::deque", val)
- pretty_printers_dict[re.compile('^std::__debug::list<.*>$')] = lambda val: StdListPrinter("std::__debug::list", val)
- pretty_printers_dict[re.compile('^std::__debug::map<.*>$')] = lambda val: StdMapPrinter("std::__debug::map", val)
- pretty_printers_dict[re.compile('^std::__debug::multimap<.*>$')] = lambda val: StdMapPrinter("std::__debug::multimap", val)
- pretty_printers_dict[re.compile('^std::__debug::multiset<.*>$')] = lambda val: StdSetPrinter("std::__debug::multiset", val)
- pretty_printers_dict[re.compile('^std::__debug::priority_queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::__debug::priority_queue", val)
- pretty_printers_dict[re.compile('^std::__debug::queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::__debug::queue", val)
- pretty_printers_dict[re.compile('^std::__debug::set<.*>$')] = lambda val: StdSetPrinter("std::__debug::set", val)
- pretty_printers_dict[re.compile('^std::__debug::stack<.*>$')] = lambda val: StdStackOrQueuePrinter("std::__debug::stack", val)
- pretty_printers_dict[re.compile('^std::__debug::unique_ptr<.*>$')] = UniquePointerPrinter
- pretty_printers_dict[re.compile('^std::__debug::vector<.*>$')] = lambda val: StdVectorPrinter("std::__debug::vector", val)
+ libstdcxx_printer.add('std::__debug::bitset', StdBitsetPrinter)
+ libstdcxx_printer.add('std::__debug::deque', StdDequePrinter)
+ libstdcxx_printer.add('std::__debug::list', StdListPrinter)
+ libstdcxx_printer.add('std::__debug::map', StdMapPrinter)
+ libstdcxx_printer.add('std::__debug::multimap', StdMapPrinter)
+ libstdcxx_printer.add('std::__debug::multiset', StdSetPrinter)
+ libstdcxx_printer.add('std::__debug::priority_queue',
+ StdStackOrQueuePrinter)
+ libstdcxx_printer.add('std::__debug::queue', StdStackOrQueuePrinter)
+ libstdcxx_printer.add('std::__debug::set', StdSetPrinter)
+ libstdcxx_printer.add('std::__debug::stack', StdStackOrQueuePrinter)
+ libstdcxx_printer.add('std::__debug::unique_ptr', UniquePointerPrinter)
+ libstdcxx_printer.add('std::__debug::vector', StdVectorPrinter)
# These are the TR1 and C++0x printers.
# For array - the default GDB pretty-printer seems reasonable.
- pretty_printers_dict[re.compile('^std::shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::shared_ptr', val)
- pretty_printers_dict[re.compile('^std::weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::weak_ptr', val)
- pretty_printers_dict[re.compile('^std::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::unordered_map', val)
- pretty_printers_dict[re.compile('^std::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::unordered_set', val)
- pretty_printers_dict[re.compile('^std::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::unordered_multimap', val)
- pretty_printers_dict[re.compile('^std::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::unordered_multiset', val)
-
- pretty_printers_dict[re.compile('^std::tr1::shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::tr1::shared_ptr', val)
- pretty_printers_dict[re.compile('^std::tr1::weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::tr1::weak_ptr', val)
- pretty_printers_dict[re.compile('^std::tr1::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_map', val)
- pretty_printers_dict[re.compile('^std::tr1::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_set', val)
- pretty_printers_dict[re.compile('^std::tr1::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_multimap', val)
- pretty_printers_dict[re.compile('^std::tr1::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_multiset', val)
+ libstdcxx_printer.add_version('std::', 'shared_ptr', SharedPointerPrinter)
+ libstdcxx_printer.add_version('std::', 'weak_ptr', SharedPointerPrinter)
+ libstdcxx_printer.add_container('std::', 'unordered_map',
+ Tr1UnorderedMapPrinter)
+ libstdcxx_printer.add_container('std::', 'unordered_set',
+ Tr1UnorderedSetPrinter)
+ libstdcxx_printer.add_container('std::', 'unordered_multimap',
+ Tr1UnorderedMapPrinter)
+ libstdcxx_printer.add_container('std::', 'unordered_multiset',
+ Tr1UnorderedSetPrinter)
+ libstdcxx_printer.add_container('std::', 'forward_list',
+ StdForwardListPrinter)
+
+ libstdcxx_printer.add_version('std::tr1::', 'shared_ptr', SharedPointerPrinter)
+ libstdcxx_printer.add_version('std::tr1::', 'weak_ptr', SharedPointerPrinter)
+ libstdcxx_printer.add_version('std::tr1::', 'unordered_map',
+ Tr1UnorderedMapPrinter)
+ libstdcxx_printer.add_version('std::tr1::', 'unordered_set',
+ Tr1UnorderedSetPrinter)
+ libstdcxx_printer.add_version('std::tr1::', 'unordered_multimap',
+ Tr1UnorderedMapPrinter)
+ libstdcxx_printer.add_version('std::tr1::', 'unordered_multiset',
+ Tr1UnorderedSetPrinter)
# These are the C++0x printer registrations for -D_GLIBCXX_DEBUG cases.
# The tr1 namespace printers do not seem to have any debug
# equivalents, so do no register them.
- pretty_printers_dict[re.compile('^std::__debug::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::__debug::unordered_map', val)
- pretty_printers_dict[re.compile('^std::__debug::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::__debug::unordered_set', val)
- pretty_printers_dict[re.compile('^std::__debug::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::__debug::unordered_multimap', val)
- pretty_printers_dict[re.compile('^std::__debug::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::__debug:unordered_multiset', val)
+ libstdcxx_printer.add('std::__debug::unordered_map',
+ Tr1UnorderedMapPrinter)
+ libstdcxx_printer.add('std::__debug::unordered_set',
+ Tr1UnorderedSetPrinter)
+ libstdcxx_printer.add('std::__debug::unordered_multimap',
+ Tr1UnorderedMapPrinter)
+ libstdcxx_printer.add('std::__debug::unordered_multiset',
+ Tr1UnorderedSetPrinter)
+ libstdcxx_printer.add('std::__debug::forward_list',
+ StdForwardListPrinter)
# Extensions.
- pretty_printers_dict[re.compile('^__gnu_cxx::slist<.*>$')] = StdSlistPrinter
+ libstdcxx_printer.add_version('__gnu_cxx::', 'slist', StdSlistPrinter)
if True:
# These shouldn't be necessary, if GDB "print *i" worked.
# But it often doesn't, so here they are.
- pretty_printers_dict[re.compile('^std::_List_iterator<.*>$')] = lambda val: StdListIteratorPrinter("std::_List_iterator",val)
- pretty_printers_dict[re.compile('^std::_List_const_iterator<.*>$')] = lambda val: StdListIteratorPrinter("std::_List_const_iterator",val)
- pretty_printers_dict[re.compile('^std::_Rb_tree_iterator<.*>$')] = lambda val: StdRbtreeIteratorPrinter(val)
- pretty_printers_dict[re.compile('^std::_Rb_tree_const_iterator<.*>$')] = lambda val: StdRbtreeIteratorPrinter(val)
- pretty_printers_dict[re.compile('^std::_Deque_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
- pretty_printers_dict[re.compile('^std::_Deque_const_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
- pretty_printers_dict[re.compile('^__gnu_cxx::__normal_iterator<.*>$')] = lambda val: StdVectorIteratorPrinter(val)
- pretty_printers_dict[re.compile('^__gnu_cxx::_Slist_iterator<.*>$')] = lambda val: StdSlistIteratorPrinter(val)
-
- # Debug (compiled with -D_GLIBCXX_DEBUG) printer registrations.
- # The Rb_tree debug iterator when unwrapped from the encapsulating __gnu_debug::_Safe_iterator
- # does not have the __norm namespace. Just use the existing printer registration for that.
- pretty_printers_dict[re.compile('^__gnu_debug::_Safe_iterator<.*>$')] = lambda val: StdDebugIteratorPrinter(val)
- pretty_printers_dict[re.compile('^std::__norm::_List_iterator<.*>$')] = lambda val: StdListIteratorPrinter ("std::__norm::_List_iterator",val)
- pretty_printers_dict[re.compile('^std::__norm::_List_const_iterator<.*>$')] = lambda val: StdListIteratorPrinter ("std::__norm::_List_const_iterator",val)
- pretty_printers_dict[re.compile('^std::__norm::_Deque_const_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
- pretty_printers_dict[re.compile('^std::__norm::_Deque_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
-
-pretty_printers_dict = {}
+ libstdcxx_printer.add_container('std::', '_List_iterator',
+ StdListIteratorPrinter)
+ libstdcxx_printer.add_container('std::', '_List_const_iterator',
+ StdListIteratorPrinter)
+ libstdcxx_printer.add_version('std::', '_Rb_tree_iterator',
+ StdRbtreeIteratorPrinter)
+ libstdcxx_printer.add_version('std::', '_Rb_tree_const_iterator',
+ StdRbtreeIteratorPrinter)
+ libstdcxx_printer.add_container('std::', '_Deque_iterator',
+ StdDequeIteratorPrinter)
+ libstdcxx_printer.add_container('std::', '_Deque_const_iterator',
+ StdDequeIteratorPrinter)
+ libstdcxx_printer.add_version('__gnu_cxx::', '__normal_iterator',
+ StdVectorIteratorPrinter)
+ libstdcxx_printer.add_version('__gnu_cxx::', '_Slist_iterator',
+ StdSlistIteratorPrinter)
+
+ # Debug (compiled with -D_GLIBCXX_DEBUG) printer
+ # registrations. The Rb_tree debug iterator when unwrapped
+ # from the encapsulating __gnu_debug::_Safe_iterator does not
+ # have the __norm namespace. Just use the existing printer
+ # registration for that.
+ libstdcxx_printer.add('__gnu_debug::_Safe_iterator',
+ StdDebugIteratorPrinter)
+ libstdcxx_printer.add('std::__norm::_List_iterator',
+ StdListIteratorPrinter)
+ libstdcxx_printer.add('std::__norm::_List_const_iterator',
+ StdListIteratorPrinter)
+ libstdcxx_printer.add('std::__norm::_Deque_const_iterator',
+ StdDequeIteratorPrinter)
+ libstdcxx_printer.add('std::__norm::_Deque_iterator',
+ StdDequeIteratorPrinter)
build_libstdcxx_dictionary ()
diff --git a/libstdc++-v3/scripts/create_testsuite_files b/libstdc++-v3/scripts/create_testsuite_files
index f4a0bcd80e..a427eef2db 100755
--- a/libstdc++-v3/scripts/create_testsuite_files
+++ b/libstdc++-v3/scripts/create_testsuite_files
@@ -32,7 +32,7 @@ cd $srcdir
# This is the ugly version of "everything but the current directory". It's
# what has to happen when find(1) doesn't support -mindepth, or -xtype.
dlist=`echo [0-9][0-9]*`
-dlist="$dlist abi backward ext performance tr1 decimal"
+dlist="$dlist abi backward ext performance tr1 tr2 decimal"
find $dlist "(" -type f -o -type l ")" -name "*.cc" -print > $tmp.01
find $dlist "(" -type f -o -type l ")" -name "*.c" -print > $tmp.02
cat $tmp.01 $tmp.02 | sort > $tmp.1
diff --git a/libstdc++-v3/scripts/extract_symvers.in b/libstdc++-v3/scripts/extract_symvers.in
index a2ff3c40a4..99dd11152a 100755
--- a/libstdc++-v3/scripts/extract_symvers.in
+++ b/libstdc++-v3/scripts/extract_symvers.in
@@ -52,6 +52,9 @@ SunOS)
${readelf} ${lib} |\
sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
egrep -v ' (LOCAL|UND) ' |\
+ sed -e 's/ <processor specific>: / <processor_specific>:_/g' |\
+ sed -e 's/ <OS specific>: / <OS_specific>:_/g' |\
+ sed -e 's/ <unknown>: / <unknown>:_/g' |\
awk '{ if ($4 == "FUNC" || $4 == "NOTYPE")
printf "%s:%s\n", $4, $8;
else if ($4 == "OBJECT" || $4 == "TLS")
diff --git a/libstdc++-v3/scripts/extract_symvers.pl b/libstdc++-v3/scripts/extract_symvers.pl
index 2bac1cd564..5585abffb2 100644
--- a/libstdc++-v3/scripts/extract_symvers.pl
+++ b/libstdc++-v3/scripts/extract_symvers.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
-# Copyright (C) 2010 Free Software Foundation, Inc.
+# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
#
# This file is part of the GNU ISO C++ Library. This library is free
# software; you can redistribute it and/or modify it under the
@@ -108,6 +108,7 @@ while (<ELFDUMP>) {
die "unhandled symbol:\n$_" if ($bind !~ /^(GLOB|WEAK)/ or $oth !~ /[DP]/);
# Adapt to readelf type naming convention.
+ $type = "NOTYPE" if ($type eq "NOTY");
$type = "OBJECT" if ($type eq "OBJT");
# Use correct symbol type.
@@ -116,7 +117,7 @@ while (<ELFDUMP>) {
close ELFDUMP or die "elfdump error";
foreach $symbol (keys %type) {
- if ($type{$symbol} eq "FUNC") {
+ if ($type{$symbol} eq "FUNC" || $type{$symbol} eq "NOTYPE") {
push @lines, "$type{$symbol}:$symbol\@\@$version{$symbol}\n";
} elsif ($type{$symbol} eq "OBJECT" and $size{$symbol} == 0) {
push @lines, "$type{$symbol}:$size{$symbol}:$version{$symbol}\n";
diff --git a/libstdc++-v3/scripts/make_graph.py b/libstdc++-v3/scripts/make_graph.py
index 61e18be476..8daba6ecc6 100755
--- a/libstdc++-v3/scripts/make_graph.py
+++ b/libstdc++-v3/scripts/make_graph.py
@@ -3,9 +3,6 @@
import string
import sys
import re
-import os
-import platform
-import commands
from Numeric import *
from pychart import *
from xml.dom import minidom
@@ -14,22 +11,6 @@ class exception:
pass
-def comp_platform_info(compiler):
- ret = '<ul>\n'
- so = commands.getstatusoutput('cat /proc/cpuinfo | grep \'cpu MHz\'')
- if so[0] == 0:
- ret += '<li>CPU speed - %s</li>\n' % so[1]
- so = commands.getstatusoutput('cat /proc/meminfo | grep \'MemTotal\'')
- if so[0] == 0:
- ret += '<li>Memory - %s</li>\n' % so[1]
- ret += '<li>Platform - %s</li>\n' % platform.platform()
- so = commands.getstatusoutput(compiler + ' --version')
- if so[0] == 0:
- ret += '<li>Compiler - %s</li>\n' % so[1]
- ret += '</ul>\n'
- return ret
-
-
class res:
"""
A 'structure' representing the results of a test.
@@ -85,7 +66,7 @@ class res_getter:
label = string.strip(label)
return label
- def __parse_res_sets(self, f_name, cntnr_list):
+ def __parse_result_sets(self, f_name, cntnr_list):
tst_dat = minidom.parse(f_name)
x_label = self.__get_label(tst_dat, 'x_name')
y_label = self.__get_label(tst_dat, 'y_name')
@@ -112,7 +93,7 @@ class res_getter:
def get(self, res_dir, test_name):
cntnr_list = self.__test_to_container_res_sets[test_name]
f_name = res_dir + '/' + self.__test_to_f_names[test_name]
- parsed = self.__parse_res_sets(f_name, cntnr_list)
+ parsed = self.__parse_result_sets(f_name, cntnr_list)
x_label = parsed[0]
y_label = parsed[1]
cntnr_descs = parsed[2]
@@ -121,18 +102,18 @@ class res_getter:
return res(x_label, y_label, cntnr_list, cntnr_descs, res_sets)
-class png_maker:
+class image_maker:
"""
- This class creates a png file from a result set.
+ This class creates a svg file from a result set.
"""
class __style_chooser:
def __init__(self):
self.native_re = re.compile(r'n_(?:.*?)')
- self.native_tick_mark_0 = tick_mark.Circle(size = 4)
- self.native_tick_mark_1 = tick_mark.Square(size = 4)
- self.native_line_style_0 = line_style.T(color = color.black, width=2)
- self.native_line_style_1 = line_style.T(color = color.black, width=2)
+ self.native_tick_mark_0 = tick_mark.blackdtri
+ self.native_tick_mark_1 = tick_mark.blackdia
+ self.native_line_style_0 = line_style.gray50_dash1
+ self.native_line_style_1 = line_style.gray50_dash2
self.mask_re = re.compile(r'mask(?:.*?)')
self.mod_re = re.compile(r'mod(?:.*?)')
@@ -186,8 +167,8 @@ class png_maker:
sys.stderr.write(cntnr + '\n')
raise exception
- # mask / mod
- if cntnr.find('lc_1div8_1div') <> -1:
+ # mask / mod
+ if cntnr.find('lc_1div8_1div') <> -1:
if cntnr.find('mask') <> -1:
# mask
if self.lc_1div8_1div2_re.search(cntnr):
@@ -198,24 +179,24 @@ class png_maker:
if self.lc_1div8_1div1_re.search(cntnr):
if cntnr.find('nsth') <> -1:
tm = tick_mark.dia
- else:
+ else:
tm = tick_mark.circle3
- else:
- # mod
+ else:
+ # mod
if self.lc_1div8_1div2_re.search(cntnr):
if cntnr.find('nsth') <> -1:
tm = tick_mark.tri
else:
- tm = tick_mark.square
+ tm = tick_mark.square
if self.lc_1div8_1div1_re.search(cntnr):
if cntnr.find('nsth') <> -1:
- tm = tick_mark.dtri
- else:
- tm = tick_mark.star
+ tm = tick_mark.dtri
+ else:
+ tm = tick_mark.star
if self.mcolc_1div2_re.search(cntnr):
tm = tick_mark.circle3
-
+
return (tm, line_style.T(color = clr, width = 2))
@@ -227,350 +208,107 @@ class png_maker:
return self.__mmap_re.sub('\nmmap_\n', cntnr)
def make(self, res, of_name):
- theme.output_format = 'png'
- theme.output_file = of_name
+ print of_name
+
+ # theme settings
+ theme.debug_level = 3
+ theme.output_format = 'svg'
theme.scale_factor = 2
-# theme.default_font_size = 5
+ theme.default_line_width = 0.5
+ theme.default_font_size = 8
theme.use_color = 1
theme.reinitialize()
+
+ # canvas settings
+ f = file(of_name, "w")
+ can = canvas.init(f, "svg")
+
+ # axes
y_tick_interval = self.__get_y_tics(res)
- xaxis = axis.X(format = '/a90/hL%d',
+ xaxis = axis.X(format = "/6/i/a-90{}%d",
tic_interval = 200,
- label = res.x_label)
- yaxis = axis.Y(format = '%.2e',
- tic_interval = y_tick_interval,
- label = res.y_label)
+ label = res.x_label, label_offset = (0, -20))
+ yaxis = axis.Y(format = "/6/i/a0{}%.2e",
+ tic_interval = y_tick_interval, tic_label_offset = (-25, 0),
+ label = res.y_label, label_offset = (-15, 0))
+
+ # legend
legend_lines = len(res.cntnr_list)
- legend_vloc = 50 + (legend_lines * 10)
- ar = area.T(x_axis = xaxis, y_axis = yaxis,
- legend = legend.T(loc=(0,-legend_vloc),
- frame_line_style=None,
- inter_row_sep=2),
- size=(240,110))
+ legend_vloc = 80 + (legend_lines * 10)
+ legend_hloc = -0
+ lg = legend.T(loc=(legend_hloc,-legend_vloc),
+ frame_line_style = None, inter_row_sep = 2)
+
+ # plot datasets
+ ar = area.T(x_axis = xaxis, y_axis = yaxis, legend = lg, size = (240,110), x_range = (0, 2200))
plot_list = []
for cntnr in res.cntnr_list:
style = self.__sc.choose(cntnr)
- print cntnr
- pl = line_plot.T(label = self.__container_label_name(cntnr),
- data = res.res_sets[cntnr],
- tick_mark = style[0],
- line_style = style[1])
+ pl = line_plot.T(label = self.__container_label_name(cntnr),
+ data = res.res_sets[cntnr],
+ tick_mark = style[0],
+ line_style = style[1])
plot_list.append(pl)
+
for plot in plot_list:
ar.add_plot(plot)
- ar.draw()
+ # render image
+ ar.draw(can)
+ can.close()
- def __get_y_tics(self, res):
+
+ def __get_y_max_min(self, res):
mx = 0
+ nx = 0
for cntnr in res.cntnr_list:
m = max(d[1] for d in res.res_sets[cntnr])
mx = max(m, mx)
- return mx / 5
-
-
-
-def make_tt(s):
- return '<tt>' + s + '</tt>'
-
-def make_b(s):
- return '<b>' + s + '</b>'
-
-def make_ttb(s):
- return '<tt><b>' + s + '</b></tt>'
-
-def make_i(s):
- return '<i>' + s + '</i>'
-
-def make_pb_ds_class_href(c_name):
- return '<a href = "' + c_name + '.html">' + make_tt(c_name) + '</a>\n'
-
-def build_value_to_pb_ds_class_href(s_desc):
- value = s_desc.attributes['value'].value
- ret = make_pb_ds_class_href(value)
- return ret
-
-class hash_desc_to_html_builder:
- def build_specific_comb_hash_fn(self, s_desc):
- comb_hash_fn_desc = s_desc.getElementsByTagName('Comb_Hash_Fn')[0]
- ret = make_tt('Comb_Hash_Fn')
- ret = ret + ' = '
- ret = ret + build_value_to_pb_ds_class_href(comb_hash_fn_desc)
- return ret
-
- def __build_nom_denom(self, s_desc):
- nom_denom = s_desc.attributes['nom'].value + '/' + s_desc.attributes['denom'].value
- return make_i(nom_denom)
-
- def __build_lc_trigger_desc(self, s_desc):
- ret = build_value_to_pb_ds_class_href(s_desc)
- ret = ret + ' with ' + make_i('&alpha;<sub>min</sub>')
- ret = ret + ' = ' + self.__build_nom_denom(s_desc.getElementsByTagName('alpha_min')[0])
- ret = ret + ' and ' + make_i('&alpha;<sub>max</sub>')
- ret = ret + ' = ' + self.__build_nom_denom(s_desc.getElementsByTagName('alpha_max')[0])
- return ret
-
- def build_specific_resize_policy(self, s_desc):
- ret = make_tt('Resize_Policy')
- ret = ret + ' = '
- resize_policy_desc = s_desc.getElementsByTagName('Resize_Policy')[0]
- ret = ret + build_value_to_pb_ds_class_href(resize_policy_desc)
- ret = ret + ' with ' + make_tt('Size_Policy')
- ret = ret + ' = '
- size_policy_desc = resize_policy_desc.getElementsByTagName('Size_Policy')[0]
- ret = ret + build_value_to_pb_ds_class_href(size_policy_desc)
- ret = ret + ', and ' + make_tt('Trigger_Policy')
- ret = ret + ' = '
- trigger_policy_desc = resize_policy_desc.getElementsByTagName('Trigger_Policy')[0]
- if trigger_policy_desc.attributes['value'].value == 'hash_load_check_resize_trigger':
- ret = ret + self.__build_lc_trigger_desc(trigger_policy_desc)
- else:
- raise exception
- return ret
-
-
-class cc_hash_desc_to_html_builder:
- def __init__(self):
- self.__hash_builder = hash_desc_to_html_builder()
-
- def build(self, s_desc):
- ret = build_value_to_pb_ds_class_href(s_desc)
- ret = ret + 'with ' + self.__hash_builder.build_specific_comb_hash_fn(s_desc)
- ret = ret + ', and ' + self.__hash_builder.build_specific_resize_policy(s_desc)
- return ret
+ n = min(d[1] for d in res.res_sets[cntnr])
+ nx = min(n, nx)
+ return (mx, nx)
+ def __get_x_max_min(self, res):
+ mx = 0
+ nx = 0
+ for cntnr in res.cntnr_list:
+ m = max(d[0] for d in res.res_sets[cntnr])
+ mx = max(m, mx)
+ n = min(d[0] for d in res.res_sets[cntnr])
+ nx = min(n, nx)
+ return (mx, nx)
-class gp_hash_desc_to_html_builder:
- def __init__(self):
- self.__hash_builder = hash_desc_to_html_builder()
-
- def build(self, s_desc):
- ret = build_value_to_pb_ds_class_href(s_desc)
- ret = ret + ' with ' + self.__hash_builder.build_specific_comb_hash_fn(s_desc)
- ret = ret + ', ' + self.__hash_builder.build_specific_resize_policy(s_desc)
- ret = ret + ', and ' + make_tt('Probe_Fn')
- ret = ret + ' = '
- probe_fn = s_desc.getElementsByTagName('Probe_Fn')[0].attributes['value'].value
- ret = ret + make_pb_ds_class_href(probe_fn)
- return ret
-
-
-class basic_tree_like_desc_to_html_builder:
- def build_tag(self, s_desc):
- ret = make_tt('Tag')
- ret = ret + ' = '
- tag_desc = s_desc.getElementsByTagName('Tag')[0]
- ret = ret + build_value_to_pb_ds_class_href(tag_desc)
- return ret
-
- def build_node_update(self, s_desc):
- ret = make_tt('Node_Update')
- ret = ret + ' = '
- node_update_desc = s_desc.getElementsByTagName('Node_Update')[0]
- ret = ret + build_value_to_pb_ds_class_href(node_update_desc)
- return ret
-
-
-class basic_tree_desc_to_html_builder:
- def __init__(self):
- self.__tree_like_builder = basic_tree_like_desc_to_html_builder()
+ def __get_y_tics(self, res):
+ mx = 0
+ for cntnr in res.cntnr_list:
+ m = max(d[1] for d in res.res_sets[cntnr])
+ mx = max(m, mx)
+ return mx / 5
- def build(self, s_desc):
- ret = build_value_to_pb_ds_class_href(s_desc)
- ret = ret + ' with ' + self.__tree_like_builder.build_tag(s_desc)
- ret = ret + ', and ' + self.__tree_like_builder.build_node_update(s_desc)
- return ret
+def main(test_infos_f_name, res_dir, doc_dir):
+ xmls_dat = minidom.parse(test_infos_f_name)
+ for test in xmls_dat.getElementsByTagName('test'):
-class basic_trie_desc_to_html_builder:
- def __init__(self):
- self.__tree_like_builder = basic_tree_like_desc_to_html_builder()
-
- def build(self, s_desc):
- ret = build_value_to_pb_ds_class_href(s_desc)
- ret = ret + ' with ' + self.__tree_like_builder.build_tag(s_desc)
- ret = ret + ', and ' + self.__tree_like_builder.build_node_update(s_desc)
- return ret
-
-class lu_desc_to_html_builder:
- def build(self, s_desc):
- ret = build_value_to_pb_ds_class_href(s_desc)
- ret = ret + ' with ' + make_tt('Update_Policy')
- ret = ret + ' = '
- update_policy_desc = s_desc.getElementsByTagName('Update_Policy')[0]
- ret = ret + build_value_to_pb_ds_class_href(update_policy_desc)
- return ret
-
-
-class std_desc_to_html_builder:
- def build(self, s_desc):
- value = s_desc.attributes['value'].value
- return make_tt(value.replace('std_', 'std::'))
-
-
-class std_tr1_desc_to_html_builder:
- def build(self, s_desc):
- value = s_desc.attributes['value'].value
- ret = make_tt(value.replace('std_tr1_', 'std::tr1::'))
- ret = ret + ' with ' + make_tt('cache_hash_code')
- ret = ret + ' = '
- cache_hash_code = s_desc.getElementsByTagName('cache_hash_code')[0].attributes['value'].value
- ret = ret + make_ttb(cache_hash_code)
- return ret
-
-class gnucxx_desc_to_html_builder:
- def build(self, s_desc):
- value = s_desc.attributes['value'].value
- return make_tt(value.replace('__gnucxx_', '__gnucxx::'))
-
-class stdext_desc_to_html_builder:
- def build(self, s_desc):
- value = s_desc.attributes['value'].value
- return make_tt(value.replace('stdext_', 'stdext::'))
-
-class npq_desc_to_html_builder:
- def build(self, vector):
- if vector:
- under = make_tt('std::vector')
- else:
- under = make_tt('std::deque')
-
- return make_tt('std::priority_queue') + ' adapting ' + under
-
-class binary_heap_desc_to_html_builder:
- def build(self, s_desc):
- ret = make_pb_ds_class_href('priority_queue')
- ret = ret + ' with ' + make_tt('Tag')
- ret = ret + ' = ' + make_pb_ds_class_href('binary_heap_tag')
- return ret
-
-class thin_heap_desc_to_html_builder:
- def build(self, s_desc):
- ret = make_pb_ds_class_href('priority_queue')
- ret = ret + ' with ' + make_tt('Tag')
- ret = ret + ' = ' + make_pb_ds_class_href('thin_heap_tag')
- return ret
-
-class binomial_heap_desc_to_html_builder:
- def build(self, s_desc):
- ret = make_pb_ds_class_href('priority_queue')
- ret = ret + ' with ' + make_tt('Tag')
- ret = ret + ' = ' + make_pb_ds_class_href('binomial_heap_tag')
- return ret
-
-class rc_binomial_heap_desc_to_html_builder:
- def build(self, s_desc):
- ret = make_pb_ds_class_href('priority_queue')
- ret = ret + ' with ' + make_tt('Tag')
- ret = ret + ' = ' + make_pb_ds_class_href('rc_binomial_heap_tag')
- return ret
-
-class pairing_heap_desc_to_html_builder:
- def build(self, s_desc):
- ret = make_pb_ds_class_href('priority_queue')
- ret = ret + ' with ' + make_tt('Tag')
- ret = ret + ' = ' + make_pb_ds_class_href('pairing_heap_tag')
- return ret
-
-class legend_desc_builder:
- """
- Returns a string corresponding to a specific container type.
- """
- def __init__(self):
- self.__cc_hash_builder = cc_hash_desc_to_html_builder()
- self.__gp_hash_builder = gp_hash_desc_to_html_builder()
- self.__basic_tree_builder = basic_tree_desc_to_html_builder()
- self.__basic_trie_builder = basic_trie_desc_to_html_builder()
- self.__lu_builder = lu_desc_to_html_builder()
- self.__std_builder = std_desc_to_html_builder()
- self.__std_tr1_builder = std_tr1_desc_to_html_builder()
- self.__gnucxx_builder = gnucxx_desc_to_html_builder()
- self.__stdext_builder = stdext_desc_to_html_builder()
- self.__npq_builder = npq_desc_to_html_builder()
- self.__thin_heap_builder = thin_heap_desc_to_html_builder()
- self.__thin_heap_builder = thin_heap_desc_to_html_builder()
- self.__binary_heap_builder = binary_heap_desc_to_html_builder()
- self.__binomial_heap_builder = binomial_heap_desc_to_html_builder()
- self.__rc_binomial_heap_builder = rc_binomial_heap_desc_to_html_builder()
- self.__pairing_heap_builder = pairing_heap_desc_to_html_builder()
-
- def __build_specific(self, s_desc):
- type = s_desc.attributes['value'].value
-
- if type == 'thin_heap':
- return self.__thin_heap_builder.build(s_desc)
- if type == 'binary_heap':
- return self.__binary_heap_builder.build(s_desc)
- if type == 'binomial_heap':
- return self.__binomial_heap_builder.build(s_desc)
- if type == 'rc_binomial_heap':
- return self.__rc_binomial_heap_builder.build(s_desc)
- if type == 'pairing_heap':
- return self.__pairing_heap_builder.build(s_desc)
- if type == 'cc_hash_table':
- ret = self.__cc_hash_builder.build(s_desc)
- elif type == 'gp_hash_table':
- ret = self.__gp_hash_builder.build(s_desc)
- elif type == 'tree':
- ret = self.__basic_tree_builder.build(s_desc)
- elif type == 'trie':
- ret = self.__basic_trie_builder.build(s_desc)
- elif type == 'list_update':
- ret = self.__lu_builder.build(s_desc)
- elif type == 'std::priority_queue_vector':
- return self.__npq_builder.build(True)
- elif type == 'std::priority_queue_deque':
- return self.__npq_builder.build(False)
- elif type == 'std_set' or type == 'std_map' or type == 'std_multimap':
- return self.__std_builder.build(s_desc)
- elif type == 'std_tr1_unordered_set' or type == 'std_tr1_unordered_map':
- return self.__std_tr1_builder.build(s_desc)
- elif type == 'stdext_hash_set' or type == 'stdext_hash_map' or type == 'stdext_hash_multimap':
- return self.__stdext_builder.build(s_desc)
- elif type == '__gnucxx_hash_set' or type == '__gnucxx_hash_map' or type == '__gnucxx_hash_multimap':
- return self.__gnucxx_builder.build(s_desc)
- else:
- sys.stderr.write('cannot recognize %s\n' % type)
- raise exception
- return ret
-
-
- def build(self, desc):
- s_descs = desc.getElementsByTagName('type')
- if s_descs.length == 0:
- print desc.toxml()
- raise exception
- ret = ''
- count = 0
- for s_desc in s_descs:
- if count > 0:
- ret = ret + ', mapping each key to '
- ret = ret + self.__build_specific(s_desc)
- count = count + 1
- return ret
-
-
-def main(doc_dir, res_dir, test_infos_f_name, test_name, build_name):
- res_gtr = res_getter(test_infos_f_name)
- res = res_gtr.get(res_dir, test_name)
- png_mkr = png_maker()
- png_of_name = doc_dir + '/' + test_name + '_' + build_name + '.png'
- print png_of_name
- png_mkr.make(res, png_of_name)
+ # parse results
+ test_name = test.attributes['name'].value
+ res_gtr = res_getter(test_infos_f_name)
+ res = res_gtr.get(res_dir, test_name)
+ # generate image
+ image_mkr = image_maker()
+ svg_of_name = doc_dir + '/pbds_' + test_name + '.svg'
+ image_mkr.make(res, svg_of_name)
if __name__ == "__main__":
"""
- This module takes 6 parameters from the command line:
- Docs directory
- Results directory
+ This module takes 3 parameters from the command line:
Tests info XML file name
- Test name
- Build name
- Compiler name
+ Test results directory
+ Image output directory
"""
- usg = "make_graph.py <doc_dir> <res_dir> <test_info_file> <test_name> <build_name>\n"
- if len(sys.argv) != 6:
+ usg = "make_graph.py <test_info_file> <res_dir> <image_dir>\n"
+ if len(sys.argv) != 4:
sys.stderr.write(usg)
raise exception
- main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
+ main(sys.argv[1], sys.argv[2], sys.argv[3])
diff --git a/libstdc++-v3/scripts/make_graphs.py b/libstdc++-v3/scripts/make_graphs.py
deleted file mode 100755
index e230e7a998..0000000000
--- a/libstdc++-v3/scripts/make_graphs.py
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import commands
-import re
-from xml.dom import minidom
-from BeautifulSoup import BeautifulSoup
-import make_graph
-
-class exception:
- pass
-
-res_div_re = re.compile('(.*?)_res_div')
-settings_div_re = re.compile('(.*?)_settings_div')
-
-
-gray_border_div_str = '<div style = "border-style: dotted; border-width: 1px; border-color: lightgray">'
-space_div_str = '<div style = "width: 100%; height: 20px">'
-
-
-
-def logical_build_from_build(build):
- if build == 'gcc':
- return 'g++'
- if build == 'msvc':
- return 'msvc++'
- if build == 'local':
- return 'local'
- sys.stderr.write(build)
- raise exception
-
-
-def img_title_from_origs(label, title, base_build_ref, build_name, logical_build_name):
- title = title.replace('_tt_', '<tt>')
- title = title.replace('_455tt_', '</tt>')
- title = title.replace('_b_', '<b>')
- title = title.replace('_455b_', '</b>')
- title = title.replace('_456', ',')
- title = title.replace('_457', '[]')
- title = title.replace('_', ' ')
- return '%s: %s - <a href = "%s_performance_tests.html#%s">%s</a>' % (
- label,
- title,
- base_build_ref,
- build_name,
- logical_build_name)
-
-
-def make_png(src_dir, doc_dir, res_dir, tests_info_xml_f_name, build_name, test_name):
- cmd_str = '%s/scripts/make_graph.py %s %s %s %s %s' % (
- src_dir, doc_dir,
- res_dir,
- tests_info_xml_f_name,
- test_name,
- build_name)
- # Must start a new process for pychart - otherwise pngs overlap.
- so = commands.getstatusoutput(cmd_str)
- if(so[0] != 0):
- sys.stderr.write(cmd_str + '\n')
- sys.stderr.write(so[1] + '\n')
- sys.exit(-1)
-
-
-def make_png_str(label, test_name, build):
- ret = '<h6 class="c1">'
- ret += '<a name="%s" id= "%s">' % (label, label)
- ret += '<img src="%s" ' % (test_name + '_' + build + '.png')
- ret += 'alt="no image" />'
- ret += '</a></h6>'
- return ret
-
-def process_html(html_f_name, src_dir, build_dir, htmls_xml_f_name, tests_info_xml_f_name, build_name, compiler_name):
- doc_dir = src_dir + "/doc/html/ext/pb_ds"
- res_dir = build_dir
- html_f = open(doc_dir + '/' + html_f_name)
- soup = BeautifulSoup(html_f.read())
- html_f.close()
- platform_comp_re = re.compile('platform_comp_%s' % build_name)
- for d in soup('div'):
- try:
- settings_m = settings_div_re.match(d['id'])
- res_m = res_div_re.match(d['id'])
- except:
- settings_m = None
- res_m = None
-
- if settings_m:
- build = settings_m.groups()[0]
- if build == build_name:
- logical_build_name = logical_build_from_build(build)
- info = gray_border_div_str
- info += '<h3><a name = "%s"><u>%s</u></a></h3>' % (build, logical_build_name)
- info += make_graph.comp_platform_info(compiler_name)
- info += '</div>%s</div>' % space_div_str
- d.contents = info
- elif res_m:
- label = res_m.groups()[0]
- d = d.divTag
-
- build = d['id'].replace('%s_' % label, '')
-
- if build == build_name:
- logical_build_name = logical_build_from_build(build)
- d = d.divTag
- test_name = d['id'].replace('%s_' % label, '')
- d = d.divTag
- base_build_ref = d['id'].replace('%s_' % label, '')
- d = d.divTag
- title = d['id'].replace('%s_' % label, '')
- img_title = img_title_from_origs(label, title, base_build_ref, build, logical_build_name)
-
- make_png(src_dir, doc_dir, res_dir, tests_info_xml_f_name, build_name, test_name)
- png_str = make_png_str(label, test_name, build)
- content = gray_border_div_str
- content += png_str
- content += img_title
-# content += make_graph.legend(doc_dir, res_dir, tests_info_xml_f_name, test_name, build_name)
- content += '</div>%s</div>' % space_div_str
- d.contents = content
-
- return soup
-
-
-
-if __name__ == "__main__":
- """
- Doc dir
- This module takes 6 parameters from the command line:
- Source directory
- Build directory
- HTMLs XML file name
- Tests info XML file name
- Build name
- Compiler name
- """
-
- usg = "make_graph.py <src_dir> <build_dir> <htmls_xml_f_name> <tests_info_xml_f_name> <build_name> <compiler_name>\n"
-
- if len(sys.argv) != 7:
- sys.stderr.write(usg)
- raise exception
-
- src_dir = sys.argv[1]
- build_dir = sys.argv[2]
- htmls_xml_f_name = sys.argv[3]
- tests_info_xml_f_name = sys.argv[4]
- build_name = sys.argv[5]
- compiler_name = sys.argv[6]
- doc_dir = src_dir + "/doc/html/ext/pb_ds"
- htmls_dat = minidom.parse(htmls_xml_f_name)
- for html in htmls_dat.getElementsByTagName('html'):
- html_f_name = html.attributes['name'].value
-
- new_soup = process_html(html_f_name, src_dir, build_dir, htmls_xml_f_name, tests_info_xml_f_name, build_name, compiler_name)
-
- html_f = open(doc_dir + '/' + html_f_name, 'w')
- html_f.write(str(new_soup))
- html_f.close()
-
-
diff --git a/libstdc++-v3/scripts/run_doxygen b/libstdc++-v3/scripts/run_doxygen
index e227ce17b9..45b3f4a066 100644
--- a/libstdc++-v3/scripts/run_doxygen
+++ b/libstdc++-v3/scripts/run_doxygen
@@ -261,14 +261,14 @@ for f in $problematic; do
# this is also slow, but safe and easy to debug
oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f`
newh=`echo $oldh | ./stdheader`
- sed "s=${oldh}=${newh}=" $f > TEMP
+ sed 's=${oldh}=${newh}=' $f > TEMP
mv TEMP $f
done
rm stdheader
# Some of the pages for generated modules have text that confuses certain
-# implementations of man(1), e.g., Linux's. We need to have another top-level
-# *roff tag to /stop/ the .SH NAME entry.
+# implementations of man(1), e.g. on GNU/Linux. We need to have another
+# top-level *roff tag to /stop/ the .SH NAME entry.
problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3`
#problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3'
@@ -313,6 +313,10 @@ for f in *__detail_*; do
newname=`echo $f | sed 's/__detail_/__detail::/'`
mv $f $newname
done
+for f in *__gnu_pbds_detail_*; do
+ newname=`echo $f | sed 's/detail_/detail::/'`
+ mv $f $newname
+done
for f in *__parallel_*; do
newname=`echo $f | sed 's/__parallel_/__parallel::/'`
mv $f $newname
@@ -321,20 +325,16 @@ for f in *__profile_*; do
newname=`echo $f | sed 's/__profile_/__profile::/'`
mv $f $newname
done
-for f in *__atomic0_*; do
- newname=`echo $f | sed 's/__atomic0_/__atomic0::/'`
- mv $f $newname
-done
-for f in *__atomic2_*; do
- newname=`echo $f | sed 's/__atomic2_/__atomic2::/'`
- mv $f $newname
-done
# Then, clean up other top-level namespaces.
for f in std_tr1_*; do
newname=`echo $f | sed 's/^std_tr1_/std::tr1::/'`
mv $f $newname
done
+for f in std_tr2_*; do
+ newname=`echo $f | sed 's/^std_tr2_/std::tr2::/'`
+ mv $f $newname
+done
for f in std_*; do
newname=`echo $f | sed 's/^std_/std::/'`
mv $f $newname
@@ -365,11 +365,6 @@ for f in __cxxabiv1_*; do
done
# Then piecemeal nested classes
-for f in *__future_base_*; do
- newname=`echo $f | sed 's/__future_base_/__future_base::/'`
- mv $f $newname
-done
-
# Generic removal bits, where there are things in the generated man
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
index 9a35685513..de5850da37 100644
--- a/libstdc++-v3/src/Makefile.am
+++ b/libstdc++-v3/src/Makefile.am
@@ -1,7 +1,7 @@
-## Makefile for the src subdirectory of the GNU C++ Standard library.
+## Makefile for the C++11 sources of the GNU C++ Standard library.
##
## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-## 2006, 2007, 2008, 2009, 2010, 2011
+## 2006, 2007, 2008, 2009, 2010, 2011, 2012
## Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
@@ -24,136 +24,13 @@
include $(top_srcdir)/fragment.am
+SUBDIRS = c++98 c++11
+
# Cross compiler support.
toolexeclib_LTLIBRARIES = libstdc++.la
-# Symbol versioning for shared libraries.
-if ENABLE_SYMVERS
-libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \
- $(port_specific_symbol_files)
- cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver
- chmod +w ./libstdc++-symbols.ver
- if test "x$(port_specific_symbol_files)" != x; then \
- if grep '^# Appended to version file.' \
- $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
- cat $(port_specific_symbol_files) >> $@; \
- else \
- sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
- sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
- cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
- rm tmp.top tmp.bottom; \
- fi; \
- fi
-
-CLEANFILES = libstdc++-symbols.ver
-
-if ENABLE_SYMVERS_GNU
-if ENABLE_SYMVERS_SOL2
-version_arg = -Wl,--version-script,libstdc++-symbols.ver-sol2
-version_dep = libstdc++-symbols.ver-sol2
-libstdc++-symbols.ver-sol2 : libstdc++-symbols.ver
- sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \
- > $@ || (rm -f $@ ; exit 1)
-else
-version_arg = -Wl,--version-script=libstdc++-symbols.ver
-version_dep = libstdc++-symbols.ver
-endif
-endif
-if ENABLE_SYMVERS_GNU_NAMESPACE
-version_arg = -Wl,--version-script=libstdc++-symbols.ver
-version_dep = libstdc++-symbols.ver
-endif
-if ENABLE_SYMVERS_SUN
-version_arg = -Wl,-M,libstdc++-symbols.ver-sun
-version_dep = libstdc++-symbols.ver-sun
-libstdc++-symbols.ver-sun : libstdc++-symbols.ver \
- $(toplevel_srcdir)/contrib/make_sunver.pl \
- $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
- CXXFILT="$(CXXFILT)"; export CXXFILT; \
- perl $(toplevel_srcdir)/contrib/make_sunver.pl \
- libstdc++-symbols.ver \
- $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
- `echo $(libstdc___la_LIBADD) | \
- sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
- > $@ || (rm -f $@ ; exit 1)
-endif
-if ENABLE_SYMVERS_DARWIN
-version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist
-version_dep = libstdc++-symbols.explist
-libstdc++-symbols.explist : libstdc++-symbols.ver \
- ${glibcxx_srcdir}/scripts/make_exports.pl \
- $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
- perl ${glibcxx_srcdir}/scripts/make_exports.pl \
- libstdc++-symbols.ver \
- $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
- `echo $(libstdc___la_LIBADD) | \
- sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
- > $@ || (rm -f $@ ; exit 1)
-endif
-
-CLEANFILES += $(version_dep)
-else
-version_arg =
-version_dep =
-endif
-
-
-# Source files linked in via configuration/make substitution for a
-# particular host.
-host_sources = \
- atomicity.cc \
- codecvt_members.cc \
- collate_members.cc \
- ctype_members.cc \
- messages_members.cc \
- monetary_members.cc \
- numeric_members.cc \
- time_members.cc
-
-codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true
-
-collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true
-
-ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
-
-messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true
-
-monetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true
-
-numeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true
-
-time_members.cc: ${glibcxx_srcdir}/$(CTIME_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true
-
-atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h
-atomicity.cc: ${atomicity_file}
- $(LN_S) ${atomicity_file} ./atomicity.cc || true
-
-# Source files linked in via configuration/make substitution for a
-# particular host, but with ad hoc naming rules.
-host_sources_extra = \
- basic_file.cc c++locale.cc \
- ${inst_sources} ${ldbl_compat_sources} ${parallel_sources}
-
-c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true
-
-basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
-
-if ENABLE_PARALLEL
-parallel_sources = parallel_settings.cc \
- compatibility-parallel_list.cc \
- compatibility-parallel_list-2.cc
-else
-parallel_sources =
-endif
+vpath % $(top_srcdir)/src/c++98
+vpath % $(top_srcdir)/src/c++11
if GLIBCXX_LDBL_COMPAT
ldbl_compat_sources = compatibility-ldbl.cc
@@ -161,123 +38,49 @@ else
ldbl_compat_sources =
endif
-if ENABLE_EXTERN_TEMPLATE
-XTEMPLATE_FLAGS = -fno-implicit-templates
-inst_sources = \
- allocator-inst.cc \
- concept-inst.cc \
- ext-inst.cc \
- fstream-inst.cc \
- ios-inst.cc \
- iostream-inst.cc \
- istream-inst.cc \
- locale-inst.cc \
- misc-inst.cc \
- ostream-inst.cc \
- sstream-inst.cc \
- streambuf-inst.cc \
- string-inst.cc \
- wlocale-inst.cc \
- wstring-inst.cc
+if ENABLE_PARALLEL
+parallel_compat_sources = \
+ compatibility-parallel_list.cc compatibility-parallel_list-2.cc
else
-XTEMPLATE_FLAGS =
-inst_sources =
+parallel_compat_sources =
endif
-# Sources present in the src directory, always present.
-sources = \
- atomic.cc \
- bitmap_allocator.cc \
- pool_allocator.cc \
- mt_allocator.cc \
- codecvt.cc \
+cxx98_sources = \
compatibility.cc \
- compatibility-c++0x.cc \
compatibility-debug_list.cc \
compatibility-debug_list-2.cc \
compatibility-list.cc \
compatibility-list-2.cc \
- complex_io.cc \
- ctype.cc \
- debug.cc \
- functexcept.cc \
- functional.cc \
- globals_io.cc \
- hash_c++0x.cc \
- hash_tr1.cc \
- hashtable_c++0x.cc \
- hashtable_tr1.cc \
- ios.cc \
- ios_failure.cc \
- ios_init.cc \
- ios_locale.cc \
- limits.cc \
- list.cc \
- locale.cc \
- locale_init.cc \
- locale_facets.cc \
- localename.cc \
- math_stubs_float.cc \
- math_stubs_long_double.cc \
- stdexcept.cc \
- strstream.cc \
- system_error.cc \
- tree.cc \
- istream.cc \
- placeholders.cc \
- regex.cc \
- shared_ptr.cc \
- streambuf.cc \
- mutex.cc \
- condition_variable.cc \
- chrono.cc \
- thread.cc \
- future.cc \
- valarray.cc \
- ${host_sources} \
- ${host_sources_extra}
-
-vpath % $(top_srcdir)/src
-vpath % $(top_srcdir)
-
-libstdc___la_SOURCES = $(sources)
+ ${ldbl_compat_sources} \
+ ${parallel_compat_sources}
+
+cxx11_sources = \
+ compatibility-c++0x.cc \
+ compatibility-atomic-c++0x.cc \
+ compatibility-thread-c++0x.cc
+
+libstdc___la_SOURCES = $(cxx98_sources) $(cxx11_sources)
libstdc___la_LIBADD = \
$(GLIBCXX_LIBS) \
- $(top_builddir)/libsupc++/libsupc++convenience.la
+ $(top_builddir)/libsupc++/libsupc++convenience.la \
+ $(top_builddir)/src/c++98/libc++98convenience.la \
+ $(top_builddir)/src/c++11/libc++11convenience.la
libstdc___la_DEPENDENCIES = \
${version_dep} \
- $(top_builddir)/libsupc++/libsupc++convenience.la
+ $(top_builddir)/libsupc++/libsupc++convenience.la \
+ $(top_builddir)/src/c++98/libc++98convenience.la \
+ $(top_builddir)/src/c++11/libc++11convenience.la
libstdc___la_LDFLAGS = \
-version-info $(libtool_VERSION) ${version_arg} -lm
libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS)
-# Use special rules for the deprecated source files so that they find
-# deprecated include files.
-GLIBCXX_INCLUDE_DIR=$(glibcxx_builddir)/include
-strstream.lo: strstream.cc
- $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
-strstream.o: strstream.cc
- $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
-
-# Use special rules for the concept-checking instantiations so that all
-# the generated template functions are also instantiated. Force the checks
-# to be on so that the instantiations are actually seen.
-concept-inst.lo: concept-inst.cc
- $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
-concept-inst.o: concept-inst.cc
- $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
# Use special rules for parallel mode compilation.
PARALLEL_FLAGS = -fopenmp -D_GLIBCXX_PARALLEL -I$(glibcxx_builddir)/../libgomp
-parallel_settings.lo: parallel_settings.cc
- $(LTCXXCOMPILE) $(PARALLEL_FLAGS) -c $<
-parallel_settings.o: parallel_settings.cc
- $(CXXCOMPILE) $(PARALLEL_FLAGS) -c $<
-
compatibility-parallel_list.lo: compatibility-parallel_list.cc
$(LTCXXCOMPILE) -c $<
compatibility-parallel_list.o: compatibility-parallel_list.cc
@@ -288,135 +91,66 @@ compatibility-parallel_list-2.lo: compatibility-parallel_list-2.cc
compatibility-parallel_list-2.o: compatibility-parallel_list-2.cc
$(CXXCOMPILE) -c $<
-# Use special rules for the C++0x sources so that the proper flags are passed.
-functexcept.lo: functexcept.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-functexcept.o: functexcept.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-shared_ptr.lo: shared_ptr.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-shared_ptr.o: shared_ptr.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-system_error.lo: system_error.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-system_error.o: system_error.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-mutex.lo: mutex.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-mutex.o: mutex.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-condition_variable.lo: condition_variable.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-condition_variable.o: condition_variable.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-compatibility-c++0x.lo: compatibility-c++0x.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-compatibility-c++0x.o: compatibility-c++0x.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-functional.lo: functional.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-functional.o: functional.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-hash_c++0x.lo: hash_c++0x.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-hash_c++0x.o: hash_c++0x.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-hashtable_c++0x.lo: hashtable_c++0x.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-hashtable_c++0x.o: hashtable_c++0x.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-limits.lo: limits.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-limits.o: limits.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-atomic.lo: atomic.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-atomic.o: atomic.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-fstream-inst.lo: fstream-inst.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-fstream-inst.o: fstream-inst.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-string-inst.lo: string-inst.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-string-inst.o: string-inst.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-wstring-inst.lo: wstring-inst.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-wstring-inst.o: wstring-inst.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-chrono.lo: chrono.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-chrono.o: chrono.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-thread.lo: thread.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-thread.o: thread.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-future.lo: future.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-future.o: future.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-regex.lo: regex.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-regex.o: regex.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-debug.lo: debug.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-debug.o: debug.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-placeholders.lo: placeholders.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-placeholders.o: placeholders.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-if GLIBCXX_LDBL_COMPAT
# Use special rules for compatibility-ldbl.cc compilation, as we need to
# pass -mlong-double-64.
+if GLIBCXX_LDBL_COMPAT
compatibility-ldbl.lo: compatibility-ldbl.cc
$(LTCXXCOMPILE) -mlong-double-64 -c $<
compatibility-ldbl.o: compatibility-ldbl.cc
$(CXXCOMPILE) -mlong-double-64 -c $<
endif
-# AM_CXXFLAGS needs to be in each subdirectory so that it can be
+# Use special rules for C++11 files/objects.
+compatibility-c++0x.lo: compatibility-c++0x.cc
+ $(LTCXXCOMPILE) -std=gnu++11 -c $<
+compatibility-c++0x.o: compatibility-c++0x.cc
+ $(CXXCOMPILE) -std=gnu++11 -c $<
+
+compatibility-atomic-c++0x.lo: compatibility-atomic-c++0x.cc
+ $(LTCXXCOMPILE) -std=gnu++11 -c $<
+compatibility-atomic-c++0x.o: compatibility-atomic-c++0x.cc
+ $(CXXCOMPILE) -std=gnu++11 -c $<
+
+compatibility-thread-c++0x.lo: compatibility-thread-c++0x.cc
+ $(LTCXXCOMPILE) -std=gnu++11 -c $<
+compatibility-thread-c++0x.o: compatibility-thread-c++0x.cc
+ $(CXXCOMPILE) -std=gnu++11 -c $<
+
+# A note on compatibility and static libraries.
+#
+# static lib == linked against only this version, should not need compat
+# shared lib == linked against potentially all compat versions
+#
+# Thus, the shared libs have more compat symbols, which can be found
+# segregated in the sources with -D_GLIBCXX_SHARED.
+#
+# In the sub-directories of libsupc++, src/c++98, src/c++11, only
+# -prefer-pic objects are generated for the convenience libraries.
+#
+# In the main src directory, make shared and static objects just for
+# the compat libraries. Shared objects are compiled with -prefer-pic
+# -D_GLIBCXX_SHARED and in the .libs sub-directory, static objects are
+# compiled with -prefer-pic (ie, -fPIC but not -D_GLIBCXX_SHARED) and
+# the main src directory.
+#
+# Why are objects destined for libstdc++.a compiled with -fPIC? First,
+# because -fPIC is not harmful to use for objects destined for static
+# libraries. In addition, using -fPIC will allow the use of static
+# libstdc++.a in the creation of other C++ shared libraries.
+
+# AM_CXXFLAGS needs to be in each sub-directory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion calls for it.
AM_CXXFLAGS = \
+ $(glibcxx_compiler_pic_flag) \
$(XTEMPLATE_FLAGS) \
- $(WARN_CXXFLAGS) \
- $(OPTIMIZE_CXXFLAGS) \
- $(CONFIG_CXXFLAGS)
-
-
-# libstdc++ libtool notes
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
-# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
-# last. (That way, things like -O2 passed down from the toplevel can
-# be overridden by --enable-debug.)
+# Libtool notes
-# 2) In general, libtool expects an argument such as `--tag=CXX' when
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
# using the C++ compiler, because that will enable the settings
# detected when C++ support was being configured. However, when no
# such flag is given in the command line, libtool attempts to figure
@@ -427,11 +161,24 @@ AM_CXXFLAGS = \
# can't decide which configuration to use, and it gives up. The
# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
-# attempt to infer which configuration to use
-LTCXXCOMPILE = $(LIBTOOL) --tag CXX \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile \
- $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
+# attempt to infer which configuration to use.
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
@@ -441,26 +188,117 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
# course is problematic at this point. So, we get the top-level
# directory to configure libstdc++-v3 to use gcc as the C++
# compilation driver.
-CXXLINK = $(LIBTOOL) --tag CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
- $(CXX) $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+CXXLINK = \
+ $(LIBTOOL) --tag CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
-# Added bits to build debug library.
-if GLIBCXX_BUILD_DEBUG
-all-local: build_debug
-install-data-local: install_debug
+# Symbol versioning for shared libraries.
+if ENABLE_SYMVERS
+libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \
+ $(port_specific_symbol_files)
+ cp ${glibcxx_srcdir}/$(SYMVER_FILE) $@.tmp
+ chmod +w $@.tmp
+ if test "x$(port_specific_symbol_files)" != x; then \
+ if grep '^# Appended to version file.' \
+ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
+ cat $(port_specific_symbol_files) >> $@.tmp; \
+ else \
+ sed -n '1,/DO NOT DELETE/p' $@.tmp > tmp.top; \
+ sed -n '/DO NOT DELETE/,$$p' $@.tmp > tmp.bottom; \
+ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@.tmp; \
+ rm tmp.top tmp.bottom; \
+ fi; \
+ fi
+ $(EGREP) -v '^[ ]*#(#| |$$)' $@.tmp | \
+ $(CC) -E -P -include $(CONFIG_HEADER) - > $@ || (rm -f $@ ; exit 1)
+ rm -f $@.tmp
+
+CLEANFILES = libstdc++-symbols.ver
+
+if ENABLE_SYMVERS_GNU
+version_arg = -Wl,--version-script=libstdc++-symbols.ver
+version_dep = libstdc++-symbols.ver
+endif
+if ENABLE_SYMVERS_GNU_NAMESPACE
+version_arg = -Wl,--version-script=libstdc++-symbols.ver
+version_dep = libstdc++-symbols.ver
+endif
+if ENABLE_SYMVERS_SUN
+version_arg = -Wl,-M,libstdc++-symbols.ver-sun
+version_dep = libstdc++-symbols.ver-sun
+libstdc++-symbols.ver-sun : libstdc++-symbols.ver \
+ $(toplevel_srcdir)/contrib/make_sunver.pl \
+ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
+ CXXFILT="$(CXXFILT)"; export CXXFILT; \
+ perl $(toplevel_srcdir)/contrib/make_sunver.pl \
+ libstdc++-symbols.ver \
+ $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
+ `echo $(libstdc___la_LIBADD) | \
+ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
+ > $@ || (rm -f $@ ; exit 1)
+endif
+if ENABLE_SYMVERS_DARWIN
+version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist
+version_dep = libstdc++-symbols.explist
+libstdc++-symbols.explist : libstdc++-symbols.ver \
+ ${glibcxx_srcdir}/scripts/make_exports.pl \
+ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
+ perl ${glibcxx_srcdir}/scripts/make_exports.pl \
+ libstdc++-symbols.ver \
+ $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
+ `echo $(libstdc___la_LIBADD) | \
+ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
+ > $@ || (rm -f $@ ; exit 1)
+endif
+
+CLEANFILES += $(version_dep)
else
-all-local:
-install-data-local:
+version_arg =
+version_dep =
endif
-debugdir = debug
-# Build a set of debug objects here.
+# Control additional build primary rules.
+all-once: libstdc++convenience.la $(STAMP_DEBUG)
+install-data-once: $(STAMP_INSTALL_DEBUG)
+
+all-local: all-once
+install-data-local: install-data-once
+clean-local:
+ rm -rf libstdc++convenience.la stamp* $(CLEAN_DEBUG)
+
+# Make a non-installed convenience library, so that --disable-static
+# may work.
+libstdc++convenience.la: $(toolexeclib_LTLIBRARIES)
+ $(CXXLINK) $(libstdc___la_LIBADD) $(LIBS); \
+ if test ! -f .libs/libstdc++.a; then \
+ cp .libs/libstdc++convenience.a .libs/libstdc++.a; \
+ fi; \
+ echo `date` > stamp-libstdc++convenience;
+
+# Added rules.
+# 1 debug library
+# 2 supra-convenience library
+if GLIBCXX_BUILD_DEBUG
+STAMP_DEBUG = build-debug
+STAMP_INSTALL_DEBUG = install-debug
+CLEAN_DEBUG = debug
+else
+STAMP_DEBUG =
+STAMP_INSTALL_DEBUG =
+CLEAN_DEBUG =
+endif
+
+# Build a debug variant.
# Take care to fix all possibly-relative paths.
+debugdir = ${glibcxx_builddir}/src/debug
stamp-debug:
if test ! -d ${debugdir}; then \
mkdir -p ${debugdir}; \
+ for d in $(SUBDIRS); do mkdir -p ${debugdir}/$$d; done; \
(cd ${debugdir}; \
sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \
-e 's/top_build_prefix = \.\./top_build_prefix = ..\/../' \
@@ -468,16 +306,30 @@ stamp-debug:
-e 's/VPATH = \.\./VPATH = ..\/../' \
-e 's/glibcxx_basedir = \.\./glibcxx_basedir = ..\/../' \
-e 's/MKDIR_P = \.\./MKDIR_P = ..\/../' \
- -e 's/all-local: build_debug/all-local:/' \
- -e 's/install-data-local: install_debug/install-data-local:/' \
- < ../Makefile > Makefile) ; \
+ < ../Makefile > Makefile ; \
+ for d in . $(SUBDIRS); do \
+ sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \
+ -e 's/top_build_prefix = \.\./top_build_prefix = ..\/../' \
+ -e 's/srcdir = \.\./srcdir = ..\/../' \
+ -e 's/VPATH = \.\./VPATH = ..\/../' \
+ -e 's/glibcxx_basedir = \.\./glibcxx_basedir = ..\/../' \
+ -e 's/MKDIR_P = \.\./MKDIR_P = ..\/../' \
+ < ../$$d/Makefile > $$d/Makefile ; \
+ done) ; \
fi; \
echo `date` > stamp-debug;
-build_debug: stamp-debug
- (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' all)
-
-# Install debug library here.
-install_debug:
- (cd ${debugdir} && $(MAKE) \
- toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
+build-debug: stamp-debug
+ (cd ${debugdir}; \
+ mv Makefile Makefile.tmp; \
+ sed -e 's,all-local: all-once,all-local:,' \
+ -e 's,install-data-local: install-data-once,install-data-local:,' \
+ -e '/vpath/!s,src/c,src/debug/c,' \
+ < Makefile.tmp > Makefile ; \
+ $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug all) ;
+
+# Install debug library.
+install-debug: build-debug
+ (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) ;
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index b454f66dc8..2387235314 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -88,38 +88,15 @@ am__base_list = \
am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
- ctype_members.lo messages_members.lo monetary_members.lo \
- numeric_members.lo time_members.lo
-@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = allocator-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ concept-inst.lo ext-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ fstream-inst.lo ios-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ iostream-inst.lo istream-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ locale-inst.lo misc-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ ostream-inst.lo sstream-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ streambuf-inst.lo string-inst.lo \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ wlocale-inst.lo wstring-inst.lo
-@GLIBCXX_LDBL_COMPAT_TRUE@am__objects_3 = compatibility-ldbl.lo
-@ENABLE_PARALLEL_TRUE@am__objects_4 = parallel_settings.lo \
-@ENABLE_PARALLEL_TRUE@ compatibility-parallel_list.lo \
+@GLIBCXX_LDBL_COMPAT_TRUE@am__objects_1 = compatibility-ldbl.lo
+@ENABLE_PARALLEL_TRUE@am__objects_2 = compatibility-parallel_list.lo \
@ENABLE_PARALLEL_TRUE@ compatibility-parallel_list-2.lo
-am__objects_5 = basic_file.lo c++locale.lo $(am__objects_2) \
- $(am__objects_3) $(am__objects_4)
-am__objects_6 = atomic.lo bitmap_allocator.lo pool_allocator.lo \
- mt_allocator.lo codecvt.lo compatibility.lo \
- compatibility-c++0x.lo compatibility-debug_list.lo \
+am__objects_3 = compatibility.lo compatibility-debug_list.lo \
compatibility-debug_list-2.lo compatibility-list.lo \
- compatibility-list-2.lo complex_io.lo ctype.lo debug.lo \
- functexcept.lo functional.lo globals_io.lo hash_c++0x.lo \
- hash_tr1.lo hashtable_c++0x.lo hashtable_tr1.lo ios.lo \
- ios_failure.lo ios_init.lo ios_locale.lo limits.lo list.lo \
- locale.lo locale_init.lo locale_facets.lo localename.lo \
- math_stubs_float.lo math_stubs_long_double.lo stdexcept.lo \
- strstream.lo system_error.lo tree.lo istream.lo \
- placeholders.lo regex.lo shared_ptr.lo streambuf.lo mutex.lo \
- condition_variable.lo chrono.lo thread.lo future.lo \
- valarray.lo $(am__objects_1) $(am__objects_5)
-am_libstdc___la_OBJECTS = $(am__objects_6)
+ compatibility-list-2.lo $(am__objects_1) $(am__objects_2)
+am__objects_4 = compatibility-c++0x.lo compatibility-atomic-c++0x.lo \
+ compatibility-thread-c++0x.lo
+am_libstdc___la_OBJECTS = $(am__objects_3) $(am__objects_4)
libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp =
@@ -128,8 +105,20 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
SOURCES = $(libstdc___la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS
ETAGS = etags
CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -171,7 +160,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -199,7 +187,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -227,7 +214,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -254,6 +240,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -273,10 +260,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -304,6 +293,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -316,6 +306,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
# May be used by various substitution variables.
@@ -326,176 +317,101 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
+SUBDIRS = c++98 c++11
# Cross compiler support.
toolexeclib_LTLIBRARIES = libstdc++.la
-@ENABLE_SYMVERS_TRUE@CLEANFILES = libstdc++-symbols.ver $(version_dep)
-@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist
-@ENABLE_SYMVERS_FALSE@version_arg =
-@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_FALSE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script,libstdc++-symbols.ver-sol2
-@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-M,libstdc++-symbols.ver-sun
-@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.explist
-@ENABLE_SYMVERS_FALSE@version_dep =
-@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_FALSE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sol2
-@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sun
-
-# Source files linked in via configuration/make substitution for a
-# particular host.
-host_sources = \
- atomicity.cc \
- codecvt_members.cc \
- collate_members.cc \
- ctype_members.cc \
- messages_members.cc \
- monetary_members.cc \
- numeric_members.cc \
- time_members.cc
-
-atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h
-
-# Source files linked in via configuration/make substitution for a
-# particular host, but with ad hoc naming rules.
-host_sources_extra = \
- basic_file.cc c++locale.cc \
- ${inst_sources} ${ldbl_compat_sources} ${parallel_sources}
-
-@ENABLE_PARALLEL_FALSE@parallel_sources =
-@ENABLE_PARALLEL_TRUE@parallel_sources = parallel_settings.cc \
-@ENABLE_PARALLEL_TRUE@ compatibility-parallel_list.cc \
-@ENABLE_PARALLEL_TRUE@ compatibility-parallel_list-2.cc
-
@GLIBCXX_LDBL_COMPAT_FALSE@ldbl_compat_sources =
@GLIBCXX_LDBL_COMPAT_TRUE@ldbl_compat_sources = compatibility-ldbl.cc
-@ENABLE_EXTERN_TEMPLATE_FALSE@XTEMPLATE_FLAGS =
-@ENABLE_EXTERN_TEMPLATE_TRUE@XTEMPLATE_FLAGS = -fno-implicit-templates
-@ENABLE_EXTERN_TEMPLATE_FALSE@inst_sources =
-@ENABLE_EXTERN_TEMPLATE_TRUE@inst_sources = \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ allocator-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ concept-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ ext-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ fstream-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ ios-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ iostream-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ istream-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ locale-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ misc-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ ostream-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ sstream-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ streambuf-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ string-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ wlocale-inst.cc \
-@ENABLE_EXTERN_TEMPLATE_TRUE@ wstring-inst.cc
-
-
-# Sources present in the src directory, always present.
-sources = \
- atomic.cc \
- bitmap_allocator.cc \
- pool_allocator.cc \
- mt_allocator.cc \
- codecvt.cc \
+@ENABLE_PARALLEL_FALSE@parallel_compat_sources =
+@ENABLE_PARALLEL_TRUE@parallel_compat_sources = \
+@ENABLE_PARALLEL_TRUE@ compatibility-parallel_list.cc compatibility-parallel_list-2.cc
+
+cxx98_sources = \
compatibility.cc \
- compatibility-c++0x.cc \
compatibility-debug_list.cc \
compatibility-debug_list-2.cc \
compatibility-list.cc \
compatibility-list-2.cc \
- complex_io.cc \
- ctype.cc \
- debug.cc \
- functexcept.cc \
- functional.cc \
- globals_io.cc \
- hash_c++0x.cc \
- hash_tr1.cc \
- hashtable_c++0x.cc \
- hashtable_tr1.cc \
- ios.cc \
- ios_failure.cc \
- ios_init.cc \
- ios_locale.cc \
- limits.cc \
- list.cc \
- locale.cc \
- locale_init.cc \
- locale_facets.cc \
- localename.cc \
- math_stubs_float.cc \
- math_stubs_long_double.cc \
- stdexcept.cc \
- strstream.cc \
- system_error.cc \
- tree.cc \
- istream.cc \
- placeholders.cc \
- regex.cc \
- shared_ptr.cc \
- streambuf.cc \
- mutex.cc \
- condition_variable.cc \
- chrono.cc \
- thread.cc \
- future.cc \
- valarray.cc \
- ${host_sources} \
- ${host_sources_extra}
-
-libstdc___la_SOURCES = $(sources)
+ ${ldbl_compat_sources} \
+ ${parallel_compat_sources}
+
+cxx11_sources = \
+ compatibility-c++0x.cc \
+ compatibility-atomic-c++0x.cc \
+ compatibility-thread-c++0x.cc
+
+libstdc___la_SOURCES = $(cxx98_sources) $(cxx11_sources)
libstdc___la_LIBADD = \
$(GLIBCXX_LIBS) \
- $(top_builddir)/libsupc++/libsupc++convenience.la
+ $(top_builddir)/libsupc++/libsupc++convenience.la \
+ $(top_builddir)/src/c++98/libc++98convenience.la \
+ $(top_builddir)/src/c++11/libc++11convenience.la
libstdc___la_DEPENDENCIES = \
${version_dep} \
- $(top_builddir)/libsupc++/libsupc++convenience.la
+ $(top_builddir)/libsupc++/libsupc++convenience.la \
+ $(top_builddir)/src/c++98/libc++98convenience.la \
+ $(top_builddir)/src/c++11/libc++11convenience.la
libstdc___la_LDFLAGS = \
-version-info $(libtool_VERSION) ${version_arg} -lm
libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS)
-# Use special rules for the deprecated source files so that they find
-# deprecated include files.
-GLIBCXX_INCLUDE_DIR = $(glibcxx_builddir)/include
-
# Use special rules for parallel mode compilation.
PARALLEL_FLAGS = -fopenmp -D_GLIBCXX_PARALLEL -I$(glibcxx_builddir)/../libgomp
-# AM_CXXFLAGS needs to be in each subdirectory so that it can be
+# A note on compatibility and static libraries.
+#
+# static lib == linked against only this version, should not need compat
+# shared lib == linked against potentially all compat versions
+#
+# Thus, the shared libs have more compat symbols, which can be found
+# segregated in the sources with -D_GLIBCXX_SHARED.
+#
+# In the sub-directories of libsupc++, src/c++98, src/c++11, only
+# -prefer-pic objects are generated for the convenience libraries.
+#
+# In the main src directory, make shared and static objects just for
+# the compat libraries. Shared objects are compiled with -prefer-pic
+# -D_GLIBCXX_SHARED and in the .libs sub-directory, static objects are
+# compiled with -prefer-pic (ie, -fPIC but not -D_GLIBCXX_SHARED) and
+# the main src directory.
+#
+# Why are objects destined for libstdc++.a compiled with -fPIC? First,
+# because -fPIC is not harmful to use for objects destined for static
+# libraries. In addition, using -fPIC will allow the use of static
+# libstdc++.a in the creation of other C++ shared libraries.
+
+# AM_CXXFLAGS needs to be in each sub-directory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion calls for it.
AM_CXXFLAGS = \
+ $(glibcxx_compiler_pic_flag) \
$(XTEMPLATE_FLAGS) \
- $(WARN_CXXFLAGS) \
- $(OPTIMIZE_CXXFLAGS) \
- $(CONFIG_CXXFLAGS)
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
-# libstdc++ libtool notes
-
-# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
-# last. (That way, things like -O2 passed down from the toplevel can
-# be overridden by --enable-debug.)
+# Libtool notes
-# 2) In general, libtool expects an argument such as `--tag=CXX' when
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
# using the C++ compiler, because that will enable the settings
# detected when C++ support was being configured. However, when no
# such flag is given in the command line, libtool attempts to figure
@@ -506,11 +422,24 @@ AM_CXXFLAGS = \
# can't decide which configuration to use, and it gives up. The
# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
-# attempt to infer which configuration to use
-LTCXXCOMPILE = $(LIBTOOL) --tag CXX \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile \
- $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
+# attempt to infer which configuration to use.
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
@@ -520,11 +449,38 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
# course is problematic at this point. So, we get the top-level
# directory to configure libstdc++-v3 to use gcc as the C++
# compilation driver.
-CXXLINK = $(LIBTOOL) --tag CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
- $(CXX) $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+CXXLINK = \
+ $(LIBTOOL) --tag CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
-debugdir = debug
-all: all-am
+@ENABLE_SYMVERS_TRUE@CLEANFILES = libstdc++-symbols.ver $(version_dep)
+@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist
+@ENABLE_SYMVERS_FALSE@version_arg =
+@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-M,libstdc++-symbols.ver-sun
+@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.explist
+@ENABLE_SYMVERS_FALSE@version_dep =
+@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sun
+@GLIBCXX_BUILD_DEBUG_FALSE@STAMP_DEBUG =
+
+# Added rules.
+# 1 debug library
+# 2 supra-convenience library
+@GLIBCXX_BUILD_DEBUG_TRUE@STAMP_DEBUG = build-debug
+@GLIBCXX_BUILD_DEBUG_FALSE@STAMP_INSTALL_DEBUG =
+@GLIBCXX_BUILD_DEBUG_TRUE@STAMP_INSTALL_DEBUG = install-debug
+@GLIBCXX_BUILD_DEBUG_FALSE@CLEAN_DEBUG =
+@GLIBCXX_BUILD_DEBUG_TRUE@CLEAN_DEBUG = debug
+
+# Build a debug variant.
+# Take care to fix all possibly-relative paths.
+debugdir = ${glibcxx_builddir}/src/debug
+all: all-recursive
.SUFFIXES:
.SUFFIXES: .cc .lo .o .obj
@@ -613,6 +569,76 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@@ -623,10 +649,23 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
mkid -fID $$unique
tags: TAGS
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
@@ -645,7 +684,7 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
fi; \
fi
ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@@ -665,21 +704,22 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
check-am: all-am
-check: check-am
+check: check-recursive
all-am: Makefile $(LTLIBRARIES) all-local
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
for dir in "$(DESTDIR)$(toolexeclibdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -697,80 +737,82 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-generic clean-libtool clean-local \
+ clean-toolexeclibLTLIBRARIES mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
install-data-am: install-data-local
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-toolexeclibLTLIBRARIES
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am: uninstall-toolexeclibLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
-.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
- clean-generic clean-libtool clean-toolexeclibLTLIBRARIES ctags \
- distclean distclean-compile distclean-generic \
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am all-local check check-am clean clean-generic \
+ clean-libtool clean-local clean-toolexeclibLTLIBRARIES ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-data-local install-dvi install-dvi-am install-exec \
@@ -778,31 +820,67 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip \
install-toolexeclibLTLIBRARIES installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
- uninstall-am uninstall-toolexeclibLTLIBRARIES
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-toolexeclibLTLIBRARIES
+
+vpath % $(top_srcdir)/src/c++98
+vpath % $(top_srcdir)/src/c++11
+compatibility-parallel_list.lo: compatibility-parallel_list.cc
+ $(LTCXXCOMPILE) -c $<
+compatibility-parallel_list.o: compatibility-parallel_list.cc
+ $(CXXCOMPILE) -c $<
+
+compatibility-parallel_list-2.lo: compatibility-parallel_list-2.cc
+ $(LTCXXCOMPILE) -c $<
+compatibility-parallel_list-2.o: compatibility-parallel_list-2.cc
+ $(CXXCOMPILE) -c $<
+
+# Use special rules for compatibility-ldbl.cc compilation, as we need to
+# pass -mlong-double-64.
+@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc
+@GLIBCXX_LDBL_COMPAT_TRUE@ $(LTCXXCOMPILE) -mlong-double-64 -c $<
+@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.o: compatibility-ldbl.cc
+@GLIBCXX_LDBL_COMPAT_TRUE@ $(CXXCOMPILE) -mlong-double-64 -c $<
+
+# Use special rules for C++11 files/objects.
+compatibility-c++0x.lo: compatibility-c++0x.cc
+ $(LTCXXCOMPILE) -std=gnu++11 -c $<
+compatibility-c++0x.o: compatibility-c++0x.cc
+ $(CXXCOMPILE) -std=gnu++11 -c $<
+
+compatibility-atomic-c++0x.lo: compatibility-atomic-c++0x.cc
+ $(LTCXXCOMPILE) -std=gnu++11 -c $<
+compatibility-atomic-c++0x.o: compatibility-atomic-c++0x.cc
+ $(CXXCOMPILE) -std=gnu++11 -c $<
+
+compatibility-thread-c++0x.lo: compatibility-thread-c++0x.cc
+ $(LTCXXCOMPILE) -std=gnu++11 -c $<
+compatibility-thread-c++0x.o: compatibility-thread-c++0x.cc
+ $(CXXCOMPILE) -std=gnu++11 -c $<
# Symbol versioning for shared libraries.
@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \
@ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files)
-@ENABLE_SYMVERS_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver
-@ENABLE_SYMVERS_TRUE@ chmod +w ./libstdc++-symbols.ver
+@ENABLE_SYMVERS_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_FILE) $@.tmp
+@ENABLE_SYMVERS_TRUE@ chmod +w $@.tmp
@ENABLE_SYMVERS_TRUE@ if test "x$(port_specific_symbol_files)" != x; then \
@ENABLE_SYMVERS_TRUE@ if grep '^# Appended to version file.' \
@ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
-@ENABLE_SYMVERS_TRUE@ cat $(port_specific_symbol_files) >> $@; \
+@ENABLE_SYMVERS_TRUE@ cat $(port_specific_symbol_files) >> $@.tmp; \
@ENABLE_SYMVERS_TRUE@ else \
-@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
-@ENABLE_SYMVERS_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
-@ENABLE_SYMVERS_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
+@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@.tmp > tmp.top; \
+@ENABLE_SYMVERS_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@.tmp > tmp.bottom; \
+@ENABLE_SYMVERS_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@.tmp; \
@ENABLE_SYMVERS_TRUE@ rm tmp.top tmp.bottom; \
@ENABLE_SYMVERS_TRUE@ fi; \
@ENABLE_SYMVERS_TRUE@ fi
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver-sol2 : libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@ sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@ > $@ || (rm -f $@ ; exit 1)
+@ENABLE_SYMVERS_TRUE@ $(EGREP) -v '^[ ]*#(#| |$$)' $@.tmp | \
+@ENABLE_SYMVERS_TRUE@ $(CC) -E -P -include $(CONFIG_HEADER) - > $@ || (rm -f $@ ; exit 1)
+@ENABLE_SYMVERS_TRUE@ rm -f $@.tmp
@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver-sun : libstdc++-symbols.ver \
@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(toplevel_srcdir)/contrib/make_sunver.pl \
@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
@@ -823,183 +901,27 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@ > $@ || (rm -f $@ ; exit 1)
-codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true
-
-collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true
-
-ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
-
-messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true
-
-monetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true
-
-numeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true
-
-time_members.cc: ${glibcxx_srcdir}/$(CTIME_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true
-atomicity.cc: ${atomicity_file}
- $(LN_S) ${atomicity_file} ./atomicity.cc || true
-
-c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true
-
-basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
- $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
-
-vpath % $(top_srcdir)/src
-vpath % $(top_srcdir)
-strstream.lo: strstream.cc
- $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
-strstream.o: strstream.cc
- $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
-
-# Use special rules for the concept-checking instantiations so that all
-# the generated template functions are also instantiated. Force the checks
-# to be on so that the instantiations are actually seen.
-concept-inst.lo: concept-inst.cc
- $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
-concept-inst.o: concept-inst.cc
- $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
-parallel_settings.lo: parallel_settings.cc
- $(LTCXXCOMPILE) $(PARALLEL_FLAGS) -c $<
-parallel_settings.o: parallel_settings.cc
- $(CXXCOMPILE) $(PARALLEL_FLAGS) -c $<
-
-compatibility-parallel_list.lo: compatibility-parallel_list.cc
- $(LTCXXCOMPILE) -c $<
-compatibility-parallel_list.o: compatibility-parallel_list.cc
- $(CXXCOMPILE) -c $<
-
-compatibility-parallel_list-2.lo: compatibility-parallel_list-2.cc
- $(LTCXXCOMPILE) -c $<
-compatibility-parallel_list-2.o: compatibility-parallel_list-2.cc
- $(CXXCOMPILE) -c $<
-
-# Use special rules for the C++0x sources so that the proper flags are passed.
-functexcept.lo: functexcept.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-functexcept.o: functexcept.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-shared_ptr.lo: shared_ptr.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-shared_ptr.o: shared_ptr.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-system_error.lo: system_error.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-system_error.o: system_error.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-mutex.lo: mutex.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-mutex.o: mutex.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-condition_variable.lo: condition_variable.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-condition_variable.o: condition_variable.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-compatibility-c++0x.lo: compatibility-c++0x.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-compatibility-c++0x.o: compatibility-c++0x.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-functional.lo: functional.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-functional.o: functional.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-hash_c++0x.lo: hash_c++0x.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-hash_c++0x.o: hash_c++0x.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-hashtable_c++0x.lo: hashtable_c++0x.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-hashtable_c++0x.o: hashtable_c++0x.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-limits.lo: limits.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-limits.o: limits.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-atomic.lo: atomic.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-atomic.o: atomic.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-fstream-inst.lo: fstream-inst.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-fstream-inst.o: fstream-inst.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-string-inst.lo: string-inst.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-string-inst.o: string-inst.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-wstring-inst.lo: wstring-inst.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-wstring-inst.o: wstring-inst.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-chrono.lo: chrono.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-chrono.o: chrono.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-thread.lo: thread.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-thread.o: thread.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-future.lo: future.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-future.o: future.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-regex.lo: regex.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-regex.o: regex.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-debug.lo: debug.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-debug.o: debug.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-placeholders.lo: placeholders.cc
- $(LTCXXCOMPILE) -std=gnu++0x -c $<
-placeholders.o: placeholders.cc
- $(CXXCOMPILE) -std=gnu++0x -c $<
-
-# Use special rules for compatibility-ldbl.cc compilation, as we need to
-# pass -mlong-double-64.
-@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc
-@GLIBCXX_LDBL_COMPAT_TRUE@ $(LTCXXCOMPILE) -mlong-double-64 -c $<
-@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.o: compatibility-ldbl.cc
-@GLIBCXX_LDBL_COMPAT_TRUE@ $(CXXCOMPILE) -mlong-double-64 -c $<
-
-# Added bits to build debug library.
-@GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug
-@GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug
-@GLIBCXX_BUILD_DEBUG_FALSE@all-local:
-@GLIBCXX_BUILD_DEBUG_FALSE@install-data-local:
-
-# Build a set of debug objects here.
-# Take care to fix all possibly-relative paths.
+# Control additional build primary rules.
+all-once: libstdc++convenience.la $(STAMP_DEBUG)
+install-data-once: $(STAMP_INSTALL_DEBUG)
+
+all-local: all-once
+install-data-local: install-data-once
+clean-local:
+ rm -rf libstdc++convenience.la stamp* $(CLEAN_DEBUG)
+
+# Make a non-installed convenience library, so that --disable-static
+# may work.
+libstdc++convenience.la: $(toolexeclib_LTLIBRARIES)
+ $(CXXLINK) $(libstdc___la_LIBADD) $(LIBS); \
+ if test ! -f .libs/libstdc++.a; then \
+ cp .libs/libstdc++convenience.a .libs/libstdc++.a; \
+ fi; \
+ echo `date` > stamp-libstdc++convenience;
stamp-debug:
if test ! -d ${debugdir}; then \
mkdir -p ${debugdir}; \
+ for d in $(SUBDIRS); do mkdir -p ${debugdir}/$$d; done; \
(cd ${debugdir}; \
sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \
-e 's/top_build_prefix = \.\./top_build_prefix = ..\/../' \
@@ -1007,19 +929,33 @@ stamp-debug:
-e 's/VPATH = \.\./VPATH = ..\/../' \
-e 's/glibcxx_basedir = \.\./glibcxx_basedir = ..\/../' \
-e 's/MKDIR_P = \.\./MKDIR_P = ..\/../' \
- -e 's/all-local: build_debug/all-local:/' \
- -e 's/install-data-local: install_debug/install-data-local:/' \
- < ../Makefile > Makefile) ; \
+ < ../Makefile > Makefile ; \
+ for d in . $(SUBDIRS); do \
+ sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \
+ -e 's/top_build_prefix = \.\./top_build_prefix = ..\/../' \
+ -e 's/srcdir = \.\./srcdir = ..\/../' \
+ -e 's/VPATH = \.\./VPATH = ..\/../' \
+ -e 's/glibcxx_basedir = \.\./glibcxx_basedir = ..\/../' \
+ -e 's/MKDIR_P = \.\./MKDIR_P = ..\/../' \
+ < ../$$d/Makefile > $$d/Makefile ; \
+ done) ; \
fi; \
echo `date` > stamp-debug;
-build_debug: stamp-debug
- (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' all)
-
-# Install debug library here.
-install_debug:
- (cd ${debugdir} && $(MAKE) \
- toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
+build-debug: stamp-debug
+ (cd ${debugdir}; \
+ mv Makefile Makefile.tmp; \
+ sed -e 's,all-local: all-once,all-local:,' \
+ -e 's,install-data-local: install-data-once,install-data-local:,' \
+ -e '/vpath/!s,src/c,src/debug/c,' \
+ < Makefile.tmp > Makefile ; \
+ $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug all) ;
+
+# Install debug library.
+install-debug: build-debug
+ (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) ;
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc
deleted file mode 100644
index e655dd3e8e..0000000000
--- a/libstdc++-v3/src/atomic.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-// Support for atomic operations -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include "gstdint.h"
-#include <atomic>
-#include <mutex>
-
-#define LOGSIZE 4
-
-namespace
-{
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
- std::mutex&
- get_atomic_mutex()
- {
- static std::mutex atomic_mutex;
- return atomic_mutex;
- }
-#endif
-
- std::__atomic_flag_base flag_table[ 1 << LOGSIZE ] =
- {
- ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
- ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
- ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
- ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
- };
-} // anonymous namespace
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- namespace __atomic0
- {
- bool
- atomic_flag::test_and_set(memory_order)
- {
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
- lock_guard<mutex> __lock(get_atomic_mutex());
-#endif
- bool result = _M_i;
- _M_i = true;
- return result;
- }
-
- void
- atomic_flag::clear(memory_order)
- {
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
- lock_guard<mutex> __lock(get_atomic_mutex());
-#endif
- _M_i = false;
- }
-
- _GLIBCXX_BEGIN_EXTERN_C
-
- bool
- atomic_flag_test_and_set_explicit(__atomic_flag_base* __a,
- memory_order __m) _GLIBCXX_NOTHROW
- {
- atomic_flag* d = static_cast<atomic_flag*>(__a);
- return d->test_and_set(__m);
- }
-
- void
- atomic_flag_clear_explicit(__atomic_flag_base* __a,
- memory_order __m) _GLIBCXX_NOTHROW
- {
- atomic_flag* d = static_cast<atomic_flag*>(__a);
- return d->clear(__m);
- }
-
- void
- __atomic_flag_wait_explicit(__atomic_flag_base* __a,
- memory_order __x) _GLIBCXX_NOTHROW
- {
- while (atomic_flag_test_and_set_explicit(__a, __x))
- { };
- }
-
- _GLIBCXX_CONST __atomic_flag_base*
- __atomic_flag_for_address(const volatile void* __z) _GLIBCXX_NOTHROW
- {
- uintptr_t __u = reinterpret_cast<uintptr_t>(__z);
- __u += (__u >> 2) + (__u << 4);
- __u += (__u >> 7) + (__u << 5);
- __u += (__u >> 17) + (__u << 13);
- if (sizeof(uintptr_t) > 4)
- __u += (__u >> 31);
- __u &= ~((~uintptr_t(0)) << LOGSIZE);
- return flag_table + __u;
- }
-
- _GLIBCXX_END_EXTERN_C
-
- } // namespace __atomic0
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-
-// XXX GLIBCXX_ABI Deprecated
-// gcc-4.5.0
-// <atomic> signature changes
-
-// The rename syntax for default exported names is
-// asm (".symver name1,exportedname@GLIBCXX_3.4")
-// asm (".symver name2,exportedname@@GLIBCXX_3.4.5")
-// In the future, GLIBCXX_ABI > 6 should remove all uses of
-// _GLIBCXX_*_SYMVER macros in this file.
-
-#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
- && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
-
-#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
- asm (".symver " #cur "," #old "@@" #version);
-
-_GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag5clearESt12memory_order, _ZNVSt9__atomic011atomic_flag5clearESt12memory_order, GLIBCXX_3.4.11)
-
-_GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order, _ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order, GLIBCXX_3.4.11)
-
-#endif
diff --git a/libstdc++-v3/src/c++11/Makefile.am b/libstdc++-v3/src/c++11/Makefile.am
new file mode 100644
index 0000000000..f650270008
--- /dev/null
+++ b/libstdc++-v3/src/c++11/Makefile.am
@@ -0,0 +1,122 @@
+## Makefile for the C++03 sources of the GNU C++ Standard library.
+##
+## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+## 2006, 2007, 2008, 2009, 2010, 2011, 2012
+## Free Software Foundation, Inc.
+##
+## This file is part of the libstdc++ version 3 distribution.
+## Process this file with automake to produce Makefile.in.
+
+## This file is part of the GNU ISO C++ Library. This library is free
+## software; you can redistribute it and/or modify it under the
+## terms of the GNU General Public License as published by the
+## Free Software Foundation; either version 3, or (at your option)
+## any later version.
+
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+## You should have received a copy of the GNU General Public License along
+## with this library; see the file COPYING3. If not see
+## <http://www.gnu.org/licenses/>.
+
+include $(top_srcdir)/fragment.am
+
+# Convenience library for C++11 runtime.
+noinst_LTLIBRARIES = libc++11convenience.la
+
+headers =
+
+sources = \
+ chrono.cc \
+ condition_variable.cc \
+ debug.cc \
+ functexcept.cc \
+ functional.cc \
+ future.cc \
+ hash_c++0x.cc \
+ hashtable_c++0x.cc \
+ limits.cc \
+ mutex.cc \
+ placeholders.cc \
+ regex.cc \
+ shared_ptr.cc \
+ system_error.cc \
+ thread.cc
+
+if ENABLE_EXTERN_TEMPLATE
+XTEMPLATE_FLAGS = -fno-implicit-templates
+inst_sources = \
+ fstream-inst.cc \
+ string-inst.cc \
+ wstring-inst.cc
+else
+XTEMPLATE_FLAGS =
+inst_sources =
+endif
+
+vpath % $(top_srcdir)/src/c++11
+
+libc__11convenience_la_SOURCES = $(sources) $(inst_sources)
+
+# AM_CXXFLAGS needs to be in each subdirectory so that it can be
+# modified in a per-library or per-sub-library way. Need to manually
+# set this option because CONFIG_CXXFLAGS has to be after
+# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
+# as the occasion calls for it.
+AM_CXXFLAGS = \
+ -std=gnu++11 \
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(XTEMPLATE_FLAGS) \
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
+
+AM_MAKEFLAGS = \
+ "gxx_include_dir=$(gxx_include_dir)"
+
+# Libtool notes
+
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
+# using the C++ compiler, because that will enable the settings
+# detected when C++ support was being configured. However, when no
+# such flag is given in the command line, libtool attempts to figure
+# it out by matching the compiler name in each configuration section
+# against a prefix of the command line. The problem is that, if the
+# compiler name and its initial flags stored in the libtool
+# configuration file don't match those in the command line, libtool
+# can't decide which configuration to use, and it gives up. The
+# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
+# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
+# attempt to infer which configuration to use.
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+
+LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+
+# 3) We'd have a problem when building the shared libstdc++ object if
+# the rules automake generates would be used. We cannot allow g++ to
+# be used since this would add -lstdc++ to the link line which of
+# course is problematic at this point. So, we get the top-level
+# directory to configure libstdc++-v3 to use gcc as the C++
+# compilation driver.
+CXXLINK = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in
new file mode 100644
index 0000000000..d725d260d5
--- /dev/null
+++ b/libstdc++-v3/src/c++11/Makefile.in
@@ -0,0 +1,626 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
+subdir = src/c++11
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+ $(top_srcdir)/../config/enable.m4 \
+ $(top_srcdir)/../config/futex.m4 \
+ $(top_srcdir)/../config/iconv.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/lib-ld.m4 \
+ $(top_srcdir)/../config/lib-link.m4 \
+ $(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/lthostflags.m4 \
+ $(top_srcdir)/../config/multi.m4 \
+ $(top_srcdir)/../config/no-executables.m4 \
+ $(top_srcdir)/../config/override.m4 \
+ $(top_srcdir)/../config/stdint.m4 \
+ $(top_srcdir)/../config/unwind_ipinfo.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
+ $(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
+ $(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libc__11convenience_la_LIBADD =
+am__objects_1 = chrono.lo condition_variable.lo debug.lo \
+ functexcept.lo functional.lo future.lo hash_c++0x.lo \
+ hashtable_c++0x.lo limits.lo mutex.lo placeholders.lo regex.lo \
+ shared_ptr.lo system_error.lo thread.lo
+@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = fstream-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ string-inst.lo wstring-inst.lo
+am_libc__11convenience_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+libc__11convenience_la_OBJECTS = $(am_libc__11convenience_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+SOURCES = $(libc__11convenience_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
+ACLOCAL = @ACLOCAL@
+ALLOCATOR_H = @ALLOCATOR_H@
+ALLOCATOR_NAME = @ALLOCATOR_NAME@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ATOMICITY_SRCDIR = @ATOMICITY_SRCDIR@
+ATOMIC_FLAGS = @ATOMIC_FLAGS@
+ATOMIC_WORD_SRCDIR = @ATOMIC_WORD_SRCDIR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASIC_FILE_CC = @BASIC_FILE_CC@
+BASIC_FILE_H = @BASIC_FILE_H@
+CC = @CC@
+CCODECVT_CC = @CCODECVT_CC@
+CCOLLATE_CC = @CCOLLATE_CC@
+CCTYPE_CC = @CCTYPE_CC@
+CFLAGS = @CFLAGS@
+CLOCALE_CC = @CLOCALE_CC@
+CLOCALE_H = @CLOCALE_H@
+CLOCALE_INTERNAL_H = @CLOCALE_INTERNAL_H@
+CMESSAGES_CC = @CMESSAGES_CC@
+CMESSAGES_H = @CMESSAGES_H@
+CMONEY_CC = @CMONEY_CC@
+CNUMERIC_CC = @CNUMERIC_CC@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPU_DEFINES_SRCDIR = @CPU_DEFINES_SRCDIR@
+CSTDIO_H = @CSTDIO_H@
+CTIME_CC = @CTIME_CC@
+CTIME_H = @CTIME_H@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+C_INCLUDE_DIR = @C_INCLUDE_DIR@
+DBLATEX = @DBLATEX@
+DEBUG_FLAGS = @DEBUG_FLAGS@
+DEFS = @DEFS@
+DOT = @DOT@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CONSTANTS_SRCDIR = @ERROR_CONSTANTS_SRCDIR@
+EXEEXT = @EXEEXT@
+EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@
+FGREP = @FGREP@
+GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
+GLIBCXX_LIBS = @GLIBCXX_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPTIMIZE_CXXFLAGS = @OPTIMIZE_CXXFLAGS@
+OPT_LDFLAGS = @OPT_LDFLAGS@
+OS_INC_SRCDIR = @OS_INC_SRCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+RANLIB = @RANLIB@
+SECTION_FLAGS = @SECTION_FLAGS@
+SECTION_LDFLAGS = @SECTION_LDFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYMVER_FILE = @SYMVER_FILE@
+TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_FLAGS = @WARN_FLAGS@
+WERROR = @WERROR@
+XMLLINT = @XMLLINT@
+XSLTPROC = @XSLTPROC@
+XSL_STYLE_DIR = @XSL_STYLE_DIR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+check_msgfmt = @check_msgfmt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+glibcxx_MOFILES = @glibcxx_MOFILES@
+glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
+glibcxx_POFILES = @glibcxx_POFILES@
+glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
+glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
+glibcxx_prefixdir = @glibcxx_prefixdir@
+glibcxx_srcdir = @glibcxx_srcdir@
+glibcxx_toolexecdir = @glibcxx_toolexecdir@
+glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
+gxx_include_dir = @gxx_include_dir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libtool_VERSION = @libtool_VERSION@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_host_flags = @lt_host_flags@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+multi_basedir = @multi_basedir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+port_specific_symbol_files = @port_specific_symbol_files@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+python_mod_dir = @python_mod_dir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
+toplevel_srcdir = @toplevel_srcdir@
+
+# May be used by various substitution variables.
+gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
+MAINT_CHARSET = latin1
+mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
+PWD_COMMAND = $${PWDCMD-pwd}
+STAMP = echo timestamp >
+toolexecdir = $(glibcxx_toolexecdir)
+toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
+
+# These bits are all figured out from configure. Look in acinclude.m4
+# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
+CONFIG_CXXFLAGS = \
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
+
+WARN_CXXFLAGS = \
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
+
+
+# -I/-D flags to pass when compiling.
+AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
+
+# Convenience library for C++11 runtime.
+noinst_LTLIBRARIES = libc++11convenience.la
+headers =
+sources = \
+ chrono.cc \
+ condition_variable.cc \
+ debug.cc \
+ functexcept.cc \
+ functional.cc \
+ future.cc \
+ hash_c++0x.cc \
+ hashtable_c++0x.cc \
+ limits.cc \
+ mutex.cc \
+ placeholders.cc \
+ regex.cc \
+ shared_ptr.cc \
+ system_error.cc \
+ thread.cc
+
+@ENABLE_EXTERN_TEMPLATE_FALSE@XTEMPLATE_FLAGS =
+@ENABLE_EXTERN_TEMPLATE_TRUE@XTEMPLATE_FLAGS = -fno-implicit-templates
+@ENABLE_EXTERN_TEMPLATE_FALSE@inst_sources =
+@ENABLE_EXTERN_TEMPLATE_TRUE@inst_sources = \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ fstream-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ string-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ wstring-inst.cc
+
+libc__11convenience_la_SOURCES = $(sources) $(inst_sources)
+
+# AM_CXXFLAGS needs to be in each subdirectory so that it can be
+# modified in a per-library or per-sub-library way. Need to manually
+# set this option because CONFIG_CXXFLAGS has to be after
+# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
+# as the occasion calls for it.
+AM_CXXFLAGS = \
+ -std=gnu++11 \
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(XTEMPLATE_FLAGS) \
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
+
+AM_MAKEFLAGS = \
+ "gxx_include_dir=$(gxx_include_dir)"
+
+
+# Libtool notes
+
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
+# using the C++ compiler, because that will enable the settings
+# detected when C++ support was being configured. However, when no
+# such flag is given in the command line, libtool attempts to figure
+# it out by matching the compiler name in each configuration section
+# against a prefix of the command line. The problem is that, if the
+# compiler name and its initial flags stored in the libtool
+# configuration file don't match those in the command line, libtool
+# can't decide which configuration to use, and it gives up. The
+# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
+# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
+# attempt to infer which configuration to use.
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+
+LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+
+# 3) We'd have a problem when building the shared libstdc++ object if
+# the rules automake generates would be used. We cannot allow g++ to
+# be used since this would add -lstdc++ to the link line which of
+# course is problematic at this point. So, we get the top-level
+# directory to configure libstdc++-v3 to use gcc as the C++
+# compilation driver.
+CXXLINK = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/fragment.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps src/c++11/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign --ignore-deps src/c++11/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libc++11convenience.la: $(libc__11convenience_la_OBJECTS) $(libc__11convenience_la_DEPENDENCIES)
+ $(CXXLINK) $(libc__11convenience_la_OBJECTS) $(libc__11convenience_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cc.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+vpath % $(top_srcdir)/src/c++11
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libstdc++-v3/src/c++11/chrono.cc b/libstdc++-v3/src/c++11/chrono.cc
new file mode 100644
index 0000000000..17b3402c76
--- /dev/null
+++ b/libstdc++-v3/src/c++11/chrono.cc
@@ -0,0 +1,83 @@
+// chrono -*- C++ -*-
+
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+
+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
+
+// conditional inclusion of sys/time.h for gettimeofday
+#if !defined(_GLIBCXX_USE_CLOCK_MONOTONIC) && \
+ !defined(_GLIBCXX_USE_CLOCK_REALTIME) && \
+ defined(_GLIBCXX_USE_GETTIMEOFDAY)
+#include <sys/time.h>
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace chrono
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ constexpr bool system_clock::is_steady;
+
+ system_clock::time_point
+ system_clock::now() noexcept
+ {
+#ifdef _GLIBCXX_USE_CLOCK_REALTIME
+ timespec tp;
+ // -EINVAL, -EFAULT
+ clock_gettime(CLOCK_REALTIME, &tp);
+ return time_point(duration(chrono::seconds(tp.tv_sec)
+ + chrono::nanoseconds(tp.tv_nsec)));
+#elif defined(_GLIBCXX_USE_GETTIMEOFDAY)
+ timeval tv;
+ // EINVAL, EFAULT
+ gettimeofday(&tv, 0);
+ return time_point(duration(chrono::seconds(tv.tv_sec)
+ + chrono::microseconds(tv.tv_usec)));
+#else
+ std::time_t __sec = std::time(0);
+ return system_clock::from_time_t(__sec);
+#endif
+ }
+
+#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
+ constexpr bool steady_clock::is_steady;
+
+ steady_clock::time_point
+ steady_clock::now() noexcept
+ {
+ timespec tp;
+ // -EINVAL, -EFAULT
+ clock_gettime(CLOCK_MONOTONIC, &tp);
+ return time_point(duration(chrono::seconds(tp.tv_sec)
+ + chrono::nanoseconds(tp.tv_nsec)));
+ }
+#endif
+
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace chrono
+} // namespace std
+
+#endif // _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc b/libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc
new file mode 100644
index 0000000000..3ad0b93974
--- /dev/null
+++ b/libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc
@@ -0,0 +1,161 @@
+// <atomic> compatibility -*- C++ -*-
+
+// Copyright (C) 2008, 2009, 2010, 2011, 2012
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include "gstdint.h"
+#include <atomic>
+#include <mutex>
+
+// XXX GLIBCXX_ABI Deprecated
+// gcc-4.7.0
+
+#ifdef _GLIBCXX_SHARED
+
+#define LOGSIZE 4
+
+namespace
+{
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+ std::mutex&
+ get_atomic_mutex()
+ {
+ static std::mutex atomic_mutex;
+ return atomic_mutex;
+ }
+#endif
+
+ std::__atomic_flag_base flag_table[ 1 << LOGSIZE ] =
+ {
+ ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
+ ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
+ ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
+ ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT,
+ };
+} // anonymous namespace
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ namespace __atomic0
+ {
+
+ struct atomic_flag : public __atomic_flag_base
+ {
+ bool
+ test_and_set(memory_order) noexcept;
+
+ void
+ clear(memory_order) noexcept;
+ };
+
+ bool
+ atomic_flag::test_and_set(memory_order) noexcept
+ {
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+ lock_guard<mutex> __lock(get_atomic_mutex());
+#endif
+ bool result = _M_i;
+ _M_i = true;
+ return result;
+ }
+
+ void
+ atomic_flag::clear(memory_order) noexcept
+ {
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+ lock_guard<mutex> __lock(get_atomic_mutex());
+#endif
+ _M_i = false;
+ }
+ } // namespace __atomic0
+
+ _GLIBCXX_BEGIN_EXTERN_C
+
+ bool
+ atomic_flag_test_and_set_explicit(__atomic_flag_base* __a,
+ memory_order __m) _GLIBCXX_NOTHROW
+ {
+ atomic_flag* d = static_cast<atomic_flag*>(__a);
+ return d->test_and_set(__m);
+ }
+
+ void
+ atomic_flag_clear_explicit(__atomic_flag_base* __a,
+ memory_order __m) _GLIBCXX_NOTHROW
+ {
+ atomic_flag* d = static_cast<atomic_flag*>(__a);
+ return d->clear(__m);
+ }
+
+ void
+ __atomic_flag_wait_explicit(__atomic_flag_base* __a,
+ memory_order __x) _GLIBCXX_NOTHROW
+ {
+ while (atomic_flag_test_and_set_explicit(__a, __x))
+ { };
+ }
+
+ _GLIBCXX_CONST __atomic_flag_base*
+ __atomic_flag_for_address(const volatile void* __z) _GLIBCXX_NOTHROW
+ {
+ uintptr_t __u = reinterpret_cast<uintptr_t>(__z);
+ __u += (__u >> 2) + (__u << 4);
+ __u += (__u >> 7) + (__u << 5);
+ __u += (__u >> 17) + (__u << 13);
+ if (sizeof(uintptr_t) > 4)
+ __u += (__u >> 31);
+ __u &= ~((~uintptr_t(0)) << LOGSIZE);
+ return flag_table + __u;
+ }
+
+ _GLIBCXX_END_EXTERN_C
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif
+
+// XXX GLIBCXX_ABI Deprecated
+// gcc-4.5.0
+// <atomic> signature changes
+
+// The rename syntax for default exported names is
+// asm (".symver name1,exportedname@GLIBCXX_3.4")
+// asm (".symver name2,exportedname@@GLIBCXX_3.4.5")
+// In the future, GLIBCXX_ABI > 6 should remove all uses of
+// _GLIBCXX_*_SYMVER macros in this file.
+
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
+
+#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
+ asm (".symver " #cur "," #old "@@" #version);
+
+_GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag5clearESt12memory_order, _ZNVSt9__atomic011atomic_flag5clearESt12memory_order, GLIBCXX_3.4.11)
+
+_GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order, _ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order, GLIBCXX_3.4.11)
+
+#endif
diff --git a/libstdc++-v3/src/c++11/compatibility-c++0x.cc b/libstdc++-v3/src/c++11/compatibility-c++0x.cc
new file mode 100644
index 0000000000..306bad55fa
--- /dev/null
+++ b/libstdc++-v3/src/c++11/compatibility-c++0x.cc
@@ -0,0 +1,124 @@
+// Compatibility symbols for previous versions, C++0x bits -*- C++ -*-
+
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#define _GLIBCXX_COMPATIBILITY_CXX0X
+#include <string>
+#include <system_error>
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# error "compatibility-c++0x.cc must be compiled with -std=gnu++0x"
+#endif
+
+#ifdef _GLIBCXX_SHARED
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ // gcc-4.4.0
+ // <mutex> exported std::lock_error
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+ class lock_error : public exception
+ {
+ public:
+ virtual const char*
+ _GLIBCXX_CONST what() const throw();
+ };
+
+ const char*
+ lock_error::what() const throw()
+ { return "std::lock_error"; }
+#endif
+
+ // We need these due to the symbols exported since GLIBCXX_3.4.10.
+ // See libstdc++/41662 for details.
+
+#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+ template<>
+ struct hash<string>
+ {
+ size_t operator()(string) const;
+ };
+
+ size_t
+ hash<string>::operator()(string __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length()); }
+
+ template<>
+ struct hash<const string&>
+ {
+ size_t operator()(const string&) const;
+ };
+
+ size_t
+ hash<const string&>::operator()(const string& __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length()); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ struct hash<wstring>
+ {
+ size_t operator()(wstring) const;
+ };
+
+ size_t
+ hash<wstring>::operator()(wstring __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+
+ template<>
+ struct hash<const wstring&>
+ {
+ size_t operator()(const wstring&) const;
+ };
+
+ size_t
+ hash<const wstring&>::operator()(const wstring& __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+#endif
+#endif
+
+ template<>
+ struct hash<error_code>
+ {
+ size_t operator()(error_code) const;
+ };
+
+ size_t
+ hash<error_code>::operator()(error_code __e) const
+ {
+ const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
+ return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
+ }
+
+ // gcc-4.7.0
+ // <chrono> changes is_monotonic to is_steady.
+ namespace chrono
+ {
+ struct system_clock
+ {
+ static constexpr bool is_monotonic = false;
+ };
+ constexpr bool system_clock::is_monotonic;
+ } // namespace chrono
+}
+
+#endif
diff --git a/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc b/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc
new file mode 100644
index 0000000000..5e87b53192
--- /dev/null
+++ b/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc
@@ -0,0 +1,97 @@
+// Compatibility symbols for previous versions, C++0x bits -*- C++ -*-
+
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <bits/c++config.h>
+#if defined(_GLIBCXX_HAVE_TLS) && defined(_GLIBCXX_SHARED)
+#define _GLIBCXX_ASYNC_ABI_COMPAT
+#endif
+
+#include <future>
+#include <mutex>
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# error "compatibility-thread-c++0x.cc must be compiled with -std=gnu++0x"
+#endif
+
+#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
+ asm (".symver " #cur "," #old "@@@" #version);
+
+// XXX GLIBCXX_ABI Deprecated
+// gcc-4.6.0
+// <future> export changes
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+ const std::error_category* future_category = &std::future_category();
+}
+
+_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx15future_categoryE, _ZSt15future_category, GLIBCXX_3.4.14)
+
+#endif
+
+// XXX GLIBCXX_ABI Deprecated
+// gcc-4.6.0
+// <mutex> export changes
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+ std::defer_lock_t defer_lock;
+ std::try_to_lock_t try_to_lock;
+ std::adopt_lock_t adopt_lock;
+}
+
+_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx10adopt_lockE, _ZSt10adopt_lock, GLIBCXX_3.4.11)
+_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx10defer_lockE, _ZSt10defer_lock, GLIBCXX_3.4.11)
+_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx11try_to_lockE, _ZSt11try_to_lock, GLIBCXX_3.4.11)
+
+
+#endif
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
+
+
+// XXX GLIBCXX_ABI Deprecated
+// gcc-4.7.0
+// <future> export changes
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
+ && (ATOMIC_INT_LOCK_FREE > 1)
+#if defined(_GLIBCXX_HAVE_TLS) && defined(_GLIBCXX_SHARED)
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ __future_base::_Async_state_common::~_Async_state_common() { _M_join(); }
+
+ // Explicit instantiation due to -fno-implicit-instantiation.
+ template void call_once(once_flag&, void (thread::*&&)(), reference_wrapper<thread>&&);
+ template _Bind_simple_helper<void (thread::*)(), reference_wrapper<thread>>::__type __bind_simple(void (thread::*&&)(), reference_wrapper<thread>&&);
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+#endif
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/c++11/condition_variable.cc b/libstdc++-v3/src/c++11/condition_variable.cc
new file mode 100644
index 0000000000..4c9aa3e734
--- /dev/null
+++ b/libstdc++-v3/src/c++11/condition_variable.cc
@@ -0,0 +1,87 @@
+// condition_variable -*- C++ -*-
+
+// Copyright (C) 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <condition_variable>
+
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#ifdef __GTHREAD_COND_INIT
+ condition_variable::condition_variable() noexcept = default;
+#else
+ condition_variable::condition_variable() noexcept
+ {
+ __GTHREAD_COND_INIT_FUNCTION(&_M_cond);
+ }
+#endif
+
+ condition_variable::~condition_variable() noexcept
+ {
+ // XXX no thread blocked
+ /* int __e = */ __gthread_cond_destroy(&_M_cond);
+ // if __e == EBUSY then blocked
+ }
+
+ void
+ condition_variable::wait(unique_lock<mutex>& __lock)
+ {
+ int __e = __gthread_cond_wait(&_M_cond, __lock.mutex()->native_handle());
+
+ if (__e)
+ __throw_system_error(__e);
+ }
+
+ void
+ condition_variable::notify_one() noexcept
+ {
+ int __e = __gthread_cond_signal(&_M_cond);
+
+ // XXX not in spec
+ // EINVAL
+ if (__e)
+ __throw_system_error(__e);
+ }
+
+ void
+ condition_variable::notify_all() noexcept
+ {
+ int __e = __gthread_cond_broadcast(&_M_cond);
+
+ // XXX not in spec
+ // EINVAL
+ if (__e)
+ __throw_system_error(__e);
+ }
+
+ condition_variable_any::condition_variable_any() noexcept = default;
+
+ condition_variable_any::~condition_variable_any() noexcept = default;
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/c++11/debug.cc b/libstdc++-v3/src/c++11/debug.cc
new file mode 100644
index 0000000000..af45ae4f54
--- /dev/null
+++ b/libstdc++-v3/src/c++11/debug.cc
@@ -0,0 +1,958 @@
+// Debugging mode support code -*- C++ -*-
+
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+// 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <debug/debug.h>
+#include <debug/safe_sequence.h>
+#include <debug/safe_unordered_container.h>
+#include <debug/safe_iterator.h>
+#include <debug/safe_local_iterator.h>
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+#include <cctype>
+#include <cstdio>
+#include <cstdlib>
+#include <functional>
+
+using namespace std;
+
+namespace
+{
+ /** Returns different instances of __mutex depending on the passed address
+ * in order to limit contention without breaking current library binary
+ * compatibility. */
+ __gnu_cxx::__mutex&
+ get_safe_base_mutex(void* __address)
+ {
+ const size_t mask = 0xf;
+ static __gnu_cxx::__mutex safe_base_mutex[mask + 1];
+ const size_t index = _Hash_impl::hash(__address) & mask;
+ return safe_base_mutex[index];
+ }
+
+ void
+ swap_its(__gnu_debug::_Safe_sequence_base& __lhs,
+ __gnu_debug::_Safe_iterator_base*& __lhs_its,
+ __gnu_debug::_Safe_sequence_base& __rhs,
+ __gnu_debug::_Safe_iterator_base*& __rhs_its)
+ {
+ swap(__lhs_its, __rhs_its);
+ __gnu_debug::_Safe_iterator_base* __iter;
+ for (__iter = __rhs_its; __iter; __iter = __iter->_M_next)
+ __iter->_M_sequence = &__rhs;
+ for (__iter = __lhs_its; __iter; __iter = __iter->_M_next)
+ __iter->_M_sequence = &__lhs;
+ }
+
+ void
+ swap_seq(__gnu_debug::_Safe_sequence_base& __lhs,
+ __gnu_debug::_Safe_sequence_base& __rhs)
+ {
+ swap(__lhs._M_version, __rhs._M_version);
+ swap_its(__lhs, __lhs._M_iterators,
+ __rhs, __rhs._M_iterators);
+ swap_its(__lhs, __lhs._M_const_iterators,
+ __rhs, __rhs._M_const_iterators);
+ }
+
+ void
+ swap_ucont(__gnu_debug::_Safe_unordered_container_base& __lhs,
+ __gnu_debug::_Safe_unordered_container_base& __rhs)
+ {
+ swap_seq(__lhs, __rhs);
+ swap_its(__lhs, __lhs._M_local_iterators,
+ __rhs, __rhs._M_local_iterators);
+ swap_its(__lhs, __lhs._M_const_local_iterators,
+ __rhs, __rhs._M_const_local_iterators);
+ }
+
+ void
+ detach_all(__gnu_debug::_Safe_iterator_base* __iter)
+ {
+ for (; __iter;)
+ {
+ __gnu_debug::_Safe_iterator_base* __old = __iter;
+ __iter = __iter->_M_next;
+ __old->_M_reset();
+ }
+ }
+} // anonymous namespace
+
+namespace __gnu_debug
+{
+ const char* _S_debug_messages[] =
+ {
+ // General Checks
+ "function requires a valid iterator range [%1.name;, %2.name;)",
+ "attempt to insert into container with a singular iterator",
+ "attempt to insert into container with an iterator"
+ " from a different container",
+ "attempt to erase from container with a %2.state; iterator",
+ "attempt to erase from container with an iterator"
+ " from a different container",
+ "attempt to subscript container with out-of-bounds index %2;,"
+ " but container only holds %3; elements",
+ "attempt to access an element in an empty container",
+ "elements in iterator range [%1.name;, %2.name;)"
+ " are not partitioned by the value %3;",
+ "elements in iterator range [%1.name;, %2.name;)"
+ " are not partitioned by the predicate %3; and value %4;",
+ "elements in iterator range [%1.name;, %2.name;) are not sorted",
+ "elements in iterator range [%1.name;, %2.name;)"
+ " are not sorted according to the predicate %3;",
+ "elements in iterator range [%1.name;, %2.name;) do not form a heap",
+ "elements in iterator range [%1.name;, %2.name;)"
+ " do not form a heap with respect to the predicate %3;",
+ // std::bitset checks
+ "attempt to write through a singular bitset reference",
+ "attempt to read from a singular bitset reference",
+ "attempt to flip a singular bitset reference",
+ // std::list checks
+ "attempt to splice a list into itself",
+ "attempt to splice lists with inequal allocators",
+ "attempt to splice elements referenced by a %1.state; iterator",
+ "attempt to splice an iterator from a different container",
+ "splice destination %1.name;"
+ " occurs within source range [%2.name;, %3.name;)",
+ // iterator checks
+ "attempt to initialize an iterator that will immediately become singular",
+ "attempt to copy-construct an iterator from a singular iterator",
+ "attempt to construct a constant iterator"
+ " from a singular mutable iterator",
+ "attempt to copy from a singular iterator",
+ "attempt to dereference a %1.state; iterator",
+ "attempt to increment a %1.state; iterator",
+ "attempt to decrement a %1.state; iterator",
+ "attempt to subscript a %1.state; iterator %2; step from"
+ " its current position, which falls outside its dereferenceable range",
+ "attempt to advance a %1.state; iterator %2; steps,"
+ " which falls outside its valid range",
+ "attempt to retreat a %1.state; iterator %2; steps,"
+ " which falls outside its valid range",
+ "attempt to compare a %1.state; iterator to a %2.state; iterator",
+ "attempt to compare iterators from different sequences",
+ "attempt to order a %1.state; iterator to a %2.state; iterator",
+ "attempt to order iterators from different sequences",
+ "attempt to compute the difference between a %1.state;"
+ " iterator to a %2.state; iterator",
+ "attempt to compute the different between two iterators"
+ " from different sequences",
+ // istream_iterator
+ "attempt to dereference an end-of-stream istream_iterator",
+ "attempt to increment an end-of-stream istream_iterator",
+ // ostream_iterator
+ "attempt to output via an ostream_iterator with no associated stream",
+ // istreambuf_iterator
+ "attempt to dereference an end-of-stream istreambuf_iterator"
+ " (this is a GNU extension)",
+ "attempt to increment an end-of-stream istreambuf_iterator",
+ // std::forward_list
+ "attempt to insert into container after an end iterator",
+ "attempt to erase from container after a %2.state; iterator not followed"
+ " by a dereferenceable one",
+ "function requires a valid iterator range (%2.name;, %3.name;)"
+ ", \"%2.name;\" shall be before and not equal to \"%3.name;\"",
+ // std::unordered_container::local_iterator
+ "attempt to compare local iterators from different unordered container"
+ " buckets",
+ "function requires a non-empty iterator range [%1.name;, %2.name;)"
+ };
+
+ void
+ _Safe_sequence_base::
+ _M_detach_all()
+ {
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ detach_all(_M_iterators);
+ _M_iterators = 0;
+
+ detach_all(_M_const_iterators);
+ _M_const_iterators = 0;
+ }
+
+ void
+ _Safe_sequence_base::
+ _M_detach_singular()
+ {
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ for (_Safe_iterator_base* __iter = _M_iterators; __iter;)
+ {
+ _Safe_iterator_base* __old = __iter;
+ __iter = __iter->_M_next;
+ if (__old->_M_singular())
+ __old->_M_detach_single();
+ }
+
+ for (_Safe_iterator_base* __iter2 = _M_const_iterators; __iter2;)
+ {
+ _Safe_iterator_base* __old = __iter2;
+ __iter2 = __iter2->_M_next;
+ if (__old->_M_singular())
+ __old->_M_detach_single();
+ }
+ }
+
+ void
+ _Safe_sequence_base::
+ _M_revalidate_singular()
+ {
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ for (_Safe_iterator_base* __iter = _M_iterators; __iter;
+ __iter = __iter->_M_next)
+ __iter->_M_version = _M_version;
+
+ for (_Safe_iterator_base* __iter2 = _M_const_iterators; __iter2;
+ __iter2 = __iter2->_M_next)
+ __iter2->_M_version = _M_version;
+ }
+
+ void
+ _Safe_sequence_base::
+ _M_swap(_Safe_sequence_base& __x)
+ {
+ // We need to lock both sequences to swap
+ using namespace __gnu_cxx;
+ __mutex *__this_mutex = &_M_get_mutex();
+ __mutex *__x_mutex = &__x._M_get_mutex();
+ if (__this_mutex == __x_mutex)
+ {
+ __scoped_lock __lock(*__this_mutex);
+ swap_seq(*this, __x);
+ }
+ else
+ {
+ __scoped_lock __l1(__this_mutex < __x_mutex
+ ? *__this_mutex : *__x_mutex);
+ __scoped_lock __l2(__this_mutex < __x_mutex
+ ? *__x_mutex : *__this_mutex);
+ swap_seq(*this, __x);
+ }
+ }
+
+ __gnu_cxx::__mutex&
+ _Safe_sequence_base::
+ _M_get_mutex() throw ()
+ { return get_safe_base_mutex(this); }
+
+ void
+ _Safe_sequence_base::
+ _M_attach(_Safe_iterator_base* __it, bool __constant)
+ {
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ _M_attach_single(__it, __constant);
+ }
+
+ void
+ _Safe_sequence_base::
+ _M_attach_single(_Safe_iterator_base* __it, bool __constant) throw ()
+ {
+ _Safe_iterator_base*& __its =
+ __constant ? _M_const_iterators : _M_iterators;
+ __it->_M_next = __its;
+ if (__it->_M_next)
+ __it->_M_next->_M_prior = __it;
+ __its = __it;
+ }
+
+ void
+ _Safe_sequence_base::
+ _M_detach(_Safe_iterator_base* __it)
+ {
+ // Remove __it from this sequence's list
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ _M_detach_single(__it);
+ }
+
+ void
+ _Safe_sequence_base::
+ _M_detach_single(_Safe_iterator_base* __it) throw ()
+ {
+ // Remove __it from this sequence's list
+ __it->_M_unlink();
+ if (_M_const_iterators == __it)
+ _M_const_iterators = __it->_M_next;
+ if (_M_iterators == __it)
+ _M_iterators = __it->_M_next;
+ }
+
+ void
+ _Safe_iterator_base::
+ _M_attach(_Safe_sequence_base* __seq, bool __constant)
+ {
+ _M_detach();
+
+ // Attach to the new sequence (if there is one)
+ if (__seq)
+ {
+ _M_sequence = __seq;
+ _M_version = _M_sequence->_M_version;
+ _M_sequence->_M_attach(this, __constant);
+ }
+ }
+
+ void
+ _Safe_iterator_base::
+ _M_attach_single(_Safe_sequence_base* __seq, bool __constant) throw ()
+ {
+ _M_detach_single();
+
+ // Attach to the new sequence (if there is one)
+ if (__seq)
+ {
+ _M_sequence = __seq;
+ _M_version = _M_sequence->_M_version;
+ _M_sequence->_M_attach_single(this, __constant);
+ }
+ }
+
+ void
+ _Safe_iterator_base::
+ _M_detach()
+ {
+ if (_M_sequence)
+ _M_sequence->_M_detach(this);
+
+ _M_reset();
+ }
+
+ void
+ _Safe_iterator_base::
+ _M_detach_single() throw ()
+ {
+ if (_M_sequence)
+ _M_sequence->_M_detach_single(this);
+
+ _M_reset();
+ }
+
+ void
+ _Safe_iterator_base::
+ _M_reset() throw ()
+ {
+ _M_sequence = 0;
+ _M_version = 0;
+ _M_prior = 0;
+ _M_next = 0;
+ }
+
+ bool
+ _Safe_iterator_base::
+ _M_singular() const throw ()
+ { return !_M_sequence || _M_version != _M_sequence->_M_version; }
+
+ bool
+ _Safe_iterator_base::
+ _M_can_compare(const _Safe_iterator_base& __x) const throw ()
+ {
+ return (!_M_singular()
+ && !__x._M_singular() && _M_sequence == __x._M_sequence);
+ }
+
+ __gnu_cxx::__mutex&
+ _Safe_iterator_base::
+ _M_get_mutex() throw ()
+ { return get_safe_base_mutex(_M_sequence); }
+
+ _Safe_unordered_container_base*
+ _Safe_local_iterator_base::
+ _M_get_container() const _GLIBCXX_NOEXCEPT
+ { return static_cast<_Safe_unordered_container_base*>(_M_sequence); }
+
+ void
+ _Safe_local_iterator_base::
+ _M_attach(_Safe_sequence_base* __cont, bool __constant)
+ {
+ _M_detach();
+
+ // Attach to the new container (if there is one)
+ if (__cont)
+ {
+ _M_sequence = __cont;
+ _M_version = _M_sequence->_M_version;
+ _M_get_container()->_M_attach_local(this, __constant);
+ }
+ }
+
+ void
+ _Safe_local_iterator_base::
+ _M_attach_single(_Safe_sequence_base* __cont, bool __constant) throw ()
+ {
+ _M_detach_single();
+
+ // Attach to the new container (if there is one)
+ if (__cont)
+ {
+ _M_sequence = __cont;
+ _M_version = _M_sequence->_M_version;
+ _M_get_container()->_M_attach_local_single(this, __constant);
+ }
+ }
+
+ void
+ _Safe_local_iterator_base::
+ _M_detach()
+ {
+ if (_M_sequence)
+ _M_get_container()->_M_detach_local(this);
+
+ _M_reset();
+ }
+
+ void
+ _Safe_local_iterator_base::
+ _M_detach_single() throw ()
+ {
+ if (_M_sequence)
+ _M_get_container()->_M_detach_local_single(this);
+
+ _M_reset();
+ }
+
+ void
+ _Safe_unordered_container_base::
+ _M_detach_all()
+ {
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ detach_all(_M_iterators);
+ _M_iterators = 0;
+
+ detach_all(_M_const_iterators);
+ _M_const_iterators = 0;
+
+ detach_all(_M_local_iterators);
+ _M_local_iterators = 0;
+
+ detach_all(_M_const_local_iterators);
+ _M_const_local_iterators = 0;
+ }
+
+ void
+ _Safe_unordered_container_base::
+ _M_swap(_Safe_unordered_container_base& __x)
+ {
+ // We need to lock both containers to swap
+ using namespace __gnu_cxx;
+ __mutex *__this_mutex = &_M_get_mutex();
+ __mutex *__x_mutex = &__x._M_get_mutex();
+ if (__this_mutex == __x_mutex)
+ {
+ __scoped_lock __lock(*__this_mutex);
+ swap_ucont(*this, __x);
+ }
+ else
+ {
+ __scoped_lock __l1(__this_mutex < __x_mutex
+ ? *__this_mutex : *__x_mutex);
+ __scoped_lock __l2(__this_mutex < __x_mutex
+ ? *__x_mutex : *__this_mutex);
+ swap_ucont(*this, __x);
+ }
+ }
+
+ void
+ _Safe_unordered_container_base::
+ _M_attach_local(_Safe_iterator_base* __it, bool __constant)
+ {
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ _M_attach_local_single(__it, __constant);
+ }
+
+ void
+ _Safe_unordered_container_base::
+ _M_attach_local_single(_Safe_iterator_base* __it, bool __constant) throw ()
+ {
+ _Safe_iterator_base*& __its =
+ __constant ? _M_const_local_iterators : _M_local_iterators;
+ __it->_M_next = __its;
+ if (__it->_M_next)
+ __it->_M_next->_M_prior = __it;
+ __its = __it;
+ }
+
+ void
+ _Safe_unordered_container_base::
+ _M_detach_local(_Safe_iterator_base* __it)
+ {
+ // Remove __it from this container's list
+ __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
+ _M_detach_local_single(__it);
+ }
+
+ void
+ _Safe_unordered_container_base::
+ _M_detach_local_single(_Safe_iterator_base* __it) throw ()
+ {
+ // Remove __it from this container's list
+ __it->_M_unlink();
+ if (_M_const_local_iterators == __it)
+ _M_const_local_iterators = __it->_M_next;
+ if (_M_local_iterators == __it)
+ _M_local_iterators = __it->_M_next;
+ }
+
+ void
+ _Error_formatter::_Parameter::
+ _M_print_field(const _Error_formatter* __formatter, const char* __name) const
+ {
+ assert(this->_M_kind != _Parameter::__unused_param);
+ const int __bufsize = 64;
+ char __buf[__bufsize];
+
+ if (_M_kind == __iterator)
+ {
+ if (strcmp(__name, "name") == 0)
+ {
+ assert(_M_variant._M_iterator._M_name);
+ __formatter->_M_print_word(_M_variant._M_iterator._M_name);
+ }
+ else if (strcmp(__name, "address") == 0)
+ {
+ __formatter->_M_format_word(__buf, __bufsize, "%p",
+ _M_variant._M_iterator._M_address);
+ __formatter->_M_print_word(__buf);
+ }
+ else if (strcmp(__name, "type") == 0)
+ {
+ if (!_M_variant._M_iterator._M_type)
+ __formatter->_M_print_word("<unknown type>");
+ else
+ // TBD: demangle!
+ __formatter->_M_print_word(_M_variant._M_iterator.
+ _M_type->name());
+ }
+ else if (strcmp(__name, "constness") == 0)
+ {
+ static const char* __constness_names[__last_constness] =
+ {
+ "<unknown>",
+ "constant",
+ "mutable"
+ };
+ __formatter->_M_print_word(__constness_names[_M_variant.
+ _M_iterator.
+ _M_constness]);
+ }
+ else if (strcmp(__name, "state") == 0)
+ {
+ static const char* __state_names[__last_state] =
+ {
+ "<unknown>",
+ "singular",
+ "dereferenceable (start-of-sequence)",
+ "dereferenceable",
+ "past-the-end",
+ "before-begin"
+ };
+ __formatter->_M_print_word(__state_names[_M_variant.
+ _M_iterator._M_state]);
+ }
+ else if (strcmp(__name, "sequence") == 0)
+ {
+ assert(_M_variant._M_iterator._M_sequence);
+ __formatter->_M_format_word(__buf, __bufsize, "%p",
+ _M_variant._M_iterator._M_sequence);
+ __formatter->_M_print_word(__buf);
+ }
+ else if (strcmp(__name, "seq_type") == 0)
+ {
+ if (!_M_variant._M_iterator._M_seq_type)
+ __formatter->_M_print_word("<unknown seq_type>");
+ else
+ // TBD: demangle!
+ __formatter->_M_print_word(_M_variant._M_iterator.
+ _M_seq_type->name());
+ }
+ else
+ assert(false);
+ }
+ else if (_M_kind == __sequence)
+ {
+ if (strcmp(__name, "name") == 0)
+ {
+ assert(_M_variant._M_sequence._M_name);
+ __formatter->_M_print_word(_M_variant._M_sequence._M_name);
+ }
+ else if (strcmp(__name, "address") == 0)
+ {
+ assert(_M_variant._M_sequence._M_address);
+ __formatter->_M_format_word(__buf, __bufsize, "%p",
+ _M_variant._M_sequence._M_address);
+ __formatter->_M_print_word(__buf);
+ }
+ else if (strcmp(__name, "type") == 0)
+ {
+ if (!_M_variant._M_sequence._M_type)
+ __formatter->_M_print_word("<unknown type>");
+ else
+ // TBD: demangle!
+ __formatter->_M_print_word(_M_variant._M_sequence.
+ _M_type->name());
+ }
+ else
+ assert(false);
+ }
+ else if (_M_kind == __integer)
+ {
+ if (strcmp(__name, "name") == 0)
+ {
+ assert(_M_variant._M_integer._M_name);
+ __formatter->_M_print_word(_M_variant._M_integer._M_name);
+ }
+ else
+ assert(false);
+ }
+ else if (_M_kind == __string)
+ {
+ if (strcmp(__name, "name") == 0)
+ {
+ assert(_M_variant._M_string._M_name);
+ __formatter->_M_print_word(_M_variant._M_string._M_name);
+ }
+ else
+ assert(false);
+ }
+ else
+ {
+ assert(false);
+ }
+ }
+
+ void
+ _Error_formatter::_Parameter::
+ _M_print_description(const _Error_formatter* __formatter) const
+ {
+ const int __bufsize = 128;
+ char __buf[__bufsize];
+
+ if (_M_kind == __iterator)
+ {
+ __formatter->_M_print_word("iterator ");
+ if (_M_variant._M_iterator._M_name)
+ {
+ __formatter->_M_format_word(__buf, __bufsize, "\"%s\" ",
+ _M_variant._M_iterator._M_name);
+ __formatter->_M_print_word(__buf);
+ }
+
+ __formatter->_M_format_word(__buf, __bufsize, "@ 0x%p {\n",
+ _M_variant._M_iterator._M_address);
+ __formatter->_M_print_word(__buf);
+ if (_M_variant._M_iterator._M_type)
+ {
+ __formatter->_M_print_word("type = ");
+ _M_print_field(__formatter, "type");
+
+ if (_M_variant._M_iterator._M_constness != __unknown_constness)
+ {
+ __formatter->_M_print_word(" (");
+ _M_print_field(__formatter, "constness");
+ __formatter->_M_print_word(" iterator)");
+ }
+ __formatter->_M_print_word(";\n");
+ }
+
+ if (_M_variant._M_iterator._M_state != __unknown_state)
+ {
+ __formatter->_M_print_word(" state = ");
+ _M_print_field(__formatter, "state");
+ __formatter->_M_print_word(";\n");
+ }
+
+ if (_M_variant._M_iterator._M_sequence)
+ {
+ __formatter->_M_print_word(" references sequence ");
+ if (_M_variant._M_iterator._M_seq_type)
+ {
+ __formatter->_M_print_word("with type `");
+ _M_print_field(__formatter, "seq_type");
+ __formatter->_M_print_word("' ");
+ }
+
+ __formatter->_M_format_word(__buf, __bufsize, "@ 0x%p\n",
+ _M_variant._M_sequence._M_address);
+ __formatter->_M_print_word(__buf);
+ }
+ __formatter->_M_print_word("}\n");
+ }
+ else if (_M_kind == __sequence)
+ {
+ __formatter->_M_print_word("sequence ");
+ if (_M_variant._M_sequence._M_name)
+ {
+ __formatter->_M_format_word(__buf, __bufsize, "\"%s\" ",
+ _M_variant._M_sequence._M_name);
+ __formatter->_M_print_word(__buf);
+ }
+
+ __formatter->_M_format_word(__buf, __bufsize, "@ 0x%p {\n",
+ _M_variant._M_sequence._M_address);
+ __formatter->_M_print_word(__buf);
+
+ if (_M_variant._M_sequence._M_type)
+ {
+ __formatter->_M_print_word(" type = ");
+ _M_print_field(__formatter, "type");
+ __formatter->_M_print_word(";\n");
+ }
+ __formatter->_M_print_word("}\n");
+ }
+ }
+
+ const _Error_formatter&
+ _Error_formatter::_M_message(_Debug_msg_id __id) const throw ()
+ { return this->_M_message(_S_debug_messages[__id]); }
+
+ void
+ _Error_formatter::_M_error() const
+ {
+ const int __bufsize = 128;
+ char __buf[__bufsize];
+
+ // Emit file & line number information
+ _M_column = 1;
+ _M_wordwrap = false;
+ if (_M_file)
+ {
+ _M_format_word(__buf, __bufsize, "%s:", _M_file);
+ _M_print_word(__buf);
+ _M_column += strlen(__buf);
+ }
+
+ if (_M_line > 0)
+ {
+ _M_format_word(__buf, __bufsize, "%u:", _M_line);
+ _M_print_word(__buf);
+ _M_column += strlen(__buf);
+ }
+
+ if (_M_max_length)
+ _M_wordwrap = true;
+ _M_print_word("error: ");
+
+ // Print the error message
+ assert(_M_text);
+ _M_print_string(_M_text);
+ _M_print_word(".\n");
+
+ // Emit descriptions of the objects involved in the operation
+ _M_wordwrap = false;
+ bool __has_noninteger_parameters = false;
+ for (unsigned int __i = 0; __i < _M_num_parameters; ++__i)
+ {
+ if (_M_parameters[__i]._M_kind == _Parameter::__iterator
+ || _M_parameters[__i]._M_kind == _Parameter::__sequence)
+ {
+ if (!__has_noninteger_parameters)
+ {
+ _M_first_line = true;
+ _M_print_word("\nObjects involved in the operation:\n");
+ __has_noninteger_parameters = true;
+ }
+ _M_parameters[__i]._M_print_description(this);
+ }
+ }
+
+ abort();
+ }
+
+ template<typename _Tp>
+ void
+ _Error_formatter::_M_format_word(char* __buf,
+ int __n __attribute__ ((__unused__)),
+ const char* __fmt, _Tp __s) const throw ()
+ {
+#ifdef _GLIBCXX_USE_C99
+ std::snprintf(__buf, __n, __fmt, __s);
+#else
+ std::sprintf(__buf, __fmt, __s);
+#endif
+ }
+
+
+ void
+ _Error_formatter::_M_print_word(const char* __word) const
+ {
+ if (!_M_wordwrap)
+ {
+ fprintf(stderr, "%s", __word);
+ return;
+ }
+
+ size_t __length = strlen(__word);
+ if (__length == 0)
+ return;
+
+ if ((_M_column + __length < _M_max_length)
+ || (__length >= _M_max_length && _M_column == 1))
+ {
+ // If this isn't the first line, indent
+ if (_M_column == 1 && !_M_first_line)
+ {
+ char __spacing[_M_indent + 1];
+ for (int i = 0; i < _M_indent; ++i)
+ __spacing[i] = ' ';
+ __spacing[_M_indent] = '\0';
+ fprintf(stderr, "%s", __spacing);
+ _M_column += _M_indent;
+ }
+
+ fprintf(stderr, "%s", __word);
+ _M_column += __length;
+
+ if (__word[__length - 1] == '\n')
+ {
+ _M_first_line = false;
+ _M_column = 1;
+ }
+ }
+ else
+ {
+ _M_column = 1;
+ _M_print_word("\n");
+ _M_print_word(__word);
+ }
+ }
+
+ void
+ _Error_formatter::
+ _M_print_string(const char* __string) const
+ {
+ const char* __start = __string;
+ const char* __finish = __start;
+ const int __bufsize = 128;
+ char __buf[__bufsize];
+
+ while (*__start)
+ {
+ if (*__start != '%')
+ {
+ // [__start, __finish) denotes the next word
+ __finish = __start;
+ while (isalnum(*__finish))
+ ++__finish;
+ if (__start == __finish)
+ ++__finish;
+ if (isspace(*__finish))
+ ++__finish;
+
+ const ptrdiff_t __len = __finish - __start;
+ assert(__len < __bufsize);
+ memcpy(__buf, __start, __len);
+ __buf[__len] = '\0';
+ _M_print_word(__buf);
+ __start = __finish;
+
+ // Skip extra whitespace
+ while (*__start == ' ')
+ ++__start;
+
+ continue;
+ }
+
+ ++__start;
+ assert(*__start);
+ if (*__start == '%')
+ {
+ _M_print_word("%");
+ ++__start;
+ continue;
+ }
+
+ // Get the parameter number
+ assert(*__start >= '1' && *__start <= '9');
+ size_t __param = *__start - '0';
+ --__param;
+ assert(__param < _M_num_parameters);
+
+ // '.' separates the parameter number from the field
+ // name, if there is one.
+ ++__start;
+ if (*__start != '.')
+ {
+ assert(*__start == ';');
+ ++__start;
+ __buf[0] = '\0';
+ if (_M_parameters[__param]._M_kind == _Parameter::__integer)
+ {
+ _M_format_word(__buf, __bufsize, "%ld",
+ _M_parameters[__param]._M_variant._M_integer._M_value);
+ _M_print_word(__buf);
+ }
+ else if (_M_parameters[__param]._M_kind == _Parameter::__string)
+ _M_print_string(_M_parameters[__param]._M_variant._M_string._M_value);
+ continue;
+ }
+
+ // Extract the field name we want
+ enum { __max_field_len = 16 };
+ char __field[__max_field_len];
+ int __field_idx = 0;
+ ++__start;
+ while (*__start != ';')
+ {
+ assert(*__start);
+ assert(__field_idx < __max_field_len-1);
+ __field[__field_idx++] = *__start++;
+ }
+ ++__start;
+ __field[__field_idx] = 0;
+
+ _M_parameters[__param]._M_print_field(this, __field);
+ }
+ }
+
+ void
+ _Error_formatter::_M_get_max_length() const throw ()
+ {
+ const char* __nptr = std::getenv("GLIBCXX_DEBUG_MESSAGE_LENGTH");
+ if (__nptr)
+ {
+ char* __endptr;
+ const unsigned long __ret = std::strtoul(__nptr, &__endptr, 0);
+ if (*__nptr != '\0' && *__endptr == '\0')
+ _M_max_length = __ret;
+ }
+ }
+
+ // Instantiations.
+ template
+ void
+ _Error_formatter::_M_format_word(char*, int, const char*,
+ const void*) const;
+
+ template
+ void
+ _Error_formatter::_M_format_word(char*, int, const char*, long) const;
+
+ template
+ void
+ _Error_formatter::_M_format_word(char*, int, const char*,
+ std::size_t) const;
+
+ template
+ void
+ _Error_formatter::_M_format_word(char*, int, const char*,
+ const char*) const;
+} // namespace __gnu_debug
diff --git a/libstdc++-v3/src/fstream-inst.cc b/libstdc++-v3/src/c++11/fstream-inst.cc
index cd7a6cd454..cd7a6cd454 100644
--- a/libstdc++-v3/src/fstream-inst.cc
+++ b/libstdc++-v3/src/c++11/fstream-inst.cc
diff --git a/libstdc++-v3/src/functexcept.cc b/libstdc++-v3/src/c++11/functexcept.cc
index 2fe14d532e..2fe14d532e 100644
--- a/libstdc++-v3/src/functexcept.cc
+++ b/libstdc++-v3/src/c++11/functexcept.cc
diff --git a/libstdc++-v3/src/functional.cc b/libstdc++-v3/src/c++11/functional.cc
index 2ab3405143..2ab3405143 100644
--- a/libstdc++-v3/src/functional.cc
+++ b/libstdc++-v3/src/c++11/functional.cc
diff --git a/libstdc++-v3/src/c++11/future.cc b/libstdc++-v3/src/c++11/future.cc
new file mode 100644
index 0000000000..0552537261
--- /dev/null
+++ b/libstdc++-v3/src/c++11/future.cc
@@ -0,0 +1,90 @@
+// future -*- C++ -*-
+
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <future>
+
+namespace
+{
+ struct future_error_category : public std::error_category
+ {
+ virtual const char*
+ name() const noexcept
+ { return "future"; }
+
+ virtual std::string message(int __ec) const
+ {
+ std::string __msg;
+ switch (std::future_errc(__ec))
+ {
+ case std::future_errc::broken_promise:
+ __msg = "Broken promise";
+ break;
+ case std::future_errc::future_already_retrieved:
+ __msg = "Future already retrieved";
+ break;
+ case std::future_errc::promise_already_satisfied:
+ __msg = "Promise already satisfied";
+ break;
+ case std::future_errc::no_state:
+ __msg = "No associated state";
+ break;
+ default:
+ __msg = "Unknown error";
+ break;
+ }
+ return __msg;
+ }
+ };
+
+ const future_error_category&
+ __future_category_instance() noexcept
+ {
+ static const future_error_category __fec;
+ return __fec;
+ }
+}
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ const error_category& future_category() noexcept
+ { return __future_category_instance(); }
+
+ future_error::~future_error() noexcept { }
+
+ const char*
+ future_error::what() const noexcept { return _M_code.message().c_str(); }
+
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
+ && (ATOMIC_INT_LOCK_FREE > 1)
+ __future_base::_Result_base::_Result_base() = default;
+
+ __future_base::_Result_base::~_Result_base() = default;
+
+ __future_base::_State_base::~_State_base() = default;
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
diff --git a/libstdc++-v3/src/c++11/hash_c++0x.cc b/libstdc++-v3/src/c++11/hash_c++0x.cc
new file mode 100644
index 0000000000..d685074540
--- /dev/null
+++ b/libstdc++-v3/src/c++11/hash_c++0x.cc
@@ -0,0 +1,56 @@
+// std::hash definitions -*- C++ -*-
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# error "hash_c++0x.cc must be compiled with -std=gnu++0x"
+#endif
+
+#include <bits/functional_hash.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ _GLIBCXX_PURE size_t
+ hash<long double>::operator()(long double __val) const noexcept
+ {
+ // 0 and -0 both hash to zero.
+ if (__val == 0.0L)
+ return 0;
+
+ int __exponent;
+ __val = __builtin_frexpl(__val, &__exponent);
+ __val = __val < 0.0l ? -(__val + 0.5l) : __val;
+
+ const long double __mult = __SIZE_MAX__ + 1.0l;
+ __val *= __mult;
+
+ // Try to use all the bits of the mantissa (really necessary only
+ // on 32-bit targets, at least for 80-bit floating point formats).
+ const size_t __hibits = (size_t)__val;
+ __val = (__val - (long double)__hibits) * __mult;
+
+ const size_t __coeff = __SIZE_MAX__ / __LDBL_MAX_EXP__;
+
+ return __hibits + (size_t)__val + __coeff * __exponent;
+ }
+}
diff --git a/libstdc++-v3/src/c++11/hashtable_c++0x.cc b/libstdc++-v3/src/c++11/hashtable_c++0x.cc
new file mode 100644
index 0000000000..2bf55082cd
--- /dev/null
+++ b/libstdc++-v3/src/c++11/hashtable_c++0x.cc
@@ -0,0 +1,34 @@
+// std::__detail definitions -*- C++ -*-
+
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <bits/c++config.h>
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# error "hashtable_c++0x.cc must be compiled with -std=gnu++0x"
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+#include "../shared/hashtable-aux.cc"
+} // namespace // namespace std
diff --git a/libstdc++-v3/src/c++11/limits.cc b/libstdc++-v3/src/c++11/limits.cc
new file mode 100644
index 0000000000..cc6acc21ea
--- /dev/null
+++ b/libstdc++-v3/src/c++11/limits.cc
@@ -0,0 +1,601 @@
+// Static data members of -*- C++ -*- numeric_limits classes
+
+// Copyright (C) 1999, 2001, 2002, 2005, 2006, 2009, 2010, 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
+
+//
+// ISO C++ 14882:1998
+// 18.2.1
+//
+
+#include <limits>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define const _GLIBCXX_USE_CONSTEXPR
+
+ const bool __numeric_limits_base::is_specialized;
+ const int __numeric_limits_base::digits;
+ const int __numeric_limits_base::digits10;
+ const int __numeric_limits_base::max_digits10;
+ const bool __numeric_limits_base::is_signed;
+ const bool __numeric_limits_base::is_integer;
+ const bool __numeric_limits_base::is_exact;
+ const int __numeric_limits_base::radix;
+ const int __numeric_limits_base::min_exponent;
+ const int __numeric_limits_base::min_exponent10;
+ const int __numeric_limits_base::max_exponent;
+ const int __numeric_limits_base::max_exponent10;
+ const bool __numeric_limits_base::has_infinity;
+ const bool __numeric_limits_base::has_quiet_NaN;
+ const bool __numeric_limits_base::has_signaling_NaN;
+ const float_denorm_style __numeric_limits_base::has_denorm;
+ const bool __numeric_limits_base::has_denorm_loss;
+ const bool __numeric_limits_base::is_iec559;
+ const bool __numeric_limits_base::is_bounded;
+ const bool __numeric_limits_base::is_modulo;
+ const bool __numeric_limits_base::traps;
+ const bool __numeric_limits_base::tinyness_before;
+ const float_round_style __numeric_limits_base::round_style;
+
+ // bool
+ const bool numeric_limits<bool>::is_specialized;
+ const int numeric_limits<bool>::digits;
+ const int numeric_limits<bool>::digits10;
+ const int numeric_limits<bool>::max_digits10;
+ const bool numeric_limits<bool>::is_signed;
+ const bool numeric_limits<bool>::is_integer;
+ const bool numeric_limits<bool>::is_exact;
+ const int numeric_limits<bool>::radix;
+ const int numeric_limits<bool>::min_exponent;
+ const int numeric_limits<bool>::min_exponent10;
+ const int numeric_limits<bool>::max_exponent;
+ const int numeric_limits<bool>::max_exponent10;
+ const bool numeric_limits<bool>::has_infinity;
+ const bool numeric_limits<bool>::has_quiet_NaN;
+ const bool numeric_limits<bool>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<bool>::has_denorm;
+ const bool numeric_limits<bool>::has_denorm_loss;
+ const bool numeric_limits<bool>::is_iec559;
+ const bool numeric_limits<bool>::is_bounded;
+ const bool numeric_limits<bool>::is_modulo;
+ const bool numeric_limits<bool>::traps;
+ const bool numeric_limits<bool>::tinyness_before;
+ const float_round_style numeric_limits<bool>::round_style;
+
+ // char
+ const bool numeric_limits<char>::is_specialized;
+ const int numeric_limits<char>::digits;
+ const int numeric_limits<char>::digits10;
+ const int numeric_limits<char>::max_digits10;
+ const bool numeric_limits<char>::is_signed;
+ const bool numeric_limits<char>::is_integer;
+ const bool numeric_limits<char>::is_exact;
+ const int numeric_limits<char>::radix;
+ const int numeric_limits<char>::min_exponent;
+ const int numeric_limits<char>::min_exponent10;
+ const int numeric_limits<char>::max_exponent;
+ const int numeric_limits<char>::max_exponent10;
+ const bool numeric_limits<char>::has_infinity;
+ const bool numeric_limits<char>::has_quiet_NaN;
+ const bool numeric_limits<char>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<char>::has_denorm;
+ const bool numeric_limits<char>::has_denorm_loss;
+ const bool numeric_limits<char>::is_iec559;
+ const bool numeric_limits<char>::is_bounded;
+ const bool numeric_limits<char>::is_modulo;
+ const bool numeric_limits<char>::traps;
+ const bool numeric_limits<char>::tinyness_before;
+ const float_round_style numeric_limits<char>::round_style;
+
+ // signed char
+ const bool numeric_limits<signed char>::is_specialized;
+ const int numeric_limits<signed char>::digits;
+ const int numeric_limits<signed char>::digits10;
+ const int numeric_limits<signed char>::max_digits10;
+ const bool numeric_limits<signed char>::is_signed;
+ const bool numeric_limits<signed char>::is_integer;
+ const bool numeric_limits<signed char>::is_exact;
+ const int numeric_limits<signed char>::radix;
+ const int numeric_limits<signed char>::min_exponent;
+ const int numeric_limits<signed char>::min_exponent10;
+ const int numeric_limits<signed char>::max_exponent;
+ const int numeric_limits<signed char>::max_exponent10;
+ const bool numeric_limits<signed char>::has_infinity;
+ const bool numeric_limits<signed char>::has_quiet_NaN;
+ const bool numeric_limits<signed char>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<signed char>::has_denorm;
+ const bool numeric_limits<signed char>::has_denorm_loss;
+ const bool numeric_limits<signed char>::is_iec559;
+ const bool numeric_limits<signed char>::is_bounded;
+ const bool numeric_limits<signed char>::is_modulo;
+ const bool numeric_limits<signed char>::traps;
+ const bool numeric_limits<signed char>::tinyness_before;
+ const float_round_style numeric_limits<signed char>::round_style;
+
+ // unsigned char
+ const bool numeric_limits<unsigned char>::is_specialized;
+ const int numeric_limits<unsigned char>::digits;
+ const int numeric_limits<unsigned char>::digits10;
+ const int numeric_limits<unsigned char>::max_digits10;
+ const bool numeric_limits<unsigned char>::is_signed;
+ const bool numeric_limits<unsigned char>::is_integer;
+ const bool numeric_limits<unsigned char>::is_exact;
+ const int numeric_limits<unsigned char>::radix;
+ const int numeric_limits<unsigned char>::min_exponent;
+ const int numeric_limits<unsigned char>::min_exponent10;
+ const int numeric_limits<unsigned char>::max_exponent;
+ const int numeric_limits<unsigned char>::max_exponent10;
+ const bool numeric_limits<unsigned char>::has_infinity;
+ const bool numeric_limits<unsigned char>::has_quiet_NaN;
+ const bool numeric_limits<unsigned char>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<unsigned char>::has_denorm;
+ const bool numeric_limits<unsigned char>::has_denorm_loss;
+ const bool numeric_limits<unsigned char>::is_iec559;
+ const bool numeric_limits<unsigned char>::is_bounded;
+ const bool numeric_limits<unsigned char>::is_modulo;
+ const bool numeric_limits<unsigned char>::traps;
+ const bool numeric_limits<unsigned char>::tinyness_before;
+ const float_round_style numeric_limits<unsigned char>::round_style;
+
+ // wchar_t
+ // This used to be problematic...
+#ifdef _GLIBCXX_USE_WCHAR_T
+ const bool numeric_limits<wchar_t>::is_specialized;
+ const int numeric_limits<wchar_t>::digits;
+ const int numeric_limits<wchar_t>::digits10;
+ const int numeric_limits<wchar_t>::max_digits10;
+ const bool numeric_limits<wchar_t>::is_signed;
+ const bool numeric_limits<wchar_t>::is_integer;
+ const bool numeric_limits<wchar_t>::is_exact;
+ const int numeric_limits<wchar_t>::radix;
+ const int numeric_limits<wchar_t>::min_exponent;
+ const int numeric_limits<wchar_t>::min_exponent10;
+ const int numeric_limits<wchar_t>::max_exponent;
+ const int numeric_limits<wchar_t>::max_exponent10;
+ const bool numeric_limits<wchar_t>::has_infinity;
+ const bool numeric_limits<wchar_t>::has_quiet_NaN;
+ const bool numeric_limits<wchar_t>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<wchar_t>::has_denorm;
+ const bool numeric_limits<wchar_t>::has_denorm_loss;
+ const bool numeric_limits<wchar_t>::is_iec559;
+ const bool numeric_limits<wchar_t>::is_bounded;
+ const bool numeric_limits<wchar_t>::is_modulo;
+ const bool numeric_limits<wchar_t>::traps;
+ const bool numeric_limits<wchar_t>::tinyness_before;
+ const float_round_style numeric_limits<wchar_t>::round_style;
+#endif // _GLIBCXX_USE_WCHAR_T
+
+ // short
+ const bool numeric_limits<short>::is_specialized;
+ const int numeric_limits<short>::digits;
+ const int numeric_limits<short>::digits10;
+ const int numeric_limits<short>::max_digits10;
+ const bool numeric_limits<short>::is_signed;
+ const bool numeric_limits<short>::is_integer;
+ const bool numeric_limits<short>::is_exact;
+ const int numeric_limits<short>::radix;
+ const int numeric_limits<short>::min_exponent;
+ const int numeric_limits<short>::min_exponent10;
+ const int numeric_limits<short>::max_exponent;
+ const int numeric_limits<short>::max_exponent10;
+ const bool numeric_limits<short>::has_infinity;
+ const bool numeric_limits<short>::has_quiet_NaN;
+ const bool numeric_limits<short>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<short>::has_denorm;
+ const bool numeric_limits<short>::has_denorm_loss;
+ const bool numeric_limits<short>::is_iec559;
+ const bool numeric_limits<short>::is_bounded;
+ const bool numeric_limits<short>::is_modulo;
+ const bool numeric_limits<short>::traps;
+ const bool numeric_limits<short>::tinyness_before;
+ const float_round_style numeric_limits<short>::round_style;
+
+ // unsigned short
+ const bool numeric_limits<unsigned short>::is_specialized;
+ const int numeric_limits<unsigned short>::digits;
+ const int numeric_limits<unsigned short>::digits10;
+ const int numeric_limits<unsigned short>::max_digits10;
+ const bool numeric_limits<unsigned short>::is_signed;
+ const bool numeric_limits<unsigned short>::is_integer;
+ const bool numeric_limits<unsigned short>::is_exact;
+ const int numeric_limits<unsigned short>::radix;
+ const int numeric_limits<unsigned short>::min_exponent;
+ const int numeric_limits<unsigned short>::min_exponent10;
+ const int numeric_limits<unsigned short>::max_exponent;
+ const int numeric_limits<unsigned short>::max_exponent10;
+ const bool numeric_limits<unsigned short>::has_infinity;
+ const bool numeric_limits<unsigned short>::has_quiet_NaN;
+ const bool numeric_limits<unsigned short>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<unsigned short>::has_denorm;
+ const bool numeric_limits<unsigned short>::has_denorm_loss;
+ const bool numeric_limits<unsigned short>::is_iec559;
+ const bool numeric_limits<unsigned short>::is_bounded;
+ const bool numeric_limits<unsigned short>::is_modulo;
+ const bool numeric_limits<unsigned short>::traps;
+ const bool numeric_limits<unsigned short>::tinyness_before;
+ const float_round_style numeric_limits<unsigned short>::round_style;
+
+ // int
+ const bool numeric_limits<int>::is_specialized;
+ const int numeric_limits<int>::digits;
+ const int numeric_limits<int>::digits10;
+ const int numeric_limits<int>::max_digits10;
+ const bool numeric_limits<int>::is_signed;
+ const bool numeric_limits<int>::is_integer;
+ const bool numeric_limits<int>::is_exact;
+ const int numeric_limits<int>::radix;
+ const int numeric_limits<int>::min_exponent;
+ const int numeric_limits<int>::min_exponent10;
+ const int numeric_limits<int>::max_exponent;
+ const int numeric_limits<int>::max_exponent10;
+ const bool numeric_limits<int>::has_infinity;
+ const bool numeric_limits<int>::has_quiet_NaN;
+ const bool numeric_limits<int>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<int>::has_denorm;
+ const bool numeric_limits<int>::has_denorm_loss;
+ const bool numeric_limits<int>::is_iec559;
+ const bool numeric_limits<int>::is_bounded;
+ const bool numeric_limits<int>::is_modulo;
+ const bool numeric_limits<int>::traps;
+ const bool numeric_limits<int>::tinyness_before;
+ const float_round_style numeric_limits<int>::round_style;
+
+ // unsigned int
+ const bool numeric_limits<unsigned int>::is_specialized;
+ const int numeric_limits<unsigned int>::digits;
+ const int numeric_limits<unsigned int>::digits10;
+ const int numeric_limits<unsigned int>::max_digits10;
+ const bool numeric_limits<unsigned int>::is_signed;
+ const bool numeric_limits<unsigned int>::is_integer;
+ const bool numeric_limits<unsigned int>::is_exact;
+ const int numeric_limits<unsigned int>::radix;
+ const int numeric_limits<unsigned int>::min_exponent;
+ const int numeric_limits<unsigned int>::min_exponent10;
+ const int numeric_limits<unsigned int>::max_exponent;
+ const int numeric_limits<unsigned int>::max_exponent10;
+ const bool numeric_limits<unsigned int>::has_infinity;
+ const bool numeric_limits<unsigned int>::has_quiet_NaN;
+ const bool numeric_limits<unsigned int>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<unsigned int>::has_denorm;
+ const bool numeric_limits<unsigned int>::has_denorm_loss;
+ const bool numeric_limits<unsigned int>::is_iec559;
+ const bool numeric_limits<unsigned int>::is_bounded;
+ const bool numeric_limits<unsigned int>::is_modulo;
+ const bool numeric_limits<unsigned int>::traps;
+ const bool numeric_limits<unsigned int>::tinyness_before;
+ const float_round_style numeric_limits<unsigned int>::round_style;
+
+ // long
+ const bool numeric_limits<long>::is_specialized;
+ const int numeric_limits<long>::digits;
+ const int numeric_limits<long>::digits10;
+ const int numeric_limits<long>::max_digits10;
+ const bool numeric_limits<long>::is_signed;
+ const bool numeric_limits<long>::is_integer;
+ const bool numeric_limits<long>::is_exact;
+ const int numeric_limits<long>::radix;
+ const int numeric_limits<long>::min_exponent;
+ const int numeric_limits<long>::min_exponent10;
+ const int numeric_limits<long>::max_exponent;
+ const int numeric_limits<long>::max_exponent10;
+ const bool numeric_limits<long>::has_infinity;
+ const bool numeric_limits<long>::has_quiet_NaN;
+ const bool numeric_limits<long>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<long>::has_denorm;
+ const bool numeric_limits<long>::has_denorm_loss;
+ const bool numeric_limits<long>::is_iec559;
+ const bool numeric_limits<long>::is_bounded;
+ const bool numeric_limits<long>::is_modulo;
+ const bool numeric_limits<long>::traps;
+ const bool numeric_limits<long>::tinyness_before;
+ const float_round_style numeric_limits<long>::round_style;
+
+ // unsigned long
+ const bool numeric_limits<unsigned long>::is_specialized;
+ const int numeric_limits<unsigned long>::digits;
+ const int numeric_limits<unsigned long>::digits10;
+ const int numeric_limits<unsigned long>::max_digits10;
+ const bool numeric_limits<unsigned long>::is_signed;
+ const bool numeric_limits<unsigned long>::is_integer;
+ const bool numeric_limits<unsigned long>::is_exact;
+ const int numeric_limits<unsigned long>::radix;
+ const int numeric_limits<unsigned long>::min_exponent;
+ const int numeric_limits<unsigned long>::min_exponent10;
+ const int numeric_limits<unsigned long>::max_exponent;
+ const int numeric_limits<unsigned long>::max_exponent10;
+ const bool numeric_limits<unsigned long>::has_infinity;
+ const bool numeric_limits<unsigned long>::has_quiet_NaN;
+ const bool numeric_limits<unsigned long>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<unsigned long>::has_denorm;
+ const bool numeric_limits<unsigned long>::has_denorm_loss;
+ const bool numeric_limits<unsigned long>::is_iec559;
+ const bool numeric_limits<unsigned long>::is_bounded;
+ const bool numeric_limits<unsigned long>::is_modulo;
+ const bool numeric_limits<unsigned long>::traps;
+ const bool numeric_limits<unsigned long>::tinyness_before;
+ const float_round_style numeric_limits<unsigned long>::round_style;
+
+ // NOTA BENE: long long is an extension
+ const bool numeric_limits<long long>::is_specialized;
+ const int numeric_limits<long long>::digits;
+ const int numeric_limits<long long>::digits10;
+ const int numeric_limits<long long>::max_digits10;
+ const bool numeric_limits<long long>::is_signed;
+ const bool numeric_limits<long long>::is_integer;
+ const bool numeric_limits<long long>::is_exact;
+ const int numeric_limits<long long>::radix;
+ const int numeric_limits<long long>::min_exponent;
+ const int numeric_limits<long long>::min_exponent10;
+ const int numeric_limits<long long>::max_exponent;
+ const int numeric_limits<long long>::max_exponent10;
+ const bool numeric_limits<long long>::has_infinity;
+ const bool numeric_limits<long long>::has_quiet_NaN;
+ const bool numeric_limits<long long>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<long long>::has_denorm;
+ const bool numeric_limits<long long>::has_denorm_loss;
+ const bool numeric_limits<long long>::is_iec559;
+ const bool numeric_limits<long long>::is_bounded;
+ const bool numeric_limits<long long>::is_modulo;
+ const bool numeric_limits<long long>::traps;
+ const bool numeric_limits<long long>::tinyness_before;
+ const float_round_style numeric_limits<long long>::round_style;
+
+ const bool numeric_limits<unsigned long long>::is_specialized;
+ const int numeric_limits<unsigned long long>::digits;
+ const int numeric_limits<unsigned long long>::digits10;
+ const int numeric_limits<unsigned long long>::max_digits10;
+ const bool numeric_limits<unsigned long long>::is_signed;
+ const bool numeric_limits<unsigned long long>::is_integer;
+ const bool numeric_limits<unsigned long long>::is_exact;
+ const int numeric_limits<unsigned long long>::radix;
+ const int numeric_limits<unsigned long long>::min_exponent;
+ const int numeric_limits<unsigned long long>::min_exponent10;
+ const int numeric_limits<unsigned long long>::max_exponent;
+ const int numeric_limits<unsigned long long>::max_exponent10;
+ const bool numeric_limits<unsigned long long>::has_infinity;
+ const bool numeric_limits<unsigned long long>::has_quiet_NaN;
+ const bool numeric_limits<unsigned long long>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<unsigned long long>::has_denorm;
+ const bool numeric_limits<unsigned long long>::has_denorm_loss;
+ const bool numeric_limits<unsigned long long>::is_iec559;
+ const bool numeric_limits<unsigned long long>::is_bounded;
+ const bool numeric_limits<unsigned long long>::is_modulo;
+ const bool numeric_limits<unsigned long long>::traps;
+ const bool numeric_limits<unsigned long long>::tinyness_before;
+ const float_round_style numeric_limits<unsigned long long>::round_style;
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ const bool numeric_limits<__int128>::is_specialized;
+ const int numeric_limits<__int128>::digits;
+ const int numeric_limits<__int128>::digits10;
+ const int numeric_limits<__int128>::max_digits10;
+ const bool numeric_limits<__int128>::is_signed;
+ const bool numeric_limits<__int128>::is_integer;
+ const bool numeric_limits<__int128>::is_exact;
+ const int numeric_limits<__int128>::radix;
+ const int numeric_limits<__int128>::min_exponent;
+ const int numeric_limits<__int128>::min_exponent10;
+ const int numeric_limits<__int128>::max_exponent;
+ const int numeric_limits<__int128>::max_exponent10;
+ const bool numeric_limits<__int128>::has_infinity;
+ const bool numeric_limits<__int128>::has_quiet_NaN;
+ const bool numeric_limits<__int128>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<__int128>::has_denorm;
+ const bool numeric_limits<__int128>::has_denorm_loss;
+ const bool numeric_limits<__int128>::is_iec559;
+ const bool numeric_limits<__int128>::is_bounded;
+ const bool numeric_limits<__int128>::is_modulo;
+ const bool numeric_limits<__int128>::traps;
+ const bool numeric_limits<__int128>::tinyness_before;
+ const float_round_style numeric_limits<__int128>::round_style;
+
+ const bool numeric_limits<unsigned __int128>::is_specialized;
+ const int numeric_limits<unsigned __int128>::digits;
+ const int numeric_limits<unsigned __int128>::digits10;
+ const int numeric_limits<unsigned __int128>::max_digits10;
+ const bool numeric_limits<unsigned __int128>::is_signed;
+ const bool numeric_limits<unsigned __int128>::is_integer;
+ const bool numeric_limits<unsigned __int128>::is_exact;
+ const int numeric_limits<unsigned __int128>::radix;
+ const int numeric_limits<unsigned __int128>::min_exponent;
+ const int numeric_limits<unsigned __int128>::min_exponent10;
+ const int numeric_limits<unsigned __int128>::max_exponent;
+ const int numeric_limits<unsigned __int128>::max_exponent10;
+ const bool numeric_limits<unsigned __int128>::has_infinity;
+ const bool numeric_limits<unsigned __int128>::has_quiet_NaN;
+ const bool numeric_limits<unsigned __int128>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<unsigned __int128>::has_denorm;
+ const bool numeric_limits<unsigned __int128>::has_denorm_loss;
+ const bool numeric_limits<unsigned __int128>::is_iec559;
+ const bool numeric_limits<unsigned __int128>::is_bounded;
+ const bool numeric_limits<unsigned __int128>::is_modulo;
+ const bool numeric_limits<unsigned __int128>::traps;
+ const bool numeric_limits<unsigned __int128>::tinyness_before;
+ const float_round_style numeric_limits<unsigned __int128>::round_style;
+#endif
+
+ // float
+ const bool numeric_limits<float>::is_specialized;
+ const int numeric_limits<float>::digits;
+ const int numeric_limits<float>::digits10;
+ const int numeric_limits<float>::max_digits10;
+ const bool numeric_limits<float>::is_signed;
+ const bool numeric_limits<float>::is_integer;
+ const bool numeric_limits<float>::is_exact;
+ const int numeric_limits<float>::radix;
+ const int numeric_limits<float>::min_exponent;
+ const int numeric_limits<float>::min_exponent10;
+ const int numeric_limits<float>::max_exponent;
+ const int numeric_limits<float>::max_exponent10;
+ const bool numeric_limits<float>::has_infinity;
+ const bool numeric_limits<float>::has_quiet_NaN;
+ const bool numeric_limits<float>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<float>::has_denorm;
+ const bool numeric_limits<float>::has_denorm_loss;
+ const bool numeric_limits<float>::is_iec559;
+ const bool numeric_limits<float>::is_bounded;
+ const bool numeric_limits<float>::is_modulo;
+ const bool numeric_limits<float>::traps;
+ const bool numeric_limits<float>::tinyness_before;
+ const float_round_style numeric_limits<float>::round_style;
+
+ // double
+ const bool numeric_limits<double>::is_specialized;
+ const int numeric_limits<double>::digits;
+ const int numeric_limits<double>::digits10;
+ const int numeric_limits<double>::max_digits10;
+ const bool numeric_limits<double>::is_signed;
+ const bool numeric_limits<double>::is_integer;
+ const bool numeric_limits<double>::is_exact;
+ const int numeric_limits<double>::radix;
+ const int numeric_limits<double>::min_exponent;
+ const int numeric_limits<double>::min_exponent10;
+ const int numeric_limits<double>::max_exponent;
+ const int numeric_limits<double>::max_exponent10;
+ const bool numeric_limits<double>::has_infinity;
+ const bool numeric_limits<double>::has_quiet_NaN;
+ const bool numeric_limits<double>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<double>::has_denorm;
+ const bool numeric_limits<double>::has_denorm_loss;
+ const bool numeric_limits<double>::is_iec559;
+ const bool numeric_limits<double>::is_bounded;
+ const bool numeric_limits<double>::is_modulo;
+ const bool numeric_limits<double>::traps;
+ const bool numeric_limits<double>::tinyness_before;
+ const float_round_style numeric_limits<double>::round_style;
+
+ // long double
+ const bool numeric_limits<long double>::is_specialized;
+ const int numeric_limits<long double>::digits;
+ const int numeric_limits<long double>::digits10;
+ const int numeric_limits<long double>::max_digits10;
+ const bool numeric_limits<long double>::is_signed;
+ const bool numeric_limits<long double>::is_integer;
+ const bool numeric_limits<long double>::is_exact;
+ const int numeric_limits<long double>::radix;
+ const int numeric_limits<long double>::min_exponent;
+ const int numeric_limits<long double>::min_exponent10;
+ const int numeric_limits<long double>::max_exponent;
+ const int numeric_limits<long double>::max_exponent10;
+ const bool numeric_limits<long double>::has_infinity;
+ const bool numeric_limits<long double>::has_quiet_NaN;
+ const bool numeric_limits<long double>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<long double>::has_denorm;
+ const bool numeric_limits<long double>::has_denorm_loss;
+ const bool numeric_limits<long double>::is_iec559;
+ const bool numeric_limits<long double>::is_bounded;
+ const bool numeric_limits<long double>::is_modulo;
+ const bool numeric_limits<long double>::traps;
+ const bool numeric_limits<long double>::tinyness_before;
+ const float_round_style numeric_limits<long double>::round_style;
+
+ // char16_t
+ const bool numeric_limits<char16_t>::is_specialized;
+ const int numeric_limits<char16_t>::digits;
+ const int numeric_limits<char16_t>::digits10;
+ const int numeric_limits<char16_t>::max_digits10;
+ const bool numeric_limits<char16_t>::is_signed;
+ const bool numeric_limits<char16_t>::is_integer;
+ const bool numeric_limits<char16_t>::is_exact;
+ const int numeric_limits<char16_t>::radix;
+ const int numeric_limits<char16_t>::min_exponent;
+ const int numeric_limits<char16_t>::min_exponent10;
+ const int numeric_limits<char16_t>::max_exponent;
+ const int numeric_limits<char16_t>::max_exponent10;
+ const bool numeric_limits<char16_t>::has_infinity;
+ const bool numeric_limits<char16_t>::has_quiet_NaN;
+ const bool numeric_limits<char16_t>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<char16_t>::has_denorm;
+ const bool numeric_limits<char16_t>::has_denorm_loss;
+ const bool numeric_limits<char16_t>::is_iec559;
+ const bool numeric_limits<char16_t>::is_bounded;
+ const bool numeric_limits<char16_t>::is_modulo;
+ const bool numeric_limits<char16_t>::traps;
+ const bool numeric_limits<char16_t>::tinyness_before;
+ const float_round_style numeric_limits<char16_t>::round_style;
+
+ // char32_t
+ const bool numeric_limits<char32_t>::is_specialized;
+ const int numeric_limits<char32_t>::digits;
+ const int numeric_limits<char32_t>::digits10;
+ const int numeric_limits<char32_t>::max_digits10;
+ const bool numeric_limits<char32_t>::is_signed;
+ const bool numeric_limits<char32_t>::is_integer;
+ const bool numeric_limits<char32_t>::is_exact;
+ const int numeric_limits<char32_t>::radix;
+ const int numeric_limits<char32_t>::min_exponent;
+ const int numeric_limits<char32_t>::min_exponent10;
+ const int numeric_limits<char32_t>::max_exponent;
+ const int numeric_limits<char32_t>::max_exponent10;
+ const bool numeric_limits<char32_t>::has_infinity;
+ const bool numeric_limits<char32_t>::has_quiet_NaN;
+ const bool numeric_limits<char32_t>::has_signaling_NaN;
+ const float_denorm_style numeric_limits<char32_t>::has_denorm;
+ const bool numeric_limits<char32_t>::has_denorm_loss;
+ const bool numeric_limits<char32_t>::is_iec559;
+ const bool numeric_limits<char32_t>::is_bounded;
+ const bool numeric_limits<char32_t>::is_modulo;
+ const bool numeric_limits<char32_t>::traps;
+ const bool numeric_limits<char32_t>::tinyness_before;
+ const float_round_style numeric_limits<char32_t>::round_style;
+
+#undef const
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+// XXX GLIBCXX_ABI Deprecated
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+
+#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
+ extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
+ __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
+_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
+_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
+_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
+_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
+_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
+_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
+_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
+_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
+_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
+_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
+_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
+_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
+_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
+_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
+_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
+_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
+
+#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
diff --git a/libstdc++-v3/src/c++11/mutex.cc b/libstdc++-v3/src/c++11/mutex.cc
new file mode 100644
index 0000000000..86d0293473
--- /dev/null
+++ b/libstdc++-v3/src/c++11/mutex.cc
@@ -0,0 +1,97 @@
+// mutex -*- C++ -*-
+
+// Copyright (C) 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <mutex>
+
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+#ifndef _GLIBCXX_HAVE_TLS
+namespace
+{
+ inline std::unique_lock<std::mutex>*&
+ __get_once_functor_lock_ptr()
+ {
+ static std::unique_lock<std::mutex>* __once_functor_lock_ptr = 0;
+ return __once_functor_lock_ptr;
+ }
+}
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#ifdef _GLIBCXX_HAVE_TLS
+ __thread void* __once_callable;
+ __thread void (*__once_call)();
+#else
+ // Explicit instantiation due to -fno-implicit-instantiation.
+ template class function<void()>;
+ function<void()> __once_functor;
+
+ mutex&
+ __get_once_mutex()
+ {
+ static mutex once_mutex;
+ return once_mutex;
+ }
+
+ // code linked against ABI 3.4.12 and later uses this
+ void
+ __set_once_functor_lock_ptr(unique_lock<mutex>* __ptr)
+ {
+ __get_once_functor_lock_ptr() = __ptr;
+ }
+
+ // unsafe - retained for compatibility with ABI 3.4.11
+ unique_lock<mutex>&
+ __get_once_functor_lock()
+ {
+ static unique_lock<mutex> once_functor_lock(__get_once_mutex(), defer_lock);
+ return once_functor_lock;
+ }
+#endif
+
+ extern "C"
+ {
+ void __once_proxy()
+ {
+#ifndef _GLIBCXX_HAVE_TLS
+ function<void()> __once_call = std::move(__once_functor);
+ if (unique_lock<mutex>* __lock = __get_once_functor_lock_ptr())
+ {
+ // caller is using new ABI and provided lock ptr
+ __get_once_functor_lock_ptr() = 0;
+ __lock->unlock();
+ }
+ else
+ __get_once_functor_lock().unlock(); // global lock
+#endif
+ __once_call();
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/placeholders.cc b/libstdc++-v3/src/c++11/placeholders.cc
index 967ce178a3..967ce178a3 100644
--- a/libstdc++-v3/src/placeholders.cc
+++ b/libstdc++-v3/src/c++11/placeholders.cc
diff --git a/libstdc++-v3/src/c++11/regex.cc b/libstdc++-v3/src/c++11/regex.cc
new file mode 100644
index 0000000000..d21f22176f
--- /dev/null
+++ b/libstdc++-v3/src/c++11/regex.cc
@@ -0,0 +1,45 @@
+// regex -*- C++ -*-
+
+// Copyright (C) 2011-2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <regex>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ regex_error::regex_error(regex_constants::error_type __ecode)
+ : std::runtime_error("regex_error"), _M_code(__ecode)
+ { }
+
+ regex_error::~regex_error() throw() { }
+
+#ifdef _AIX
+ // PR libstdc++/52887
+ template class function<void (__regex::_PatternCursor const&,
+ __regex::_Results&)>;
+ template class function<bool (__regex::_PatternCursor const&)>;
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
diff --git a/libstdc++-v3/src/c++11/shared_ptr.cc b/libstdc++-v3/src/c++11/shared_ptr.cc
new file mode 100644
index 0000000000..911e745ebe
--- /dev/null
+++ b/libstdc++-v3/src/c++11/shared_ptr.cc
@@ -0,0 +1,39 @@
+// Support for pointer abstractions -*- C++ -*-
+
+// Copyright (C) 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ bad_weak_ptr::~bad_weak_ptr() noexcept = default;
+
+ char const*
+ bad_weak_ptr::what() const noexcept
+ { return "std::bad_weak_ptr"; }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/string-inst.cc b/libstdc++-v3/src/c++11/string-inst.cc
index 879ccec7e8..879ccec7e8 100644
--- a/libstdc++-v3/src/string-inst.cc
+++ b/libstdc++-v3/src/c++11/string-inst.cc
diff --git a/libstdc++-v3/src/c++11/system_error.cc b/libstdc++-v3/src/c++11/system_error.cc
new file mode 100644
index 0000000000..3ee1d9b0b0
--- /dev/null
+++ b/libstdc++-v3/src/c++11/system_error.cc
@@ -0,0 +1,103 @@
+// <system_error> implementation file
+
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <cstring>
+#include <system_error>
+#include <bits/functexcept.h>
+#include <limits>
+
+namespace
+{
+ using std::string;
+
+ struct generic_error_category : public std::error_category
+ {
+ virtual const char*
+ name() const noexcept
+ { return "generic"; }
+
+ virtual string
+ message(int i) const
+ {
+ // XXX locale issues: how does one get or set loc.
+ // _GLIBCXX_HAVE_STRERROR_L, strerror_l(i, cloc)
+ return string(strerror(i));
+ }
+ };
+
+ struct system_error_category : public std::error_category
+ {
+ virtual const char*
+ name() const noexcept
+ { return "system"; }
+
+ virtual string
+ message(int i) const
+ {
+ // XXX locale issues: how does one get or set loc.
+ // _GLIBCXX_HAVE_STRERROR_L, strerror_l(i, cloc)
+ return string(strerror(i));
+ }
+ };
+
+ const generic_error_category generic_category_instance;
+ const system_error_category system_category_instance;
+}
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ error_category::error_category() noexcept = default;
+
+ error_category::~error_category() noexcept = default;
+
+ const error_category&
+ system_category() noexcept { return system_category_instance; }
+
+ const error_category&
+ generic_category() noexcept { return generic_category_instance; }
+
+ system_error::~system_error() noexcept = default;
+
+ error_condition
+ error_category::default_error_condition(int __i) const noexcept
+ { return error_condition(__i, *this); }
+
+ bool
+ error_category::equivalent(int __i,
+ const error_condition& __cond) const noexcept
+ { return default_error_condition(__i) == __cond; }
+
+ bool
+ error_category::equivalent(const error_code& __code, int __i) const noexcept
+ { return *this == __code.category() && __code.value() == __i; }
+
+ error_condition
+ error_code::default_error_condition() const noexcept
+ { return category().default_error_condition(value()); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/c++11/thread.cc b/libstdc++-v3/src/c++11/thread.cc
new file mode 100644
index 0000000000..d0d902fa47
--- /dev/null
+++ b/libstdc++-v3/src/c++11/thread.cc
@@ -0,0 +1,147 @@
+// thread -*- C++ -*-
+
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <thread>
+#include <system_error>
+#include <cerrno>
+#include <cxxabi_forced.h>
+
+#if defined(_GLIBCXX_USE_GET_NPROCS)
+# include <sys/sysinfo.h>
+# define _GLIBCXX_NPROCS get_nprocs()
+#elif defined(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP)
+# define _GLIBCXX_NPROCS pthread_num_processors_np()
+#elif defined(_GLIBCXX_USE_SYSCTL_HW_NCPU)
+# include <stddef.h>
+# include <sys/sysctl.h>
+static inline int get_nprocs()
+{
+ int count;
+ size_t size = sizeof(count);
+ int mib[] = { CTL_HW, HW_NCPU };
+ if (!sysctl(mib, 2, &count, &size, NULL, 0))
+ return count;
+ return 0;
+}
+# define _GLIBCXX_NPROCS get_nprocs()
+#elif defined(_GLIBCXX_USE_SC_NPROCESSORS_ONLN)
+# include <unistd.h>
+# define _GLIBCXX_NPROCS sysconf(_SC_NPROCESSORS_ONLN)
+#elif defined(_GLIBCXX_USE_SC_NPROC_ONLN)
+# include <unistd.h>
+# define _GLIBCXX_NPROCS sysconf(_SC_NPROC_ONLN)
+#else
+# define _GLIBCXX_NPROCS 0
+#endif
+
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace
+ {
+ extern "C" void*
+ execute_native_thread_routine(void* __p)
+ {
+ thread::_Impl_base* __t = static_cast<thread::_Impl_base*>(__p);
+ thread::__shared_base_type __local;
+ __local.swap(__t->_M_this_ptr);
+
+ __try
+ {
+ __t->_M_run();
+ }
+ __catch(const __cxxabiv1::__forced_unwind&)
+ {
+ __throw_exception_again;
+ }
+ __catch(...)
+ {
+ std::terminate();
+ }
+
+ return 0;
+ }
+ }
+
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ void
+ thread::join()
+ {
+ int __e = EINVAL;
+
+ if (_M_id != id())
+ __e = __gthread_join(_M_id._M_thread, 0);
+
+ if (__e)
+ __throw_system_error(__e);
+
+ _M_id = id();
+ }
+
+ void
+ thread::detach()
+ {
+ int __e = EINVAL;
+
+ if (_M_id != id())
+ __e = __gthread_detach(_M_id._M_thread);
+
+ if (__e)
+ __throw_system_error(__e);
+
+ _M_id = id();
+ }
+
+ void
+ thread::_M_start_thread(__shared_base_type __b)
+ {
+ if (!__gthread_active_p())
+ __throw_system_error(int(errc::operation_not_permitted));
+
+ __b->_M_this_ptr = __b;
+ int __e = __gthread_create(&_M_id._M_thread,
+ &execute_native_thread_routine, __b.get());
+ if (__e)
+ {
+ __b->_M_this_ptr.reset();
+ __throw_system_error(__e);
+ }
+ }
+
+ unsigned int
+ thread::hardware_concurrency() noexcept
+ {
+ int __n = _GLIBCXX_NPROCS;
+ if (__n < 0)
+ __n = 0;
+ return __n;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/wstring-inst.cc b/libstdc++-v3/src/c++11/wstring-inst.cc
index b753f616fd..b753f616fd 100644
--- a/libstdc++-v3/src/wstring-inst.cc
+++ b/libstdc++-v3/src/c++11/wstring-inst.cc
diff --git a/libstdc++-v3/src/c++98/Makefile.am b/libstdc++-v3/src/c++98/Makefile.am
new file mode 100644
index 0000000000..c153a59336
--- /dev/null
+++ b/libstdc++-v3/src/c++98/Makefile.am
@@ -0,0 +1,226 @@
+## Makefile for the C++03 sources of the GNU C++ Standard library.
+##
+## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+## 2006, 2007, 2008, 2009, 2010, 2011, 2012
+## Free Software Foundation, Inc.
+##
+## This file is part of the libstdc++ version 3 distribution.
+## Process this file with automake to produce Makefile.in.
+
+## This file is part of the GNU ISO C++ Library. This library is free
+## software; you can redistribute it and/or modify it under the
+## terms of the GNU General Public License as published by the
+## Free Software Foundation; either version 3, or (at your option)
+## any later version.
+
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+## You should have received a copy of the GNU General Public License along
+## with this library; see the file COPYING3. If not see
+## <http://www.gnu.org/licenses/>.
+
+include $(top_srcdir)/fragment.am
+
+# Convenience library for C++98 runtime.
+noinst_LTLIBRARIES = libc++98convenience.la
+
+headers =
+
+# Source files linked in via configuration/make substitution for a
+# particular host.
+host_sources = \
+ atomicity.cc \
+ codecvt_members.cc \
+ collate_members.cc \
+ ctype_configure_char.cc \
+ ctype_members.cc \
+ messages_members.cc \
+ monetary_members.cc \
+ numeric_members.cc \
+ time_members.cc
+
+codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true
+
+collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true
+
+ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc
+ $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true
+
+ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
+
+messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true
+
+monetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true
+
+numeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true
+
+time_members.cc: ${glibcxx_srcdir}/$(CTIME_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true
+
+atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h
+atomicity.cc: ${atomicity_file}
+ $(LN_S) ${atomicity_file} ./atomicity.cc || true
+
+# Source files linked in via configuration/make substitution for a
+# particular host, but with ad hoc naming rules.
+host_sources_extra = \
+ basic_file.cc c++locale.cc \
+ ${inst_sources} ${parallel_sources}
+
+c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true
+
+basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
+
+if ENABLE_PARALLEL
+parallel_sources = parallel_settings.cc
+else
+parallel_sources =
+endif
+
+if ENABLE_EXTERN_TEMPLATE
+XTEMPLATE_FLAGS = -fno-implicit-templates
+inst_sources = \
+ allocator-inst.cc \
+ concept-inst.cc \
+ ext-inst.cc \
+ ios-inst.cc \
+ iostream-inst.cc \
+ istream-inst.cc \
+ locale-inst.cc \
+ misc-inst.cc \
+ ostream-inst.cc \
+ sstream-inst.cc \
+ streambuf-inst.cc \
+ wlocale-inst.cc
+else
+XTEMPLATE_FLAGS =
+inst_sources =
+endif
+
+# Sources present in the src directory, always present.
+sources = \
+ bitmap_allocator.cc \
+ pool_allocator.cc \
+ mt_allocator.cc \
+ codecvt.cc \
+ complex_io.cc \
+ ctype.cc \
+ globals_io.cc \
+ hash_tr1.cc \
+ hashtable_tr1.cc \
+ ios.cc \
+ ios_failure.cc \
+ ios_init.cc \
+ ios_locale.cc \
+ list.cc \
+ locale.cc \
+ locale_init.cc \
+ locale_facets.cc \
+ localename.cc \
+ math_stubs_float.cc \
+ math_stubs_long_double.cc \
+ stdexcept.cc \
+ strstream.cc \
+ tree.cc \
+ istream.cc \
+ streambuf.cc \
+ valarray.cc \
+ ${host_sources} \
+ ${host_sources_extra}
+
+vpath % $(top_srcdir)/src/c++98
+
+libc__98convenience_la_SOURCES = $(sources)
+
+# Use special rules for the deprecated source files so that they find
+# deprecated include files.
+GLIBCXX_INCLUDE_DIR=$(glibcxx_builddir)/include
+strstream.lo: strstream.cc
+ $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
+strstream.o: strstream.cc
+ $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
+
+# Use special rules for the concept-checking instantiations so that all
+# the generated template functions are also instantiated. Force the checks
+# to be on so that the instantiations are actually seen.
+concept-inst.lo: concept-inst.cc
+ $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+concept-inst.o: concept-inst.cc
+ $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+
+# Use special rules for parallel mode compilation.
+PARALLEL_FLAGS = -fopenmp -D_GLIBCXX_PARALLEL -I$(glibcxx_builddir)/../libgomp
+parallel_settings.lo: parallel_settings.cc
+ $(LTCXXCOMPILE) $(PARALLEL_FLAGS) -c $<
+parallel_settings.o: parallel_settings.cc
+ $(CXXCOMPILE) $(PARALLEL_FLAGS) -c $<
+
+# AM_CXXFLAGS needs to be in each subdirectory so that it can be
+# modified in a per-library or per-sub-library way. Need to manually
+# set this option because CONFIG_CXXFLAGS has to be after
+# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
+# as the occasion calls for it.
+AM_CXXFLAGS = \
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(XTEMPLATE_FLAGS) \
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
+
+AM_MAKEFLAGS = \
+ "gxx_include_dir=$(gxx_include_dir)"
+
+# Libtool notes
+
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
+# using the C++ compiler, because that will enable the settings
+# detected when C++ support was being configured. However, when no
+# such flag is given in the command line, libtool attempts to figure
+# it out by matching the compiler name in each configuration section
+# against a prefix of the command line. The problem is that, if the
+# compiler name and its initial flags stored in the libtool
+# configuration file don't match those in the command line, libtool
+# can't decide which configuration to use, and it gives up. The
+# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
+# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
+# attempt to infer which configuration to use.
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+
+LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+
+# 3) We'd have a problem when building the shared libstdc++ object if
+# the rules automake generates would be used. We cannot allow g++ to
+# be used since this would add -lstdc++ to the link line which of
+# course is problematic at this point. So, we get the top-level
+# directory to configure libstdc++-v3 to use gcc as the C++
+# compilation driver.
+CXXLINK = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in
new file mode 100644
index 0000000000..c3173bc91f
--- /dev/null
+++ b/libstdc++-v3/src/c++98/Makefile.in
@@ -0,0 +1,743 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
+subdir = src/c++98
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+ $(top_srcdir)/../config/enable.m4 \
+ $(top_srcdir)/../config/futex.m4 \
+ $(top_srcdir)/../config/iconv.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/lib-ld.m4 \
+ $(top_srcdir)/../config/lib-link.m4 \
+ $(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/lthostflags.m4 \
+ $(top_srcdir)/../config/multi.m4 \
+ $(top_srcdir)/../config/no-executables.m4 \
+ $(top_srcdir)/../config/override.m4 \
+ $(top_srcdir)/../config/stdint.m4 \
+ $(top_srcdir)/../config/unwind_ipinfo.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
+ $(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
+ $(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libc__98convenience_la_LIBADD =
+am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
+ ctype_configure_char.lo ctype_members.lo messages_members.lo \
+ monetary_members.lo numeric_members.lo time_members.lo
+@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = allocator-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ concept-inst.lo ext-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ ios-inst.lo iostream-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ istream-inst.lo locale-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ misc-inst.lo ostream-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ sstream-inst.lo streambuf-inst.lo \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ wlocale-inst.lo
+@ENABLE_PARALLEL_TRUE@am__objects_3 = parallel_settings.lo
+am__objects_4 = basic_file.lo c++locale.lo $(am__objects_2) \
+ $(am__objects_3)
+am__objects_5 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
+ codecvt.lo complex_io.lo ctype.lo globals_io.lo hash_tr1.lo \
+ hashtable_tr1.lo ios.lo ios_failure.lo ios_init.lo \
+ ios_locale.lo list.lo locale.lo locale_init.lo \
+ locale_facets.lo localename.lo math_stubs_float.lo \
+ math_stubs_long_double.lo stdexcept.lo strstream.lo tree.lo \
+ istream.lo streambuf.lo valarray.lo $(am__objects_1) \
+ $(am__objects_4)
+am_libc__98convenience_la_OBJECTS = $(am__objects_5)
+libc__98convenience_la_OBJECTS = $(am_libc__98convenience_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp =
+am__depfiles_maybe =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+SOURCES = $(libc__98convenience_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
+ACLOCAL = @ACLOCAL@
+ALLOCATOR_H = @ALLOCATOR_H@
+ALLOCATOR_NAME = @ALLOCATOR_NAME@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+ATOMICITY_SRCDIR = @ATOMICITY_SRCDIR@
+ATOMIC_FLAGS = @ATOMIC_FLAGS@
+ATOMIC_WORD_SRCDIR = @ATOMIC_WORD_SRCDIR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASIC_FILE_CC = @BASIC_FILE_CC@
+BASIC_FILE_H = @BASIC_FILE_H@
+CC = @CC@
+CCODECVT_CC = @CCODECVT_CC@
+CCOLLATE_CC = @CCOLLATE_CC@
+CCTYPE_CC = @CCTYPE_CC@
+CFLAGS = @CFLAGS@
+CLOCALE_CC = @CLOCALE_CC@
+CLOCALE_H = @CLOCALE_H@
+CLOCALE_INTERNAL_H = @CLOCALE_INTERNAL_H@
+CMESSAGES_CC = @CMESSAGES_CC@
+CMESSAGES_H = @CMESSAGES_H@
+CMONEY_CC = @CMONEY_CC@
+CNUMERIC_CC = @CNUMERIC_CC@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPU_DEFINES_SRCDIR = @CPU_DEFINES_SRCDIR@
+CSTDIO_H = @CSTDIO_H@
+CTIME_CC = @CTIME_CC@
+CTIME_H = @CTIME_H@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+C_INCLUDE_DIR = @C_INCLUDE_DIR@
+DBLATEX = @DBLATEX@
+DEBUG_FLAGS = @DEBUG_FLAGS@
+DEFS = @DEFS@
+DOT = @DOT@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CONSTANTS_SRCDIR = @ERROR_CONSTANTS_SRCDIR@
+EXEEXT = @EXEEXT@
+EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@
+FGREP = @FGREP@
+GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
+GLIBCXX_LIBS = @GLIBCXX_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPTIMIZE_CXXFLAGS = @OPTIMIZE_CXXFLAGS@
+OPT_LDFLAGS = @OPT_LDFLAGS@
+OS_INC_SRCDIR = @OS_INC_SRCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+RANLIB = @RANLIB@
+SECTION_FLAGS = @SECTION_FLAGS@
+SECTION_LDFLAGS = @SECTION_LDFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYMVER_FILE = @SYMVER_FILE@
+TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_FLAGS = @WARN_FLAGS@
+WERROR = @WERROR@
+XMLLINT = @XMLLINT@
+XSLTPROC = @XSLTPROC@
+XSL_STYLE_DIR = @XSL_STYLE_DIR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+check_msgfmt = @check_msgfmt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+glibcxx_MOFILES = @glibcxx_MOFILES@
+glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
+glibcxx_POFILES = @glibcxx_POFILES@
+glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
+glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
+glibcxx_prefixdir = @glibcxx_prefixdir@
+glibcxx_srcdir = @glibcxx_srcdir@
+glibcxx_toolexecdir = @glibcxx_toolexecdir@
+glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
+gxx_include_dir = @gxx_include_dir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libtool_VERSION = @libtool_VERSION@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_host_flags = @lt_host_flags@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+multi_basedir = @multi_basedir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+port_specific_symbol_files = @port_specific_symbol_files@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+python_mod_dir = @python_mod_dir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
+toplevel_srcdir = @toplevel_srcdir@
+
+# May be used by various substitution variables.
+gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
+MAINT_CHARSET = latin1
+mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
+PWD_COMMAND = $${PWDCMD-pwd}
+STAMP = echo timestamp >
+toolexecdir = $(glibcxx_toolexecdir)
+toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
+
+# These bits are all figured out from configure. Look in acinclude.m4
+# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
+CONFIG_CXXFLAGS = \
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
+
+WARN_CXXFLAGS = \
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
+
+
+# -I/-D flags to pass when compiling.
+AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
+
+# Convenience library for C++98 runtime.
+noinst_LTLIBRARIES = libc++98convenience.la
+headers =
+
+# Source files linked in via configuration/make substitution for a
+# particular host.
+host_sources = \
+ atomicity.cc \
+ codecvt_members.cc \
+ collate_members.cc \
+ ctype_configure_char.cc \
+ ctype_members.cc \
+ messages_members.cc \
+ monetary_members.cc \
+ numeric_members.cc \
+ time_members.cc
+
+atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h
+
+# Source files linked in via configuration/make substitution for a
+# particular host, but with ad hoc naming rules.
+host_sources_extra = \
+ basic_file.cc c++locale.cc \
+ ${inst_sources} ${parallel_sources}
+
+@ENABLE_PARALLEL_FALSE@parallel_sources =
+@ENABLE_PARALLEL_TRUE@parallel_sources = parallel_settings.cc
+@ENABLE_EXTERN_TEMPLATE_FALSE@XTEMPLATE_FLAGS =
+@ENABLE_EXTERN_TEMPLATE_TRUE@XTEMPLATE_FLAGS = -fno-implicit-templates
+@ENABLE_EXTERN_TEMPLATE_FALSE@inst_sources =
+@ENABLE_EXTERN_TEMPLATE_TRUE@inst_sources = \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ allocator-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ concept-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ ext-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ ios-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ iostream-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ istream-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ locale-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ misc-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ ostream-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ sstream-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ streambuf-inst.cc \
+@ENABLE_EXTERN_TEMPLATE_TRUE@ wlocale-inst.cc
+
+
+# Sources present in the src directory, always present.
+sources = \
+ bitmap_allocator.cc \
+ pool_allocator.cc \
+ mt_allocator.cc \
+ codecvt.cc \
+ complex_io.cc \
+ ctype.cc \
+ globals_io.cc \
+ hash_tr1.cc \
+ hashtable_tr1.cc \
+ ios.cc \
+ ios_failure.cc \
+ ios_init.cc \
+ ios_locale.cc \
+ list.cc \
+ locale.cc \
+ locale_init.cc \
+ locale_facets.cc \
+ localename.cc \
+ math_stubs_float.cc \
+ math_stubs_long_double.cc \
+ stdexcept.cc \
+ strstream.cc \
+ tree.cc \
+ istream.cc \
+ streambuf.cc \
+ valarray.cc \
+ ${host_sources} \
+ ${host_sources_extra}
+
+libc__98convenience_la_SOURCES = $(sources)
+
+# Use special rules for the deprecated source files so that they find
+# deprecated include files.
+GLIBCXX_INCLUDE_DIR = $(glibcxx_builddir)/include
+
+# Use special rules for parallel mode compilation.
+PARALLEL_FLAGS = -fopenmp -D_GLIBCXX_PARALLEL -I$(glibcxx_builddir)/../libgomp
+
+# AM_CXXFLAGS needs to be in each subdirectory so that it can be
+# modified in a per-library or per-sub-library way. Need to manually
+# set this option because CONFIG_CXXFLAGS has to be after
+# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
+# as the occasion calls for it.
+AM_CXXFLAGS = \
+ $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
+ $(XTEMPLATE_FLAGS) \
+ $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
+
+AM_MAKEFLAGS = \
+ "gxx_include_dir=$(gxx_include_dir)"
+
+
+# Libtool notes
+
+# 1) In general, libtool expects an argument such as `--tag=CXX' when
+# using the C++ compiler, because that will enable the settings
+# detected when C++ support was being configured. However, when no
+# such flag is given in the command line, libtool attempts to figure
+# it out by matching the compiler name in each configuration section
+# against a prefix of the command line. The problem is that, if the
+# compiler name and its initial flags stored in the libtool
+# configuration file don't match those in the command line, libtool
+# can't decide which configuration to use, and it gives up. The
+# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
+# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
+# attempt to infer which configuration to use.
+#
+# The second tag argument, `--tag disable-shared` means that libtool
+# only compiles each source once, for static objects. In actuality,
+# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to
+# the libtool command that is used create the object, which is
+# suitable for shared libraries. The `--tag disable-shared` must be
+# placed after --tag CXX lest things CXX undo the affect of
+# disable-shared.
+
+# 2) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
+# last. (That way, things like -O2 passed down from the toplevel can
+# be overridden by --enable-debug.)
+LTCXXCOMPILE = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+
+LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+
+# 3) We'd have a problem when building the shared libstdc++ object if
+# the rules automake generates would be used. We cannot allow g++ to
+# be used since this would add -lstdc++ to the link line which of
+# course is problematic at this point. So, we get the top-level
+# directory to configure libstdc++-v3 to use gcc as the C++
+# compilation driver.
+CXXLINK = \
+ $(LIBTOOL) --tag CXX --tag disable-shared \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXX) \
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/fragment.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps src/c++98/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign --ignore-deps src/c++98/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libc++98convenience.la: $(libc__98convenience_la_OBJECTS) $(libc__98convenience_la_DEPENDENCIES)
+ $(CXXLINK) $(libc__98convenience_la_OBJECTS) $(libc__98convenience_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.cc.o:
+ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true
+
+collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true
+
+ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc
+ $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true
+
+ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
+
+messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true
+
+monetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true
+
+numeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true
+
+time_members.cc: ${glibcxx_srcdir}/$(CTIME_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true
+atomicity.cc: ${atomicity_file}
+ $(LN_S) ${atomicity_file} ./atomicity.cc || true
+
+c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true
+
+basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
+
+vpath % $(top_srcdir)/src/c++98
+strstream.lo: strstream.cc
+ $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
+strstream.o: strstream.cc
+ $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
+
+# Use special rules for the concept-checking instantiations so that all
+# the generated template functions are also instantiated. Force the checks
+# to be on so that the instantiations are actually seen.
+concept-inst.lo: concept-inst.cc
+ $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+concept-inst.o: concept-inst.cc
+ $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+parallel_settings.lo: parallel_settings.cc
+ $(LTCXXCOMPILE) $(PARALLEL_FLAGS) -c $<
+parallel_settings.o: parallel_settings.cc
+ $(CXXCOMPILE) $(PARALLEL_FLAGS) -c $<
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libstdc++-v3/src/allocator-inst.cc b/libstdc++-v3/src/c++98/allocator-inst.cc
index 801468016d..801468016d 100644
--- a/libstdc++-v3/src/allocator-inst.cc
+++ b/libstdc++-v3/src/c++98/allocator-inst.cc
diff --git a/libstdc++-v3/src/bitmap_allocator.cc b/libstdc++-v3/src/c++98/bitmap_allocator.cc
index a9f3a77ba2..a9f3a77ba2 100644
--- a/libstdc++-v3/src/bitmap_allocator.cc
+++ b/libstdc++-v3/src/c++98/bitmap_allocator.cc
diff --git a/libstdc++-v3/src/codecvt.cc b/libstdc++-v3/src/c++98/codecvt.cc
index fdb0896caa..fdb0896caa 100644
--- a/libstdc++-v3/src/codecvt.cc
+++ b/libstdc++-v3/src/c++98/codecvt.cc
diff --git a/libstdc++-v3/src/compatibility-debug_list-2.cc b/libstdc++-v3/src/c++98/compatibility-debug_list-2.cc
index c032ff8598..c032ff8598 100644
--- a/libstdc++-v3/src/compatibility-debug_list-2.cc
+++ b/libstdc++-v3/src/c++98/compatibility-debug_list-2.cc
diff --git a/libstdc++-v3/src/compatibility-debug_list.cc b/libstdc++-v3/src/c++98/compatibility-debug_list.cc
index 76cceec720..76cceec720 100644
--- a/libstdc++-v3/src/compatibility-debug_list.cc
+++ b/libstdc++-v3/src/c++98/compatibility-debug_list.cc
diff --git a/libstdc++-v3/src/c++98/compatibility-ldbl.cc b/libstdc++-v3/src/c++98/compatibility-ldbl.cc
new file mode 100644
index 0000000000..da09d54bbf
--- /dev/null
+++ b/libstdc++-v3/src/c++98/compatibility-ldbl.cc
@@ -0,0 +1,80 @@
+// Compatibility symbols for -mlong-double-64 compatibility -*- C++ -*-
+
+// Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <locale>
+#include <cmath>
+#include <tr1/functional>
+
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+
+#ifdef __LONG_DOUBLE_128__
+#error "compatibility-ldbl.cc must be compiled with -mlong-double-64"
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+#define C char
+ template class num_get<C, istreambuf_iterator<C> >;
+ template class num_put<C, ostreambuf_iterator<C> >;
+ template class money_get<C, istreambuf_iterator<C> >;
+ template class money_put<C, ostreambuf_iterator<C> >;
+ template const num_put<C>& use_facet<num_put<C> >(const locale&);
+ template const num_get<C>& use_facet<num_get<C> >(const locale&);
+ template const money_put<C>& use_facet<money_put<C> >(const locale&);
+ template const money_get<C>& use_facet<money_get<C> >(const locale&);
+ template bool has_facet<num_put<C> >(const locale&);
+ template bool has_facet<num_get<C> >(const locale&);
+ template bool has_facet<money_put<C> >(const locale&);
+ template bool has_facet<money_get<C> >(const locale&);
+#undef C
+#ifdef _GLIBCXX_USE_WCHAR_T
+#define C wchar_t
+ template class num_get<C, istreambuf_iterator<C> >;
+ template class num_put<C, ostreambuf_iterator<C> >;
+ template class money_get<C, istreambuf_iterator<C> >;
+ template class money_put<C, ostreambuf_iterator<C> >;
+ template const num_put<C>& use_facet<num_put<C> >(const locale&);
+ template const num_get<C>& use_facet<num_get<C> >(const locale&);
+ template const money_put<C>& use_facet<money_put<C> >(const locale&);
+ template const money_get<C>& use_facet<money_get<C> >(const locale&);
+ template bool has_facet<num_put<C> >(const locale&);
+ template bool has_facet<num_get<C> >(const locale&);
+ template bool has_facet<money_put<C> >(const locale&);
+ template bool has_facet<money_get<C> >(const locale&);
+#undef C
+#endif
+}
+
+// For std::tr1::hash<long double>::operator()
+#define _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+#include "hash-long-double-tr1-aux.cc"
+
+// std::tr1::hash<long double>::operator()
+// and std::hash<long double>::operator()
+// are the same, no need to duplicate them.
+extern "C" void _ZNKSt4hashIeEclEe (void)
+ __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
+
+#endif
diff --git a/libstdc++-v3/src/c++98/compatibility-list-2.cc b/libstdc++-v3/src/c++98/compatibility-list-2.cc
new file mode 100644
index 0000000000..0e118ff437
--- /dev/null
+++ b/libstdc++-v3/src/c++98/compatibility-list-2.cc
@@ -0,0 +1,117 @@
+// Compatibility symbols for previous versions, list bits -*- C++ -*-
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <bits/move.h>
+
+#ifdef _GLIBCXX_SHARED
+
+#ifndef _GLIBCXX_BEGIN_NAMESPACE_COMPAT
+# define _GLIBCXX_BEGIN_NAMESPACE_COMPAT
+#endif
+
+#ifndef _GLIBCXX_END_NAMESPACE_COMPAT
+# define _GLIBCXX_END_NAMESPACE_COMPAT
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_COMPAT
+
+ struct _List_node_base
+ {
+ _List_node_base* _M_next;
+ _List_node_base* _M_prev;
+
+ void
+ _M_transfer(_List_node_base * const __first,
+ _List_node_base * const __last) _GLIBCXX_USE_NOEXCEPT;
+
+ void
+ _M_reverse() _GLIBCXX_USE_NOEXCEPT;
+
+ void
+ _M_hook(_List_node_base * const __position) _GLIBCXX_USE_NOEXCEPT;
+
+ void
+ _M_unhook() _GLIBCXX_USE_NOEXCEPT;
+ };
+
+ void
+ _List_node_base::
+ _M_transfer(_List_node_base * const __first,
+ _List_node_base * const __last) _GLIBCXX_USE_NOEXCEPT
+ {
+ if (this != __last)
+ {
+ // Remove [first, last) from its old position.
+ __last->_M_prev->_M_next = this;
+ __first->_M_prev->_M_next = __last;
+ this->_M_prev->_M_next = __first;
+
+ // Splice [first, last) into its new position.
+ _List_node_base* const __tmp = this->_M_prev;
+ this->_M_prev = __last->_M_prev;
+ __last->_M_prev = __first->_M_prev;
+ __first->_M_prev = __tmp;
+ }
+ }
+
+ void
+ _List_node_base::_M_reverse() _GLIBCXX_USE_NOEXCEPT
+ {
+ _List_node_base* __tmp = this;
+ do
+ {
+ std::swap(__tmp->_M_next, __tmp->_M_prev);
+
+ // Old next node is now prev.
+ __tmp = __tmp->_M_prev;
+ }
+ while (__tmp != this);
+ }
+
+ void
+ _List_node_base::
+ _M_hook(_List_node_base* const __position) _GLIBCXX_USE_NOEXCEPT
+ {
+ this->_M_next = __position;
+ this->_M_prev = __position->_M_prev;
+ __position->_M_prev->_M_next = this;
+ __position->_M_prev = this;
+ }
+
+ void
+ _List_node_base::_M_unhook() _GLIBCXX_USE_NOEXCEPT
+ {
+ _List_node_base* const __next_node = this->_M_next;
+ _List_node_base* const __prev_node = this->_M_prev;
+ __prev_node->_M_next = __next_node;
+ __next_node->_M_prev = __prev_node;
+ }
+
+_GLIBCXX_END_NAMESPACE_COMPAT
+
+} // namespace std
+
+#endif
diff --git a/libstdc++-v3/src/c++98/compatibility-list.cc b/libstdc++-v3/src/c++98/compatibility-list.cc
new file mode 100644
index 0000000000..7e074a7297
--- /dev/null
+++ b/libstdc++-v3/src/c++98/compatibility-list.cc
@@ -0,0 +1,146 @@
+// Compatibility symbols for previous versions, list bits -*- C++ -*-
+
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <bits/move.h>
+
+#ifndef _GLIBCXX_BEGIN_NAMESPACE_COMPAT
+# define _GLIBCXX_BEGIN_NAMESPACE_COMPAT
+#endif
+
+#ifndef _GLIBCXX_END_NAMESPACE_COMPAT
+# define _GLIBCXX_END_NAMESPACE_COMPAT
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_COMPAT
+
+ struct _List_node_base
+ {
+ _List_node_base* _M_next;
+ _List_node_base* _M_prev;
+
+ static void
+ swap(_List_node_base& __x, _List_node_base& __y) throw ();
+
+ void
+ transfer(_List_node_base * const __first,
+ _List_node_base * const __last) throw ();
+
+ void
+ reverse() throw ();
+
+ void
+ hook(_List_node_base * const __position) throw ();
+
+ void
+ unhook() throw ();
+ };
+
+ void
+ _List_node_base::swap(_List_node_base& __x, _List_node_base& __y) throw()
+ {
+ if ( __x._M_next != &__x )
+ {
+ if ( __y._M_next != &__y )
+ {
+ // Both __x and __y are not empty.
+ std::swap(__x._M_next,__y._M_next);
+ std::swap(__x._M_prev,__y._M_prev);
+ __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
+ __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
+ }
+ else
+ {
+ // __x is not empty, __y is empty.
+ __y._M_next = __x._M_next;
+ __y._M_prev = __x._M_prev;
+ __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
+ __x._M_next = __x._M_prev = &__x;
+ }
+ }
+ else if ( __y._M_next != &__y )
+ {
+ // __x is empty, __y is not empty.
+ __x._M_next = __y._M_next;
+ __x._M_prev = __y._M_prev;
+ __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
+ __y._M_next = __y._M_prev = &__y;
+ }
+ }
+
+ void
+ _List_node_base::transfer(_List_node_base * const __first,
+ _List_node_base * const __last) throw ()
+ {
+ if (this != __last)
+ {
+ // Remove [first, last) from its old position.
+ __last->_M_prev->_M_next = this;
+ __first->_M_prev->_M_next = __last;
+ this->_M_prev->_M_next = __first;
+
+ // Splice [first, last) into its new position.
+ _List_node_base* const __tmp = this->_M_prev;
+ this->_M_prev = __last->_M_prev;
+ __last->_M_prev = __first->_M_prev;
+ __first->_M_prev = __tmp;
+ }
+ }
+
+ void
+ _List_node_base::reverse() throw ()
+ {
+ _List_node_base* __tmp = this;
+ do
+ {
+ std::swap(__tmp->_M_next, __tmp->_M_prev);
+
+ // Old next node is now prev.
+ __tmp = __tmp->_M_prev;
+ }
+ while (__tmp != this);
+ }
+
+ void
+ _List_node_base::hook(_List_node_base* const __position) throw ()
+ {
+ this->_M_next = __position;
+ this->_M_prev = __position->_M_prev;
+ __position->_M_prev->_M_next = this;
+ __position->_M_prev = this;
+ }
+
+ void
+ _List_node_base::unhook() throw ()
+ {
+ _List_node_base* const __next_node = this->_M_next;
+ _List_node_base* const __prev_node = this->_M_prev;
+ __prev_node->_M_next = __next_node;
+ __next_node->_M_prev = __prev_node;
+ }
+
+_GLIBCXX_END_NAMESPACE_COMPAT
+
+} // namespace std
diff --git a/libstdc++-v3/src/compatibility-parallel_list-2.cc b/libstdc++-v3/src/c++98/compatibility-parallel_list-2.cc
index 8dc837a361..8dc837a361 100644
--- a/libstdc++-v3/src/compatibility-parallel_list-2.cc
+++ b/libstdc++-v3/src/c++98/compatibility-parallel_list-2.cc
diff --git a/libstdc++-v3/src/compatibility-parallel_list.cc b/libstdc++-v3/src/c++98/compatibility-parallel_list.cc
index 05e50fa569..05e50fa569 100644
--- a/libstdc++-v3/src/compatibility-parallel_list.cc
+++ b/libstdc++-v3/src/c++98/compatibility-parallel_list.cc
diff --git a/libstdc++-v3/src/c++98/compatibility.cc b/libstdc++-v3/src/c++98/compatibility.cc
new file mode 100644
index 0000000000..9f423d0e82
--- /dev/null
+++ b/libstdc++-v3/src/c++98/compatibility.cc
@@ -0,0 +1,554 @@
+// Compatibility symbols for previous versions -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <bits/c++config.h>
+
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)\
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
+#define istreambuf_iterator istreambuf_iteratorXX
+#define basic_fstream basic_fstreamXX
+#define basic_ifstream basic_ifstreamXX
+#define basic_ofstream basic_ofstreamXX
+#define _M_copy(a, b, c) _M_copyXX(a, b, c)
+#define _M_move(a, b, c) _M_moveXX(a, b, c)
+#define _M_assign(a, b, c) _M_assignXX(a, b, c)
+#define _M_disjunct(a) _M_disjunctXX(a)
+#define _M_check_length(a, b, c) _M_check_lengthXX(a, b, c)
+#define _M_set_length_and_sharable(a) _M_set_length_and_sharableXX(a)
+#define ignore ignoreXX
+#define eq eqXX
+#define _List_node_base _List_node_baseXX
+#endif
+
+#include <string>
+#include <istream>
+#include <fstream>
+#include <sstream>
+#include <cmath>
+#include <ext/numeric_traits.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // std::istream ignore explicit specializations.
+ template<>
+ basic_istream<char>&
+ basic_istream<char>::
+ ignore(streamsize __n)
+ {
+ if (__n == 1)
+ return ignore();
+
+ _M_gcount = 0;
+ sentry __cerb(*this, true);
+ if ( __n > 0 && __cerb)
+ {
+ ios_base::iostate __err = ios_base::goodbit;
+ __try
+ {
+ const int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = this->rdbuf();
+ int_type __c = __sb->sgetc();
+
+ // See comment in istream.tcc.
+ bool __large_ignore = false;
+ while (true)
+ {
+ while (_M_gcount < __n
+ && !traits_type::eq_int_type(__c, __eof))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - _M_gcount));
+ if (__size > 1)
+ {
+ __sb->__safe_gbump(__size);
+ _M_gcount += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ ++_M_gcount;
+ __c = __sb->snextc();
+ }
+ }
+ if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+ && !traits_type::eq_int_type(__c, __eof))
+ {
+ _M_gcount =
+ __gnu_cxx::__numeric_traits<streamsize>::__min;
+ __large_ignore = true;
+ }
+ else
+ break;
+ }
+
+ if (__large_ignore)
+ _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+ if (__err)
+ this->setstate(__err);
+ }
+ return *this;
+ }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ basic_istream<wchar_t>&
+ basic_istream<wchar_t>::
+ ignore(streamsize __n)
+ {
+ if (__n == 1)
+ return ignore();
+
+ _M_gcount = 0;
+ sentry __cerb(*this, true);
+ if (__n > 0 && __cerb)
+ {
+ ios_base::iostate __err = ios_base::goodbit;
+ __try
+ {
+ const int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = this->rdbuf();
+ int_type __c = __sb->sgetc();
+
+ bool __large_ignore = false;
+ while (true)
+ {
+ while (_M_gcount < __n
+ && !traits_type::eq_int_type(__c, __eof))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - _M_gcount));
+ if (__size > 1)
+ {
+ __sb->__safe_gbump(__size);
+ _M_gcount += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ ++_M_gcount;
+ __c = __sb->snextc();
+ }
+ }
+ if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+ && !traits_type::eq_int_type(__c, __eof))
+ {
+ _M_gcount =
+ __gnu_cxx::__numeric_traits<streamsize>::__min;
+ __large_ignore = true;
+ }
+ else
+ break;
+ }
+
+ if (__large_ignore)
+ _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+ if (__err)
+ this->setstate(__err);
+ }
+ return *this;
+ }
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+
+// NB: These symbols renames should go into the shared library only,
+// and only those shared libraries that support versioning.
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
+
+/* gcc-3.4.4
+_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv
+_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv
+ */
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template
+ istreambuf_iterator<char>&
+ istreambuf_iterator<char>::operator++();
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template
+ istreambuf_iterator<wchar_t>&
+ istreambuf_iterator<wchar_t>::operator++();
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+
+/* gcc-4.0.0
+_ZNSs4_Rep26_M_set_length_and_sharableEj
+_ZNSs7_M_copyEPcPKcj
+_ZNSs7_M_moveEPcPKcj
+_ZNSs9_M_assignEPcjc
+_ZNKSs11_M_disjunctEPKc
+_ZNKSs15_M_check_lengthEjjPKc
+_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj
+_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj
+_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj
+_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw
+_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw
+_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc
+
+_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
+_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv
+_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv
+_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv
+_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv
+_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv
+
+_ZNSi6ignoreEi
+_ZNSi6ignoreEv
+_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi
+_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv
+
+_ZNSt11char_traitsIcE2eqERKcS2_
+_ZNSt11char_traitsIwE2eqERKwS2_
+ */
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // std::char_traits is explicitly specialized
+ bool (* __p1)(const char&, const char&) = &char_traits<char>::eq;
+
+ // std::string
+ template
+ void
+ basic_string<char>::_M_copy(char*, const char*, size_t);
+
+ template
+ void
+ basic_string<char>::_M_move(char*, const char*, size_t);
+
+ template
+ void
+ basic_string<char>::_M_assign(char*, size_t, char);
+
+ template
+ bool
+ basic_string<char>::_M_disjunct(const char*) const;
+
+ template
+ void
+ basic_string<char>::_M_check_length(size_t, size_t, const char*) const;
+
+ template
+ void
+ basic_string<char>::_Rep::_M_set_length_and_sharable(size_t);
+
+
+ // std::istream
+ template
+ basic_istream<char>&
+ basic_istream<char>::ignore();
+
+ template
+ bool
+ basic_fstream<char>::is_open() const;
+
+ template
+ bool
+ basic_ifstream<char>::is_open() const;
+
+ template
+ bool
+ basic_ofstream<char>::is_open() const;
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ bool (* __p2)(const wchar_t&, const wchar_t&) = &char_traits<wchar_t>::eq;
+
+ // std::wstring
+ template
+ void
+ basic_string<wchar_t>::_M_copy(wchar_t*, const wchar_t*, size_t);
+
+ template
+ void
+ basic_string<wchar_t>::_M_move(wchar_t*, const wchar_t*, size_t);
+
+ template
+ void
+ basic_string<wchar_t>::_M_assign(wchar_t*, size_t, wchar_t);
+
+ template
+ bool
+ basic_string<wchar_t>::_M_disjunct(const wchar_t*) const;
+
+ template
+ void
+ basic_string<wchar_t>::_M_check_length(size_t, size_t,
+ const char*) const;
+
+ template
+ void
+ basic_string<wchar_t>::_Rep::_M_set_length_and_sharable(size_t);
+
+ template
+ basic_istream<wchar_t>&
+ basic_istream<wchar_t>::ignore();
+
+ template
+ bool
+ basic_fstream<wchar_t>::is_open() const;
+
+ template
+ bool
+ basic_ifstream<wchar_t>::is_open() const;
+
+ template
+ bool
+ basic_ofstream<wchar_t>::is_open() const;
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+// The rename syntax for default exported names is
+// asm (".symver name1,exportedname@GLIBCXX_3.4")
+// asm (".symver name2,exportedname@@GLIBCXX_3.4.5")
+// In the future, GLIBCXX_ABI > 6 should remove all uses of
+// _GLIBCXX_*_SYMVER macros in this file.
+
+#define _GLIBCXX_3_4_SYMVER(XXname, name) \
+ extern "C" void \
+ _X##name() \
+ __attribute__ ((alias(#XXname))); \
+ asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4");
+
+#define _GLIBCXX_3_4_5_SYMVER(XXname, name) \
+ extern "C" void \
+ _Y##name() \
+ __attribute__ ((alias(#XXname))); \
+ asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.5");
+
+#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
+ asm (".symver " #cur "," #old "@@" #version);
+
+#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_SYMVER
+#include <bits/compatibility.h>
+#undef _GLIBCXX_APPLY_SYMVER
+
+#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER
+#include <bits/compatibility.h>
+#undef _GLIBCXX_APPLY_SYMVER
+
+
+/* gcc-3.4.0
+_ZN10__gnu_norm15_List_node_base4hookEPS0_;
+_ZN10__gnu_norm15_List_node_base4swapERS0_S1_;
+_ZN10__gnu_norm15_List_node_base6unhookEv;
+_ZN10__gnu_norm15_List_node_base7reverseEv;
+_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_;
+*/
+#include "list.cc"
+_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX7_M_hookEPS0_, \
+_ZN10__gnu_norm15_List_node_base4hookEPS0_, \
+GLIBCXX_3.4)
+
+_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX4swapERS0_S1_, \
+_ZN10__gnu_norm15_List_node_base4swapERS0_S1_, \
+GLIBCXX_3.4)
+
+_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX9_M_unhookEv, \
+_ZN10__gnu_norm15_List_node_base6unhookEv, \
+GLIBCXX_3.4)
+
+_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX10_M_reverseEv, \
+_ZN10__gnu_norm15_List_node_base7reverseEv, \
+GLIBCXX_3.4)
+
+_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX11_M_transferEPS0_S1_, \
+_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_, \
+GLIBCXX_3.4)
+#undef _List_node_base
+
+// gcc-4.1.0
+// Long double versions of "C" math functions.
+#if defined (_GLIBCXX_LONG_DOUBLE_COMPAT) \
+ || (defined (__arm__) && defined (__linux__) && defined (__ARM_EABI__)) \
+ || (defined (__hppa__) && defined (__linux__)) \
+ || (defined (__m68k__) && defined (__mcoldfire__) && defined (__linux__)) \
+ || (defined (__mips__) && defined (_ABIO32) && defined (__linux__)) \
+ || (defined (__sh__) && defined (__linux__) && __SIZEOF_SIZE_T__ == 4) \
+
+#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \
+extern "C" double \
+__ ## name ## l_wrapper argdecl \
+{ \
+ return name args; \
+} \
+asm (".symver __" #name "l_wrapper, " #name "l@" #ver)
+
+#define _GLIBCXX_MATHL_WRAPPER1(name, ver) \
+ _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver)
+
+#define _GLIBCXX_MATHL_WRAPPER2(name, ver) \
+ _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver)
+
+#ifdef _GLIBCXX_HAVE_ACOSL
+_GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_ASINL
+_GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_ATAN2L
+_GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_ATANL
+_GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_CEILL
+_GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_COSHL
+_GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_COSL
+_GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_EXPL
+_GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_FLOORL
+_GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_FMODL
+_GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_FREXPL
+_GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_HYPOTL
+_GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_LDEXPL
+_GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_LOG10L
+_GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_LOGL
+_GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_MODFL
+_GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3);
+#endif
+#ifdef _GLIBCXX_HAVE_POWL
+_GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_SINHL
+_GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_SINL
+_GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_SQRTL
+_GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_TANHL
+_GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4);
+#endif
+#ifdef _GLIBCXX_HAVE_TANL
+_GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4);
+#endif
+#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+
+#endif
+
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+extern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[];
+extern void *_ZTVN10__cxxabiv119__pointer_type_infoE[];
+extern __attribute__((used, weak)) const char _ZTSe[2] = "e";
+extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
+extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
+extern __attribute__((used, weak)) const void * const _ZTIe[2]
+ = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
+ (void *) _ZTSe };
+extern __attribute__((used, weak)) const void * const _ZTIPe[4]
+ = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
+ (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
+extern __attribute__((used, weak)) const void * const _ZTIPKe[4]
+ = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
+ (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
+#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+
+#ifdef _GLIBCXX_SYMVER_DARWIN
+#if (defined(__ppc__) || defined(__ppc64__)) && defined(_GLIBCXX_SHARED)
+/* __eprintf shouldn't have been made visible from libstdc++, or
+ anywhere, but on Mac OS X 10.4 it was defined in
+ libstdc++.6.0.3.dylib; so on that platform we have to keep defining
+ it to keep binary compatibility. We can't just put the libgcc
+ version in the export list, because that doesn't work; once a
+ symbol is marked as hidden, it stays that way. */
+
+#include <cstdio>
+#include <cstdlib>
+
+using namespace std;
+
+extern "C" void
+__eprintf(const char *string, const char *expression,
+ unsigned int line, const char *filename)
+{
+ fprintf(stderr, string, expression, line, filename);
+ fflush(stderr);
+ abort();
+}
+#endif
+#endif
diff --git a/libstdc++-v3/src/complex_io.cc b/libstdc++-v3/src/c++98/complex_io.cc
index 4e4aeef46f..4e4aeef46f 100644
--- a/libstdc++-v3/src/complex_io.cc
+++ b/libstdc++-v3/src/c++98/complex_io.cc
diff --git a/libstdc++-v3/src/concept-inst.cc b/libstdc++-v3/src/c++98/concept-inst.cc
index 829d0db0b6..829d0db0b6 100644
--- a/libstdc++-v3/src/concept-inst.cc
+++ b/libstdc++-v3/src/c++98/concept-inst.cc
diff --git a/libstdc++-v3/src/c++98/ctype.cc b/libstdc++-v3/src/c++98/ctype.cc
new file mode 100644
index 0000000000..e246bea10d
--- /dev/null
+++ b/libstdc++-v3/src/c++98/ctype.cc
@@ -0,0 +1,134 @@
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005,
+// 2006, 2007, 2008, 2009, 2010, 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // Definitions for static const data members of ctype_base.
+ const ctype_base::mask ctype_base::space;
+ const ctype_base::mask ctype_base::print;
+ const ctype_base::mask ctype_base::cntrl;
+ const ctype_base::mask ctype_base::upper;
+ const ctype_base::mask ctype_base::lower;
+ const ctype_base::mask ctype_base::alpha;
+ const ctype_base::mask ctype_base::digit;
+ const ctype_base::mask ctype_base::punct;
+ const ctype_base::mask ctype_base::xdigit;
+ const ctype_base::mask ctype_base::alnum;
+ const ctype_base::mask ctype_base::graph;
+
+ // Definitions for locale::id of standard facets that are specialized.
+ locale::id ctype<char>::id;
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ locale::id ctype<wchar_t>::id;
+#endif
+
+ const size_t ctype<char>::table_size;
+
+ ctype<char>::~ctype()
+ {
+ _S_destroy_c_locale(_M_c_locale_ctype);
+ if (_M_del)
+ delete[] this->table();
+ }
+
+ // Fill in the narrowing cache and flag whether all values are
+ // valid or not. _M_narrow_ok is set to 2 if memcpy can't
+ // be used.
+ void
+ ctype<char>::
+ _M_narrow_init() const
+ {
+ char __tmp[sizeof(_M_narrow)];
+ for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
+ __tmp[__i] = __i;
+ do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
+
+ _M_narrow_ok = 1;
+ if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
+ _M_narrow_ok = 2;
+ else
+ {
+ // Deal with the special case of zero: renarrow with a
+ // different default and compare.
+ char __c;
+ do_narrow(__tmp, __tmp + 1, 1, &__c);
+ if (__c == 1)
+ _M_narrow_ok = 2;
+ }
+ }
+
+ void
+ ctype<char>::
+ _M_widen_init() const
+ {
+ char __tmp[sizeof(_M_widen)];
+ for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
+ __tmp[__i] = __i;
+ do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
+
+ _M_widen_ok = 1;
+ // Set _M_widen_ok to 2 if memcpy can't be used.
+ if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
+ _M_widen_ok = 2;
+ }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ ctype<wchar_t>::ctype(size_t __refs)
+ : __ctype_abstract_base<wchar_t>(__refs),
+ _M_c_locale_ctype(_S_get_c_locale()), _M_narrow_ok(false)
+ { _M_initialize_ctype(); }
+
+ ctype<wchar_t>::ctype(__c_locale __cloc, size_t __refs)
+ : __ctype_abstract_base<wchar_t>(__refs),
+ _M_c_locale_ctype(_S_clone_c_locale(__cloc)), _M_narrow_ok(false)
+ { _M_initialize_ctype(); }
+
+ ctype<wchar_t>::~ctype()
+ { _S_destroy_c_locale(_M_c_locale_ctype); }
+
+ ctype_byname<wchar_t>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<wchar_t>(__refs)
+ {
+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ {
+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
+ this->_M_initialize_ctype();
+ }
+ }
+
+ ctype_byname<wchar_t>::~ctype_byname()
+ { }
+
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/ext-inst.cc b/libstdc++-v3/src/c++98/ext-inst.cc
index 831f37cf14..831f37cf14 100644
--- a/libstdc++-v3/src/ext-inst.cc
+++ b/libstdc++-v3/src/c++98/ext-inst.cc
diff --git a/libstdc++-v3/src/globals_io.cc b/libstdc++-v3/src/c++98/globals_io.cc
index 722abacbe8..722abacbe8 100644
--- a/libstdc++-v3/src/globals_io.cc
+++ b/libstdc++-v3/src/c++98/globals_io.cc
diff --git a/libstdc++-v3/src/c++98/hash-long-double-tr1-aux.cc b/libstdc++-v3/src/c++98/hash-long-double-tr1-aux.cc
new file mode 100644
index 0000000000..70ed45bbfb
--- /dev/null
+++ b/libstdc++-v3/src/c++98/hash-long-double-tr1-aux.cc
@@ -0,0 +1,56 @@
+// std::tr1::hash definitions, long double bits -*- C++ -*-
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace tr1
+ {
+ // For long double, careful with random padding bits (e.g., on x86,
+ // 10 bytes -> 12 bytes) and resort to frexp.
+ template<>
+ size_t
+ hash<long double>::operator()(long double __val) const
+ {
+ // 0 and -0 both hash to zero.
+ if (__val == 0.0L)
+ return 0;
+
+ int __exponent;
+ __val = __builtin_frexpl(__val, &__exponent);
+ __val = __val < 0.0l ? -(__val + 0.5l) : __val;
+
+ const long double __mult = __SIZE_MAX__ + 1.0l;
+ __val *= __mult;
+
+ // Try to use all the bits of the mantissa (really necessary only
+ // on 32-bit targets, at least for 80-bit floating point formats).
+ const size_t __hibits = (size_t)__val;
+ __val = (__val - (long double)__hibits) * __mult;
+
+ const size_t __coeff = __SIZE_MAX__ / __LDBL_MAX_EXP__;
+
+ return __hibits + (size_t)__val + __coeff * __exponent;
+ }
+ }
+}
diff --git a/libstdc++-v3/src/c++98/hash_tr1.cc b/libstdc++-v3/src/c++98/hash_tr1.cc
new file mode 100644
index 0000000000..a5ac87e585
--- /dev/null
+++ b/libstdc++-v3/src/c++98/hash_tr1.cc
@@ -0,0 +1,58 @@
+// std::tr1::hash definitions -*- C++ -*-
+
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <tr1/functional>
+
+#include "hash-long-double-tr1-aux.cc"
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace tr1
+ {
+#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+ template<>
+ size_t
+ hash<string>::operator()(string __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+ template<>
+ size_t
+ hash<const string&>::operator()(const string& __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ size_t
+ hash<wstring>::operator()(wstring __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+
+ template<>
+ size_t
+ hash<const wstring&>::operator()(const wstring& __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+#endif
+#endif
+ }
+}
diff --git a/libstdc++-v3/src/c++98/hashtable_tr1.cc b/libstdc++-v3/src/c++98/hashtable_tr1.cc
new file mode 100644
index 0000000000..53b5e5db4d
--- /dev/null
+++ b/libstdc++-v3/src/c++98/hashtable_tr1.cc
@@ -0,0 +1,33 @@
+// std::__detail definitions -*- C++ -*-
+
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <bits/c++config.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace tr1
+ {
+#include "../shared/hashtable-aux.cc"
+ }
+}
diff --git a/libstdc++-v3/src/ios-inst.cc b/libstdc++-v3/src/c++98/ios-inst.cc
index 10fdaf7cd9..10fdaf7cd9 100644
--- a/libstdc++-v3/src/ios-inst.cc
+++ b/libstdc++-v3/src/c++98/ios-inst.cc
diff --git a/libstdc++-v3/src/ios.cc b/libstdc++-v3/src/c++98/ios.cc
index 292f1f8d02..292f1f8d02 100644
--- a/libstdc++-v3/src/ios.cc
+++ b/libstdc++-v3/src/c++98/ios.cc
diff --git a/libstdc++-v3/src/ios_failure.cc b/libstdc++-v3/src/c++98/ios_failure.cc
index 1c42f01edd..1c42f01edd 100644
--- a/libstdc++-v3/src/ios_failure.cc
+++ b/libstdc++-v3/src/c++98/ios_failure.cc
diff --git a/libstdc++-v3/src/ios_init.cc b/libstdc++-v3/src/c++98/ios_init.cc
index a811daf00c..a811daf00c 100644
--- a/libstdc++-v3/src/ios_init.cc
+++ b/libstdc++-v3/src/c++98/ios_init.cc
diff --git a/libstdc++-v3/src/ios_locale.cc b/libstdc++-v3/src/c++98/ios_locale.cc
index b98b96c622..b98b96c622 100644
--- a/libstdc++-v3/src/ios_locale.cc
+++ b/libstdc++-v3/src/c++98/ios_locale.cc
diff --git a/libstdc++-v3/src/iostream-inst.cc b/libstdc++-v3/src/c++98/iostream-inst.cc
index 60f52061e0..60f52061e0 100644
--- a/libstdc++-v3/src/iostream-inst.cc
+++ b/libstdc++-v3/src/c++98/iostream-inst.cc
diff --git a/libstdc++-v3/src/istream-inst.cc b/libstdc++-v3/src/c++98/istream-inst.cc
index 4d3bc1a74d..4d3bc1a74d 100644
--- a/libstdc++-v3/src/istream-inst.cc
+++ b/libstdc++-v3/src/c++98/istream-inst.cc
diff --git a/libstdc++-v3/src/c++98/istream.cc b/libstdc++-v3/src/c++98/istream.cc
new file mode 100644
index 0000000000..6bcf2dbf34
--- /dev/null
+++ b/libstdc++-v3/src/c++98/istream.cc
@@ -0,0 +1,687 @@
+// Input streams -*- C++ -*-
+
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882: 27.6.1 Input streams
+//
+
+#include <istream>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<>
+ basic_istream<char>&
+ basic_istream<char>::
+ getline(char_type* __s, streamsize __n, char_type __delim)
+ {
+ _M_gcount = 0;
+ ios_base::iostate __err = ios_base::goodbit;
+ sentry __cerb(*this, true);
+ if (__cerb)
+ {
+ __try
+ {
+ const int_type __idelim = traits_type::to_int_type(__delim);
+ const int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = this->rdbuf();
+ int_type __c = __sb->sgetc();
+
+ while (_M_gcount + 1 < __n
+ && !traits_type::eq_int_type(__c, __eof)
+ && !traits_type::eq_int_type(__c, __idelim))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - _M_gcount
+ - 1));
+ if (__size > 1)
+ {
+ const char_type* __p = traits_type::find(__sb->gptr(),
+ __size,
+ __delim);
+ if (__p)
+ __size = __p - __sb->gptr();
+ traits_type::copy(__s, __sb->gptr(), __size);
+ __s += __size;
+ __sb->__safe_gbump(__size);
+ _M_gcount += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ *__s++ = traits_type::to_char_type(__c);
+ ++_M_gcount;
+ __c = __sb->snextc();
+ }
+ }
+
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ else if (traits_type::eq_int_type(__c, __idelim))
+ {
+ ++_M_gcount;
+ __sb->sbumpc();
+ }
+ else
+ __err |= ios_base::failbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+ }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 243. get and getline when sentry reports failure.
+ if (__n > 0)
+ *__s = char_type();
+ if (!_M_gcount)
+ __err |= ios_base::failbit;
+ if (__err)
+ this->setstate(__err);
+ return *this;
+ }
+
+ template<>
+ basic_istream<char>&
+ basic_istream<char>::
+ ignore(streamsize __n, int_type __delim)
+ {
+ if (traits_type::eq_int_type(__delim, traits_type::eof()))
+ return ignore(__n);
+
+ _M_gcount = 0;
+ sentry __cerb(*this, true);
+ if (__n > 0 && __cerb)
+ {
+ ios_base::iostate __err = ios_base::goodbit;
+ __try
+ {
+ const char_type __cdelim = traits_type::to_char_type(__delim);
+ const int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = this->rdbuf();
+ int_type __c = __sb->sgetc();
+
+ bool __large_ignore = false;
+ while (true)
+ {
+ while (_M_gcount < __n
+ && !traits_type::eq_int_type(__c, __eof)
+ && !traits_type::eq_int_type(__c, __delim))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - _M_gcount));
+ if (__size > 1)
+ {
+ const char_type* __p = traits_type::find(__sb->gptr(),
+ __size,
+ __cdelim);
+ if (__p)
+ __size = __p - __sb->gptr();
+ __sb->__safe_gbump(__size);
+ _M_gcount += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ ++_M_gcount;
+ __c = __sb->snextc();
+ }
+ }
+ if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+ && !traits_type::eq_int_type(__c, __eof)
+ && !traits_type::eq_int_type(__c, __delim))
+ {
+ _M_gcount =
+ __gnu_cxx::__numeric_traits<streamsize>::__min;
+ __large_ignore = true;
+ }
+ else
+ break;
+ }
+
+ if (__large_ignore)
+ _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ else if (traits_type::eq_int_type(__c, __delim))
+ {
+ if (_M_gcount
+ < __gnu_cxx::__numeric_traits<streamsize>::__max)
+ ++_M_gcount;
+ __sb->sbumpc();
+ }
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+ if (__err)
+ this->setstate(__err);
+ }
+ return *this;
+ }
+
+ template<>
+ basic_istream<char>&
+ operator>>(basic_istream<char>& __in, char* __s)
+ {
+ typedef basic_istream<char> __istream_type;
+ typedef __istream_type::int_type __int_type;
+ typedef __istream_type::char_type __char_type;
+ typedef __istream_type::traits_type __traits_type;
+ typedef __istream_type::__streambuf_type __streambuf_type;
+ typedef __istream_type::__ctype_type __ctype_type;
+
+ streamsize __extracted = 0;
+ ios_base::iostate __err = ios_base::goodbit;
+ __istream_type::sentry __cerb(__in, false);
+ if (__cerb)
+ {
+ __try
+ {
+ // Figure out how many characters to extract.
+ streamsize __num = __in.width();
+ if (__num <= 0)
+ __num = __gnu_cxx::__numeric_traits<streamsize>::__max;
+
+ const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+
+ const __int_type __eof = __traits_type::eof();
+ __streambuf_type* __sb = __in.rdbuf();
+ __int_type __c = __sb->sgetc();
+
+ while (__extracted < __num - 1
+ && !__traits_type::eq_int_type(__c, __eof)
+ && !__ct.is(ctype_base::space,
+ __traits_type::to_char_type(__c)))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__num - __extracted
+ - 1));
+ if (__size > 1)
+ {
+ __size = (__ct.scan_is(ctype_base::space,
+ __sb->gptr() + 1,
+ __sb->gptr() + __size)
+ - __sb->gptr());
+ __traits_type::copy(__s, __sb->gptr(), __size);
+ __s += __size;
+ __sb->__safe_gbump(__size);
+ __extracted += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ *__s++ = __traits_type::to_char_type(__c);
+ ++__extracted;
+ __c = __sb->snextc();
+ }
+ }
+
+ if (__traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 68. Extractors for char* should store null at end
+ *__s = __char_type();
+ __in.width(0);
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __in._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { __in._M_setstate(ios_base::badbit); }
+ }
+ if (!__extracted)
+ __err |= ios_base::failbit;
+ if (__err)
+ __in.setstate(__err);
+ return __in;
+ }
+
+ template<>
+ basic_istream<char>&
+ operator>>(basic_istream<char>& __in, basic_string<char>& __str)
+ {
+ typedef basic_istream<char> __istream_type;
+ typedef __istream_type::int_type __int_type;
+ typedef __istream_type::traits_type __traits_type;
+ typedef __istream_type::__streambuf_type __streambuf_type;
+ typedef __istream_type::__ctype_type __ctype_type;
+ typedef basic_string<char> __string_type;
+ typedef __string_type::size_type __size_type;
+
+ __size_type __extracted = 0;
+ ios_base::iostate __err = ios_base::goodbit;
+ __istream_type::sentry __cerb(__in, false);
+ if (__cerb)
+ {
+ __try
+ {
+ __str.erase();
+ const streamsize __w = __in.width();
+ const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
+ : __str.max_size();
+ const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+ const __int_type __eof = __traits_type::eof();
+ __streambuf_type* __sb = __in.rdbuf();
+ __int_type __c = __sb->sgetc();
+
+ while (__extracted < __n
+ && !__traits_type::eq_int_type(__c, __eof)
+ && !__ct.is(ctype_base::space,
+ __traits_type::to_char_type(__c)))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - __extracted));
+ if (__size > 1)
+ {
+ __size = (__ct.scan_is(ctype_base::space,
+ __sb->gptr() + 1,
+ __sb->gptr() + __size)
+ - __sb->gptr());
+ __str.append(__sb->gptr(), __size);
+ __sb->__safe_gbump(__size);
+ __extracted += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ __str += __traits_type::to_char_type(__c);
+ ++__extracted;
+ __c = __sb->snextc();
+ }
+ }
+
+ if (__traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ __in.width(0);
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __in._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 91. Description of operator>> and getline() for string<>
+ // might cause endless loop
+ __in._M_setstate(ios_base::badbit);
+ }
+ }
+ if (!__extracted)
+ __err |= ios_base::failbit;
+ if (__err)
+ __in.setstate(__err);
+ return __in;
+ }
+
+ template<>
+ basic_istream<char>&
+ getline(basic_istream<char>& __in, basic_string<char>& __str,
+ char __delim)
+ {
+ typedef basic_istream<char> __istream_type;
+ typedef __istream_type::int_type __int_type;
+ typedef __istream_type::char_type __char_type;
+ typedef __istream_type::traits_type __traits_type;
+ typedef __istream_type::__streambuf_type __streambuf_type;
+ typedef basic_string<char> __string_type;
+ typedef __string_type::size_type __size_type;
+
+ __size_type __extracted = 0;
+ const __size_type __n = __str.max_size();
+ ios_base::iostate __err = ios_base::goodbit;
+ __istream_type::sentry __cerb(__in, true);
+ if (__cerb)
+ {
+ __try
+ {
+ __str.erase();
+ const __int_type __idelim = __traits_type::to_int_type(__delim);
+ const __int_type __eof = __traits_type::eof();
+ __streambuf_type* __sb = __in.rdbuf();
+ __int_type __c = __sb->sgetc();
+
+ while (__extracted < __n
+ && !__traits_type::eq_int_type(__c, __eof)
+ && !__traits_type::eq_int_type(__c, __idelim))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - __extracted));
+ if (__size > 1)
+ {
+ const __char_type* __p = __traits_type::find(__sb->gptr(),
+ __size,
+ __delim);
+ if (__p)
+ __size = __p - __sb->gptr();
+ __str.append(__sb->gptr(), __size);
+ __sb->__safe_gbump(__size);
+ __extracted += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ __str += __traits_type::to_char_type(__c);
+ ++__extracted;
+ __c = __sb->snextc();
+ }
+ }
+
+ if (__traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ else if (__traits_type::eq_int_type(__c, __idelim))
+ {
+ ++__extracted;
+ __sb->sbumpc();
+ }
+ else
+ __err |= ios_base::failbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __in._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 91. Description of operator>> and getline() for string<>
+ // might cause endless loop
+ __in._M_setstate(ios_base::badbit);
+ }
+ }
+ if (!__extracted)
+ __err |= ios_base::failbit;
+ if (__err)
+ __in.setstate(__err);
+ return __in;
+ }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ basic_istream<wchar_t>&
+ basic_istream<wchar_t>::
+ getline(char_type* __s, streamsize __n, char_type __delim)
+ {
+ _M_gcount = 0;
+ ios_base::iostate __err = ios_base::goodbit;
+ sentry __cerb(*this, true);
+ if (__cerb)
+ {
+ __try
+ {
+ const int_type __idelim = traits_type::to_int_type(__delim);
+ const int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = this->rdbuf();
+ int_type __c = __sb->sgetc();
+
+ while (_M_gcount + 1 < __n
+ && !traits_type::eq_int_type(__c, __eof)
+ && !traits_type::eq_int_type(__c, __idelim))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - _M_gcount
+ - 1));
+ if (__size > 1)
+ {
+ const char_type* __p = traits_type::find(__sb->gptr(),
+ __size,
+ __delim);
+ if (__p)
+ __size = __p - __sb->gptr();
+ traits_type::copy(__s, __sb->gptr(), __size);
+ __s += __size;
+ __sb->__safe_gbump(__size);
+ _M_gcount += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ *__s++ = traits_type::to_char_type(__c);
+ ++_M_gcount;
+ __c = __sb->snextc();
+ }
+ }
+
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ else if (traits_type::eq_int_type(__c, __idelim))
+ {
+ ++_M_gcount;
+ __sb->sbumpc();
+ }
+ else
+ __err |= ios_base::failbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+ }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 243. get and getline when sentry reports failure.
+ if (__n > 0)
+ *__s = char_type();
+ if (!_M_gcount)
+ __err |= ios_base::failbit;
+ if (__err)
+ this->setstate(__err);
+ return *this;
+ }
+
+ template<>
+ basic_istream<wchar_t>&
+ basic_istream<wchar_t>::
+ ignore(streamsize __n, int_type __delim)
+ {
+ if (traits_type::eq_int_type(__delim, traits_type::eof()))
+ return ignore(__n);
+
+ _M_gcount = 0;
+ sentry __cerb(*this, true);
+ if (__n > 0 && __cerb)
+ {
+ ios_base::iostate __err = ios_base::goodbit;
+ __try
+ {
+ const char_type __cdelim = traits_type::to_char_type(__delim);
+ const int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = this->rdbuf();
+ int_type __c = __sb->sgetc();
+
+ bool __large_ignore = false;
+ while (true)
+ {
+ while (_M_gcount < __n
+ && !traits_type::eq_int_type(__c, __eof)
+ && !traits_type::eq_int_type(__c, __delim))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - _M_gcount));
+ if (__size > 1)
+ {
+ const char_type* __p = traits_type::find(__sb->gptr(),
+ __size,
+ __cdelim);
+ if (__p)
+ __size = __p - __sb->gptr();
+ __sb->__safe_gbump(__size);
+ _M_gcount += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ ++_M_gcount;
+ __c = __sb->snextc();
+ }
+ }
+ if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+ && !traits_type::eq_int_type(__c, __eof)
+ && !traits_type::eq_int_type(__c, __delim))
+ {
+ _M_gcount =
+ __gnu_cxx::__numeric_traits<streamsize>::__min;
+ __large_ignore = true;
+ }
+ else
+ break;
+ }
+
+ if (__large_ignore)
+ _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ else if (traits_type::eq_int_type(__c, __delim))
+ {
+ if (_M_gcount
+ < __gnu_cxx::__numeric_traits<streamsize>::__max)
+ ++_M_gcount;
+ __sb->sbumpc();
+ }
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+ if (__err)
+ this->setstate(__err);
+ }
+ return *this;
+ }
+
+ template<>
+ basic_istream<wchar_t>&
+ getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
+ wchar_t __delim)
+ {
+ typedef basic_istream<wchar_t> __istream_type;
+ typedef __istream_type::int_type __int_type;
+ typedef __istream_type::char_type __char_type;
+ typedef __istream_type::traits_type __traits_type;
+ typedef __istream_type::__streambuf_type __streambuf_type;
+ typedef basic_string<wchar_t> __string_type;
+ typedef __string_type::size_type __size_type;
+
+ __size_type __extracted = 0;
+ const __size_type __n = __str.max_size();
+ ios_base::iostate __err = ios_base::goodbit;
+ __istream_type::sentry __cerb(__in, true);
+ if (__cerb)
+ {
+ __try
+ {
+ __str.erase();
+ const __int_type __idelim = __traits_type::to_int_type(__delim);
+ const __int_type __eof = __traits_type::eof();
+ __streambuf_type* __sb = __in.rdbuf();
+ __int_type __c = __sb->sgetc();
+
+ while (__extracted < __n
+ && !__traits_type::eq_int_type(__c, __eof)
+ && !__traits_type::eq_int_type(__c, __idelim))
+ {
+ streamsize __size = std::min(streamsize(__sb->egptr()
+ - __sb->gptr()),
+ streamsize(__n - __extracted));
+ if (__size > 1)
+ {
+ const __char_type* __p = __traits_type::find(__sb->gptr(),
+ __size,
+ __delim);
+ if (__p)
+ __size = __p - __sb->gptr();
+ __str.append(__sb->gptr(), __size);
+ __sb->__safe_gbump(__size);
+ __extracted += __size;
+ __c = __sb->sgetc();
+ }
+ else
+ {
+ __str += __traits_type::to_char_type(__c);
+ ++__extracted;
+ __c = __sb->snextc();
+ }
+ }
+
+ if (__traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ else if (__traits_type::eq_int_type(__c, __idelim))
+ {
+ ++__extracted;
+ __sb->sbumpc();
+ }
+ else
+ __err |= ios_base::failbit;
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __in._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 91. Description of operator>> and getline() for string<>
+ // might cause endless loop
+ __in._M_setstate(ios_base::badbit);
+ }
+ }
+ if (!__extracted)
+ __err |= ios_base::failbit;
+ if (__err)
+ __in.setstate(__err);
+ return __in;
+ }
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/c++98/list.cc b/libstdc++-v3/src/c++98/list.cc
new file mode 100644
index 0000000000..6dbad69ac6
--- /dev/null
+++ b/libstdc++-v3/src/c++98/list.cc
@@ -0,0 +1,147 @@
+// std::list utilities implementation -*- C++ -*-
+
+// Copyright (C) 2003, 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/*
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ */
+
+#include <list>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace __detail
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ void
+ _List_node_base::swap(_List_node_base& __x,
+ _List_node_base& __y) _GLIBCXX_USE_NOEXCEPT
+ {
+ if ( __x._M_next != &__x )
+ {
+ if ( __y._M_next != &__y )
+ {
+ // Both __x and __y are not empty.
+ std::swap(__x._M_next,__y._M_next);
+ std::swap(__x._M_prev,__y._M_prev);
+ __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
+ __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
+ }
+ else
+ {
+ // __x is not empty, __y is empty.
+ __y._M_next = __x._M_next;
+ __y._M_prev = __x._M_prev;
+ __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
+ __x._M_next = __x._M_prev = &__x;
+ }
+ }
+ else if ( __y._M_next != &__y )
+ {
+ // __x is empty, __y is not empty.
+ __x._M_next = __y._M_next;
+ __x._M_prev = __y._M_prev;
+ __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
+ __y._M_next = __y._M_prev = &__y;
+ }
+ }
+
+ void
+ _List_node_base::
+ _M_transfer(_List_node_base * const __first,
+ _List_node_base * const __last) _GLIBCXX_USE_NOEXCEPT
+ {
+ if (this != __last)
+ {
+ // Remove [first, last) from its old position.
+ __last->_M_prev->_M_next = this;
+ __first->_M_prev->_M_next = __last;
+ this->_M_prev->_M_next = __first;
+
+ // Splice [first, last) into its new position.
+ _List_node_base* const __tmp = this->_M_prev;
+ this->_M_prev = __last->_M_prev;
+ __last->_M_prev = __first->_M_prev;
+ __first->_M_prev = __tmp;
+ }
+ }
+
+ void
+ _List_node_base::_M_reverse() _GLIBCXX_USE_NOEXCEPT
+ {
+ _List_node_base* __tmp = this;
+ do
+ {
+ std::swap(__tmp->_M_next, __tmp->_M_prev);
+
+ // Old next node is now prev.
+ __tmp = __tmp->_M_prev;
+ }
+ while (__tmp != this);
+ }
+
+ void
+ _List_node_base::
+ _M_hook(_List_node_base* const __position) _GLIBCXX_USE_NOEXCEPT
+ {
+ this->_M_next = __position;
+ this->_M_prev = __position->_M_prev;
+ __position->_M_prev->_M_next = this;
+ __position->_M_prev = this;
+ }
+
+ void
+ _List_node_base::_M_unhook() _GLIBCXX_USE_NOEXCEPT
+ {
+ _List_node_base* const __next_node = this->_M_next;
+ _List_node_base* const __prev_node = this->_M_prev;
+ __prev_node->_M_next = __next_node;
+ __next_node->_M_prev = __prev_node;
+ }
+
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace __detail
+} // namespace std
diff --git a/libstdc++-v3/src/locale-inst.cc b/libstdc++-v3/src/c++98/locale-inst.cc
index e77c5c95d6..e77c5c95d6 100644
--- a/libstdc++-v3/src/locale-inst.cc
+++ b/libstdc++-v3/src/c++98/locale-inst.cc
diff --git a/libstdc++-v3/src/c++98/locale.cc b/libstdc++-v3/src/c++98/locale.cc
new file mode 100644
index 0000000000..8fd487394e
--- /dev/null
+++ b/libstdc++-v3/src/c++98/locale.cc
@@ -0,0 +1,444 @@
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <clocale>
+#include <cstring>
+#include <cstdlib> // For getenv
+#include <cctype>
+#include <cwctype> // For towupper, etc.
+#include <locale>
+#include <ext/concurrence.h>
+
+namespace
+{
+ __gnu_cxx::__mutex&
+ get_locale_cache_mutex()
+ {
+ static __gnu_cxx::__mutex locale_cache_mutex;
+ return locale_cache_mutex;
+ }
+} // anonymous namespace
+
+// XXX GLIBCXX_ABI Deprecated
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+# define _GLIBCXX_LOC_ID(mangled) extern std::locale::id mangled
+_GLIBCXX_LOC_ID (_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+_GLIBCXX_LOC_ID (_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+_GLIBCXX_LOC_ID (_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+_GLIBCXX_LOC_ID (_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+# ifdef _GLIBCXX_USE_WCHAR_T
+_GLIBCXX_LOC_ID (_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+_GLIBCXX_LOC_ID (_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+_GLIBCXX_LOC_ID (_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+_GLIBCXX_LOC_ID (_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+# endif
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // Definitions for static const data members of locale.
+ const locale::category locale::none;
+ const locale::category locale::ctype;
+ const locale::category locale::numeric;
+ const locale::category locale::collate;
+ const locale::category locale::time;
+ const locale::category locale::monetary;
+ const locale::category locale::messages;
+ const locale::category locale::all;
+
+ // These are no longer exported.
+ locale::_Impl* locale::_S_classic;
+ locale::_Impl* locale::_S_global;
+
+#ifdef __GTHREADS
+ __gthread_once_t locale::_S_once = __GTHREAD_ONCE_INIT;
+#endif
+
+ locale::locale(const locale& __other) throw()
+ : _M_impl(__other._M_impl)
+ { _M_impl->_M_add_reference(); }
+
+ // This is used to initialize global and classic locales, and
+ // assumes that the _Impl objects are constructed correctly.
+ // The lack of a reference increment is intentional.
+ locale::locale(_Impl* __ip) throw() : _M_impl(__ip)
+ { }
+
+ locale::~locale() throw()
+ { _M_impl->_M_remove_reference(); }
+
+ bool
+ locale::operator==(const locale& __rhs) const throw()
+ {
+ // Deal first with the common cases, fast to process: refcopies,
+ // unnamed (i.e., !_M_names[0]), "simple" (!_M_names[1] => all the
+ // categories same name, i.e., _M_names[0]). Otherwise fall back
+ // to the general locale::name().
+ bool __ret;
+ if (_M_impl == __rhs._M_impl)
+ __ret = true;
+ else if (!_M_impl->_M_names[0] || !__rhs._M_impl->_M_names[0]
+ || std::strcmp(_M_impl->_M_names[0],
+ __rhs._M_impl->_M_names[0]) != 0)
+ __ret = false;
+ else if (!_M_impl->_M_names[1] && !__rhs._M_impl->_M_names[1])
+ __ret = true;
+ else
+ __ret = this->name() == __rhs.name();
+ return __ret;
+ }
+
+ const locale&
+ locale::operator=(const locale& __other) throw()
+ {
+ __other._M_impl->_M_add_reference();
+ _M_impl->_M_remove_reference();
+ _M_impl = __other._M_impl;
+ return *this;
+ }
+
+ string
+ locale::name() const
+ {
+ string __ret;
+ if (!_M_impl->_M_names[0])
+ __ret = '*';
+ else if (_M_impl->_M_check_same_name())
+ __ret = _M_impl->_M_names[0];
+ else
+ {
+ __ret.reserve(128);
+ __ret += _S_categories[0];
+ __ret += '=';
+ __ret += _M_impl->_M_names[0];
+ for (size_t __i = 1; __i < _S_categories_size; ++__i)
+ {
+ __ret += ';';
+ __ret += _S_categories[__i];
+ __ret += '=';
+ __ret += _M_impl->_M_names[__i];
+ }
+ }
+ return __ret;
+ }
+
+ locale::category
+ locale::_S_normalize_category(category __cat)
+ {
+ int __ret = 0;
+ if (__cat == none || ((__cat & all) && !(__cat & ~all)))
+ __ret = __cat;
+ else
+ {
+ // NB: May be a C-style "LC_ALL" category; convert.
+ switch (__cat)
+ {
+ case LC_COLLATE:
+ __ret = collate;
+ break;
+ case LC_CTYPE:
+ __ret = ctype;
+ break;
+ case LC_MONETARY:
+ __ret = monetary;
+ break;
+ case LC_NUMERIC:
+ __ret = numeric;
+ break;
+ case LC_TIME:
+ __ret = time;
+ break;
+#ifdef _GLIBCXX_HAVE_LC_MESSAGES
+ case LC_MESSAGES:
+ __ret = messages;
+ break;
+#endif
+ case LC_ALL:
+ __ret = all;
+ break;
+ default:
+ __throw_runtime_error(__N("locale::_S_normalize_category "
+ "category not found"));
+ }
+ }
+ return __ret;
+ }
+
+ // locale::facet
+ __c_locale locale::facet::_S_c_locale;
+
+ const char locale::facet::_S_c_name[2] = "C";
+
+#ifdef __GTHREADS
+ __gthread_once_t locale::facet::_S_once = __GTHREAD_ONCE_INIT;
+#endif
+
+ void
+ locale::facet::_S_initialize_once()
+ {
+ // Initialize the underlying locale model.
+ _S_create_c_locale(_S_c_locale, _S_c_name);
+ }
+
+ __c_locale
+ locale::facet::_S_get_c_locale()
+ {
+#ifdef __GTHREADS
+ if (__gthread_active_p())
+ __gthread_once(&_S_once, _S_initialize_once);
+ else
+#endif
+ {
+ if (!_S_c_locale)
+ _S_initialize_once();
+ }
+ return _S_c_locale;
+ }
+
+ const char*
+ locale::facet::_S_get_c_name() throw()
+ { return _S_c_name; }
+
+ locale::facet::
+ ~facet() { }
+
+ // locale::_Impl
+ locale::_Impl::
+ ~_Impl() throw()
+ {
+ if (_M_facets)
+ for (size_t __i = 0; __i < _M_facets_size; ++__i)
+ if (_M_facets[__i])
+ _M_facets[__i]->_M_remove_reference();
+ delete [] _M_facets;
+
+ if (_M_caches)
+ for (size_t __i = 0; __i < _M_facets_size; ++__i)
+ if (_M_caches[__i])
+ _M_caches[__i]->_M_remove_reference();
+ delete [] _M_caches;
+
+ if (_M_names)
+ for (size_t __i = 0; __i < _S_categories_size; ++__i)
+ delete [] _M_names[__i];
+ delete [] _M_names;
+ }
+
+ // Clone existing _Impl object.
+ locale::_Impl::
+ _Impl(const _Impl& __imp, size_t __refs)
+ : _M_refcount(__refs), _M_facets(0), _M_facets_size(__imp._M_facets_size),
+ _M_caches(0), _M_names(0)
+ {
+ __try
+ {
+ _M_facets = new const facet*[_M_facets_size];
+ for (size_t __i = 0; __i < _M_facets_size; ++__i)
+ {
+ _M_facets[__i] = __imp._M_facets[__i];
+ if (_M_facets[__i])
+ _M_facets[__i]->_M_add_reference();
+ }
+ _M_caches = new const facet*[_M_facets_size];
+ for (size_t __j = 0; __j < _M_facets_size; ++__j)
+ {
+ _M_caches[__j] = __imp._M_caches[__j];
+ if (_M_caches[__j])
+ _M_caches[__j]->_M_add_reference();
+ }
+ _M_names = new char*[_S_categories_size];
+ for (size_t __k = 0; __k < _S_categories_size; ++__k)
+ _M_names[__k] = 0;
+
+ // Name the categories.
+ for (size_t __l = 0; (__l < _S_categories_size
+ && __imp._M_names[__l]); ++__l)
+ {
+ const size_t __len = std::strlen(__imp._M_names[__l]) + 1;
+ _M_names[__l] = new char[__len];
+ std::memcpy(_M_names[__l], __imp._M_names[__l], __len);
+ }
+ }
+ __catch(...)
+ {
+ this->~_Impl();
+ __throw_exception_again;
+ }
+ }
+
+ void
+ locale::_Impl::
+ _M_replace_category(const _Impl* __imp,
+ const locale::id* const* __idpp)
+ {
+ for (; *__idpp; ++__idpp)
+ _M_replace_facet(__imp, *__idpp);
+ }
+
+ void
+ locale::_Impl::
+ _M_replace_facet(const _Impl* __imp, const locale::id* __idp)
+ {
+ size_t __index = __idp->_M_id();
+ if ((__index > (__imp->_M_facets_size - 1))
+ || !__imp->_M_facets[__index])
+ __throw_runtime_error(__N("locale::_Impl::_M_replace_facet"));
+ _M_install_facet(__idp, __imp->_M_facets[__index]);
+ }
+
+ void
+ locale::_Impl::
+ _M_install_facet(const locale::id* __idp, const facet* __fp)
+ {
+ if (__fp)
+ {
+ size_t __index = __idp->_M_id();
+
+ // Check size of facet vector to ensure adequate room.
+ if (__index > _M_facets_size - 1)
+ {
+ const size_t __new_size = __index + 4;
+
+ // New facet array.
+ const facet** __oldf = _M_facets;
+ const facet** __newf;
+ __newf = new const facet*[__new_size];
+ for (size_t __i = 0; __i < _M_facets_size; ++__i)
+ __newf[__i] = _M_facets[__i];
+ for (size_t __l = _M_facets_size; __l < __new_size; ++__l)
+ __newf[__l] = 0;
+
+ // New cache array.
+ const facet** __oldc = _M_caches;
+ const facet** __newc;
+ __try
+ {
+ __newc = new const facet*[__new_size];
+ }
+ __catch(...)
+ {
+ delete [] __newf;
+ __throw_exception_again;
+ }
+ for (size_t __j = 0; __j < _M_facets_size; ++__j)
+ __newc[__j] = _M_caches[__j];
+ for (size_t __k = _M_facets_size; __k < __new_size; ++__k)
+ __newc[__k] = 0;
+
+ _M_facets_size = __new_size;
+ _M_facets = __newf;
+ _M_caches = __newc;
+ delete [] __oldf;
+ delete [] __oldc;
+ }
+
+ __fp->_M_add_reference();
+ const facet*& __fpr = _M_facets[__index];
+ if (__fpr)
+ {
+ // Replacing an existing facet. Order matters.
+ __fpr->_M_remove_reference();
+ __fpr = __fp;
+ }
+ else
+ {
+ // Installing a newly created facet into an empty
+ // _M_facets container, say a newly-constructed,
+ // swanky-fresh _Impl.
+ _M_facets[__index] = __fp;
+ }
+
+ // Ideally, it would be nice to only remove the caches that
+ // are now incorrect. However, some of the caches depend on
+ // multiple facets, and we only know about one facet
+ // here. It's no great loss: the first use of the new facet
+ // will create a new, correctly cached facet anyway.
+ for (size_t __i = 0; __i < _M_facets_size; ++__i)
+ {
+ const facet* __cpr = _M_caches[__i];
+ if (__cpr)
+ {
+ __cpr->_M_remove_reference();
+ _M_caches[__i] = 0;
+ }
+ }
+ }
+ }
+
+ void
+ locale::_Impl::
+ _M_install_cache(const facet* __cache, size_t __index)
+ {
+ __gnu_cxx::__scoped_lock sentry(get_locale_cache_mutex());
+ if (_M_caches[__index] != 0)
+ {
+ // Some other thread got in first.
+ delete __cache;
+ }
+ else
+ {
+ __cache->_M_add_reference();
+ _M_caches[__index] = __cache;
+ }
+ }
+
+ // locale::id
+ // Definitions for static const data members of locale::id
+ _Atomic_word locale::id::_S_refcount; // init'd to 0 by linker
+
+ size_t
+ locale::id::_M_id() const throw()
+ {
+ if (!_M_index)
+ {
+ // XXX GLIBCXX_ABI Deprecated
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+ locale::id *f = 0;
+# define _GLIBCXX_SYNC_ID(facet, mangled) \
+ if (this == &::mangled) \
+ f = &facet::id
+ _GLIBCXX_SYNC_ID (num_get<char>, _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+ _GLIBCXX_SYNC_ID (num_put<char>, _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+ _GLIBCXX_SYNC_ID (money_get<char>, _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+ _GLIBCXX_SYNC_ID (money_put<char>, _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
+# ifdef _GLIBCXX_USE_WCHAR_T
+ _GLIBCXX_SYNC_ID (num_get<wchar_t>, _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+ _GLIBCXX_SYNC_ID (num_put<wchar_t>, _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+ _GLIBCXX_SYNC_ID (money_get<wchar_t>, _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+ _GLIBCXX_SYNC_ID (money_put<wchar_t>, _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
+# endif
+ if (f)
+ _M_index = 1 + f->_M_id();
+ else
+#endif
+ _M_index = 1 + __gnu_cxx::__exchange_and_add_dispatch(&_S_refcount,
+ 1);
+ }
+ return _M_index - 1;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/locale_facets.cc b/libstdc++-v3/src/c++98/locale_facets.cc
index 92552227f8..92552227f8 100644
--- a/libstdc++-v3/src/locale_facets.cc
+++ b/libstdc++-v3/src/c++98/locale_facets.cc
diff --git a/libstdc++-v3/src/locale_init.cc b/libstdc++-v3/src/c++98/locale_init.cc
index 98c228cf15..98c228cf15 100644
--- a/libstdc++-v3/src/locale_init.cc
+++ b/libstdc++-v3/src/c++98/locale_init.cc
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/c++98/localename.cc
index 52e2282819..52e2282819 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/c++98/localename.cc
diff --git a/libstdc++-v3/src/math_stubs_float.cc b/libstdc++-v3/src/c++98/math_stubs_float.cc
index a226ce46f2..a226ce46f2 100644
--- a/libstdc++-v3/src/math_stubs_float.cc
+++ b/libstdc++-v3/src/c++98/math_stubs_float.cc
diff --git a/libstdc++-v3/src/math_stubs_long_double.cc b/libstdc++-v3/src/c++98/math_stubs_long_double.cc
index 9f760cfb32..9f760cfb32 100644
--- a/libstdc++-v3/src/math_stubs_long_double.cc
+++ b/libstdc++-v3/src/c++98/math_stubs_long_double.cc
diff --git a/libstdc++-v3/src/misc-inst.cc b/libstdc++-v3/src/c++98/misc-inst.cc
index ad09c9b84d..ad09c9b84d 100644
--- a/libstdc++-v3/src/misc-inst.cc
+++ b/libstdc++-v3/src/c++98/misc-inst.cc
diff --git a/libstdc++-v3/src/mt_allocator.cc b/libstdc++-v3/src/c++98/mt_allocator.cc
index 16c2fb8063..16c2fb8063 100644
--- a/libstdc++-v3/src/mt_allocator.cc
+++ b/libstdc++-v3/src/c++98/mt_allocator.cc
diff --git a/libstdc++-v3/src/ostream-inst.cc b/libstdc++-v3/src/c++98/ostream-inst.cc
index 9c25228771..9c25228771 100644
--- a/libstdc++-v3/src/ostream-inst.cc
+++ b/libstdc++-v3/src/c++98/ostream-inst.cc
diff --git a/libstdc++-v3/src/parallel_settings.cc b/libstdc++-v3/src/c++98/parallel_settings.cc
index e183c97f45..e183c97f45 100644
--- a/libstdc++-v3/src/parallel_settings.cc
+++ b/libstdc++-v3/src/c++98/parallel_settings.cc
diff --git a/libstdc++-v3/src/pool_allocator.cc b/libstdc++-v3/src/c++98/pool_allocator.cc
index f94656b03b..f94656b03b 100644
--- a/libstdc++-v3/src/pool_allocator.cc
+++ b/libstdc++-v3/src/c++98/pool_allocator.cc
diff --git a/libstdc++-v3/src/sstream-inst.cc b/libstdc++-v3/src/c++98/sstream-inst.cc
index 5c6877904d..5c6877904d 100644
--- a/libstdc++-v3/src/sstream-inst.cc
+++ b/libstdc++-v3/src/c++98/sstream-inst.cc
diff --git a/libstdc++-v3/src/c++98/stdexcept.cc b/libstdc++-v3/src/c++98/stdexcept.cc
new file mode 100644
index 0000000000..dbc8f408e2
--- /dev/null
+++ b/libstdc++-v3/src/c++98/stdexcept.cc
@@ -0,0 +1,91 @@
+// Methods for Exception Support for -*- C++ -*-
+
+// Copyright (C) 1997, 1999, 2001, 2002, 2005, 2009, 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882: 19.1 Exception classes
+//
+
+#include <string>
+#include <stdexcept>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ logic_error::logic_error(const string& __arg)
+ : exception(), _M_msg(__arg) { }
+
+ logic_error::~logic_error() _GLIBCXX_USE_NOEXCEPT { }
+
+ const char*
+ logic_error::what() const _GLIBCXX_USE_NOEXCEPT
+ { return _M_msg.c_str(); }
+
+ domain_error::domain_error(const string& __arg)
+ : logic_error(__arg) { }
+
+ domain_error::~domain_error() _GLIBCXX_USE_NOEXCEPT { }
+
+ invalid_argument::invalid_argument(const string& __arg)
+ : logic_error(__arg) { }
+
+ invalid_argument::~invalid_argument() _GLIBCXX_USE_NOEXCEPT { }
+
+ length_error::length_error(const string& __arg)
+ : logic_error(__arg) { }
+
+ length_error::~length_error() _GLIBCXX_USE_NOEXCEPT { }
+
+ out_of_range::out_of_range(const string& __arg)
+ : logic_error(__arg) { }
+
+ out_of_range::~out_of_range() _GLIBCXX_USE_NOEXCEPT { }
+
+ runtime_error::runtime_error(const string& __arg)
+ : exception(), _M_msg(__arg) { }
+
+ runtime_error::~runtime_error() _GLIBCXX_USE_NOEXCEPT { }
+
+ const char*
+ runtime_error::what() const _GLIBCXX_USE_NOEXCEPT
+ { return _M_msg.c_str(); }
+
+ range_error::range_error(const string& __arg)
+ : runtime_error(__arg) { }
+
+ range_error::~range_error() _GLIBCXX_USE_NOEXCEPT { }
+
+ overflow_error::overflow_error(const string& __arg)
+ : runtime_error(__arg) { }
+
+ overflow_error::~overflow_error() _GLIBCXX_USE_NOEXCEPT { }
+
+ underflow_error::underflow_error(const string& __arg)
+ : runtime_error(__arg) { }
+
+ underflow_error::~underflow_error() _GLIBCXX_USE_NOEXCEPT { }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/streambuf-inst.cc b/libstdc++-v3/src/c++98/streambuf-inst.cc
index 5b563c8e17..5b563c8e17 100644
--- a/libstdc++-v3/src/streambuf-inst.cc
+++ b/libstdc++-v3/src/c++98/streambuf-inst.cc
diff --git a/libstdc++-v3/src/streambuf.cc b/libstdc++-v3/src/c++98/streambuf.cc
index 5bcd0ea8d5..5bcd0ea8d5 100644
--- a/libstdc++-v3/src/streambuf.cc
+++ b/libstdc++-v3/src/c++98/streambuf.cc
diff --git a/libstdc++-v3/src/strstream.cc b/libstdc++-v3/src/c++98/strstream.cc
index c76fc60e0a..c76fc60e0a 100644
--- a/libstdc++-v3/src/strstream.cc
+++ b/libstdc++-v3/src/c++98/strstream.cc
diff --git a/libstdc++-v3/src/c++98/tree.cc b/libstdc++-v3/src/c++98/tree.cc
new file mode 100644
index 0000000000..731ce367a9
--- /dev/null
+++ b/libstdc++-v3/src/c++98/tree.cc
@@ -0,0 +1,466 @@
+// RB tree utilities implementation -*- C++ -*-
+
+// Copyright (C) 2003, 2005, 2009, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/*
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ */
+
+#include <bits/stl_tree.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ static _Rb_tree_node_base*
+ local_Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
+ {
+ if (__x->_M_right != 0)
+ {
+ __x = __x->_M_right;
+ while (__x->_M_left != 0)
+ __x = __x->_M_left;
+ }
+ else
+ {
+ _Rb_tree_node_base* __y = __x->_M_parent;
+ while (__x == __y->_M_right)
+ {
+ __x = __y;
+ __y = __y->_M_parent;
+ }
+ if (__x->_M_right != __y)
+ __x = __y;
+ }
+ return __x;
+ }
+
+ _Rb_tree_node_base*
+ _Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
+ {
+ return local_Rb_tree_increment(__x);
+ }
+
+ const _Rb_tree_node_base*
+ _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ()
+ {
+ return local_Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x));
+ }
+
+ static _Rb_tree_node_base*
+ local_Rb_tree_decrement(_Rb_tree_node_base* __x) throw ()
+ {
+ if (__x->_M_color == _S_red
+ && __x->_M_parent->_M_parent == __x)
+ __x = __x->_M_right;
+ else if (__x->_M_left != 0)
+ {
+ _Rb_tree_node_base* __y = __x->_M_left;
+ while (__y->_M_right != 0)
+ __y = __y->_M_right;
+ __x = __y;
+ }
+ else
+ {
+ _Rb_tree_node_base* __y = __x->_M_parent;
+ while (__x == __y->_M_left)
+ {
+ __x = __y;
+ __y = __y->_M_parent;
+ }
+ __x = __y;
+ }
+ return __x;
+ }
+
+ _Rb_tree_node_base*
+ _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ()
+ {
+ return local_Rb_tree_decrement(__x);
+ }
+
+ const _Rb_tree_node_base*
+ _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ()
+ {
+ return local_Rb_tree_decrement(const_cast<_Rb_tree_node_base*>(__x));
+ }
+
+ static void
+ local_Rb_tree_rotate_left(_Rb_tree_node_base* const __x,
+ _Rb_tree_node_base*& __root)
+ {
+ _Rb_tree_node_base* const __y = __x->_M_right;
+
+ __x->_M_right = __y->_M_left;
+ if (__y->_M_left !=0)
+ __y->_M_left->_M_parent = __x;
+ __y->_M_parent = __x->_M_parent;
+
+ if (__x == __root)
+ __root = __y;
+ else if (__x == __x->_M_parent->_M_left)
+ __x->_M_parent->_M_left = __y;
+ else
+ __x->_M_parent->_M_right = __y;
+ __y->_M_left = __x;
+ __x->_M_parent = __y;
+ }
+
+ /* Static keyword was missing on _Rb_tree_rotate_left.
+ Export the symbol for backward compatibility until
+ next ABI change. */
+ void
+ _Rb_tree_rotate_left(_Rb_tree_node_base* const __x,
+ _Rb_tree_node_base*& __root)
+ {
+ local_Rb_tree_rotate_left (__x, __root);
+ }
+
+ static void
+ local_Rb_tree_rotate_right(_Rb_tree_node_base* const __x,
+ _Rb_tree_node_base*& __root)
+ {
+ _Rb_tree_node_base* const __y = __x->_M_left;
+
+ __x->_M_left = __y->_M_right;
+ if (__y->_M_right != 0)
+ __y->_M_right->_M_parent = __x;
+ __y->_M_parent = __x->_M_parent;
+
+ if (__x == __root)
+ __root = __y;
+ else if (__x == __x->_M_parent->_M_right)
+ __x->_M_parent->_M_right = __y;
+ else
+ __x->_M_parent->_M_left = __y;
+ __y->_M_right = __x;
+ __x->_M_parent = __y;
+ }
+
+ /* Static keyword was missing on _Rb_tree_rotate_right
+ Export the symbol for backward compatibility until
+ next ABI change. */
+ void
+ _Rb_tree_rotate_right(_Rb_tree_node_base* const __x,
+ _Rb_tree_node_base*& __root)
+ {
+ local_Rb_tree_rotate_right (__x, __root);
+ }
+
+ void
+ _Rb_tree_insert_and_rebalance(const bool __insert_left,
+ _Rb_tree_node_base* __x,
+ _Rb_tree_node_base* __p,
+ _Rb_tree_node_base& __header) throw ()
+ {
+ _Rb_tree_node_base *& __root = __header._M_parent;
+
+ // Initialize fields in new node to insert.
+ __x->_M_parent = __p;
+ __x->_M_left = 0;
+ __x->_M_right = 0;
+ __x->_M_color = _S_red;
+
+ // Insert.
+ // Make new node child of parent and maintain root, leftmost and
+ // rightmost nodes.
+ // N.B. First node is always inserted left.
+ if (__insert_left)
+ {
+ __p->_M_left = __x; // also makes leftmost = __x when __p == &__header
+
+ if (__p == &__header)
+ {
+ __header._M_parent = __x;
+ __header._M_right = __x;
+ }
+ else if (__p == __header._M_left)
+ __header._M_left = __x; // maintain leftmost pointing to min node
+ }
+ else
+ {
+ __p->_M_right = __x;
+
+ if (__p == __header._M_right)
+ __header._M_right = __x; // maintain rightmost pointing to max node
+ }
+ // Rebalance.
+ while (__x != __root
+ && __x->_M_parent->_M_color == _S_red)
+ {
+ _Rb_tree_node_base* const __xpp = __x->_M_parent->_M_parent;
+
+ if (__x->_M_parent == __xpp->_M_left)
+ {
+ _Rb_tree_node_base* const __y = __xpp->_M_right;
+ if (__y && __y->_M_color == _S_red)
+ {
+ __x->_M_parent->_M_color = _S_black;
+ __y->_M_color = _S_black;
+ __xpp->_M_color = _S_red;
+ __x = __xpp;
+ }
+ else
+ {
+ if (__x == __x->_M_parent->_M_right)
+ {
+ __x = __x->_M_parent;
+ local_Rb_tree_rotate_left(__x, __root);
+ }
+ __x->_M_parent->_M_color = _S_black;
+ __xpp->_M_color = _S_red;
+ local_Rb_tree_rotate_right(__xpp, __root);
+ }
+ }
+ else
+ {
+ _Rb_tree_node_base* const __y = __xpp->_M_left;
+ if (__y && __y->_M_color == _S_red)
+ {
+ __x->_M_parent->_M_color = _S_black;
+ __y->_M_color = _S_black;
+ __xpp->_M_color = _S_red;
+ __x = __xpp;
+ }
+ else
+ {
+ if (__x == __x->_M_parent->_M_left)
+ {
+ __x = __x->_M_parent;
+ local_Rb_tree_rotate_right(__x, __root);
+ }
+ __x->_M_parent->_M_color = _S_black;
+ __xpp->_M_color = _S_red;
+ local_Rb_tree_rotate_left(__xpp, __root);
+ }
+ }
+ }
+ __root->_M_color = _S_black;
+ }
+
+ _Rb_tree_node_base*
+ _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
+ _Rb_tree_node_base& __header) throw ()
+ {
+ _Rb_tree_node_base *& __root = __header._M_parent;
+ _Rb_tree_node_base *& __leftmost = __header._M_left;
+ _Rb_tree_node_base *& __rightmost = __header._M_right;
+ _Rb_tree_node_base* __y = __z;
+ _Rb_tree_node_base* __x = 0;
+ _Rb_tree_node_base* __x_parent = 0;
+
+ if (__y->_M_left == 0) // __z has at most one non-null child. y == z.
+ __x = __y->_M_right; // __x might be null.
+ else
+ if (__y->_M_right == 0) // __z has exactly one non-null child. y == z.
+ __x = __y->_M_left; // __x is not null.
+ else
+ {
+ // __z has two non-null children. Set __y to
+ __y = __y->_M_right; // __z's successor. __x might be null.
+ while (__y->_M_left != 0)
+ __y = __y->_M_left;
+ __x = __y->_M_right;
+ }
+ if (__y != __z)
+ {
+ // relink y in place of z. y is z's successor
+ __z->_M_left->_M_parent = __y;
+ __y->_M_left = __z->_M_left;
+ if (__y != __z->_M_right)
+ {
+ __x_parent = __y->_M_parent;
+ if (__x) __x->_M_parent = __y->_M_parent;
+ __y->_M_parent->_M_left = __x; // __y must be a child of _M_left
+ __y->_M_right = __z->_M_right;
+ __z->_M_right->_M_parent = __y;
+ }
+ else
+ __x_parent = __y;
+ if (__root == __z)
+ __root = __y;
+ else if (__z->_M_parent->_M_left == __z)
+ __z->_M_parent->_M_left = __y;
+ else
+ __z->_M_parent->_M_right = __y;
+ __y->_M_parent = __z->_M_parent;
+ std::swap(__y->_M_color, __z->_M_color);
+ __y = __z;
+ // __y now points to node to be actually deleted
+ }
+ else
+ { // __y == __z
+ __x_parent = __y->_M_parent;
+ if (__x)
+ __x->_M_parent = __y->_M_parent;
+ if (__root == __z)
+ __root = __x;
+ else
+ if (__z->_M_parent->_M_left == __z)
+ __z->_M_parent->_M_left = __x;
+ else
+ __z->_M_parent->_M_right = __x;
+ if (__leftmost == __z)
+ {
+ if (__z->_M_right == 0) // __z->_M_left must be null also
+ __leftmost = __z->_M_parent;
+ // makes __leftmost == _M_header if __z == __root
+ else
+ __leftmost = _Rb_tree_node_base::_S_minimum(__x);
+ }
+ if (__rightmost == __z)
+ {
+ if (__z->_M_left == 0) // __z->_M_right must be null also
+ __rightmost = __z->_M_parent;
+ // makes __rightmost == _M_header if __z == __root
+ else // __x == __z->_M_left
+ __rightmost = _Rb_tree_node_base::_S_maximum(__x);
+ }
+ }
+ if (__y->_M_color != _S_red)
+ {
+ while (__x != __root && (__x == 0 || __x->_M_color == _S_black))
+ if (__x == __x_parent->_M_left)
+ {
+ _Rb_tree_node_base* __w = __x_parent->_M_right;
+ if (__w->_M_color == _S_red)
+ {
+ __w->_M_color = _S_black;
+ __x_parent->_M_color = _S_red;
+ local_Rb_tree_rotate_left(__x_parent, __root);
+ __w = __x_parent->_M_right;
+ }
+ if ((__w->_M_left == 0 ||
+ __w->_M_left->_M_color == _S_black) &&
+ (__w->_M_right == 0 ||
+ __w->_M_right->_M_color == _S_black))
+ {
+ __w->_M_color = _S_red;
+ __x = __x_parent;
+ __x_parent = __x_parent->_M_parent;
+ }
+ else
+ {
+ if (__w->_M_right == 0
+ || __w->_M_right->_M_color == _S_black)
+ {
+ __w->_M_left->_M_color = _S_black;
+ __w->_M_color = _S_red;
+ local_Rb_tree_rotate_right(__w, __root);
+ __w = __x_parent->_M_right;
+ }
+ __w->_M_color = __x_parent->_M_color;
+ __x_parent->_M_color = _S_black;
+ if (__w->_M_right)
+ __w->_M_right->_M_color = _S_black;
+ local_Rb_tree_rotate_left(__x_parent, __root);
+ break;
+ }
+ }
+ else
+ {
+ // same as above, with _M_right <-> _M_left.
+ _Rb_tree_node_base* __w = __x_parent->_M_left;
+ if (__w->_M_color == _S_red)
+ {
+ __w->_M_color = _S_black;
+ __x_parent->_M_color = _S_red;
+ local_Rb_tree_rotate_right(__x_parent, __root);
+ __w = __x_parent->_M_left;
+ }
+ if ((__w->_M_right == 0 ||
+ __w->_M_right->_M_color == _S_black) &&
+ (__w->_M_left == 0 ||
+ __w->_M_left->_M_color == _S_black))
+ {
+ __w->_M_color = _S_red;
+ __x = __x_parent;
+ __x_parent = __x_parent->_M_parent;
+ }
+ else
+ {
+ if (__w->_M_left == 0 || __w->_M_left->_M_color == _S_black)
+ {
+ __w->_M_right->_M_color = _S_black;
+ __w->_M_color = _S_red;
+ local_Rb_tree_rotate_left(__w, __root);
+ __w = __x_parent->_M_left;
+ }
+ __w->_M_color = __x_parent->_M_color;
+ __x_parent->_M_color = _S_black;
+ if (__w->_M_left)
+ __w->_M_left->_M_color = _S_black;
+ local_Rb_tree_rotate_right(__x_parent, __root);
+ break;
+ }
+ }
+ if (__x) __x->_M_color = _S_black;
+ }
+ return __y;
+ }
+
+ unsigned int
+ _Rb_tree_black_count(const _Rb_tree_node_base* __node,
+ const _Rb_tree_node_base* __root) throw ()
+ {
+ if (__node == 0)
+ return 0;
+ unsigned int __sum = 0;
+ do
+ {
+ if (__node->_M_color == _S_black)
+ ++__sum;
+ if (__node == __root)
+ break;
+ __node = __node->_M_parent;
+ }
+ while (1);
+ return __sum;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/c++98/valarray.cc b/libstdc++-v3/src/c++98/valarray.cc
new file mode 100644
index 0000000000..5de146bc15
--- /dev/null
+++ b/libstdc++-v3/src/c++98/valarray.cc
@@ -0,0 +1,108 @@
+// Explicit instantiation file.
+
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882:
+//
+
+#include <valarray>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // Some explicit instantiations.
+ template void
+ __valarray_fill(size_t* __restrict__, size_t, const size_t&);
+
+ template void
+ __valarray_copy(const size_t* __restrict__, size_t, size_t* __restrict__);
+
+ template valarray<size_t>::valarray(size_t);
+ template valarray<size_t>::valarray(const valarray<size_t>&);
+ template valarray<size_t>::~valarray();
+ template size_t valarray<size_t>::size() const;
+ template size_t& valarray<size_t>::operator[](size_t);
+
+ inline size_t
+ __valarray_product(const valarray<size_t>& __a)
+ {
+ const size_t __n = __a.size();
+ // XXX: This ugly cast is necessary because
+ // valarray::operator[]() const return a VALUE!
+ // Try to get the committee to correct that gross error.
+ valarray<size_t>& __t = const_cast<valarray<size_t>&>(__a);
+ return __valarray_product(&__t[0], &__t[0] + __n);
+ }
+
+ // Map a gslice, described by its multidimensional LENGTHS
+ // and corresponding STRIDES, to a linear array of INDEXES
+ // for the purpose of indexing a flat, one-dimensional array
+ // representation of a gslice_array.
+ void
+ __gslice_to_index(size_t __o, const valarray<size_t>& __l,
+ const valarray<size_t>& __s, valarray<size_t>& __i)
+ {
+ // There are as many dimensions as there are strides.
+ const size_t __n = __l.size();
+
+ // Holds current multi-index as we go through the gslice for the
+ // purpose of computing its linear-image.
+ valarray<size_t> __t(__l);
+
+ // Note that this should match the product of all numbers appearing
+ // in __l which describes the multidimensional sizes of the
+ // generalized slice.
+ const size_t __z = __i.size();
+
+ for (size_t __j = 0; __j < __z; ++__j)
+ {
+ // Compute the linear-index image of (t_0, ... t_{n-1}).
+ __i[__j] = __o;
+
+ --__t[__n - 1];
+ __o += __s[__n - 1];
+
+ // Process the next multi-index. The loop ought to be
+ // backward since we're making a lexicographical visit.
+ for (size_t __k2 = __n - 1; __k2 && !__t[__k2]; --__k2)
+ {
+ __o -= __s[__k2] * __l[__k2];
+ __t[__k2] = __l[__k2];
+
+ --__t[__k2 - 1];
+ __o += __s[__k2 - 1];
+ }
+ }
+ }
+
+ gslice::_Indexer::_Indexer(size_t __o, const valarray<size_t>& __l,
+ const valarray<size_t>& __s)
+ : _M_count(1), _M_start(__o), _M_size(__l), _M_stride(__s),
+ _M_index(__l.size() == 0 ? 0 : __valarray_product(__l))
+ { __gslice_to_index(__o, __l, __s, _M_index); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/libstdc++-v3/src/wlocale-inst.cc b/libstdc++-v3/src/c++98/wlocale-inst.cc
index cdfed0c3e3..cdfed0c3e3 100644
--- a/libstdc++-v3/src/wlocale-inst.cc
+++ b/libstdc++-v3/src/c++98/wlocale-inst.cc
diff --git a/libstdc++-v3/src/chrono.cc b/libstdc++-v3/src/chrono.cc
deleted file mode 100644
index 6b5e669a7d..0000000000
--- a/libstdc++-v3/src/chrono.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// chrono -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <chrono>
-
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
-// conditional inclusion of sys/time.h for gettimeofday
-#if !defined(_GLIBCXX_USE_CLOCK_MONOTONIC) && \
- !defined(_GLIBCXX_USE_CLOCK_REALTIME) && \
- defined(_GLIBCXX_USE_GETTIMEOFDAY)
-#include <sys/time.h>
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- namespace chrono
- {
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- constexpr bool system_clock::is_monotonic;
-
- system_clock::time_point
- system_clock::now() throw ()
- {
-#ifdef _GLIBCXX_USE_CLOCK_REALTIME
- timespec tp;
- // -EINVAL, -EFAULT
- clock_gettime(CLOCK_REALTIME, &tp);
- return time_point(duration(chrono::seconds(tp.tv_sec)
- + chrono::nanoseconds(tp.tv_nsec)));
-#elif defined(_GLIBCXX_USE_GETTIMEOFDAY)
- timeval tv;
- // EINVAL, EFAULT
- gettimeofday(&tv, 0);
- return time_point(duration(chrono::seconds(tv.tv_sec)
- + chrono::microseconds(tv.tv_usec)));
-#else
- std::time_t __sec = std::time(0);
- return system_clock::from_time_t(__sec);
-#endif
- }
-
-#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
- constexpr bool monotonic_clock::is_monotonic;
-
- monotonic_clock::time_point
- monotonic_clock::now()
- {
- timespec tp;
- // -EINVAL, -EFAULT
- clock_gettime(CLOCK_MONOTONIC, &tp);
- return time_point(duration(chrono::seconds(tp.tv_sec)
- + chrono::nanoseconds(tp.tv_nsec)));
- }
-#endif
-
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace chrono
-} // namespace std
-
-#endif // _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/compatibility-c++0x.cc b/libstdc++-v3/src/compatibility-c++0x.cc
deleted file mode 100644
index 08a572761f..0000000000
--- a/libstdc++-v3/src/compatibility-c++0x.cc
+++ /dev/null
@@ -1,84 +0,0 @@
-// Compatibility symbols for previous versions, C++0x bits -*- C++ -*-
-
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#define _GLIBCXX_COMPATIBILITY_CXX0X
-#include <string>
-#include <system_error>
-
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
-# error "compatibility-c++0x.cc must be compiled with -std=gnu++0x"
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- // gcc-4.4.0
- // <mutex> exported std::lock_error
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
- class lock_error : public exception
- {
- public:
- virtual const char*
- _GLIBCXX_CONST what() const throw();
- };
-
- const char*
- lock_error::what() const throw()
- { return "std::lock_error"; }
-#endif
-
- // We need these due to the symbols exported since GLIBCXX_3.4.10.
- // See libstdc++/41662 for details.
-
-#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
- template<>
- size_t
- hash<string>::operator()(string __s) const
- { return _Hash_impl::hash(__s.data(), __s.length()); }
-
- template<>
- size_t
- hash<const string&>::operator()(const string& __s) const
- { return _Hash_impl::hash(__s.data(), __s.length()); }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- size_t
- hash<wstring>::operator()(wstring __s) const
- { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-
- template<>
- size_t
- hash<const wstring&>::operator()(const wstring& __s) const
- { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-#endif
-#endif
-
- template<>
- size_t
- hash<error_code>::operator()(error_code __e) const
- {
- const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
- return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
- }
-}
diff --git a/libstdc++-v3/src/compatibility-ldbl.cc b/libstdc++-v3/src/compatibility-ldbl.cc
deleted file mode 100644
index a9bdb8b098..0000000000
--- a/libstdc++-v3/src/compatibility-ldbl.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Compatibility symbols for -mlong-double-64 compatibility -*- C++ -*-
-
-// Copyright (C) 2006, 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <locale>
-#include <cmath>
-#include <tr1/functional>
-
-#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
-
-#ifdef __LONG_DOUBLE_128__
-#error "compatibility-ldbl.cc must be compiled with -mlong-double-64"
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-#define C char
- template class num_get<C, istreambuf_iterator<C> >;
- template class num_put<C, ostreambuf_iterator<C> >;
- template class money_get<C, istreambuf_iterator<C> >;
- template class money_put<C, ostreambuf_iterator<C> >;
- template const num_put<C>& use_facet<num_put<C> >(const locale&);
- template const num_get<C>& use_facet<num_get<C> >(const locale&);
- template const money_put<C>& use_facet<money_put<C> >(const locale&);
- template const money_get<C>& use_facet<money_get<C> >(const locale&);
- template bool has_facet<num_put<C> >(const locale&);
- template bool has_facet<num_get<C> >(const locale&);
- template bool has_facet<money_put<C> >(const locale&);
- template bool has_facet<money_get<C> >(const locale&);
-#undef C
-#ifdef _GLIBCXX_USE_WCHAR_T
-#define C wchar_t
- template class num_get<C, istreambuf_iterator<C> >;
- template class num_put<C, ostreambuf_iterator<C> >;
- template class money_get<C, istreambuf_iterator<C> >;
- template class money_put<C, ostreambuf_iterator<C> >;
- template const num_put<C>& use_facet<num_put<C> >(const locale&);
- template const num_get<C>& use_facet<num_get<C> >(const locale&);
- template const money_put<C>& use_facet<money_put<C> >(const locale&);
- template const money_get<C>& use_facet<money_get<C> >(const locale&);
- template bool has_facet<num_put<C> >(const locale&);
- template bool has_facet<num_get<C> >(const locale&);
- template bool has_facet<money_put<C> >(const locale&);
- template bool has_facet<money_get<C> >(const locale&);
-#undef C
-#endif
-}
-
-// For std::tr1::hash<long double>::operator()
-#define _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- namespace tr1
- {
-#include "hash-long-double-aux.cc"
- }
-}
-
-// std::tr1::hash<long double>::operator()
-// and std::hash<long double>::operator()
-// are the same, no need to duplicate them.
-extern "C" void _ZNKSt4hashIeEclEe (void)
- __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
-
-#endif
diff --git a/libstdc++-v3/src/compatibility-list-2.cc b/libstdc++-v3/src/compatibility-list-2.cc
deleted file mode 100644
index 58f8cea55f..0000000000
--- a/libstdc++-v3/src/compatibility-list-2.cc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Compatibility symbols for previous versions, list bits -*- C++ -*-
-
-// Copyright (C) 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <bits/move.h>
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_COMPAT
-# define _GLIBCXX_BEGIN_NAMESPACE_COMPAT
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_COMPAT
-# define _GLIBCXX_END_NAMESPACE_COMPAT
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_COMPAT
-
- struct _List_node_base
- {
- _List_node_base* _M_next;
- _List_node_base* _M_prev;
-
- void
- _M_transfer(_List_node_base * const __first,
- _List_node_base * const __last) throw ();
-
- void
- _M_reverse() throw ();
-
- void
- _M_hook(_List_node_base * const __position) throw ();
-
- void
- _M_unhook() throw ();
- };
-
- void
- _List_node_base::_M_transfer(_List_node_base * const __first,
- _List_node_base * const __last) throw ()
- {
- if (this != __last)
- {
- // Remove [first, last) from its old position.
- __last->_M_prev->_M_next = this;
- __first->_M_prev->_M_next = __last;
- this->_M_prev->_M_next = __first;
-
- // Splice [first, last) into its new position.
- _List_node_base* const __tmp = this->_M_prev;
- this->_M_prev = __last->_M_prev;
- __last->_M_prev = __first->_M_prev;
- __first->_M_prev = __tmp;
- }
- }
-
- void
- _List_node_base::_M_reverse() throw ()
- {
- _List_node_base* __tmp = this;
- do
- {
- std::swap(__tmp->_M_next, __tmp->_M_prev);
-
- // Old next node is now prev.
- __tmp = __tmp->_M_prev;
- }
- while (__tmp != this);
- }
-
- void
- _List_node_base::_M_hook(_List_node_base* const __position) throw ()
- {
- this->_M_next = __position;
- this->_M_prev = __position->_M_prev;
- __position->_M_prev->_M_next = this;
- __position->_M_prev = this;
- }
-
- void
- _List_node_base::_M_unhook() throw ()
- {
- _List_node_base* const __next_node = this->_M_next;
- _List_node_base* const __prev_node = this->_M_prev;
- __prev_node->_M_next = __next_node;
- __next_node->_M_prev = __prev_node;
- }
-
-_GLIBCXX_END_NAMESPACE_COMPAT
-
-} // namespace std
diff --git a/libstdc++-v3/src/compatibility-list.cc b/libstdc++-v3/src/compatibility-list.cc
deleted file mode 100644
index a0d706b27a..0000000000
--- a/libstdc++-v3/src/compatibility-list.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-// Compatibility symbols for previous versions, list bits -*- C++ -*-
-
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <bits/move.h>
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_COMPAT
-# define _GLIBCXX_BEGIN_NAMESPACE_COMPAT
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_COMPAT
-# define _GLIBCXX_END_NAMESPACE_COMPAT
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_COMPAT
-
- struct _List_node_base
- {
- _List_node_base* _M_next;
- _List_node_base* _M_prev;
-
- static void
- swap(_List_node_base& __x, _List_node_base& __y) throw ();
-
- void
- transfer(_List_node_base * const __first,
- _List_node_base * const __last) throw ();
-
- void
- reverse() throw ();
-
- void
- hook(_List_node_base * const __position) throw ();
-
- void
- unhook() throw ();
- };
-
- void
- _List_node_base::swap(_List_node_base& __x, _List_node_base& __y) throw()
- {
- if ( __x._M_next != &__x )
- {
- if ( __y._M_next != &__y )
- {
- // Both __x and __y are not empty.
- std::swap(__x._M_next,__y._M_next);
- std::swap(__x._M_prev,__y._M_prev);
- __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
- __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
- }
- else
- {
- // __x is not empty, __y is empty.
- __y._M_next = __x._M_next;
- __y._M_prev = __x._M_prev;
- __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
- __x._M_next = __x._M_prev = &__x;
- }
- }
- else if ( __y._M_next != &__y )
- {
- // __x is empty, __y is not empty.
- __x._M_next = __y._M_next;
- __x._M_prev = __y._M_prev;
- __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
- __y._M_next = __y._M_prev = &__y;
- }
- }
-
- void
- _List_node_base::transfer(_List_node_base * const __first,
- _List_node_base * const __last) throw ()
- {
- if (this != __last)
- {
- // Remove [first, last) from its old position.
- __last->_M_prev->_M_next = this;
- __first->_M_prev->_M_next = __last;
- this->_M_prev->_M_next = __first;
-
- // Splice [first, last) into its new position.
- _List_node_base* const __tmp = this->_M_prev;
- this->_M_prev = __last->_M_prev;
- __last->_M_prev = __first->_M_prev;
- __first->_M_prev = __tmp;
- }
- }
-
- void
- _List_node_base::reverse() throw ()
- {
- _List_node_base* __tmp = this;
- do
- {
- std::swap(__tmp->_M_next, __tmp->_M_prev);
-
- // Old next node is now prev.
- __tmp = __tmp->_M_prev;
- }
- while (__tmp != this);
- }
-
- void
- _List_node_base::hook(_List_node_base* const __position) throw ()
- {
- this->_M_next = __position;
- this->_M_prev = __position->_M_prev;
- __position->_M_prev->_M_next = this;
- __position->_M_prev = this;
- }
-
- void
- _List_node_base::unhook() throw ()
- {
- _List_node_base* const __next_node = this->_M_next;
- _List_node_base* const __prev_node = this->_M_prev;
- __prev_node->_M_next = __next_node;
- __next_node->_M_prev = __prev_node;
- }
-
-_GLIBCXX_END_NAMESPACE_COMPAT
-
-} // namespace std
diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc
deleted file mode 100644
index d4cf5d7c12..0000000000
--- a/libstdc++-v3/src/compatibility.cc
+++ /dev/null
@@ -1,554 +0,0 @@
-// Compatibility symbols for previous versions -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <bits/c++config.h>
-
-#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)\
- && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
-#define istreambuf_iterator istreambuf_iteratorXX
-#define basic_fstream basic_fstreamXX
-#define basic_ifstream basic_ifstreamXX
-#define basic_ofstream basic_ofstreamXX
-#define _M_copy(a, b, c) _M_copyXX(a, b, c)
-#define _M_move(a, b, c) _M_moveXX(a, b, c)
-#define _M_assign(a, b, c) _M_assignXX(a, b, c)
-#define _M_disjunct(a) _M_disjunctXX(a)
-#define _M_check_length(a, b, c) _M_check_lengthXX(a, b, c)
-#define _M_set_length_and_sharable(a) _M_set_length_and_sharableXX(a)
-#define ignore ignoreXX
-#define eq eqXX
-#define _List_node_base _List_node_baseXX
-#endif
-
-#include <string>
-#include <istream>
-#include <fstream>
-#include <sstream>
-#include <cmath>
-#include <ext/numeric_traits.h>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- // std::istream ignore explicit specializations.
- template<>
- basic_istream<char>&
- basic_istream<char>::
- ignore(streamsize __n)
- {
- if (__n == 1)
- return ignore();
-
- _M_gcount = 0;
- sentry __cerb(*this, true);
- if ( __n > 0 && __cerb)
- {
- ios_base::iostate __err = ios_base::goodbit;
- __try
- {
- const int_type __eof = traits_type::eof();
- __streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
-
- // See comment in istream.tcc.
- bool __large_ignore = false;
- while (true)
- {
- while (_M_gcount < __n
- && !traits_type::eq_int_type(__c, __eof))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - _M_gcount));
- if (__size > 1)
- {
- __sb->__safe_gbump(__size);
- _M_gcount += __size;
- __c = __sb->sgetc();
- }
- else
- {
- ++_M_gcount;
- __c = __sb->snextc();
- }
- }
- if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
- && !traits_type::eq_int_type(__c, __eof))
- {
- _M_gcount =
- __gnu_cxx::__numeric_traits<streamsize>::__min;
- __large_ignore = true;
- }
- else
- break;
- }
-
- if (__large_ignore)
- _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
-
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- this->_M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { this->_M_setstate(ios_base::badbit); }
- if (__err)
- this->setstate(__err);
- }
- return *this;
- }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- basic_istream<wchar_t>&
- basic_istream<wchar_t>::
- ignore(streamsize __n)
- {
- if (__n == 1)
- return ignore();
-
- _M_gcount = 0;
- sentry __cerb(*this, true);
- if (__n > 0 && __cerb)
- {
- ios_base::iostate __err = ios_base::goodbit;
- __try
- {
- const int_type __eof = traits_type::eof();
- __streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
-
- bool __large_ignore = false;
- while (true)
- {
- while (_M_gcount < __n
- && !traits_type::eq_int_type(__c, __eof))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - _M_gcount));
- if (__size > 1)
- {
- __sb->__safe_gbump(__size);
- _M_gcount += __size;
- __c = __sb->sgetc();
- }
- else
- {
- ++_M_gcount;
- __c = __sb->snextc();
- }
- }
- if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
- && !traits_type::eq_int_type(__c, __eof))
- {
- _M_gcount =
- __gnu_cxx::__numeric_traits<streamsize>::__min;
- __large_ignore = true;
- }
- else
- break;
- }
-
- if (__large_ignore)
- _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
-
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- this->_M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { this->_M_setstate(ios_base::badbit); }
- if (__err)
- this->setstate(__err);
- }
- return *this;
- }
-#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-
-// NB: These symbols renames should go into the shared library only,
-// and only those shared libraries that support versioning.
-#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
- && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
-
-/* gcc-3.4.4
-_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv
-_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv
- */
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template
- istreambuf_iterator<char>&
- istreambuf_iterator<char>::operator++();
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- template
- istreambuf_iterator<wchar_t>&
- istreambuf_iterator<wchar_t>::operator++();
-#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-
-/* gcc-4.0.0
-_ZNSs4_Rep26_M_set_length_and_sharableEj
-_ZNSs7_M_copyEPcPKcj
-_ZNSs7_M_moveEPcPKcj
-_ZNSs9_M_assignEPcjc
-_ZNKSs11_M_disjunctEPKc
-_ZNKSs15_M_check_lengthEjjPKc
-_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj
-_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj
-_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj
-_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw
-_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw
-_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc
-
-_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
-_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv
-_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv
-_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv
-_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv
-_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv
-
-_ZNSi6ignoreEi
-_ZNSi6ignoreEv
-_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi
-_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv
-
-_ZNSt11char_traitsIcE2eqERKcS2_
-_ZNSt11char_traitsIwE2eqERKwS2_
- */
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- // std::char_traits is explicitly specialized
- bool (* __p1)(const char&, const char&) = &char_traits<char>::eq;
-
- // std::string
- template
- void
- basic_string<char>::_M_copy(char*, const char*, size_t);
-
- template
- void
- basic_string<char>::_M_move(char*, const char*, size_t);
-
- template
- void
- basic_string<char>::_M_assign(char*, size_t, char);
-
- template
- bool
- basic_string<char>::_M_disjunct(const char*) const;
-
- template
- void
- basic_string<char>::_M_check_length(size_t, size_t, const char*) const;
-
- template
- void
- basic_string<char>::_Rep::_M_set_length_and_sharable(size_t);
-
-
- // std::istream
- template
- basic_istream<char>&
- basic_istream<char>::ignore();
-
- template
- bool
- basic_fstream<char>::is_open() const;
-
- template
- bool
- basic_ifstream<char>::is_open() const;
-
- template
- bool
- basic_ofstream<char>::is_open() const;
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- bool (* __p2)(const wchar_t&, const wchar_t&) = &char_traits<wchar_t>::eq;
-
- // std::wstring
- template
- void
- basic_string<wchar_t>::_M_copy(wchar_t*, const wchar_t*, size_t);
-
- template
- void
- basic_string<wchar_t>::_M_move(wchar_t*, const wchar_t*, size_t);
-
- template
- void
- basic_string<wchar_t>::_M_assign(wchar_t*, size_t, wchar_t);
-
- template
- bool
- basic_string<wchar_t>::_M_disjunct(const wchar_t*) const;
-
- template
- void
- basic_string<wchar_t>::_M_check_length(size_t, size_t,
- const char*) const;
-
- template
- void
- basic_string<wchar_t>::_Rep::_M_set_length_and_sharable(size_t);
-
- template
- basic_istream<wchar_t>&
- basic_istream<wchar_t>::ignore();
-
- template
- bool
- basic_fstream<wchar_t>::is_open() const;
-
- template
- bool
- basic_ifstream<wchar_t>::is_open() const;
-
- template
- bool
- basic_ofstream<wchar_t>::is_open() const;
-#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-// The rename syntax for default exported names is
-// asm (".symver name1,exportedname@GLIBCXX_3.4")
-// asm (".symver name2,exportedname@@GLIBCXX_3.4.5")
-// In the future, GLIBCXX_ABI > 6 should remove all uses of
-// _GLIBCXX_*_SYMVER macros in this file.
-
-#define _GLIBCXX_3_4_SYMVER(XXname, name) \
- extern "C" void \
- _X##name() \
- __attribute__ ((alias(#XXname))); \
- asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4");
-
-#define _GLIBCXX_3_4_5_SYMVER(XXname, name) \
- extern "C" void \
- _Y##name() \
- __attribute__ ((alias(#XXname))); \
- asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.5");
-
-#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
- asm (".symver " #cur "," #old "@@" #version);
-
-#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_SYMVER
-#include <bits/compatibility.h>
-#undef _GLIBCXX_APPLY_SYMVER
-
-#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER
-#include <bits/compatibility.h>
-#undef _GLIBCXX_APPLY_SYMVER
-
-
-/* gcc-3.4.0
-_ZN10__gnu_norm15_List_node_base4hookEPS0_;
-_ZN10__gnu_norm15_List_node_base4swapERS0_S1_;
-_ZN10__gnu_norm15_List_node_base6unhookEv;
-_ZN10__gnu_norm15_List_node_base7reverseEv;
-_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_;
-*/
-#include "list.cc"
-_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX7_M_hookEPS0_, \
-_ZN10__gnu_norm15_List_node_base4hookEPS0_, \
-GLIBCXX_3.4)
-
-_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX4swapERS0_S1_, \
-_ZN10__gnu_norm15_List_node_base4swapERS0_S1_, \
-GLIBCXX_3.4)
-
-_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX9_M_unhookEv, \
-_ZN10__gnu_norm15_List_node_base6unhookEv, \
-GLIBCXX_3.4)
-
-_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX10_M_reverseEv, \
-_ZN10__gnu_norm15_List_node_base7reverseEv, \
-GLIBCXX_3.4)
-
-_GLIBCXX_ASM_SYMVER(_ZNSt8__detail17_List_node_baseXX11_M_transferEPS0_S1_, \
-_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_, \
-GLIBCXX_3.4)
-#undef _List_node_base
-
-// gcc-4.1.0
-// Long double versions of "C" math functions.
-#if defined (_GLIBCXX_LONG_DOUBLE_COMPAT) \
- || (defined (__arm__) && defined (__linux__) && defined (__ARM_EABI__)) \
- || (defined (__hppa__) && defined (__linux__)) \
- || (defined (__m68k__) && defined (__mcoldfire__) && defined (__linux__)) \
- || (defined (__mips__) && defined (_ABIO32) && defined (__linux__)) \
- || (defined (__sh__) && defined (__linux__) && __SIZEOF_SIZE_T__ == 4) \
-
-#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \
-extern "C" double \
-__ ## name ## l_wrapper argdecl \
-{ \
- return name args; \
-} \
-asm (".symver __" #name "l_wrapper, " #name "l@" #ver)
-
-#define _GLIBCXX_MATHL_WRAPPER1(name, ver) \
- _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver)
-
-#define _GLIBCXX_MATHL_WRAPPER2(name, ver) \
- _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver)
-
-#ifdef _GLIBCXX_HAVE_ACOSL
-_GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_ASINL
-_GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_ATAN2L
-_GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_ATANL
-_GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_CEILL
-_GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_COSHL
-_GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_COSL
-_GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_EXPL
-_GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_FLOORL
-_GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_FMODL
-_GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_FREXPL
-_GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_HYPOTL
-_GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_LDEXPL
-_GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_LOG10L
-_GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_LOGL
-_GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_MODFL
-_GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3);
-#endif
-#ifdef _GLIBCXX_HAVE_POWL
-_GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_SINHL
-_GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_SINL
-_GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_SQRTL
-_GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_TANHL
-_GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4);
-#endif
-#ifdef _GLIBCXX_HAVE_TANL
-_GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4);
-#endif
-#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
-
-#endif
-
-#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
-extern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[];
-extern void *_ZTVN10__cxxabiv119__pointer_type_infoE[];
-extern __attribute__((used, weak)) const char _ZTSe[2] = "e";
-extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
-extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
-extern __attribute__((used, weak)) const void * const _ZTIe[2]
- = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
- (void *) _ZTSe };
-extern __attribute__((used, weak)) const void * const _ZTIPe[4]
- = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
- (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
-extern __attribute__((used, weak)) const void * const _ZTIPKe[4]
- = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
- (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
-#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
-
-#ifdef _GLIBCXX_SYMVER_DARWIN
-#if (defined(__ppc__) || defined(__ppc64__)) && defined(PIC)
-/* __eprintf shouldn't have been made visible from libstdc++, or
- anywhere, but on Mac OS X 10.4 it was defined in
- libstdc++.6.0.3.dylib; so on that platform we have to keep defining
- it to keep binary compatibility. We can't just put the libgcc
- version in the export list, because that doesn't work; once a
- symbol is marked as hidden, it stays that way. */
-
-#include <cstdio>
-#include <cstdlib>
-
-using namespace std;
-
-extern "C" void
-__eprintf(const char *string, const char *expression,
- unsigned int line, const char *filename)
-{
- fprintf(stderr, string, expression, line, filename);
- fflush(stderr);
- abort();
-}
-#endif
-#endif
diff --git a/libstdc++-v3/src/condition_variable.cc b/libstdc++-v3/src/condition_variable.cc
deleted file mode 100644
index 7f1e1946a5..0000000000
--- a/libstdc++-v3/src/condition_variable.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-// condition_variable -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <condition_variable>
-
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- condition_variable::condition_variable() throw ()
- {
-#ifdef __GTHREAD_COND_INIT
- __native_type __tmp = __GTHREAD_COND_INIT;
- _M_cond = __tmp;
-#else
- int __e = __gthread_cond_init(&_M_cond, 0);
-
- if (__e)
- __throw_system_error(__e);
-#endif
- }
-
- condition_variable::~condition_variable() throw ()
- {
- // XXX no thread blocked
- /* int __e = */ __gthread_cond_destroy(&_M_cond);
- // if __e == EBUSY then blocked
- }
-
- void
- condition_variable::wait(unique_lock<mutex>& __lock)
- {
- int __e = __gthread_cond_wait(&_M_cond, __lock.mutex()->native_handle());
-
- if (__e)
- __throw_system_error(__e);
- }
-
- void
- condition_variable::notify_one()
- {
- int __e = __gthread_cond_signal(&_M_cond);
-
- // XXX not in spec
- // EINVAL
- if (__e)
- __throw_system_error(__e);
- }
-
- void
- condition_variable::notify_all()
- {
- int __e = __gthread_cond_broadcast(&_M_cond);
-
- // XXX not in spec
- // EINVAL
- if (__e)
- __throw_system_error(__e);
- }
-
- condition_variable_any::condition_variable_any() throw ()
- { }
-
- condition_variable_any::~condition_variable_any() throw ()
- { }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/ctype.cc b/libstdc++-v3/src/ctype.cc
deleted file mode 100644
index 04d31cc574..0000000000
--- a/libstdc++-v3/src/ctype.cc
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005,
-// 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <locale>
-#include <cstdlib>
-#include <cstring>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- // Definitions for static const data members of ctype_base.
- const ctype_base::mask ctype_base::space;
- const ctype_base::mask ctype_base::print;
- const ctype_base::mask ctype_base::cntrl;
- const ctype_base::mask ctype_base::upper;
- const ctype_base::mask ctype_base::lower;
- const ctype_base::mask ctype_base::alpha;
- const ctype_base::mask ctype_base::digit;
- const ctype_base::mask ctype_base::punct;
- const ctype_base::mask ctype_base::xdigit;
- const ctype_base::mask ctype_base::alnum;
- const ctype_base::mask ctype_base::graph;
-
- // Definitions for locale::id of standard facets that are specialized.
- locale::id ctype<char>::id;
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- locale::id ctype<wchar_t>::id;
-#endif
-
- // XXX At some point, just rename this file to ctype_configure_char.cc
- // and compile it as a separate file instead of including it here.
- // Platform-specific initialization code for ctype tables.
-#include <bits/ctype_noninline.h>
-
- const size_t ctype<char>::table_size;
-
- ctype<char>::~ctype()
- {
- _S_destroy_c_locale(_M_c_locale_ctype);
- if (_M_del)
- delete[] this->table();
- }
-
- // Fill in the narrowing cache and flag whether all values are
- // valid or not. _M_narrow_ok is set to 2 if memcpy can't
- // be used.
- void
- ctype<char>::
- _M_narrow_init() const
- {
- char __tmp[sizeof(_M_narrow)];
- for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
- __tmp[__i] = __i;
- do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
-
- _M_narrow_ok = 1;
- if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
- _M_narrow_ok = 2;
- else
- {
- // Deal with the special case of zero: renarrow with a
- // different default and compare.
- char __c;
- do_narrow(__tmp, __tmp + 1, 1, &__c);
- if (__c == 1)
- _M_narrow_ok = 2;
- }
- }
-
- void
- ctype<char>::
- _M_widen_init() const
- {
- char __tmp[sizeof(_M_widen)];
- for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
- __tmp[__i] = __i;
- do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
-
- _M_widen_ok = 1;
- // Set _M_widen_ok to 2 if memcpy can't be used.
- if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
- _M_widen_ok = 2;
- }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- ctype<wchar_t>::ctype(size_t __refs)
- : __ctype_abstract_base<wchar_t>(__refs),
- _M_c_locale_ctype(_S_get_c_locale()), _M_narrow_ok(false)
- { _M_initialize_ctype(); }
-
- ctype<wchar_t>::ctype(__c_locale __cloc, size_t __refs)
- : __ctype_abstract_base<wchar_t>(__refs),
- _M_c_locale_ctype(_S_clone_c_locale(__cloc)), _M_narrow_ok(false)
- { _M_initialize_ctype(); }
-
- ctype<wchar_t>::~ctype()
- { _S_destroy_c_locale(_M_c_locale_ctype); }
-
- ctype_byname<wchar_t>::ctype_byname(const char* __s, size_t __refs)
- : ctype<wchar_t>(__refs)
- {
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
- {
- this->_S_destroy_c_locale(this->_M_c_locale_ctype);
- this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
- this->_M_initialize_ctype();
- }
- }
-
- ctype_byname<wchar_t>::~ctype_byname()
- { }
-
-#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/debug.cc b/libstdc++-v3/src/debug.cc
deleted file mode 100644
index 9074dfb073..0000000000
--- a/libstdc++-v3/src/debug.cc
+++ /dev/null
@@ -1,792 +0,0 @@
-// Debugging mode support code -*- C++ -*-
-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <debug/debug.h>
-#include <debug/safe_sequence.h>
-#include <debug/safe_iterator.h>
-#include <algorithm>
-#include <cassert>
-#include <cstring>
-#include <cctype>
-#include <cstdio>
-#include <cstdlib>
-#include <functional>
-
-using namespace std;
-
-namespace
-{
- /** Returns different instances of __mutex depending on the passed address
- * in order to limit contention without breaking current library binary
- * compatibility. */
- __gnu_cxx::__mutex&
- get_safe_base_mutex(void* __address)
- {
- const size_t mask = 0xf;
- static __gnu_cxx::__mutex safe_base_mutex[mask + 1];
- const size_t index = _Hash_impl::hash(__address) & mask;
- return safe_base_mutex[index];
- }
-
- void
- swap_seq(__gnu_debug::_Safe_sequence_base& __lhs,
- __gnu_debug::_Safe_sequence_base& __rhs)
- {
- swap(__lhs._M_iterators, __rhs._M_iterators);
- swap(__lhs._M_const_iterators, __rhs._M_const_iterators);
- swap(__lhs._M_version, __rhs._M_version);
- __gnu_debug::_Safe_iterator_base* __iter;
- for (__iter = __rhs._M_iterators; __iter; __iter = __iter->_M_next)
- __iter->_M_sequence = &__rhs;
- for (__iter = __lhs._M_iterators; __iter; __iter = __iter->_M_next)
- __iter->_M_sequence = &__lhs;
- for (__iter = __rhs._M_const_iterators; __iter; __iter = __iter->_M_next)
- __iter->_M_sequence = &__rhs;
- for (__iter = __lhs._M_const_iterators; __iter; __iter = __iter->_M_next)
- __iter->_M_sequence = &__lhs;
- }
-} // anonymous namespace
-
-namespace __gnu_debug
-{
- const char* _S_debug_messages[] =
- {
- "function requires a valid iterator range [%1.name;, %2.name;)",
- "attempt to insert into container with a singular iterator",
- "attempt to insert into container with an iterator"
- " from a different container",
- "attempt to erase from container with a %2.state; iterator",
- "attempt to erase from container with an iterator"
- " from a different container",
- "attempt to subscript container with out-of-bounds index %2;,"
- " but container only holds %3; elements",
- "attempt to access an element in an empty container",
- "elements in iterator range [%1.name;, %2.name;)"
- " are not partitioned by the value %3;",
- "elements in iterator range [%1.name;, %2.name;)"
- " are not partitioned by the predicate %3; and value %4;",
- "elements in iterator range [%1.name;, %2.name;) are not sorted",
- "elements in iterator range [%1.name;, %2.name;)"
- " are not sorted according to the predicate %3;",
- "elements in iterator range [%1.name;, %2.name;) do not form a heap",
- "elements in iterator range [%1.name;, %2.name;)"
- " do not form a heap with respect to the predicate %3;",
- "attempt to write through a singular bitset reference",
- "attempt to read from a singular bitset reference",
- "attempt to flip a singular bitset reference",
- "attempt to splice a list into itself",
- "attempt to splice lists with inequal allocators",
- "attempt to splice elements referenced by a %1.state; iterator",
- "attempt to splice an iterator from a different container",
- "splice destination %1.name;"
- " occurs within source range [%2.name;, %3.name;)",
- "attempt to initialize an iterator that will immediately become singular",
- "attempt to copy-construct an iterator from a singular iterator",
- "attempt to construct a constant iterator"
- " from a singular mutable iterator",
- "attempt to copy from a singular iterator",
- "attempt to dereference a %1.state; iterator",
- "attempt to increment a %1.state; iterator",
- "attempt to decrement a %1.state; iterator",
- "attempt to subscript a %1.state; iterator %2; step from"
- " its current position, which falls outside its dereferenceable range",
- "attempt to advance a %1.state; iterator %2; steps,"
- " which falls outside its valid range",
- "attempt to retreat a %1.state; iterator %2; steps,"
- " which falls outside its valid range",
- "attempt to compare a %1.state; iterator to a %2.state; iterator",
- "attempt to compare iterators from different sequences",
- "attempt to order a %1.state; iterator to a %2.state; iterator",
- "attempt to order iterators from different sequences",
- "attempt to compute the difference between a %1.state;"
- " iterator to a %2.state; iterator",
- "attempt to compute the different between two iterators"
- " from different sequences",
- "attempt to dereference an end-of-stream istream_iterator",
- "attempt to increment an end-of-stream istream_iterator",
- "attempt to output via an ostream_iterator with no associated stream",
- "attempt to dereference an end-of-stream istreambuf_iterator"
- " (this is a GNU extension)",
- "attempt to increment an end-of-stream istreambuf_iterator",
- "attempt to insert into container after an end iterator",
- "attempt to erase from container after a %2.state; iterator not followed"
- " by a dereferenceable one",
- "function requires a valid iterator range (%2.name;, %3.name;)"
- ", \"%2.name;\" shall be before and not equal to \"%3.name;\""
- };
-
- void
- _Safe_sequence_base::
- _M_detach_all()
- {
- __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
- for (_Safe_iterator_base* __iter = _M_iterators; __iter;)
- {
- _Safe_iterator_base* __old = __iter;
- __iter = __iter->_M_next;
- __old->_M_reset();
- }
- _M_iterators = 0;
-
- for (_Safe_iterator_base* __iter2 = _M_const_iterators; __iter2;)
- {
- _Safe_iterator_base* __old = __iter2;
- __iter2 = __iter2->_M_next;
- __old->_M_reset();
- }
- _M_const_iterators = 0;
- }
-
- void
- _Safe_sequence_base::
- _M_detach_singular()
- {
- __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
- for (_Safe_iterator_base* __iter = _M_iterators; __iter;)
- {
- _Safe_iterator_base* __old = __iter;
- __iter = __iter->_M_next;
- if (__old->_M_singular())
- __old->_M_detach_single();
- }
-
- for (_Safe_iterator_base* __iter2 = _M_const_iterators; __iter2;)
- {
- _Safe_iterator_base* __old = __iter2;
- __iter2 = __iter2->_M_next;
- if (__old->_M_singular())
- __old->_M_detach_single();
- }
- }
-
- void
- _Safe_sequence_base::
- _M_revalidate_singular()
- {
- __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
- for (_Safe_iterator_base* __iter = _M_iterators; __iter;
- __iter = __iter->_M_next)
- __iter->_M_version = _M_version;
-
- for (_Safe_iterator_base* __iter2 = _M_const_iterators; __iter2;
- __iter2 = __iter2->_M_next)
- __iter2->_M_version = _M_version;
- }
-
- void
- _Safe_sequence_base::
- _M_swap(_Safe_sequence_base& __x)
- {
- // We need to lock both sequences to swap
- using namespace __gnu_cxx;
- __mutex *__this_mutex = &_M_get_mutex();
- __mutex *__x_mutex = &__x._M_get_mutex();
- if (__this_mutex == __x_mutex)
- {
- __scoped_lock __lock(*__this_mutex);
- swap_seq(*this, __x);
- }
- else
- {
- __scoped_lock __l1(__this_mutex < __x_mutex
- ? *__this_mutex : *__x_mutex);
- __scoped_lock __l2(__this_mutex < __x_mutex
- ? *__x_mutex : *__this_mutex);
- swap_seq(*this, __x);
- }
- }
-
- __gnu_cxx::__mutex&
- _Safe_sequence_base::
- _M_get_mutex() throw ()
- { return get_safe_base_mutex(this); }
-
- void
- _Safe_sequence_base::
- _M_attach(_Safe_iterator_base* __it, bool __constant)
- {
- __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
- _M_attach_single(__it, __constant);
- }
-
- void
- _Safe_sequence_base::
- _M_attach_single(_Safe_iterator_base* __it, bool __constant) throw ()
- {
- _Safe_iterator_base*& __its =
- __constant ? _M_const_iterators : _M_iterators;
- __it->_M_next = __its;
- if (__it->_M_next)
- __it->_M_next->_M_prior = __it;
- __its = __it;
- }
-
- void
- _Safe_sequence_base::
- _M_detach(_Safe_iterator_base* __it)
- {
- // Remove __it from this sequence's list
- __gnu_cxx::__scoped_lock sentry(_M_get_mutex());
- _M_detach_single(__it);
- }
-
- void
- _Safe_sequence_base::
- _M_detach_single(_Safe_iterator_base* __it) throw ()
- {
- // Remove __it from this sequence's list
- __it->_M_unlink();
- if (_M_const_iterators == __it)
- _M_const_iterators = __it->_M_next;
- if (_M_iterators == __it)
- _M_iterators = __it->_M_next;
- }
-
- void
- _Safe_iterator_base::
- _M_attach(_Safe_sequence_base* __seq, bool __constant)
- {
- _M_detach();
-
- // Attach to the new sequence (if there is one)
- if (__seq)
- {
- _M_sequence = __seq;
- _M_version = _M_sequence->_M_version;
- _M_sequence->_M_attach(this, __constant);
- }
- }
-
- void
- _Safe_iterator_base::
- _M_attach_single(_Safe_sequence_base* __seq, bool __constant) throw ()
- {
- _M_detach_single();
-
- // Attach to the new sequence (if there is one)
- if (__seq)
- {
- _M_sequence = __seq;
- _M_version = _M_sequence->_M_version;
- _M_sequence->_M_attach_single(this, __constant);
- }
- }
-
- void
- _Safe_iterator_base::
- _M_detach()
- {
- if (_M_sequence)
- {
- _M_sequence->_M_detach(this);
- }
-
- _M_reset();
- }
-
- void
- _Safe_iterator_base::
- _M_detach_single() throw ()
- {
- if (_M_sequence)
- {
- _M_sequence->_M_detach_single(this);
- }
-
- _M_reset();
- }
-
- void
- _Safe_iterator_base::
- _M_reset() throw ()
- {
- _M_sequence = 0;
- _M_version = 0;
- _M_prior = 0;
- _M_next = 0;
- }
-
- bool
- _Safe_iterator_base::
- _M_singular() const throw ()
- { return !_M_sequence || _M_version != _M_sequence->_M_version; }
-
- bool
- _Safe_iterator_base::
- _M_can_compare(const _Safe_iterator_base& __x) const throw ()
- {
- return (!_M_singular()
- && !__x._M_singular() && _M_sequence == __x._M_sequence);
- }
-
- __gnu_cxx::__mutex&
- _Safe_iterator_base::
- _M_get_mutex() throw ()
- { return get_safe_base_mutex(_M_sequence); }
-
- void
- _Error_formatter::_Parameter::
- _M_print_field(const _Error_formatter* __formatter, const char* __name) const
- {
- assert(this->_M_kind != _Parameter::__unused_param);
- const int __bufsize = 64;
- char __buf[__bufsize];
-
- if (_M_kind == __iterator)
- {
- if (strcmp(__name, "name") == 0)
- {
- assert(_M_variant._M_iterator._M_name);
- __formatter->_M_print_word(_M_variant._M_iterator._M_name);
- }
- else if (strcmp(__name, "address") == 0)
- {
- __formatter->_M_format_word(__buf, __bufsize, "%p",
- _M_variant._M_iterator._M_address);
- __formatter->_M_print_word(__buf);
- }
- else if (strcmp(__name, "type") == 0)
- {
- if (!_M_variant._M_iterator._M_type)
- __formatter->_M_print_word("<unknown type>");
- else
- // TBD: demangle!
- __formatter->_M_print_word(_M_variant._M_iterator.
- _M_type->name());
- }
- else if (strcmp(__name, "constness") == 0)
- {
- static const char* __constness_names[__last_constness] =
- {
- "<unknown>",
- "constant",
- "mutable"
- };
- __formatter->_M_print_word(__constness_names[_M_variant.
- _M_iterator.
- _M_constness]);
- }
- else if (strcmp(__name, "state") == 0)
- {
- static const char* __state_names[__last_state] =
- {
- "<unknown>",
- "singular",
- "dereferenceable (start-of-sequence)",
- "dereferenceable",
- "past-the-end",
- "before-begin"
- };
- __formatter->_M_print_word(__state_names[_M_variant.
- _M_iterator._M_state]);
- }
- else if (strcmp(__name, "sequence") == 0)
- {
- assert(_M_variant._M_iterator._M_sequence);
- __formatter->_M_format_word(__buf, __bufsize, "%p",
- _M_variant._M_iterator._M_sequence);
- __formatter->_M_print_word(__buf);
- }
- else if (strcmp(__name, "seq_type") == 0)
- {
- if (!_M_variant._M_iterator._M_seq_type)
- __formatter->_M_print_word("<unknown seq_type>");
- else
- // TBD: demangle!
- __formatter->_M_print_word(_M_variant._M_iterator.
- _M_seq_type->name());
- }
- else
- assert(false);
- }
- else if (_M_kind == __sequence)
- {
- if (strcmp(__name, "name") == 0)
- {
- assert(_M_variant._M_sequence._M_name);
- __formatter->_M_print_word(_M_variant._M_sequence._M_name);
- }
- else if (strcmp(__name, "address") == 0)
- {
- assert(_M_variant._M_sequence._M_address);
- __formatter->_M_format_word(__buf, __bufsize, "%p",
- _M_variant._M_sequence._M_address);
- __formatter->_M_print_word(__buf);
- }
- else if (strcmp(__name, "type") == 0)
- {
- if (!_M_variant._M_sequence._M_type)
- __formatter->_M_print_word("<unknown type>");
- else
- // TBD: demangle!
- __formatter->_M_print_word(_M_variant._M_sequence.
- _M_type->name());
- }
- else
- assert(false);
- }
- else if (_M_kind == __integer)
- {
- if (strcmp(__name, "name") == 0)
- {
- assert(_M_variant._M_integer._M_name);
- __formatter->_M_print_word(_M_variant._M_integer._M_name);
- }
- else
- assert(false);
- }
- else if (_M_kind == __string)
- {
- if (strcmp(__name, "name") == 0)
- {
- assert(_M_variant._M_string._M_name);
- __formatter->_M_print_word(_M_variant._M_string._M_name);
- }
- else
- assert(false);
- }
- else
- {
- assert(false);
- }
- }
-
- void
- _Error_formatter::_Parameter::
- _M_print_description(const _Error_formatter* __formatter) const
- {
- const int __bufsize = 128;
- char __buf[__bufsize];
-
- if (_M_kind == __iterator)
- {
- __formatter->_M_print_word("iterator ");
- if (_M_variant._M_iterator._M_name)
- {
- __formatter->_M_format_word(__buf, __bufsize, "\"%s\" ",
- _M_variant._M_iterator._M_name);
- __formatter->_M_print_word(__buf);
- }
-
- __formatter->_M_format_word(__buf, __bufsize, "@ 0x%p {\n",
- _M_variant._M_iterator._M_address);
- __formatter->_M_print_word(__buf);
- if (_M_variant._M_iterator._M_type)
- {
- __formatter->_M_print_word("type = ");
- _M_print_field(__formatter, "type");
-
- if (_M_variant._M_iterator._M_constness != __unknown_constness)
- {
- __formatter->_M_print_word(" (");
- _M_print_field(__formatter, "constness");
- __formatter->_M_print_word(" iterator)");
- }
- __formatter->_M_print_word(";\n");
- }
-
- if (_M_variant._M_iterator._M_state != __unknown_state)
- {
- __formatter->_M_print_word(" state = ");
- _M_print_field(__formatter, "state");
- __formatter->_M_print_word(";\n");
- }
-
- if (_M_variant._M_iterator._M_sequence)
- {
- __formatter->_M_print_word(" references sequence ");
- if (_M_variant._M_iterator._M_seq_type)
- {
- __formatter->_M_print_word("with type `");
- _M_print_field(__formatter, "seq_type");
- __formatter->_M_print_word("' ");
- }
-
- __formatter->_M_format_word(__buf, __bufsize, "@ 0x%p\n",
- _M_variant._M_sequence._M_address);
- __formatter->_M_print_word(__buf);
- }
- __formatter->_M_print_word("}\n");
- }
- else if (_M_kind == __sequence)
- {
- __formatter->_M_print_word("sequence ");
- if (_M_variant._M_sequence._M_name)
- {
- __formatter->_M_format_word(__buf, __bufsize, "\"%s\" ",
- _M_variant._M_sequence._M_name);
- __formatter->_M_print_word(__buf);
- }
-
- __formatter->_M_format_word(__buf, __bufsize, "@ 0x%p {\n",
- _M_variant._M_sequence._M_address);
- __formatter->_M_print_word(__buf);
-
- if (_M_variant._M_sequence._M_type)
- {
- __formatter->_M_print_word(" type = ");
- _M_print_field(__formatter, "type");
- __formatter->_M_print_word(";\n");
- }
- __formatter->_M_print_word("}\n");
- }
- }
-
- const _Error_formatter&
- _Error_formatter::_M_message(_Debug_msg_id __id) const throw ()
- { return this->_M_message(_S_debug_messages[__id]); }
-
- void
- _Error_formatter::_M_error() const
- {
- const int __bufsize = 128;
- char __buf[__bufsize];
-
- // Emit file & line number information
- _M_column = 1;
- _M_wordwrap = false;
- if (_M_file)
- {
- _M_format_word(__buf, __bufsize, "%s:", _M_file);
- _M_print_word(__buf);
- _M_column += strlen(__buf);
- }
-
- if (_M_line > 0)
- {
- _M_format_word(__buf, __bufsize, "%u:", _M_line);
- _M_print_word(__buf);
- _M_column += strlen(__buf);
- }
-
- if (_M_max_length)
- _M_wordwrap = true;
- _M_print_word("error: ");
-
- // Print the error message
- assert(_M_text);
- _M_print_string(_M_text);
- _M_print_word(".\n");
-
- // Emit descriptions of the objects involved in the operation
- _M_wordwrap = false;
- bool __has_noninteger_parameters = false;
- for (unsigned int __i = 0; __i < _M_num_parameters; ++__i)
- {
- if (_M_parameters[__i]._M_kind == _Parameter::__iterator
- || _M_parameters[__i]._M_kind == _Parameter::__sequence)
- {
- if (!__has_noninteger_parameters)
- {
- _M_first_line = true;
- _M_print_word("\nObjects involved in the operation:\n");
- __has_noninteger_parameters = true;
- }
- _M_parameters[__i]._M_print_description(this);
- }
- }
-
- abort();
- }
-
- template<typename _Tp>
- void
- _Error_formatter::_M_format_word(char* __buf,
- int __n __attribute__ ((__unused__)),
- const char* __fmt, _Tp __s) const throw ()
- {
-#ifdef _GLIBCXX_USE_C99
- std::snprintf(__buf, __n, __fmt, __s);
-#else
- std::sprintf(__buf, __fmt, __s);
-#endif
- }
-
-
- void
- _Error_formatter::_M_print_word(const char* __word) const
- {
- if (!_M_wordwrap)
- {
- fprintf(stderr, "%s", __word);
- return;
- }
-
- size_t __length = strlen(__word);
- if (__length == 0)
- return;
-
- if ((_M_column + __length < _M_max_length)
- || (__length >= _M_max_length && _M_column == 1))
- {
- // If this isn't the first line, indent
- if (_M_column == 1 && !_M_first_line)
- {
- char __spacing[_M_indent + 1];
- for (int i = 0; i < _M_indent; ++i)
- __spacing[i] = ' ';
- __spacing[_M_indent] = '\0';
- fprintf(stderr, "%s", __spacing);
- _M_column += _M_indent;
- }
-
- fprintf(stderr, "%s", __word);
- _M_column += __length;
-
- if (__word[__length - 1] == '\n')
- {
- _M_first_line = false;
- _M_column = 1;
- }
- }
- else
- {
- _M_column = 1;
- _M_print_word("\n");
- _M_print_word(__word);
- }
- }
-
- void
- _Error_formatter::
- _M_print_string(const char* __string) const
- {
- const char* __start = __string;
- const char* __finish = __start;
- const int __bufsize = 128;
- char __buf[__bufsize];
-
- while (*__start)
- {
- if (*__start != '%')
- {
- // [__start, __finish) denotes the next word
- __finish = __start;
- while (isalnum(*__finish))
- ++__finish;
- if (__start == __finish)
- ++__finish;
- if (isspace(*__finish))
- ++__finish;
-
- const ptrdiff_t __len = __finish - __start;
- assert(__len < __bufsize);
- memcpy(__buf, __start, __len);
- __buf[__len] = '\0';
- _M_print_word(__buf);
- __start = __finish;
-
- // Skip extra whitespace
- while (*__start == ' ')
- ++__start;
-
- continue;
- }
-
- ++__start;
- assert(*__start);
- if (*__start == '%')
- {
- _M_print_word("%");
- ++__start;
- continue;
- }
-
- // Get the parameter number
- assert(*__start >= '1' && *__start <= '9');
- size_t __param = *__start - '0';
- --__param;
- assert(__param < _M_num_parameters);
-
- // '.' separates the parameter number from the field
- // name, if there is one.
- ++__start;
- if (*__start != '.')
- {
- assert(*__start == ';');
- ++__start;
- __buf[0] = '\0';
- if (_M_parameters[__param]._M_kind == _Parameter::__integer)
- {
- _M_format_word(__buf, __bufsize, "%ld",
- _M_parameters[__param]._M_variant._M_integer._M_value);
- _M_print_word(__buf);
- }
- else if (_M_parameters[__param]._M_kind == _Parameter::__string)
- _M_print_string(_M_parameters[__param]._M_variant._M_string._M_value);
- continue;
- }
-
- // Extract the field name we want
- enum { __max_field_len = 16 };
- char __field[__max_field_len];
- int __field_idx = 0;
- ++__start;
- while (*__start != ';')
- {
- assert(*__start);
- assert(__field_idx < __max_field_len-1);
- __field[__field_idx++] = *__start++;
- }
- ++__start;
- __field[__field_idx] = 0;
-
- _M_parameters[__param]._M_print_field(this, __field);
- }
- }
-
- void
- _Error_formatter::_M_get_max_length() const throw ()
- {
- const char* __nptr = std::getenv("GLIBCXX_DEBUG_MESSAGE_LENGTH");
- if (__nptr)
- {
- char* __endptr;
- const unsigned long __ret = std::strtoul(__nptr, &__endptr, 0);
- if (*__nptr != '\0' && *__endptr == '\0')
- _M_max_length = __ret;
- }
- }
-
- // Instantiations.
- template
- void
- _Error_formatter::_M_format_word(char*, int, const char*,
- const void*) const;
-
- template
- void
- _Error_formatter::_M_format_word(char*, int, const char*, long) const;
-
- template
- void
- _Error_formatter::_M_format_word(char*, int, const char*,
- std::size_t) const;
-
- template
- void
- _Error_formatter::_M_format_word(char*, int, const char*,
- const char*) const;
-} // namespace __gnu_debug
diff --git a/libstdc++-v3/src/future.cc b/libstdc++-v3/src/future.cc
deleted file mode 100644
index d6149cbbf6..0000000000
--- a/libstdc++-v3/src/future.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-// future -*- C++ -*-
-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <future>
-
-namespace
-{
- struct future_error_category : public std::error_category
- {
- future_error_category() {}
-
- virtual const char*
- name() const
- { return "future"; }
-
- virtual std::string message(int __ec) const
- {
- std::string __msg;
- switch (std::future_errc(__ec))
- {
- case std::future_errc::broken_promise:
- __msg = "Broken promise";
- break;
- case std::future_errc::future_already_retrieved:
- __msg = "Future already retrieved";
- break;
- case std::future_errc::promise_already_satisfied:
- __msg = "Promise already satisfied";
- break;
- case std::future_errc::no_state:
- __msg = "No associated state";
- break;
- default:
- __msg = "Unknown error";
- break;
- }
- return __msg;
- }
- };
-
- const future_error_category&
- __future_category_instance()
- {
- static const future_error_category __fec;
- return __fec;
- }
-}
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- const error_category& future_category()
- { return __future_category_instance(); }
-
- future_error::~future_error() throw() { }
-
- const char*
- future_error::what() const throw() { return _M_code.message().c_str(); }
-
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
- && defined(_GLIBCXX_ATOMIC_BUILTINS_4)
- __future_base::_Result_base::_Result_base() = default;
-
- __future_base::_Result_base::~_Result_base() = default;
-
- __future_base::_State_base::~_State_base() = default;
-#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
-
-// XXX GLIBCXX_ABI Deprecated
-// gcc-4.6.0
-// <future> export changes
-#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
- && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
-
-namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
-{
- const std::error_category* future_category = &__future_category_instance();
-}
-
-#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
- asm (".symver " #cur "," #old "@@@" #version);
-
-_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx15future_categoryE, _ZSt15future_category, GLIBCXX_3.4.14)
-
-#endif
-
diff --git a/libstdc++-v3/src/hash-long-double-aux.cc b/libstdc++-v3/src/hash-long-double-aux.cc
deleted file mode 100644
index d54d635f83..0000000000
--- a/libstdc++-v3/src/hash-long-double-aux.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// std::hash and std::tr1::hash definitions, long double bits -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
- // For long double, careful with random padding bits (e.g., on x86,
- // 10 bytes -> 12 bytes) and resort to frexp.
- template<>
- size_t
- hash<long double>::operator()(long double __val) const
- {
- // 0 and -0 both hash to zero.
- if (__val == 0.0L)
- return 0;
-
- int __exponent;
- __val = __builtin_frexpl(__val, &__exponent);
- __val = __val < 0.0l ? -(__val + 0.5l) : __val;
-
- const long double __mult = __SIZE_MAX__ + 1.0l;
- __val *= __mult;
-
- // Try to use all the bits of the mantissa (really necessary only
- // on 32-bit targets, at least for 80-bit floating point formats).
- const size_t __hibits = (size_t)__val;
- __val = (__val - (long double)__hibits) * __mult;
-
- const size_t __coeff = __SIZE_MAX__ / __LDBL_MAX_EXP__;
-
- return __hibits + (size_t)__val + __coeff * __exponent;
- }
diff --git a/libstdc++-v3/src/hash_c++0x.cc b/libstdc++-v3/src/hash_c++0x.cc
deleted file mode 100644
index 852498df60..0000000000
--- a/libstdc++-v3/src/hash_c++0x.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// std::hash definitions -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
-# error "hash_c++0x.cc must be compiled with -std=gnu++0x"
-#endif
-
-#include <bits/functional_hash.h>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-#include "hash-long-double-aux.cc"
-}
diff --git a/libstdc++-v3/src/hash_tr1.cc b/libstdc++-v3/src/hash_tr1.cc
deleted file mode 100644
index e707e827a1..0000000000
--- a/libstdc++-v3/src/hash_tr1.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// std::tr1::hash definitions -*- C++ -*-
-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <string>
-#include <tr1/functional>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- namespace tr1
- {
-#include "hash-long-double-aux.cc"
-
-#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
- template<>
- size_t
- hash<string>::operator()(string __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length()); }
-
- template<>
- size_t
- hash<const string&>::operator()(const string& __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length()); }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- size_t
- hash<wstring>::operator()(wstring __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-
- template<>
- size_t
- hash<const wstring&>::operator()(const wstring& __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-#endif
-#endif
- }
-}
diff --git a/libstdc++-v3/src/hashtable_c++0x.cc b/libstdc++-v3/src/hashtable_c++0x.cc
deleted file mode 100644
index c9026acdff..0000000000
--- a/libstdc++-v3/src/hashtable_c++0x.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// std::__detail definitions -*- C++ -*-
-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <bits/c++config.h>
-
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
-# error "hashtable_c++0x.cc must be compiled with -std=gnu++0x"
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-#include "hashtable-aux.cc"
-} // namespace // namespace std
diff --git a/libstdc++-v3/src/hashtable_tr1.cc b/libstdc++-v3/src/hashtable_tr1.cc
deleted file mode 100644
index 32d5b63dca..0000000000
--- a/libstdc++-v3/src/hashtable_tr1.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// std::__detail definitions -*- C++ -*-
-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <bits/c++config.h>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- namespace tr1
- {
-#include "hashtable-aux.cc"
- }
-}
diff --git a/libstdc++-v3/src/istream.cc b/libstdc++-v3/src/istream.cc
deleted file mode 100644
index f161016cf3..0000000000
--- a/libstdc++-v3/src/istream.cc
+++ /dev/null
@@ -1,690 +0,0 @@
-// Input streams -*- C++ -*-
-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-//
-// ISO C++ 14882: 27.6.1 Input streams
-//
-
-#include <istream>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<>
- basic_istream<char>&
- basic_istream<char>::
- getline(char_type* __s, streamsize __n, char_type __delim)
- {
- _M_gcount = 0;
- ios_base::iostate __err = ios_base::goodbit;
- sentry __cerb(*this, true);
- if (__cerb)
- {
- __try
- {
- const int_type __idelim = traits_type::to_int_type(__delim);
- const int_type __eof = traits_type::eof();
- __streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
-
- while (_M_gcount + 1 < __n
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __idelim))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - _M_gcount
- - 1));
- if (__size > 1)
- {
- const char_type* __p = traits_type::find(__sb->gptr(),
- __size,
- __delim);
- if (__p)
- __size = __p - __sb->gptr();
- traits_type::copy(__s, __sb->gptr(), __size);
- __s += __size;
- __sb->__safe_gbump(__size);
- _M_gcount += __size;
- __c = __sb->sgetc();
- }
- else
- {
- *__s++ = traits_type::to_char_type(__c);
- ++_M_gcount;
- __c = __sb->snextc();
- }
- }
-
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- else if (traits_type::eq_int_type(__c, __idelim))
- {
- ++_M_gcount;
- __sb->sbumpc();
- }
- else
- __err |= ios_base::failbit;
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- this->_M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { this->_M_setstate(ios_base::badbit); }
- }
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 243. get and getline when sentry reports failure.
- if (__n > 0)
- *__s = char_type();
- if (!_M_gcount)
- __err |= ios_base::failbit;
- if (__err)
- this->setstate(__err);
- return *this;
- }
-
- template<>
- basic_istream<char>&
- basic_istream<char>::
- ignore(streamsize __n, int_type __delim)
- {
- if (traits_type::eq_int_type(__delim, traits_type::eof()))
- return ignore(__n);
-
- _M_gcount = 0;
- sentry __cerb(*this, true);
- if (__n > 0 && __cerb)
- {
- ios_base::iostate __err = ios_base::goodbit;
- __try
- {
- const char_type __cdelim = traits_type::to_char_type(__delim);
- const int_type __eof = traits_type::eof();
- __streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
-
- bool __large_ignore = false;
- while (true)
- {
- while (_M_gcount < __n
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __delim))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - _M_gcount));
- if (__size > 1)
- {
- const char_type* __p = traits_type::find(__sb->gptr(),
- __size,
- __cdelim);
- if (__p)
- __size = __p - __sb->gptr();
- __sb->__safe_gbump(__size);
- _M_gcount += __size;
- __c = __sb->sgetc();
- }
- else
- {
- ++_M_gcount;
- __c = __sb->snextc();
- }
- }
- if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __delim))
- {
- _M_gcount =
- __gnu_cxx::__numeric_traits<streamsize>::__min;
- __large_ignore = true;
- }
- else
- break;
- }
-
- if (__large_ignore)
- _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
-
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- else if (traits_type::eq_int_type(__c, __delim))
- {
- if (_M_gcount
- < __gnu_cxx::__numeric_traits<streamsize>::__max)
- ++_M_gcount;
- __sb->sbumpc();
- }
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- this->_M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { this->_M_setstate(ios_base::badbit); }
- if (__err)
- this->setstate(__err);
- }
- return *this;
- }
-
- template<>
- basic_istream<char>&
- operator>>(basic_istream<char>& __in, char* __s)
- {
- typedef basic_istream<char> __istream_type;
- typedef __istream_type::int_type __int_type;
- typedef __istream_type::char_type __char_type;
- typedef __istream_type::traits_type __traits_type;
- typedef __istream_type::__streambuf_type __streambuf_type;
- typedef __istream_type::__ctype_type __ctype_type;
-
- streamsize __extracted = 0;
- ios_base::iostate __err = ios_base::goodbit;
- __istream_type::sentry __cerb(__in, false);
- if (__cerb)
- {
- __try
- {
- // Figure out how many characters to extract.
- streamsize __num = __in.width();
- if (__num <= 0)
- __num = __gnu_cxx::__numeric_traits<streamsize>::__max;
-
- const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
-
- const __int_type __eof = __traits_type::eof();
- __streambuf_type* __sb = __in.rdbuf();
- __int_type __c = __sb->sgetc();
-
- while (__extracted < __num - 1
- && !__traits_type::eq_int_type(__c, __eof)
- && !__ct.is(ctype_base::space,
- __traits_type::to_char_type(__c)))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__num - __extracted
- - 1));
- if (__size > 1)
- {
- __size = (__ct.scan_is(ctype_base::space,
- __sb->gptr() + 1,
- __sb->gptr() + __size)
- - __sb->gptr());
- __traits_type::copy(__s, __sb->gptr(), __size);
- __s += __size;
- __sb->__safe_gbump(__size);
- __extracted += __size;
- __c = __sb->sgetc();
- }
- else
- {
- *__s++ = __traits_type::to_char_type(__c);
- ++__extracted;
- __c = __sb->snextc();
- }
- }
-
- if (__traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
-
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 68. Extractors for char* should store null at end
- *__s = __char_type();
- __in.width(0);
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- __in._M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { __in._M_setstate(ios_base::badbit); }
- }
- if (!__extracted)
- __err |= ios_base::failbit;
- if (__err)
- __in.setstate(__err);
- return __in;
- }
-
- template<>
- basic_istream<char>&
- operator>>(basic_istream<char>& __in, basic_string<char>& __str)
- {
- typedef basic_istream<char> __istream_type;
- typedef __istream_type::int_type __int_type;
- typedef __istream_type::char_type __char_type;
- typedef __istream_type::traits_type __traits_type;
- typedef __istream_type::__streambuf_type __streambuf_type;
- typedef __istream_type::__ctype_type __ctype_type;
- typedef basic_string<char> __string_type;
- typedef __string_type::size_type __size_type;
-
- __size_type __extracted = 0;
- ios_base::iostate __err = ios_base::goodbit;
- __istream_type::sentry __cerb(__in, false);
- if (__cerb)
- {
- __try
- {
- __str.erase();
- const streamsize __w = __in.width();
- const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
- : __str.max_size();
- const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
- const __int_type __eof = __traits_type::eof();
- __streambuf_type* __sb = __in.rdbuf();
- __int_type __c = __sb->sgetc();
-
- while (__extracted < __n
- && !__traits_type::eq_int_type(__c, __eof)
- && !__ct.is(ctype_base::space,
- __traits_type::to_char_type(__c)))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - __extracted));
- if (__size > 1)
- {
- __size = (__ct.scan_is(ctype_base::space,
- __sb->gptr() + 1,
- __sb->gptr() + __size)
- - __sb->gptr());
- __str.append(__sb->gptr(), __size);
- __sb->__safe_gbump(__size);
- __extracted += __size;
- __c = __sb->sgetc();
- }
- else
- {
- __str += __traits_type::to_char_type(__c);
- ++__extracted;
- __c = __sb->snextc();
- }
- }
-
- if (__traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- __in.width(0);
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- __in._M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- {
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 91. Description of operator>> and getline() for string<>
- // might cause endless loop
- __in._M_setstate(ios_base::badbit);
- }
- }
- if (!__extracted)
- __err |= ios_base::failbit;
- if (__err)
- __in.setstate(__err);
- return __in;
- }
-
- template<>
- basic_istream<char>&
- getline(basic_istream<char>& __in, basic_string<char>& __str,
- char __delim)
- {
- typedef basic_istream<char> __istream_type;
- typedef __istream_type::int_type __int_type;
- typedef __istream_type::char_type __char_type;
- typedef __istream_type::traits_type __traits_type;
- typedef __istream_type::__streambuf_type __streambuf_type;
- typedef __istream_type::__ctype_type __ctype_type;
- typedef basic_string<char> __string_type;
- typedef __string_type::size_type __size_type;
-
- __size_type __extracted = 0;
- const __size_type __n = __str.max_size();
- ios_base::iostate __err = ios_base::goodbit;
- __istream_type::sentry __cerb(__in, true);
- if (__cerb)
- {
- __try
- {
- __str.erase();
- const __int_type __idelim = __traits_type::to_int_type(__delim);
- const __int_type __eof = __traits_type::eof();
- __streambuf_type* __sb = __in.rdbuf();
- __int_type __c = __sb->sgetc();
-
- while (__extracted < __n
- && !__traits_type::eq_int_type(__c, __eof)
- && !__traits_type::eq_int_type(__c, __idelim))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - __extracted));
- if (__size > 1)
- {
- const __char_type* __p = __traits_type::find(__sb->gptr(),
- __size,
- __delim);
- if (__p)
- __size = __p - __sb->gptr();
- __str.append(__sb->gptr(), __size);
- __sb->__safe_gbump(__size);
- __extracted += __size;
- __c = __sb->sgetc();
- }
- else
- {
- __str += __traits_type::to_char_type(__c);
- ++__extracted;
- __c = __sb->snextc();
- }
- }
-
- if (__traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- else if (__traits_type::eq_int_type(__c, __idelim))
- {
- ++__extracted;
- __sb->sbumpc();
- }
- else
- __err |= ios_base::failbit;
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- __in._M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- {
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 91. Description of operator>> and getline() for string<>
- // might cause endless loop
- __in._M_setstate(ios_base::badbit);
- }
- }
- if (!__extracted)
- __err |= ios_base::failbit;
- if (__err)
- __in.setstate(__err);
- return __in;
- }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- basic_istream<wchar_t>&
- basic_istream<wchar_t>::
- getline(char_type* __s, streamsize __n, char_type __delim)
- {
- _M_gcount = 0;
- ios_base::iostate __err = ios_base::goodbit;
- sentry __cerb(*this, true);
- if (__cerb)
- {
- __try
- {
- const int_type __idelim = traits_type::to_int_type(__delim);
- const int_type __eof = traits_type::eof();
- __streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
-
- while (_M_gcount + 1 < __n
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __idelim))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - _M_gcount
- - 1));
- if (__size > 1)
- {
- const char_type* __p = traits_type::find(__sb->gptr(),
- __size,
- __delim);
- if (__p)
- __size = __p - __sb->gptr();
- traits_type::copy(__s, __sb->gptr(), __size);
- __s += __size;
- __sb->__safe_gbump(__size);
- _M_gcount += __size;
- __c = __sb->sgetc();
- }
- else
- {
- *__s++ = traits_type::to_char_type(__c);
- ++_M_gcount;
- __c = __sb->snextc();
- }
- }
-
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- else if (traits_type::eq_int_type(__c, __idelim))
- {
- ++_M_gcount;
- __sb->sbumpc();
- }
- else
- __err |= ios_base::failbit;
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- this->_M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { this->_M_setstate(ios_base::badbit); }
- }
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 243. get and getline when sentry reports failure.
- if (__n > 0)
- *__s = char_type();
- if (!_M_gcount)
- __err |= ios_base::failbit;
- if (__err)
- this->setstate(__err);
- return *this;
- }
-
- template<>
- basic_istream<wchar_t>&
- basic_istream<wchar_t>::
- ignore(streamsize __n, int_type __delim)
- {
- if (traits_type::eq_int_type(__delim, traits_type::eof()))
- return ignore(__n);
-
- _M_gcount = 0;
- sentry __cerb(*this, true);
- if (__n > 0 && __cerb)
- {
- ios_base::iostate __err = ios_base::goodbit;
- __try
- {
- const char_type __cdelim = traits_type::to_char_type(__delim);
- const int_type __eof = traits_type::eof();
- __streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
-
- bool __large_ignore = false;
- while (true)
- {
- while (_M_gcount < __n
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __delim))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - _M_gcount));
- if (__size > 1)
- {
- const char_type* __p = traits_type::find(__sb->gptr(),
- __size,
- __cdelim);
- if (__p)
- __size = __p - __sb->gptr();
- __sb->__safe_gbump(__size);
- _M_gcount += __size;
- __c = __sb->sgetc();
- }
- else
- {
- ++_M_gcount;
- __c = __sb->snextc();
- }
- }
- if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __delim))
- {
- _M_gcount =
- __gnu_cxx::__numeric_traits<streamsize>::__min;
- __large_ignore = true;
- }
- else
- break;
- }
-
- if (__large_ignore)
- _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
-
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- else if (traits_type::eq_int_type(__c, __delim))
- {
- if (_M_gcount
- < __gnu_cxx::__numeric_traits<streamsize>::__max)
- ++_M_gcount;
- __sb->sbumpc();
- }
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- this->_M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- { this->_M_setstate(ios_base::badbit); }
- if (__err)
- this->setstate(__err);
- }
- return *this;
- }
-
- template<>
- basic_istream<wchar_t>&
- getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
- wchar_t __delim)
- {
- typedef basic_istream<wchar_t> __istream_type;
- typedef __istream_type::int_type __int_type;
- typedef __istream_type::char_type __char_type;
- typedef __istream_type::traits_type __traits_type;
- typedef __istream_type::__streambuf_type __streambuf_type;
- typedef __istream_type::__ctype_type __ctype_type;
- typedef basic_string<wchar_t> __string_type;
- typedef __string_type::size_type __size_type;
-
- __size_type __extracted = 0;
- const __size_type __n = __str.max_size();
- ios_base::iostate __err = ios_base::goodbit;
- __istream_type::sentry __cerb(__in, true);
- if (__cerb)
- {
- __try
- {
- __str.erase();
- const __int_type __idelim = __traits_type::to_int_type(__delim);
- const __int_type __eof = __traits_type::eof();
- __streambuf_type* __sb = __in.rdbuf();
- __int_type __c = __sb->sgetc();
-
- while (__extracted < __n
- && !__traits_type::eq_int_type(__c, __eof)
- && !__traits_type::eq_int_type(__c, __idelim))
- {
- streamsize __size = std::min(streamsize(__sb->egptr()
- - __sb->gptr()),
- streamsize(__n - __extracted));
- if (__size > 1)
- {
- const __char_type* __p = __traits_type::find(__sb->gptr(),
- __size,
- __delim);
- if (__p)
- __size = __p - __sb->gptr();
- __str.append(__sb->gptr(), __size);
- __sb->__safe_gbump(__size);
- __extracted += __size;
- __c = __sb->sgetc();
- }
- else
- {
- __str += __traits_type::to_char_type(__c);
- ++__extracted;
- __c = __sb->snextc();
- }
- }
-
- if (__traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- else if (__traits_type::eq_int_type(__c, __idelim))
- {
- ++__extracted;
- __sb->sbumpc();
- }
- else
- __err |= ios_base::failbit;
- }
- __catch(__cxxabiv1::__forced_unwind&)
- {
- __in._M_setstate(ios_base::badbit);
- __throw_exception_again;
- }
- __catch(...)
- {
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 91. Description of operator>> and getline() for string<>
- // might cause endless loop
- __in._M_setstate(ios_base::badbit);
- }
- }
- if (!__extracted)
- __err |= ios_base::failbit;
- if (__err)
- __in.setstate(__err);
- return __in;
- }
-#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/limits.cc b/libstdc++-v3/src/limits.cc
deleted file mode 100644
index 5a21239d1b..0000000000
--- a/libstdc++-v3/src/limits.cc
+++ /dev/null
@@ -1,551 +0,0 @@
-// Static data members of -*- C++ -*- numeric_limits classes
-
-// Copyright (C) 1999, 2001, 2002, 2005, 2006, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
-
-//
-// ISO C++ 14882:1998
-// 18.2.1
-//
-
-#include <limits>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-#define const _GLIBCXX_USE_CONSTEXPR
-
- const bool __numeric_limits_base::is_specialized;
- const int __numeric_limits_base::digits;
- const int __numeric_limits_base::digits10;
- const int __numeric_limits_base::max_digits10;
- const bool __numeric_limits_base::is_signed;
- const bool __numeric_limits_base::is_integer;
- const bool __numeric_limits_base::is_exact;
- const int __numeric_limits_base::radix;
- const int __numeric_limits_base::min_exponent;
- const int __numeric_limits_base::min_exponent10;
- const int __numeric_limits_base::max_exponent;
- const int __numeric_limits_base::max_exponent10;
- const bool __numeric_limits_base::has_infinity;
- const bool __numeric_limits_base::has_quiet_NaN;
- const bool __numeric_limits_base::has_signaling_NaN;
- const float_denorm_style __numeric_limits_base::has_denorm;
- const bool __numeric_limits_base::has_denorm_loss;
- const bool __numeric_limits_base::is_iec559;
- const bool __numeric_limits_base::is_bounded;
- const bool __numeric_limits_base::is_modulo;
- const bool __numeric_limits_base::traps;
- const bool __numeric_limits_base::tinyness_before;
- const float_round_style __numeric_limits_base::round_style;
-
- // bool
- const bool numeric_limits<bool>::is_specialized;
- const int numeric_limits<bool>::digits;
- const int numeric_limits<bool>::digits10;
- const int numeric_limits<bool>::max_digits10;
- const bool numeric_limits<bool>::is_signed;
- const bool numeric_limits<bool>::is_integer;
- const bool numeric_limits<bool>::is_exact;
- const int numeric_limits<bool>::radix;
- const int numeric_limits<bool>::min_exponent;
- const int numeric_limits<bool>::min_exponent10;
- const int numeric_limits<bool>::max_exponent;
- const int numeric_limits<bool>::max_exponent10;
- const bool numeric_limits<bool>::has_infinity;
- const bool numeric_limits<bool>::has_quiet_NaN;
- const bool numeric_limits<bool>::has_signaling_NaN;
- const float_denorm_style numeric_limits<bool>::has_denorm;
- const bool numeric_limits<bool>::has_denorm_loss;
- const bool numeric_limits<bool>::is_iec559;
- const bool numeric_limits<bool>::is_bounded;
- const bool numeric_limits<bool>::is_modulo;
- const bool numeric_limits<bool>::traps;
- const bool numeric_limits<bool>::tinyness_before;
- const float_round_style numeric_limits<bool>::round_style;
-
- // char
- const bool numeric_limits<char>::is_specialized;
- const int numeric_limits<char>::digits;
- const int numeric_limits<char>::digits10;
- const int numeric_limits<char>::max_digits10;
- const bool numeric_limits<char>::is_signed;
- const bool numeric_limits<char>::is_integer;
- const bool numeric_limits<char>::is_exact;
- const int numeric_limits<char>::radix;
- const int numeric_limits<char>::min_exponent;
- const int numeric_limits<char>::min_exponent10;
- const int numeric_limits<char>::max_exponent;
- const int numeric_limits<char>::max_exponent10;
- const bool numeric_limits<char>::has_infinity;
- const bool numeric_limits<char>::has_quiet_NaN;
- const bool numeric_limits<char>::has_signaling_NaN;
- const float_denorm_style numeric_limits<char>::has_denorm;
- const bool numeric_limits<char>::has_denorm_loss;
- const bool numeric_limits<char>::is_iec559;
- const bool numeric_limits<char>::is_bounded;
- const bool numeric_limits<char>::is_modulo;
- const bool numeric_limits<char>::traps;
- const bool numeric_limits<char>::tinyness_before;
- const float_round_style numeric_limits<char>::round_style;
-
- // signed char
- const bool numeric_limits<signed char>::is_specialized;
- const int numeric_limits<signed char>::digits;
- const int numeric_limits<signed char>::digits10;
- const int numeric_limits<signed char>::max_digits10;
- const bool numeric_limits<signed char>::is_signed;
- const bool numeric_limits<signed char>::is_integer;
- const bool numeric_limits<signed char>::is_exact;
- const int numeric_limits<signed char>::radix;
- const int numeric_limits<signed char>::min_exponent;
- const int numeric_limits<signed char>::min_exponent10;
- const int numeric_limits<signed char>::max_exponent;
- const int numeric_limits<signed char>::max_exponent10;
- const bool numeric_limits<signed char>::has_infinity;
- const bool numeric_limits<signed char>::has_quiet_NaN;
- const bool numeric_limits<signed char>::has_signaling_NaN;
- const float_denorm_style numeric_limits<signed char>::has_denorm;
- const bool numeric_limits<signed char>::has_denorm_loss;
- const bool numeric_limits<signed char>::is_iec559;
- const bool numeric_limits<signed char>::is_bounded;
- const bool numeric_limits<signed char>::is_modulo;
- const bool numeric_limits<signed char>::traps;
- const bool numeric_limits<signed char>::tinyness_before;
- const float_round_style numeric_limits<signed char>::round_style;
-
- // unsigned char
- const bool numeric_limits<unsigned char>::is_specialized;
- const int numeric_limits<unsigned char>::digits;
- const int numeric_limits<unsigned char>::digits10;
- const int numeric_limits<unsigned char>::max_digits10;
- const bool numeric_limits<unsigned char>::is_signed;
- const bool numeric_limits<unsigned char>::is_integer;
- const bool numeric_limits<unsigned char>::is_exact;
- const int numeric_limits<unsigned char>::radix;
- const int numeric_limits<unsigned char>::min_exponent;
- const int numeric_limits<unsigned char>::min_exponent10;
- const int numeric_limits<unsigned char>::max_exponent;
- const int numeric_limits<unsigned char>::max_exponent10;
- const bool numeric_limits<unsigned char>::has_infinity;
- const bool numeric_limits<unsigned char>::has_quiet_NaN;
- const bool numeric_limits<unsigned char>::has_signaling_NaN;
- const float_denorm_style numeric_limits<unsigned char>::has_denorm;
- const bool numeric_limits<unsigned char>::has_denorm_loss;
- const bool numeric_limits<unsigned char>::is_iec559;
- const bool numeric_limits<unsigned char>::is_bounded;
- const bool numeric_limits<unsigned char>::is_modulo;
- const bool numeric_limits<unsigned char>::traps;
- const bool numeric_limits<unsigned char>::tinyness_before;
- const float_round_style numeric_limits<unsigned char>::round_style;
-
- // wchar_t
- // This used to be problematic...
-#ifdef _GLIBCXX_USE_WCHAR_T
- const bool numeric_limits<wchar_t>::is_specialized;
- const int numeric_limits<wchar_t>::digits;
- const int numeric_limits<wchar_t>::digits10;
- const int numeric_limits<wchar_t>::max_digits10;
- const bool numeric_limits<wchar_t>::is_signed;
- const bool numeric_limits<wchar_t>::is_integer;
- const bool numeric_limits<wchar_t>::is_exact;
- const int numeric_limits<wchar_t>::radix;
- const int numeric_limits<wchar_t>::min_exponent;
- const int numeric_limits<wchar_t>::min_exponent10;
- const int numeric_limits<wchar_t>::max_exponent;
- const int numeric_limits<wchar_t>::max_exponent10;
- const bool numeric_limits<wchar_t>::has_infinity;
- const bool numeric_limits<wchar_t>::has_quiet_NaN;
- const bool numeric_limits<wchar_t>::has_signaling_NaN;
- const float_denorm_style numeric_limits<wchar_t>::has_denorm;
- const bool numeric_limits<wchar_t>::has_denorm_loss;
- const bool numeric_limits<wchar_t>::is_iec559;
- const bool numeric_limits<wchar_t>::is_bounded;
- const bool numeric_limits<wchar_t>::is_modulo;
- const bool numeric_limits<wchar_t>::traps;
- const bool numeric_limits<wchar_t>::tinyness_before;
- const float_round_style numeric_limits<wchar_t>::round_style;
-#endif // _GLIBCXX_USE_WCHAR_T
-
- // short
- const bool numeric_limits<short>::is_specialized;
- const int numeric_limits<short>::digits;
- const int numeric_limits<short>::digits10;
- const int numeric_limits<short>::max_digits10;
- const bool numeric_limits<short>::is_signed;
- const bool numeric_limits<short>::is_integer;
- const bool numeric_limits<short>::is_exact;
- const int numeric_limits<short>::radix;
- const int numeric_limits<short>::min_exponent;
- const int numeric_limits<short>::min_exponent10;
- const int numeric_limits<short>::max_exponent;
- const int numeric_limits<short>::max_exponent10;
- const bool numeric_limits<short>::has_infinity;
- const bool numeric_limits<short>::has_quiet_NaN;
- const bool numeric_limits<short>::has_signaling_NaN;
- const float_denorm_style numeric_limits<short>::has_denorm;
- const bool numeric_limits<short>::has_denorm_loss;
- const bool numeric_limits<short>::is_iec559;
- const bool numeric_limits<short>::is_bounded;
- const bool numeric_limits<short>::is_modulo;
- const bool numeric_limits<short>::traps;
- const bool numeric_limits<short>::tinyness_before;
- const float_round_style numeric_limits<short>::round_style;
-
- // unsigned short
- const bool numeric_limits<unsigned short>::is_specialized;
- const int numeric_limits<unsigned short>::digits;
- const int numeric_limits<unsigned short>::digits10;
- const int numeric_limits<unsigned short>::max_digits10;
- const bool numeric_limits<unsigned short>::is_signed;
- const bool numeric_limits<unsigned short>::is_integer;
- const bool numeric_limits<unsigned short>::is_exact;
- const int numeric_limits<unsigned short>::radix;
- const int numeric_limits<unsigned short>::min_exponent;
- const int numeric_limits<unsigned short>::min_exponent10;
- const int numeric_limits<unsigned short>::max_exponent;
- const int numeric_limits<unsigned short>::max_exponent10;
- const bool numeric_limits<unsigned short>::has_infinity;
- const bool numeric_limits<unsigned short>::has_quiet_NaN;
- const bool numeric_limits<unsigned short>::has_signaling_NaN;
- const float_denorm_style numeric_limits<unsigned short>::has_denorm;
- const bool numeric_limits<unsigned short>::has_denorm_loss;
- const bool numeric_limits<unsigned short>::is_iec559;
- const bool numeric_limits<unsigned short>::is_bounded;
- const bool numeric_limits<unsigned short>::is_modulo;
- const bool numeric_limits<unsigned short>::traps;
- const bool numeric_limits<unsigned short>::tinyness_before;
- const float_round_style numeric_limits<unsigned short>::round_style;
-
- // int
- const bool numeric_limits<int>::is_specialized;
- const int numeric_limits<int>::digits;
- const int numeric_limits<int>::digits10;
- const int numeric_limits<int>::max_digits10;
- const bool numeric_limits<int>::is_signed;
- const bool numeric_limits<int>::is_integer;
- const bool numeric_limits<int>::is_exact;
- const int numeric_limits<int>::radix;
- const int numeric_limits<int>::min_exponent;
- const int numeric_limits<int>::min_exponent10;
- const int numeric_limits<int>::max_exponent;
- const int numeric_limits<int>::max_exponent10;
- const bool numeric_limits<int>::has_infinity;
- const bool numeric_limits<int>::has_quiet_NaN;
- const bool numeric_limits<int>::has_signaling_NaN;
- const float_denorm_style numeric_limits<int>::has_denorm;
- const bool numeric_limits<int>::has_denorm_loss;
- const bool numeric_limits<int>::is_iec559;
- const bool numeric_limits<int>::is_bounded;
- const bool numeric_limits<int>::is_modulo;
- const bool numeric_limits<int>::traps;
- const bool numeric_limits<int>::tinyness_before;
- const float_round_style numeric_limits<int>::round_style;
-
- // unsigned int
- const bool numeric_limits<unsigned int>::is_specialized;
- const int numeric_limits<unsigned int>::digits;
- const int numeric_limits<unsigned int>::digits10;
- const int numeric_limits<unsigned int>::max_digits10;
- const bool numeric_limits<unsigned int>::is_signed;
- const bool numeric_limits<unsigned int>::is_integer;
- const bool numeric_limits<unsigned int>::is_exact;
- const int numeric_limits<unsigned int>::radix;
- const int numeric_limits<unsigned int>::min_exponent;
- const int numeric_limits<unsigned int>::min_exponent10;
- const int numeric_limits<unsigned int>::max_exponent;
- const int numeric_limits<unsigned int>::max_exponent10;
- const bool numeric_limits<unsigned int>::has_infinity;
- const bool numeric_limits<unsigned int>::has_quiet_NaN;
- const bool numeric_limits<unsigned int>::has_signaling_NaN;
- const float_denorm_style numeric_limits<unsigned int>::has_denorm;
- const bool numeric_limits<unsigned int>::has_denorm_loss;
- const bool numeric_limits<unsigned int>::is_iec559;
- const bool numeric_limits<unsigned int>::is_bounded;
- const bool numeric_limits<unsigned int>::is_modulo;
- const bool numeric_limits<unsigned int>::traps;
- const bool numeric_limits<unsigned int>::tinyness_before;
- const float_round_style numeric_limits<unsigned int>::round_style;
-
- // long
- const bool numeric_limits<long>::is_specialized;
- const int numeric_limits<long>::digits;
- const int numeric_limits<long>::digits10;
- const int numeric_limits<long>::max_digits10;
- const bool numeric_limits<long>::is_signed;
- const bool numeric_limits<long>::is_integer;
- const bool numeric_limits<long>::is_exact;
- const int numeric_limits<long>::radix;
- const int numeric_limits<long>::min_exponent;
- const int numeric_limits<long>::min_exponent10;
- const int numeric_limits<long>::max_exponent;
- const int numeric_limits<long>::max_exponent10;
- const bool numeric_limits<long>::has_infinity;
- const bool numeric_limits<long>::has_quiet_NaN;
- const bool numeric_limits<long>::has_signaling_NaN;
- const float_denorm_style numeric_limits<long>::has_denorm;
- const bool numeric_limits<long>::has_denorm_loss;
- const bool numeric_limits<long>::is_iec559;
- const bool numeric_limits<long>::is_bounded;
- const bool numeric_limits<long>::is_modulo;
- const bool numeric_limits<long>::traps;
- const bool numeric_limits<long>::tinyness_before;
- const float_round_style numeric_limits<long>::round_style;
-
- // unsigned long
- const bool numeric_limits<unsigned long>::is_specialized;
- const int numeric_limits<unsigned long>::digits;
- const int numeric_limits<unsigned long>::digits10;
- const int numeric_limits<unsigned long>::max_digits10;
- const bool numeric_limits<unsigned long>::is_signed;
- const bool numeric_limits<unsigned long>::is_integer;
- const bool numeric_limits<unsigned long>::is_exact;
- const int numeric_limits<unsigned long>::radix;
- const int numeric_limits<unsigned long>::min_exponent;
- const int numeric_limits<unsigned long>::min_exponent10;
- const int numeric_limits<unsigned long>::max_exponent;
- const int numeric_limits<unsigned long>::max_exponent10;
- const bool numeric_limits<unsigned long>::has_infinity;
- const bool numeric_limits<unsigned long>::has_quiet_NaN;
- const bool numeric_limits<unsigned long>::has_signaling_NaN;
- const float_denorm_style numeric_limits<unsigned long>::has_denorm;
- const bool numeric_limits<unsigned long>::has_denorm_loss;
- const bool numeric_limits<unsigned long>::is_iec559;
- const bool numeric_limits<unsigned long>::is_bounded;
- const bool numeric_limits<unsigned long>::is_modulo;
- const bool numeric_limits<unsigned long>::traps;
- const bool numeric_limits<unsigned long>::tinyness_before;
- const float_round_style numeric_limits<unsigned long>::round_style;
-
- // NOTA BENE: long long is an extension
- const bool numeric_limits<long long>::is_specialized;
- const int numeric_limits<long long>::digits;
- const int numeric_limits<long long>::digits10;
- const int numeric_limits<long long>::max_digits10;
- const bool numeric_limits<long long>::is_signed;
- const bool numeric_limits<long long>::is_integer;
- const bool numeric_limits<long long>::is_exact;
- const int numeric_limits<long long>::radix;
- const int numeric_limits<long long>::min_exponent;
- const int numeric_limits<long long>::min_exponent10;
- const int numeric_limits<long long>::max_exponent;
- const int numeric_limits<long long>::max_exponent10;
- const bool numeric_limits<long long>::has_infinity;
- const bool numeric_limits<long long>::has_quiet_NaN;
- const bool numeric_limits<long long>::has_signaling_NaN;
- const float_denorm_style numeric_limits<long long>::has_denorm;
- const bool numeric_limits<long long>::has_denorm_loss;
- const bool numeric_limits<long long>::is_iec559;
- const bool numeric_limits<long long>::is_bounded;
- const bool numeric_limits<long long>::is_modulo;
- const bool numeric_limits<long long>::traps;
- const bool numeric_limits<long long>::tinyness_before;
- const float_round_style numeric_limits<long long>::round_style;
-
- const bool numeric_limits<unsigned long long>::is_specialized;
- const int numeric_limits<unsigned long long>::digits;
- const int numeric_limits<unsigned long long>::digits10;
- const int numeric_limits<unsigned long long>::max_digits10;
- const bool numeric_limits<unsigned long long>::is_signed;
- const bool numeric_limits<unsigned long long>::is_integer;
- const bool numeric_limits<unsigned long long>::is_exact;
- const int numeric_limits<unsigned long long>::radix;
- const int numeric_limits<unsigned long long>::min_exponent;
- const int numeric_limits<unsigned long long>::min_exponent10;
- const int numeric_limits<unsigned long long>::max_exponent;
- const int numeric_limits<unsigned long long>::max_exponent10;
- const bool numeric_limits<unsigned long long>::has_infinity;
- const bool numeric_limits<unsigned long long>::has_quiet_NaN;
- const bool numeric_limits<unsigned long long>::has_signaling_NaN;
- const float_denorm_style numeric_limits<unsigned long long>::has_denorm;
- const bool numeric_limits<unsigned long long>::has_denorm_loss;
- const bool numeric_limits<unsigned long long>::is_iec559;
- const bool numeric_limits<unsigned long long>::is_bounded;
- const bool numeric_limits<unsigned long long>::is_modulo;
- const bool numeric_limits<unsigned long long>::traps;
- const bool numeric_limits<unsigned long long>::tinyness_before;
- const float_round_style numeric_limits<unsigned long long>::round_style;
-
- // float
- const bool numeric_limits<float>::is_specialized;
- const int numeric_limits<float>::digits;
- const int numeric_limits<float>::digits10;
- const int numeric_limits<float>::max_digits10;
- const bool numeric_limits<float>::is_signed;
- const bool numeric_limits<float>::is_integer;
- const bool numeric_limits<float>::is_exact;
- const int numeric_limits<float>::radix;
- const int numeric_limits<float>::min_exponent;
- const int numeric_limits<float>::min_exponent10;
- const int numeric_limits<float>::max_exponent;
- const int numeric_limits<float>::max_exponent10;
- const bool numeric_limits<float>::has_infinity;
- const bool numeric_limits<float>::has_quiet_NaN;
- const bool numeric_limits<float>::has_signaling_NaN;
- const float_denorm_style numeric_limits<float>::has_denorm;
- const bool numeric_limits<float>::has_denorm_loss;
- const bool numeric_limits<float>::is_iec559;
- const bool numeric_limits<float>::is_bounded;
- const bool numeric_limits<float>::is_modulo;
- const bool numeric_limits<float>::traps;
- const bool numeric_limits<float>::tinyness_before;
- const float_round_style numeric_limits<float>::round_style;
-
- // double
- const bool numeric_limits<double>::is_specialized;
- const int numeric_limits<double>::digits;
- const int numeric_limits<double>::digits10;
- const int numeric_limits<double>::max_digits10;
- const bool numeric_limits<double>::is_signed;
- const bool numeric_limits<double>::is_integer;
- const bool numeric_limits<double>::is_exact;
- const int numeric_limits<double>::radix;
- const int numeric_limits<double>::min_exponent;
- const int numeric_limits<double>::min_exponent10;
- const int numeric_limits<double>::max_exponent;
- const int numeric_limits<double>::max_exponent10;
- const bool numeric_limits<double>::has_infinity;
- const bool numeric_limits<double>::has_quiet_NaN;
- const bool numeric_limits<double>::has_signaling_NaN;
- const float_denorm_style numeric_limits<double>::has_denorm;
- const bool numeric_limits<double>::has_denorm_loss;
- const bool numeric_limits<double>::is_iec559;
- const bool numeric_limits<double>::is_bounded;
- const bool numeric_limits<double>::is_modulo;
- const bool numeric_limits<double>::traps;
- const bool numeric_limits<double>::tinyness_before;
- const float_round_style numeric_limits<double>::round_style;
-
- // long double
- const bool numeric_limits<long double>::is_specialized;
- const int numeric_limits<long double>::digits;
- const int numeric_limits<long double>::digits10;
- const int numeric_limits<long double>::max_digits10;
- const bool numeric_limits<long double>::is_signed;
- const bool numeric_limits<long double>::is_integer;
- const bool numeric_limits<long double>::is_exact;
- const int numeric_limits<long double>::radix;
- const int numeric_limits<long double>::min_exponent;
- const int numeric_limits<long double>::min_exponent10;
- const int numeric_limits<long double>::max_exponent;
- const int numeric_limits<long double>::max_exponent10;
- const bool numeric_limits<long double>::has_infinity;
- const bool numeric_limits<long double>::has_quiet_NaN;
- const bool numeric_limits<long double>::has_signaling_NaN;
- const float_denorm_style numeric_limits<long double>::has_denorm;
- const bool numeric_limits<long double>::has_denorm_loss;
- const bool numeric_limits<long double>::is_iec559;
- const bool numeric_limits<long double>::is_bounded;
- const bool numeric_limits<long double>::is_modulo;
- const bool numeric_limits<long double>::traps;
- const bool numeric_limits<long double>::tinyness_before;
- const float_round_style numeric_limits<long double>::round_style;
-
- // char16_t
- const bool numeric_limits<char16_t>::is_specialized;
- const int numeric_limits<char16_t>::digits;
- const int numeric_limits<char16_t>::digits10;
- const int numeric_limits<char16_t>::max_digits10;
- const bool numeric_limits<char16_t>::is_signed;
- const bool numeric_limits<char16_t>::is_integer;
- const bool numeric_limits<char16_t>::is_exact;
- const int numeric_limits<char16_t>::radix;
- const int numeric_limits<char16_t>::min_exponent;
- const int numeric_limits<char16_t>::min_exponent10;
- const int numeric_limits<char16_t>::max_exponent;
- const int numeric_limits<char16_t>::max_exponent10;
- const bool numeric_limits<char16_t>::has_infinity;
- const bool numeric_limits<char16_t>::has_quiet_NaN;
- const bool numeric_limits<char16_t>::has_signaling_NaN;
- const float_denorm_style numeric_limits<char16_t>::has_denorm;
- const bool numeric_limits<char16_t>::has_denorm_loss;
- const bool numeric_limits<char16_t>::is_iec559;
- const bool numeric_limits<char16_t>::is_bounded;
- const bool numeric_limits<char16_t>::is_modulo;
- const bool numeric_limits<char16_t>::traps;
- const bool numeric_limits<char16_t>::tinyness_before;
- const float_round_style numeric_limits<char16_t>::round_style;
-
- // char32_t
- const bool numeric_limits<char32_t>::is_specialized;
- const int numeric_limits<char32_t>::digits;
- const int numeric_limits<char32_t>::digits10;
- const int numeric_limits<char32_t>::max_digits10;
- const bool numeric_limits<char32_t>::is_signed;
- const bool numeric_limits<char32_t>::is_integer;
- const bool numeric_limits<char32_t>::is_exact;
- const int numeric_limits<char32_t>::radix;
- const int numeric_limits<char32_t>::min_exponent;
- const int numeric_limits<char32_t>::min_exponent10;
- const int numeric_limits<char32_t>::max_exponent;
- const int numeric_limits<char32_t>::max_exponent10;
- const bool numeric_limits<char32_t>::has_infinity;
- const bool numeric_limits<char32_t>::has_quiet_NaN;
- const bool numeric_limits<char32_t>::has_signaling_NaN;
- const float_denorm_style numeric_limits<char32_t>::has_denorm;
- const bool numeric_limits<char32_t>::has_denorm_loss;
- const bool numeric_limits<char32_t>::is_iec559;
- const bool numeric_limits<char32_t>::is_bounded;
- const bool numeric_limits<char32_t>::is_modulo;
- const bool numeric_limits<char32_t>::traps;
- const bool numeric_limits<char32_t>::tinyness_before;
- const float_round_style numeric_limits<char32_t>::round_style;
-
-#undef const
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-// XXX GLIBCXX_ABI Deprecated
-#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
-
-#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
- extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
- __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
-_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
-_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
-_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
-_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
-_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
-_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
-_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
-_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
-_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
-_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
-_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
-_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
-_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
-_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
-_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
-_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
-
-#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
diff --git a/libstdc++-v3/src/list.cc b/libstdc++-v3/src/list.cc
deleted file mode 100644
index 92b007f58a..0000000000
--- a/libstdc++-v3/src/list.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-// std::list utilities implementation -*- C++ -*-
-
-// Copyright (C) 2003, 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#include <list>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- namespace __detail
- {
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- void
- _List_node_base::swap(_List_node_base& __x, _List_node_base& __y) throw()
- {
- if ( __x._M_next != &__x )
- {
- if ( __y._M_next != &__y )
- {
- // Both __x and __y are not empty.
- std::swap(__x._M_next,__y._M_next);
- std::swap(__x._M_prev,__y._M_prev);
- __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
- __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
- }
- else
- {
- // __x is not empty, __y is empty.
- __y._M_next = __x._M_next;
- __y._M_prev = __x._M_prev;
- __y._M_next->_M_prev = __y._M_prev->_M_next = &__y;
- __x._M_next = __x._M_prev = &__x;
- }
- }
- else if ( __y._M_next != &__y )
- {
- // __x is empty, __y is not empty.
- __x._M_next = __y._M_next;
- __x._M_prev = __y._M_prev;
- __x._M_next->_M_prev = __x._M_prev->_M_next = &__x;
- __y._M_next = __y._M_prev = &__y;
- }
- }
-
- void
- _List_node_base::_M_transfer(_List_node_base * const __first,
- _List_node_base * const __last) throw()
- {
- if (this != __last)
- {
- // Remove [first, last) from its old position.
- __last->_M_prev->_M_next = this;
- __first->_M_prev->_M_next = __last;
- this->_M_prev->_M_next = __first;
-
- // Splice [first, last) into its new position.
- _List_node_base* const __tmp = this->_M_prev;
- this->_M_prev = __last->_M_prev;
- __last->_M_prev = __first->_M_prev;
- __first->_M_prev = __tmp;
- }
- }
-
- void
- _List_node_base::_M_reverse() throw()
- {
- _List_node_base* __tmp = this;
- do
- {
- std::swap(__tmp->_M_next, __tmp->_M_prev);
-
- // Old next node is now prev.
- __tmp = __tmp->_M_prev;
- }
- while (__tmp != this);
- }
-
- void
- _List_node_base::_M_hook(_List_node_base* const __position) throw()
- {
- this->_M_next = __position;
- this->_M_prev = __position->_M_prev;
- __position->_M_prev->_M_next = this;
- __position->_M_prev = this;
- }
-
- void
- _List_node_base::_M_unhook() throw()
- {
- _List_node_base* const __next_node = this->_M_next;
- _List_node_base* const __prev_node = this->_M_prev;
- __prev_node->_M_next = __next_node;
- __next_node->_M_prev = __prev_node;
- }
-
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace __detail
-} // namespace std
diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc
deleted file mode 100644
index 09dccf0d7d..0000000000
--- a/libstdc++-v3/src/locale.cc
+++ /dev/null
@@ -1,444 +0,0 @@
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <clocale>
-#include <cstring>
-#include <cstdlib> // For getenv
-#include <cctype>
-#include <cwctype> // For towupper, etc.
-#include <locale>
-#include <ext/concurrence.h>
-
-namespace
-{
- __gnu_cxx::__mutex&
- get_locale_cache_mutex()
- {
- static __gnu_cxx::__mutex locale_cache_mutex;
- return locale_cache_mutex;
- }
-} // anonymous namespace
-
-// XXX GLIBCXX_ABI Deprecated
-#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
-# define _GLIBCXX_LOC_ID(mangled) extern std::locale::id mangled
-_GLIBCXX_LOC_ID (_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
-_GLIBCXX_LOC_ID (_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
-_GLIBCXX_LOC_ID (_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
-_GLIBCXX_LOC_ID (_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
-# ifdef _GLIBCXX_USE_WCHAR_T
-_GLIBCXX_LOC_ID (_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
-_GLIBCXX_LOC_ID (_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
-_GLIBCXX_LOC_ID (_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
-_GLIBCXX_LOC_ID (_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
-# endif
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- // Definitions for static const data members of locale.
- const locale::category locale::none;
- const locale::category locale::ctype;
- const locale::category locale::numeric;
- const locale::category locale::collate;
- const locale::category locale::time;
- const locale::category locale::monetary;
- const locale::category locale::messages;
- const locale::category locale::all;
-
- // These are no longer exported.
- locale::_Impl* locale::_S_classic;
- locale::_Impl* locale::_S_global;
-
-#ifdef __GTHREADS
- __gthread_once_t locale::_S_once = __GTHREAD_ONCE_INIT;
-#endif
-
- locale::locale(const locale& __other) throw()
- : _M_impl(__other._M_impl)
- { _M_impl->_M_add_reference(); }
-
- // This is used to initialize global and classic locales, and
- // assumes that the _Impl objects are constructed correctly.
- // The lack of a reference increment is intentional.
- locale::locale(_Impl* __ip) throw() : _M_impl(__ip)
- { }
-
- locale::~locale() throw()
- { _M_impl->_M_remove_reference(); }
-
- bool
- locale::operator==(const locale& __rhs) const throw()
- {
- // Deal first with the common cases, fast to process: refcopies,
- // unnamed (i.e., !_M_names[0]), "simple" (!_M_names[1] => all the
- // categories same name, i.e., _M_names[0]). Otherwise fall back
- // to the general locale::name().
- bool __ret;
- if (_M_impl == __rhs._M_impl)
- __ret = true;
- else if (!_M_impl->_M_names[0] || !__rhs._M_impl->_M_names[0]
- || std::strcmp(_M_impl->_M_names[0],
- __rhs._M_impl->_M_names[0]) != 0)
- __ret = false;
- else if (!_M_impl->_M_names[1] && !__rhs._M_impl->_M_names[1])
- __ret = true;
- else
- __ret = this->name() == __rhs.name();
- return __ret;
- }
-
- const locale&
- locale::operator=(const locale& __other) throw()
- {
- __other._M_impl->_M_add_reference();
- _M_impl->_M_remove_reference();
- _M_impl = __other._M_impl;
- return *this;
- }
-
- string
- locale::name() const
- {
- string __ret;
- if (!_M_impl->_M_names[0])
- __ret = '*';
- else if (_M_impl->_M_check_same_name())
- __ret = _M_impl->_M_names[0];
- else
- {
- __ret.reserve(128);
- __ret += _S_categories[0];
- __ret += '=';
- __ret += _M_impl->_M_names[0];
- for (size_t __i = 1; __i < _S_categories_size; ++__i)
- {
- __ret += ';';
- __ret += _S_categories[__i];
- __ret += '=';
- __ret += _M_impl->_M_names[__i];
- }
- }
- return __ret;
- }
-
- locale::category
- locale::_S_normalize_category(category __cat)
- {
- int __ret = 0;
- if (__cat == none || ((__cat & all) && !(__cat & ~all)))
- __ret = __cat;
- else
- {
- // NB: May be a C-style "LC_ALL" category; convert.
- switch (__cat)
- {
- case LC_COLLATE:
- __ret = collate;
- break;
- case LC_CTYPE:
- __ret = ctype;
- break;
- case LC_MONETARY:
- __ret = monetary;
- break;
- case LC_NUMERIC:
- __ret = numeric;
- break;
- case LC_TIME:
- __ret = time;
- break;
-#ifdef _GLIBCXX_HAVE_LC_MESSAGES
- case LC_MESSAGES:
- __ret = messages;
- break;
-#endif
- case LC_ALL:
- __ret = all;
- break;
- default:
- __throw_runtime_error(__N("locale::_S_normalize_category "
- "category not found"));
- }
- }
- return __ret;
- }
-
- // locale::facet
- __c_locale locale::facet::_S_c_locale;
-
- const char locale::facet::_S_c_name[2] = "C";
-
-#ifdef __GTHREADS
- __gthread_once_t locale::facet::_S_once = __GTHREAD_ONCE_INIT;
-#endif
-
- void
- locale::facet::_S_initialize_once()
- {
- // Initialize the underlying locale model.
- _S_create_c_locale(_S_c_locale, _S_c_name);
- }
-
- __c_locale
- locale::facet::_S_get_c_locale()
- {
-#ifdef __GHTREADS
- if (__gthread_active_p())
- __gthread_once(&_S_once, _S_initialize_once);
- else
-#endif
- {
- if (!_S_c_locale)
- _S_initialize_once();
- }
- return _S_c_locale;
- }
-
- const char*
- locale::facet::_S_get_c_name() throw()
- { return _S_c_name; }
-
- locale::facet::
- ~facet() { }
-
- // locale::_Impl
- locale::_Impl::
- ~_Impl() throw()
- {
- if (_M_facets)
- for (size_t __i = 0; __i < _M_facets_size; ++__i)
- if (_M_facets[__i])
- _M_facets[__i]->_M_remove_reference();
- delete [] _M_facets;
-
- if (_M_caches)
- for (size_t __i = 0; __i < _M_facets_size; ++__i)
- if (_M_caches[__i])
- _M_caches[__i]->_M_remove_reference();
- delete [] _M_caches;
-
- if (_M_names)
- for (size_t __i = 0; __i < _S_categories_size; ++__i)
- delete [] _M_names[__i];
- delete [] _M_names;
- }
-
- // Clone existing _Impl object.
- locale::_Impl::
- _Impl(const _Impl& __imp, size_t __refs)
- : _M_refcount(__refs), _M_facets(0), _M_facets_size(__imp._M_facets_size),
- _M_caches(0), _M_names(0)
- {
- __try
- {
- _M_facets = new const facet*[_M_facets_size];
- for (size_t __i = 0; __i < _M_facets_size; ++__i)
- {
- _M_facets[__i] = __imp._M_facets[__i];
- if (_M_facets[__i])
- _M_facets[__i]->_M_add_reference();
- }
- _M_caches = new const facet*[_M_facets_size];
- for (size_t __j = 0; __j < _M_facets_size; ++__j)
- {
- _M_caches[__j] = __imp._M_caches[__j];
- if (_M_caches[__j])
- _M_caches[__j]->_M_add_reference();
- }
- _M_names = new char*[_S_categories_size];
- for (size_t __k = 0; __k < _S_categories_size; ++__k)
- _M_names[__k] = 0;
-
- // Name the categories.
- for (size_t __l = 0; (__l < _S_categories_size
- && __imp._M_names[__l]); ++__l)
- {
- const size_t __len = std::strlen(__imp._M_names[__l]) + 1;
- _M_names[__l] = new char[__len];
- std::memcpy(_M_names[__l], __imp._M_names[__l], __len);
- }
- }
- __catch(...)
- {
- this->~_Impl();
- __throw_exception_again;
- }
- }
-
- void
- locale::_Impl::
- _M_replace_category(const _Impl* __imp,
- const locale::id* const* __idpp)
- {
- for (; *__idpp; ++__idpp)
- _M_replace_facet(__imp, *__idpp);
- }
-
- void
- locale::_Impl::
- _M_replace_facet(const _Impl* __imp, const locale::id* __idp)
- {
- size_t __index = __idp->_M_id();
- if ((__index > (__imp->_M_facets_size - 1))
- || !__imp->_M_facets[__index])
- __throw_runtime_error(__N("locale::_Impl::_M_replace_facet"));
- _M_install_facet(__idp, __imp->_M_facets[__index]);
- }
-
- void
- locale::_Impl::
- _M_install_facet(const locale::id* __idp, const facet* __fp)
- {
- if (__fp)
- {
- size_t __index = __idp->_M_id();
-
- // Check size of facet vector to ensure adequate room.
- if (__index > _M_facets_size - 1)
- {
- const size_t __new_size = __index + 4;
-
- // New facet array.
- const facet** __oldf = _M_facets;
- const facet** __newf;
- __newf = new const facet*[__new_size];
- for (size_t __i = 0; __i < _M_facets_size; ++__i)
- __newf[__i] = _M_facets[__i];
- for (size_t __l = _M_facets_size; __l < __new_size; ++__l)
- __newf[__l] = 0;
-
- // New cache array.
- const facet** __oldc = _M_caches;
- const facet** __newc;
- __try
- {
- __newc = new const facet*[__new_size];
- }
- __catch(...)
- {
- delete [] __newf;
- __throw_exception_again;
- }
- for (size_t __j = 0; __j < _M_facets_size; ++__j)
- __newc[__j] = _M_caches[__j];
- for (size_t __k = _M_facets_size; __k < __new_size; ++__k)
- __newc[__k] = 0;
-
- _M_facets_size = __new_size;
- _M_facets = __newf;
- _M_caches = __newc;
- delete [] __oldf;
- delete [] __oldc;
- }
-
- __fp->_M_add_reference();
- const facet*& __fpr = _M_facets[__index];
- if (__fpr)
- {
- // Replacing an existing facet. Order matters.
- __fpr->_M_remove_reference();
- __fpr = __fp;
- }
- else
- {
- // Installing a newly created facet into an empty
- // _M_facets container, say a newly-constructed,
- // swanky-fresh _Impl.
- _M_facets[__index] = __fp;
- }
-
- // Ideally, it would be nice to only remove the caches that
- // are now incorrect. However, some of the caches depend on
- // multiple facets, and we only know about one facet
- // here. It's no great loss: the first use of the new facet
- // will create a new, correctly cached facet anyway.
- for (size_t __i = 0; __i < _M_facets_size; ++__i)
- {
- const facet* __cpr = _M_caches[__i];
- if (__cpr)
- {
- __cpr->_M_remove_reference();
- _M_caches[__i] = 0;
- }
- }
- }
- }
-
- void
- locale::_Impl::
- _M_install_cache(const facet* __cache, size_t __index)
- {
- __gnu_cxx::__scoped_lock sentry(get_locale_cache_mutex());
- if (_M_caches[__index] != 0)
- {
- // Some other thread got in first.
- delete __cache;
- }
- else
- {
- __cache->_M_add_reference();
- _M_caches[__index] = __cache;
- }
- }
-
- // locale::id
- // Definitions for static const data members of locale::id
- _Atomic_word locale::id::_S_refcount; // init'd to 0 by linker
-
- size_t
- locale::id::_M_id() const throw()
- {
- if (!_M_index)
- {
- // XXX GLIBCXX_ABI Deprecated
-#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
- locale::id *f = 0;
-# define _GLIBCXX_SYNC_ID(facet, mangled) \
- if (this == &::mangled) \
- f = &facet::id
- _GLIBCXX_SYNC_ID (num_get<char>, _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
- _GLIBCXX_SYNC_ID (num_put<char>, _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
- _GLIBCXX_SYNC_ID (money_get<char>, _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
- _GLIBCXX_SYNC_ID (money_put<char>, _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
-# ifdef _GLIBCXX_USE_WCHAR_T
- _GLIBCXX_SYNC_ID (num_get<wchar_t>, _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
- _GLIBCXX_SYNC_ID (num_put<wchar_t>, _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
- _GLIBCXX_SYNC_ID (money_get<wchar_t>, _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
- _GLIBCXX_SYNC_ID (money_put<wchar_t>, _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
-# endif
- if (f)
- _M_index = 1 + f->_M_id();
- else
-#endif
- _M_index = 1 + __gnu_cxx::__exchange_and_add_dispatch(&_S_refcount,
- 1);
- }
- return _M_index - 1;
- }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/mutex.cc b/libstdc++-v3/src/mutex.cc
deleted file mode 100644
index d6f2f03700..0000000000
--- a/libstdc++-v3/src/mutex.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-// mutex -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <mutex>
-
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-#ifndef _GLIBCXX_HAVE_TLS
-namespace
-{
- inline std::unique_lock<std::mutex>*&
- __get_once_functor_lock_ptr()
- {
- static std::unique_lock<std::mutex>* __once_functor_lock_ptr = 0;
- return __once_functor_lock_ptr;
- }
-}
-#endif
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-#ifdef _GLIBCXX_HAVE_TLS
- __thread void* __once_callable;
- __thread void (*__once_call)();
-#else
- // Explicit instantiation due to -fno-implicit-instantiation.
- template class function<void()>;
- function<void()> __once_functor;
-
- mutex&
- __get_once_mutex()
- {
- static mutex once_mutex;
- return once_mutex;
- }
-
- // code linked against ABI 3.4.12 and later uses this
- void
- __set_once_functor_lock_ptr(unique_lock<mutex>* __ptr)
- {
- __get_once_functor_lock_ptr() = __ptr;
- }
-
- // unsafe - retained for compatibility with ABI 3.4.11
- unique_lock<mutex>&
- __get_once_functor_lock()
- {
- static unique_lock<mutex> once_functor_lock(__get_once_mutex(), defer_lock);
- return once_functor_lock;
- }
-#endif
-
- extern "C"
- {
- void __once_proxy()
- {
-#ifndef _GLIBCXX_HAVE_TLS
- function<void()> __once_call = std::move(__once_functor);
- if (unique_lock<mutex>* __lock = __get_once_functor_lock_ptr())
- {
- // caller is using new ABI and provided lock ptr
- __get_once_functor_lock_ptr() = 0;
- __lock->unlock();
- }
- else
- __get_once_functor_lock().unlock(); // global lock
-#endif
- __once_call();
- }
- }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-// XXX GLIBCXX_ABI Deprecated
-// gcc-4.6.0
-// <mutex> export changes
-#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
- && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
-
-namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
-{
- std::defer_lock_t defer_lock;
- std::try_to_lock_t try_to_lock;
- std::adopt_lock_t adopt_lock;
-}
-
-#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
- asm (".symver " #cur "," #old "@@" #version);
-
-_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx10adopt_lockE, _ZSt10adopt_lock, GLIBCXX_3.4.11)
-_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx10defer_lockE, _ZSt10defer_lock, GLIBCXX_3.4.11)
-_GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx11try_to_lockE, _ZSt11try_to_lock, GLIBCXX_3.4.11)
-
-
-#endif
-
-#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/regex.cc b/libstdc++-v3/src/regex.cc
deleted file mode 100644
index 8a47da341a..0000000000
--- a/libstdc++-v3/src/regex.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// regex -*- C++ -*-
-
-// Copyright (C) 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <regex>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- regex_error::regex_error(regex_constants::error_type __ecode)
- : std::runtime_error("regex_error"), _M_code(__ecode)
- { }
-
- regex_error::~regex_error() throw() { }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
diff --git a/libstdc++-v3/src/hashtable-aux.cc b/libstdc++-v3/src/shared/hashtable-aux.cc
index 23bb00ec58..23bb00ec58 100644
--- a/libstdc++-v3/src/hashtable-aux.cc
+++ b/libstdc++-v3/src/shared/hashtable-aux.cc
diff --git a/libstdc++-v3/src/shared_ptr.cc b/libstdc++-v3/src/shared_ptr.cc
deleted file mode 100644
index 670b7ca7ff..0000000000
--- a/libstdc++-v3/src/shared_ptr.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Support for pointer abstractions -*- C++ -*-
-
-// Copyright (C) 2011
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#include <memory>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- bad_weak_ptr::~bad_weak_ptr() throw() = default;
-
- char const*
- bad_weak_ptr::what() const throw()
- { return "std::bad_weak_ptr"; }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/stdexcept.cc b/libstdc++-v3/src/stdexcept.cc
deleted file mode 100644
index b693da23f4..0000000000
--- a/libstdc++-v3/src/stdexcept.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// Methods for Exception Support for -*- C++ -*-
-
-// Copyright (C) 1997, 1999, 2001, 2002, 2005, 2009, 2011
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-//
-// ISO C++ 14882: 19.1 Exception classes
-//
-
-#include <string>
-#include <stdexcept>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- logic_error::logic_error(const string& __arg)
- : exception(), _M_msg(__arg) { }
-
- logic_error::~logic_error() throw() { }
-
- const char*
- logic_error::what() const throw()
- { return _M_msg.c_str(); }
-
- domain_error::domain_error(const string& __arg)
- : logic_error(__arg) { }
-
- domain_error::~domain_error() throw() { }
-
- invalid_argument::invalid_argument(const string& __arg)
- : logic_error(__arg) { }
-
- invalid_argument::~invalid_argument() throw() { }
-
- length_error::length_error(const string& __arg)
- : logic_error(__arg) { }
-
- length_error::~length_error() throw() { }
-
- out_of_range::out_of_range(const string& __arg)
- : logic_error(__arg) { }
-
- out_of_range::~out_of_range() throw() { }
-
- runtime_error::runtime_error(const string& __arg)
- : exception(), _M_msg(__arg) { }
-
- runtime_error::~runtime_error() throw() { }
-
- const char*
- runtime_error::what() const throw()
- { return _M_msg.c_str(); }
-
- range_error::range_error(const string& __arg)
- : runtime_error(__arg) { }
-
- range_error::~range_error() throw() { }
-
- overflow_error::overflow_error(const string& __arg)
- : runtime_error(__arg) { }
-
- overflow_error::~overflow_error() throw() { }
-
- underflow_error::underflow_error(const string& __arg)
- : runtime_error(__arg) { }
-
- underflow_error::~underflow_error() throw() { }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/system_error.cc b/libstdc++-v3/src/system_error.cc
deleted file mode 100644
index 5d9c6f5e26..0000000000
--- a/libstdc++-v3/src/system_error.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// <system_error> implementation file
-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-
-#include <cstring>
-#include <system_error>
-#include <bits/functexcept.h>
-#include <limits>
-
-namespace
-{
- using std::string;
-
- struct generic_error_category : public std::error_category
- {
- generic_error_category() {}
-
- virtual const char*
- name() const
- { return "generic"; }
-
- virtual string
- message(int i) const
- {
- // XXX locale issues: how does one get or set loc.
- // _GLIBCXX_HAVE_STRERROR_L, strerror_l(i, cloc)
- return string(strerror(i));
- }
- };
-
- struct system_error_category : public std::error_category
- {
- system_error_category() {}
-
- virtual const char*
- name() const
- { return "system"; }
-
- virtual string
- message(int i) const
- {
- // XXX locale issues: how does one get or set loc.
- // _GLIBCXX_HAVE_STRERROR_L, strerror_l(i, cloc)
- return string(strerror(i));
- }
- };
-
- const generic_error_category generic_category_instance;
- const system_error_category system_category_instance;
-}
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- error_category::error_category() = default;
-
- error_category::~error_category() = default;
-
- const error_category&
- system_category() throw() { return system_category_instance; }
-
- const error_category&
- generic_category() throw() { return generic_category_instance; }
-
- system_error::~system_error() throw() = default;
-
- error_condition
- error_category::default_error_condition(int __i) const
- { return error_condition(__i, *this); }
-
- bool
- error_category::equivalent(int __i, const error_condition& __cond) const
- { return default_error_condition(__i) == __cond; }
-
- bool
- error_category::equivalent(const error_code& __code, int __i) const
- { return *this == __code.category() && __code.value() == __i; }
-
- error_condition
- error_code::default_error_condition() const
- { return category().default_error_condition(value()); }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/thread.cc b/libstdc++-v3/src/thread.cc
deleted file mode 100644
index c164e8a016..0000000000
--- a/libstdc++-v3/src/thread.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-// thread -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-
-#include <thread>
-#include <cerrno>
-
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
- namespace
- {
- extern "C" void*
- execute_native_thread_routine(void* __p)
- {
- thread::_Impl_base* __t = static_cast<thread::_Impl_base*>(__p);
- thread::__shared_base_type __local;
- __local.swap(__t->_M_this_ptr);
-
- __try
- {
- __t->_M_run();
- }
- __catch(...)
- {
- std::terminate();
- }
-
- return 0;
- }
- }
-
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- void
- thread::join()
- {
- int __e = EINVAL;
-
- if (_M_id != id())
- __e = __gthread_join(_M_id._M_thread, 0);
-
- if (__e)
- __throw_system_error(__e);
-
- _M_id = id();
- }
-
- void
- thread::detach()
- {
- int __e = EINVAL;
-
- if (_M_id != id())
- __e = __gthread_detach(_M_id._M_thread);
-
- if (__e)
- __throw_system_error(__e);
-
- _M_id = id();
- }
-
- void
- thread::_M_start_thread(__shared_base_type __b)
- {
- if (!__gthread_active_p())
- __throw_system_error(int(errc::operation_not_permitted));
-
- __b->_M_this_ptr = __b;
- int __e = __gthread_create(&_M_id._M_thread,
- &execute_native_thread_routine, __b.get());
- if (__e)
- {
- __b->_M_this_ptr.reset();
- __throw_system_error(__e);
- }
- }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
-
-#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/tree.cc b/libstdc++-v3/src/tree.cc
deleted file mode 100644
index 0a7f6f9e48..0000000000
--- a/libstdc++-v3/src/tree.cc
+++ /dev/null
@@ -1,454 +0,0 @@
-// RB tree utilities implementation -*- C++ -*-
-
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/*
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- */
-
-#include <bits/stl_tree.h>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- _Rb_tree_node_base*
- _Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
- {
- if (__x->_M_right != 0)
- {
- __x = __x->_M_right;
- while (__x->_M_left != 0)
- __x = __x->_M_left;
- }
- else
- {
- _Rb_tree_node_base* __y = __x->_M_parent;
- while (__x == __y->_M_right)
- {
- __x = __y;
- __y = __y->_M_parent;
- }
- if (__x->_M_right != __y)
- __x = __y;
- }
- return __x;
- }
-
- const _Rb_tree_node_base*
- _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ()
- {
- return _Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x));
- }
-
- _Rb_tree_node_base*
- _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ()
- {
- if (__x->_M_color == _S_red
- && __x->_M_parent->_M_parent == __x)
- __x = __x->_M_right;
- else if (__x->_M_left != 0)
- {
- _Rb_tree_node_base* __y = __x->_M_left;
- while (__y->_M_right != 0)
- __y = __y->_M_right;
- __x = __y;
- }
- else
- {
- _Rb_tree_node_base* __y = __x->_M_parent;
- while (__x == __y->_M_left)
- {
- __x = __y;
- __y = __y->_M_parent;
- }
- __x = __y;
- }
- return __x;
- }
-
- const _Rb_tree_node_base*
- _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ()
- {
- return _Rb_tree_decrement(const_cast<_Rb_tree_node_base*>(__x));
- }
-
- static void
- local_Rb_tree_rotate_left(_Rb_tree_node_base* const __x,
- _Rb_tree_node_base*& __root)
- {
- _Rb_tree_node_base* const __y = __x->_M_right;
-
- __x->_M_right = __y->_M_left;
- if (__y->_M_left !=0)
- __y->_M_left->_M_parent = __x;
- __y->_M_parent = __x->_M_parent;
-
- if (__x == __root)
- __root = __y;
- else if (__x == __x->_M_parent->_M_left)
- __x->_M_parent->_M_left = __y;
- else
- __x->_M_parent->_M_right = __y;
- __y->_M_left = __x;
- __x->_M_parent = __y;
- }
-
- /* Static keyword was missing on _Rb_tree_rotate_left.
- Export the symbol for backward compatibility until
- next ABI change. */
- void
- _Rb_tree_rotate_left(_Rb_tree_node_base* const __x,
- _Rb_tree_node_base*& __root)
- {
- local_Rb_tree_rotate_left (__x, __root);
- }
-
- static void
- local_Rb_tree_rotate_right(_Rb_tree_node_base* const __x,
- _Rb_tree_node_base*& __root)
- {
- _Rb_tree_node_base* const __y = __x->_M_left;
-
- __x->_M_left = __y->_M_right;
- if (__y->_M_right != 0)
- __y->_M_right->_M_parent = __x;
- __y->_M_parent = __x->_M_parent;
-
- if (__x == __root)
- __root = __y;
- else if (__x == __x->_M_parent->_M_right)
- __x->_M_parent->_M_right = __y;
- else
- __x->_M_parent->_M_left = __y;
- __y->_M_right = __x;
- __x->_M_parent = __y;
- }
-
- /* Static keyword was missing on _Rb_tree_rotate_right
- Export the symbol for backward compatibility until
- next ABI change. */
- void
- _Rb_tree_rotate_right(_Rb_tree_node_base* const __x,
- _Rb_tree_node_base*& __root)
- {
- local_Rb_tree_rotate_right (__x, __root);
- }
-
- void
- _Rb_tree_insert_and_rebalance(const bool __insert_left,
- _Rb_tree_node_base* __x,
- _Rb_tree_node_base* __p,
- _Rb_tree_node_base& __header) throw ()
- {
- _Rb_tree_node_base *& __root = __header._M_parent;
-
- // Initialize fields in new node to insert.
- __x->_M_parent = __p;
- __x->_M_left = 0;
- __x->_M_right = 0;
- __x->_M_color = _S_red;
-
- // Insert.
- // Make new node child of parent and maintain root, leftmost and
- // rightmost nodes.
- // N.B. First node is always inserted left.
- if (__insert_left)
- {
- __p->_M_left = __x; // also makes leftmost = __x when __p == &__header
-
- if (__p == &__header)
- {
- __header._M_parent = __x;
- __header._M_right = __x;
- }
- else if (__p == __header._M_left)
- __header._M_left = __x; // maintain leftmost pointing to min node
- }
- else
- {
- __p->_M_right = __x;
-
- if (__p == __header._M_right)
- __header._M_right = __x; // maintain rightmost pointing to max node
- }
- // Rebalance.
- while (__x != __root
- && __x->_M_parent->_M_color == _S_red)
- {
- _Rb_tree_node_base* const __xpp = __x->_M_parent->_M_parent;
-
- if (__x->_M_parent == __xpp->_M_left)
- {
- _Rb_tree_node_base* const __y = __xpp->_M_right;
- if (__y && __y->_M_color == _S_red)
- {
- __x->_M_parent->_M_color = _S_black;
- __y->_M_color = _S_black;
- __xpp->_M_color = _S_red;
- __x = __xpp;
- }
- else
- {
- if (__x == __x->_M_parent->_M_right)
- {
- __x = __x->_M_parent;
- local_Rb_tree_rotate_left(__x, __root);
- }
- __x->_M_parent->_M_color = _S_black;
- __xpp->_M_color = _S_red;
- local_Rb_tree_rotate_right(__xpp, __root);
- }
- }
- else
- {
- _Rb_tree_node_base* const __y = __xpp->_M_left;
- if (__y && __y->_M_color == _S_red)
- {
- __x->_M_parent->_M_color = _S_black;
- __y->_M_color = _S_black;
- __xpp->_M_color = _S_red;
- __x = __xpp;
- }
- else
- {
- if (__x == __x->_M_parent->_M_left)
- {
- __x = __x->_M_parent;
- local_Rb_tree_rotate_right(__x, __root);
- }
- __x->_M_parent->_M_color = _S_black;
- __xpp->_M_color = _S_red;
- local_Rb_tree_rotate_left(__xpp, __root);
- }
- }
- }
- __root->_M_color = _S_black;
- }
-
- _Rb_tree_node_base*
- _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
- _Rb_tree_node_base& __header) throw ()
- {
- _Rb_tree_node_base *& __root = __header._M_parent;
- _Rb_tree_node_base *& __leftmost = __header._M_left;
- _Rb_tree_node_base *& __rightmost = __header._M_right;
- _Rb_tree_node_base* __y = __z;
- _Rb_tree_node_base* __x = 0;
- _Rb_tree_node_base* __x_parent = 0;
-
- if (__y->_M_left == 0) // __z has at most one non-null child. y == z.
- __x = __y->_M_right; // __x might be null.
- else
- if (__y->_M_right == 0) // __z has exactly one non-null child. y == z.
- __x = __y->_M_left; // __x is not null.
- else
- {
- // __z has two non-null children. Set __y to
- __y = __y->_M_right; // __z's successor. __x might be null.
- while (__y->_M_left != 0)
- __y = __y->_M_left;
- __x = __y->_M_right;
- }
- if (__y != __z)
- {
- // relink y in place of z. y is z's successor
- __z->_M_left->_M_parent = __y;
- __y->_M_left = __z->_M_left;
- if (__y != __z->_M_right)
- {
- __x_parent = __y->_M_parent;
- if (__x) __x->_M_parent = __y->_M_parent;
- __y->_M_parent->_M_left = __x; // __y must be a child of _M_left
- __y->_M_right = __z->_M_right;
- __z->_M_right->_M_parent = __y;
- }
- else
- __x_parent = __y;
- if (__root == __z)
- __root = __y;
- else if (__z->_M_parent->_M_left == __z)
- __z->_M_parent->_M_left = __y;
- else
- __z->_M_parent->_M_right = __y;
- __y->_M_parent = __z->_M_parent;
- std::swap(__y->_M_color, __z->_M_color);
- __y = __z;
- // __y now points to node to be actually deleted
- }
- else
- { // __y == __z
- __x_parent = __y->_M_parent;
- if (__x)
- __x->_M_parent = __y->_M_parent;
- if (__root == __z)
- __root = __x;
- else
- if (__z->_M_parent->_M_left == __z)
- __z->_M_parent->_M_left = __x;
- else
- __z->_M_parent->_M_right = __x;
- if (__leftmost == __z)
- {
- if (__z->_M_right == 0) // __z->_M_left must be null also
- __leftmost = __z->_M_parent;
- // makes __leftmost == _M_header if __z == __root
- else
- __leftmost = _Rb_tree_node_base::_S_minimum(__x);
- }
- if (__rightmost == __z)
- {
- if (__z->_M_left == 0) // __z->_M_right must be null also
- __rightmost = __z->_M_parent;
- // makes __rightmost == _M_header if __z == __root
- else // __x == __z->_M_left
- __rightmost = _Rb_tree_node_base::_S_maximum(__x);
- }
- }
- if (__y->_M_color != _S_red)
- {
- while (__x != __root && (__x == 0 || __x->_M_color == _S_black))
- if (__x == __x_parent->_M_left)
- {
- _Rb_tree_node_base* __w = __x_parent->_M_right;
- if (__w->_M_color == _S_red)
- {
- __w->_M_color = _S_black;
- __x_parent->_M_color = _S_red;
- local_Rb_tree_rotate_left(__x_parent, __root);
- __w = __x_parent->_M_right;
- }
- if ((__w->_M_left == 0 ||
- __w->_M_left->_M_color == _S_black) &&
- (__w->_M_right == 0 ||
- __w->_M_right->_M_color == _S_black))
- {
- __w->_M_color = _S_red;
- __x = __x_parent;
- __x_parent = __x_parent->_M_parent;
- }
- else
- {
- if (__w->_M_right == 0
- || __w->_M_right->_M_color == _S_black)
- {
- __w->_M_left->_M_color = _S_black;
- __w->_M_color = _S_red;
- local_Rb_tree_rotate_right(__w, __root);
- __w = __x_parent->_M_right;
- }
- __w->_M_color = __x_parent->_M_color;
- __x_parent->_M_color = _S_black;
- if (__w->_M_right)
- __w->_M_right->_M_color = _S_black;
- local_Rb_tree_rotate_left(__x_parent, __root);
- break;
- }
- }
- else
- {
- // same as above, with _M_right <-> _M_left.
- _Rb_tree_node_base* __w = __x_parent->_M_left;
- if (__w->_M_color == _S_red)
- {
- __w->_M_color = _S_black;
- __x_parent->_M_color = _S_red;
- local_Rb_tree_rotate_right(__x_parent, __root);
- __w = __x_parent->_M_left;
- }
- if ((__w->_M_right == 0 ||
- __w->_M_right->_M_color == _S_black) &&
- (__w->_M_left == 0 ||
- __w->_M_left->_M_color == _S_black))
- {
- __w->_M_color = _S_red;
- __x = __x_parent;
- __x_parent = __x_parent->_M_parent;
- }
- else
- {
- if (__w->_M_left == 0 || __w->_M_left->_M_color == _S_black)
- {
- __w->_M_right->_M_color = _S_black;
- __w->_M_color = _S_red;
- local_Rb_tree_rotate_left(__w, __root);
- __w = __x_parent->_M_left;
- }
- __w->_M_color = __x_parent->_M_color;
- __x_parent->_M_color = _S_black;
- if (__w->_M_left)
- __w->_M_left->_M_color = _S_black;
- local_Rb_tree_rotate_right(__x_parent, __root);
- break;
- }
- }
- if (__x) __x->_M_color = _S_black;
- }
- return __y;
- }
-
- unsigned int
- _Rb_tree_black_count(const _Rb_tree_node_base* __node,
- const _Rb_tree_node_base* __root) throw ()
- {
- if (__node == 0)
- return 0;
- unsigned int __sum = 0;
- do
- {
- if (__node->_M_color == _S_black)
- ++__sum;
- if (__node == __root)
- break;
- __node = __node->_M_parent;
- }
- while (1);
- return __sum;
- }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/src/valarray.cc b/libstdc++-v3/src/valarray.cc
deleted file mode 100644
index 4d21ab171b..0000000000
--- a/libstdc++-v3/src/valarray.cc
+++ /dev/null
@@ -1,109 +0,0 @@
-// Explicit instantiation file.
-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-//
-// ISO C++ 14882:
-//
-
-#include <valarray>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- // Some explicit instantiations.
- template void
- __valarray_fill(size_t* __restrict__, size_t, const size_t&);
-
- template void
- __valarray_copy(const size_t* __restrict__, size_t, size_t* __restrict__);
-
- template valarray<size_t>::valarray(size_t);
- template valarray<size_t>::valarray(const valarray<size_t>&);
- template valarray<size_t>::~valarray();
- template size_t valarray<size_t>::size() const;
- template size_t& valarray<size_t>::operator[](size_t);
-
- inline size_t
- __valarray_product(const valarray<size_t>& __a)
- {
- typedef const size_t* __restrict__ _Tp;
- const size_t __n = __a.size();
- // XXX: This ugly cast is necessary because
- // valarray::operator[]() const return a VALUE!
- // Try to get the committee to correct that gross error.
- valarray<size_t>& __t = const_cast<valarray<size_t>&>(__a);
- return __valarray_product(&__t[0], &__t[0] + __n);
- }
-
- // Map a gslice, described by its multidimensional LENGTHS
- // and corresponding STRIDES, to a linear array of INDEXES
- // for the purpose of indexing a flat, one-dimensional array
- // representation of a gslice_array.
- void
- __gslice_to_index(size_t __o, const valarray<size_t>& __l,
- const valarray<size_t>& __s, valarray<size_t>& __i)
- {
- // There are as many dimensions as there are strides.
- const size_t __n = __l.size();
-
- // Holds current multi-index as we go through the gslice for the
- // purpose of computing its linear-image.
- valarray<size_t> __t(__l);
-
- // Note that this should match the product of all numbers appearing
- // in __l which describes the multidimensional sizes of the
- // generalized slice.
- const size_t __z = __i.size();
-
- for (size_t __j = 0; __j < __z; ++__j)
- {
- // Compute the linear-index image of (t_0, ... t_{n-1}).
- __i[__j] = __o;
-
- --__t[__n - 1];
- __o += __s[__n - 1];
-
- // Process the next multi-index. The loop ought to be
- // backward since we're making a lexicographical visit.
- for (size_t __k2 = __n - 1; __k2 && !__t[__k2]; --__k2)
- {
- __o -= __s[__k2] * __l[__k2];
- __t[__k2] = __l[__k2];
-
- --__t[__k2 - 1];
- __o += __s[__k2 - 1];
- }
- }
- }
-
- gslice::_Indexer::_Indexer(size_t __o, const valarray<size_t>& __l,
- const valarray<size_t>& __s)
- : _M_count(1), _M_start(__o), _M_size(__l), _M_stride(__s),
- _M_index(__l.size() == 0 ? 0 : __valarray_product(__l))
- { __gslice_to_index(__o, __l, __s, _M_index); }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc b/libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc
new file mode 100644
index 0000000000..070666848b
--- /dev/null
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc
@@ -0,0 +1,22 @@
+// { dg-do compile { target *-*-linux* } }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/49745
+#include <iostream>
+int truncate = 0;
diff --git a/libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc b/libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
new file mode 100644
index 0000000000..7feac92cce
--- /dev/null
+++ b/libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
@@ -0,0 +1,33 @@
+// { dg-do link }
+// { dg-require-static-libstdcxx }
+// { dg-require-sharedlib "" }
+// { dg-require-effective-target fpic }
+// { dg-options "-shared -fPIC -static-libgcc -static-libstdc++" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>
+
+// libstdc++/28811 --with-pic vs. static linking
+#include <iostream>
+#include <locale>
+
+int main()
+{
+ std::locale c __attribute__((unused)) = std::locale::classic();
+ std::cout << "i am old-skool\n";
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/18_support/50594.cc b/libstdc++-v3/testsuite/18_support/50594.cc
new file mode 100644
index 0000000000..047f4a732b
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/50594.cc
@@ -0,0 +1,72 @@
+// { dg-options "-fwhole-program" }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <new>
+#include <string>
+#include <cstdlib>
+#include <testsuite_hooks.h>
+
+bool user_new_called;
+bool user_delete_called;
+
+void* operator new(std::size_t n)
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+ throw(std::bad_alloc)
+#endif
+{
+ user_new_called = true;
+
+ void* p = std::malloc(n);
+
+ if (!p)
+ throw std::bad_alloc();
+
+ return p;
+}
+
+void operator delete(void* p)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ noexcept
+#else
+ throw()
+#endif
+{
+ user_delete_called = true;
+
+ std::free(p);
+}
+
+// libstdc++/50594
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ {
+ std::string s = "Hello World.";
+ }
+
+ VERIFY( user_new_called );
+ VERIFY( user_delete_called );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
index 704f77e695..b417ea68e1 100644
--- a/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
+++ b/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
@@ -150,11 +150,14 @@ void test06()
may_destruct = false;
- try {
- test06_helper();
- } catch(...) {
- may_destruct = true;
- }
+ try
+ {
+ test06_helper();
+ }
+ catch(...)
+ {
+ may_destruct = true;
+ }
may_destruct = false;
}
@@ -167,11 +170,14 @@ void test99()
may_destruct = false;
- try {
- throw destructing();
- } catch(...) {
- gep = current_exception();
- }
+ try
+ {
+ throw destructing();
+ }
+ catch(...)
+ {
+ gep = current_exception();
+ }
}
int main()
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc
new file mode 100644
index 0000000000..a72d65faf7
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc
@@ -0,0 +1,24 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++98" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <cstdalign>
+
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
+
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
index 146b9656f3..f8361c40cf 100644
--- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <cstdbool>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
index afd65a36ad..7dbc10ef20 100644
--- a/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <cstdint>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
index f4bf96bb3e..ba5a0d4909 100644
--- a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
+++ b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/51438.cc b/libstdc++-v3/testsuite/18_support/nested_exception/51438.cc
new file mode 100644
index 0000000000..f4a81ff7bf
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/nested_exception/51438.cc
@@ -0,0 +1,33 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <exception>
+#include <stdexcept>
+
+// libstdc++/51438
+void test()
+{
+ try {
+ throw 2;
+ } catch(int) {
+ std::throw_with_nested(std::runtime_error("test"));
+ }
+}
diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc b/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc
index ec8d172c40..f76cbdf824 100644
--- a/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc
+++ b/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,8 +23,8 @@
struct derived : std::nested_exception { };
-struct base { virtual ~base(); };
-inline base::~base() = default;
+struct base { virtual ~base() noexcept; };
+inline base::~base() noexcept = default;
struct derived2 : base, std::nested_exception { };
diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc b/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc
index c846d0944f..f4d85777c2 100644
--- a/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc
+++ b/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,8 +23,8 @@
struct derived : std::nested_exception { };
-struct not_derived { virtual ~not_derived(); };
-inline not_derived::~not_derived() = default;
+struct not_derived { virtual ~not_derived() noexcept; };
+inline not_derived::~not_derived() noexcept = default;
void test01()
{
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
new file mode 100644
index 0000000000..d4dff3a14a
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <limits>
+
+// libstdc++/40856
+#ifdef _GLIBCXX_USE_INT128
+static_assert(std::numeric_limits<__int128>::is_specialized == true, "");
+static_assert(std::numeric_limits<unsigned __int128>::is_specialized == true,
+ "");
+#endif
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
index ffe5a4ba0d..05e4e173d1 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
@@ -2,7 +2,7 @@
// 2010-02-17 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -95,6 +95,11 @@ int main()
do_test<unsigned long>();
do_test<long long>();
do_test<unsigned long long>();
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ do_test<__int128>();
+ do_test<unsigned __int128>();
+#endif
do_test<float>();
do_test<double>();
do_test<long double>();
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
index 34b603e16b..0b410b55fe 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
@@ -72,6 +72,12 @@ void test01()
do_test<long long>();
do_test<unsigned long long>();
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ do_test<__int128>();
+ do_test<unsigned __int128>();
+#endif
+
do_test<float>();
do_test<double>();
do_test<long double>();
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
index fdce19c36c..d4858244ee 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
@@ -3,7 +3,7 @@
// 2010-02-25 Ed Smith-Rowland
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -47,6 +47,12 @@ test01()
VERIFY( std::numeric_limits<char16_t>::max_digits10 == 0 );
VERIFY( std::numeric_limits<char32_t>::max_digits10 == 0 );
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ VERIFY( std::numeric_limits<__int128>::max_digits10 == 0 );
+ VERIFY( std::numeric_limits<unsigned __int128>::max_digits10 == 0 );
+#endif
+
const int f_max_digits10 = (2 + std::numeric_limits<float>::digits
* 643 / 2136);
VERIFY( std::numeric_limits<float>::max_digits10 == f_max_digits10 );
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
index f1848f218c..f7ed2216e7 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -65,6 +65,6 @@ int main()
__gnu_test::constexpr_member_functions test;
__gnu_cxx::typelist::apply_generator(test,
__gnu_test::limits_tl(),
- __gnu_test::integral_types::type());
+ __gnu_test::integral_types_gnu::type());
return 0;
}
diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
index 9d5c2e3338..3edb766def 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,7 +26,7 @@ class my_error_category_impl
: public std::error_category
{
public:
- const char* name() const { return ""; }
+ const char* name() const noexcept { return ""; }
std::string message(int) const { return ""; }
} my_error_category_instance;
diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc
index 880a93655e..9755ba1964 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,7 +26,7 @@ class my_error_category_impl
: public std::error_category
{
public:
- const char* name() const { return ""; }
+ const char* name() const noexcept { return ""; }
std::string message(int) const { return ""; }
} my_error_category_instance;
diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc
index 7931f17406..f41f7469c2 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,7 +26,7 @@ class my_error_category_impl
: public std::error_category
{
public:
- const char* name() const { return ""; }
+ const char* name() const noexcept { return ""; }
std::string message(int) const { return ""; }
} my_error_category_instance;
diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc
index 0178a91c41..ddd488ea0c 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,7 +26,7 @@ class my_error_category_impl
: public std::error_category
{
public:
- const char* name() const { return ""; }
+ const char* name() const noexcept { return ""; }
std::string message(int) const { return ""; }
} my_error_category_instance;
diff --git a/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc b/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
index 9698cf0319..38e27dc824 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
@@ -19,7 +19,7 @@
#include <system_error>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc
new file mode 100644
index 0000000000..e5a57a2c0a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc
@@ -0,0 +1,90 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <cstddef>
+#include <testsuite_hooks.h>
+
+struct X { };
+
+template<typename T>
+struct hintable_allocator
+{
+ typedef T value_type;
+ struct const_void_pointer { };
+ typedef unsigned size_type;
+
+ hintable_allocator() : called(false) { }
+
+ bool called;
+
+ // this is the overload that should get called:
+ T* allocate(size_type n, const_void_pointer) { called = true; return 0; }
+
+ // none of these should get called:
+ T* allocate(size_type n);
+ T* allocate(size_type n, void*);
+ T* allocate(size_type n, const void*);
+ T* allocate(size_type n, const_void_pointer) const;
+};
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<hintable_allocator<X>> traits_type;
+ traits_type::allocator_type a;
+ traits_type::const_void_pointer v;
+ X* p __attribute__((unused)) = traits_type::allocate(a, 1, v);
+ VERIFY( a.called );
+}
+
+template<typename T>
+struct unhintable_allocator
+{
+ typedef T value_type;
+ typedef unsigned size_type;
+
+ unhintable_allocator() : called(false) { }
+
+ bool called;
+
+ // this is the overload that should get called:
+ T* allocate(size_type n) { called = true; return 0; }
+
+ // this should not get called:
+ T* allocate(size_type n, void*);
+};
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<unhintable_allocator<X>> traits_type;
+ traits_type::allocator_type a;
+ traits_type::const_void_pointer v;
+ X* p __attribute__((unused)) = traits_type::allocate(a, 1, v);
+ VERIFY( a.called );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/construct.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/construct.cc
new file mode 100644
index 0000000000..a133fb0d63
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/construct.cc
@@ -0,0 +1,79 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <cstddef>
+#include <testsuite_hooks.h>
+
+struct X
+{
+ static int counter;
+ X() { }
+ X(const X&) { ++counter; }
+ explicit X(int) { ++counter; }
+ X(int, int) { ++counter; }
+ X(int, int, int) { ++counter; }
+};
+
+int X::counter = 0;
+
+template<typename T>
+struct fake_allocator
+{
+ typedef T value_type;
+
+ fake_allocator() : counter() {}
+
+ int counter;
+
+ T* allocate(std::size_t n) { return (T*)new char[n*sizeof(T)]; }
+ void deallocate(T* p, std::size_t) { delete[] (char*)p; }
+
+ // don't actually construct anything when these are called
+ void construct(T* p) { ++counter; }
+ void construct(T* p, int, int) { ++counter; }
+};
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<fake_allocator<X>> traits_type;
+ traits_type::allocator_type a;
+ X* p = traits_type::allocate(a, 1);
+ traits_type::construct(a, p);
+ VERIFY( a.counter == 1 );
+ traits_type::construct(a, p, 1);
+ VERIFY( a.counter == 1 );
+ VERIFY( X::counter == 1 );
+ traits_type::destroy(a, p);
+ traits_type::construct(a, p, 1, 1);
+ VERIFY( a.counter == 2 );
+ VERIFY( X::counter == 1 );
+ traits_type::construct(a, p, 1, 1, 1);
+ VERIFY( a.counter == 2 );
+ VERIFY( X::counter == 2 );
+ traits_type::destroy(a, p);
+ traits_type::deallocate(a, p, 1);
+}
+
+int main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/destroy.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/destroy.cc
new file mode 100644
index 0000000000..a74efb215c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/destroy.cc
@@ -0,0 +1,84 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <new>
+#include <testsuite_hooks.h>
+
+struct X
+{
+ static int counter;
+ ~X() { ++counter; }
+};
+
+int X::counter = 0;
+
+template<typename T>
+struct allocator_with_destroy
+{
+ typedef T value_type;
+
+ allocator_with_destroy() : called() { }
+
+ void destroy(T* p) { called = true; }
+
+ int called;
+};
+
+template<typename T>
+struct allocator_without_destroy
+{
+ typedef T value_type;
+
+ allocator_without_destroy() : called() { }
+
+ int called;
+};
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<allocator_with_destroy<X>> traits_type;
+ traits_type::allocator_type a;
+ X* p = 0;
+ traits_type::destroy(a, p);
+ VERIFY( a.called );
+ VERIFY( X::counter == 0 );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<allocator_without_destroy<X>> traits_type;
+ traits_type::allocator_type a;
+ char buf[sizeof(X)];
+ X* p = ::new (static_cast<void*>(buf)) X();
+ traits_type::destroy(a, p);
+ VERIFY( !a.called );
+ VERIFY( X::counter == 1 );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/max_size.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/max_size.cc
new file mode 100644
index 0000000000..61403ce7c6
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/max_size.cc
@@ -0,0 +1,67 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <limits>
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+struct X { };
+
+template<typename T>
+struct maxsize_allocator
+{
+ typedef T value_type;
+ typedef unsigned size_type;
+
+ size_type max_size() const { return 100; }
+};
+
+template<typename T>
+struct unsized_allocator
+{
+ typedef T value_type;
+};
+
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<maxsize_allocator<X>> traits_type;
+ traits_type::allocator_type a;
+ auto size = a.max_size();
+ VERIFY( traits_type::max_size(a) == size );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::allocator_traits<unsized_allocator<X>> traits_type;
+ traits_type::allocator_type a;
+ auto size = std::numeric_limits<traits_type::size_type>::max();
+ VERIFY( traits_type::max_size(a) == size );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/select.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/select.cc
new file mode 100644
index 0000000000..eac924b05f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/select.cc
@@ -0,0 +1,68 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct X { };
+
+template<typename T>
+struct alloc1
+{
+ typedef T value_type;
+
+ int id;
+};
+
+template<typename T>
+struct alloc2
+{
+ typedef T value_type;
+
+ int id;
+
+ alloc2 select_on_container_copy_construction() const
+ { return alloc2{id+1}; }
+};
+
+
+void test01()
+{
+ typedef std::allocator_traits<alloc1<X>> traits_type;
+ traits_type::allocator_type a{1};
+ const traits_type::allocator_type& a2
+ = traits_type::select_on_container_copy_construction(a);
+ VERIFY( a2.id == a.id );
+}
+
+void test02()
+{
+ typedef std::allocator_traits<alloc1<X>> traits_type;
+ traits_type::allocator_type a{1};
+ const traits_type::allocator_type& a2
+ = traits_type::select_on_container_copy_construction(a);
+ VERIFY( a2.id != a.id );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..f734696679
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing memory with NO OTHER INCLUDES.
+
+#include <memory>
+
+typedef short test_type;
+
+template<typename T>
+ struct minimal_allocator
+ {
+ typedef T value_type;
+ minimal_allocator();
+ template <typename U>
+ minimal_allocator(const minimal_allocator<U>&);
+ T* allocate(std::size_t);
+ void deallocate(T*, std::size_t);
+ };
+
+namespace std
+{
+ template struct allocator_traits<std::allocator<test_type>>;
+ template struct allocator_traits<minimal_allocator<test_type>>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs.cc
new file mode 100644
index 0000000000..89f57f4479
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing memory with NO OTHER INCLUDES.
+
+#include <memory>
+
+// { dg-do compile }
+
+template<typename T>
+void test01()
+{
+ // Check for required typedefs
+ typedef std::allocator_traits<T> test_type;
+ typedef typename test_type::allocator_type allocator_type;
+ typedef typename test_type::value_type value_type;
+ typedef typename test_type::pointer pointer;
+ typedef typename test_type::const_pointer const_pointer;
+ typedef typename test_type::void_pointer void_pointer;
+ typedef typename test_type::const_void_pointer const_void_pointer;
+ typedef typename test_type::difference_type difference_type;
+ typedef typename test_type::size_type size_type;
+ typedef typename test_type::propagate_on_container_copy_assignment
+ propagate_on_container_copy_assignment;
+ typedef typename test_type::propagate_on_container_move_assignment
+ propagate_on_container_move_assignment;
+ typedef typename test_type::propagate_on_container_swap
+ propagate_on_container_swap;
+}
+
+struct S { };
+
+int main()
+{
+ test01<std::allocator<int>>();
+ test01<std::allocator<S>>();
+}
diff --git a/libstdc++-v3/testsuite/20_util/bind/48698.cc b/libstdc++-v3/testsuite/20_util/bind/48698.cc
new file mode 100644
index 0000000000..87e5f23863
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/bind/48698.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.11 Function template bind
+
+#include <functional>
+
+int f(int i);
+
+// Don't want placeholders to interfere with a possibly-versioned namespace.
+void g()
+{
+ std::bind(f, std::placeholders::_6);
+}
diff --git a/libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc b/libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc
new file mode 100644
index 0000000000..6affa1168e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc
@@ -0,0 +1,65 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <functional>
+
+struct X
+{
+ int operator()() const { return 0; }
+ int operator()() volatile { return 1; }
+ int operator()() const volatile { return 2; }
+ void operator()() { };
+};
+
+void test01()
+{
+ static_assert( std::is_placeholder<decltype(std::placeholders::_1)>::value,
+ "decltype(_1) is a placeholder type" );
+
+ const auto b0 = std::bind(X());
+ static_assert( std::is_bind_expression<decltype(b0)>::value,
+ "const-qualified wrapper is a bind expression" );
+
+ volatile auto b1 = std::bind(X());
+ static_assert( std::is_bind_expression<decltype(b1)>::value,
+ "volatile-qualified wrapper is a bind expression" );
+
+ const volatile auto b2 = std::bind(X());
+ static_assert( std::is_bind_expression<decltype(b2)>::value,
+ "const-volatile-qualified wrapper is a bind expression" );
+
+ const auto b3 = std::bind<int>(X());
+ static_assert( std::is_bind_expression<decltype(b3)>::value,
+ "const-qualified wrapper is a bind expression" );
+
+ volatile auto b4 = std::bind<int>(X());
+ static_assert( std::is_bind_expression<decltype(b4)>::value,
+ "volatile-qualified wrapper is a bind expression" );
+
+ const volatile auto b5 = std::bind<int>(X());
+ static_assert( std::is_bind_expression<decltype(b5)>::value,
+ "const-volatile-qualified wrapper is a bind expression" );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
index 060bf8715d..2bc87b1615 100644
--- a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// 20.7.11 Function template bind
+// 20.8.9 Function template bind
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
@@ -29,10 +29,12 @@ int inc(int& i) { return ++i; }
void test01()
{
const int dummy = 0;
- std::bind(&inc, _1)(0); // { dg-error ""}
- std::bind(&inc, std::ref(dummy))(); // { dg-error ""}
- std::bind(&inc, dummy)(); // { dg-error ""}
- std::bind(&inc, 0)(); // { dg-error ""}
+ std::bind(&inc, _1)(0); // { dg-error "no match" }
+ // { dg-error "rvalue|const" "" { target *-*-* } 1206 }
+ // { dg-error "rvalue|const" "" { target *-*-* } 1219 }
+ // { dg-error "rvalue|const" "" { target *-*-* } 1233 }
+ // { dg-error "rvalue|const" "" { target *-*-* } 1247 }
+ std::bind(&inc, std::ref(dummy))(); // { dg-error "no match" }
}
struct Inc
@@ -46,8 +48,8 @@ struct Inc
void test02()
{
const int dummy = 0;
- std::bind(Inc(), _1)(dummy); // { dg-error ""}
- std::bind(&Inc::f, Inc(), std::ref(dummy))(); // { dg-error ""}
+ std::bind(Inc(), _1)(dummy); // { dg-error "no match" }
+ std::bind(&Inc::f, Inc(), std::ref(dummy))(); // { dg-error "no match" }
}
int main()
@@ -55,5 +57,3 @@ int main()
test01();
test02();
}
-
-// { dg-excess-errors "" }
diff --git a/libstdc++-v3/testsuite/20_util/bind/socket.cc b/libstdc++-v3/testsuite/20_util/bind/socket.cc
new file mode 100644
index 0000000000..c5019215c0
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/bind/socket.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.8.9 Function template bind
+
+// Verify that calls to bind() in BSD sockets API do not match std::bind()
+// (this is a GNU extension)
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <functional>
+
+struct my_sockaddr { };
+typedef long my_socklen_t;
+int bind(int, const my_sockaddr*, my_socklen_t);
+
+using namespace std;
+
+int test01()
+{
+ int fd = 1;
+ my_sockaddr sa; // N.B. non-const
+ size_t len = sizeof(sa); // N.B. size_t not my_socklen_t
+ return bind(fd, &sa, len);
+}
+
diff --git a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
index 9113c031be..298e93e23d 100644
--- a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
@@ -19,11 +19,11 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 1134 }
+// { dg-error "static assertion failed" "" { target *-*-* } 1776 }
#include <utility>
void test01()
{
- std::declval<int>(); // { dg-error "instantiated from here" }
+ std::declval<int>(); // { dg-error "required from here" }
}
diff --git a/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr.cc b/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr.cc
new file mode 100644
index 0000000000..5192c26de1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <testsuite_common_types.h>
+
+int main()
+{
+ constexpr std::chrono::nanoseconds d1 { };
+ constexpr auto d2(+d1);
+ constexpr auto d3(-d2);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/duration/arithmetic/dr2020.cc b/libstdc++-v3/testsuite/20_util/duration/arithmetic/dr2020.cc
new file mode 100644
index 0000000000..3f28f37f4c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/duration/arithmetic/dr2020.cc
@@ -0,0 +1,66 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.11.5 Class template duration [time.duration]
+
+#include <chrono>
+#include <testsuite_hooks.h>
+
+// DR 2020
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std::chrono;
+
+ constexpr duration<int> d0(12);
+ constexpr duration<int> d1(3);
+ constexpr int i = 5;
+
+ constexpr auto d2 = d0 + d1;
+ VERIFY( d2.count() == 15 );
+
+ constexpr auto d3 = d0 - d1;
+ VERIFY( d3.count() == 9 );
+
+ constexpr auto d4 = d0 * i;
+ VERIFY( d4.count() == 60 );
+
+ constexpr auto d5 = i * d0;
+ VERIFY( d5.count() == 60 );
+
+ constexpr auto d6 = d0 % i;
+ VERIFY( d6.count() == 2 );
+
+ constexpr auto j = d0 % d1;
+ VERIFY( j.count() == 0 );
+
+ constexpr auto d7 = d0 / i;
+ VERIFY( d7.count() == 2 );
+
+ constexpr auto k = d0 / d1;
+ VERIFY( k == 4 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc b/libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc
index 56b4e4f413..b6dd874588 100644
--- a/libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc
@@ -2,7 +2,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// Copyright (C) 2008, 2009 Free Software Foundation
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,7 +26,7 @@
void
test01()
{
- std::chrono::duration<int> d1(1.0); // { dg-error "no matching" }
+ std::chrono::duration<int> d1(1.0); // { dg-error "no matching|no type" }
}
void
@@ -35,7 +35,10 @@ test02()
using namespace std::chrono;
duration<int, std::micro> d2(8);
- duration<int, std::milli> d2_copy(d2); // { dg-error "no matching" }
+ duration<int, std::milli> d2_copy(d2); // { dg-error "no matching|no type" }
}
-// { dg-excess-errors "candidates are" }
+// { dg-prune-output "include" }
+
+// Discard a bogus warning showing up with -Wall.
+// { dg-prune-output "suggest parentheses around" }
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
index 5965f03b1b..1e9c69ebf8 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
@@ -32,4 +32,4 @@ void test01()
}
// { dg-error "rep cannot be a duration" "" { target *-*-* } 226 }
-// { dg-error "instantiated from here" "" { target *-*-* } 31 }
+// { dg-error "required from here" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
index d84ab9e8cf..a3ab76972b 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
@@ -29,9 +29,8 @@ void test01()
typedef int rep_type;
typedef int period_type;
typedef std::chrono::duration<rep_type, period_type> test_type;
- test_type d;
+ test_type d; // { dg-error "required from here" }
}
// { dg-error "must be a specialization of ratio" "" { target *-*-* } 227 }
-// { dg-error "instantiated from here" "" { target *-*-* } 32 }
-// { dg-excess-errors "In instantiation of" }
+// { dg-prune-output "not a member" }
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
index 7c73bf996d..940af7f805 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
@@ -34,4 +34,4 @@ void test01()
}
// { dg-error "period must be positive" "" { target *-*-* } 229 }
-// { dg-error "instantiated from here" "" { target *-*-* } 33 }
+// { dg-error "required from here" "" { target *-*-* } 33 }
diff --git a/libstdc++-v3/testsuite/20_util/forward/1_neg.cc b/libstdc++-v3/testsuite/20_util/forward/1_neg.cc
index 6c007bee23..dbcaa66a8c 100644
--- a/libstdc++-v3/testsuite/20_util/forward/1_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/forward/1_neg.cc
@@ -38,7 +38,8 @@ struct A
void g()
{
- std::shared_ptr<A> sp1 = factory<A>(2, 1.414); // { dg-error "instantiated from here" }
+ std::shared_ptr<A> sp1 = factory<A>(2, 1.414); // { dg-error "required from here" }
}
-// { dg-excess-errors "" }
+// Discard a bogus warning showing up with -Wall.
+// { dg-prune-output "control reaches end of" }
diff --git a/libstdc++-v3/testsuite/20_util/forward/c_neg.cc b/libstdc++-v3/testsuite/20_util/forward/c_neg.cc
index 50bfbf0285..01128245d7 100644
--- a/libstdc++-v3/testsuite/20_util/forward/c_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/forward/c_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 69 }
+// { dg-error "static assertion failed" "" { target *-*-* } 90 }
#include <list>
diff --git a/libstdc++-v3/testsuite/20_util/forward/f_neg.cc b/libstdc++-v3/testsuite/20_util/forward/f_neg.cc
index 418a469dfd..9e5b78a04d 100644
--- a/libstdc++-v3/testsuite/20_util/forward/f_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/forward/f_neg.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 69 }
+// { dg-error "static assertion failed" "" { target *-*-* } 90 }
#include <utility>
diff --git a/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
index 28c0e12d16..d5e268e88f 100644
--- a/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
@@ -29,4 +29,3 @@ void test01()
f1 == f2; // { dg-error "no match" }
f1 != f2; // { dg-error "no match" }
}
-// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/55320.cc b/libstdc++-v3/testsuite/20_util/function/cons/55320.cc
new file mode 100644
index 0000000000..611e8acbbf
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/cons/55320.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/55320
+
+// { dg-options "-std=gnu++0x" }
+
+#include <functional>
+#include <testsuite_hooks.h>
+
+struct X
+{
+ X() { ++count; }
+ X(const X&) { throw 1; }
+ ~X() { --count; }
+ void operator()() { }
+ static int count;
+};
+
+int X::count = 0;
+
+int main()
+{
+ try
+ {
+ std::function<void()> f = X();
+ }
+ catch (int)
+ {
+ VERIFY( X::count == 0 );
+ }
+}
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc b/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
new file mode 100644
index 0000000000..25b6fb84be
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+#include <functional>
+
+struct F
+{
+ void operator()() { }
+ void operator&() const { }
+};
+
+void test01()
+{
+ F f;
+ std::function<void()> f1 = f;
+ std::function<void()> f2 = std::ref(f);
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc
new file mode 100644
index 0000000000..cd7d0864f3
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc
@@ -0,0 +1,44 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2012-2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <functional>
+
+namespace n {
+ struct X { int i; };
+ void mem_fn(int X::*);
+}
+
+using n::X;
+
+X x{};
+int X::* p = &X::i;
+
+int test01()
+{
+ auto ref = std::ref(p);
+ return ref(x);
+}
+
+int test02()
+{
+ std::function<int(X)> fun(p);
+ return fun(x);
+}
+
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc
deleted file mode 100644
index 0a4a6224b8..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// { dg-do compile }
-// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// NB: This file is for testing type_traits with NO OTHER INCLUDES.
-
-#include <type_traits>
-
-namespace std
-{
- typedef short test_type;
- template struct has_nothrow_copy_assign<test_type>;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc
deleted file mode 100644
index 3781d1f9be..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
-//
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-//
-// NB: This file is for testing type_traits with NO OTHER INCLUDES.
-
-#include <type_traits>
-
-// { dg-do compile }
-
-void test01()
-{
- // Check for required typedefs
- typedef std::has_nothrow_copy_assign<int> test_type;
- typedef test_type::value_type value_type;
- typedef test_type::type type;
- typedef test_type::type::value_type type_value_type;
- typedef test_type::type::type type_type;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc
deleted file mode 100644
index 0201c9cb91..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
-//
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <type_traits>
-#include <testsuite_hooks.h>
-#include <testsuite_tr1.h>
-
-void test01()
-{
- bool test __attribute__((unused)) = true;
- using std::has_nothrow_copy_assign;
- using namespace __gnu_test;
-
- VERIFY( (test_property<has_nothrow_copy_assign, int>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, float>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, EnumType>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, int*>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, int(*)(int)>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, int (ClassType::*)>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign,
- int (ClassType::*) (int)>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, int[2]>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, float[][3]>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, EnumType[2][3][4]>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, int*[3]>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign, int(*[][2])(int)>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign,
- int (ClassType::*[2][3])>(true)) );
- VERIFY( (test_property<has_nothrow_copy_assign,
- int (ClassType::*[][2][3]) (int)>(true)) );
-
- // Negative tests.
- VERIFY( (test_property<has_nothrow_copy_assign, void>(false)) );
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc
deleted file mode 100644
index 7c84451509..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// { dg-do compile }
-// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// NB: This file is for testing type_traits with NO OTHER INCLUDES.
-
-#include <type_traits>
-
-namespace std
-{
- typedef short test_type;
- template struct has_nothrow_copy_constructor<test_type>;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc
deleted file mode 100644
index 5c40837aa6..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
-//
-// Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-//
-// NB: This file is for testing type_traits with NO OTHER INCLUDES.
-
-#include <type_traits>
-
-// { dg-do compile }
-
-void test01()
-{
- // Check for required typedefs
- typedef std::has_nothrow_copy_constructor<int> test_type;
- typedef test_type::value_type value_type;
- typedef test_type::type type;
- typedef test_type::type::value_type type_value_type;
- typedef test_type::type::type type_type;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc
deleted file mode 100644
index 963c7bd57a..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
-//
-// Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <type_traits>
-#include <testsuite_hooks.h>
-#include <testsuite_tr1.h>
-
-void test01()
-{
- bool test __attribute__((unused)) = true;
- using std::has_nothrow_copy_constructor;
- using namespace __gnu_test;
-
- // Positive tests.
- VERIFY( (test_category<has_nothrow_copy_constructor, int>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, float>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, EnumType>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int*>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int(*)(int)>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int (ClassType::*)>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int (ClassType::*) (int)>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int[2]>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, float[][3]>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, EnumType[2][3][4]>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int*[3]>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int(*[][2])(int)>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor, int (ClassType::*[2][3])>(true)) );
- VERIFY( (test_category<has_nothrow_copy_constructor,
- int (ClassType::*[][2][3]) (int)>(true)) );
-
- // Negative tests.
- VERIFY( (test_category<has_nothrow_copy_constructor, void>(false)) );
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc
deleted file mode 100644
index dec9b965e8..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// { dg-do compile }
-// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// NB: This file is for testing type_traits with NO OTHER INCLUDES.
-
-#include <type_traits>
-
-namespace std
-{
- typedef short test_type;
- template struct has_nothrow_default_constructor<test_type>;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc
deleted file mode 100644
index 709fff331f..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
-//
-// Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-//
-// NB: This file is for testing type_traits with NO OTHER INCLUDES.
-
-#include <type_traits>
-
-// { dg-do compile }
-
-void test01()
-{
- // Check for required typedefs
- typedef std::has_nothrow_default_constructor<int> test_type;
- typedef test_type::value_type value_type;
- typedef test_type::type type;
- typedef test_type::type::value_type type_value_type;
- typedef test_type::type::type type_type;
-}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc
deleted file mode 100644
index 01548211c4..0000000000
--- a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// 4.5.3 Type properties
-
-#include <type_traits>
-#include <testsuite_hooks.h>
-#include <testsuite_tr1.h>
-
-void test01()
-{
- bool test __attribute__((unused)) = true;
- using std::has_nothrow_default_constructor;
- using namespace __gnu_test;
-
- // Positive tests.
- VERIFY( (test_category<has_nothrow_default_constructor, int>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, float>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, EnumType>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, int*>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, int(*)(int)>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, int (ClassType::*)>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor,
- int (ClassType::*) (int)>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, int[2]>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, float[][3]>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, EnumType[2][3][4]>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, int*[3]>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, int(*[][2])(int)>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor,
- int (ClassType::*[2][3])>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor,
- int (ClassType::*[][2][3]) (int)>(true)) );
- VERIFY( (test_category<has_nothrow_default_constructor, ClassType>(true)) );
-
- // Negative tests.
- VERIFY( (test_category<has_nothrow_default_constructor, void>(false)) );
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc b/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
index 4fd554e350..e698114091 100644
--- a/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <type_traits>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/20_util/is_assignable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_assignable/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..f4c0e2a643
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_assignable/requirements/explicit_instantiation.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_assignable<test_type, test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_assignable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_assignable/requirements/typedefs.cc
new file mode 100644
index 0000000000..d73c0c9a5f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_assignable/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_assignable<int, int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_assignable/value.cc b/libstdc++-v3/testsuite/20_util/is_assignable/value.cc
new file mode 100644
index 0000000000..547f732bcc
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_assignable/value.cc
@@ -0,0 +1,675 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <initializer_list>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test::assign;
+
+static_assert(std::is_assignable<int&, int>::value, "Error");
+static_assert(std::is_assignable<int&, const int>::value, "Error");
+static_assert(std::is_assignable<int&, int&>::value, "Error");
+static_assert(std::is_assignable<int&, const int&>::value, "Error");
+
+static_assert(!std::is_assignable<int, int>::value, "Error");
+static_assert(!std::is_assignable<int, const int>::value, "Error");
+static_assert(!std::is_assignable<int, int&>::value, "Error");
+static_assert(!std::is_assignable<int, const int&>::value, "Error");
+
+static_assert(!std::is_assignable<const int, int>::value, "Error");
+static_assert(!std::is_assignable<const int, const int>::value, "Error");
+static_assert(!std::is_assignable<const int, int&>::value, "Error");
+static_assert(!std::is_assignable<const int, const int&>::value, "Error");
+
+static_assert(!std::is_assignable<const int&, int>::value, "Error");
+static_assert(!std::is_assignable<const int&, const int>::value, "Error");
+static_assert(!std::is_assignable<const int&, int&>::value, "Error");
+static_assert(!std::is_assignable<const int&, const int&>::value, "Error");
+
+static_assert(std::is_assignable<Empty&, Empty>::value, "Error");
+static_assert(std::is_assignable<Empty&, const Empty>::value, "Error");
+static_assert(std::is_assignable<Empty&, Empty&>::value, "Error");
+static_assert(std::is_assignable<Empty&, const Empty&>::value, "Error");
+static_assert(std::is_assignable<Empty, Empty>::value, "Error");
+static_assert(std::is_assignable<Empty, const Empty>::value, "Error");
+static_assert(std::is_assignable<Empty, Empty&>::value, "Error");
+static_assert(std::is_assignable<Empty, const Empty&>::value, "Error");
+
+static_assert(std::is_assignable<B&, B>::value, "Error");
+static_assert(std::is_assignable<B&, const B>::value, "Error");
+static_assert(std::is_assignable<B&, B&>::value, "Error");
+static_assert(std::is_assignable<B&, const B&>::value, "Error");
+static_assert(std::is_assignable<B, B>::value, "Error");
+static_assert(std::is_assignable<B, const B>::value, "Error");
+static_assert(std::is_assignable<B, B&>::value, "Error");
+static_assert(std::is_assignable<B, const B&>::value, "Error");
+
+static_assert(std::is_assignable<bool&, bool>::value, "Error");
+static_assert(std::is_assignable<bool&, const bool>::value, "Error");
+static_assert(std::is_assignable<bool&, bool&>::value, "Error");
+static_assert(std::is_assignable<bool&, const bool&>::value, "Error");
+
+// bool is a fundamental type that does not allow assignment to an rvalue:
+static_assert(!std::is_assignable<bool, bool>::value, "Error");
+static_assert(!std::is_assignable<bool, const bool>::value, "Error");
+static_assert(!std::is_assignable<bool, bool&>::value, "Error");
+static_assert(!std::is_assignable<bool, const bool&>::value, "Error");
+
+static_assert(std::is_assignable<std::nullptr_t&,
+std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<std::nullptr_t&, const
+std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<std::nullptr_t&,
+std::nullptr_t&>::value, "Error");
+static_assert(std::is_assignable<std::nullptr_t&, const
+std::nullptr_t&>::value, "Error");
+
+// std::nullptr_t is a fundamental type that does not allow
+// assignment to an rvalue:
+static_assert(!std::is_assignable<std::nullptr_t,
+std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t, const
+std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t,
+std::nullptr_t&>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t, const
+std::nullptr_t&>::value, "Error");
+
+static_assert(std::is_assignable<E&, E>::value, "Error");
+static_assert(std::is_assignable<E&, const E>::value, "Error");
+static_assert(std::is_assignable<E&, E&>::value, "Error");
+static_assert(std::is_assignable<E&, const E&>::value, "Error");
+
+static_assert(std::is_assignable<int&, E>::value, "Error");
+static_assert(std::is_assignable<int&, const E>::value, "Error");
+static_assert(std::is_assignable<int&, E&>::value, "Error");
+static_assert(std::is_assignable<int&, const E&>::value, "Error");
+
+static_assert(!std::is_assignable<E&, int>::value, "Error");
+static_assert(!std::is_assignable<E&, const int>::value, "Error");
+static_assert(!std::is_assignable<E&, int&>::value, "Error");
+static_assert(!std::is_assignable<E&, const int&>::value, "Error");
+
+static_assert(!std::is_assignable<E&, E2>::value, "Error");
+static_assert(!std::is_assignable<E&, const E2>::value, "Error");
+static_assert(!std::is_assignable<E&, E2&>::value, "Error");
+static_assert(!std::is_assignable<E&, const E2&>::value, "Error");
+
+// E is not a class type and thus does not allow assignment to an rvalue:
+static_assert(!std::is_assignable<E, E>::value, "Error");
+static_assert(!std::is_assignable<E, const E>::value, "Error");
+static_assert(!std::is_assignable<E, E&>::value, "Error");
+static_assert(!std::is_assignable<E, const E&>::value, "Error");
+
+static_assert(std::is_assignable<SE&, SE>::value, "Error");
+static_assert(std::is_assignable<SE&, const SE>::value, "Error");
+static_assert(std::is_assignable<SE&, SE&>::value, "Error");
+static_assert(std::is_assignable<SE&, const SE&>::value, "Error");
+
+static_assert(!std::is_assignable<int&, SE>::value, "Error");
+static_assert(!std::is_assignable<int&, const SE>::value, "Error");
+static_assert(!std::is_assignable<int&, SE&>::value, "Error");
+static_assert(!std::is_assignable<int&, const SE&>::value, "Error");
+
+static_assert(!std::is_assignable<SE&, int>::value, "Error");
+static_assert(!std::is_assignable<SE&, const int>::value, "Error");
+static_assert(!std::is_assignable<SE&, int&>::value, "Error");
+static_assert(!std::is_assignable<SE&, const int&>::value, "Error");
+
+// SE is not a class type and thus does not allow assignment to an rvalue:
+static_assert(!std::is_assignable<SE, SE>::value, "Error");
+static_assert(!std::is_assignable<SE, const SE>::value, "Error");
+static_assert(!std::is_assignable<SE, SE&>::value, "Error");
+static_assert(!std::is_assignable<SE, const SE&>::value, "Error");
+
+static_assert(std::is_assignable<AnyAssign&, int>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, E>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, SE>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, Empty>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, U>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, int&>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, std::nullptr_t&>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, E&>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, SE&>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, Empty&>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, U&>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, AnyAssign>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&,
+std::initializer_list<int>>::value, "Error");
+
+static_assert(std::is_assignable<AnyAssign&, int[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&,
+std::nullptr_t[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, E[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, SE[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, int(&)[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&,
+std::nullptr_t(&)[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, E(&)[1]>::value, "Error");
+static_assert(std::is_assignable<AnyAssign&, SE(&)[1]>::value, "Error");
+
+static_assert(std::is_assignable<int&, E>::value, "Error");
+static_assert(!std::is_assignable<int&, SE>::value, "Error");
+static_assert(std::is_assignable<bool&, E>::value, "Error");
+static_assert(!std::is_assignable<bool&, SE>::value, "Error");
+static_assert(std::is_assignable<bool&, void*>::value, "Error");
+static_assert(std::is_assignable<bool&, int B::*>::value, "Error");
+static_assert(std::is_assignable<bool&, void*>::value, "Error");
+static_assert(std::is_assignable<bool&, std::nullptr_t>::value, "Error");
+
+static_assert(std::is_assignable<std::nullptr_t&,
+std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<void*&, std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<int*&, std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<int B::*&, std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t&, bool>::value, "Error");
+static_assert(!std::is_assignable<void*&, bool>::value, "Error");
+static_assert(!std::is_assignable<E&, bool>::value, "Error");
+static_assert(!std::is_assignable<SE&, bool>::value, "Error");
+
+static_assert(std::is_assignable<std::initializer_list<int>&,
+std::initializer_list<int>>::value, "Error");
+static_assert(std::is_assignable<std::initializer_list<int>&,
+std::initializer_list<int>&&>::value, "Error");
+static_assert(std::is_assignable<std::initializer_list<int>&, const
+std::initializer_list<int>&&>::value, "Error");
+static_assert(std::is_assignable<std::initializer_list<int>&,
+std::initializer_list<int>&>::value, "Error");
+static_assert(std::is_assignable<std::initializer_list<int>&, const
+std::initializer_list<int>&>::value, "Error");
+static_assert(!std::is_assignable<const std::initializer_list<int>&,
+std::initializer_list<int>>::value, "Error");
+
+static_assert(!std::is_assignable<const AnyAssign&, int>::value, "Error");
+static_assert(!std::is_assignable<AnyAssign&, void>::value, "Error");
+
+static_assert(!std::is_assignable<void, int>::value, "Error");
+static_assert(!std::is_assignable<const void, int>::value, "Error");
+static_assert(!std::is_assignable<int, void>::value, "Error");
+static_assert(!std::is_assignable<int, const void>::value, "Error");
+static_assert(!std::is_assignable<const int, void>::value, "Error");
+static_assert(!std::is_assignable<const int, const void>::value, "Error");
+static_assert(!std::is_assignable<int&, void>::value, "Error");
+static_assert(!std::is_assignable<int&, const void>::value, "Error");
+static_assert(!std::is_assignable<const int&, void>::value, "Error");
+static_assert(!std::is_assignable<const int&, const void>::value, "Error");
+static_assert(!std::is_assignable<void, void>::value, "Error");
+static_assert(!std::is_assignable<const void, void>::value, "Error");
+static_assert(!std::is_assignable<const void, const void>::value, "Error");
+
+static_assert(!std::is_assignable<int[1], int[1]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[1], int[1]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[1], int(&)[1]>::value, "Error");
+static_assert(!std::is_assignable<int[2], int[1]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[2], int[1]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[2], int(&)[1]>::value, "Error");
+static_assert(!std::is_assignable<int[1], void>::value, "Error");
+static_assert(!std::is_assignable<int(&)[1], void>::value, "Error");
+static_assert(!std::is_assignable<void, int[1]>::value, "Error");
+static_assert(!std::is_assignable<void, int(&)[1]>::value, "Error");
+
+static_assert(!std::is_assignable<int[], int[]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[], int[]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[], int(&)[]>::value, "Error");
+static_assert(!std::is_assignable<int[1], int[]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[1], int[]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[1], int(&)[]>::value, "Error");
+static_assert(!std::is_assignable<int[], int[1]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[], int[1]>::value, "Error");
+static_assert(!std::is_assignable<int(&)[], int(&)[1]>::value, "Error");
+static_assert(!std::is_assignable<int[], void>::value, "Error");
+static_assert(!std::is_assignable<int(&)[], void>::value, "Error");
+static_assert(!std::is_assignable<void, int[]>::value, "Error");
+static_assert(!std::is_assignable<void, int(&)[]>::value, "Error");
+
+static_assert(std::is_assignable<DelCopyAssign&,
+DelCopyAssign>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&, const
+DelCopyAssign>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&,
+DelCopyAssign&>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&, const
+DelCopyAssign&>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&, void>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&, void()>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&, void(&)()>::value, "Error");
+static_assert(!std::is_assignable<DelCopyAssign&, int>::value, "Error");
+
+static_assert(std::is_assignable<DelAnyAssign&,
+DelAnyAssign&&>::value, "Error");
+static_assert(std::is_assignable<DelAnyAssign&, const
+DelAnyAssign&>::value, "Error");
+static_assert(std::is_assignable<DelAnyAssign,
+DelAnyAssign&&>::value, "Error");
+static_assert(std::is_assignable<DelAnyAssign, const
+DelAnyAssign&>::value, "Error");
+
+static_assert(!std::is_assignable<const DelAnyAssign&,
+DelAnyAssign&&>::value, "Error");
+static_assert(!std::is_assignable<const DelAnyAssign&, const
+DelAnyAssign&>::value, "Error");
+static_assert(!std::is_assignable<const DelAnyAssign,
+DelAnyAssign&&>::value, "Error");
+static_assert(!std::is_assignable<const DelAnyAssign, const
+DelAnyAssign&>::value, "Error");
+
+static_assert(!std::is_assignable<DelAnyAssign&, int>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, const int&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, void>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, void()>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, void()
+const>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, void(&)()>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, void(&&)()>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&,
+std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&,
+std::nullptr_t&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&,
+std::initializer_list<int>>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&,
+std::initializer_list<int>&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, bool>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, bool&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, E>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, E&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, SE>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, SE&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, Empty>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, Empty&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, B>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, B&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, U>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, U&>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, void*>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int*>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, B*>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, D*>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int B::*>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int D::*>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int[]>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int[1]>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int(&)[]>::value, "Error");
+static_assert(!std::is_assignable<DelAnyAssign&, int(&)[1]>::value, "Error");
+
+static_assert(!std::is_assignable<void(), void>::value, "Error");
+static_assert(!std::is_assignable<void, void()>::value, "Error");
+static_assert(!std::is_assignable<void(), void()>::value, "Error");
+
+static_assert(!std::is_assignable<void(&)(), void>::value, "Error");
+static_assert(!std::is_assignable<void, void(&)()>::value, "Error");
+static_assert(!std::is_assignable<void(&)(), void(&)()>::value, "Error");
+static_assert(!std::is_assignable<void(&)(), void()>::value, "Error");
+static_assert(!std::is_assignable<void(), void(&)()>::value, "Error");
+
+static_assert(std::is_assignable<int&, ImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int&, ExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int, ImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int, ExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int, ImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int, ExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int&,
+ImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int&,
+ExplicitTo<int>>::value, "Error");
+
+static_assert(std::is_assignable<DelImplicitTo<int>&,
+DelImplicitTo<int>>::value, "Error");
+static_assert(std::is_assignable<DelImplicitTo<int>,
+DelImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int&, DelImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int, DelImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int&,
+DelImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int,
+DelImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int&, DelExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<int, DelExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int&,
+DelExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<const int,
+DelExplicitTo<int>>::value, "Error");
+
+static_assert(std::is_assignable<B&, B>::value, "Error");
+static_assert(std::is_assignable<B&, D>::value, "Error");
+static_assert(std::is_assignable<B&, B&>::value, "Error");
+static_assert(std::is_assignable<B&, D&>::value, "Error");
+static_assert(!std::is_assignable<const B&, B&>::value, "Error");
+static_assert(!std::is_assignable<const B&, D&>::value, "Error");
+static_assert(!std::is_assignable<D&, B>::value, "Error");
+static_assert(!std::is_assignable<D&, B&>::value, "Error");
+
+static_assert(std::is_assignable<B*&, B*>::value, "Error");
+static_assert(std::is_assignable<B*&, D*>::value, "Error");
+static_assert(std::is_assignable<const B*&, D*>::value, "Error");
+static_assert(std::is_assignable<const B*&, const D*>::value, "Error");
+static_assert(std::is_assignable<B*&, B*&>::value, "Error");
+static_assert(std::is_assignable<B*&, D*&>::value, "Error");
+static_assert(std::is_assignable<const B*&, B*&>::value, "Error");
+static_assert(std::is_assignable<const B*&, D*&>::value, "Error");
+static_assert(!std::is_assignable<B* const&, B*&>::value, "Error");
+static_assert(!std::is_assignable<B* const&, D*&>::value, "Error");
+static_assert(!std::is_assignable<D*&, B*>::value, "Error");
+static_assert(!std::is_assignable<D*&, B*&>::value, "Error");
+
+static_assert(std::is_assignable<MO&, MO>::value, "Error");
+static_assert(std::is_assignable<MO&, MO&&>::value, "Error");
+static_assert(std::is_assignable<MO, MO>::value, "Error");
+static_assert(std::is_assignable<MO, MO&&>::value, "Error");
+
+static_assert(!std::is_assignable<const MO&, MO>::value, "Error");
+static_assert(!std::is_assignable<const MO&, MO&&>::value, "Error");
+static_assert(!std::is_assignable<MO&, const MO&&>::value, "Error");
+static_assert(!std::is_assignable<MO&, MO&>::value, "Error");
+static_assert(!std::is_assignable<MO&, const MO&>::value, "Error");
+static_assert(!std::is_assignable<const MO, MO>::value, "Error");
+static_assert(!std::is_assignable<const MO, MO&&>::value, "Error");
+static_assert(!std::is_assignable<MO, const MO&&>::value, "Error");
+static_assert(!std::is_assignable<MO, MO&>::value, "Error");
+static_assert(!std::is_assignable<MO, const MO&>::value, "Error");
+
+static_assert(!std::is_assignable<NontrivialUnion&,
+NontrivialUnion>::value, "Error");
+static_assert(!std::is_assignable<NontrivialUnion&,
+NontrivialUnion&&>::value, "Error");
+static_assert(!std::is_assignable<NontrivialUnion&,
+NontrivialUnion&>::value, "Error");
+static_assert(!std::is_assignable<NontrivialUnion&, const
+NontrivialUnion&>::value, "Error");
+static_assert(!std::is_assignable<NontrivialUnion&, const
+NontrivialUnion&&>::value, "Error");
+
+static_assert(std::is_assignable<Abstract&, Abstract>::value, "Error");
+static_assert(std::is_assignable<Abstract&, Abstract&&>::value, "Error");
+static_assert(std::is_assignable<Abstract&, Abstract&>::value, "Error");
+static_assert(std::is_assignable<Abstract&, const Abstract&>::value, "Error");
+static_assert(std::is_assignable<Abstract&, const Abstract&&>::value, "Error");
+static_assert(std::is_assignable<Abstract&&, Abstract>::value, "Error");
+static_assert(std::is_assignable<Abstract&&, Abstract&&>::value, "Error");
+static_assert(std::is_assignable<Abstract&&, Abstract&>::value, "Error");
+static_assert(std::is_assignable<Abstract&&, const Abstract&>::value, "Error");
+static_assert(std::is_assignable<Abstract&&, const
+Abstract&&>::value, "Error");
+
+static_assert(std::is_assignable<AbstractDelDtor&,
+AbstractDelDtor>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&,
+AbstractDelDtor&&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&,
+AbstractDelDtor&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&, const
+AbstractDelDtor&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&, const
+AbstractDelDtor&&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&&,
+AbstractDelDtor>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&&,
+AbstractDelDtor&&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&&,
+AbstractDelDtor&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&&, const
+AbstractDelDtor&>::value, "Error");
+static_assert(std::is_assignable<AbstractDelDtor&&, const
+AbstractDelDtor&&>::value, "Error");
+
+static_assert(std::is_assignable<DelDef&, DelDef>::value, "Error");
+static_assert(std::is_assignable<DelDef&, DelDef&&>::value, "Error");
+static_assert(std::is_assignable<DelDef&, DelDef&>::value, "Error");
+static_assert(std::is_assignable<DelDef&, const DelDef&>::value, "Error");
+static_assert(std::is_assignable<DelDef&, const DelDef&&>::value, "Error");
+static_assert(std::is_assignable<DelDef&&, DelDef>::value, "Error");
+static_assert(std::is_assignable<DelDef&&, DelDef&&>::value, "Error");
+static_assert(std::is_assignable<DelDef&&, DelDef&>::value, "Error");
+static_assert(std::is_assignable<DelDef&&, const DelDef&>::value, "Error");
+static_assert(std::is_assignable<DelDef&&, const DelDef&&>::value, "Error");
+
+static_assert(std::is_assignable<Ellipsis&, Ellipsis>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const Ellipsis>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, Ellipsis&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const Ellipsis&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis, Ellipsis>::value, "Error");
+static_assert(std::is_assignable<Ellipsis, const Ellipsis>::value, "Error");
+static_assert(std::is_assignable<Ellipsis, Ellipsis&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis, const Ellipsis&>::value, "Error");
+
+static_assert(!std::is_assignable<Ellipsis&, void>::value, "Error");
+
+static_assert(std::is_assignable<Ellipsis&, int>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const int>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, int&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const int&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, Empty>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const Empty>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, Empty&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const Empty&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, E>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const E>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, E&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const E&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, SE>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const SE>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, SE&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const SE&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, bool>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const bool>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, bool&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const bool&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const
+std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, std::nullptr_t&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const
+std::nullptr_t&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, void*>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const void*>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, void*&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, const void*&>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, void()>::value, "Error");
+static_assert(std::is_assignable<Ellipsis&, void(&)()>::value, "Error");
+
+static_assert(std::is_assignable<DelEllipsis&, DelEllipsis>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis&, const
+DelEllipsis>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis&, DelEllipsis&>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis&, const
+DelEllipsis&>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis, DelEllipsis>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis, const
+DelEllipsis>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis, DelEllipsis&>::value, "Error");
+static_assert(std::is_assignable<DelEllipsis, const
+DelEllipsis&>::value, "Error");
+
+static_assert(!std::is_assignable<DelEllipsis&, void>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, int>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const int>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, int&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const int&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, Empty>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const Empty>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, Empty&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const Empty&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, E>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const E>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, E&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const E&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, SE>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const SE>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, SE&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const SE&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, bool>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const bool>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, bool&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const bool&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&,
+std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const
+std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&,
+std::nullptr_t&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const
+std::nullptr_t&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, void*>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const void*>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, void*&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, const void*&>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, void()>::value, "Error");
+static_assert(!std::is_assignable<DelEllipsis&, void(&)()>::value, "Error");
+
+static_assert(std::is_assignable<FromArgs<int>&, int>::value, "Error");
+static_assert(std::is_assignable<FromArgs<int>&, const int>::value, "Error");
+static_assert(!std::is_assignable<FromArgs<int>&,
+ImplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<FromArgs<int>&, ImplicitTo<const
+int>>::value, "Error");
+static_assert(!std::is_assignable<FromArgs<int>&,
+ExplicitTo<int>>::value, "Error");
+static_assert(!std::is_assignable<FromArgs<int>&, ExplicitTo<const
+int>>::value, "Error");
+
+static_assert(!std::is_assignable<DelFromArgs<int>&, int>::value, "Error");
+static_assert(!std::is_assignable<DelFromArgs<int>&, const
+int>::value, "Error");
+
+static_assert(std::is_assignable<void(*&)(),
+ImplicitTo<void(*)()>>::value, "Error");
+static_assert(!std::is_assignable<void(*&)(),
+ExplicitTo<void(*)()>>::value, "Error");
+
+static_assert(std::is_assignable<UAssignAll&, UAssignAll>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, const
+UAssignAll>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, UAssignAll&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, const
+UAssignAll&>::value, "Error");
+
+static_assert(std::is_assignable<UAssignAll, UAssignAll>::value, "Error");
+static_assert(std::is_assignable<UAssignAll, const
+UAssignAll>::value, "Error");
+static_assert(std::is_assignable<UAssignAll, UAssignAll&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll, const
+UAssignAll&>::value, "Error");
+
+static_assert(!std::is_assignable<UAssignAll&, void>::value, "Error");
+static_assert(!std::is_assignable<const UAssignAll&, void>::value, "Error");
+static_assert(!std::is_assignable<const UAssignAll&,
+UAssignAll>::value, "Error");
+static_assert(!std::is_assignable<const UAssignAll&, const
+UAssignAll>::value, "Error");
+static_assert(!std::is_assignable<const UAssignAll&,
+UAssignAll&>::value, "Error");
+static_assert(!std::is_assignable<const UAssignAll&, const
+UAssignAll&>::value, "Error");
+
+static_assert(std::is_assignable<UAssignAll&, int>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, E>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, E&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, SE>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, SE&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, double>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, double&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, Empty>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, Empty&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, B>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, B&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, U>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, U&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, std::nullptr_t>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&,
+std::nullptr_t&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void()>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void(&)()>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void() const>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void(*)()>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void(*&)()>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int*>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int*&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void*>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, void*&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, const int*>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, const int*&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, const void*>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, const void*&>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int[1]>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int(&)[1]>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int[]>::value, "Error");
+static_assert(std::is_assignable<UAssignAll&, int(&)[]>::value, "Error");
+
+static_assert(!std::is_assignable<UDelAssignAll&, int>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, E>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, E&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, SE>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, SE&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, double>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, double&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, Empty>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, Empty&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, B>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, B&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, U>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, U&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&,
+std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&,
+std::nullptr_t&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void()>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void(&)()>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void()
+const>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void(*)()>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void(*&)()>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int*>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int*&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void*>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, void*&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, const int*>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, const
+int*&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, const
+void*>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, const
+void*&>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int[1]>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int(&)[1]>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int[]>::value, "Error");
+static_assert(!std::is_assignable<UDelAssignAll&, int(&)[]>::value, "Error");
+
+static_assert(!std::is_assignable<void(&)(), std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t, void(&)()>::value, "Error");
+static_assert(!std::is_assignable<void(&)(), int[]>::value, "Error");
+static_assert(!std::is_assignable<int[], void(&)()>::value, "Error");
+static_assert(!std::is_assignable<int[], std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t, int[]>::value, "Error");
+static_assert(!std::is_assignable<int[1], std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t, int[1]>::value, "Error");
+static_assert(!std::is_assignable<void, std::nullptr_t>::value, "Error");
+static_assert(!std::is_assignable<std::nullptr_t, void>::value, "Error");
+static_assert(!std::is_assignable<const D&, B&>::value, "Error");
+static_assert(!std::is_assignable<const B&, B&>::value, "Error");
+
+static_assert(std::is_assignable<B&, const D&>::value, "Error");
+static_assert(std::is_assignable<B&, const B&>::value, "Error");
+static_assert(std::is_assignable<int&, const int&>::value, "Error");
+static_assert(std::is_assignable<int&, const double&>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..efa2b853a1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_compound<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc
new file mode 100644
index 0000000000..c167b16b10
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_compound<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_compound/value.cc b/libstdc++-v3/testsuite/20_util/is_compound/value.cc
new file mode 100644
index 0000000000..053983a2f2
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_compound/value.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_compound;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_compound, void>(false)) );
+ VERIFY( (test_category<is_compound, char>(false)) );
+ VERIFY( (test_category<is_compound, signed char>(false)) );
+ VERIFY( (test_category<is_compound, unsigned char>(false)) );
+#ifdef _GLIBCXX_USE_WCHAR_T
+ VERIFY( (test_category<is_compound, wchar_t>(false)) );
+#endif
+ VERIFY( (test_category<is_compound, short>(false)) );
+ VERIFY( (test_category<is_compound, unsigned short>(false)) );
+ VERIFY( (test_category<is_compound, int>(false)) );
+ VERIFY( (test_category<is_compound, unsigned int>(false)) );
+ VERIFY( (test_category<is_compound, long>(false)) );
+ VERIFY( (test_category<is_compound, unsigned long>(false)) );
+ VERIFY( (test_category<is_compound, long long>(false)) );
+ VERIFY( (test_category<is_compound, unsigned long long>(false)) );
+ VERIFY( (test_category<is_compound, float>(false)) );
+ VERIFY( (test_category<is_compound, double>(false)) );
+ VERIFY( (test_category<is_compound, long double>(false)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_compound, ClassType>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_constructible/51185.cc b/libstdc++-v3/testsuite/20_util/is_constructible/51185.cc
new file mode 100644
index 0000000000..faf3969fe8
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_constructible/51185.cc
@@ -0,0 +1,39 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+
+struct A { };
+struct B : A { };
+
+// libstdc++/51185
+void f()
+{
+ static_assert(!std::is_constructible<B &&, A>(), "");
+ static_assert(!std::is_constructible<B const &&, A>(), "");
+ static_assert(!std::is_constructible<B const &&, A const>(), "");
+ static_assert(!std::is_constructible<B volatile &&, A>(), "");
+ static_assert(!std::is_constructible<B volatile &&, A volatile>(), "");
+ static_assert(!std::is_constructible<B const volatile &&, A>(), "");
+ static_assert(!std::is_constructible<B const volatile &&, A const>(), "");
+ static_assert(!std::is_constructible<B const volatile &&, A volatile>(), "");
+ static_assert(!std::is_constructible<B const volatile &&,
+ A const volatile>(), "");
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_constructible/value-2.cc b/libstdc++-v3/testsuite/20_util/is_constructible/value-2.cc
new file mode 100644
index 0000000000..06895e32bb
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_constructible/value-2.cc
@@ -0,0 +1,821 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <initializer_list>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test::construct_destruct;
+
+static_assert(std::is_constructible<int, int>::value, "Error");
+static_assert(std::is_constructible<std::nullptr_t, std::nullptr_t>::value,
+ "Error");
+static_assert(std::is_constructible<E, E>::value, "Error");
+static_assert(std::is_constructible<SE, SE>::value, "Error");
+static_assert(std::is_constructible<OpE, OpE>::value, "Error");
+static_assert(std::is_constructible<OpSE, OpSE>::value, "Error");
+static_assert(std::is_constructible<Empty, Empty>::value, "Error");
+static_assert(std::is_constructible<B, B>::value, "Error");
+static_assert(std::is_constructible<U, U>::value, "Error");
+static_assert(std::is_constructible<int B::*, int B::*>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, Ellipsis>::value, "Error");
+static_assert(std::is_constructible<int*, int*>::value, "Error");
+static_assert(std::is_constructible<void*, void*>::value, "Error");
+static_assert(std::is_constructible<Any, Any>::value, "Error");
+static_assert(std::is_constructible<nAny, nAny>::value, "Error");
+static_assert(std::is_constructible<std::initializer_list<int>,
+ std::initializer_list<int>>::value, "Error");
+static_assert(std::is_constructible<DelDef, DelDef>::value, "Error");
+
+static_assert(!std::is_constructible<void, void>::value, "Error");
+static_assert(!std::is_constructible<Abstract, Abstract>::value, "Error");
+static_assert(!std::is_constructible<int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<int[1], int[1]>::value, "Error");
+static_assert(!std::is_constructible<DelCopy, const DelCopy&>::value, "Error");
+static_assert(!std::is_constructible<DelCopy, DelCopy&&>::value, "Error");
+static_assert(!std::is_constructible<DelCopy, DelCopy>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, void>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, int>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, DelDtor>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, DelDtor&&>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, const DelDtor&>::value, "Error");
+
+static_assert(std::is_constructible<DelEllipsis, const DelEllipsis&>::value,
+ "Error");
+static_assert(std::is_constructible<DelEllipsis, DelEllipsis&&>::value,
+ "Error");
+static_assert(std::is_constructible<DelEllipsis, DelEllipsis>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, void>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, std::nullptr_t>::value,
+ "Error");
+static_assert(!std::is_constructible<DelEllipsis, B>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, Empty>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, E>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, SE>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, OpE>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, OpSE>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, void()>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, void() const>::value,
+ "Error");
+static_assert(!std::is_constructible<DelEllipsis, int[1]>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, int[]>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, int*>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, void*>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, int B::*>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, int D::*>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, Abstract>::value, "Error");
+static_assert(!std::is_constructible<int, DelImplicitTo<int>>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t,
+ DelImplicitTo<std::nullptr_t>>::value, "Error");
+static_assert(!std::is_constructible<int&,
+ DelImplicitTo<const int&>>::value, "Error");
+
+static_assert(!std::is_constructible<int, void>::value, "Error");
+static_assert(!std::is_constructible<void, int>::value, "Error");
+static_assert(std::is_constructible<void*, int*>::value, "Error");
+static_assert(!std::is_constructible<int*, void*>::value, "Error");
+static_assert(std::is_constructible<int*, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, int*>::value, "Error");
+static_assert(!std::is_constructible<Empty, E>::value, "Error");
+static_assert(!std::is_constructible<Empty, SE>::value, "Error");
+static_assert(!std::is_constructible<Empty, OpE>::value, "Error");
+static_assert(!std::is_constructible<Empty, OpSE>::value, "Error");
+static_assert(!std::is_constructible<Empty, void>::value, "Error");
+static_assert(!std::is_constructible<Empty, void*>::value, "Error");
+static_assert(!std::is_constructible<Empty, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<Empty, int[]>::value, "Error");
+static_assert(!std::is_constructible<Empty, int[3]>::value, "Error");
+static_assert(!std::is_constructible<Empty, int>::value, "Error");
+static_assert(!std::is_constructible<Abstract, int>::value, "Error");
+static_assert(!std::is_constructible<Abstract, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, Abstract>::value, "Error");
+static_assert(!std::is_constructible<Abstract, int[]>::value, "Error");
+static_assert(std::is_constructible<B, D>::value, "Error");
+static_assert(!std::is_constructible<D, B>::value, "Error");
+static_assert(!std::is_constructible<int[], int[1]>::value, "Error");
+static_assert(!std::is_constructible<int[1], int[]>::value, "Error");
+static_assert(!std::is_constructible<int[], Empty>::value, "Error");
+static_assert(!std::is_constructible<int[], std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<int[1], Abstract>::value, "Error");
+
+static_assert(std::is_constructible<const int*, int*>::value, "Error");
+static_assert(std::is_constructible<const void*, void*>::value, "Error");
+static_assert(std::is_constructible<const void*, int*>::value, "Error");
+static_assert(!std::is_constructible<int*, const void*>::value, "Error");
+
+static_assert(std::is_constructible<int, E>::value, "Error");
+static_assert(!std::is_constructible<E, int>::value, "Error");
+static_assert(!std::is_constructible<E, E2>::value, "Error");
+static_assert(std::is_constructible<E, E>::value, "Error");
+static_assert(std::is_constructible<bool, E>::value, "Error");
+static_assert(!std::is_constructible<E, bool>::value, "Error");
+static_assert(std::is_constructible<double, E>::value, "Error");
+static_assert(!std::is_constructible<E, double>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, E>::value, "Error");
+static_assert(!std::is_constructible<E, std::nullptr_t>::value, "Error");
+
+static_assert(std::is_constructible<int, OpE>::value, "Error");
+static_assert(!std::is_constructible<OpE, int>::value, "Error");
+static_assert(!std::is_constructible<OpE, E2>::value, "Error");
+static_assert(std::is_constructible<OpE, OpE>::value, "Error");
+static_assert(std::is_constructible<bool, OpE>::value, "Error");
+static_assert(!std::is_constructible<OpE, bool>::value, "Error");
+static_assert(std::is_constructible<double, OpE>::value, "Error");
+static_assert(!std::is_constructible<OpE, double>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, OpE>::value, "Error");
+static_assert(!std::is_constructible<OpE, std::nullptr_t>::value, "Error");
+
+static_assert(!std::is_constructible<int, SE>::value, "Error");
+static_assert(!std::is_constructible<SE, int>::value, "Error");
+static_assert(!std::is_constructible<E, SE>::value, "Error");
+static_assert(!std::is_constructible<SE, SE2>::value, "Error");
+static_assert(std::is_constructible<SE, SE>::value, "Error");
+static_assert(!std::is_constructible<bool, SE>::value, "Error");
+static_assert(!std::is_constructible<SE, bool>::value, "Error");
+static_assert(!std::is_constructible<double, SE>::value, "Error");
+static_assert(!std::is_constructible<SE, double>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, SE>::value, "Error");
+static_assert(!std::is_constructible<SE, std::nullptr_t>::value, "Error");
+
+static_assert(!std::is_constructible<int, OpSE>::value, "Error");
+static_assert(!std::is_constructible<OpSE, int>::value, "Error");
+static_assert(!std::is_constructible<OpE, OpSE>::value, "Error");
+static_assert(!std::is_constructible<OpSE, SE2>::value, "Error");
+static_assert(std::is_constructible<OpSE, OpSE>::value, "Error");
+static_assert(!std::is_constructible<bool, OpSE>::value, "Error");
+static_assert(!std::is_constructible<OpSE, bool>::value, "Error");
+static_assert(!std::is_constructible<double, OpSE>::value, "Error");
+static_assert(!std::is_constructible<OpSE, double>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, OpSE>::value, "Error");
+static_assert(!std::is_constructible<OpSE, std::nullptr_t>::value, "Error");
+
+static_assert(!std::is_constructible<D*, B*>::value, "Error");
+static_assert(!std::is_constructible<const volatile D*, B*>::value, "Error");
+static_assert(!std::is_constructible<D*, const volatile B*>::value, "Error");
+
+static_assert(!std::is_constructible<D*, B* const>::value, "Error");
+static_assert(!std::is_constructible<const volatile D*, B* const>::value,
+ "Error");
+static_assert(!std::is_constructible<D*, const volatile B* const>::value,
+ "Error");
+
+static_assert(!std::is_constructible<D*, B*&>::value, "Error");
+static_assert(!std::is_constructible<const volatile D*, B*&>::value, "Error");
+static_assert(!std::is_constructible<D*, const volatile B*&>::value, "Error");
+
+static_assert(!std::is_constructible<int B::*, int D::*>::value, "Error");
+static_assert(!std::is_constructible<const volatile int B::*, int D::*>::value,
+ "Error");
+static_assert(!std::is_constructible<int B::*, const volatile int D::*>::value,
+ "Error");
+
+static_assert(!std::is_constructible<int B::*, int D::* const>::value, "Error");
+static_assert(!std::is_constructible<const volatile int B::*,
+ int D::* const>::value, "Error");
+static_assert(!std::is_constructible<int B::*,
+ const volatile int D::* const>::value, "Error");
+
+static_assert(!std::is_constructible<int B::*, int D::*&>::value, "Error");
+static_assert(!std::is_constructible<const volatile int B::*,
+ int D::*&>::value, "Error");
+static_assert(!std::is_constructible<int B::*,
+ const volatile int D::*&>::value, "Error");
+
+static_assert(!std::is_constructible<int B::*, int D::* const &>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile int B::*,
+ int D::* const &>::value, "Error");
+static_assert(!std::is_constructible<int B::*,
+ const volatile int D::* const &>::value, "Error");
+
+static_assert(!std::is_constructible<int&&, int&>::value, "Error");
+static_assert(!std::is_constructible<const int&&, int&>::value, "Error");
+
+static_assert(std::is_constructible<B&, D&>::value, "Error");
+static_assert(std::is_constructible<B&&, D&&>::value, "Error");
+static_assert(std::is_constructible<const B&, D&>::value, "Error");
+static_assert(std::is_constructible<const B&&, D&&>::value, "Error");
+static_assert(!std::is_constructible<B&, const D&>::value, "Error");
+static_assert(!std::is_constructible<B&&, const D&&>::value, "Error");
+
+static_assert(!std::is_constructible<D&, B&>::value, "Error");
+static_assert(!std::is_constructible<D&&, B&&>::value, "Error");
+static_assert(!std::is_constructible<D&, const B&>::value, "Error");
+static_assert(!std::is_constructible<D&&, const B&&>::value, "Error");
+static_assert(!std::is_constructible<const D&, B&>::value, "Error");
+static_assert(!std::is_constructible<const D&&, B&&>::value, "Error");
+
+static_assert(!std::is_constructible<B&&, B&>::value, "Error");
+static_assert(!std::is_constructible<B&&, D&>::value, "Error");
+static_assert(std::is_constructible<B&&, ImplicitTo<D&&>>::value, "Error");
+static_assert(std::is_constructible<B&&, ImplicitTo<D&&>&>::value, "Error");
+static_assert(std::is_constructible<int&&, double&>::value, "Error");
+static_assert(std::is_constructible<const int&,
+ ImplicitTo<int&>&>::value, "Error");
+static_assert(std::is_constructible<const int&,
+ ImplicitTo<int&>>::value, "Error");
+static_assert(std::is_constructible<const int&,
+ ExplicitTo<int&>&>::value, "Error");
+static_assert(std::is_constructible<const int&,
+ ExplicitTo<int&>>::value, "Error");
+
+static_assert(!std::is_constructible<B&&, ExplicitTo<D&&>>::value, "Error");
+static_assert(!std::is_constructible<B&&, ExplicitTo<D&&>&>::value, "Error");
+
+static_assert(!std::is_constructible<B&, B&&>::value, "Error");
+static_assert(!std::is_constructible<D&, B&&>::value, "Error");
+static_assert(!std::is_constructible<B&, D&&>::value, "Error");
+
+static_assert(std::is_constructible<void(&)(), void(&)()>::value, "Error");
+static_assert(std::is_constructible<void(&&)(), void(&&)()>::value, "Error");
+static_assert(std::is_constructible<void(&&)(), void()>::value, "Error");
+
+static_assert(!std::is_constructible<void>::value, "Error" );
+static_assert(!std::is_constructible<void, int>::value, "Error" );
+static_assert(!std::is_constructible<void, int, double>::value, "Error" );
+
+static_assert(!std::is_constructible<int&>::value, "Error" );
+static_assert(!std::is_constructible<const int&>::value, "Error" );
+static_assert(!std::is_constructible<int&, int, int>::value, "Error" );
+static_assert(!std::is_constructible<const int&, int, int>::value, "Error" );
+
+static_assert(std::is_constructible<void(&)(), void()>::value, "Error");
+static_assert(std::is_constructible<void(&)(), void(&&)()>::value, "Error");
+
+static_assert(std::is_constructible<int&, int&>::value, "Error");
+static_assert(!std::is_constructible<int&, const int&>::value, "Error");
+static_assert(!std::is_constructible<int&, int>::value, "Error");
+static_assert(!std::is_constructible<int&, int&&>::value, "Error");
+static_assert(!std::is_constructible<int&, const int&&>::value, "Error");
+static_assert(std::is_constructible<const int&, int&>::value, "Error");
+static_assert(std::is_constructible<const int&, int>::value, "Error");
+static_assert(std::is_constructible<const int&, const int>::value, "Error");
+static_assert(std::is_constructible<const int&, int&&>::value, "Error");
+static_assert(std::is_constructible<const int&, const int&&>::value, "Error");
+static_assert(std::is_constructible<volatile int&, int&>::value, "Error");
+static_assert(!std::is_constructible<volatile int&, const int&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile int&, int>::value, "Error");
+static_assert(!std::is_constructible<volatile int&, int&&>::value, "Error");
+static_assert(!std::is_constructible<volatile int&, const int&&>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile int&, int&>::value, "Error");
+static_assert(!std::is_constructible<const volatile int&, int>::value, "Error");
+static_assert(!std::is_constructible<const volatile int&, const int>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile int&, int&&>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile int&, const int&&>::value,
+ "Error");
+
+static_assert(std::is_constructible<int&&, int>::value, "Error");
+static_assert(std::is_constructible<int&&, int&&>::value, "Error");
+static_assert(!std::is_constructible<int&&, const int&&>::value, "Error");
+static_assert(!std::is_constructible<int&&, int&>::value, "Error");
+static_assert(!std::is_constructible<int&&, const int&>::value, "Error");
+static_assert(std::is_constructible<int&&, double&>::value, "Error");
+static_assert(std::is_constructible<const int&&, int>::value, "Error");
+static_assert(std::is_constructible<const int&&, int&&>::value, "Error");
+static_assert(std::is_constructible<const int&&, const int>::value, "Error");
+static_assert(std::is_constructible<const int&&, const int&&>::value, "Error");
+static_assert(!std::is_constructible<int&&, const int&>::value, "Error");
+static_assert(!std::is_constructible<const int&&, int&>::value, "Error");
+static_assert(!std::is_constructible<const int&&, const int&>::value, "Error");
+static_assert(std::is_constructible<volatile int&&, int>::value, "Error");
+static_assert(std::is_constructible<volatile int&&, int&&>::value, "Error");
+static_assert(!std::is_constructible<volatile int&&, const int&&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile int&&, int&>::value, "Error");
+static_assert(!std::is_constructible<volatile int&&, const int&>::value,
+ "Error");
+static_assert(std::is_constructible<volatile int&&, double&>::value, "Error");
+static_assert(std::is_constructible<volatile const int&&, int>::value, "Error");
+static_assert(std::is_constructible<const volatile int&&, int&&>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile int&&, const int>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile int&&, const int&&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile int&&, const int&>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile int&&, int&>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile int&&,
+ const int&>::value, "Error");
+
+static_assert(std::is_constructible<Empty&, Empty&>::value, "Error");
+static_assert(!std::is_constructible<Empty&, const Empty&>::value, "Error");
+static_assert(!std::is_constructible<Empty&, Empty>::value, "Error");
+static_assert(!std::is_constructible<Empty&, Empty&&>::value, "Error");
+static_assert(!std::is_constructible<Empty&, const Empty&&>::value, "Error");
+static_assert(std::is_constructible<const Empty&, Empty&>::value, "Error");
+static_assert(std::is_constructible<const Empty&, Empty>::value, "Error");
+static_assert(std::is_constructible<const Empty&, const Empty>::value, "Error");
+static_assert(std::is_constructible<const Empty&, Empty&&>::value, "Error");
+static_assert(std::is_constructible<const Empty&, const Empty&&>::value,
+ "Error");
+static_assert(std::is_constructible<volatile Empty&, Empty&>::value, "Error");
+static_assert(!std::is_constructible<volatile Empty&, const Empty&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile Empty&, Empty>::value, "Error");
+static_assert(!std::is_constructible<volatile Empty&, Empty&&>::value, "Error");
+static_assert(!std::is_constructible<volatile Empty&, const Empty&&>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile Empty&, Empty&>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile Empty&, Empty>::value,
+ "Error");
+static_assert(!std::is_constructible<const volatile Empty&,
+ const Empty>::value, "Error");
+static_assert(!std::is_constructible<const volatile Empty&,
+ Empty&&>::value, "Error");
+static_assert(!std::is_constructible<const volatile Empty&,
+ const Empty&&>::value, "Error");
+
+static_assert(std::is_constructible<Empty&&, Empty>::value, "Error");
+static_assert(std::is_constructible<Empty&&, Empty&&>::value, "Error");
+static_assert(!std::is_constructible<Empty&&, const Empty&&>::value, "Error");
+static_assert(!std::is_constructible<Empty&&, Empty&>::value, "Error");
+static_assert(!std::is_constructible<Empty&&, const Empty&>::value, "Error");
+static_assert(!std::is_constructible<Empty&&, double&>::value, "Error");
+static_assert(!std::is_constructible<Empty&&, const double&>::value, "Error");
+static_assert(std::is_constructible<const Empty&&, Empty>::value, "Error");
+static_assert(std::is_constructible<const Empty&&, Empty&&>::value, "Error");
+static_assert(std::is_constructible<const Empty&&, const Empty>::value,
+ "Error");
+static_assert(std::is_constructible<const Empty&&, const Empty&&>::value,
+ "Error");
+static_assert(!std::is_constructible<Empty&&, const Empty&>::value, "Error");
+static_assert(!std::is_constructible<const Empty&&, Empty&>::value, "Error");
+static_assert(!std::is_constructible<const Empty&&, const Empty&>::value,
+ "Error");
+static_assert(std::is_constructible<volatile Empty&&, Empty>::value, "Error");
+static_assert(std::is_constructible<volatile Empty&&, Empty&&>::value, "Error");
+static_assert(!std::is_constructible<volatile Empty&&, const Empty&&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile Empty&&, Empty&>::value, "Error");
+static_assert(!std::is_constructible<volatile Empty&&, const Empty&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile Empty&&, double&>::value,
+ "Error");
+static_assert(!std::is_constructible<volatile Empty&&, const double&>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile Empty&&, Empty>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile Empty&&, Empty&&>::value,
+ "Error");
+static_assert(std::is_constructible<const volatile Empty&&,
+ const Empty>::value, "Error");
+static_assert(std::is_constructible<const volatile Empty&&,
+ const Empty&&>::value, "Error");
+static_assert(!std::is_constructible<volatile Empty&&,
+ const Empty&>::value, "Error");
+static_assert(!std::is_constructible<const volatile Empty&&,
+ Empty&>::value, "Error");
+static_assert(!std::is_constructible<const volatile Empty&&,
+ const Empty&>::value, "Error");
+
+static_assert(std::is_constructible<Ellipsis, int>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, Empty>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, std::nullptr_t>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, int[]>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, int[1]>::value, "Error");
+static_assert(!std::is_constructible<Ellipsis, void>::value, "Error");
+
+static_assert(std::is_constructible<int(&)[1], int(&)[1]>::value, "Error");
+static_assert(std::is_constructible<const int(&)[1],
+ int(&)[1]>::value, "Error");
+static_assert(std::is_constructible<volatile int(&)[1],
+ int(&)[1]>::value, "Error");
+static_assert(std::is_constructible<const volatile int(&)[1],
+ int(&)[1]>::value, "Error");
+static_assert(!std::is_constructible<int(&)[1],
+ const int(&)[1]>::value, "Error");
+static_assert(!std::is_constructible<const int(&)[1],
+ volatile int(&)[1]>::value, "Error");
+
+static_assert(std::is_constructible<int(&)[], int(&)[]>::value, "Error");
+
+static_assert(!std::is_constructible<int(&)[1], int(&)[2]>::value, "Error");
+static_assert(!std::is_constructible<int(&)[1], int&>::value, "Error");
+static_assert(!std::is_constructible<int&, int(&)[1]>::value, "Error");
+
+static_assert(!std::is_constructible<U, int>::value, "Error");
+static_assert(!std::is_constructible<U, Empty>::value, "Error");
+
+static_assert(!std::is_constructible<void(), void()>::value, "Error");
+static_assert(!std::is_constructible<void(), int>::value, "Error");
+static_assert(!std::is_constructible<void(), Abstract>::value, "Error");
+static_assert(!std::is_constructible<void(), std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<void(), Empty>::value, "Error");
+static_assert(!std::is_constructible<void(), U>::value, "Error");
+static_assert(!std::is_constructible<void(), E>::value, "Error");
+static_assert(!std::is_constructible<void(), SE>::value, "Error");
+static_assert(!std::is_constructible<void(), OpE>::value, "Error");
+static_assert(!std::is_constructible<void(), OpSE>::value, "Error");
+static_assert(!std::is_constructible<void(), int[]>::value, "Error");
+static_assert(!std::is_constructible<void(), int[1]>::value, "Error");
+
+static_assert(!std::is_constructible<void() const,
+ void() volatile>::value, "Error");
+static_assert(!std::is_constructible<void() const, int>::value, "Error");
+static_assert(!std::is_constructible<void() const, Abstract>::value, "Error");
+static_assert(!std::is_constructible<void() const, std::nullptr_t>::value,
+ "Error");
+static_assert(!std::is_constructible<void() const, Empty>::value, "Error");
+static_assert(!std::is_constructible<void() const, U>::value, "Error");
+static_assert(!std::is_constructible<void() const, E>::value, "Error");
+static_assert(!std::is_constructible<void() const, SE>::value, "Error");
+static_assert(!std::is_constructible<void() const, OpE>::value, "Error");
+static_assert(!std::is_constructible<void() const, OpSE>::value, "Error");
+static_assert(!std::is_constructible<void() const, int[]>::value, "Error");
+static_assert(!std::is_constructible<void() const, int[1]>::value, "Error");
+
+static_assert(!std::is_constructible<void(int), void()>::value, "Error");
+static_assert(!std::is_constructible<int, void()>::value, "Error");
+static_assert(!std::is_constructible<Abstract, void()>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, void()>::value, "Error");
+static_assert(!std::is_constructible<Empty, void()>::value, "Error");
+static_assert(!std::is_constructible<U, void()>::value, "Error");
+static_assert(!std::is_constructible<E, void()>::value, "Error");
+static_assert(!std::is_constructible<SE, void()>::value, "Error");
+static_assert(!std::is_constructible<OpE, void()>::value, "Error");
+static_assert(!std::is_constructible<OpSE, void()>::value, "Error");
+static_assert(!std::is_constructible<int[], void()>::value, "Error");
+static_assert(!std::is_constructible<int[1], void()>::value, "Error");
+
+static_assert(!std::is_constructible<void(int) const,
+ void() const>::value, "Error");
+static_assert(!std::is_constructible<int, void() const>::value, "Error");
+static_assert(!std::is_constructible<Abstract, void() const>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, void() const>::value,
+ "Error");
+static_assert(!std::is_constructible<Empty, void() const>::value, "Error");
+static_assert(!std::is_constructible<U, void() const>::value, "Error");
+static_assert(!std::is_constructible<E, void() const>::value, "Error");
+static_assert(!std::is_constructible<SE, void() const>::value, "Error");
+static_assert(!std::is_constructible<OpE, void() const>::value, "Error");
+static_assert(!std::is_constructible<OpSE, void() const>::value, "Error");
+static_assert(!std::is_constructible<int[], void() const>::value, "Error");
+static_assert(!std::is_constructible<int[1], void() const>::value, "Error");
+
+static_assert(!std::is_constructible<void, int, int>::value, "Error");
+static_assert(!std::is_constructible<void, Empty, B>::value, "Error");
+static_assert(!std::is_constructible<void, Empty, Empty>::value, "Error");
+static_assert(!std::is_constructible<void, U, Empty>::value, "Error");
+static_assert(!std::is_constructible<void, U, U>::value, "Error");
+static_assert(!std::is_constructible<void, std::nullptr_t,
+ std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<void, int[1], int[1]>::value, "Error");
+static_assert(!std::is_constructible<void, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<void, void, int>::value, "Error");
+static_assert(!std::is_constructible<void, void, void>::value, "Error");
+static_assert(!std::is_constructible<void, void(), void()>::value, "Error");
+static_assert(!std::is_constructible<void, void() const,
+ void() volatile>::value, "Error");
+
+static_assert(!std::is_constructible<int, int, int>::value, "Error");
+static_assert(!std::is_constructible<const int, int, int>::value, "Error");
+static_assert(!std::is_constructible<int, void, int>::value, "Error");
+static_assert(!std::is_constructible<const int, void, int>::value, "Error");
+static_assert(!std::is_constructible<int, void, void>::value, "Error");
+static_assert(!std::is_constructible<const int, void, void>::value, "Error");
+static_assert(!std::is_constructible<bool, int, int>::value, "Error");
+static_assert(!std::is_constructible<const bool, int, int>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t, int, int>::value, "Error");
+static_assert(!std::is_constructible<const std::nullptr_t, int, int>::value,
+ "Error");
+static_assert(!std::is_constructible<std::nullptr_t, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<const std::nullptr_t, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<std::nullptr_t, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<const std::nullptr_t, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<E, int, int>::value, "Error");
+static_assert(!std::is_constructible<const E, int, int>::value, "Error");
+static_assert(!std::is_constructible<E, void, int>::value, "Error");
+static_assert(!std::is_constructible<const E, void, int>::value, "Error");
+static_assert(!std::is_constructible<E, void, void>::value, "Error");
+static_assert(!std::is_constructible<const E, void, void>::value, "Error");
+static_assert(!std::is_constructible<SE, int, int>::value, "Error");
+static_assert(!std::is_constructible<const SE, int, int>::value, "Error");
+static_assert(!std::is_constructible<SE, void, int>::value, "Error");
+static_assert(!std::is_constructible<const SE, void, int>::value, "Error");
+static_assert(!std::is_constructible<SE, void, void>::value, "Error");
+static_assert(!std::is_constructible<const SE, void, void>::value, "Error");
+static_assert(!std::is_constructible<OpE, int, int>::value, "Error");
+static_assert(!std::is_constructible<const OpE, int, int>::value, "Error");
+static_assert(!std::is_constructible<OpE, void, int>::value, "Error");
+static_assert(!std::is_constructible<const OpE, void, int>::value, "Error");
+static_assert(!std::is_constructible<OpE, void, void>::value, "Error");
+static_assert(!std::is_constructible<const OpE, void, void>::value, "Error");
+static_assert(!std::is_constructible<OpSE, int, int>::value, "Error");
+static_assert(!std::is_constructible<const OpSE, int, int>::value, "Error");
+static_assert(!std::is_constructible<OpSE, void, int>::value, "Error");
+static_assert(!std::is_constructible<const OpSE, void, int>::value, "Error");
+static_assert(!std::is_constructible<OpSE, void, void>::value, "Error");
+static_assert(!std::is_constructible<const OpSE, void, void>::value, "Error");
+static_assert(!std::is_constructible<Empty, int, int>::value, "Error");
+static_assert(!std::is_constructible<const Empty, int, int>::value, "Error");
+static_assert(!std::is_constructible<Empty, void, int>::value, "Error");
+static_assert(!std::is_constructible<const Empty, void, int>::value, "Error");
+static_assert(!std::is_constructible<Empty, void, void>::value, "Error");
+static_assert(!std::is_constructible<const Empty, void, void>::value, "Error");
+static_assert(!std::is_constructible<U, int, int>::value, "Error");
+static_assert(!std::is_constructible<const U, int, int>::value, "Error");
+static_assert(!std::is_constructible<U, void, int>::value, "Error");
+static_assert(!std::is_constructible<const U, void, int>::value, "Error");
+static_assert(!std::is_constructible<U, void, void>::value, "Error");
+static_assert(!std::is_constructible<const U, void, void>::value, "Error");
+static_assert(!std::is_constructible<B, int, int>::value, "Error");
+static_assert(!std::is_constructible<const B, int, int>::value, "Error");
+static_assert(!std::is_constructible<B, void, int>::value, "Error");
+static_assert(!std::is_constructible<const B, void, int>::value, "Error");
+static_assert(!std::is_constructible<B, void, void>::value, "Error");
+static_assert(!std::is_constructible<const B, void, void>::value, "Error");
+static_assert(!std::is_constructible<Any, int, int>::value, "Error");
+static_assert(!std::is_constructible<const Any, int, int>::value, "Error");
+static_assert(!std::is_constructible<Any, void, int>::value, "Error");
+static_assert(!std::is_constructible<const Any, void, int>::value, "Error");
+static_assert(!std::is_constructible<Any, void, void>::value, "Error");
+static_assert(!std::is_constructible<const Any, void, void>::value, "Error");
+static_assert(!std::is_constructible<nAny, void, int>::value, "Error");
+static_assert(!std::is_constructible<const nAny, void, int>::value, "Error");
+static_assert(!std::is_constructible<nAny, void, void>::value, "Error");
+static_assert(!std::is_constructible<const nAny, void, void>::value, "Error");
+static_assert(!std::is_constructible<FromArgs<>, int, int>::value, "Error");
+static_assert(!std::is_constructible<const FromArgs<>, int, int>::value,
+ "Error");
+static_assert(!std::is_constructible<FromArgs<>, void, int>::value, "Error");
+static_assert(!std::is_constructible<const FromArgs<>, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<FromArgs<>, void, void>::value, "Error");
+static_assert(!std::is_constructible<const FromArgs<>, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<Abstract, int, int>::value, "Error");
+static_assert(!std::is_constructible<const Abstract, int, int>::value, "Error");
+static_assert(!std::is_constructible<Abstract, void, int>::value, "Error");
+static_assert(!std::is_constructible<const Abstract, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<Abstract, void, void>::value, "Error");
+static_assert(!std::is_constructible<const Abstract, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<AbstractDelDtor, int, int>::value,
+ "Error");
+static_assert(!std::is_constructible<const AbstractDelDtor, int, int>::value,
+ "Error");
+static_assert(!std::is_constructible<AbstractDelDtor, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<const AbstractDelDtor, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<AbstractDelDtor, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<const AbstractDelDtor, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<int[1], int, int>::value, "Error");
+static_assert(!std::is_constructible<const int[1], int, int>::value, "Error");
+static_assert(!std::is_constructible<int[1], void, int>::value, "Error");
+static_assert(!std::is_constructible<const int[1], void, int>::value, "Error");
+static_assert(!std::is_constructible<int[1], void, void>::value, "Error");
+static_assert(!std::is_constructible<const int[1], void, void>::value, "Error");
+static_assert(!std::is_constructible<int&, int, int>::value, "Error");
+static_assert(!std::is_constructible<int&, void, int>::value, "Error");
+static_assert(!std::is_constructible<int&, void, void>::value, "Error");
+static_assert(!std::is_constructible<int&, int&, int&>::value, "Error");
+static_assert(!std::is_constructible<int&, void, int&>::value, "Error");
+static_assert(!std::is_constructible<int&, void, void>::value, "Error");
+static_assert(!std::is_constructible<std::nullptr_t&, int, int>::value,
+ "Error");
+static_assert(!std::is_constructible<std::nullptr_t&, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<std::nullptr_t&, void, void>::value,
+ "Error");
+static_assert(!std::is_constructible<E&, int, int>::value, "Error");
+static_assert(!std::is_constructible<E&, void, int>::value, "Error");
+static_assert(!std::is_constructible<E&, void, void>::value, "Error");
+static_assert(!std::is_constructible<SE&, int, int>::value, "Error");
+static_assert(!std::is_constructible<SE&, void, int>::value, "Error");
+static_assert(!std::is_constructible<SE&, void, void>::value, "Error");
+static_assert(!std::is_constructible<OpE&, int, int>::value, "Error");
+static_assert(!std::is_constructible<OpE&, void, int>::value, "Error");
+static_assert(!std::is_constructible<OpE&, void, void>::value, "Error");
+static_assert(!std::is_constructible<OpSE&, int, int>::value, "Error");
+static_assert(!std::is_constructible<OpSE&, void, int>::value, "Error");
+static_assert(!std::is_constructible<OpSE&, void, void>::value, "Error");
+static_assert(!std::is_constructible<Empty&, int, int>::value, "Error");
+static_assert(!std::is_constructible<Empty&, void, int>::value, "Error");
+static_assert(!std::is_constructible<Empty&, void, void>::value, "Error");
+static_assert(!std::is_constructible<U&, int, int>::value, "Error");
+static_assert(!std::is_constructible<U&, void, int>::value, "Error");
+static_assert(!std::is_constructible<U&, void, void>::value, "Error");
+static_assert(!std::is_constructible<B&, int, int>::value, "Error");
+static_assert(!std::is_constructible<B&, void, int>::value, "Error");
+static_assert(!std::is_constructible<B&, void, void>::value, "Error");
+static_assert(!std::is_constructible<Any&, int, int>::value, "Error");
+static_assert(!std::is_constructible<Any&, void, int>::value, "Error");
+static_assert(!std::is_constructible<Any&, void, void>::value, "Error");
+static_assert(!std::is_constructible<nAny&, void, int>::value, "Error");
+static_assert(!std::is_constructible<nAny&, void, void>::value, "Error");
+static_assert(!std::is_constructible<FromArgs<>&, int, int>::value, "Error");
+static_assert(!std::is_constructible<FromArgs<>&, void, int>::value, "Error");
+static_assert(!std::is_constructible<FromArgs<>&, void, void>::value, "Error");
+static_assert(!std::is_constructible<Abstract&, int, int>::value, "Error");
+static_assert(!std::is_constructible<Abstract&, void, int>::value, "Error");
+static_assert(!std::is_constructible<Abstract&, void, void>::value, "Error");
+static_assert(!std::is_constructible<int(&)[1], int, int>::value, "Error");
+static_assert(!std::is_constructible<int(&)[1], void, int>::value, "Error");
+static_assert(!std::is_constructible<int(&)[1], void, void>::value, "Error");
+
+static_assert(!std::is_constructible<void(), int, int>::value, "Error");
+static_assert(!std::is_constructible<void(), void, int>::value, "Error");
+static_assert(!std::is_constructible<void(), void, void>::value, "Error");
+static_assert(!std::is_constructible<void(), void(), int>::value, "Error");
+static_assert(!std::is_constructible<void(), void(), void()>::value, "Error");
+
+static_assert(!std::is_constructible<void() const, int, int>::value, "Error");
+static_assert(!std::is_constructible<void() const, void, int>::value, "Error");
+static_assert(!std::is_constructible<void() const, void, void>::value, "Error");
+static_assert(!std::is_constructible<void() const, void() volatile,
+ int>::value, "Error");
+static_assert(!std::is_constructible<void() const, void() volatile const,
+ void() const>::value, "Error");
+
+static_assert(!std::is_constructible<FromArgs<int>, int, int>::value, "Error");
+static_assert(!std::is_constructible<const FromArgs<int>, int, int>::value,
+ "Error");
+static_assert(!std::is_constructible<FromArgs<int>, void, int>::value, "Error");
+static_assert(!std::is_constructible<const FromArgs<int>, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<FromArgs<int, int>, void, int>::value,
+ "Error");
+static_assert(!std::is_constructible<const FromArgs<int, int>, void,
+ int>::value, "Error");
+
+static_assert(!std::is_constructible<DelDtor, int, B, U>::value, "Error");
+static_assert(!std::is_constructible<const DelDtor, int, B, U>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, int>::value, "Error");
+static_assert(!std::is_constructible<const DelDtor, int>::value, "Error");
+static_assert(!std::is_constructible<DelDtor>::value, "Error");
+static_assert(!std::is_constructible<const DelDtor>::value, "Error");
+static_assert(!std::is_constructible<DelDtor, void*, void(&)()>::value,
+ "Error");
+static_assert(!std::is_constructible<const DelDtor, void*, void(&)()>::value,
+ "Error");
+
+static_assert(!std::is_constructible<AbstractDelDtor>::value, "Error");
+static_assert(!std::is_constructible<const AbstractDelDtor>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis>::value, "Error");
+static_assert(!std::is_constructible<const DelEllipsis>::value, "Error");
+static_assert(!std::is_constructible<DelEllipsis, double>::value, "Error");
+static_assert(!std::is_constructible<const DelEllipsis, double>::value,
+ "Error");
+static_assert(!std::is_constructible<DelEllipsis, double, int&>::value,
+ "Error");
+static_assert(!std::is_constructible<const DelEllipsis, double, int&>::value,
+ "Error");
+static_assert(!std::is_constructible<DelnAny>::value, "Error");
+static_assert(!std::is_constructible<const DelnAny>::value, "Error");
+static_assert(!std::is_constructible<DelnAny, int>::value, "Error");
+static_assert(!std::is_constructible<const DelnAny, int>::value, "Error");
+static_assert(!std::is_constructible<DelnAny, int, void*>::value, "Error");
+static_assert(!std::is_constructible<const DelnAny, int, void*>::value,
+ "Error");
+static_assert(!std::is_constructible<DelnAny, Empty, B, D>::value, "Error");
+static_assert(!std::is_constructible<const DelnAny, Empty, B, D>::value,
+ "Error");
+
+// Deleted members in unions with non-trivial members:
+static_assert(!std::is_constructible<NontrivialUnion>::value, "Error");
+static_assert(!std::is_constructible<NontrivialUnion,
+ const NontrivialUnion&>::value, "Error");
+
+// Unusual copy:
+static_assert(!std::is_constructible<UnusualCopy>::value, "Error");
+static_assert(!std::is_constructible<UnusualCopy, UnusualCopy>::value, "Error");
+static_assert(!std::is_constructible<UnusualCopy,
+ UnusualCopy&&>::value, "Error");
+static_assert(!std::is_constructible<UnusualCopy,
+ const UnusualCopy&>::value, "Error");
+static_assert(std::is_constructible<UnusualCopy, UnusualCopy&>::value, "Error");
+
+static_assert(std::is_constructible<FromArgs<int, char>,
+ int, char>::value, "Error");
+static_assert(std::is_constructible<const FromArgs<int, char>,
+ int, char>::value, "Error");
+static_assert(std::is_constructible<FromArgs<int, char>,
+ int, int>::value, "Error");
+static_assert(std::is_constructible<const FromArgs<int, char>,
+ int, int>::value, "Error");
+static_assert(std::is_constructible<nAny, int, int>::value, "Error");
+static_assert(std::is_constructible<const nAny, int, int>::value, "Error");
+static_assert(std::is_constructible<FromArgs<int, char>,
+ ImplicitTo<int>, ImplicitTo<char>>::value, "Error");
+static_assert(std::is_constructible<const FromArgs<int, char>,
+ ImplicitTo<int>, ImplicitTo<char>>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, int, char>::value, "Error");
+static_assert(std::is_constructible<const Ellipsis, int, char>::value, "Error");
+static_assert(std::is_constructible<Ellipsis, B, U, int&>::value, "Error");
+static_assert(std::is_constructible<const Ellipsis,
+ B, U, int&>::value, "Error");
+static_assert(std::is_constructible<nAny, B, U, int&>::value, "Error");
+static_assert(std::is_constructible<const nAny, B, U, int&>::value, "Error");
+static_assert(std::is_constructible<FromArgs<std::initializer_list<int>,
+ std::initializer_list<B>>, std::initializer_list<int>,
+ std::initializer_list<B>>::value, "Error");
+static_assert(std::is_constructible<const FromArgs<std::initializer_list<int>,
+ std::initializer_list<B>>, std::initializer_list<int>,
+ std::initializer_list<B>>::value, "Error");
+static_assert(std::is_constructible<FromArgs<std::initializer_list<int>,
+ std::initializer_list<B>>, std::initializer_list<int>&,
+ std::initializer_list<B>&>::value, "Error");
+static_assert(!std::is_constructible<FromArgs<std::initializer_list<int>&,
+ std::initializer_list<B>&>, std::initializer_list<int>,
+ std::initializer_list<B>>::value, "Error");
+
+static_assert(!std::is_constructible<FromArgs<std::initializer_list<int>>,
+ int, int>::value, "Error");
+static_assert(!std::is_constructible<const
+ FromArgs<std::initializer_list<int>>, int, int>::value, "Error");
+static_assert(!std::is_constructible<B[2], B, B>::value, "Error");
+static_assert(!std::is_constructible<const B[2], B, B>::value, "Error");
+static_assert(!std::is_constructible<U[2], U, U>::value, "Error");
+static_assert(!std::is_constructible<const U[2], U, U>::value, "Error");
+
+static_assert(!std::is_constructible<E, E, E>::value, "Error");
+static_assert(!std::is_constructible<const E, E, E>::value, "Error");
+static_assert(!std::is_constructible<SE, SE, SE>::value, "Error");
+static_assert(!std::is_constructible<const SE, SE, SE>::value, "Error");
+static_assert(!std::is_constructible<E, B, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<const E, B, std::nullptr_t>::value,
+ "Error");
+static_assert(!std::is_constructible<SE, B, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<const SE, B, std::nullptr_t>::value,
+ "Error");
+static_assert(!std::is_constructible<E, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<const E, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<SE, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<const SE, int[], int[]>::value, "Error");
+
+static_assert(!std::is_constructible<OpE, OpE, OpE>::value, "Error");
+static_assert(!std::is_constructible<const OpE, OpE, OpE>::value, "Error");
+static_assert(!std::is_constructible<OpSE, OpSE, OpSE>::value, "Error");
+static_assert(!std::is_constructible<const OpSE, OpSE, OpSE>::value, "Error");
+static_assert(!std::is_constructible<OpE, B, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<const OpE, B, std::nullptr_t>::value,
+ "Error");
+static_assert(!std::is_constructible<OpSE, B, std::nullptr_t>::value, "Error");
+static_assert(!std::is_constructible<const OpSE, B, std::nullptr_t>::value,
+ "Error");
+static_assert(!std::is_constructible<OpE, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<const OpE, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<OpSE, int[], int[]>::value, "Error");
+static_assert(!std::is_constructible<const OpSE, int[], int[]>::value, "Error");
+
+static_assert(!std::is_constructible<int[], int, int>::value, "Error");
+static_assert(!std::is_constructible<const int[], int, int>::value, "Error");
+
+static_assert(std::is_constructible<int&, ImplicitTo<int&>>::value, "Error");
+static_assert(std::is_constructible<const int&, ImplicitTo<int&&>>::value,
+ "Error");
+static_assert(std::is_constructible<int&&, ImplicitTo<int&&>>::value, "Error");
+static_assert(std::is_constructible<const int&, ImplicitTo<int>>::value,
+ "Error");
+
+static_assert(!std::is_constructible<const int&, ExplicitTo<int>>::value,
+ "Error");
+static_assert(!std::is_constructible<int&&, ExplicitTo<int>>::value, "Error");
+
+// Binding through reference-compatible type is required to perform
+// direct-initialization as described in [over.match.ref] p. 1 b. 1:
+static_assert(std::is_constructible<int&, ExplicitTo<int&>>::value, "Error");
+static_assert(std::is_constructible<const int&, ExplicitTo<int&&>>::value,
+ "Error");
+static_assert(std::is_constructible<int&&, ExplicitTo<int&&>>::value, "Error");
+
+// Binding through temporary behaves like copy-initialization,
+// see [dcl.init.ref] p. 5, very last sub-bullet:
+static_assert(!std::is_constructible<const int&, ExplicitTo<double&&>>::value,
+ "Error");
+static_assert(!std::is_constructible<int&&, ExplicitTo<double&&>>::value,
+ "Error");
+
+static_assert(std::is_constructible<void(&&)(), void(&)()>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/is_convertible/value.cc b/libstdc++-v3/testsuite/20_util/is_convertible/value.cc
index f6282a9019..92ad660718 100644
--- a/libstdc++-v3/testsuite/20_util/is_convertible/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_convertible/value.cc
@@ -2,7 +2,7 @@
// 2009-10-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -58,6 +58,8 @@ void test01()
VERIFY( (test_relationship<is_convertible, void, volatile void>(true)) );
VERIFY( (test_relationship<is_convertible, double&, ExplicitClass>(true)) );
+ VERIFY( (test_relationship<is_convertible, int(int), int(&)(int)>(true)) );
+
// Negative tests.
VERIFY( (test_relationship<is_convertible, const int*, int*>(false)) );
VERIFY( (test_relationship<is_convertible, int*, float*>(false)) );
@@ -93,8 +95,6 @@ void test01()
const volatile int&>(false)) );
VERIFY( (test_relationship<is_convertible, volatile int,
volatile int&>(false)) );
- VERIFY( (test_relationship<is_convertible, int(int), int(&)(int)>(false)) );
-
VERIFY( (test_relationship<is_convertible, int&, ExplicitClass>(false)) );
VERIFY( (test_relationship<is_convertible, void*, ExplicitClass>(false)) );
}
diff --git a/libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..7aaf37e801
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_copy_assignable<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/typedefs.cc
new file mode 100644
index 0000000000..14366213af
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_copy_assignable<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_copy_assignable/value.cc b/libstdc++-v3/testsuite/20_util/is_copy_assignable/value.cc
new file mode 100644
index 0000000000..662c834bd2
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_copy_assignable/value.cc
@@ -0,0 +1,66 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_copy_assignable;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_property<is_copy_assignable, int>(true)) );
+ VERIFY( (test_property<is_copy_assignable, float>(true)) );
+ VERIFY( (test_property<is_copy_assignable, EnumType>(true)) );
+ VERIFY( (test_property<is_copy_assignable, int*>(true)) );
+ VERIFY( (test_property<is_copy_assignable, int(*)(int)>(true)) );
+ VERIFY( (test_property<is_copy_assignable, int (ClassType::*)>(true)) );
+ VERIFY( (test_property<is_copy_assignable,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_copy_assignable, NoexceptCopyAssignClass>(true)) );
+ VERIFY( (test_property<is_copy_assignable, ExceptCopyAssignClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<is_copy_assignable, void>(false)) );
+ VERIFY( (test_property<is_copy_assignable, int[2]>(false)) );
+ VERIFY( (test_property<is_copy_assignable, float[][3]>(false)) );
+ VERIFY( (test_property<is_copy_assignable, EnumType[2][3][4]>(false)) );
+ VERIFY( (test_property<is_copy_assignable, int*[3]>(false)) );
+ VERIFY( (test_property<is_copy_assignable, int(*[][2])(int)>(false)) );
+ VERIFY( (test_property<is_copy_assignable,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_property<is_copy_assignable,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_copy_assignable, NoexceptMoveAssignClass>(false)) );
+ VERIFY( (test_property<is_copy_assignable, ExceptMoveAssignClass>(false)) );
+ VERIFY( (test_property<is_copy_assignable, DeletedCopyAssignClass>(false)) );
+ VERIFY( (test_property<is_copy_assignable, DeletedMoveAssignClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..4ff9d10251
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_copy_constructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..840a9f156d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_copy_constructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_copy_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_copy_constructible/value.cc
new file mode 100644
index 0000000000..d1c2ea6425
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_copy_constructible/value.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_copy_constructible;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_copy_constructible, int>(true)) );
+ VERIFY( (test_category<is_copy_constructible, float>(true)) );
+ VERIFY( (test_category<is_copy_constructible, EnumType>(true)) );
+ VERIFY( (test_category<is_copy_constructible, int*>(true)) );
+ VERIFY( (test_category<is_copy_constructible, int(*)(int)>(true)) );
+ VERIFY( (test_category<is_copy_constructible,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_copy_constructible,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_copy_constructible,
+ NoexceptCopyConsClass>(true)) );
+ VERIFY( (test_property<is_copy_constructible,
+ const NoexceptCopyConsClass>(true)) );
+ VERIFY( (test_property<is_copy_constructible,
+ ThrowCopyConsClass>(true)) );
+ VERIFY( (test_property<is_copy_constructible,
+ ExceptCopyConsClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_copy_constructible, void>(false)) );
+ VERIFY( (test_category<is_copy_constructible, int[2]>(false)) );
+ VERIFY( (test_category<is_copy_constructible, int[]>(false)) );
+ VERIFY( (test_category<is_copy_constructible, float[][3]>(false)) );
+ VERIFY( (test_category<is_copy_constructible,
+ EnumType[2][3][4]>(false)) );
+ VERIFY( (test_category<is_copy_constructible, int*[3]>(false)) );
+ VERIFY( (test_category<is_copy_constructible,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_category<is_copy_constructible,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_category<is_copy_constructible,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_copy_constructible,
+ volatile NoexceptCopyConsClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..dec86a94ba
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_default_constructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..b97d54f269
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_default_constructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_default_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_default_constructible/value.cc
new file mode 100644
index 0000000000..6461cb7d5f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_default_constructible/value.cc
@@ -0,0 +1,141 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <initializer_list>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test::construct_destruct;
+
+static_assert(std::is_default_constructible<int>::value, "Error");
+static_assert(std::is_default_constructible<int const>::value, "Error");
+static_assert(std::is_default_constructible<int const volatile>::value,
+ "Error");
+static_assert(std::is_default_constructible<int*>::value, "Error");
+static_assert(std::is_default_constructible<void*>::value, "Error");
+static_assert(std::is_default_constructible<void* const>::value, "Error");
+static_assert(std::is_default_constructible<int B::*>::value, "Error");
+static_assert(std::is_default_constructible<void(*)()>::value, "Error");
+static_assert(std::is_default_constructible<std::nullptr_t>::value, "Error");
+static_assert(std::is_default_constructible<std::nullptr_t const>::value,
+ "Error");
+static_assert(std::is_default_constructible<Empty>::value, "Error");
+static_assert(std::is_default_constructible<Empty const>::value, "Error");
+static_assert(std::is_default_constructible<FromArgs<>>::value, "Error");
+static_assert(std::is_default_constructible<FromArgs<> const>::value, "Error");
+static_assert(std::is_default_constructible<nAny>::value, "Error");
+static_assert(std::is_default_constructible<nAny const>::value, "Error");
+static_assert(std::is_default_constructible<Ellipsis>::value, "Error");
+static_assert(std::is_default_constructible<Ellipsis const>::value, "Error");
+static_assert(std::is_default_constructible<U>::value, "Error");
+static_assert(std::is_default_constructible<U const>::value, "Error");
+static_assert(std::is_default_constructible<E>::value, "Error");
+static_assert(std::is_default_constructible<E const>::value, "Error");
+static_assert(std::is_default_constructible<SE>::value, "Error");
+static_assert(std::is_default_constructible<SE const>::value, "Error");
+static_assert(std::is_default_constructible<OpE>::value, "Error");
+static_assert(std::is_default_constructible<OpE const>::value, "Error");
+static_assert(std::is_default_constructible<OpSE>::value, "Error");
+static_assert(std::is_default_constructible<OpSE const>::value, "Error");
+static_assert(std::is_default_constructible<int[1]>::value, "Error");
+static_assert(std::is_default_constructible<const int[1]>::value, "Error");
+static_assert(std::is_default_constructible<int[1][2]>::value, "Error");
+static_assert(std::is_default_constructible<const int[1][2]>::value, "Error");
+static_assert(std::is_default_constructible<FromArgs<>[1]>::value, "Error");
+static_assert(std::is_default_constructible<const FromArgs<>[1]>::value,
+ "Error");
+static_assert(std::is_default_constructible<U[1]>::value, "Error");
+static_assert(std::is_default_constructible<const U[1]>::value, "Error");
+static_assert(std::is_default_constructible<Empty[1]>::value, "Error");
+static_assert(std::is_default_constructible<const Empty[1]>::value, "Error");
+static_assert(std::is_default_constructible<Ellipsis[1]>::value, "Error");
+static_assert(std::is_default_constructible<const Ellipsis[1]>::value, "Error");
+static_assert(std::is_default_constructible<std::nullptr_t[1]>::value, "Error");
+static_assert(std::is_default_constructible<const std::nullptr_t[1]>::value,
+ "Error");
+static_assert(std::is_default_constructible<nAny[1]>::value, "Error");
+static_assert(std::is_default_constructible<const nAny[1]>::value, "Error");
+static_assert(std::is_default_constructible<E[1]>::value, "Error");
+static_assert(std::is_default_constructible<const E[1]>::value, "Error");
+static_assert(std::is_default_constructible<SE[1]>::value, "Error");
+static_assert(std::is_default_constructible<const SE[1]>::value, "Error");
+static_assert(std::is_default_constructible<OpE[1]>::value, "Error");
+static_assert(std::is_default_constructible<const OpE[1]>::value, "Error");
+static_assert(std::is_default_constructible<OpSE[1]>::value, "Error");
+static_assert(std::is_default_constructible<const OpSE[1]>::value, "Error");
+static_assert(std::is_default_constructible<int*[1]>::value, "Error");
+static_assert(std::is_default_constructible<int* const[1]>::value, "Error");
+static_assert(std::is_default_constructible<int B::*[1]>::value, "Error");
+static_assert(std::is_default_constructible<int B::* const[1]>::value, "Error");
+static_assert(std::is_default_constructible<std::initializer_list<int>>::value,
+ "Error");
+static_assert(std::is_default_constructible<const
+ std::initializer_list<int>>::value, "Error");
+static_assert(std::is_default_constructible<
+ std::initializer_list<int>[1]>::value, "Error");
+static_assert(std::is_default_constructible<const
+ std::initializer_list<int>[1]>::value, "Error");
+
+static_assert(std::is_default_constructible
+ <__gnu_test::NoexceptDefaultClass>::value, "Error");
+static_assert(std::is_default_constructible
+ <__gnu_test::ThrowDefaultClass>::value, "Error");
+static_assert(std::is_default_constructible
+ <__gnu_test::ExceptDefaultClass>::value, "Error");
+
+static_assert(!std::is_default_constructible<void>::value, "Error");
+static_assert(!std::is_default_constructible<const void>::value, "Error");
+static_assert(!std::is_default_constructible<Abstract>::value, "Error");
+static_assert(!std::is_default_constructible<const Abstract>::value, "Error");
+static_assert(!std::is_default_constructible<Any>::value, "Error");
+static_assert(!std::is_default_constructible<const Any>::value, "Error");
+static_assert(!std::is_default_constructible<FromArgs<int>>::value, "Error");
+static_assert(!std::is_default_constructible<const FromArgs<int>>::value,
+ "Error");
+static_assert(!std::is_default_constructible<int&>::value, "Error");
+static_assert(!std::is_default_constructible<int&&>::value, "Error");
+static_assert(!std::is_default_constructible<void()>::value, "Error");
+static_assert(!std::is_default_constructible<void() const volatile>::value,
+ "Error");
+static_assert(!std::is_default_constructible<void(&)()>::value, "Error");
+static_assert(!std::is_default_constructible<int(&)[1]>::value, "Error");
+static_assert(!std::is_default_constructible<int(&)[]>::value, "Error");
+static_assert(!std::is_default_constructible<int[]>::value, "Error");
+static_assert(!std::is_default_constructible<const int[]>::value, "Error");
+static_assert(!std::is_default_constructible<int[][1][2]>::value, "Error");
+static_assert(!std::is_default_constructible<const int[][1][2]>::value,
+ "Error");
+static_assert(!std::is_default_constructible<Any[1]>::value, "Error");
+static_assert(!std::is_default_constructible<const Any[1]>::value, "Error");
+static_assert(!std::is_default_constructible<FromArgs<int>[1]>::value, "Error");
+static_assert(!std::is_default_constructible<const FromArgs<int>[1]>::value,
+ "Error");
+static_assert(!std::is_default_constructible<
+ FromArgs<std::initializer_list<int>>>::value, "Error");
+static_assert(!std::is_default_constructible<const
+ FromArgs<std::initializer_list<int>>>::value, "Error");
+static_assert(!std::is_default_constructible<const
+ FromArgs<const std::initializer_list<int>>>::value, "Error");
+static_assert(!std::is_default_constructible<DelDef>::value, "Error");
+static_assert(!std::is_default_constructible<const DelDef>::value, "Error");
+static_assert(!std::is_default_constructible<DelCopy>::value, "Error");
+static_assert(!std::is_default_constructible<const DelCopy>::value, "Error");
+static_assert(!std::is_default_constructible<DelDtor>::value, "Error");
+static_assert(!std::is_default_constructible<const DelDtor>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/is_destructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_destructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..59b5980512
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_destructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_destructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_destructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_destructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..967842d3ea
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_destructible/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_destructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_destructible/value.cc b/libstdc++-v3/testsuite/20_util/is_destructible/value.cc
new file mode 100644
index 0000000000..b0382c6e83
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_destructible/value.cc
@@ -0,0 +1,100 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <initializer_list>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test::construct_destruct;
+
+static_assert(std::is_destructible<int>::value, "Error");
+static_assert(std::is_destructible<const int>::value, "Error");
+static_assert(std::is_destructible<bool>::value, "Error");
+static_assert(std::is_destructible<const bool>::value, "Error");
+static_assert(std::is_destructible<int*>::value, "Error");
+static_assert(std::is_destructible<void*>::value, "Error");
+static_assert(std::is_destructible<int B::*>::value, "Error");
+static_assert(std::is_destructible<const int D::*>::value, "Error");
+static_assert(std::is_destructible<E>::value, "Error");
+static_assert(std::is_destructible<const E>::value, "Error");
+static_assert(std::is_destructible<SE>::value, "Error");
+static_assert(std::is_destructible<const SE>::value, "Error");
+static_assert(std::is_destructible<OpE>::value, "Error");
+static_assert(std::is_destructible<const OpE>::value, "Error");
+static_assert(std::is_destructible<OpSE>::value, "Error");
+static_assert(std::is_destructible<const OpSE>::value, "Error");
+static_assert(std::is_destructible<std::nullptr_t>::value, "Error");
+static_assert(std::is_destructible<const std::nullptr_t>::value, "Error");
+static_assert(std::is_destructible<B>::value, "Error");
+static_assert(std::is_destructible<const B>::value, "Error");
+static_assert(std::is_destructible<D>::value, "Error");
+static_assert(std::is_destructible<const D>::value, "Error");
+static_assert(std::is_destructible<Empty>::value, "Error");
+static_assert(std::is_destructible<const Empty>::value, "Error");
+static_assert(std::is_destructible<U>::value, "Error");
+static_assert(std::is_destructible<const U>::value, "Error");
+static_assert(std::is_destructible<Abstract>::value, "Error");
+static_assert(std::is_destructible<const Abstract>::value, "Error");
+static_assert(std::is_destructible<int[1]>::value, "Error");
+static_assert(std::is_destructible<const int[1]>::value, "Error");
+static_assert(std::is_destructible<int[1][2]>::value, "Error");
+static_assert(std::is_destructible<const int[1][2]>::value, "Error");
+static_assert(std::is_destructible<int&>::value, "Error");
+static_assert(std::is_destructible<int&&>::value, "Error");
+static_assert(std::is_destructible<void(&)()>::value, "Error");
+static_assert(std::is_destructible<Ellipsis>::value, "Error");
+static_assert(std::is_destructible<const Ellipsis>::value, "Error");
+static_assert(std::is_destructible<Any>::value, "Error");
+static_assert(std::is_destructible<const Any>::value, "Error");
+static_assert(std::is_destructible<nAny>::value, "Error");
+static_assert(std::is_destructible<const nAny>::value, "Error");
+static_assert(std::is_destructible<DelDef>::value, "Error");
+static_assert(std::is_destructible<const DelDef>::value, "Error");
+static_assert(std::is_destructible<DelCopy>::value, "Error");
+static_assert(std::is_destructible<const DelCopy>::value, "Error");
+static_assert(std::is_destructible<DelEllipsis>::value, "Error");
+static_assert(std::is_destructible<const DelEllipsis>::value, "Error");
+static_assert(std::is_destructible<std::initializer_list<int>>::value,
+ "Error");
+static_assert(std::is_destructible<const std::initializer_list<int>>::value,
+ "Error");
+static_assert(std::is_destructible<void()>::value, "Error");
+static_assert(std::is_destructible<void() const>::value, "Error");
+
+static_assert(!std::is_destructible<void>::value, "Error");
+static_assert(!std::is_destructible<const void>::value, "Error");
+static_assert(!std::is_destructible<int[]>::value, "Error");
+static_assert(!std::is_destructible<const int[]>::value, "Error");
+static_assert(!std::is_destructible<DelDtor>::value, "Error");
+static_assert(!std::is_destructible<const DelDtor>::value, "Error");
+static_assert(!std::is_destructible<AbstractDelDtor>::value, "Error");
+static_assert(!std::is_destructible<const AbstractDelDtor>::value, "Error");
+static_assert(!std::is_destructible<int[][1]>::value, "Error");
+static_assert(!std::is_destructible<const int[][1]>::value, "Error");
+static_assert(!std::is_destructible<DelDtor[1]>::value, "Error");
+static_assert(!std::is_destructible<const DelDtor[1]>::value, "Error");
+static_assert(!std::is_destructible<DelDtor[]>::value, "Error");
+static_assert(!std::is_destructible<const DelDtor[]>::value, "Error");
+
+// Deleted members in unions with non-trivial members:
+static_assert(!std::is_destructible<NontrivialUnion>::value, "Error");
+
+// Unusual copy:
+static_assert(std::is_destructible<UnusualCopy>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/is_floating_point/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_floating_point/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..cbfd12e8f3
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_floating_point/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_floating_point<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_floating_point/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_floating_point/requirements/typedefs.cc
new file mode 100644
index 0000000000..b878ffb03d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_floating_point/requirements/typedefs.cc
@@ -0,0 +1,35 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_floating_point<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc b/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
new file mode 100644
index 0000000000..df9cfcaa5b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
@@ -0,0 +1,68 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_floating_point;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_floating_point, void>(false)) );
+ VERIFY( (test_category<is_floating_point, char>(false)) );
+ VERIFY( (test_category<is_floating_point, signed char>(false)) );
+ VERIFY( (test_category<is_floating_point, unsigned char>(false)) );
+#ifdef _GLIBCXX_USE_WCHAR_T
+ VERIFY( (test_category<is_floating_point, wchar_t>(false)) );
+#endif
+ VERIFY( (test_category<is_floating_point, short>(false)) );
+ VERIFY( (test_category<is_floating_point, unsigned short>(false)) );
+ VERIFY( (test_category<is_floating_point, int>(false)) );
+ VERIFY( (test_category<is_floating_point, unsigned int>(false)) );
+ VERIFY( (test_category<is_floating_point, long>(false)) );
+ VERIFY( (test_category<is_floating_point, unsigned long>(false)) );
+ VERIFY( (test_category<is_floating_point, long long>(false)) );
+ VERIFY( (test_category<is_floating_point, unsigned long long>(false)) );
+
+ VERIFY( (test_category<is_floating_point, float>(true)) );
+ VERIFY( (test_category<is_floating_point, double>(true)) );
+ VERIFY( (test_category<is_floating_point, long double>(true)) );
+
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_FLOAT128
+ VERIFY( (test_category<is_floating_point, __float128>(true)) );
+#endif
+
+#ifdef _GLIBCXX_USE_INT128
+ VERIFY( (test_category<is_floating_point, __int128>(false)) );
+ VERIFY( (test_category<is_floating_point, unsigned __int128>(false)) );
+#endif
+
+ // Sanity check.
+ VERIFY( (test_category<is_floating_point, ClassType>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_function/24808.cc b/libstdc++-v3/testsuite/20_util/is_function/24808.cc
new file mode 100644
index 0000000000..38358e550e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_function/24808.cc
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+// libstdc++/24808
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_function;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_function, IncompleteClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_function/35637.cc b/libstdc++-v3/testsuite/20_util/is_function/35637.cc
new file mode 100644
index 0000000000..52686fbcaf
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_function/35637.cc
@@ -0,0 +1,32 @@
+// { dg-options "-std=gnu++0x -pedantic-errors" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <functional>
+
+struct S
+{
+ void F() const {}
+};
+
+// libstdc++/35637
+void test01()
+{
+ std::function<void (S *)> a(&S::F);
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_function/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_function/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..dc340d769c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_function/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_function<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_function/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_function/requirements/typedefs.cc
new file mode 100644
index 0000000000..5b5e35f3af
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_function/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_function<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_function/value.cc b/libstdc++-v3/testsuite/20_util/is_function/value.cc
new file mode 100644
index 0000000000..5f576eb757
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_function/value.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_function;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_function, int (int)>(true)) );
+ VERIFY( (test_category<is_function, ClassType (ClassType)>(true)) );
+ VERIFY( (test_category<is_function, float (int, float, int[], int&)>(true)) );
+ VERIFY( (test_category<is_function, int (int, ...)>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_function, int&>(false)) );
+ VERIFY( (test_category<is_function, void>(false)) );
+ VERIFY( (test_category<is_function, const void>(false)) );
+
+ VERIFY( (test_category<is_function, AbstractClass>(false)) );
+ VERIFY( (test_category<is_function, int(&)(int)>(false)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_function, ClassType>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_fundamental/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_fundamental/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..b16826172b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_fundamental/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_fundamental<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_fundamental/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_fundamental/requirements/typedefs.cc
new file mode 100644
index 0000000000..efb672eaad
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_fundamental/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_fundamental<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_fundamental/value.cc b/libstdc++-v3/testsuite/20_util/is_fundamental/value.cc
new file mode 100644
index 0000000000..83091a148f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_fundamental/value.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_fundamental;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_fundamental, void>(true)) );
+ VERIFY( (test_category<is_fundamental, char>(true)) );
+ VERIFY( (test_category<is_fundamental, signed char>(true)) );
+ VERIFY( (test_category<is_fundamental, unsigned char>(true)) );
+#ifdef _GLIBCXX_USE_WCHAR_T
+ VERIFY( (test_category<is_fundamental, wchar_t>(true)) );
+#endif
+ VERIFY( (test_category<is_fundamental, short>(true)) );
+ VERIFY( (test_category<is_fundamental, unsigned short>(true)) );
+ VERIFY( (test_category<is_fundamental, int>(true)) );
+ VERIFY( (test_category<is_fundamental, unsigned int>(true)) );
+ VERIFY( (test_category<is_fundamental, long>(true)) );
+ VERIFY( (test_category<is_fundamental, unsigned long>(true)) );
+ VERIFY( (test_category<is_fundamental, long long>(true)) );
+ VERIFY( (test_category<is_fundamental, unsigned long long>(true)) );
+ VERIFY( (test_category<is_fundamental, float>(true)) );
+ VERIFY( (test_category<is_fundamental, double>(true)) );
+ VERIFY( (test_category<is_fundamental, long double>(true)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_fundamental, ClassType>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_integral/value.cc b/libstdc++-v3/testsuite/20_util/is_integral/value.cc
index 6b1717b381..d085f92358 100644
--- a/libstdc++-v3/testsuite/20_util/is_integral/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_integral/value.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// 2008-05-20 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -51,6 +51,16 @@ void test01()
VERIFY( (test_category<is_integral, double>(false)) );
VERIFY( (test_category<is_integral, long double>(false)) );
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ VERIFY( (test_category<is_integral, __int128>(true)) );
+ VERIFY( (test_category<is_integral, unsigned __int128>(true)) );
+#endif
+
+#ifdef _GLIBCXX_USE_FLOAT128
+ VERIFY( (test_category<is_integral, __float128>(false)) );
+#endif
+
// Sanity check.
VERIFY( (test_category<is_integral, ClassType>(false)) );
}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..304efcca22
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_member_function_pointer<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/typedefs.cc
new file mode 100644
index 0000000000..2efcdda363
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_member_function_pointer<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_function_pointer/value.cc b/libstdc++-v3/testsuite/20_util/is_member_function_pointer/value.cc
new file mode 100644
index 0000000000..d09c7ca17a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_function_pointer/value.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_member_function_pointer;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_member_function_pointer,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<is_member_function_pointer,
+ int (ClassType::*) (int) const>(true)) );
+ VERIFY( (test_category<is_member_function_pointer,
+ int (ClassType::*) (float, ...)>(true)) );
+ VERIFY( (test_category<is_member_function_pointer,
+ ClassType (ClassType::*) (ClassType)>(true)) );
+ VERIFY( (test_category<is_member_function_pointer,
+ float (ClassType::*) (int, float, int[], int&)>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_member_function_pointer,
+ int (ClassType::*)>(false)) );
+ VERIFY( (test_category<is_member_function_pointer,
+ const int (ClassType::*)>(false)) );
+ VERIFY( (test_category<is_member_function_pointer,
+ ClassType (ClassType::*)>(false)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_member_function_pointer, ClassType>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..5d2b686adf
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_member_object_pointer<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/typedefs.cc
new file mode 100644
index 0000000000..13c94b7b47
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_member_object_pointer<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_object_pointer/value.cc b/libstdc++-v3/testsuite/20_util/is_member_object_pointer/value.cc
new file mode 100644
index 0000000000..2e004e33c7
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_object_pointer/value.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_member_object_pointer;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_member_object_pointer,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_member_object_pointer,
+ const int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_member_object_pointer,
+ ClassType (ClassType::*)>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_member_object_pointer,
+ int (ClassType::*) (int)>(false)) );
+ VERIFY( (test_category<is_member_object_pointer,
+ int (ClassType::*) (int) const>(false)) );
+ VERIFY( (test_category<is_member_object_pointer,
+ int (ClassType::*) (float, ...)>(false)) );
+ VERIFY( (test_category<is_member_object_pointer,
+ ClassType (ClassType::*) (ClassType)>(false)) );
+ VERIFY( (test_category<is_member_object_pointer,
+ float (ClassType::*) (int, float, int[], int&)>(false)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_member_object_pointer, ClassType>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..f94959e07b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_member_pointer<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/typedefs.cc
new file mode 100644
index 0000000000..9491ee868f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_member_pointer<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_member_pointer/value.cc b/libstdc++-v3/testsuite/20_util/is_member_pointer/value.cc
new file mode 100644
index 0000000000..fff9710d5d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_member_pointer/value.cc
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_member_pointer;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_member_pointer, int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_member_pointer, const int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_member_pointer, ClassType (ClassType::*)>(true)) );
+
+ VERIFY( (test_category<is_member_pointer,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<is_member_pointer,
+ int (ClassType::*) (int) const>(true)) );
+ VERIFY( (test_category<is_member_pointer,
+ int (ClassType::*) (float, ...)>(true)) );
+ VERIFY( (test_category<is_member_pointer,
+ ClassType (ClassType::*) (ClassType)>(true)) );
+ VERIFY( (test_category<is_member_pointer,
+ float (ClassType::*) (int, float, int[], int&)>(true)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_member_pointer, ClassType>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..e85a746430
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_move_assignable<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/typedefs.cc
new file mode 100644
index 0000000000..23b8aa8165
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_move_assignable<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_move_assignable/value.cc b/libstdc++-v3/testsuite/20_util/is_move_assignable/value.cc
new file mode 100644
index 0000000000..a7dff82e0b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_move_assignable/value.cc
@@ -0,0 +1,66 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_move_assignable;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_property<is_move_assignable, int>(true)) );
+ VERIFY( (test_property<is_move_assignable, float>(true)) );
+ VERIFY( (test_property<is_move_assignable, EnumType>(true)) );
+ VERIFY( (test_property<is_move_assignable, int*>(true)) );
+ VERIFY( (test_property<is_move_assignable, int(*)(int)>(true)) );
+ VERIFY( (test_property<is_move_assignable, int (ClassType::*)>(true)) );
+ VERIFY( (test_property<is_move_assignable,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_move_assignable, NoexceptMoveAssignClass>(true)) );
+ VERIFY( (test_property<is_move_assignable, ExceptMoveAssignClass>(true)) );
+ VERIFY( (test_property<is_move_assignable, NoexceptCopyAssignClass>(true)) );
+ VERIFY( (test_property<is_move_assignable, ExceptCopyAssignClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<is_move_assignable, void>(false)) );
+ VERIFY( (test_property<is_move_assignable, int[2]>(false)) );
+ VERIFY( (test_property<is_move_assignable, float[][3]>(false)) );
+ VERIFY( (test_property<is_move_assignable, EnumType[2][3][4]>(false)) );
+ VERIFY( (test_property<is_move_assignable, int*[3]>(false)) );
+ VERIFY( (test_property<is_move_assignable, int(*[][2])(int)>(false)) );
+ VERIFY( (test_property<is_move_assignable,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_property<is_move_assignable,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_move_assignable, DeletedCopyAssignClass>(false)) );
+ VERIFY( (test_property<is_move_assignable, DeletedMoveAssignClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..2d67b20767
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_move_constructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..76208d8ba1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_move_constructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_move_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_move_constructible/value.cc
new file mode 100644
index 0000000000..623359a461
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_move_constructible/value.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_move_constructible;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_move_constructible, int>(true)) );
+ VERIFY( (test_category<is_move_constructible, float>(true)) );
+ VERIFY( (test_category<is_move_constructible, EnumType>(true)) );
+ VERIFY( (test_category<is_move_constructible, int*>(true)) );
+ VERIFY( (test_category<is_move_constructible, int(*)(int)>(true)) );
+ VERIFY( (test_category<is_move_constructible,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_move_constructible,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_move_constructible,
+ NoexceptMoveConsClass>(true)) );
+ VERIFY( (test_property<is_move_constructible,
+ ThrowMoveConsClass>(true)) );
+ VERIFY( (test_property<is_move_constructible,
+ ExceptMoveConsClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_move_constructible, void>(false)) );
+ VERIFY( (test_category<is_move_constructible, int[2]>(false)) );
+ VERIFY( (test_category<is_move_constructible, int[]>(false)) );
+ VERIFY( (test_category<is_move_constructible, float[][3]>(false)) );
+ VERIFY( (test_category<is_move_constructible,
+ EnumType[2][3][4]>(false)) );
+ VERIFY( (test_category<is_move_constructible, int*[3]>(false)) );
+ VERIFY( (test_category<is_move_constructible,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_category<is_move_constructible,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_category<is_move_constructible,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_move_constructible,
+ const NoexceptMoveConsClass>(false)) );
+ VERIFY( (test_property<is_move_constructible,
+ volatile NoexceptMoveConsClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..d3ebe8b1f7
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/explicit_instantiation.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_assignable<test_type, test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc
new file mode 100644
index 0000000000..7baeb6f0aa
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_assignable<int, int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/value.cc
new file mode 100644
index 0000000000..6414faf0e4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_assignable/value.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_assignable;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_relationship<is_nothrow_assignable, int&, int>(true)) );
+ VERIFY( (test_relationship<is_nothrow_assignable, int&, const int>(true)) );
+
+ VERIFY( (test_relationship<is_nothrow_assignable,
+ NoexceptCopyAssignClass&, const NoexceptCopyAssignClass&>(true)) );
+ VERIFY( (test_relationship<is_nothrow_assignable,
+ NoexceptMoveAssignClass&, NoexceptMoveAssignClass&&>(true)) );
+ VERIFY( (test_relationship<is_nothrow_assignable,
+ NoexceptCopyAssignClass&, NoexceptCopyAssignClass&&>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_relationship<is_nothrow_assignable, int, int>(false)) );
+ VERIFY( (test_relationship<is_nothrow_assignable, int, const int>(false)) );
+
+ VERIFY( (test_relationship<is_nothrow_assignable,
+ ExceptCopyAssignClass&, const ExceptCopyAssignClass&>(false)) );
+ VERIFY( (test_relationship<is_nothrow_assignable,
+ ExceptMoveAssignClass&, ExceptMoveAssignClass&&>(false)) );
+ VERIFY( (test_relationship<is_nothrow_assignable,
+ NoexceptMoveAssignClass&, const NoexceptMoveAssignClass&>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
index b3246fad11..a77fa6c8b9 100644
--- a/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
@@ -2,7 +2,7 @@
// 2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -43,6 +43,8 @@ void test01()
VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass,
double&, int&, double&>(true)) );
+ VERIFY( (test_property<is_nothrow_constructible, int[1]>(true)) );
+
// Negative tests.
VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass,
void*>(false)) );
@@ -69,6 +71,8 @@ void test01()
int&>(false)) );
VERIFY( (test_property<is_nothrow_constructible, ThrowExplicitClass,
double&, int&, double&>(false)) );
+
+ VERIFY( (test_property<is_nothrow_constructible, int[]>(false)) );
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..406c60036f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_copy_assignable<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/typedefs.cc
new file mode 100644
index 0000000000..52876fe31a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_copy_assignable<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/value.cc
new file mode 100644
index 0000000000..f008bfca7c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/value.cc
@@ -0,0 +1,75 @@
+// { dg-options "-std=gnu++0x" }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_copy_assignable;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_property<is_nothrow_copy_assignable, int>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, float>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, EnumType>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, int*>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, int(*)(int)>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ NoexceptCopyAssignClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<is_nothrow_copy_assignable, void>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, int[2]>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, float[][3]>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ EnumType[2][3][4]>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable, int*[3]>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ ExceptCopyAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ NoexceptMoveAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ ExceptMoveAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ DeletedCopyAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_assignable,
+ DeletedMoveAssignClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..39ab86b664
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_copy_constructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..320010b1c4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2007, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_copy_constructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/value.cc
new file mode 100644
index 0000000000..2c279967cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/value.cc
@@ -0,0 +1,74 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_copy_constructible;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_nothrow_copy_constructible, int>(true)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, float>(true)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, EnumType>(true)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, int*>(true)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, int(*)(int)>(true)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_nothrow_copy_constructible,
+ NoexceptCopyConsClass>(true)) );
+ VERIFY( (test_property<is_nothrow_copy_constructible,
+ const NoexceptCopyConsClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_nothrow_copy_constructible, void>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, int[2]>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, int[]>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, float[][3]>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible,
+ EnumType[2][3][4]>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible, int*[3]>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_category<is_nothrow_copy_constructible,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_nothrow_copy_constructible,
+ volatile NoexceptCopyConsClass>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_constructible,
+ ThrowCopyConsClass>(false)) );
+ VERIFY( (test_property<is_nothrow_copy_constructible,
+ ExceptCopyConsClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..2c7e2df5e5
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_default_constructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..0c0fd6426d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2007, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_default_constructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/value.cc
new file mode 100644
index 0000000000..d806cf1cf0
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/value.cc
@@ -0,0 +1,74 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_default_constructible;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_nothrow_default_constructible, int>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, float>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, EnumType>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, int*>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ int(*)(int)>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, int[2]>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ EnumType[2][3][4]>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, int*[3]>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, ClassType>(true)) );
+
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ NoexceptDefaultClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_nothrow_default_constructible, void>(false)) );
+ VERIFY( (test_category<is_nothrow_default_constructible, int[]>(false)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ float[][3]>(false)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ ThrowDefaultClass>(false)) );
+ VERIFY( (test_category<is_nothrow_default_constructible,
+ ExceptDefaultClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..c360102128
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_move_assignable<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/typedefs.cc
new file mode 100644
index 0000000000..33e0cba43d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_move_assignable<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/value.cc
new file mode 100644
index 0000000000..3eec9b086d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/value.cc
@@ -0,0 +1,75 @@
+// { dg-options "-std=gnu++0x" }
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_move_assignable;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_property<is_nothrow_move_assignable, int>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, float>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, EnumType>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, int*>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, int(*)(int)>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ NoexceptMoveAssignClass>(true)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ NoexceptCopyAssignClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<is_nothrow_move_assignable, void>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, int[2]>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, float[][3]>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ EnumType[2][3][4]>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable, int*[3]>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ ExceptMoveAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ ExceptCopyAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ DeletedMoveAssignClass>(false)) );
+ VERIFY( (test_property<is_nothrow_move_assignable,
+ DeletedCopyAssignClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..bca081b230
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_move_constructible<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/typedefs.cc
new file mode 100644
index 0000000000..13a0e3ee8d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/typedefs.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_move_constructible<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/value.cc
new file mode 100644
index 0000000000..b154f787a3
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/value.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_move_constructible;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_category<is_nothrow_move_constructible, int>(true)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, float>(true)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, EnumType>(true)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, int*>(true)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, int(*)(int)>(true)) );
+ VERIFY( (test_category<is_nothrow_move_constructible,
+ int (ClassType::*)>(true)) );
+ VERIFY( (test_category<is_nothrow_move_constructible,
+ int (ClassType::*) (int)>(true)) );
+
+ VERIFY( (test_property<is_nothrow_move_constructible,
+ NoexceptMoveConsClass>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_category<is_nothrow_move_constructible, void>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, int[2]>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, int[]>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, float[][3]>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible,
+ EnumType[2][3][4]>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible, int*[3]>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible,
+ int(*[][2])(int)>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible,
+ int (ClassType::*[2][3])>(false)) );
+ VERIFY( (test_category<is_nothrow_move_constructible,
+ int (ClassType::*[][2][3]) (int)>(false)) );
+
+ VERIFY( (test_property<is_nothrow_move_constructible,
+ const NoexceptMoveConsClass>(false)) );
+ VERIFY( (test_property<is_nothrow_move_constructible,
+ volatile NoexceptMoveConsClass>(false)) );
+ VERIFY( (test_property<is_nothrow_move_constructible,
+ ThrowMoveConsClass>(false)) );
+ VERIFY( (test_property<is_nothrow_move_constructible,
+ ExceptMoveConsClass>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_object/24808.cc b/libstdc++-v3/testsuite/20_util/is_object/24808.cc
new file mode 100644
index 0000000000..f1fd168a1b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_object/24808.cc
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+// libstdc++/24808
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_object;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_object, IncompleteClass>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_object/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_object/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..6ee7c4e5a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_object/requirements/explicit_instantiation.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_object<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_object/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_object/requirements/typedefs.cc
new file mode 100644
index 0000000000..bec0a8cbd4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_object/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_object<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_object/value.cc b/libstdc++-v3/testsuite/20_util/is_object/value.cc
new file mode 100644
index 0000000000..b3d8df6966
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_object/value.cc
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_object;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<is_object, int (int)>(false)) );
+ VERIFY( (test_category<is_object, ClassType (ClassType)>(false)) );
+ VERIFY( (test_category<is_object, float (int, float, int[], int&)>(false)) );
+ VERIFY( (test_category<is_object, int&>(false)) );
+ VERIFY( (test_category<is_object, ClassType&>(false)) );
+ VERIFY( (test_category<is_object, int(&)(int)>(false)) );
+ VERIFY( (test_category<is_object, void>(false)) );
+ VERIFY( (test_category<is_object, const void>(false)) );
+
+ // Sanity check.
+ VERIFY( (test_category<is_object, ClassType>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_signed/value.cc b/libstdc++-v3/testsuite/20_util/is_signed/value.cc
index 194e268b68..d6394ff503 100644
--- a/libstdc++-v3/testsuite/20_util/is_signed/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_signed/value.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// 2005-01-24 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,6 +49,16 @@ void test01()
VERIFY( (test_category<is_signed, double>(true)) );
VERIFY( (test_category<is_signed, long double>(true)) );
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ VERIFY( (test_category<is_signed, __int128>(true)) );
+ VERIFY( (test_category<is_signed, unsigned __int128>(false)) );
+#endif
+
+#ifdef _GLIBCXX_USE_FLOAT128
+ VERIFY( (test_category<is_signed, __float128>(true)) );
+#endif
+
// Sanity check.
VERIFY( (test_category<is_signed, ClassType>(false)) );
}
diff --git a/libstdc++-v3/testsuite/20_util/is_unsigned/value.cc b/libstdc++-v3/testsuite/20_util/is_unsigned/value.cc
index 5163cf975b..41e05871a7 100644
--- a/libstdc++-v3/testsuite/20_util/is_unsigned/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_unsigned/value.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// 2005-01-24 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,6 +49,16 @@ void test01()
VERIFY( (test_category<is_unsigned, double>(false)) );
VERIFY( (test_category<is_unsigned, long double>(false)) );
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ VERIFY( (test_category<is_unsigned, unsigned __int128>(true)) );
+ VERIFY( (test_category<is_unsigned, __int128>(false)) );
+#endif
+
+#ifdef _GLIBCXX_USE_FLOAT128
+ VERIFY( (test_category<is_unsigned, __float128>(false)) );
+#endif
+
// Sanity check.
VERIFY( (test_category<is_unsigned, ClassType>(false)) );
}
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
index 6c21a1e753..73cfddccb3 100644
--- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
@@ -2,7 +2,7 @@
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,9 +53,18 @@ void test01()
#endif
// Chapter 48, chapter 20. Smallest rank such that new signed type same size.
- typedef make_signed<test_enum>::type test25_type;
- VERIFY( is_signed<test25_type>::value );
- VERIFY( sizeof(test25_type) == sizeof(test_enum) );
+ typedef make_signed<test_enum>::type test24_type;
+ VERIFY( is_signed<test24_type>::value );
+ VERIFY( sizeof(test24_type) == sizeof(test_enum) );
+
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ typedef make_signed<unsigned __int128>::type test25_type;
+ VERIFY( (is_same<test25_type, __int128>::value) );
+
+ typedef make_signed<__int128>::type test26_type;
+ VERIFY( (is_same<test26_type, __int128>::value) );
+#endif
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
index cb40b7bff0..9bebef271d 100644
--- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
@@ -1,9 +1,9 @@
// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
+// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi* } }
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,8 +53,17 @@ void test01()
VERIFY( (is_same<test23_type, volatile signed wchar_t>::value) );
#endif
- typedef make_signed<test_enum>::type test25_type;
- VERIFY( (is_same<test25_type, short>::value) );
+ typedef make_signed<test_enum>::type test24_type;
+ VERIFY( (is_same<test24_type, short>::value) );
+
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ typedef make_signed<unsigned __int128>::type test25_type;
+ VERIFY( (is_same<test25_type, __int128>::value) );
+
+ typedef make_signed<__int128>::type test26_type;
+ VERIFY( (is_same<test26_type, __int128>::value) );
+#endif
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
index 5179abfeb0..d2ebf16531 100644
--- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
@@ -3,7 +3,7 @@
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -43,10 +43,10 @@ void test01()
}
// { dg-error "does not name a type" "" { target *-*-* } 33 }
-// { dg-error "instantiated from here" "" { target *-*-* } 35 }
-// { dg-error "instantiated from here" "" { target *-*-* } 37 }
-// { dg-error "instantiated from here" "" { target *-*-* } 40 }
-// { dg-error "instantiated from here" "" { target *-*-* } 42 }
+// { dg-error "required from here" "" { target *-*-* } 35 }
+// { dg-error "required from here" "" { target *-*-* } 37 }
+// { dg-error "required from here" "" { target *-*-* } 40 }
+// { dg-error "required from here" "" { target *-*-* } 42 }
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1097 }
-// { dg-error "declaration of" "" { target *-*-* } 1061 }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1565 }
+// { dg-error "declaration of" "" { target *-*-* } 1529 }
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
index 9d96d5b897..44399851a1 100644
--- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
@@ -2,7 +2,7 @@
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -54,9 +54,18 @@ void test01()
// Chapter 48, chapter 20. Smallest rank such that new unsigned type
// same size.
- typedef make_unsigned<test_enum>::type test25_type;
- VERIFY( is_unsigned<test25_type>::value );
- VERIFY( sizeof(test25_type) == sizeof(test_enum) );
+ typedef make_unsigned<test_enum>::type test24_type;
+ VERIFY( is_unsigned<test24_type>::value );
+ VERIFY( sizeof(test24_type) == sizeof(test_enum) );
+
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ typedef make_unsigned<unsigned __int128>::type test25_type;
+ VERIFY( (is_same<test25_type, unsigned __int128>::value) );
+
+ typedef make_unsigned<__int128>::type test26_type;
+ VERIFY( (is_same<test26_type, unsigned __int128>::value) );
+#endif
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
index d71c012822..3a80439a9d 100644
--- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
@@ -1,9 +1,9 @@
// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
+// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi* } }
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,8 +53,17 @@ void test01()
VERIFY( (is_same<test23_type, volatile wchar_t>::value) );
#endif
- typedef make_unsigned<test_enum>::type test25_type;
- VERIFY( (is_same<test25_type, unsigned short>::value) );
+ typedef make_unsigned<test_enum>::type test24_type;
+ VERIFY( (is_same<test24_type, unsigned short>::value) );
+
+ // GNU Extensions.
+#ifdef _GLIBCXX_USE_INT128
+ typedef make_unsigned<unsigned __int128>::type test25_type;
+ VERIFY( (is_same<test25_type, unsigned __int128>::value) );
+
+ typedef make_unsigned<__int128>::type test26_type;
+ VERIFY( (is_same<test26_type, unsigned __int128>::value) );
+#endif
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
index 1a1724d74b..c0ef55bd25 100644
--- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
@@ -43,10 +43,10 @@ void test01()
}
// { dg-error "does not name a type" "" { target *-*-* } 33 }
-// { dg-error "instantiated from here" "" { target *-*-* } 35 }
-// { dg-error "instantiated from here" "" { target *-*-* } 37 }
-// { dg-error "instantiated from here" "" { target *-*-* } 40 }
-// { dg-error "instantiated from here" "" { target *-*-* } 42 }
+// { dg-error "required from here" "" { target *-*-* } 35 }
+// { dg-error "required from here" "" { target *-*-* } 37 }
+// { dg-error "required from here" "" { target *-*-* } 40 }
+// { dg-error "required from here" "" { target *-*-* } 42 }
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1020 }
-// { dg-error "declaration of" "" { target *-*-* } 984 }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1483 }
+// { dg-error "declaration of" "" { target *-*-* } 1447 }
diff --git a/libstdc++-v3/testsuite/20_util/monotonic_clock/constexpr_data.cc b/libstdc++-v3/testsuite/20_util/monotonic_clock/constexpr_data.cc
deleted file mode 100644
index 34477ea183..0000000000
--- a/libstdc++-v3/testsuite/20_util/monotonic_clock/constexpr_data.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// { dg-do compile }
-// { dg-options "-std=gnu++0x" }
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <chrono>
-#include <testsuite_common_types.h>
-
-namespace __gnu_test
-{
- struct constexpr_member_data
- {
- template<typename _Ttesttype>
- void
- operator()()
- {
- struct _Concept
- {
- void __constraint()
- {
- constexpr auto v1 __attribute__((unused))
- = _Ttesttype::is_monotonic;
- }
- };
-
- _Concept c;
- c.__constraint();
- }
- };
-}
-
-int main()
-{
- __gnu_test::constexpr_member_data test;
- test.operator()<std::chrono::monotonic_clock>();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc b/libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc
new file mode 100644
index 0000000000..f7169b0e85
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc
@@ -0,0 +1,119 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-04-27 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+#include <testsuite_hooks.h>
+
+struct noexcept_move_copy
+{
+ noexcept_move_copy()
+ : status(true)
+ { };
+
+ noexcept_move_copy(noexcept_move_copy&& r) noexcept
+ { r.status = false; };
+
+ noexcept_move_copy(const noexcept_move_copy&) = default;
+
+ operator bool() { return status; }
+
+private:
+ bool status;
+};
+
+struct noexcept_move_no_copy
+{
+ noexcept_move_no_copy()
+ : status(true)
+ { };
+
+ noexcept_move_no_copy(noexcept_move_no_copy&& r) noexcept
+ { r.status = false; };
+
+ noexcept_move_no_copy(const noexcept_move_no_copy&) = delete;
+
+ operator bool() { return status; }
+
+private:
+ bool status;
+};
+
+struct except_move_copy
+{
+ except_move_copy()
+ : status(true)
+ { };
+
+ except_move_copy(except_move_copy&& r) noexcept(false)
+ { r.status = false; };
+
+ except_move_copy(const except_move_copy&) = default;
+
+ operator bool() { return status; }
+
+private:
+ bool status;
+};
+
+struct except_move_no_copy
+{
+ except_move_no_copy()
+ : status(true)
+ { };
+
+ except_move_no_copy(except_move_no_copy&& r) noexcept(false)
+ { r.status = false; };
+
+ except_move_no_copy(const except_move_no_copy&) = delete;
+
+ operator bool() { return status; }
+
+private:
+ bool status;
+};
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ noexcept_move_copy nemc1;
+ auto nemc2 __attribute__((unused)) = std::move_if_noexcept(nemc1);
+ VERIFY( nemc1 == false );
+
+ noexcept_move_no_copy nemnc1;
+ auto nemnc2 __attribute__((unused)) = std::move_if_noexcept(nemnc1);
+ VERIFY( nemnc1 == false );
+
+ except_move_copy emc1;
+ auto emc2 __attribute__((unused)) = std::move_if_noexcept(emc1);
+ VERIFY( emc1 == true );
+
+ except_move_no_copy emnc1;
+ auto emnc2 __attribute__((unused)) = std::move_if_noexcept(emnc1);
+ VERIFY( emnc1 == false );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/move_if_noexcept/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/move_if_noexcept/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..37ea6d6ef9
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/move_if_noexcept/requirements/explicit_instantiation.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2011-04-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing utility with NO OTHER INCLUDES.
+
+#include <utility>
+
+namespace std
+{
+ typedef short test_type;
+
+ template
+ std::conditional<(!std::is_nothrow_move_constructible<test_type>::value
+ && std::is_copy_constructible<test_type>::value),
+ const test_type&, test_type&&>::type
+ move_if_noexcept(test_type&);
+}
diff --git a/libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
index 1c854627ed..9b812390d9 100644
--- a/libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
+++ b/libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,17 +23,33 @@
int main()
{
+ typedef std::pair<int, int> pair_type;
+
__gnu_test::constexpr_default_constructible test1;
- test1.operator()<std::pair<int, int>>();
+ test1.operator()<pair_type>();
__gnu_test::constexpr_single_value_constructible test2;
- test2.operator()<std::pair<int, int>, std::pair<int, int>>();
- test2.operator()<std::pair<int, int>, std::pair<short, short>>();
+ test2.operator()<pair_type, pair_type>();
+ test2.operator()<pair_type, std::pair<short, short>>();
// test 3
const int i1(129);
const int i2(6);
- constexpr std::pair<int, int> p3(i1, i2);
+ constexpr pair_type p0(i1, i2);
+
+ // test 4
+ constexpr int i(999);
+ constexpr pair_type p1 { 44, 90 };
+ constexpr pair_type p2 { std::move(p1.first), i };
+ constexpr pair_type p3 { i, std::move(p1.second) };
+
+ constexpr pair_type p5 { 444, 904 };
+ constexpr pair_type p6 { std::move(p5.first), std::move(p5.second) };
+
+ constexpr std::pair<char, char> p8 { 'a', 'z' };
+ constexpr pair_type p9(std::move(p8));
+
+ constexpr pair_type p10(std::move(p0));
return 0;
}
diff --git a/libstdc++-v3/testsuite/20_util/pair/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/20_util/pair/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..911bb92e7f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/cons/noexcept_move_construct.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test;
+
+typedef std::pair<int, int> tt1;
+typedef std::pair<int, double> tt2;
+typedef std::pair<NoexceptMoveConsClass,
+ NoexceptMoveConsClass> tt3;
+typedef std::pair<ExceptMoveConsClass, ExceptMoveConsClass> tt4;
+typedef std::pair<ExceptMoveConsClass, double> tt5;
+typedef std::pair<NoexceptMoveConsClass,
+ ExceptMoveConsClass> tt6;
+
+static_assert(std::is_nothrow_move_constructible<tt1>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt2>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt3>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt4>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt5>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt6>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/pair/constexpr_get.cc b/libstdc++-v3/testsuite/20_util/pair/constexpr_get.cc
new file mode 100644
index 0000000000..c72f049ac6
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/constexpr_get.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+
+std::pair<int, int> pi;
+const std::pair<int, int> cpi;
+
+constexpr const int& cri = std::get<0>(cpi);
+constexpr int& ri = std::get<0>(pi);
+constexpr int&& rri = std::get<0>(std::move(pi));
diff --git a/libstdc++-v3/testsuite/20_util/pair/get.cc b/libstdc++-v3/testsuite/20_util/pair/get.cc
new file mode 100644
index 0000000000..3b68a1f9bd
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/get.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-16 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+
+void test01()
+{
+ std::pair<float, int> p;
+
+ float&& pfirst __attribute__((unused)) = std::get<0>(std::move(p));
+ int&& psecond __attribute__((unused)) = std::get<1>(std::move(p));
+}
diff --git a/libstdc++-v3/testsuite/20_util/pair/make_pair/constexpr.cc b/libstdc++-v3/testsuite/20_util/pair/make_pair/constexpr.cc
new file mode 100644
index 0000000000..749c61b815
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/make_pair/constexpr.cc
@@ -0,0 +1,41 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NOTE: This makes use of the fact that we know how moveable
+// is implemented on pair, and also vector. If the implementation
+// changes this test may begin to fail.
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+void
+test1()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::pair<int, float> pair_type;
+ constexpr pair_type p1 __attribute__((unused)) = std::make_pair(22, 22.222);
+}
+
+int
+main()
+{
+ test1();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/pair/noexcept_move_assign.cc b/libstdc++-v3/testsuite/20_util/pair/noexcept_move_assign.cc
new file mode 100644
index 0000000000..ee8edca551
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/noexcept_move_assign.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test;
+
+typedef std::pair<int, int> tt1;
+typedef std::pair<int, double> tt2;
+typedef std::pair<NoexceptMoveAssignClass,
+ NoexceptMoveAssignClass> tt3;
+typedef std::pair<ExceptMoveAssignClass, ExceptMoveAssignClass> tt4;
+typedef std::pair<ExceptMoveAssignClass, double> tt5;
+typedef std::pair<NoexceptMoveAssignClass,
+ ExceptMoveAssignClass> tt6;
+
+static_assert(std::is_nothrow_move_assignable<tt1>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt2>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt3>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt4>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt5>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt6>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/pair/noexcept_swap.cc b/libstdc++-v3/testsuite/20_util/pair/noexcept_swap.cc
new file mode 100644
index 0000000000..e82b616310
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/noexcept_swap.cc
@@ -0,0 +1,81 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test;
+
+typedef std::pair<int, int> tt1;
+typedef std::pair<int, double> tt2;
+typedef std::pair<short, NoexceptMoveAssignClass> tt4;
+typedef std::pair<ExceptMoveAssignClass, double> tt6;
+typedef std::pair<int, ExceptMoveConsClass> tt9;
+typedef std::pair<ExceptMoveAssignClass, short> tt10;
+typedef std::pair<short, NoexceptMoveConsClass> tt11;
+typedef std::pair<NoexceptMoveConsClass,
+ NoexceptMoveConsClass> tt12;
+typedef std::pair<NoexceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass> tt13;
+typedef std::pair<ExceptMoveConsNoexceptMoveAssignClass,
+ ExceptMoveConsNoexceptMoveAssignClass> tt14;
+typedef std::pair<NoexceptMoveConsExceptMoveAssignClass,
+ NoexceptMoveConsExceptMoveAssignClass> tt15;
+typedef std::pair<ExceptMoveConsExceptMoveAssignClass,
+ ExceptMoveConsExceptMoveAssignClass> tt16;
+typedef std::pair<NoexceptMoveConsNoexceptMoveAssignClass,
+ double> tt17;
+typedef std::pair<NoexceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass> tt19;
+typedef std::pair<NoexceptMoveConsNoexceptMoveAssignClass,
+ ExceptMoveConsNoexceptMoveAssignClass> tt21;
+
+static_assert(noexcept(std::declval<tt1&>().swap(std::declval<tt1&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt2&>().swap(std::declval<tt2&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt4&>().swap(std::declval<tt4&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt6&>().swap(std::declval<tt6&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt9&>().swap(std::declval<tt9&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt10&>().swap(std::declval<tt10&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt11&>().swap(std::declval<tt11&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt12&>().swap(std::declval<tt12&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt13&>().swap(std::declval<tt13&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt14&>().swap(std::declval<tt14&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt15&>().swap(std::declval<tt15&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt16&>().swap(std::declval<tt16&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt17&>().swap(std::declval<tt17&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt19&>().swap(std::declval<tt19&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt21&>().swap(std::declval<tt21&>())),
+ "Error");
diff --git a/libstdc++-v3/testsuite/20_util/pair/piecewise2.cc b/libstdc++-v3/testsuite/20_util/pair/piecewise2.cc
new file mode 100644
index 0000000000..695a3c9439
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/piecewise2.cc
@@ -0,0 +1,60 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+#include <tuple>
+
+struct NoCon
+{
+ NoCon() = delete;
+ NoCon(const NoCon&) = delete;
+};
+
+struct RefCheck1
+{
+ RefCheck1(NoCon&, NoCon&&) { }
+ RefCheck1() = delete;
+ RefCheck1(const RefCheck1&) = delete;
+};
+
+struct RefCheck2
+{
+ RefCheck2(const NoCon&, const NoCon&&, NoCon&) { }
+ RefCheck2() = delete;
+ RefCheck2(const RefCheck2&) = delete;
+};
+
+struct Default
+{
+ Default();
+ Default(const Default&) = delete;
+};
+
+// libstdc++/51183
+void test01(std::tuple<NoCon&, NoCon&&> t1,
+ std::tuple<NoCon&, NoCon&&, NoCon&> t2)
+{
+ std::pair<RefCheck1, RefCheck2>(std::piecewise_construct, t1, t2);
+}
+
+void test02(std::tuple<> t1, std::tuple<int> t2)
+{
+ std::pair<Default, int> A(std::piecewise_construct, t1, t2);
+}
diff --git a/libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to.cc b/libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to.cc
new file mode 100644
index 0000000000..1cfc98084e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct Ptr
+{
+ typedef bool element_type;
+ bool* value;
+
+ static Ptr pointer_to(bool& b) { return Ptr{&b}; }
+};
+
+bool operator==(const Ptr& l, const Ptr& r) { return l.value == r.value; }
+
+void test01()
+{
+ bool test = true;
+ Ptr p{ &test };
+
+ VERIFY( std::pointer_traits<Ptr>::pointer_to(test) == p );
+}
+
+void test02()
+{
+ bool test = true;
+
+ VERIFY( std::pointer_traits<bool*>::pointer_to(test) == &test );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..38043d4eac
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/explicit_instantiation.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing memory with NO OTHER INCLUDES.
+
+#include <memory>
+
+namespace std
+{
+ typedef short test_type;
+ template struct pointer_traits<test_type*>;
+ template struct pointer_traits<shared_ptr<test_type>>;
+ template struct pointer_traits<unique_ptr<test_type>>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc
new file mode 100644
index 0000000000..47b5212ff0
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc
@@ -0,0 +1,46 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing memory with NO OTHER INCLUDES.
+
+#include <memory>
+
+// { dg-do compile }
+
+template<typename Ptr>
+void test01()
+{
+ // Check for required typedefs
+ typedef std::pointer_traits<Ptr> test_type;
+ typedef typename test_type::pointer pointer;
+ typedef typename test_type::element_type element_type;
+ typedef typename test_type::difference_type difference_type;
+ typedef typename test_type::template rebind<char> rebind_type;
+}
+
+int main()
+{
+ test01<int*>();
+ test01<void*>();
+ test01<std::shared_ptr<int>>();
+ test01<std::shared_ptr<void>>();
+ test01<std::unique_ptr<int>>();
+ test01<std::unique_ptr<void>>();
+}
diff --git a/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc b/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
index ca91e46c84..8aa72f2e3f 100644
--- a/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
@@ -46,9 +46,10 @@ test04()
std::ratio<1,0> r1 __attribute__((unused));
}
-// { dg-error "instantiated from here" "" { target *-*-* } 34 }
-// { dg-error "instantiated from here" "" { target *-*-* } 40 }
-// { dg-error "instantiated from here" "" { target *-*-* } 46 }
-// { dg-error "denominator cannot be zero" "" { target *-*-* } 155 }
-// { dg-error "out of range" "" { target *-*-* } 156 }
-// { dg-error "overflow in constant expression" "" { target *-*-* } 74 }
+// { dg-error "required from here" "" { target *-*-* } 34 }
+// { dg-error "required from here" "" { target *-*-* } 40 }
+// { dg-error "required from here" "" { target *-*-* } 46 }
+// { dg-error "denominator cannot be zero" "" { target *-*-* } 268 }
+// { dg-error "out of range" "" { target *-*-* } 269 }
+// { dg-error "overflow in constant expression" "" { target *-*-* } 61 }
+// { dg-prune-output "not a member" }
diff --git a/libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc b/libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc
index 4105a710d9..aa87394692 100644
--- a/libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc
+++ b/libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc
@@ -19,6 +19,7 @@
// <http://www.gnu.org/licenses/>.
#include <ratio>
+#include <limits>
#include <testsuite_hooks.h>
// libstdc++/47913
@@ -27,12 +28,32 @@ void test01()
bool test __attribute__((unused)) = true;
using namespace std;
- const intmax_t m = (intmax_t)1 << (4 * sizeof(intmax_t) - 1);
- typedef ratio_add<ratio<1, (m - 1) * (m - 2)>,
- ratio<1, (m - 3) * (m - 2)> > ra_type;
-
- VERIFY( ra_type::num == 2 );
- VERIFY( ra_type::den == (m - 1) * (m - 3) );
+ const intmax_t m1 = (intmax_t)1 << (4 * sizeof(intmax_t) - 1);
+ typedef ratio_add<ratio<1, (m1 - 1) * (m1 - 2)>,
+ ratio<1, (m1 - 3) * (m1 - 2)> > ra_type1;
+ VERIFY( ra_type1::num == 2 );
+ VERIFY( ra_type1::den == (m1 - 1) * (m1 - 3) );
+
+ const intmax_t m2 = numeric_limits<intmax_t>::max();
+ typedef ratio_add<ratio<m2, 2>,
+ ratio<-m2, 3> > ra_type2;
+ VERIFY( ra_type2::num == m2 );
+ VERIFY( ra_type2::den == 6 );
+
+ typedef ratio_add<ratio<m2 / 7 * 5 - 1, 5>,
+ ratio<-m2 + 2, 7> > ra_type3;
+ ra_type3();
+
+ const intmax_t m3 = numeric_limits<intmax_t>::max() - 1;
+ typedef ratio_add<ratio<-m3 / 7 * 5 - 1, 5>,
+ ratio<m3, 7> > ra_type4;
+ ra_type4();
+
+ const intmax_t m4 = numeric_limits<intmax_t>::max() / 2;
+ typedef ratio_add<ratio<m4 - 5, 15>,
+ ratio<m4, 35> > ra_type5;
+ VERIFY( ra_type5::num == (2 * m4 - 7) );
+ VERIFY( ra_type5::den == 21 );
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc b/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
index b7076dfc57..7483016b61 100644
--- a/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
@@ -26,22 +26,25 @@
void
test01()
{
- std::ratio_add<std::ratio<INTMAX_MAX, 1>, std::ratio<1>>::type r1;
+ std::ratio_add<std::ratio<INTMAX_MAX, 1>, std::ratio<1>>::type r1
+ __attribute__((unused));
}
void
test02()
{
- std::ratio_multiply<std::ratio<-INTMAX_MAX, 2>, std::ratio<3, 2>>::type r1;
- std::ratio_multiply<std::ratio<INTMAX_MAX>, std::ratio<INTMAX_MAX>>::type r2;
+ std::ratio_multiply<std::ratio<-INTMAX_MAX, 2>, std::ratio<3, 2>>::type r1
+ __attribute__((unused));
+ std::ratio_multiply<std::ratio<INTMAX_MAX>, std::ratio<INTMAX_MAX>>::type r2
+ __attribute__((unused));
}
-// { dg-error "instantiated from here" "" { target *-*-* } 29 }
-// { dg-error "instantiated from here" "" { target *-*-* } 35 }
-// { dg-error "instantiated from here" "" { target *-*-* } 36 }
-// { dg-error "overflow in addition" "" { target *-*-* } 132 }
+// { dg-error "required from here" "" { target *-*-* } 29 }
+// { dg-error "required from here" "" { target *-*-* } 36 }
+// { dg-error "required from here" "" { target *-*-* } 38 }
+// { dg-error "overflow in addition" "" { target *-*-* } 432 }
// { dg-error "overflow in multiplication" "" { target *-*-* } 104 }
// { dg-error "overflow in multiplication" "" { target *-*-* } 100 }
// { dg-error "overflow in multiplication" "" { target *-*-* } 102 }
-// { dg-excess-errors "In instantiation of" }
-// { dg-excess-errors "out of range" }
+// { dg-prune-output "out of range" }
+// { dg-prune-output "not usable in a constant expression" }
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
index bd9aeb2c40..44463a1caf 100644
--- a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
@@ -5,7 +5,7 @@
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
//
// This library is distributed in the hope that it will be useful,
@@ -14,9 +14,8 @@
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
// 20.6.4 function object return types [func.ret]
#include <functional>
@@ -36,8 +35,8 @@ void test01()
X x = { };
std::ref(m)(x, 1);
std::ref(m)(&x, 1);
- int& i1 = std::ref(m2)(x);
- int& i2 = std::ref(m2)(&x);
+ int& i1 __attribute__((unused)) = std::ref(m2)(x);
+ int& i2 __attribute__((unused)) = std::ref(m2)(&x);
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc
index 7b694c7643..028fe02201 100644
--- a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc
@@ -75,7 +75,8 @@ void test01()
int (::X::* p_foo_c)(float) const = &::X::foo_c;
int (::X::* p_foo_v)(float) volatile = &::X::foo_v;
int (::X::* p_foo_cv)(float) const volatile = &::X::foo_cv;
- int (::X::* p_foo_varargs)(float, ...) = &::X::foo_varargs;
+ int (::X::* p_foo_varargs)(float, ...) __attribute__((unused))
+ = &::X::foo_varargs;
int ::X::* p_bar = &::X::bar;
const float pi = 3.14;
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc
index 947a9b02f1..c3b37f71ab 100644
--- a/libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc
@@ -38,7 +38,7 @@ void test01()
int main()
{
- test02();
+ test01();
}
-// { dg-excess-errors "" }
+// { dg-prune-output "declared here" }
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
index 2fea52eed0..0920ae4d97 100644
--- a/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
@@ -124,14 +124,14 @@ struct test_1st_2nd_arg_types<T, true>
template<typename T>
void test()
{
- test_arg_type<T> t;
- test_arg_type<const T> tc;
- test_arg_type<volatile T> tv;
- test_arg_type<const volatile T> tcv;
- test_1st_2nd_arg_types<T> t12;
- test_1st_2nd_arg_types<const T> t12c;
- test_1st_2nd_arg_types<volatile T> t12v;
- test_1st_2nd_arg_types<const volatile T> t12cv;
+ test_arg_type<T> t __attribute__((unused));
+ test_arg_type<const T> tc __attribute__((unused));
+ test_arg_type<volatile T> tv __attribute__((unused));
+ test_arg_type<const volatile T> tcv __attribute__((unused));
+ test_1st_2nd_arg_types<T> t12 __attribute__((unused));
+ test_1st_2nd_arg_types<const T> t12c __attribute__((unused));
+ test_1st_2nd_arg_types<volatile T> t12v __attribute__((unused));
+ test_1st_2nd_arg_types<const volatile T> t12cv __attribute__((unused));
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc b/libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc
new file mode 100644
index 0000000000..21d1b05551
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc
@@ -0,0 +1,103 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <scoped_allocator>
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::uneq_allocator;
+
+struct Element
+{
+ typedef uneq_allocator<Element> allocator_type;
+
+ allocator_type alloc;
+
+ Element(const allocator_type& a = allocator_type()) : alloc(a) { }
+
+ Element(std::allocator_arg_t, const allocator_type& a, int = 0)
+ : alloc(a) { }
+
+ Element(std::allocator_arg_t, const allocator_type& a, const Element&)
+ : alloc(a) { }
+
+ const allocator_type& get_allocator() const { return alloc; }
+};
+
+void test01()
+{
+ bool test __attribute((unused)) = false;
+
+ typedef std::scoped_allocator_adaptor<Element::allocator_type> alloc1_type;
+
+ typedef std::vector<Element, alloc1_type> EltVec;
+
+ alloc1_type a1(1);
+ Element e;
+ EltVec ev1(1, e, a1);
+ VERIFY( ev1.get_allocator().get_personality() == 1 );
+ VERIFY( ev1[0].get_allocator().get_personality() == 1 );
+}
+
+void test02()
+{
+ bool test __attribute((unused)) = false;
+
+ typedef std::scoped_allocator_adaptor<Element::allocator_type> inner_alloc_type;
+
+ typedef std::vector<Element, inner_alloc_type> EltVec;
+
+ typedef std::scoped_allocator_adaptor<Element::allocator_type,
+ Element::allocator_type> alloc_type;
+
+ typedef std::vector<EltVec, alloc_type> EltVecVec;
+
+ alloc_type a(1, Element::allocator_type(2)); // outer=1, inner=2
+ Element e;
+ EltVec ev(1, e);
+ EltVecVec evv(1, ev, a);
+
+ VERIFY( evv.get_allocator().get_personality() == 1 );
+ VERIFY( evv[0].get_allocator().get_personality() == 2 );
+ VERIFY( evv[0][0].get_allocator().get_personality() == 2 );
+
+ alloc_type a2(3, Element::allocator_type(4)); // outer=3, inner=4
+
+ EltVecVec evv2(evv, a2); // copy with a different allocator
+
+ VERIFY( evv2.get_allocator().get_personality() == 3 );
+ VERIFY( evv2[0].get_allocator().get_personality() == 4 );
+ VERIFY( evv2[0][0].get_allocator().get_personality() == 4 );
+
+ EltVecVec evv3(std::move(evv), a2); // move with a different allocator
+
+ VERIFY( evv3.get_allocator().get_personality() == 3 );
+ VERIFY( evv3[0].get_allocator().get_personality() == 4 );
+ VERIFY( evv3[0][0].get_allocator().get_personality() == 4 );
+
+}
+
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc b/libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc
new file mode 100644
index 0000000000..5679b73371
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc
@@ -0,0 +1,105 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// test that propagate_on_container_xxx is true iff it is true for
+// any of the outer or inner allocators
+
+#include <scoped_allocator>
+
+using std::scoped_allocator_adaptor;
+
+typedef short test_type;
+
+template<typename T>
+ struct minimal_allocator
+ {
+ typedef T value_type;
+ minimal_allocator();
+ template <typename U>
+ minimal_allocator(const minimal_allocator<U>&);
+ T* allocate(std::size_t);
+ void deallocate(T*, std::size_t);
+ };
+
+template<typename T, bool copy, bool move, bool swap>
+ struct test_allocator : minimal_allocator<T>
+ {
+ struct propagate_on_container_copy_assignment
+ { static const bool value = copy; };
+
+ struct propagate_on_container_move_assignment
+ { static const bool value = move; };
+
+ struct propagate_on_container_swap
+ { static const bool value = swap; };
+ };
+
+template<typename A>
+ constexpr bool prop_on_copy()
+ {
+ typedef typename A::propagate_on_container_copy_assignment type;
+ return type::value;
+ }
+
+template<typename A>
+ constexpr bool prop_on_move()
+ {
+ typedef typename A::propagate_on_container_move_assignment type;
+ return type::value;
+ }
+
+template<typename A>
+ constexpr bool prop_on_swap()
+ {
+ typedef typename A::propagate_on_container_swap type;
+ return type::value;
+ }
+
+template<typename A, bool C, bool M, bool S>
+ constexpr bool test1()
+ {
+ static_assert( prop_on_copy<A>() == C, "copy" );
+ static_assert( prop_on_move<A>() == M, "move" );
+ static_assert( prop_on_swap<A>() == S, "swap" );
+ return true;
+ }
+
+template<bool C, bool M, bool S>
+ constexpr bool test2()
+ {
+ typedef minimal_allocator<test_type> base_alloc;
+ typedef test_allocator<test_type, C, M, S> test_alloc;
+ typedef scoped_allocator_adaptor<base_alloc, test_alloc> scoped1;
+ typedef scoped_allocator_adaptor<test_alloc, base_alloc> scoped2;
+ typedef scoped_allocator_adaptor<test_alloc, test_alloc> scoped3;
+ return test1<scoped1, C, M, S>()
+ && test1<scoped2, C, M, S>()
+ && test1<scoped3, C, M, S>();
+ }
+
+static_assert( test2<false, false, false>(), "never propagate" );
+static_assert( test2<true, false, false>(), "propagate on copy" );
+static_assert( test2<false, true, false>(), "propagate on move" );
+static_assert( test2<false, false, true>(), "propagate on swap" );
+static_assert( test2<true, true, false>(), "propagate on copy & move" );
+static_assert( test2<true, false, true>(), "propagate on copy & swap" );
+static_assert( test2<false, true, true>(), "propagate on move & swap" );
+static_assert( test2<true, true, true>(), "always propagate" );
+
diff --git a/libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..1f85756f74
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing memory with NO OTHER INCLUDES.
+
+#include <scoped_allocator>
+#include <memory>
+
+typedef short test_type;
+
+template<typename T>
+ struct minimal_allocator
+ {
+ typedef T value_type;
+ minimal_allocator();
+ template <typename U>
+ minimal_allocator(const minimal_allocator<U>&);
+ T* allocate(unsigned long);
+ void deallocate(T*, unsigned long);
+ };
+
+namespace std
+{
+ template struct scoped_allocator_adaptor<std::allocator<test_type>>;
+
+ template struct scoped_allocator_adaptor<minimal_allocator<test_type>>;
+
+ template struct scoped_allocator_adaptor<std::allocator<test_type>,
+ minimal_allocator<test_type>>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc
new file mode 100644
index 0000000000..762bedf8e5
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc
@@ -0,0 +1,67 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing scoped_allocator with NO OTHER INCLUDES.
+
+#include <scoped_allocator>
+
+// { dg-do compile }
+
+template<typename T>
+ struct minimal_allocator
+ {
+ typedef T value_type;
+ minimal_allocator();
+ template <typename U>
+ minimal_allocator(const minimal_allocator<U>&);
+ T* allocate(unsigned long);
+ void deallocate(T*, unsigned long);
+ };
+
+struct S
+{
+ typedef minimal_allocator<short> allocator_type;
+ S(const allocator_type&);
+};
+
+void test01()
+{
+ typedef minimal_allocator<S> outer_type;
+ typedef minimal_allocator<S::allocator_type> inner_type;
+ typedef std::scoped_allocator_adaptor<outer_type, inner_type> test_type;
+
+ // Check for required typedefs
+ typedef typename test_type::outer_allocator_type outer_allocator_type;
+ typedef typename test_type::inner_allocator_type inner_allocator_type;
+ typedef typename test_type::value_type value_type;
+ typedef typename test_type::size_type size_type;
+ typedef typename test_type::difference_type difference_type;
+ typedef typename test_type::pointer pointer;
+ typedef typename test_type::const_pointer const_pointer;
+ typedef typename test_type::void_pointer void_pointer;
+ typedef typename test_type::const_void_pointer const_void_pointer;
+ typedef typename test_type::propagate_on_container_copy_assignment
+ propagate_on_container_copy_assignment;
+ typedef typename test_type::propagate_on_container_move_assignment
+ propagate_on_container_move_assignment;
+ typedef typename test_type::propagate_on_container_swap
+ propagate_on_container_swap;
+}
+
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc
index b79a25b131..754b616b76 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc
@@ -47,4 +47,5 @@ main()
test01();
return 0;
}
-// { dg-excess-errors "In constructor" }
+
+// { dg-prune-output "cannot convert" }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
index e0d09dee90..a884d0171d 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
@@ -47,6 +47,6 @@ main()
test01();
return 0;
}
-// { dg-error "In member function" "" { target *-*-* } 0 }
+// { dg-error "In instantiation" "" { target *-*-* } 0 }
// { dg-error "cannot convert" "" { target *-*-* } 0 }
-// { dg-error "instantiated from" "" { target *-*-* } 0 }
+// { dg-error "required from" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc
index dae967bfd5..91af6c06f9 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc
@@ -46,4 +46,4 @@ main()
test01();
return 0;
}
-// { dg-excess-errors "initializing argument" }
+// { dg-prune-output "initializing argument" }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc
new file mode 100644
index 0000000000..45f9b33e38
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc
@@ -0,0 +1,65 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.2.2 Class template shared_ptr [util.smartptr.shared]
+
+#include <memory>
+
+// DR 1401
+void test01()
+{
+ std::shared_ptr<int> ptr1, ptr2;
+ if (ptr1 == ptr2)
+ { }
+ if (ptr1 == nullptr)
+ { }
+ if (nullptr == ptr1)
+ { }
+ if (ptr1 != ptr2)
+ { }
+ if (ptr1 != nullptr)
+ { }
+ if (nullptr != ptr1)
+ { }
+ if (ptr1 < ptr2)
+ { }
+ if (ptr1 < nullptr)
+ { }
+ if (nullptr < ptr1)
+ { }
+ if (ptr1 <= ptr2)
+ { }
+ if (ptr1 <= nullptr)
+ { }
+ if (nullptr <= ptr1)
+ { }
+ if (ptr1 > ptr2)
+ { }
+ if (ptr1 > nullptr)
+ { }
+ if (nullptr > ptr1)
+ { }
+ if (ptr1 >= ptr2)
+ { }
+ if (ptr1 >= nullptr)
+ { }
+ if (nullptr >= ptr1)
+ { }
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
index 36cf7f9c29..d2110ca8b3 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2010, 2011 Free Software Foundation
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,9 +32,9 @@ void test01()
{
X* px = 0;
std::shared_ptr<X> p1(px); // { dg-error "here" }
- // { dg-error "incomplete" "" { target *-*-* } 766 }
+ // { dg-error "incomplete" "" { target *-*-* } 775 }
std::shared_ptr<X> p9(ap()); // { dg-error "here" }
- // { dg-error "incomplete" "" { target *-*-* } 858 }
+ // { dg-error "incomplete" "" { target *-*-* } 869 }
}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc
new file mode 100644
index 0000000000..0cd6bad640
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc
@@ -0,0 +1,44 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2012 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+// libstdc++/52924
+
+struct A { } a;
+
+struct D {
+ ~D() noexcept(false) { }
+ void operator()(A*) { }
+} d;
+
+auto sp = std::shared_ptr<A>(&a, d);
+
+template<typename T>
+struct Alloc : std::allocator<T>
+{
+ Alloc() = default;
+ ~Alloc() noexcept(false) { }
+ template<typename U> Alloc(const Alloc<U>&) { }
+};
+
+Alloc<A> al;
+
+auto as = std::allocate_shared<A>(al);
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
new file mode 100644
index 0000000000..6628d4bf16
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2012 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+// libstdc++/55123
+
+void f() {
+ std::unique_ptr<const int> y;
+ std::shared_ptr<const int> x = std::move(y);
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc
new file mode 100644
index 0000000000..86f725d539
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc
@@ -0,0 +1,35 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.2.2 Class template shared_ptr [util.smartptr.shared]
+
+#include <memory>
+#include <testsuite_allocator.h>
+
+struct X { };
+
+// 20.7.2.2.1 shared_ptr constructors [util.smartptr.shared.const]
+
+// test shared_ptr with minimal allocator
+
+__gnu_test::SimpleAllocator<X> alloc;
+auto deleter = [](X* p) { delete p; };
+std::shared_ptr<X> p(new X, deleter, alloc);
+
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
index b078a7df79..256f2c9826 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
@@ -33,4 +33,3 @@ test01()
const std::auto_ptr<A> a;
std::shared_ptr<A> p(std::move(a)); // { dg-error "no match" }
}
-// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..640a54bafd
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-14 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+typedef std::shared_ptr<int> sptype;
+
+static_assert(std::is_nothrow_move_constructible<sptype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc
index 0e2fd68d57..fc12787de7 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc
@@ -45,4 +45,4 @@ main()
test01();
return 0;
}
-// { dg-excess-errors "initializing argument" }
+// { dg-prune-output "initializing argument" }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
index cff9b3b99d..d2bf508fd9 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
@@ -1,7 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// { dg-do run { xfail *-*-* } }
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation
+// Copyright (C) 2005, 2006, 2007, 2009, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,7 +30,7 @@ struct A { };
int
test01()
{
- bool test __attribute__((unused)) = true;
+ bool test = false;
std::shared_ptr<A> a1(new A);
std::weak_ptr<A> wa(a1);
@@ -44,12 +43,9 @@ test01()
catch (const std::bad_weak_ptr&)
{
// Expected.
- __throw_exception_again;
- }
- catch (...)
- {
- // Failed.
+ test = true;
}
+ VERIFY( test );
return 0;
}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc_min.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc_min.cc
new file mode 100644
index 0000000000..7def5b1c7b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc_min.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.2.2 Class template shared_ptr [util.smartptr.shared]
+
+#include <memory>
+#include <testsuite_allocator.h>
+
+struct X { };
+
+// 20.7.2.2.6 shared_ptr creation [util.smartptr.shared.create]
+
+// test shared_ptr with minimal allocator
+
+__gnu_test::SimpleAllocator<X> alloc;
+auto p = std::allocate_shared<X>(alloc);
+
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc
new file mode 100644
index 0000000000..c741fc5f74
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <new>
+
+// The behaviour tested here relies on the resolution of LWG issue 2070
+
+template<typename T> struct MyAlloc;
+
+class Private
+{
+ Private() = default;
+ Private(const Private&) = default;
+ ~Private() = default;
+
+ friend class MyAlloc<Private>;
+
+public:
+ int get() const { return 0; }
+};
+
+template<typename T>
+struct MyAlloc : std::allocator<Private>
+{
+ void construct(T* p) { ::new((void*)p) T(); }
+ void destroy(T* p) { p->~T(); }
+};
+
+int main()
+{
+ MyAlloc<Private> a;
+ auto p = std::allocate_shared<Private>(a);
+ return p->get();
+}
+
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
index 5d1ba942d5..788f7b1727 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
index fc11a74eba..1a29613f4f 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc b/libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc
new file mode 100644
index 0000000000..2b497cfa35
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc
@@ -0,0 +1,52 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <testsuite_common_types.h>
+
+namespace __gnu_test
+{
+ struct constexpr_member_data
+ {
+ template<typename _Ttesttype>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ constexpr auto v1 __attribute__((unused))
+ = _Ttesttype::is_steady;
+ }
+ };
+
+ _Concept c;
+ c.__constraint();
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::constexpr_member_data test;
+ test.operator()<std::chrono::steady_clock>();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/system_clock/1.cc b/libstdc++-v3/testsuite/20_util/system_clock/1.cc
index ead20873c7..0b4a7d8038 100644
--- a/libstdc++-v3/testsuite/20_util/system_clock/1.cc
+++ b/libstdc++-v3/testsuite/20_util/system_clock/1.cc
@@ -1,7 +1,8 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
+// { dg-require-time "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,8 +30,8 @@ main()
using namespace std::chrono;
system_clock::time_point t1 = system_clock::now();
- bool is_monotonic = system_clock::is_monotonic;
- is_monotonic = is_monotonic; // suppress unused warning
+ bool is_steady = system_clock::is_steady;
+ is_steady = is_steady; // suppress unused warning
std::time_t t2 = system_clock::to_time_t(t1);
system_clock::time_point t3 = system_clock::from_time_t(t2);
t3 = t3; // suppress unused warning
diff --git a/libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc b/libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc
index 2407ef16a7..8312f53659 100644
--- a/libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc
+++ b/libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,7 +34,7 @@ namespace __gnu_test
void __constraint()
{
constexpr auto v1 __attribute__((unused))
- = _Ttesttype::is_monotonic;
+ = _Ttesttype::is_steady;
}
};
diff --git a/libstdc++-v3/testsuite/20_util/time_point/1.cc b/libstdc++-v3/testsuite/20_util/time_point/1.cc
index e18c6e58cf..11a6ac4952 100644
--- a/libstdc++-v3/testsuite/20_util/time_point/1.cc
+++ b/libstdc++-v3/testsuite/20_util/time_point/1.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// Copyright (C) 2008, 2009 Free Software Foundation
+// Copyright (C) 2008, 2009, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,8 +33,8 @@ test01()
time_point<system_clock> t1;
VERIFY(t1.time_since_epoch() == system_clock::duration::zero());
- time_point<monotonic_clock> t2;
- VERIFY(t2.time_since_epoch() == monotonic_clock::duration::zero());
+ time_point<steady_clock> t2;
+ VERIFY(t2.time_since_epoch() == steady_clock::duration::zero());
time_point<high_resolution_clock> t3;
VERIFY(t3.time_since_epoch() == high_resolution_clock::duration::zero());
diff --git a/libstdc++-v3/testsuite/20_util/time_point/nonmember/constexpr.cc b/libstdc++-v3/testsuite/20_util/time_point/nonmember/constexpr.cc
new file mode 100644
index 0000000000..5c5090927d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/time_point/nonmember/constexpr.cc
@@ -0,0 +1,45 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <testsuite_hooks.h>
+
+int main()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std::chrono;
+
+ typedef time_point<system_clock> time_type;
+
+ constexpr time_type t1(seconds(1));
+ constexpr time_type t2(seconds(30));
+ constexpr time_type t3(seconds(60));
+
+ constexpr duration<int> d0(12);
+ constexpr duration<int> d1(3);
+
+ constexpr auto r1 __attribute__((unused)) = t1 + d0;
+ constexpr auto r2 __attribute__((unused)) = d1 + t2;
+
+ constexpr auto r3 __attribute__((unused)) = t1 - d0;
+ constexpr auto r4 __attribute__((unused)) = t2 - t3;
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/51365.cc b/libstdc++-v3/testsuite/20_util/tuple/51365.cc
new file mode 100644
index 0000000000..0e0f7016bd
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/51365.cc
@@ -0,0 +1,27 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+
+// libstdc++/51365
+
+struct F final { };
+std::tuple<F> t;
+
diff --git a/libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc b/libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
index 613c27f8b3..eb22938261 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
@@ -30,4 +30,4 @@ void test01()
if ( t1 < t2 ) {} // { dg-error "here" }
if ( t1 == t2 ) {} // { dg-error "here" }
}
-// { dg-excess-errors "incomplete type" }
+// { dg-prune-output "incomplete type" }
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc
new file mode 100644
index 0000000000..ae9dc8d7be
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc
@@ -0,0 +1,169 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.4.2.1 [tuple.cnstr] Allocator-extended constructors
+
+#include <memory>
+#include <tuple>
+#include <testsuite_hooks.h>
+
+struct MyAlloc { };
+
+// type that can't be constructed with an allocator
+struct CannotUse
+{
+ CannotUse(int = 0, int = 0) : ok(true) { }
+
+ bool ok;
+};
+
+// type that can be constructed with an allocator
+// but which has uses_allocator == false
+struct DoesNotUse
+{
+ typedef MyAlloc allocator_type;
+
+ DoesNotUse(int = 0) : ok(true) { }
+ DoesNotUse(std::allocator_arg_t, MyAlloc, int = 0) : ok(false) { }
+ DoesNotUse(MyAlloc) : ok(false) { }
+ DoesNotUse(int, MyAlloc) : ok(false) { }
+
+ DoesNotUse(const DoesNotUse&) : ok(true) { }
+ DoesNotUse(std::allocator_arg_t, MyAlloc, const DoesNotUse&) : ok(false) { }
+ DoesNotUse(const DoesNotUse&, MyAlloc) : ok(false) { }
+
+ DoesNotUse(DoesNotUse&&) : ok(true) { }
+ DoesNotUse(std::allocator_arg_t, MyAlloc, DoesNotUse&&) : ok(false) { }
+ DoesNotUse(DoesNotUse&&, MyAlloc) : ok(false) { }
+
+ bool ok;
+};
+
+namespace std
+{
+ template<typename A>
+ struct uses_allocator<DoesNotUse, A> : false_type { };
+}
+
+// type that can be constructed with an allocator as second argument
+struct UsesWithTag
+{
+ typedef MyAlloc allocator_type;
+
+ UsesWithTag(int = 0) : ok(false) { }
+ UsesWithTag(std::allocator_arg_t, MyAlloc, int = 0) : ok(true) { }
+ UsesWithTag(MyAlloc) : ok(false) { }
+ UsesWithTag(int, MyAlloc) : ok(false) { }
+
+ UsesWithTag(const UsesWithTag&) : ok(false) { }
+ UsesWithTag(std::allocator_arg_t, MyAlloc, const UsesWithTag&) : ok(true) { }
+ UsesWithTag(const UsesWithTag&, MyAlloc) : ok(false) { }
+
+ UsesWithTag(UsesWithTag&&) : ok(false) { }
+ UsesWithTag(std::allocator_arg_t, MyAlloc, UsesWithTag&&) : ok(true) { }
+ UsesWithTag(UsesWithTag&&, MyAlloc) : ok(false) { }
+
+ bool ok;
+};
+
+// type that can be constructed with an allocator as last argument
+struct UsesWithoutTag
+{
+ typedef MyAlloc allocator_type;
+
+ UsesWithoutTag(int = 0) : ok(false) { }
+ UsesWithoutTag(MyAlloc) : ok(true) { }
+ UsesWithoutTag(int, MyAlloc) : ok(true) { }
+
+ UsesWithoutTag(const UsesWithoutTag&) : ok(false) { }
+ UsesWithoutTag(const UsesWithoutTag&, MyAlloc) : ok(true) { }
+
+ UsesWithoutTag(UsesWithoutTag&&) : ok(false) { }
+ UsesWithoutTag(UsesWithoutTag&&, MyAlloc) : ok(true) { }
+
+ bool ok;
+};
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::allocator_arg;
+ using std::tuple;
+ using std::make_tuple;
+ using std::get;
+
+ typedef CannotUse T1;
+ typedef DoesNotUse T2;
+ typedef UsesWithTag T3;
+ typedef UsesWithoutTag T4;
+ typedef tuple<T1, T2, T3, T4> test_type;
+
+ MyAlloc a;
+
+ // default construction
+ test_type t1(allocator_arg, a);
+ VERIFY( get<0>(t1).ok );
+ VERIFY( get<1>(t1).ok );
+ VERIFY( get<2>(t1).ok );
+ VERIFY( get<3>(t1).ok );
+
+ // copy construction
+ test_type t2(allocator_arg, a, t1);
+ VERIFY( get<0>(t2).ok );
+ VERIFY( get<1>(t2).ok );
+ VERIFY( get<2>(t2).ok );
+ VERIFY( get<3>(t2).ok );
+
+ // move construction
+ test_type t3(allocator_arg, a, std::move(t1));
+ VERIFY( get<0>(t3).ok );
+ VERIFY( get<1>(t3).ok );
+ VERIFY( get<2>(t3).ok );
+ VERIFY( get<3>(t3).ok );
+
+ // construction from int
+ test_type t4(allocator_arg, a, 1, 2, 3, 4);
+ VERIFY( get<0>(t4).ok );
+ VERIFY( get<1>(t4).ok );
+ VERIFY( get<2>(t4).ok );
+ VERIFY( get<3>(t4).ok );
+
+ auto ints = make_tuple(1, 2, 3, 4);
+
+ // construction from lvalue tuple of ints
+ test_type t5(allocator_arg, a, ints);
+ VERIFY( get<0>(t5).ok );
+ VERIFY( get<1>(t5).ok );
+ VERIFY( get<2>(t5).ok );
+ VERIFY( get<3>(t2).ok );
+
+ // construction from rvalue tuple of ints
+ test_type t6(allocator_arg, a, std::move(ints));
+ VERIFY( get<0>(t6).ok );
+ VERIFY( get<1>(t6).ok );
+ VERIFY( get<2>(t6).ok );
+ VERIFY( get<3>(t6).ok );
+
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc
new file mode 100644
index 0000000000..749c0b4789
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc
@@ -0,0 +1,63 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_common_types.h>
+
+#include <iostream>
+
+// 2 element tuple
+int main()
+{
+ typedef std::tuple<int, int> tuple_type;
+
+ // 01: default ctor
+ __gnu_test::constexpr_default_constructible test1;
+ test1.operator()<tuple_type>();
+
+ // 02: default copy ctor
+ __gnu_test::constexpr_single_value_constructible test2;
+ test2.operator()<tuple_type, tuple_type>();
+
+ // 03: element move ctor, single element
+ const int i1(415);
+ constexpr tuple_type t2 { 44, std::move(i1) };
+
+ // 04: element move ctor, two element
+ const int i2(510);
+ const int i3(408);
+ constexpr tuple_type t4 { std::move(i2), std::move(i3) };
+
+ // 05: value-type conversion constructor
+ const int i4(650);
+ const int i5(310);
+ constexpr tuple_type t8(i4, i5);
+
+ // 06: pair conversion ctor
+ test2.operator()<tuple_type, std::pair<int, int>>();
+ test2.operator()<std::tuple<short, short>, std::pair<int, int>>();
+ test2.operator()<tuple_type, std::pair<short, short>>();
+
+ // 07: different-tuple-type conversion constructor
+ test2.operator()<tuple_type, std::tuple<short, short>>();
+ test2.operator()<std::tuple<short, short>, tuple_type>();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc
new file mode 100644
index 0000000000..7efc9f4a90
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc
@@ -0,0 +1,60 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_common_types.h>
+
+#include <iostream>
+
+// 3 element tuple
+int main()
+{
+ typedef std::tuple<int, int, int> tuple_type;
+
+ // 01: default ctor
+ __gnu_test::constexpr_default_constructible test1;
+ test1.operator()<tuple_type>();
+
+ // 02: default copy ctor
+ __gnu_test::constexpr_single_value_constructible test2;
+ test2.operator()<tuple_type, tuple_type>();
+
+ // 03: element move ctor, single element
+ const int i1(415);
+ constexpr tuple_type t2 { 44, 55, std::move(i1) };
+
+ // 04: element move ctor, three element
+ const int i2(510);
+ const int i3(408);
+ const int i4(650);
+ constexpr tuple_type t4 { std::move(i2), std::move(i3), std::move(i4) };
+
+ // 05: value-type conversion constructor
+ const int i5(310);
+ const int i6(310);
+ const int i7(310);
+ constexpr tuple_type t8(i5, i6, i7);
+
+ // 06: different-tuple-type conversion constructor
+ test2.operator()<tuple_type, std::tuple<short, short, short>>();
+ test2.operator()<std::tuple<short, short, short>, tuple_type>();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc
deleted file mode 100644
index b5eba73fda..0000000000
--- a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// { dg-do compile }
-// { dg-options "-std=gnu++0x" }
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <memory>
-#include <testsuite_common_types.h>
-
-int main()
-{
- __gnu_test::constexpr_default_constructible test1;
- test1.operator()<std::tuple<int, int>>();
-
- __gnu_test::constexpr_single_value_constructible test2;
- test2.operator()<std::tuple<int, int>, std::tuple<int, int>>();
- // test2.operator()<std::tuple<int, int>, std::pair<short, short>>();
- // test2.operator()<std::tuple<int>, std::tuple<short>>();
- // test2.operator()<std::tuple<int, int>, std::tuple<short, short>>();
-
- // test 3
- const int i1(129);
- const int i2(6);
- constexpr std::tuple<int, int> p3(i1, i2);
-
- // test 4
- const int i3(415);
- const int i4(550);
- const int i5(6414);
- constexpr std::tuple<int, int, int, int, int> p4(i1, i2, i3, i4, i5);
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..801b5fad62
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc
@@ -0,0 +1,59 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test;
+
+typedef std::tuple<int> tt1;
+typedef std::tuple<int, double> tt2;
+typedef std::tuple<short, double, int> tt3;
+typedef std::tuple<short, NoexceptMoveConsClass, double> tt4;
+typedef std::tuple<NoexceptMoveConsClass,
+ NoexceptMoveConsClass, double> tt5;
+typedef std::tuple<NoexceptMoveConsClass,
+ NoexceptMoveConsClass,
+ NoexceptMoveConsClass> tt6;
+typedef std::tuple<ExceptMoveConsClass> tt7;
+typedef std::tuple<ExceptMoveConsClass, double> tt8;
+typedef std::tuple<short, double, ExceptMoveConsClass> tt9;
+typedef std::tuple<ExceptMoveConsClass, double,
+ ExceptMoveConsClass> tt10;
+typedef std::tuple<NoexceptMoveConsClass,
+ ExceptMoveConsClass> tt11;
+typedef std::tuple<int,
+ NoexceptMoveConsClass,
+ ExceptMoveConsClass> tt12;
+
+static_assert(std::is_nothrow_move_constructible<tt1>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt2>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt3>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt4>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt5>::value, "Error");
+static_assert(std::is_nothrow_move_constructible<tt6>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt7>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt8>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt9>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt10>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt11>::value, "Error");
+static_assert(!std::is_nothrow_move_constructible<tt12>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr.cc
new file mode 100644
index 0000000000..bf2a8573ab
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr.cc
@@ -0,0 +1,87 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// NOTE: This makes use of the fact that we know how moveable
+// is implemented on pair, and also vector. If the implementation
+// changes this test may begin to fail.
+
+#include <tuple>
+
+bool test __attribute__((unused)) = true;
+
+
+// make_tuple
+void
+test_make_tuple()
+{
+ {
+ typedef std::tuple<int, float> tuple_type;
+ constexpr tuple_type p1 __attribute__((unused))
+ = std::make_tuple(22, 22.222);
+ }
+
+ {
+ typedef std::tuple<int, float, int> tuple_type;
+ constexpr tuple_type p1 __attribute__((unused))
+ = std::make_tuple(22, 22.222, 77799);
+ }
+}
+
+// get
+void
+test_get()
+{
+ {
+ typedef std::tuple<int, float> tuple_type;
+ constexpr tuple_type t1 { 55, 77.77 };
+ constexpr auto var __attribute__((unused))
+ = std::get<1>(t1);
+ }
+
+ {
+ typedef std::tuple<int, float, int> tuple_type;
+ constexpr tuple_type t1 { 55, 77.77, 99 };
+ constexpr auto var __attribute__((unused))
+ = std::get<2>(t1);
+ }
+}
+
+// tuple_cat
+void
+test_tuple_cat()
+{
+ typedef std::tuple<int, float> tuple_type1;
+ typedef std::tuple<int, int, float> tuple_type2;
+
+ constexpr tuple_type1 t1 { 55, 77.77 };
+ constexpr tuple_type2 t2 { 55, 99, 77.77 };
+ constexpr auto cat1 __attribute__((unused)) = std::tuple_cat(t1, t2);
+}
+
+int
+main()
+{
+ test_make_tuple();
+ test_get();
+ test_tuple_cat();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tuple_cat.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tuple_cat.cc
new file mode 100644
index 0000000000..b2279a1121
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/tuple_cat.cc
@@ -0,0 +1,131 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <array>
+
+static_assert(std::is_same<decltype(std::tuple_cat()),
+ std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype(std::tuple_cat
+ (std::declval<std::tuple<>>())),
+ std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype(std::tuple_cat
+ (std::declval<std::tuple<>&>())),
+ std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype(std::tuple_cat
+ (std::declval<const std::tuple<>>())),
+ std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype(std::tuple_cat
+ (std::declval<const std::tuple<>&>())),
+ std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype(std::tuple_cat
+ (std::declval<std::pair<int, bool>>())),
+ std::tuple<int, bool>>::value, "Error");
+static_assert(std::is_same<decltype(std::tuple_cat
+ (std::declval<std::pair<int, bool>&>())),
+ std::tuple<int, bool>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat(std::declval<const std::pair<int, bool>>())),
+ std::tuple<int, bool>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat(std::declval<const std::pair<int, bool>&>())),
+ std::tuple<int, bool>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat(std::declval<std::array<int, 3>>())),
+ std::tuple<int, int, int>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat(std::declval<std::array<int, 3>&>())),
+ std::tuple<int, int, int>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat(std::declval<const std::array<int, 3>>())),
+ std::tuple<int, int, int>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat(std::declval<const std::array<int, 3>&>())),
+ std::tuple<int, int, int>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat
+ (std::declval<std::tuple<>>(), std::declval<std::tuple<>>())),
+ std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat
+ (std::declval<std::tuple<>>(), std::declval<std::tuple<>>(),
+ std::declval<std::tuple<>>())), std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat
+ (std::declval<std::tuple<>>(),
+ std::declval<std::array<char, 0>>(),
+ std::declval<std::array<int, 0>>(),
+ std::declval<std::tuple<>>())), std::tuple<>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat
+ (std::declval<std::tuple<int>>(),
+ std::declval<std::tuple<double>>())),
+ std::tuple<int, double>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat
+ (std::declval<std::tuple<int>>(),
+ std::declval<std::tuple<double>>(),
+ std::declval<std::tuple<const long&>>())),
+ std::tuple<int, double, const long&>>::value, "Error");
+static_assert(std::is_same<decltype
+ (std::tuple_cat
+ (std::declval<std::array<wchar_t, 3>&>(),
+ std::declval<std::tuple<double>>(),
+ std::declval<std::tuple<>>(),
+ std::declval<std::tuple<unsigned&>>(),
+ std::declval<std::pair<bool, std::nullptr_t>>())),
+ std::tuple<wchar_t, wchar_t, wchar_t,
+ double, unsigned&, bool, std::nullptr_t>
+ >::value, "Error");
+
+int main()
+{
+ std::tuple_cat();
+ std::tuple_cat(std::tuple<>{ });
+ std::tuple_cat(std::tuple<>{ }, std::tuple<>{ });
+ std::array<int, 3> a3;
+ std::tuple_cat(a3);
+ std::pair<double, bool> pdb;
+ std::tuple<unsigned, float, std::nullptr_t, void*> t;
+ int i{ };
+ double d{ };
+ int* pi{ };
+ std::tuple<int&, double&, int*&> to{i, d, pi};
+ std::tuple_cat(pdb);
+ std::tuple_cat(to);
+ std::tuple_cat(to, to);
+ std::tuple_cat(a3, pdb);
+ std::tuple_cat(a3, pdb, t);
+ std::tuple_cat(a3, pdb, t, a3);
+ std::tuple_cat(a3, pdb, t, a3, pdb, t);
+
+ static_assert(std::is_same<decltype
+ (std::tuple_cat(a3, pdb, t, a3, pdb, t)),
+ std::tuple<int, int, int, double, bool,
+ unsigned, float, std::nullptr_t, void*,
+ int, int, int, double, bool, unsigned,
+ float, std::nullptr_t, void*>
+ >::value, "Error");
+
+ std::tuple_cat(std::tuple<int, char, void*>{}, to, a3,
+ std::tuple<>{}, std::pair<float,
+ std::nullptr_t>{}, pdb, to);
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cv_tuple_element.cc b/libstdc++-v3/testsuite/20_util/tuple/cv_tuple_element.cc
new file mode 100644
index 0000000000..df4fb435e5
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cv_tuple_element.cc
@@ -0,0 +1,34 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+
+using namespace std;
+
+static_assert(is_same<tuple_element<0, const tuple<double, void, int>>::type,
+ const double>::value, "Error");
+static_assert(is_same<tuple_element<1, volatile tuple<short, void>>::type,
+ volatile void>::value, "Error");
+static_assert(is_same<tuple_element<2, const volatile tuple<float,
+ char, int>>::type, const volatile int>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size.cc b/libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size.cc
new file mode 100644
index 0000000000..8224528f4d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size.cc
@@ -0,0 +1,45 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ VERIFY( tuple_size<const tuple<> >::value == 0 );
+ VERIFY( tuple_size<volatile tuple<int> >::value == 1 );
+ VERIFY( tuple_size<const volatile tuple<void> >::value == 1 );
+
+ typedef tuple<int, const int&, void> test_tuple1;
+ VERIFY( tuple_size<const test_tuple1>::value == 3 );
+ VERIFY( tuple_size<const volatile test_tuple1>::value == 3 );
+ VERIFY( tuple_size<volatile tuple<tuple<void> > >::value == 1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get.cc b/libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get.cc
new file mode 100644
index 0000000000..4dfad5333e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+
+std::tuple<int> ti;
+const std::tuple<int> cti;
+
+constexpr const int& cri = std::get<0>(cti);
+constexpr int& ri = std::get<0>(ti);
+constexpr int&& rri = std::get<0>(std::move(ti));
diff --git a/libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc b/libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc
new file mode 100644
index 0000000000..ccaedf402c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc
@@ -0,0 +1,41 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-17 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+
+void test01()
+{
+ std::tuple<int> t1;
+
+ int&& t1one __attribute__((unused)) = std::get<0>(std::move(t1));
+
+ std::tuple<float, int> t2;
+
+ float&& t2one __attribute__((unused)) = std::get<0>(std::move(t2));
+ int&& t2two __attribute__((unused)) = std::get<1>(std::move(t2));
+
+ std::tuple<short, int, double> t3;
+
+ short&& t3one __attribute__((unused)) = std::get<0>(std::move(t3));
+ int&& t3two __attribute__((unused)) = std::get<1>(std::move(t3));
+ double&& t3thr __attribute__((unused)) = std::get<2>(std::move(t3));
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/moveable2.cc b/libstdc++-v3/testsuite/20_util/tuple/moveable2.cc
index f080074211..5ed8de56a6 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/moveable2.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/moveable2.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -17,7 +17,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <tuple>
#include <utility>
@@ -30,9 +29,8 @@ struct MoveOnly
MoveOnly& operator=(MoveOnly&&)
{ return *this; }
-private:
- MoveOnly(MoveOnly const&); // = delete
- MoveOnly& operator=(MoveOnly const&); // = delete
+ MoveOnly(MoveOnly const&) = delete;
+ MoveOnly& operator=(MoveOnly const&) = delete;
};
MoveOnly
diff --git a/libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc b/libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc
new file mode 100644
index 0000000000..7acf0b9535
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc
@@ -0,0 +1,59 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test;
+
+typedef std::tuple<int> tt1;
+typedef std::tuple<int, double> tt2;
+typedef std::tuple<short, double, int> tt3;
+typedef std::tuple<short, NoexceptMoveAssignClass, double> tt4;
+typedef std::tuple<NoexceptMoveAssignClass,
+ NoexceptMoveAssignClass, double> tt5;
+typedef std::tuple<NoexceptMoveAssignClass,
+ NoexceptMoveAssignClass,
+ NoexceptMoveAssignClass> tt6;
+typedef std::tuple<ExceptMoveAssignClass> tt7;
+typedef std::tuple<ExceptMoveAssignClass, double> tt8;
+typedef std::tuple<short, double, ExceptMoveAssignClass> tt9;
+typedef std::tuple<ExceptMoveAssignClass, double,
+ ExceptMoveAssignClass> tt10;
+typedef std::tuple<NoexceptMoveAssignClass,
+ ExceptMoveAssignClass> tt11;
+typedef std::tuple<int,
+ NoexceptMoveAssignClass,
+ ExceptMoveAssignClass> tt12;
+
+static_assert(std::is_nothrow_move_assignable<tt1>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt2>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt3>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt4>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt5>::value, "Error");
+static_assert(std::is_nothrow_move_assignable<tt6>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt7>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt8>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt9>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt10>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt11>::value, "Error");
+static_assert(!std::is_nothrow_move_assignable<tt12>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/tuple/noexcept_swap.cc b/libstdc++-v3/testsuite/20_util/tuple/noexcept_swap.cc
new file mode 100644
index 0000000000..4ad327036f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/noexcept_swap.cc
@@ -0,0 +1,116 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+#include <testsuite_tr1.h>
+
+using namespace __gnu_test;
+
+typedef std::tuple<int> tt1;
+typedef std::tuple<int, double> tt2;
+typedef std::tuple<short, double, int> tt3;
+typedef std::tuple<short, NoexceptMoveAssignClass, double> tt4;
+typedef std::tuple<ExceptMoveAssignClass> tt5;
+typedef std::tuple<ExceptMoveAssignClass, double> tt6;
+typedef std::tuple<short, double, ExceptMoveAssignClass> tt7;
+typedef std::tuple<ExceptMoveConsClass> tt8;
+typedef std::tuple<int, ExceptMoveConsClass> tt9;
+typedef std::tuple<ExceptMoveConsClass, short, double> tt10;
+typedef std::tuple<short, NoexceptMoveConsClass, double> tt11;
+typedef std::tuple<NoexceptMoveConsClass> tt12;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass> tt13;
+typedef std::tuple<ExceptMoveConsNoexceptMoveAssignClass> tt14;
+typedef std::tuple<NoexceptMoveConsExceptMoveAssignClass> tt15;
+typedef std::tuple<ExceptMoveConsExceptMoveAssignClass> tt16;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ double> tt17;
+typedef std::tuple<double,
+ NoexceptMoveConsNoexceptMoveAssignClass,
+ short> tt18;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass,
+ char> tt19;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass> tt20;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ ExceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass> tt21;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ ExceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsExceptMoveAssignClass> tt22;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ NoexceptMoveConsNoexceptMoveAssignClass,
+ ExceptMoveConsExceptMoveAssignClass> tt23;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ short, ExceptMoveConsExceptMoveAssignClass> tt24;
+typedef std::tuple<NoexceptMoveConsNoexceptMoveAssignClass,
+ short, ExceptMoveConsExceptMoveAssignClass> tt25;
+
+static_assert(noexcept(std::declval<tt1&>().swap(std::declval<tt1&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt2&>().swap(std::declval<tt2&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt3&>().swap(std::declval<tt3&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt4&>().swap(std::declval<tt4&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt5&>().swap(std::declval<tt5&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt6&>().swap(std::declval<tt6&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt7&>().swap(std::declval<tt7&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt8&>().swap(std::declval<tt8&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt9&>().swap(std::declval<tt9&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt10&>().swap(std::declval<tt10&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt11&>().swap(std::declval<tt11&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt12&>().swap(std::declval<tt12&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt13&>().swap(std::declval<tt13&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt14&>().swap(std::declval<tt14&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt15&>().swap(std::declval<tt15&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt16&>().swap(std::declval<tt16&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt17&>().swap(std::declval<tt17&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt18&>().swap(std::declval<tt18&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt19&>().swap(std::declval<tt19&>())),
+ "Error");
+static_assert(noexcept(std::declval<tt20&>().swap(std::declval<tt20&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt21&>().swap(std::declval<tt21&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt22&>().swap(std::declval<tt22&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt23&>().swap(std::declval<tt23&>())),
+ "Error");
+static_assert(!noexcept(std::declval<tt24&>().swap(std::declval<tt24&>())),
+ "Error");
diff --git a/libstdc++-v3/testsuite/20_util/underlying_type/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/underlying_type/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..159e9bd352
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/underlying_type/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef enum E1 : unsigned { } test_type1;
+ typedef enum E2 : char { } test_type2;
+ typedef enum class E3 { } test_type3;
+ typedef enum class E4 : unsigned char { c = 1 } test_type4;
+ typedef enum class E5 : int { a = -1, b = 1 } test_type5;
+ typedef enum class E6 : long { c = __LONG_MAX__ } test_type6;
+
+ template struct underlying_type<test_type1>;
+ template struct underlying_type<test_type2>;
+ template struct underlying_type<test_type3>;
+ template struct underlying_type<test_type4>;
+ template struct underlying_type<test_type5>;
+ template struct underlying_type<test_type6>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-1.cc b/libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-1.cc
new file mode 100644
index 0000000000..777a646845
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-1.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ typedef enum E1 : unsigned { } test_type1;
+ typedef enum E2 : char { } test_type2;
+ typedef enum class E3 { } test_type3;
+ typedef enum class E4 : unsigned char { c = 1 } test_type4;
+ typedef enum class E5 : int { a = -1, b = 1 } test_type5;
+ typedef enum class E6 : long { c = __LONG_MAX__ } test_type6;
+
+ // Check for required typedef
+ typedef std::underlying_type<test_type1>::type type1;
+ typedef std::underlying_type<test_type2>::type type2;
+ typedef std::underlying_type<test_type3>::type type3;
+ typedef std::underlying_type<test_type4>::type type4;
+ typedef std::underlying_type<test_type5>::type type5;
+ typedef std::underlying_type<test_type6>::type type6;
+}
diff --git a/libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-2.cc b/libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-2.cc
new file mode 100644
index 0000000000..b204a4f20a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-2.cc
@@ -0,0 +1,44 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ using namespace std;
+
+ enum E1 : unsigned { };
+ enum E2 : char { };
+ enum class E3 { };
+ enum class E4 : unsigned char { c = 1 };
+ enum class E5 : int { a = -1, b = 1 };
+ enum class E6 : long { c = __LONG_MAX__ };
+
+ static_assert(is_same<underlying_type<E1>::type, unsigned>::value, "Error");
+ static_assert(is_same<underlying_type<E2>::type, char>::value, "Error");
+ static_assert(is_same<underlying_type<E3>::type, int>::value, "Error");
+ static_assert(is_same<underlying_type<E4>::type,
+ unsigned char>::value, "Error");
+ static_assert(is_same<underlying_type<E5>::type, int>::value, "Error");
+ static_assert(is_same<underlying_type<E6>::type, long>::value, "Error");
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/54351.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/54351.cc
new file mode 100644
index 0000000000..2565e62feb
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/54351.cc
@@ -0,0 +1,70 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do run }
+
+// Copyright (C) 2012 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.1 Template class unique_ptr [unique.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A;
+
+struct B
+{
+ std::unique_ptr<A> a;
+};
+
+struct A
+{
+ B* b;
+ ~A() { VERIFY(b->a != nullptr); }
+};
+
+void test01()
+{
+ B b;
+ b.a.reset(new A);
+ b.a->b = &b;
+}
+
+struct C;
+
+struct D
+{
+ std::unique_ptr<C[]> c;
+};
+
+struct C
+{
+ D* d;
+ ~C() { VERIFY(d->c != nullptr); }
+};
+
+void test02()
+{
+ D d;
+ d.c.reset(new C[1]);
+ d.c[0].d = &d;
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
index 1ed53ee2d5..39cc8e1e55 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
@@ -41,10 +41,10 @@ void f()
std::unique_ptr<int, B&> ub(nullptr, b);
std::unique_ptr<int, D&> ud(nullptr, d);
ub = std::move(ud);
-// { dg-error "use of deleted function" "" { target *-*-* } 189 }
+// { dg-error "use of deleted function" "" { target *-*-* } 195 }
std::unique_ptr<int[], B&> uba(nullptr, b);
std::unique_ptr<int[], D&> uda(nullptr, d);
uba = std::move(uda);
-// { dg-error "use of deleted function" "" { target *-*-* } 329 }
+// { dg-error "use of deleted function" "" { target *-*-* } 341 }
}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/dr1401.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/dr1401.cc
new file mode 100644
index 0000000000..fb3b352a9c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/dr1401.cc
@@ -0,0 +1,65 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.1 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+
+// DR 1401
+void test01()
+{
+ std::unique_ptr<int> ptr1, ptr2;
+ if (ptr1 == ptr2)
+ { }
+ if (ptr1 == nullptr)
+ { }
+ if (nullptr == ptr1)
+ { }
+ if (ptr1 != ptr2)
+ { }
+ if (ptr1 != nullptr)
+ { }
+ if (nullptr != ptr1)
+ { }
+ if (ptr1 < ptr2)
+ { }
+ if (ptr1 < nullptr)
+ { }
+ if (nullptr < ptr1)
+ { }
+ if (ptr1 <= ptr2)
+ { }
+ if (ptr1 <= nullptr)
+ { }
+ if (nullptr <= ptr1)
+ { }
+ if (ptr1 > ptr2)
+ { }
+ if (ptr1 > nullptr)
+ { }
+ if (nullptr > ptr1)
+ { }
+ if (ptr1 >= ptr2)
+ { }
+ if (ptr1 >= nullptr)
+ { }
+ if (nullptr >= ptr1)
+ { }
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
index 76910c3c64..32d52ca49e 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
@@ -33,4 +33,3 @@ test01()
const std::auto_ptr<A> a(new A);
std::unique_ptr<A> a2(std::move(a)); // { dg-error "no match" }
}
-// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..c5de14f52f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-14 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+typedef std::unique_ptr<int> uptype;
+
+static_assert(std::is_nothrow_move_constructible<uptype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc
index e765874c72..312ecbe338 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc
@@ -25,7 +25,7 @@
using std::unique_ptr;
-// { dg-excess-errors "static assertion failed" }
+// { dg-prune-output "static assertion failed" }
void
test01()
diff --git a/libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc b/libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
new file mode 100644
index 0000000000..73a0d0f702
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.4.2.1 [tuple.cnstr] Allocator-extended constructors
+
+#include <memory>
+#include <tuple>
+
+struct MyAlloc { };
+
+struct Type
+{
+ typedef MyAlloc allocator_type; // uses_allocator<Type, MyAlloc> is true
+
+ explicit Type(int) { }
+
+ Type(std::allocator_arg_t, MyAlloc) { }
+ Type(MyAlloc) { }
+};
+
+void test01()
+{
+ using std::allocator_arg;
+ using std::tuple;
+
+ MyAlloc a;
+
+ tuple<Type> t(allocator_arg, a, 1);
+}
+// { dg-error "no matching function" "" { target *-*-* } 112 }
diff --git a/libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc b/libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc
new file mode 100644
index 0000000000..94fca79c25
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc
@@ -0,0 +1,108 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.6.7.2 uses-allocator construction
+
+#include <memory>
+#include <tuple>
+#include <testsuite_hooks.h>
+
+struct MyAlloc { };
+
+// type that can't be constructed with an allocator
+struct CannotUse
+{
+ CannotUse(int) : ok(true) { }
+
+ bool ok;
+};
+
+// type that can be constructed with an allocator
+// but which has uses_allocator == false
+struct DoesNotUse
+{
+ typedef MyAlloc allocator_type;
+
+ DoesNotUse(int) : ok(true) { }
+ DoesNotUse(std::allocator_arg_t, MyAlloc, int) : ok(false) { }
+ DoesNotUse(int, MyAlloc) : ok(false) { }
+
+ bool ok;
+};
+
+namespace std
+{
+ template<typename A>
+ struct uses_allocator<DoesNotUse, A> : false_type { };
+}
+
+// type that can be constructed with an allocator as second argument
+struct UsesWithTag
+{
+ typedef MyAlloc allocator_type;
+
+ UsesWithTag(int) : ok(false) { }
+ UsesWithTag(std::allocator_arg_t, MyAlloc, int) : ok(true) { }
+ UsesWithTag(int, MyAlloc) : ok(false) { }
+
+ bool ok;
+};
+
+// type that can be constructed with an allocator as last argument
+struct UsesWithoutTag
+{
+ typedef MyAlloc allocator_type;
+
+ UsesWithoutTag(int) : ok(false) { }
+ UsesWithoutTag(int, MyAlloc) : ok(true) { }
+
+ bool ok;
+};
+
+
+template<typename TestType, typename... T>
+ bool test2(T... args)
+ {
+ using std::allocator_arg;
+ using std::tuple;
+ using std::get;
+
+ tuple<TestType, T...> t(allocator_arg, MyAlloc(), 1, args...);
+
+ return get<0>(t).ok;
+ }
+
+template<typename... T>
+ void test(T... args)
+ {
+ bool test __attribute__((unused)) = true;
+
+ VERIFY( test2<CannotUse>(args...) );
+ VERIFY( test2<DoesNotUse>(args...) );
+ VERIFY( test2<UsesWithTag>(args...) );
+ VERIFY( test2<UsesWithoutTag>(args...) );
+ }
+
+int main()
+{
+ test();
+ test(1);
+ test(1, 2);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
index a210d04327..b72553ba0f 100644
--- a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
@@ -41,13 +41,3 @@ main()
test01();
return 0;
}
-
-// { dg-warning "note" "" { target *-*-* } 354 }
-// { dg-warning "note" "" { target *-*-* } 1085 }
-// { dg-warning "note" "" { target *-*-* } 468 }
-// { dg-warning "note" "" { target *-*-* } 586 }
-// { dg-warning "note" "" { target *-*-* } 1049 }
-// { dg-warning "note" "" { target *-*-* } 1055 }
-// { dg-warning "note" "" { target *-*-* } 341 }
-// { dg-warning "note" "" { target *-*-* } 291 }
-// { dg-warning "note" "" { target *-*-* } 207 }
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..4e9a90df63
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-14 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+
+typedef std::weak_ptr<int> wptype;
+
+static_assert(std::is_nothrow_move_constructible<wptype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
index 666445a152..cd0d4eb51f 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
index 9fce4403dd..88f7c0ab08 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc
index 19c3895216..2d1b4ca86a 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x -fno-inline" }
// { dg-require-string-conversions "" }
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,6 +31,7 @@ class tstring : public std::basic_string<char>
public:
tstring() : std::basic_string<char>() {}
tstring(tstring&& s) : std::basic_string<char>(std::move(s)) {}
+ tstring& operator=(tstring&& s) = default;
};
void test01()
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/noexcept_move_construct.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/noexcept_move_construct.cc
new file mode 100644
index 0000000000..9d3d871ba3
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+
+typedef std::string stype;
+
+static_assert(std::is_nothrow_move_constructible<stype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc
index ed527d5cc1..42026c90bd 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x -fno-inline" }
// { dg-require-string-conversions "" }
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,6 +31,7 @@ class twstring : public std::basic_string<wchar_t>
public:
twstring() : std::basic_string<wchar_t>() {}
twstring(twstring&& s) : std::basic_string<wchar_t>(std::move(s)) {}
+ twstring& operator=(twstring&&) = default;
};
void test01()
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/noexcept_move_construct.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/noexcept_move_construct.cc
new file mode 100644
index 0000000000..07cc8ce521
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+
+typedef std::wstring wstype;
+
+static_assert(std::is_nothrow_move_constructible<wstype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/char/pop_back.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/char/pop_back.cc
new file mode 100644
index 0000000000..1f0f3d884f
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/char/pop_back.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 21.4.6.5 basic_string::pop_back
+// { dg-options "-std=gnu++0x" }
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const std::string cstr("Badger");
+ std::string str = cstr;
+ str.pop_back();
+ VERIFY( str.size() == cstr.size() - 1 );
+
+ str += cstr.back();
+ VERIFY( str == cstr );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/wchar_t/pop_back.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/wchar_t/pop_back.cc
new file mode 100644
index 0000000000..fb5db8c138
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/wchar_t/pop_back.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 21.4.6.5 basic_string::pop_back
+// { dg-options "-std=gnu++0x" }
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const std::wstring cstr(L"Badger");
+ std::wstring str = cstr;
+ str.pop_back();
+ VERIFY( str.size() == cstr.size() - 1 );
+
+ str += cstr.back();
+ VERIFY( str == cstr );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
index 739ceed300..2030b7f632 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
@@ -8,18 +8,17 @@
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-
+//
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
#include <string>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc
index 7d754b3010..e17cc5565b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc
@@ -8,18 +8,17 @@
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
+// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-
+//
// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
#include <string>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc
deleted file mode 100644
index 1ce386cbe9..0000000000
--- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// { dg-do compile }
-// { dg-options "-std=gnu++0x" }
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// 24.6.5, range access [iterator.range]
-
-#include <string>
-
-void
-test01()
-{
- std::string s("Hello, World!");
- std::begin(s);
- std::end(s);
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- std::wstring ws(L"Hello, World!");
- std::begin(ws);
- std::end(ws);
-#endif
-}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
new file mode 100644
index 0000000000..2a0a1bc636
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <string>
+
+void
+test01()
+{
+ std::string s("Hello, World!");
+ std::begin(s);
+ std::end(s);
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
new file mode 100644
index 0000000000..b58332c014
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
@@ -0,0 +1,33 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010. 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <string>
+
+void
+test01()
+{
+#ifdef _GLIBCXX_USE_WCHAR_T
+ std::wstring ws(L"Hello, World!");
+ std::begin(ws);
+ std::end(ws);
+#endif
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc b/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc
index 1f6b970d2b..987aaedf12 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc
@@ -3,7 +3,7 @@
// 2009-11-10 Benjamin Kosnik <benjamin@redhat.com>
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,7 +26,9 @@
void
value()
{
- typedef __gnu_cxx::throw_value_limit value_type;
+ // NB: Instantiating with __gnu_cxx::throw_value_limit would be illegal,
+ // isn't a POD type.
+ typedef char value_type;
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::char_traits<value_type> traits_type;
typedef std::basic_string<value_type, traits_type, allocator_type> test_type;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc b/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc
index 8e27a919ce..dfcda7f2fa 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc
@@ -1,10 +1,9 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-do run { xfail *-*-* } }
// 2009-09-14 Benjamin Kosnik <benjamin@redhat.com>
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,7 +26,9 @@
void
value()
{
- typedef __gnu_cxx::throw_value_limit value_type;
+ // NB: Instantiating with __gnu_cxx::throw_value_limit would be illegal,
+ // isn't a POD type.
+ typedef char value_type;
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::char_traits<value_type> traits_type;
typedef std::basic_string<value_type, traits_type, allocator_type> test_type;
diff --git a/libstdc++-v3/testsuite/21_strings/debug/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/debug/shrink_to_fit.cc
new file mode 100644
index 0000000000..e2c85be268
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/debug/shrink_to_fit.cc
@@ -0,0 +1,39 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/string>
+
+void test01()
+{
+ using __gnu_debug::string;
+ string s;
+ s.reserve(2);
+ s.push_back('a');
+ string::iterator it = s.begin();
+ s.shrink_to_fit();
+ // Following line should assert
+ *it = 'z';
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt_byname/50714.cc b/libstdc++-v3/testsuite/22_locale/codecvt_byname/50714.cc
new file mode 100644
index 0000000000..9bdc310aaa
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/codecvt_byname/50714.cc
@@ -0,0 +1,95 @@
+// { dg-require-namedlocale "de_DE" }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <locale>
+#include <ext/pod_char_traits.h>
+
+#define mychar __gnu_cxx::character<unsigned short, int>
+
+namespace std
+{
+ template<> codecvt<mychar, char, mbstate_t>::~codecvt()
+ { }
+
+ template<>
+ codecvt<mychar, char, mbstate_t>::result
+ codecvt<mychar, char, mbstate_t>::
+ do_out(state_type&, const intern_type*, const intern_type*,
+ const intern_type*&, extern_type*, extern_type*,
+ extern_type*&) const
+ { return codecvt_base::ok; }
+
+ template<>
+ codecvt<mychar, char, mbstate_t>::result
+ codecvt<mychar, char, mbstate_t>::
+ do_in(state_type&, const extern_type*, const extern_type*,
+ const extern_type*&, intern_type*, intern_type*,
+ intern_type*&) const
+ { return codecvt_base::ok; }
+
+ template<>
+ codecvt<mychar, char, mbstate_t>::result
+ codecvt<mychar, char, mbstate_t>::
+ do_unshift(state_type&, extern_type*, extern_type*,
+ extern_type*&) const
+ { return noconv; }
+
+ template<>
+ int
+ codecvt<mychar, char, mbstate_t>::do_encoding() const
+ { return 0; }
+
+ template<>
+ bool
+ codecvt<mychar, char, mbstate_t>::do_always_noconv() const
+ { return false; }
+
+ template<>
+ int
+ codecvt<mychar, char, mbstate_t>::
+ do_length(state_type&, const extern_type*, const extern_type*,
+ size_t) const
+ { return 0; }
+
+ template<>
+ int
+ codecvt<mychar, char, mbstate_t>::do_max_length() const
+ { return 4; }
+}
+
+// libstdc++/50714
+void test01()
+{
+ using namespace std;
+
+ {
+ locale loc(locale::classic(),
+ new codecvt<mychar, char, mbstate_t>());
+ }
+ {
+ locale loc2(locale::classic(),
+ new codecvt_byname<mychar, char, mbstate_t>("de_DE"));
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype_base/53678.cc b/libstdc++-v3/testsuite/22_locale/ctype_base/53678.cc
new file mode 100644
index 0000000000..e4a9f071b9
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype_base/53678.cc
@@ -0,0 +1,28 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+
+// 22.2.1 The ctype category
+
+#include <locale>
+
+// libstdc++/53678
+void test01()
+{
+ bool NetBSD __attribute__((unused)) = true;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
index f56bf67865..0449bf30e4 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
@@ -1,4 +1,5 @@
// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation
//
@@ -105,6 +106,9 @@ void test01(int iters)
std::locale loc1 = std::locale("");
std::locale loc2(loc1, std::locale::classic(),
std::locale::numeric);
+ std::locale loc3 = std::locale("en_US");
+ std::locale loc4(loc3, std::locale::classic(),
+ std::locale::numeric);
}
catch (std::exception&)
{
diff --git a/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc b/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
index c1f9b3e9bf..0408f9c7dc 100644
--- a/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
@@ -2,7 +2,7 @@
// 2001-07-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2003, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2003, 2005, 2009, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -62,8 +62,8 @@ void test01()
// Check byname locale.
catalog cat_byname = mssg_byname.open("libstdc++", loc_c, dir);
- string s03 = mssg_byname.get(cat_de, 0, 0, "please");
- string s04 = mssg_byname.get(cat_de, 0, 0, "thank you");
+ string s03 = mssg_byname.get(cat_byname, 0, 0, "please");
+ string s04 = mssg_byname.get(cat_byname, 0, 0, "thank you");
VERIFY ( s03 == "bitte" );
VERIFY ( s04 == "danke" );
mssg_byname.close(cat_byname);
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
index f1fe57c30a..b21bc3e657 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
@@ -1,6 +1,6 @@
// 2004-04-30 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2004, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,12 +19,11 @@
// 22.2.2.2.1 num_put members
-// On Solaris 9/x86 and 32-bit Solaris 10/x86, this test crashes in libc.
-// Inside libstdc++, we call sprintf like so:
+// On Solaris 9/x86 and 32-bit Solaris 10/x86 before update 10, this test
+// crashes in libc. Inside libstdc++, we call sprintf like so:
// sprintf (buffer, "%.*f", 1000, 1.0)
// which crashes.
// { dg-xfail-run-if "" i?86-*-solaris2.9 }
-// { dg-xfail-run-if "" { i?86-*-solaris2.10 && ilp32 } }
#include <locale>
#include <sstream>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
index 7993691e91..5cf0d048a1 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
@@ -1,7 +1,7 @@
// { dg-require-namedlocale "de_DE" }
// { dg-require-namedlocale "es_ES" }
-// Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,23 +22,60 @@
#include <locale>
#include <testsuite_hooks.h>
-int main()
+// Make sure that formatted output uses the locale in the output stream.
+using namespace std;
+locale l1 = locale("de_DE");
+const num_put<char>& np = use_facet<num_put<char> >(l1);
+const numpunct<char>& npunct = use_facet<numpunct<char> >(l1);
+
+void test01()
{
- using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ locale l2 = locale("C");
+ const numpunct<char>& npunct2 = use_facet<numpunct<char> >(l2);
+ char c = npunct2.thousands_sep();
+ string s = npunct2.grouping();
+
+ ostringstream oss;
+ oss.imbue(l2);
+
+ long l = 1234567890;
+ np.put(oss.rdbuf(), oss, ' ', l);
+ string res = oss.str();
+
+ VERIFY( res == "1234567890" );
+}
+void test02()
+{
bool test __attribute__((unused)) = true;
- locale l1 = locale("de_DE");
+
locale l2 = locale("es_ES");
-
- const num_put<char>& np = use_facet<num_put<char> >(l1);
+ const numpunct<char>& npunct3 = use_facet<numpunct<char> >(l2);
+ char c = npunct3.thousands_sep();
+ string s = npunct3.grouping();
+
ostringstream oss;
oss.imbue(l2);
long l = 1234567890;
- np.put(oss.rdbuf(), oss, ' ', l); // 1234567890
+ np.put(oss.rdbuf(), oss, ' ', l);
string res = oss.str();
-
- VERIFY( res == "1234567890" );
+ if (!s.empty())
+ VERIFY( res == "1.234.567.890" );
+ else
+ VERIFY( res == "1234567890" );
+}
+
+int main()
+{
+ // Sanity check.
+ char c = npunct.thousands_sep();
+ string s = npunct.grouping();
+
+ test01();
+ test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
index 5b83015401..d14da443d0 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
@@ -1,6 +1,6 @@
// 2004-04-30 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2004, 2009, 2010 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,11 +23,11 @@
#include <sstream>
#include <testsuite_hooks.h>
-// On Solaris 9 and 32-bit Solaris 10/x86, this test crashes in libc. Inside
-// libstdc++, we call sprintf like so:
+// On Solaris 9 and 32-bit Solaris 10/x86 before update 10, this test crashes
+// in libc. Inside libstdc++, we call sprintf like so:
// sprintf (buffer, "%.*f", 1000, 1.0)
// which crashes.
-// { dg-do run { xfail { i?86-*-solaris2.9 || { i?86-*-solaris2.10 && ilp32 } } } }
+// { dg-do run { xfail { i?86-*-solaris2.9 } } }
// libstdc++/14220
void test01()
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
index 1298fa9e5e..7aa40caad5 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-time "" }
+
// 22.2.5.3.1 time_put members
#include <locale>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
index c231354743..2a7644e0de 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-time "" }
+
// 22.2.5.3.1 time_put members
#include <locale>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
index 2ec4225ba9..2264c03588 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-time "" }
+
// 22.2.5.3.1 time_put members
#include <locale>
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/constexpr_functions.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/constexpr_functions.cc
new file mode 100644
index 0000000000..3dcb296871
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/constexpr_functions.cc
@@ -0,0 +1,53 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+
+namespace __gnu_test
+{
+ struct constexpr_member_functions
+ {
+ template<typename _Ttesttype>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ constexpr _Ttesttype a = { };
+ constexpr auto v1 __attribute__((unused)) = a.size();
+ constexpr auto v2 __attribute__((unused)) = a.max_size();
+ constexpr auto v3 __attribute__((unused)) = a.empty();
+ }
+ };
+
+ _Concept c;
+ c.__constraint();
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::constexpr_member_functions test;
+ test.operator()<std::array<long, 60>>();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
new file mode 100644
index 0000000000..534c2236b3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ {
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+
+ VERIFY( a.empty() == false );
+ }
+
+ {
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 0;
+ typedef std::array<int, len> array_type;
+ array_type a;
+
+ VERIFY( a.empty() == true );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
new file mode 100644
index 0000000000..a9edb8aab0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ {
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+
+ VERIFY( a.max_size() == len );
+ }
+
+ {
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 0;
+ typedef std::array<int, len> array_type;
+ array_type a;
+
+ VERIFY( a.max_size() == len );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
new file mode 100644
index 0000000000..adfe43b135
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ {
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+
+ VERIFY( a.size() == len );
+ }
+
+ {
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 0;
+ typedef std::array<int, len> array_type;
+ array_type a;
+
+ VERIFY( a.size() == len );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc
new file mode 100644
index 0000000000..2bc4174db2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ bool test __attribute__((unused)) = true;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3, 4 } };
+ array_type c = { { 0, 1, 2, 3 } };
+
+ VERIFY( a == b );
+ VERIFY( !(a == c) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater.cc
new file mode 100644
index 0000000000..dc30102c52
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ bool test __attribute__((unused)) = true;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3, 4 } };
+ array_type c = { { 0, 1, 2, 3, 7 } };
+
+ VERIFY( !(a > b) );
+ VERIFY( c > a );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater_or_equal.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater_or_equal.cc
new file mode 100644
index 0000000000..96a4e42a61
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater_or_equal.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ bool test __attribute__((unused)) = true;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3, 4 } };
+ array_type c = { { 0, 1, 2, 3, 7 } };
+
+ VERIFY( a >= b );
+ VERIFY( c >= a );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/less.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/less.cc
new file mode 100644
index 0000000000..bd64e03598
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/less.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ bool test __attribute__((unused)) = true;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3, 4 } };
+ array_type c = { { 0, 1, 2, 3, 7 } };
+
+ VERIFY( !(a < b) );
+ VERIFY( a < c );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/less_or_equal.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/less_or_equal.cc
new file mode 100644
index 0000000000..2644948f9c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/less_or_equal.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ bool test __attribute__((unused)) = true;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3, 4 } };
+ array_type c = { { 0, 1, 2, 3, 7 } };
+
+ VERIFY( a <= b );
+ VERIFY( a <= c );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/not_equal.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/not_equal.cc
new file mode 100644
index 0000000000..81d3e0e344
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/not_equal.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ bool test __attribute__((unused)) = true;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3, 4 } };
+ array_type c = { { 0, 1, 2, 3 } };
+
+ VERIFY( !(a != b) );
+ VERIFY( a != c );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/cons/aggregate_initialization.cc b/libstdc++-v3/testsuite/23_containers/array/cons/aggregate_initialization.cc
new file mode 100644
index 0000000000..04959dceec
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/cons/aggregate_initialization.cc
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+
+void
+test01()
+{
+ typedef std::array<int, 5> array_type;
+
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ array_type b = { { 0, 1, 2, 3 } };
+
+ a = b;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/54388.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/54388.cc
new file mode 100644
index 0000000000..a69a5edb6a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/54388.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ bool valid = true;
+ ~A() { valid = false; }
+};
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const std::array<A, 1> a;
+ const A& aa = a.at(0);
+ VERIFY(aa.valid);
+}
+
+int main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
new file mode 100644
index 0000000000..08b91e5937
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
@@ -0,0 +1,31 @@
+// { dg-do run { xfail *-*-* } }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+
+int main()
+{
+ // Expected behavior is to either throw and have the uncaught
+ // exception end up in a terminate handler which eventually exits,
+ // or abort. (Depending on -fno-exceptions.)
+ constexpr std::array<int, 3> a{{1, 2, 3}};
+ auto i __attribute__((unused)) = a.at(4);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/at_out_of_range.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/at_out_of_range.cc
new file mode 100644
index 0000000000..4508fe277c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/at_out_of_range.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+
+ try
+ {
+ a.at(len);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& obj)
+ {
+ // Expected.
+ VERIFY( true );
+ }
+ catch(...)
+ {
+ // Failed.
+ VERIFY( false );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/back.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/back.cc
new file mode 100644
index 0000000000..ac916f4d0a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/back.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+
+ {
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ int& ri = a.back();
+ VERIFY( ri == 4 );
+ }
+
+ {
+ const array_type ca = { { 4, 3, 2, 1, 0 } };
+ const int& cri = ca.back();
+ VERIFY( cri == 0 );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_element_access.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_element_access.cc
new file mode 100644
index 0000000000..c2f301adcd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_element_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+
+int main()
+{
+ // array
+ typedef std::array<std::size_t, 6> array_type;
+ constexpr array_type a = { { 0, 55, 66, 99, 4115, 2 } };
+ constexpr auto v1 __attribute__((unused)) = a[1];
+ constexpr auto v2 __attribute__((unused)) = a.at(2);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/data.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/data.cc
new file mode 100644
index 0000000000..2387b4632f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/data.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+
+ {
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ int* pi = a.data();
+ VERIFY( *pi == 0 );
+ }
+
+ {
+ const array_type ca = { { 4, 3, 2, 1, 0 } };
+ const int* pci = ca.data();
+ VERIFY( *pci == 4 );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/front.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/front.cc
new file mode 100644
index 0000000000..5b2c022edf
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/front.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+
+ {
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ int& ri = a.front();
+ VERIFY( ri == 0 );
+ }
+
+ {
+ const array_type ca = { { 4, 3, 2, 1, 0 } };
+ const int& cri = ca.front();
+ VERIFY( cri == 4 );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/iterators/end_is_one_past.cc b/libstdc++-v3/testsuite/23_containers/array/iterators/end_is_one_past.cc
new file mode 100644
index 0000000000..fcc482a221
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/iterators/end_is_one_past.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+
+ array_type::iterator b = a.begin();
+ array_type::iterator e = a.end();
+
+ VERIFY( e != (b + a.size() - 1) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/range_access.cc b/libstdc++-v3/testsuite/23_containers/array/range_access.cc
index 77d036276f..fb691d0d80 100644
--- a/libstdc++-v3/testsuite/23_containers/array/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_functions.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_functions.cc
deleted file mode 100644
index ef8c5aac72..0000000000
--- a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_functions.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// { dg-do compile }
-// { dg-options "-std=gnu++0x" }
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <array>
-#include <testsuite_common_types.h>
-
-namespace __gnu_test
-{
- struct constexpr_member_functions
- {
- template<typename _Ttesttype>
- void
- operator()()
- {
- struct _Concept
- {
- void __constraint()
- {
- constexpr _Ttesttype a = { };
- constexpr auto v1 __attribute__((unused)) = a.size();
- constexpr auto v2 __attribute__((unused)) = a.max_size();
- constexpr auto v3 __attribute__((unused)) = a.empty();
- }
- };
-
- _Concept c;
- c.__constraint();
- }
- };
-}
-
-int main()
-{
- __gnu_test::constexpr_member_functions test;
- test.operator()<std::array<long, 60>>();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/contiguous.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/contiguous.cc
new file mode 100644
index 0000000000..b6c970b0e2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/contiguous.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+ array_type a = { { 0, 1, 2, 3, 4 } };
+
+ // &a[n] == &a[0] + n for all 0 <= n < N.
+ for (size_t i = 0; i < len; ++i)
+ {
+ VERIFY( &a[i] == &a[0] + i );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/member_swap.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/member_swap.cc
new file mode 100644
index 0000000000..1f6d0e8d61
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/member_swap.cc
@@ -0,0 +1,46 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ const array_type a_ref = a;
+
+ array_type b = { { 4, 3, 2, 1, 0 } };
+ const array_type b_ref = b;
+
+ a.swap(b);
+ VERIFY( a == b_ref );
+ VERIFY( b == a_ref );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/zero_sized_arrays.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/zero_sized_arrays.cc
new file mode 100644
index 0000000000..ed29e2a1ea
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/zero_sized_arrays.cc
@@ -0,0 +1,59 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 0;
+ typedef std::array<int, len> array_type;
+
+ // 1: ?
+ array_type a = { };
+
+ // 2
+ array_type b;
+
+ // 3
+ // begin() == end()
+ VERIFY( a.begin() == a.end() );
+ VERIFY( b.begin() == b.end() );
+
+ // 4: ?
+ // begin() == end() == unique value.
+ {
+ typedef std::array<long, len> array_type1;
+ typedef std::array<char, len> array_type2;
+ array_type1 one;
+ array_type2 two;
+ void* v1 = one.begin();
+ void* v2 = two.begin();
+ VERIFY( v1 != v2 );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap.cc b/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap.cc
new file mode 100644
index 0000000000..8bf77eed89
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap.cc
@@ -0,0 +1,46 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const size_t len = 5;
+ typedef std::array<int, len> array_type;
+
+ array_type a = { { 0, 1, 2, 3, 4 } };
+ const array_type a_ref = a;
+
+ array_type b = { { 4, 3, 2, 1, 0 } };
+ const array_type b_ref = b;
+
+ std::swap(a, b);
+ VERIFY( a == b_ref );
+ VERIFY( b == a_ref );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
new file mode 100644
index 0000000000..3346ffd344
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <array>
+
+std::array<int, 5> ai;
+const std::array<int, 5> cai(ai);
+
+constexpr const int& cri = std::get<0>(cai);
+constexpr int& ri = std::get<0>(ai);
+constexpr int&& rri = std::get<0>(std::move(ai));
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
new file mode 100644
index 0000000000..1919aade3b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-05-16 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+
+void test01()
+{
+ std::array<int, 2> a;
+
+ int&& aone __attribute__((unused)) = std::get<0>(std::move(a));
+ int&& atwo __attribute__((unused)) = std::get<1>(std::move(a));
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
new file mode 100644
index 0000000000..fac21a1aca
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
@@ -0,0 +1,49 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ {
+ const size_t len = 3;
+ typedef array<int, len> array_type;
+ VERIFY( (is_same<tuple_element<0, array_type>::type, int>::value == true) );
+ VERIFY( (is_same<tuple_element<1, array_type>::type, int>::value == true) );
+ VERIFY( (is_same<tuple_element<2, array_type>::type, int>::value == true) );
+ }
+
+ {
+ const size_t len = 0;
+ typedef array<int, len> array_type;
+ VERIFY( (is_same<tuple_element<0, array_type>::type, int>::value == true) );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
new file mode 100644
index 0000000000..f69dceaac7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
@@ -0,0 +1,46 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ {
+ const size_t len = 5;
+ typedef array<int, len> array_type;
+ VERIFY( tuple_size<array_type>::value == 5 );
+ }
+
+ {
+ const size_t len = 0;
+ typedef array<float, len> array_type;
+ VERIFY( tuple_size<array_type>::value == 0 );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr-2.cc b/libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr-2.cc
new file mode 100644
index 0000000000..14ab8e7127
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr-2.cc
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-require-normal-mode "" }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <bitset>
+
+int main()
+{
+ // bitset base type
+ typedef std::_Base_bitset<6> bitset_base;
+ constexpr bitset_base base = bitset_base();
+
+ constexpr auto r1 __attribute__((unused)) = base._M_getword(2);
+ // constexpr auto r2 = base._M_getdata(); // error, pointer to this
+ auto r2 __attribute__((unused)) = base._M_getdata();
+ constexpr auto r3 __attribute__((unused)) = base._M_hiword();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr.cc b/libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr.cc
new file mode 100644
index 0000000000..384f01a5df
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <bitset>
+
+int main()
+{
+ // bitset operators
+ typedef std::bitset<6> bitset_type;
+ constexpr bitset_type a = bitset_type();
+ constexpr auto v __attribute__((unused)) = a[0];
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
index 6e34f0bff4..c5d70dcf70 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
index b7e12b3d1c..23d4dfc702 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
index 5f7fac6df4..4cd5564560 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/shrink_to_fit.cc
new file mode 100644
index 0000000000..4cce4bd373
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/shrink_to_fit.cc
@@ -0,0 +1,51 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+
+void test01()
+{
+ using std::deque;
+ deque<int> d;
+ // Lets generate a hole at the begining of the deque:
+ d.push_back(0);
+ d.push_back(1);
+ d.pop_front();
+ deque<int>::iterator it;
+ do
+ {
+ d.push_back(2);
+ it = d.begin();
+ auto old_abegin = &*d.begin();
+ d.shrink_to_fit();
+ if (&*d.begin() != old_abegin)
+ break;
+ }
+ while (true);
+ // Following line should assert
+ *it = 2;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/52799.cc b/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/52799.cc
new file mode 100644
index 0000000000..35c4c44ef9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/52799.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <deque>
+
+// libstdc++/52799
+int main()
+{
+ std::deque<int> d;
+ d.emplace(d.begin());
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc b/libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc
new file mode 100644
index 0000000000..290a191c26
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <deque>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+// libstdc++/49836
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using __gnu_test::CopyConsOnlyType;
+ using __gnu_test::MoveConsOnlyType;
+
+ std::deque<CopyConsOnlyType> d1;
+ CopyConsOnlyType t1(1);
+ d1.push_back(t1);
+ d1.push_back(t1);
+ d1.push_back(t1);
+ VERIFY( d1.size() == 3 );
+
+ std::deque<MoveConsOnlyType> d2;
+ MoveConsOnlyType t2(1);
+ d2.push_back(std::move(t2));
+ d2.push_back(std::move(t2));
+ d2.push_back(std::move(t2));
+ VERIFY( d2.size() == 3 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/modifiers/push_front/49836.cc b/libstdc++-v3/testsuite/23_containers/deque/modifiers/push_front/49836.cc
new file mode 100644
index 0000000000..b481aff3bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/modifiers/push_front/49836.cc
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <deque>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+// libstdc++/49836
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using __gnu_test::CopyConsOnlyType;
+ using __gnu_test::MoveConsOnlyType;
+
+ std::deque<CopyConsOnlyType> d1;
+ CopyConsOnlyType t1(1);
+ d1.push_front(t1);
+ d1.push_front(t1);
+ d1.push_front(t1);
+ VERIFY( d1.size() == 3 );
+
+ std::deque<MoveConsOnlyType> d2;
+ MoveConsOnlyType t2(1);
+ d2.push_front(std::move(t2));
+ d2.push_front(std::move(t2));
+ d2.push_front(std::move(t2));
+ VERIFY( d2.size() == 3 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
index d996ed6d1b..7c75889545 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
index ecd115e3aa..006041dc5f 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1661 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1670 }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
index 4de01c8260..c7ed29a210 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1594 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1603 }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
index 78eeb8dbc6..e390f44b56 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1594 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1603 }
#include <deque>
#include <utility>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
index f29152cb7c..ed81d582fd 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1745 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1754 }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
index 4798e93e07..702acfe34c 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
index 0f9eb45858..7dec2a4b49 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
index c12282b716..eb447274b5 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
index 572b9ee331..6197731cb7 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
index a19d47a869..3d23719ca6 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
index 6f45a73a77..ca7b5f7e6e 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
index 3fccff4345..f385661f2c 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
index 54e3527a8b..f037791346 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
index 42470342e6..3cf4288f42 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
index 590fad669b..ce7bb85974 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..36559b7821
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <forward_list>
+
+typedef std::forward_list<int> fltype;
+
+static_assert(std::is_nothrow_move_constructible<fltype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
index 23ea900b87..57e0e2f532 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
index f2cd59370a..8f36076194 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
index 6e24335950..2efaa74cac 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
index 70a0a34568..b17707e616 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
index 9e4b3d4993..087abcecdb 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
index 6aabbea608..46a74da5f9 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
index 29c418a08d..a057c9cfa7 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
index 9390827c08..49a48f74d8 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
index 77dcb750eb..a1ff667f58 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
index 42fe202342..3d25787dee 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
index 08d49a54ab..84d39ae993 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
index db9fd5e093..18e1670cc3 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
index 4ad698f3c9..325028c72a 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
index 4a93666b22..6238f6f8fd 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
index 60297551dc..e19be90ebd 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
@@ -34,6 +34,10 @@ test01()
VERIFY( before == fl1.before_begin() );
VERIFY( end == fl1.end() );
+
+ // no-op just to check that debug mode does not see any problem with it.
+ fl1.splice_after(fl1.before_begin(), std::move(fl2),
+ fl2.before_begin(), fl2.begin());
}
int
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
index 3ee7f689ae..d0cee48b2b 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
index 6a7fcfb22c..5455623229 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
index 55e50dc051..1e63e90a5c 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
index 4c161906e0..9582a8b3ec 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
index 486bfcf072..85884c0af0 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
index 18b6f3c054..09ad6aa6ed 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
index b6ae3f3795..b6c6e35eb8 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
index cade58f7da..349be4c2eb 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
index 10444f0500..554ac030df 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
index 65190789cc..26a422665c 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
new file mode 100644
index 0000000000..43a11be285
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
@@ -0,0 +1,94 @@
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <forward_list>
+
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::forward_list<int> fl1(1, 5), fl2(1, 4), fl3(1, 3),
+ fl4(1, 2), fl5(1, 1), fl6(1, 0);
+
+ fl1.splice_after(fl1.before_begin(), fl2);
+
+ auto it = fl1.begin();
+
+ VERIFY( *it == 4 );
+
+ ++it;
+
+ VERIFY( *it == 5 );
+
+ fl3.splice_after(fl3.before_begin(), fl4, fl4.before_begin());
+
+ it = fl3.begin();
+
+ VERIFY( *it == 2 );
+
+ ++it;
+
+ VERIFY( *it == 3 );
+
+ fl5.splice_after(fl5.before_begin(), fl6, fl6.before_begin(), fl6.end());
+
+ it = fl5.begin();
+
+ VERIFY( *it == 0 );
+
+ ++it;
+
+ VERIFY( *it == 1 );
+
+ fl1.merge(fl2);
+
+ it = fl1.begin();
+
+ VERIFY( *it == 4 );
+
+ ++it;
+
+ VERIFY( *it == 5 );
+
+ fl1.merge(fl3, std::less<int>());
+
+ it = fl1.begin();
+
+ VERIFY( *it == 2 );
+
+ ++it;
+
+ VERIFY( *it == 3 );
+
+ ++it;
+
+ VERIFY( *it == 4 );
+
+ ++it;
+
+ VERIFY( *it == 5 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
index 5a996f3411..31eaaa5a46 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
@@ -68,7 +68,7 @@ test02()
VERIFY(*befy == 10.0);
++befy;
- VERIFY(*befy == 15.0);
+ VERIFY(*befy == 14.0);
}
// This test verifies the following:
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
index 32a7db3eaa..fe12af9aa6 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
index f227daa1f3..f112bc2d89 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
index 3bf61aad9f..6c09065e55 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
index 1291a26904..55d1634c40 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
index 2b8e3c74d4..082d2adbbc 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
index bad78e2650..fd71cb6314 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
index 378cd9f0b1..350b8286ca 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
index e87fa60c3f..477e4d9716 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
@@ -1,9 +1,8 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1206 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1221 }
-// Copyright (C) 2009, 2010 Free Software Foundation
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
index 5da159c135..fd44e9bbb9 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
@@ -1,9 +1,8 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1206 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1221 }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
index 785fe51364..f9f3262b7d 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
@@ -1,9 +1,8 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1206 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1221 }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
index aabc8b8f71..e26fdccd4c 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
@@ -1,9 +1,8 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1206 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1221 }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..109057c973
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <forward_list>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::forward_list<int, __gnu_test::ExplicitConsAlloc<int>>;
+template class std::forward_list<int, __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
index e9317d7ed7..bded29ee68 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <array>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
index 0a2e073a50..b5a10d2d61 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <tuple>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
index 0b32304ca6..612124006c 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <unordered_map>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
index bc6963c80d..85aca13c34 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <unordered_set>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
index cb6c29ac8d..3b0e8dc725 100644
--- a/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/1.h b/libstdc++-v3/testsuite/23_containers/list/capacity/1.h
index 4a2f2bc06a..408e0786c5 100644
--- a/libstdc++-v3/testsuite/23_containers/list/capacity/1.h
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/1.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
index f2f51f2235..d8c88b526b 100644
--- a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/list/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..f54d4a1d37
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+
+typedef std::list<int> ltype;
+
+static_assert(std::is_nothrow_move_constructible<ltype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
index cf8c20a657..4d56b154ab 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
index 2d7e45bb1e..2abc063e1b 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
index c055f70bc7..dea0d4c44c 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
index ee9b54923d..1879ed2e5a 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
index e95f797cb5..b25467bdb1 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
index 8454c3f46f..990cf227cf 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
index 64602ac4c1..c4017db49a 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/52799.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/52799.cc
new file mode 100644
index 0000000000..314dd4a804
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/52799.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+
+// libstdc++/52799
+int main()
+{
+ std::list<int> l;
+ l.emplace(l.begin());
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
index eb286e0f54..6fbcf6c172 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
index aebbe0ba53..772128d95b 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/1.cc b/libstdc++-v3/testsuite/23_containers/list/operations/1.cc
index 2c98213e2a..48c7d908cf 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/1.h b/libstdc++-v3/testsuite/23_containers/list/operations/1.h
index 2f3f9df946..601c5e7726 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/1.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/1.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2.cc
index 100066fc29..7cd5762201 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2.h b/libstdc++-v3/testsuite/23_containers/list/operations/2.h
index 8eb3da4e78..6db3333bd0 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/2.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/2.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
index faaf2f765b..6d744a0151 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3.cc
index 53570b4a69..1ed46b21dc 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/3.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3.h b/libstdc++-v3/testsuite/23_containers/list/operations/3.h
index 4d28daea12..9181e7ea9f 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/3.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/3.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
index 0598cfb225..37a480606f 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/4.cc b/libstdc++-v3/testsuite/23_containers/list/operations/4.cc
index a220b9b331..4e14f1ae62 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/4.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/4.h b/libstdc++-v3/testsuite/23_containers/list/operations/4.h
index 0a3ea4d234..6502827470 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/4.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/4.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc b/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
index a61071acc1..7e6c9c4f12 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/5.cc b/libstdc++-v3/testsuite/23_containers/list/operations/5.cc
index ad99c27ae4..bcfbb81b77 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/5.h b/libstdc++-v3/testsuite/23_containers/list/operations/5.h
index 2b54d5195f..0820e8a695 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/5.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/5.h
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/range_access.cc b/libstdc++-v3/testsuite/23_containers/list/range_access.cc
index afe148d9e6..768bd638a6 100644
--- a/libstdc++-v3/testsuite/23_containers/list/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
index 96a14e4dad..7bf99e1678 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
@@ -1,6 +1,6 @@
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1491 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1501 }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
index cc10877fab..3d9dbb15c4 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
@@ -1,6 +1,6 @@
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1447 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1457 }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
index acc64e4afd..22cfe04c24 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
@@ -1,6 +1,6 @@
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1447 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1457 }
#include <list>
#include <utility>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
index 8df0ac528c..ff9d2faffd 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
@@ -1,6 +1,6 @@
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1447 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1457 }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..965eb9ef95
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,27 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <list>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::list<int, __gnu_test::ExplicitConsAlloc<int> >;
+template class std::list<int, __gnu_test::ExplicitConsAlloc<char> >;
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5_c++0x.cc
new file mode 100644
index 0000000000..83f207c17f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5_c++0x.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <list>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::list<int, __gnu_test::ExplicitConsAlloc<int>>;
+template class std::list<int, __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
index 41e43c6688..303160801a 100644
--- a/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/map/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/map/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..9ff36ef7eb
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <map>
+
+typedef std::map<int, int> mtype;
+
+static_assert(std::is_nothrow_move_constructible<mtype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc b/libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc
new file mode 100644
index 0000000000..2a22494522
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <map>
+#include <testsuite_hooks.h>
+
+// c++/39901
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::map<std::pair<int, int>, int> the_map;
+
+ the_map[{0, 1}] = 5;
+ VERIFY( (the_map.size() == 1) );
+ VERIFY( (the_map[{0, 1}] == 5) );
+
+ VERIFY( (the_map[{0, 0}] == 0) );
+ VERIFY( (the_map.size() == 2) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
new file mode 100644
index 0000000000..f50b7b7e9f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <map>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+bool operator<(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::map<X, int>& s, X x)
+{
+ std::map<X, int>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/operations/count.cc b/libstdc++-v3/testsuite/23_containers/map/operations/count.cc
new file mode 100644
index 0000000000..dfbaee6eda
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/operations/count.cc
@@ -0,0 +1,106 @@
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <map>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ typedef map<int, int>::value_type value_type;
+
+ map<int, int> m0;
+ VERIFY( m0.count(0) == 0 );
+ VERIFY( m0.count(1) == 0 );
+
+ m0.insert(value_type(1, 1));
+ VERIFY( m0.count(0) == 0 );
+ VERIFY( m0.count(1) == 1 );
+
+ m0.insert(value_type(1, 2));
+ VERIFY( m0.count(0) == 0 );
+ VERIFY( m0.count(1) == 1 );
+
+ m0.insert(value_type(2, 1));
+ VERIFY( m0.count(2) == 1 );
+
+ m0.insert(value_type(3, 1));
+ m0.insert(value_type(3, 2));
+ m0.insert(value_type(3, 3));
+ VERIFY( m0.count(3) == 1 );
+
+ m0.erase(2);
+ VERIFY( m0.count(2) == 0 );
+
+ m0.erase(0);
+ VERIFY( m0.count(0) == 0 );
+
+ map<int, int> m1(m0);
+ VERIFY( m1.count(0) == 0 );
+ VERIFY( m1.count(1) == 1 );
+ VERIFY( m1.count(2) == 0 );
+ VERIFY( m1.count(3) == 1 );
+
+ m0.clear();
+ VERIFY( m0.count(0) == 0 );
+ VERIFY( m0.count(1) == 0 );
+ VERIFY( m0.count(2) == 0 );
+ VERIFY( m0.count(3) == 0 );
+
+ m1.insert(value_type(4, 1));
+ m1.insert(value_type(5, 1));
+ m1.insert(value_type(5, 2));
+ m1.insert(value_type(5, 3));
+ m1.insert(value_type(5, 4));
+ VERIFY( m1.count(4) == 1 );
+ VERIFY( m1.count(5) == 1 );
+
+ m1.erase(1);
+ VERIFY( m1.count(1) == 0 );
+
+ m1.erase(m1.find(5));
+ VERIFY( m1.count(5) == 0 );
+
+ m1.insert(value_type(1, 1));
+ m1.insert(value_type(1, 2));
+ VERIFY( m1.count(1) == 1 );
+
+ m1.erase(5);
+ VERIFY( m1.count(5) == 0 );
+
+ m1.erase(m1.find(4));
+ VERIFY( m1.count(4) == 0 );
+
+ m1.clear();
+ VERIFY( m1.count(0) == 0 );
+ VERIFY( m1.count(1) == 0 );
+ VERIFY( m1.count(2) == 0 );
+ VERIFY( m1.count(3) == 0 );
+ VERIFY( m1.count(4) == 0 );
+ VERIFY( m1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
index c5fd9cd0db..09120528cc 100644
--- a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
@@ -42,4 +42,3 @@ void test01()
test &= itr == mapByName.end(); // { dg-error "no" }
}
-// { dg-excess-errors "" }
diff --git a/libstdc++-v3/testsuite/23_containers/map/range_access.cc b/libstdc++-v3/testsuite/23_containers/map/range_access.cc
index 2fb7f4ac94..1e4e3c1878 100644
--- a/libstdc++-v3/testsuite/23_containers/map/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..b4fbfff56e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::map<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int> >;
+template class std::map<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char> >;
diff --git a/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5_c++0x.cc b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5_c++0x.cc
new file mode 100644
index 0000000000..3f9a7f8d70
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5_c++0x.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::map<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::map<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
index 8ec893114d..a8e407daf9 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..96546f51b5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <map>
+
+typedef std::multimap<int, int> mmtype;
+
+static_assert(std::is_nothrow_move_constructible<mmtype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
new file mode 100644
index 0000000000..ee687f77cf
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <map>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+bool operator<(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::multimap<X, int>& s, X x)
+{
+ std::multimap<X, int>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc b/libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc
new file mode 100644
index 0000000000..2658615776
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc
@@ -0,0 +1,106 @@
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <map>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ typedef multimap<int, int>::value_type value_type;
+
+ multimap<int, int> mm0;
+ VERIFY( mm0.count(0) == 0 );
+ VERIFY( mm0.count(1) == 0 );
+
+ mm0.insert(value_type(1, 1));
+ VERIFY( mm0.count(0) == 0 );
+ VERIFY( mm0.count(1) == 1 );
+
+ mm0.insert(value_type(1, 2));
+ VERIFY( mm0.count(0) == 0 );
+ VERIFY( mm0.count(1) == 2 );
+
+ mm0.insert(value_type(2, 1));
+ VERIFY( mm0.count(2) == 1 );
+
+ mm0.insert(value_type(3, 1));
+ mm0.insert(value_type(3, 2));
+ mm0.insert(value_type(3, 3));
+ VERIFY( mm0.count(3) == 3 );
+
+ mm0.erase(2);
+ VERIFY( mm0.count(2) == 0 );
+
+ mm0.erase(0);
+ VERIFY( mm0.count(0) == 0 );
+
+ multimap<int, int> mm1(mm0);
+ VERIFY( mm1.count(0) == 0 );
+ VERIFY( mm1.count(1) == 2 );
+ VERIFY( mm1.count(2) == 0 );
+ VERIFY( mm1.count(3) == 3 );
+
+ mm0.clear();
+ VERIFY( mm0.count(0) == 0 );
+ VERIFY( mm0.count(1) == 0 );
+ VERIFY( mm0.count(2) == 0 );
+ VERIFY( mm0.count(3) == 0 );
+
+ mm1.insert(value_type(4, 1));
+ mm1.insert(value_type(5, 1));
+ mm1.insert(value_type(5, 2));
+ mm1.insert(value_type(5, 3));
+ mm1.insert(value_type(5, 4));
+ VERIFY( mm1.count(4) == 1 );
+ VERIFY( mm1.count(5) == 4 );
+
+ mm1.erase(1);
+ VERIFY( mm1.count(1) == 0 );
+
+ mm1.erase(mm1.find(5));
+ VERIFY( mm1.count(5) == 3 );
+
+ mm1.insert(value_type(1, 1));
+ mm1.insert(value_type(1, 2));
+ VERIFY( mm1.count(1) == 2 );
+
+ mm1.erase(5);
+ VERIFY( mm1.count(5) == 0 );
+
+ mm1.erase(mm1.find(4));
+ VERIFY( mm1.count(4) == 0 );
+
+ mm1.clear();
+ VERIFY( mm1.count(0) == 0 );
+ VERIFY( mm1.count(1) == 0 );
+ VERIFY( mm1.count(2) == 0 );
+ VERIFY( mm1.count(3) == 0 );
+ VERIFY( mm1.count(4) == 0 );
+ VERIFY( mm1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
index da4c77b4ac..0f1c5bc538 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..1d49e58806
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::multimap<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int> >;
+template class std::multimap<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char> >;
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5_c++0x.cc b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5_c++0x.cc
new file mode 100644
index 0000000000..195f83b2d9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5_c++0x.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::multimap<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::multimap<int, int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
index 84372de807..0a05f83c52 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..d200367c26
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <set>
+
+typedef std::multiset<int> mstype;
+
+static_assert(std::is_nothrow_move_constructible<mstype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
new file mode 100644
index 0000000000..c5beb6a8dd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <set>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+bool operator<(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::multiset<X>& s, X x)
+{
+ std::multiset<X>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc b/libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc
new file mode 100644
index 0000000000..96323877c4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc
@@ -0,0 +1,104 @@
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ multiset<int> ms0;
+ VERIFY( ms0.count(0) == 0 );
+ VERIFY( ms0.count(1) == 0 );
+
+ ms0.insert(1);
+ VERIFY( ms0.count(0) == 0 );
+ VERIFY( ms0.count(1) == 1 );
+
+ ms0.insert(1);
+ VERIFY( ms0.count(0) == 0 );
+ VERIFY( ms0.count(1) == 2 );
+
+ ms0.insert(2);
+ VERIFY( ms0.count(2) == 1 );
+
+ ms0.insert(3);
+ ms0.insert(3);
+ ms0.insert(3);
+ VERIFY( ms0.count(3) == 3 );
+
+ ms0.erase(2);
+ VERIFY( ms0.count(2) == 0 );
+
+ ms0.erase(0);
+ VERIFY( ms0.count(0) == 0 );
+
+ multiset<int> ms1(ms0);
+ VERIFY( ms1.count(0) == 0 );
+ VERIFY( ms1.count(1) == 2 );
+ VERIFY( ms1.count(2) == 0 );
+ VERIFY( ms1.count(3) == 3 );
+
+ ms0.clear();
+ VERIFY( ms0.count(0) == 0 );
+ VERIFY( ms0.count(1) == 0 );
+ VERIFY( ms0.count(2) == 0 );
+ VERIFY( ms0.count(3) == 0 );
+
+ ms1.insert(4);
+ ms1.insert(5);
+ ms1.insert(5);
+ ms1.insert(5);
+ ms1.insert(5);
+ VERIFY( ms1.count(4) == 1 );
+ VERIFY( ms1.count(5) == 4 );
+
+ ms1.erase(1);
+ VERIFY( ms1.count(1) == 0 );
+
+ ms1.erase(ms1.find(5));
+ VERIFY( ms1.count(5) == 3 );
+
+ ms1.insert(1);
+ ms1.insert(1);
+ VERIFY( ms1.count(1) == 2 );
+
+ ms1.erase(5);
+ VERIFY( ms1.count(5) == 0 );
+
+ ms1.erase(ms1.find(4));
+ VERIFY( ms1.count(4) == 0 );
+
+ ms1.clear();
+ VERIFY( ms1.count(0) == 0 );
+ VERIFY( ms1.count(1) == 0 );
+ VERIFY( ms1.count(2) == 0 );
+ VERIFY( ms1.count(3) == 0 );
+ VERIFY( ms1.count(4) == 0 );
+ VERIFY( ms1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
index b8e3accce6..d3fb95ea2a 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..2cb307d470
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::multiset<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int> >;
+template class std::multiset<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char> >;
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5_c++0x.cc b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5_c++0x.cc
new file mode 100644
index 0000000000..2eea2c90db
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5_c++0x.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::multiset<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::multiset<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
index a0ab540511..7d9bccd0f0 100644
--- a/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..ddee8ec6ed
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <set>
+
+typedef std::set<int> stype;
+
+static_assert(std::is_nothrow_move_constructible<stype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
new file mode 100644
index 0000000000..4fb296a95f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <set>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+bool operator<(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::set<X>& s, X x)
+{
+ std::set<X>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/operations/count.cc b/libstdc++-v3/testsuite/23_containers/set/operations/count.cc
new file mode 100644
index 0000000000..4a6b0f2683
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/operations/count.cc
@@ -0,0 +1,104 @@
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ set<int> s0;
+ VERIFY( s0.count(0) == 0 );
+ VERIFY( s0.count(1) == 0 );
+
+ s0.insert(1);
+ VERIFY( s0.count(0) == 0 );
+ VERIFY( s0.count(1) == 1 );
+
+ s0.insert(1);
+ VERIFY( s0.count(0) == 0 );
+ VERIFY( s0.count(1) == 1 );
+
+ s0.insert(2);
+ VERIFY( s0.count(2) == 1 );
+
+ s0.insert(3);
+ s0.insert(3);
+ s0.insert(3);
+ VERIFY( s0.count(3) == 1 );
+
+ s0.erase(2);
+ VERIFY( s0.count(2) == 0 );
+
+ s0.erase(0);
+ VERIFY( s0.count(0) == 0 );
+
+ set<int> s1(s0);
+ VERIFY( s1.count(0) == 0 );
+ VERIFY( s1.count(1) == 1 );
+ VERIFY( s1.count(2) == 0 );
+ VERIFY( s1.count(3) == 1 );
+
+ s0.clear();
+ VERIFY( s0.count(0) == 0 );
+ VERIFY( s0.count(1) == 0 );
+ VERIFY( s0.count(2) == 0 );
+ VERIFY( s0.count(3) == 0 );
+
+ s1.insert(4);
+ s1.insert(5);
+ s1.insert(5);
+ s1.insert(5);
+ s1.insert(5);
+ VERIFY( s1.count(4) == 1 );
+ VERIFY( s1.count(5) == 1 );
+
+ s1.erase(1);
+ VERIFY( s1.count(1) == 0 );
+
+ s1.erase(s1.find(5));
+ VERIFY( s1.count(5) == 0 );
+
+ s1.insert(1);
+ s1.insert(1);
+ VERIFY( s1.count(1) == 1 );
+
+ s1.erase(5);
+ VERIFY( s1.count(5) == 0 );
+
+ s1.erase(s1.find(4));
+ VERIFY( s1.count(4) == 0 );
+
+ s1.clear();
+ VERIFY( s1.count(0) == 0 );
+ VERIFY( s1.count(1) == 0 );
+ VERIFY( s1.count(2) == 0 );
+ VERIFY( s1.count(3) == 0 );
+ VERIFY( s1.count(4) == 0 );
+ VERIFY( s1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
index babd6db2b2..483054f3fe 100644
--- a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
@@ -40,4 +40,3 @@ void test01()
test &= itr == setByName.end(); // { dg-error "no" }
}
-// { dg-excess-errors "" }
diff --git a/libstdc++-v3/testsuite/23_containers/set/range_access.cc b/libstdc++-v3/testsuite/23_containers/set/range_access.cc
index ffbda4e93f..b1c33b773e 100644
--- a/libstdc++-v3/testsuite/23_containers/set/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..32cd69555c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::set<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int> >;
+template class std::set<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char> >;
diff --git a/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5_c++0x.cc b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5_c++0x.cc
new file mode 100644
index 0000000000..2e44282a4c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5_c++0x.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::set<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::set<int, std::less<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc
new file mode 100644
index 0000000000..50e5437044
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc
@@ -0,0 +1,69 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/55043
+
+#include <unordered_map>
+#include <vector>
+
+struct MoveOnly
+{
+ MoveOnly() = default;
+ MoveOnly(MoveOnly&&) = default;
+};
+
+using hash = std::hash<int>;
+using equal = std::equal_to<int>;
+
+template<typename Alloc>
+ using test_type = std::unordered_map<int, MoveOnly, hash, equal, Alloc>;
+
+void test01()
+{
+ typedef test_type<std::allocator<MoveOnly>> uim;
+ std::vector<uim> v;
+ v.emplace_back(uim());
+}
+
+// Unordered containers don't use allocator_traits yet so need full
+// Allocator interface, derive from std::allocator to get it.
+template<typename T, bool R>
+struct Alloc : std::allocator<T>
+{
+ template<typename U>
+ struct rebind { typedef Alloc<U, R> other; };
+
+ Alloc() = default;
+
+ template<typename U>
+ Alloc(const Alloc<U, R>&) { }
+
+ typedef typename std::conditional<R, T&&, const T&>::type arg_type;
+
+ void construct(T* p, arg_type) const
+ { new((void*)p) T(); }
+};
+
+// verify is_copy_constructible depends on allocator
+typedef test_type<Alloc<MoveOnly, true>> uim_rval;
+static_assert(!std::is_copy_constructible<uim_rval>::value, "is not copyable");
+
+typedef test_type<Alloc<MoveOnly, false>> uim_lval;
+static_assert(std::is_copy_constructible<uim_lval>::value, "is copyable");
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_compare_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_compare_neg.cc
new file mode 100644
index 0000000000..72611d3cdf
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_compare_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::invalid_local_iterator_compare<std::unordered_map<int, int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_range_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_range_neg.cc
new file mode 100644
index 0000000000..1e45e626cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_range_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::invalid_local_iterator_range<std::unordered_map<int, int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_erased_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_erased_local_iterator_neg.cc
new file mode 100644
index 0000000000..ce70ef2858
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_erased_local_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::use_erased_local_iterator<std::unordered_map<int, int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_iterator_neg.cc
new file mode 100644
index 0000000000..3d9f219d02
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::use_invalid_iterator<std::unordered_map<int, int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_local_iterator_neg.cc
new file mode 100644
index 0000000000..70cda4756e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_local_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::use_invalid_local_iterator<std::unordered_map<int, int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc
index f9b74e08c8..9863ef792b 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc
@@ -23,6 +23,18 @@
#include <string>
#include <testsuite_hooks.h>
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_map<std::string, int>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -33,7 +45,7 @@ void test01()
typedef Map::value_type value_type;
Map m1;
-
+
m1.insert(value_type("because to why", 1));
m1.insert(value_type("the stockholm syndrome", 2));
m1.insert(value_type("a cereous night", 3));
@@ -45,14 +57,20 @@ void test01()
m1.insert(value_type("belonging (no longer mix)", 9));
m1.insert(value_type("one line behind", 10));
VERIFY( m1.size() == 10 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
VERIFY( m1.erase("eeilo") == 1 );
VERIFY( m1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
iterator it1 = m1.find("eeilo");
VERIFY( it1 == m1.end() );
VERIFY( m1.erase("tillsammans") == 1 );
VERIFY( m1.size() == 8 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
iterator it2 = m1.find("tillsammans");
VERIFY( it2 == m1.end() );
@@ -61,17 +79,23 @@ void test01()
VERIFY( it3 != m1.end() );
VERIFY( m1.erase(it3->first) == 1 );
VERIFY( m1.size() == 7 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
it3 = m1.find("belonging (no longer mix)");
VERIFY( it3 == m1.end() );
VERIFY( !m1.erase("abra") );
VERIFY( m1.size() == 7 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
VERIFY( !m1.erase("eeilo") );
VERIFY( m1.size() == 7 );
VERIFY( m1.erase("because to why") == 1 );
VERIFY( m1.size() == 6 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
iterator it4 = m1.find("because to why");
VERIFY( it4 == m1.end() );
@@ -87,11 +111,15 @@ void test01()
VERIFY( m1.erase(it5->first) == 1 );
VERIFY( m1.size() == 5 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
it5 = m1.find("umbra/penumbra");
VERIFY( it5 == m1.end() );
VERIFY( m1.erase(it6->first) == 1 );
VERIFY( m1.size() == 4 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
it6 = m1.find("one line behind");
VERIFY( it6 == m1.end() );
@@ -103,6 +131,8 @@ void test01()
VERIFY( m1.erase(it8->first) == 1 );
VERIFY( m1.size() == 3 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
VERIFY( ++it7 == it9 );
iterator it10 = it9;
@@ -110,15 +140,21 @@ void test01()
iterator it11 = it10;
VERIFY( m1.erase(it9->first) == 1 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
VERIFY( m1.size() == 2 );
VERIFY( ++it10 == m1.end() );
VERIFY( m1.erase(m1.begin()) != m1.end() );
VERIFY( m1.size() == 1 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
VERIFY( m1.begin() == it11 );
VERIFY( m1.erase(m1.begin()->first) == 1 );
VERIFY( m1.size() == 0 );
+ VERIFY( get_nb_bucket_elems(m1) == m1.size() );
+ VERIFY( distance(m1.begin(), m1.end()) == m1.size() );
VERIFY( m1.begin() == m1.end() );
}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
new file mode 100644
index 0000000000..7986fb23a3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <unordered_map>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+struct X_hash
+{ std::size_t operator()(const X&) const { return 0; } };
+
+bool operator==(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::unordered_map<X, int, X_hash>& s, X x)
+{
+ std::unordered_map<X, int, X_hash>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
new file mode 100644
index 0000000000..d651732a66
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <unordered_map>
+
+namespace
+{
+ template<typename _Tp>
+ struct final_hash final
+ {
+ std::size_t operator() (const _Tp&) const noexcept
+ { return 0; }
+ };
+}
+
+// A non-integral type:
+template class std::unordered_map<std::string, int, final_hash<std::string>>;
+
+// An integral type;
+template class std::unordered_map<int, int, final_hash<int>>;
+
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc
new file mode 100644
index 0000000000..0a0dff8c2b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc
@@ -0,0 +1,116 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// range insert
+
+#include <utility>
+#include <tuple>
+#include <vector>
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+class PathPoint
+{
+public:
+ PathPoint(char t, const std::vector<double>& c)
+ : type(t), coords(c) { }
+ PathPoint(char t, std::vector<double>&& c)
+ : type(t), coords(std::move(c)) { }
+ char getType() const { return type; }
+ const std::vector<double>& getCoords() const { return coords; }
+private:
+ char type;
+ std::vector<double> coords;
+};
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ typedef std::unordered_map<char, std::vector<double>> Map;
+ Map m;
+
+ std::vector<double> coord1 = { 0.0, 1.0, 2.0 };
+
+ auto ret = m.emplace('a', coord1);
+ VERIFY( ret.second );
+ VERIFY( m.size() == 1 );
+ VERIFY( ret.first->first == 'a' );
+
+ coord1[0] = 3.0;
+ ret = m.emplace('a', coord1);
+ VERIFY( !ret.second );
+ VERIFY( m.size() == 1 );
+ VERIFY( ret.first->first == 'a' );
+ VERIFY( ret.first->second[0] == 0.0 );
+
+ auto it = m.emplace_hint(m.begin(), 'b', coord1);
+ VERIFY( it != m.end() );
+ VERIFY( it->first == 'b' );
+ VERIFY( it->second[0] == 3.0 );
+
+ double *px = &coord1[0];
+ ret = m.emplace('c', std::move(coord1));
+ VERIFY( ret.second );
+ VERIFY( ret.first->first == 'c' );
+ VERIFY( &(ret.first->second[0]) == px );
+}
+
+void test02()
+{
+ using namespace std;
+ typedef unordered_map<char, PathPoint> Map;
+ Map m;
+
+ std::vector<double> coord1 = { 0.0, 1.0, 2.0 };
+
+ auto ret = m.emplace(piecewise_construct,
+ make_tuple('a'), make_tuple('a', coord1));
+ VERIFY( ret.second );
+ VERIFY( m.size() == 1 );
+ VERIFY( ret.first->first == 'a' );
+
+ coord1[0] = 3.0;
+ ret = m.emplace(piecewise_construct,
+ make_tuple('a'), make_tuple( 'b', coord1));
+ VERIFY( !ret.second );
+ VERIFY( m.size() == 1 );
+ VERIFY( ret.first->first == 'a' );
+ VERIFY( ret.first->second.getCoords()[0] == 0.0 );
+
+ auto it = m.emplace_hint(m.begin(), piecewise_construct,
+ make_tuple('b'), make_tuple('c', coord1));
+ VERIFY( it != m.end() );
+ VERIFY( it->first == 'b' );
+ VERIFY( it->second.getCoords()[0] == 3.0 );
+
+ double *px = &coord1[0];
+ ret = m.emplace(piecewise_construct,
+ make_tuple('c'), make_tuple('d', move(coord1)));
+ VERIFY( ret.second );
+ VERIFY( ret.first->first == 'c' );
+ VERIFY( &(ret.first->second.getCoords()[0]) == px );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
new file mode 100644
index 0000000000..1c6d1bc4a8
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ const int N = 1000;
+
+ typedef std::unordered_map<int, int> Map;
+ Map m;
+ m.reserve(N);
+
+ std::size_t bkts = m.bucket_count();
+ for (int i = 0; i != N; ++i)
+ {
+ m.insert(std::make_pair(i, i));
+ // As long as we insert less than the reserved number of elements we
+ // shouldn't experiment any rehash.
+ VERIFY( m.bucket_count() == bkts );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
new file mode 100644
index 0000000000..089cf512d9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+
+void
+test01()
+{
+ std::unordered_map<int, int> um;
+
+ auto ke = um.key_eq();
+ auto h = um.hash_function();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/operations/count.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/operations/count.cc
new file mode 100644
index 0000000000..4aedc5e1e1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/operations/count.cc
@@ -0,0 +1,108 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ typedef unordered_map<int, int>::value_type value_type;
+
+ unordered_map<int, int> um0;
+ VERIFY( um0.count(0) == 0 );
+ VERIFY( um0.count(1) == 0 );
+
+ um0.insert(value_type(1, 1));
+ VERIFY( um0.count(0) == 0 );
+ VERIFY( um0.count(1) == 1 );
+
+ um0.insert(value_type(1, 2));
+ VERIFY( um0.count(0) == 0 );
+ VERIFY( um0.count(1) == 1 );
+
+ um0.insert(value_type(2, 1));
+ VERIFY( um0.count(2) == 1 );
+
+ um0.insert(value_type(3, 1));
+ um0.insert(value_type(3, 2));
+ um0.insert(value_type(3, 3));
+ VERIFY( um0.count(3) == 1 );
+
+ um0.erase(2);
+ VERIFY( um0.count(2) == 0 );
+
+ um0.erase(0);
+ VERIFY( um0.count(0) == 0 );
+
+ unordered_map<int, int> um1(um0);
+ VERIFY( um1.count(0) == 0 );
+ VERIFY( um1.count(1) == 1 );
+ VERIFY( um1.count(2) == 0 );
+ VERIFY( um1.count(3) == 1 );
+
+ um0.clear();
+ VERIFY( um0.count(0) == 0 );
+ VERIFY( um0.count(1) == 0 );
+ VERIFY( um0.count(2) == 0 );
+ VERIFY( um0.count(3) == 0 );
+
+ um1.insert(value_type(4, 1));
+ um1.insert(value_type(5, 1));
+ um1.insert(value_type(5, 2));
+ um1.insert(value_type(5, 3));
+ um1.insert(value_type(5, 4));
+ VERIFY( um1.count(4) == 1 );
+ VERIFY( um1.count(5) == 1 );
+
+ um1.erase(1);
+ VERIFY( um1.count(1) == 0 );
+
+ um1.erase(um1.find(5));
+ VERIFY( um1.count(5) == 0 );
+
+ um1.insert(value_type(1, 1));
+ um1.insert(value_type(1, 2));
+ VERIFY( um1.count(1) == 1 );
+
+ um1.erase(5);
+ VERIFY( um1.count(5) == 0 );
+
+ um1.erase(um1.find(4));
+ VERIFY( um1.count(4) == 0 );
+
+ um1.clear();
+ VERIFY( um1.count(0) == 0 );
+ VERIFY( um1.count(1) == 0 );
+ VERIFY( um1.count(2) == 0 );
+ VERIFY( um1.count(3) == 0 );
+ VERIFY( um1.count(4) == 0 );
+ VERIFY( um1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
index b41b6a5b3e..1555c48963 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
new file mode 100644
index 0000000000..c75ed9b09a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <functional>
+
+struct TFoo {};
+
+struct TFoo_hash
+{
+ std::size_t operator()(const TFoo &) const { return 0; }
+};
+
+void f1(std::unordered_map<TFoo, int, TFoo_hash> &) {}
+
+void f2()
+{
+ std::unordered_map<TFoo, int, TFoo_hash> map1;
+ std::bind(f1, std::ref(map1));
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
new file mode 100644
index 0000000000..ed05d208f5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <functional>
+
+void f()
+{
+ std::unordered_map<int, int> Foo;
+ ref(Foo);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53339.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53339.cc
new file mode 100644
index 0000000000..10404ce081
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53339.cc
@@ -0,0 +1,36 @@
+// XFAIL because of PR libstdc++/55043 fix
+// { dg-do compile { xfail *-*-* } }
+// { dg-excess-errors "" }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012-2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+
+struct LinkedHashMap
+{
+ struct Entry;
+
+ typedef std::unordered_map<int, Entry> Storage;
+ typedef Storage::iterator EntryPtr;
+
+ struct Entry
+ {
+ EntryPtr prev, next;
+ };
+};
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..f2bd46dd0c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_map>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::unordered_map<int, int, std::hash<int>, std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::unordered_map<int, int, std::hash<int>, std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/55043.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/55043.cc
new file mode 100644
index 0000000000..afeecaad0a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/55043.cc
@@ -0,0 +1,69 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/55043
+
+#include <unordered_map>
+#include <vector>
+
+struct MoveOnly
+{
+ MoveOnly() = default;
+ MoveOnly(MoveOnly&&) = default;
+};
+
+using hash = std::hash<int>;
+using equal = std::equal_to<int>;
+
+template<typename Alloc>
+ using test_type = std::unordered_multimap<int, MoveOnly, hash, equal, Alloc>;
+
+void test01()
+{
+ typedef test_type<std::allocator<MoveOnly>> uim;
+ std::vector<uim> v;
+ v.emplace_back(uim());
+}
+
+// Unordered containers don't use allocator_traits yet so need full
+// Allocator interface, derive from std::allocator to get it.
+template<typename T, bool R>
+struct Alloc : std::allocator<T>
+{
+ template<typename U>
+ struct rebind { typedef Alloc<U, R> other; };
+
+ Alloc() = default;
+
+ template<typename U>
+ Alloc(const Alloc<U, R>&) { }
+
+ typedef typename std::conditional<R, T&&, const T&>::type arg_type;
+
+ void construct(T* p, arg_type) const
+ { new((void*)p) T(); }
+};
+
+// verify is_copy_constructible depends on allocator
+typedef test_type<Alloc<MoveOnly, true>> uim_rval;
+static_assert(!std::is_copy_constructible<uim_rval>::value, "is not copyable");
+
+typedef test_type<Alloc<MoveOnly, false>> uim_lval;
+static_assert(std::is_copy_constructible<uim_lval>::value, "is copyable");
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_compare_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_compare_neg.cc
new file mode 100644
index 0000000000..4ee44a4b4b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_compare_neg.cc
@@ -0,0 +1,35 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ typedef std::unordered_multimap<int, int> cont_type;
+ __gnu_test::invalid_local_iterator_compare<cont_type>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_range_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_range_neg.cc
new file mode 100644
index 0000000000..d70225e587
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_range_neg.cc
@@ -0,0 +1,35 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ typedef std::unordered_multimap<int, int> cont_type;
+ __gnu_test::invalid_local_iterator_range<cont_type>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_erased_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_erased_local_iterator_neg.cc
new file mode 100644
index 0000000000..2d404e6eca
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_erased_local_iterator_neg.cc
@@ -0,0 +1,35 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ typedef std::unordered_multimap<int, int> cont_type;
+ __gnu_test::use_erased_local_iterator<cont_type>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_iterator_neg.cc
new file mode 100644
index 0000000000..6f7c250bd1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_iterator_neg.cc
@@ -0,0 +1,35 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ typedef std::unordered_multimap<int, int> cont_type;
+ __gnu_test::use_invalid_iterator<cont_type>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_local_iterator_neg.cc
new file mode 100644
index 0000000000..e47838f624
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_local_iterator_neg.cc
@@ -0,0 +1,35 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ typedef std::unordered_multimap<int, int> cont_type;
+ __gnu_test::use_invalid_local_iterator<cont_type>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc
index 0951572659..c599cc01a7 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc
@@ -23,6 +23,18 @@
#include <string>
#include <testsuite_hooks.h>
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multimap<std::string, int>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -46,14 +58,20 @@ void test01()
mm1.insert(value_type("one line behind", 10));
mm1.insert(value_type("because to why", 11));
VERIFY( mm1.size() == 11 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
VERIFY( mm1.erase("eeilo") == 1 );
VERIFY( mm1.size() == 10 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
iterator it1 = mm1.find("eeilo");
VERIFY( it1 == mm1.end() );
VERIFY( mm1.erase("tillsammans") == 1 );
VERIFY( mm1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
iterator it2 = mm1.find("tillsammans");
VERIFY( it2 == mm1.end() );
@@ -62,17 +80,23 @@ void test01()
VERIFY( it3 != mm1.end() );
VERIFY( mm1.erase(it3->first) == 1 );
VERIFY( mm1.size() == 8 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
it3 = mm1.find("belonging (no longer mix)");
VERIFY( it3 == mm1.end() );
VERIFY( !mm1.erase("abra") );
VERIFY( mm1.size() == 8 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
VERIFY( !mm1.erase("eeilo") );
VERIFY( mm1.size() == 8 );
VERIFY( mm1.erase("because to why") == 2 );
VERIFY( mm1.size() == 6 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
iterator it4 = mm1.find("because to why");
VERIFY( it4 == mm1.end() );
@@ -88,11 +112,15 @@ void test01()
VERIFY( mm1.erase(it5->first) == 1 );
VERIFY( mm1.size() == 5 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
it5 = mm1.find("umbra/penumbra");
VERIFY( it5 == mm1.end() );
VERIFY( mm1.erase(it6->first) == 1 );
VERIFY( mm1.size() == 4 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
it6 = mm1.find("one line behind");
VERIFY( it6 == mm1.end() );
@@ -104,6 +132,8 @@ void test01()
VERIFY( mm1.erase(it8->first) == 1 );
VERIFY( mm1.size() == 3 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
VERIFY( ++it7 == it9 );
iterator it10 = it9;
@@ -111,15 +141,21 @@ void test01()
iterator it11 = it10;
VERIFY( mm1.erase(it9->first) == 1 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
VERIFY( mm1.size() == 2 );
VERIFY( ++it10 == mm1.end() );
VERIFY( mm1.erase(mm1.begin()) != mm1.end() );
VERIFY( mm1.size() == 1 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
VERIFY( mm1.begin() == it11 );
VERIFY( mm1.erase(mm1.begin()->first) == 1 );
VERIFY( mm1.size() == 0 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
VERIFY( mm1.begin() == mm1.end() );
}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/2.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/2.cc
new file mode 100644
index 0000000000..df73a85dcc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/2.cc
@@ -0,0 +1,90 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <string>
+#include <testsuite_hooks.h>
+
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multimap<std::string, int>& um)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != um.bucket_count(); ++b)
+ nb += um.bucket_size(b);
+ return nb;
+ }
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::unordered_multimap<std::string, int> Mmap;
+ typedef Mmap::iterator iterator;
+ typedef Mmap::const_iterator const_iterator;
+ typedef Mmap::value_type value_type;
+
+ Mmap mm1;
+
+ mm1.insert(value_type("foo", 10));
+ mm1.insert(value_type("foo", 11));
+ mm1.insert(value_type("foo", 12));
+ mm1.insert(value_type("foo", 13));
+ mm1.insert(value_type("foo", 14));
+ mm1.insert(value_type("foo", 15));
+ mm1.insert(value_type("bar", 20));
+ mm1.insert(value_type("bar", 21));
+ mm1.insert(value_type("bar", 22));
+ mm1.insert(value_type("bar", 23));
+ mm1.insert(value_type("bar", 24));
+ mm1.insert(value_type("bar", 25));
+ VERIFY( mm1.size() == 12 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
+
+ VERIFY( mm1.erase(mm1.begin()) != mm1.end() );
+ VERIFY( mm1.size() == 11 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
+
+ auto it = mm1.begin();
+ advance(it, 2);
+ VERIFY( mm1.erase(mm1.begin(), it) != mm1.end() );
+ VERIFY( mm1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
+
+ VERIFY( mm1.erase(mm1.begin()->first) == 3 );
+ VERIFY( mm1.size() == 6 );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
+
+ VERIFY( mm1.erase(mm1.begin(), mm1.end()) == mm1.end() );
+ VERIFY( mm1.empty() );
+ VERIFY( get_nb_bucket_elems(mm1) == mm1.size() );
+ VERIFY( distance(mm1.begin(), mm1.end()) == mm1.size() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
new file mode 100644
index 0000000000..0d434ac8a6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <unordered_map>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+struct X_hash
+{ std::size_t operator()(const X&) const { return 0; } };
+
+bool operator==(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::unordered_multimap<X, int, X_hash>& s, X x)
+{
+ std::unordered_multimap<X, int, X_hash>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc
new file mode 100644
index 0000000000..450fb6faad
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc
@@ -0,0 +1,72 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2012-01-19 Jakub Jelinek <jakub@redhat.com>
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+// libstdc++/51845
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::unordered_multimap<int, int> Mmap;
+ typedef Mmap::iterator iterator;
+ typedef Mmap::const_iterator const_iterator;
+ typedef Mmap::value_type value_type;
+
+ Mmap mm1;
+
+ mm1.insert(value_type(11135, 1));
+ mm1.insert(value_type(11135, 17082));
+ mm1.insert(value_type(9644, 24135));
+ mm1.insert(value_type(9644, 9644));
+ mm1.insert(value_type(13984, 19841));
+ mm1.insert(value_type(9644, 1982));
+ mm1.insert(value_type(13984, 1945));
+ mm1.insert(value_type(7, 1982));
+ mm1.insert(value_type(7, 1945));
+ VERIFY( mm1.size() == 9 );
+
+ iterator it1 = mm1.begin();
+ ++it1;
+ iterator it2 = it1;
+ ++it2;
+ ++it2;
+ iterator it3 = mm1.erase(it1, it2);
+ VERIFY( mm1.size() == 7 );
+ VERIFY( it3 == it2 );
+ VERIFY( *it3 == *it2 );
+
+ const_iterator it4 = mm1.begin();
+ ++it4;
+ const_iterator it5 = it4;
+ ++it5;
+ const_iterator it6 = mm1.erase(it4);
+ VERIFY( mm1.size() == 6 );
+ VERIFY( it6 == it5 );
+ VERIFY( *it6 == *it5 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
new file mode 100644
index 0000000000..7950713a7e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
@@ -0,0 +1,40 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <unordered_map>
+
+namespace
+{
+ template<typename _Tp>
+ struct final_hash final
+ {
+ std::size_t operator() (const _Tp&) const noexcept
+ { return 0; }
+ };
+}
+
+// A non-integral type:
+template class std::unordered_multimap<std::string, int,
+ final_hash<std::string>>;
+
+// An integral type;
+template class std::unordered_multimap<int, int, final_hash<int>>;
+
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/51866.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/51866.cc
new file mode 100644
index 0000000000..aa85c4b1d5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/51866.cc
@@ -0,0 +1,87 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+struct num
+{
+ int value;
+ num(int n) : value(n) {}
+ num(num const&) = default;
+ num& operator=(num const&) = default;
+ num(num&& o) : value(o.value)
+ { o.value = -1; }
+ num& operator=(num&& o)
+ {
+ if (this != &o)
+ {
+ value = o.value;
+ o.value = -1;
+ }
+ return *this;
+ }
+};
+
+struct num_hash
+{
+ size_t operator()(num const& a) const
+ { return a.value; }
+};
+
+struct num_equal
+{
+ static bool _S_called_on_moved_instance;
+ bool operator()(num const& a, num const& b) const
+ {
+ if (a.value == -1 || b.value == -1)
+ _S_called_on_moved_instance = true;
+ return a.value == b.value;
+ }
+};
+
+bool num_equal::_S_called_on_moved_instance = false;
+
+// libstdc++/51866
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::unordered_multimap<num, int, num_hash, num_equal> mmap;
+ mmap.insert(std::make_pair(num(1), 1));
+ mmap.insert(std::make_pair(num(2), 2));
+ mmap.insert(std::make_pair(num(1), 3));
+ mmap.insert(std::make_pair(num(2), 4));
+ VERIFY( mmap.size() == 4 );
+ auto iter = mmap.cbegin();
+ auto x0 = (iter++)->first.value;
+ auto x1 = (iter++)->first.value;
+ auto x2 = (iter++)->first.value;
+ auto x3 = (iter++)->first.value;
+ VERIFY( iter == mmap.cend() );
+ VERIFY( (x0 == 1 && x1 == 1 && x2 == 2 && x3 == 2)
+ || (x0 == 2 && x1 == 2 && x2 == 1 && x3 == 1) );
+ VERIFY( !num_equal::_S_called_on_moved_instance );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc
new file mode 100644
index 0000000000..f4f7839887
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc
@@ -0,0 +1,59 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <vector>
+#include <algorithm>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ unordered_multimap<int, int> mmap;
+ vector<int> values;
+
+ size_t nb_bkts = mmap.bucket_count();
+ int i = 0;
+ for (;; ++i)
+ {
+ mmap.insert(make_pair(0, i));
+ if (mmap.bucket_count() != nb_bkts)
+ // Container got rehash
+ break;
+ values.clear();
+ transform(mmap.begin(), mmap.end(), back_inserter(values),
+ [](const pair<int, int>& p) { return p.second; });
+ }
+
+ vector<int> rehash_values;
+ transform(mmap.begin(), mmap.end(), back_inserter(rehash_values),
+ [](const pair<int, int>& p) { return p.second; });
+ // Remove the value that result in a rehash
+ rehash_values.erase(remove(rehash_values.begin(), rehash_values.end(), i));
+
+ VERIFY( rehash_values == values );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc
new file mode 100644
index 0000000000..4eb5d42619
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc
@@ -0,0 +1,101 @@
+// { dg-options "-std=gnu++11" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multimap<int, int>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ std::unordered_multimap<int, int> umm;
+ umm.insert(make_pair(10, 1));
+ VERIFY( umm.size() == 1 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(10, 2));
+ VERIFY( umm.size() == 2 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(10, 3));
+ VERIFY( umm.size() == 3 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(10, 4));
+ VERIFY( umm.size() == 4 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(10, 5));
+ VERIFY( umm.size() == 5 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(24, 6));
+ VERIFY( umm.size() == 6 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(25, 7));
+ VERIFY( umm.size() == 7 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(2, 8));
+ VERIFY( umm.size() == 8 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(2, 9));
+ VERIFY( umm.size() == 9 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(1, 10));
+ VERIFY( umm.size() == 10 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+
+ umm.insert(make_pair(10, 11));
+ VERIFY( umm.size() == 11 );
+ VERIFY( std::distance(umm.begin(), umm.end()) == umm.size() );
+ VERIFY( get_nb_bucket_elems(umm) == umm.size() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc
new file mode 100644
index 0000000000..fc17256f4b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x -D_GLIBCXX_DEBUG" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/55028
+#include <string>
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+struct MyType
+{ };
+
+void test()
+{
+ // using MyMap = std::multimap<std::string, MyType *>; // works
+ using MyMap = std::unordered_multimap<std::string, MyType*>; // fails to link
+ MyMap m;
+ m.insert(std::make_pair(std::string("blah"), new MyType));
+}
+
+int main()
+{
+ test();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc
new file mode 100644
index 0000000000..40aef98ad4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc
@@ -0,0 +1,110 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// range insert
+
+#include <tuple>
+#include <vector>
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+class PathPoint
+{
+public:
+ PathPoint(char t, const std::vector<double>& c)
+ : type(t), coords(c) { }
+ PathPoint(char t, std::vector<double>&& c)
+ : type(t), coords(std::move(c)) { }
+ char getType() const { return type; }
+ const std::vector<double>& getCoords() const { return coords; }
+private:
+ char type;
+ std::vector<double> coords;
+};
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ typedef std::unordered_multimap<char, std::vector<double>> MMap;
+ MMap mm;
+
+ std::vector<double> coord1 = { 0.0, 1.0, 2.0 };
+
+ auto it = mm.emplace('a', coord1);
+ VERIFY( mm.size() == 1 );
+ VERIFY( it->first == 'a' );
+
+ coord1[0] = 3.0;
+ it = mm.emplace('a', coord1);
+ VERIFY( mm.size() == 2 );
+ VERIFY( it->first == 'a' );
+ VERIFY( it->second[0] == 3.0 );
+
+ it = mm.emplace_hint(mm.begin(), 'b', coord1);
+ VERIFY( it != mm.end() );
+ VERIFY( it->first == 'b' );
+ VERIFY( it->second[0] == 3.0 );
+
+ double *px = &coord1[0];
+ it = mm.emplace('c', std::move(coord1));
+ VERIFY( it->first == 'c' );
+ VERIFY( &(it->second[0]) == px );
+}
+
+void test02()
+{
+ using namespace std;
+ typedef unordered_multimap<char, PathPoint> Map;
+ Map m;
+
+ std::vector<double> coord1 = { 0.0, 1.0, 2.0 };
+
+ auto it = m.emplace(piecewise_construct,
+ make_tuple('a'), make_tuple('a', coord1));
+ VERIFY( m.size() == 1 );
+ VERIFY( it->first == 'a' );
+
+ coord1[0] = 3.0;
+ it = m.emplace(piecewise_construct,
+ make_tuple('a'), make_tuple( 'b', coord1));
+ VERIFY( m.size() == 2 );
+ VERIFY( it->first == 'a' );
+ VERIFY( it->second.getCoords()[0] == 3.0 );
+
+ it = m.emplace_hint(m.begin(), piecewise_construct,
+ make_tuple('b'), make_tuple('c', coord1));
+ VERIFY( it != m.end() );
+ VERIFY( it->first == 'b' );
+ VERIFY( it->second.getCoords()[0] == 3.0 );
+
+ double *px = &coord1[0];
+ it = m.emplace(piecewise_construct,
+ make_tuple('c'), make_tuple('d', move(coord1)));
+ VERIFY( it->first == 'c' );
+ VERIFY( &(it->second.getCoords()[0]) == px );
+}
+
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc
new file mode 100644
index 0000000000..44a59189ae
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ const int N = 1000;
+
+ typedef std::unordered_multimap<int, int> MMap;
+ MMap m;
+ m.reserve(N * 2);
+
+ std::size_t bkts = m.bucket_count();
+ for (int i = 0; i != N; ++i)
+ {
+ m.insert(std::make_pair(i, i));
+ m.insert(std::make_pair(i, i));
+ // As long as we insert less than the reserved number of elements we
+ // shouldn't experiment any rehash.
+ VERIFY( m.bucket_count() == bkts );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
new file mode 100644
index 0000000000..456074e30d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+
+void
+test01()
+{
+ std::unordered_multimap<int, int> um;
+
+ auto ke = um.key_eq();
+ auto h = um.hash_function();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/count.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/count.cc
new file mode 100644
index 0000000000..12f9e1f5eb
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/count.cc
@@ -0,0 +1,108 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ typedef unordered_multimap<int, int>::value_type value_type;
+
+ unordered_multimap<int, int> umm0;
+ VERIFY( umm0.count(0) == 0 );
+ VERIFY( umm0.count(1) == 0 );
+
+ umm0.insert(value_type(1, 1));
+ VERIFY( umm0.count(0) == 0 );
+ VERIFY( umm0.count(1) == 1 );
+
+ umm0.insert(value_type(1, 2));
+ VERIFY( umm0.count(0) == 0 );
+ VERIFY( umm0.count(1) == 2 );
+
+ umm0.insert(value_type(2, 1));
+ VERIFY( umm0.count(2) == 1 );
+
+ umm0.insert(value_type(3, 1));
+ umm0.insert(value_type(3, 2));
+ umm0.insert(value_type(3, 3));
+ VERIFY( umm0.count(3) == 3 );
+
+ umm0.erase(2);
+ VERIFY( umm0.count(2) == 0 );
+
+ umm0.erase(0);
+ VERIFY( umm0.count(0) == 0 );
+
+ unordered_multimap<int, int> umm1(umm0);
+ VERIFY( umm1.count(0) == 0 );
+ VERIFY( umm1.count(1) == 2 );
+ VERIFY( umm1.count(2) == 0 );
+ VERIFY( umm1.count(3) == 3 );
+
+ umm0.clear();
+ VERIFY( umm0.count(0) == 0 );
+ VERIFY( umm0.count(1) == 0 );
+ VERIFY( umm0.count(2) == 0 );
+ VERIFY( umm0.count(3) == 0 );
+
+ umm1.insert(value_type(4, 1));
+ umm1.insert(value_type(5, 1));
+ umm1.insert(value_type(5, 2));
+ umm1.insert(value_type(5, 3));
+ umm1.insert(value_type(5, 4));
+ VERIFY( umm1.count(4) == 1 );
+ VERIFY( umm1.count(5) == 4 );
+
+ umm1.erase(1);
+ VERIFY( umm1.count(1) == 0 );
+
+ umm1.erase(umm1.find(5));
+ VERIFY( umm1.count(5) == 3 );
+
+ umm1.insert(value_type(1, 1));
+ umm1.insert(value_type(1, 2));
+ VERIFY( umm1.count(1) == 2 );
+
+ umm1.erase(5);
+ VERIFY( umm1.count(5) == 0 );
+
+ umm1.erase(umm1.find(4));
+ VERIFY( umm1.count(4) == 0 );
+
+ umm1.clear();
+ VERIFY( umm1.count(0) == 0 );
+ VERIFY( umm1.count(1) == 0 );
+ VERIFY( umm1.count(2) == 0 );
+ VERIFY( umm1.count(3) == 0 );
+ VERIFY( umm1.count(4) == 0 );
+ VERIFY( umm1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
index f95a6681b1..bfc8ac1c4d 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/53339.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/53339.cc
new file mode 100644
index 0000000000..cccd2a8951
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/53339.cc
@@ -0,0 +1,36 @@
+// XFAIL because of PR libstdc++/55043 fix
+// { dg-do compile { xfail *-*-* } }
+// { dg-excess-errors "" }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012-2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_map>
+
+struct LinkedHashMap
+{
+ struct Entry;
+
+ typedef std::unordered_multimap<int, Entry> Storage;
+ typedef Storage::iterator EntryPtr;
+
+ struct Entry
+ {
+ EntryPtr prev, next;
+ };
+};
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..b8574b1454
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_map>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::unordered_multimap<int, int, std::hash<int>,
+ std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::unordered_multimap<int, int, std::hash<int>,
+ std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc
new file mode 100644
index 0000000000..9d71cff858
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/55043
+
+#include <unordered_set>
+#include <vector>
+
+struct MoveOnly
+{
+ MoveOnly() = default;
+ MoveOnly(MoveOnly&&) = default;
+};
+
+struct equal {
+ bool operator()(const MoveOnly&, const MoveOnly) const { return true; }
+};
+struct hash {
+ std::size_t operator()(const MoveOnly&) const { return 0; }
+};
+
+template<typename Alloc>
+ using test_type = std::unordered_multiset<MoveOnly, hash, equal, Alloc>;
+
+void test01()
+{
+ typedef test_type<std::allocator<MoveOnly>> uim;
+ std::vector<uim> v;
+ v.emplace_back(uim());
+}
+
+// Unordered containers don't use allocator_traits yet so need full
+// Allocator interface, derive from std::allocator to get it.
+template<typename T, bool R>
+struct Alloc : std::allocator<T>
+{
+ template<typename U>
+ struct rebind { typedef Alloc<U, R> other; };
+
+ Alloc() = default;
+
+ template<typename U>
+ Alloc(const Alloc<U, R>&) { }
+
+ typedef typename std::conditional<R, T&&, const T&>::type arg_type;
+
+ void construct(T* p, arg_type) const
+ { new((void*)p) T(); }
+};
+
+// verify is_copy_constructible depends on allocator
+typedef test_type<Alloc<MoveOnly, true>> uim_rval;
+static_assert(!std::is_copy_constructible<uim_rval>::value, "is not copyable");
+
+typedef test_type<Alloc<MoveOnly, false>> uim_lval;
+static_assert(std::is_copy_constructible<uim_lval>::value, "is copyable");
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc
new file mode 100644
index 0000000000..7e50c302d1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc
@@ -0,0 +1,45 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// NOTE: This makes use of the fact that we know how moveable
+// is implemented on set (via swap). If the implementation changed
+// this test may begin to fail.
+
+#include <unordered_set>
+#include <utility>
+#include <testsuite_hooks.h>
+
+int main()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int nb = 10000;
+ std::unordered_multiset<int> ref;
+ for (int i = 0; i != nb; ++i)
+ {
+ ref.insert(i);
+ ref.insert(i);
+ }
+
+ std::unordered_multiset<int> copy(ref);
+ VERIFY( copy.size() == ref.size() );
+ VERIFY( std::equal(ref.begin(), ref.end(), copy.begin()) );
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_compare_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_compare_neg.cc
new file mode 100644
index 0000000000..03fa0b6618
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_compare_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::invalid_local_iterator_compare<std::unordered_multiset<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_range_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_range_neg.cc
new file mode 100644
index 0000000000..f2f2571c0b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_range_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::invalid_local_iterator_range<std::unordered_multiset<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_erased_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_erased_local_iterator_neg.cc
new file mode 100644
index 0000000000..08b4e868e6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_erased_local_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::use_erased_local_iterator<std::unordered_multiset<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_iterator_neg.cc
new file mode 100644
index 0000000000..b4202f9bb7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::use_invalid_iterator<std::unordered_multiset<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_local_iterator_neg.cc
new file mode 100644
index 0000000000..9e47220ea5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_local_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::use_invalid_local_iterator<std::unordered_multiset<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc
index 327dc4bd0b..b95c8a3870 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc
@@ -23,6 +23,18 @@
#include <string>
#include <testsuite_hooks.h>
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<std::string>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -45,14 +57,20 @@ void test01()
ms1.insert("one line behind");
ms1.insert("because to why");
VERIFY( ms1.size() == 11 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
VERIFY( ms1.erase("eeilo") == 1 );
VERIFY( ms1.size() == 10 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
iterator it1 = ms1.find("eeilo");
VERIFY( it1 == ms1.end() );
VERIFY( ms1.erase("tillsammans") == 1 );
VERIFY( ms1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
iterator it2 = ms1.find("tillsammans");
VERIFY( it2 == ms1.end() );
@@ -61,17 +79,23 @@ void test01()
VERIFY( it3 != ms1.end() );
VERIFY( ms1.erase(*it3) == 1 );
VERIFY( ms1.size() == 8 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
it3 = ms1.find("belonging (no longer mix)");
VERIFY( it3 == ms1.end() );
VERIFY( !ms1.erase("abra") );
VERIFY( ms1.size() == 8 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
VERIFY( !ms1.erase("eeilo") );
VERIFY( ms1.size() == 8 );
VERIFY( ms1.erase("because to why") == 2 );
VERIFY( ms1.size() == 6 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
iterator it4 = ms1.find("because to why");
VERIFY( it4 == ms1.end() );
@@ -87,11 +111,15 @@ void test01()
VERIFY( ms1.erase(*it5) == 1 );
VERIFY( ms1.size() == 5 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
it5 = ms1.find("umbra/penumbra");
VERIFY( it5 == ms1.end() );
VERIFY( ms1.erase(*it6) == 1 );
VERIFY( ms1.size() == 4 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
it6 = ms1.find("one line behind");
VERIFY( it6 == ms1.end() );
@@ -103,6 +131,8 @@ void test01()
VERIFY( ms1.erase(*it8) == 1 );
VERIFY( ms1.size() == 3 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
VERIFY( ++it7 == it9 );
iterator it10 = it9;
@@ -110,15 +140,21 @@ void test01()
iterator it11 = it10;
VERIFY( ms1.erase(*it9) == 1 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
VERIFY( ms1.size() == 2 );
VERIFY( ++it10 == ms1.end() );
VERIFY( ms1.erase(ms1.begin()) != ms1.end() );
VERIFY( ms1.size() == 1 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
VERIFY( ms1.begin() == it11 );
VERIFY( ms1.erase(*ms1.begin()) == 1 );
VERIFY( ms1.size() == 0 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
VERIFY( ms1.begin() == ms1.end() );
}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/2.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/2.cc
new file mode 100644
index 0000000000..ad6cad4a00
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/2.cc
@@ -0,0 +1,89 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <string>
+#include <testsuite_hooks.h>
+
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<std::string>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::unordered_multiset<std::string> Mset;
+ typedef Mset::iterator iterator;
+ typedef Mset::const_iterator const_iterator;
+
+ Mset ms1;
+
+ ms1.insert("foo");
+ ms1.insert("foo");
+ ms1.insert("foo");
+ ms1.insert("foo");
+ ms1.insert("foo");
+ ms1.insert("foo");
+ ms1.insert("bar");
+ ms1.insert("bar");
+ ms1.insert("bar");
+ ms1.insert("bar");
+ ms1.insert("bar");
+ ms1.insert("bar");
+ VERIFY( ms1.size() == 12 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
+
+ VERIFY( ms1.erase(ms1.begin()) != ms1.end() );
+ VERIFY( ms1.size() == 11 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
+
+ auto it = ms1.begin();
+ advance(it, 2);
+ VERIFY( ms1.erase(ms1.begin(), it) != ms1.end() );
+ VERIFY( ms1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
+
+ VERIFY( ms1.erase(*(ms1.begin())) == 3 );
+ VERIFY( ms1.size() == 6 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
+
+ VERIFY( ms1.erase(ms1.begin(), ms1.end()) == ms1.end() );
+ VERIFY( ms1.empty() );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
+ VERIFY( distance(ms1.begin(), ms1.end()) == ms1.size() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc
index c5eea6eeeb..ba1659aedf 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc
@@ -23,6 +23,20 @@
#include <string>
#include <testsuite_hooks.h>
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<std::string>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ {
+ nb += us.bucket_size(b);
+ }
+ return nb;
+ }
+}
+
// libstdc++/24061
void test01()
{
@@ -49,6 +63,7 @@ void test01()
ms1.insert("love is not enough");
ms1.insert("every day is exactly the same");
VERIFY( ms1.size() == 13 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
iterator it1 = ms1.begin();
++it1;
@@ -56,6 +71,7 @@ void test01()
++it2;
iterator it3 = ms1.erase(it1);
VERIFY( ms1.size() == 12 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
VERIFY( it3 == it2 );
VERIFY( *it3 == *it2 );
@@ -68,6 +84,7 @@ void test01()
++it5;
iterator it6 = ms1.erase(it4, it5);
VERIFY( ms1.size() == 10 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
VERIFY( it6 == it5 );
VERIFY( *it6 == *it5 );
@@ -79,6 +96,7 @@ void test01()
++it8;
const_iterator it9 = ms1.erase(it7);
VERIFY( ms1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
VERIFY( it9 == it8 );
VERIFY( *it9 == *it8 );
@@ -91,11 +109,13 @@ void test01()
++it11;
const_iterator it12 = ms1.erase(it10, it11);
VERIFY( ms1.size() == 5 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
VERIFY( it12 == it11 );
VERIFY( *it12 == *it11 );
iterator it13 = ms1.erase(ms1.begin(), ms1.end());
VERIFY( ms1.size() == 0 );
+ VERIFY( get_nb_bucket_elems(ms1) == ms1.size() );
VERIFY( it13 == ms1.end() );
VERIFY( it13 == ms1.begin() );
}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
new file mode 100644
index 0000000000..7a0a183524
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <unordered_set>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+struct X_hash
+{ std::size_t operator()(const X&) const { return 0; } };
+
+bool operator==(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::unordered_multiset<X, X_hash>& s, X x)
+{
+ std::unordered_multiset<X, X_hash>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
new file mode 100644
index 0000000000..c65b17d330
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <unordered_set>
+
+namespace
+{
+ template<typename _Tp>
+ struct final_hash final
+ {
+ std::size_t operator() (const _Tp&) const noexcept
+ { return 0; }
+ };
+}
+
+// A non-integral type:
+template class std::unordered_multiset<std::string, final_hash<std::string>>;
+
+// An integral type;
+template class std::unordered_multiset<int, final_hash<int>>;
+
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/51866.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/51866.cc
new file mode 100644
index 0000000000..7ee0dce3a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/51866.cc
@@ -0,0 +1,87 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+struct num
+{
+ int value;
+ num(int n) : value(n) {}
+ num(num const&) = default;
+ num& operator=(num const&) = default;
+ num(num&& o) : value(o.value)
+ { o.value = -1; }
+ num& operator=(num&& o)
+ {
+ if (this != &o)
+ {
+ value = o.value;
+ o.value = -1;
+ }
+ return *this;
+ }
+};
+
+struct num_hash
+{
+ size_t operator()(num const& a) const
+ { return a.value; }
+};
+
+struct num_equal
+{
+ static bool _S_called_on_moved_instance;
+ bool operator()(num const& a, num const& b) const
+ {
+ if (a.value == -1 || b.value == -1)
+ _S_called_on_moved_instance = true;
+ return a.value == b.value;
+ }
+};
+
+bool num_equal::_S_called_on_moved_instance = false;
+
+// libstdc++/51866
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::unordered_multiset<num, num_hash, num_equal> mset;
+ mset.insert(num(1));
+ mset.insert(num(2));
+ mset.insert(num(1));
+ mset.insert(num(2));
+ VERIFY( mset.size() == 4 );
+ auto iter = mset.cbegin();
+ int x0 = (iter++)->value;
+ int x1 = (iter++)->value;
+ int x2 = (iter++)->value;
+ int x3 = (iter++)->value;
+ VERIFY( iter == mset.cend() );
+ VERIFY( (x0 == 1 && x1 == 1 && x2 == 2 && x3 == 2)
+ || (x0 == 2 && x1 == 2 && x2 == 1 && x3 == 1) );
+ VERIFY( !num_equal::_S_called_on_moved_instance );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/52476.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/52476.cc
new file mode 100644
index 0000000000..45eeb71f55
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/52476.cc
@@ -0,0 +1,77 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <vector>
+#include <algorithm>
+#include <testsuite_hooks.h>
+
+namespace
+{
+ struct pair_hash
+ {
+ std::size_t
+ operator()(const std::pair<int, int>& p) const noexcept
+ { return std::hash<int>()(p.first); }
+ };
+
+ struct pair_equal_to
+ {
+ bool
+ operator()(const std::pair<int, int>& x,
+ const std::pair<int, int>& y) const noexcept
+ { return x.first == y.first; }
+ };
+}
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ unordered_multiset<pair<int, int>, pair_hash, pair_equal_to> mset;
+ vector<int> values;
+
+ size_t nb_bkts = mset.bucket_count();
+ int i = 0;
+ for (;; ++i)
+ {
+ mset.insert(make_pair(0, i));
+ if (mset.bucket_count() != nb_bkts)
+ // Container got rehash
+ break;
+ values.clear();
+ transform(mset.begin(), mset.end(), back_inserter(values),
+ [](const pair<int, int>& p) { return p.second; });
+ }
+
+ vector<int> rehash_values;
+ transform(mset.begin(), mset.end(), back_inserter(rehash_values),
+ [](const pair<int, int>& p) { return p.second; });
+ // Remove the value that result in a rehash
+ rehash_values.erase(remove(rehash_values.begin(), rehash_values.end(), i));
+
+ VERIFY( rehash_values == values );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/53115.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/53115.cc
new file mode 100644
index 0000000000..a23eacb753
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/53115.cc
@@ -0,0 +1,101 @@
+// { dg-options "-std=gnu++11" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<int>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ std::unordered_multiset<int> mms;
+ mms.insert(10);
+ VERIFY( mms.size() == 1 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(10);
+ VERIFY( mms.size() == 2 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(10);
+ VERIFY( mms.size() == 3 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(10);
+ VERIFY( mms.size() == 4 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(10);
+ VERIFY( mms.size() == 5 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(24);
+ VERIFY( mms.size() == 6 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(25);
+ VERIFY( mms.size() == 7 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(2);
+ VERIFY( mms.size() == 8 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(2);
+ VERIFY( mms.size() == 9 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(1);
+ VERIFY( mms.size() == 10 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+
+ mms.insert(10);
+ VERIFY( mms.size() == 11 );
+ VERIFY( std::distance(mms.begin(), mms.end()) == mms.size() );
+ VERIFY( get_nb_bucket_elems(mms) == mms.size() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/hash_policy.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/hash_policy.cc
new file mode 100644
index 0000000000..0950c13c80
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/hash_policy.cc
@@ -0,0 +1,69 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <limits>
+#include <ext/throw_allocator.h>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::numeric_limits<size_t> nl_size_t;
+ std::unordered_multiset<int, std::hash<int>, std::equal_to<int>,
+ __gnu_cxx::throw_allocator_limit<int> > us;
+ const int nb = 100;
+ int scheduled_throw_counter = 0;
+ std::size_t thrown_exceptions = 0;
+ for (int i = 0; i != nb; ++i)
+ {
+ if ((float)(us.size() + 1)
+ / (float)us.bucket_count() >= us.max_load_factor())
+ {
+ // We are going to need a rehash, lets introduce allocation issues:
+ __gnu_cxx::limit_condition::set_limit(scheduled_throw_counter++);
+ }
+ try
+ {
+ us.insert(i / 2);
+ scheduled_throw_counter = 0;
+ }
+ catch (const __gnu_cxx::forced_error&)
+ {
+ ++thrown_exceptions;
+ --i;
+ }
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ __gnu_cxx::limit_condition::set_limit(nl_size_t::max());
+ }
+
+ VERIFY( thrown_exceptions != 0 );
+ // Check that all values have been inserted:
+ for (int i = 0; i != nb / 2; ++i)
+ {
+ VERIFY( us.count(i) == 2 );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc
index 571346fd5c..59cd8c9857 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc
@@ -25,6 +25,19 @@
#include <unordered_set>
#include <testsuite_hooks.h>
+namespace
+{
+ template <typename _Tp>
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<_Tp>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -38,8 +51,9 @@ void test01()
"magenta", "yellow", "orange", "pink", "gray" };
s.insert(A+0, A+N);
- VERIFY(s.size() == static_cast<unsigned int>(N));
- VERIFY(std::distance(s.begin(), s.end()) == N);
+ VERIFY( s.size() == static_cast<unsigned int>(N) );
+ VERIFY( std::distance(s.begin(), s.end()) == N );
+ VERIFY( get_nb_bucket_elems(s) == N );
for (int i = 0; i < N; ++i) {
std::string str = A[i];
@@ -62,6 +76,7 @@ void test02()
s.insert(A+0, A+N);
VERIFY(s.size() == static_cast<unsigned int>(N));
VERIFY(std::distance(s.begin(), s.end()) == N);
+ VERIFY( get_nb_bucket_elems(s) == N );
VERIFY(std::count(s.begin(), s.end(), 2) == 1);
VERIFY(std::count(s.begin(), s.end(), 3) == 1);
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc
index f275e9a9bd..ebc38b2402 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc
@@ -24,6 +24,19 @@
#include <unordered_set>
#include <testsuite_hooks.h>
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<std::string>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -33,7 +46,8 @@ void test01()
VERIFY(s.empty());
Set::iterator i = s.insert("abcde");
- VERIFY(s.size() == 1);
+ VERIFY( s.size() == 1 );
+ VERIFY( get_nb_bucket_elems(s) == 1 );
VERIFY(std::distance(s.begin(), s.end()) == 1);
VERIFY(i == s.begin());
VERIFY(*i == "abcde");
@@ -50,6 +64,7 @@ void test02()
s.insert("abcde");
Set::iterator i = s.insert("abcde");
VERIFY(s.size() == 2);
+ VERIFY( get_nb_bucket_elems(s) == 2 );
VERIFY(std::distance(s.begin(), s.end()) == 2);
VERIFY(*i == "abcde");
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc
index 14b8e16817..4dc9fba5b6 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc
@@ -26,6 +26,19 @@
#include <testsuite_hooks.h>
#include <testsuite_rvalref.h>
+namespace
+{
+ template <typename _Tp>
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_multiset<_Tp>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -37,6 +50,7 @@ void test01()
Set::iterator i = s.insert(rvalstruct(1));
VERIFY( s.size() == 1 );
+ VERIFY( get_nb_bucket_elems(s) == 1 );
VERIFY( std::distance(s.begin(), s.end()) == 1 );
VERIFY( i == s.begin() );
VERIFY( (*i).val == 1 );
@@ -54,6 +68,7 @@ void test02()
s.insert(rvalstruct(2));
Set::iterator i = s.insert(rvalstruct(2));
VERIFY( s.size() == 2 );
+ VERIFY( get_nb_bucket_elems(s) == 2 );
VERIFY( std::distance(s.begin(), s.end()) == 2 );
VERIFY( (*i).val == 2 );
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc
new file mode 100644
index 0000000000..057e326fbf
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc
@@ -0,0 +1,88 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// range insert
+
+#include <vector>
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+class PathPoint
+{
+public:
+ PathPoint(char t, const std::vector<double>& c)
+ : type(t), coords(c) { }
+ PathPoint(char t, std::vector<double>&& c)
+ : type(t), coords(std::move(c)) { }
+ char getType() const { return type; }
+ const std::vector<double>& getCoords() const { return coords; }
+private:
+ char type;
+ std::vector<double> coords;
+};
+
+struct PathPointHasher
+{
+ std::size_t operator() (const PathPoint& __pp) const
+ { return __pp.getType(); }
+};
+
+struct PathPointEqual
+{
+ bool operator() (const PathPoint& __lhs, const PathPoint& __rhs) const
+ { return __lhs.getType() == __rhs.getType(); }
+};
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ typedef std::unordered_multiset<PathPoint, PathPointHasher,
+ PathPointEqual> Mset;
+ Mset ms;
+
+ std::vector<double> coord1 = { 0.0, 1.0, 2.0 };
+
+ auto it = ms.emplace('a', coord1);
+ VERIFY( ms.size() == 1 );
+ VERIFY( it->getType() == 'a' );
+
+ coord1[0] = 3.0;
+ it = ms.emplace('a', coord1);
+ VERIFY( ms.size() == 2 );
+ VERIFY( it->getType() == 'a' );
+ VERIFY( it->getCoords()[0] == 3.0 );
+
+ it = ms.emplace_hint(ms.begin(), 'b', coord1);
+ VERIFY( it != ms.end() );
+ VERIFY( it->getType() == 'b' );
+ VERIFY( it->getCoords()[0] == 3.0 );
+
+ double *px = &coord1[0];
+ it = ms.emplace('c', std::move(coord1));
+ VERIFY( ms.size() == 4 );
+ VERIFY( it->getType() == 'c' );
+ VERIFY( &(it->getCoords()[0]) == px );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc
new file mode 100644
index 0000000000..6106b3336f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ const int N = 1000;
+
+ typedef std::unordered_multiset<int> MSet;
+ MSet s;
+ s.reserve(N * 2);
+
+ std::size_t bkts = s.bucket_count();
+ for (int i = 0; i != N; ++i)
+ {
+ s.insert(i);
+ s.insert(i);
+ // As long as we insert less than the reserved number of elements we
+ // shouldn't experiment any rehash.
+ VERIFY( s.bucket_count() == bkts );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
new file mode 100644
index 0000000000..2c8b4e6cc9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+
+void
+test01()
+{
+ std::unordered_multiset<int> us;
+
+ auto ke = us.key_eq();
+ auto h = us.hash_function();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/count.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/count.cc
new file mode 100644
index 0000000000..17c37f82ed
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/count.cc
@@ -0,0 +1,106 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ unordered_multiset<int> ums0;
+ VERIFY( ums0.count(0) == 0 );
+ VERIFY( ums0.count(1) == 0 );
+
+ ums0.insert(1);
+ VERIFY( ums0.count(0) == 0 );
+ VERIFY( ums0.count(1) == 1 );
+
+ ums0.insert(1);
+ VERIFY( ums0.count(0) == 0 );
+ VERIFY( ums0.count(1) == 2 );
+
+ ums0.insert(2);
+ VERIFY( ums0.count(2) == 1 );
+
+ ums0.insert(3);
+ ums0.insert(3);
+ ums0.insert(3);
+ VERIFY( ums0.count(3) == 3 );
+
+ ums0.erase(2);
+ VERIFY( ums0.count(2) == 0 );
+
+ ums0.erase(0);
+ VERIFY( ums0.count(0) == 0 );
+
+ unordered_multiset<int> ums1(ums0);
+ VERIFY( ums1.count(0) == 0 );
+ VERIFY( ums1.count(1) == 2 );
+ VERIFY( ums1.count(2) == 0 );
+ VERIFY( ums1.count(3) == 3 );
+
+ ums0.clear();
+ VERIFY( ums0.count(0) == 0 );
+ VERIFY( ums0.count(1) == 0 );
+ VERIFY( ums0.count(2) == 0 );
+ VERIFY( ums0.count(3) == 0 );
+
+ ums1.insert(4);
+ ums1.insert(5);
+ ums1.insert(5);
+ ums1.insert(5);
+ ums1.insert(5);
+ VERIFY( ums1.count(4) == 1 );
+ VERIFY( ums1.count(5) == 4 );
+
+ ums1.erase(1);
+ VERIFY( ums1.count(1) == 0 );
+
+ ums1.erase(ums1.find(5));
+ VERIFY( ums1.count(5) == 3 );
+
+ ums1.insert(1);
+ ums1.insert(1);
+ VERIFY( ums1.count(1) == 2 );
+
+ ums1.erase(5);
+ VERIFY( ums1.count(5) == 0 );
+
+ ums1.erase(ums1.find(4));
+ VERIFY( ums1.count(4) == 0 );
+
+ ums1.clear();
+ VERIFY( ums1.count(0) == 0 );
+ VERIFY( ums1.count(1) == 0 );
+ VERIFY( ums1.count(2) == 0 );
+ VERIFY( ums1.count(3) == 0 );
+ VERIFY( ums1.count(4) == 0 );
+ VERIFY( ums1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
index 137b0d6d2e..ac0fdaa2cc 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..20c6e96479
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_set>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::unordered_multiset<int, std::hash<int>, std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::unordered_multiset<int, std::hash<int>, std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/55043.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/55043.cc
new file mode 100644
index 0000000000..152489042f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/55043.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/55043
+
+#include <unordered_set>
+#include <vector>
+
+struct MoveOnly
+{
+ MoveOnly() = default;
+ MoveOnly(MoveOnly&&) = default;
+};
+
+struct equal {
+ bool operator()(const MoveOnly&, const MoveOnly) const { return true; }
+};
+struct hash {
+ std::size_t operator()(const MoveOnly&) const { return 0; }
+};
+
+template<typename Alloc>
+ using test_type = std::unordered_set<MoveOnly, hash, equal, Alloc>;
+
+void test01()
+{
+ typedef test_type<std::allocator<MoveOnly>> uim;
+ std::vector<uim> v;
+ v.emplace_back(uim());
+}
+
+// Unordered containers don't use allocator_traits yet so need full
+// Allocator interface, derive from std::allocator to get it.
+template<typename T, bool R>
+struct Alloc : std::allocator<T>
+{
+ template<typename U>
+ struct rebind { typedef Alloc<U, R> other; };
+
+ Alloc() = default;
+
+ template<typename U>
+ Alloc(const Alloc<U, R>&) { }
+
+ typedef typename std::conditional<R, T&&, const T&>::type arg_type;
+
+ void construct(T* p, arg_type) const
+ { new((void*)p) T(); }
+};
+
+// verify is_copy_constructible depends on allocator
+typedef test_type<Alloc<MoveOnly, true>> uim_rval;
+static_assert(!std::is_copy_constructible<uim_rval>::value, "is not copyable");
+
+typedef test_type<Alloc<MoveOnly, false>> uim_lval;
+static_assert(std::is_copy_constructible<uim_lval>::value, "is copyable");
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_compare_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_compare_neg.cc
new file mode 100644
index 0000000000..bef8e7ba68
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_compare_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::invalid_local_iterator_compare<std::unordered_set<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_range_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_range_neg.cc
new file mode 100644
index 0000000000..e4cb8c1d4c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_range_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::invalid_local_iterator_range<std::unordered_set<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_erased_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_erased_local_iterator_neg.cc
new file mode 100644
index 0000000000..1807005ea9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_erased_local_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::use_erased_local_iterator<std::unordered_set<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_iterator_neg.cc
new file mode 100644
index 0000000000..c29889ee25
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::use_invalid_iterator<std::unordered_set<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_local_iterator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_local_iterator_neg.cc
new file mode 100644
index 0000000000..28444ec6e8
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_local_iterator_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/unordered_checks.h>
+
+void test01()
+{
+ __gnu_test::use_invalid_local_iterator<std::unordered_set<int>>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc
index 8f59773d80..cdefef2afc 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc
@@ -23,6 +23,18 @@
#include <string>
#include <testsuite_hooks.h>
+namespace
+{
+ std::size_t
+ get_nb_bucket_elems(const std::unordered_set<std::string>& us)
+ {
+ std::size_t nb = 0;
+ for (std::size_t b = 0; b != us.bucket_count(); ++b)
+ nb += us.bucket_size(b);
+ return nb;
+ }
+}
+
void test01()
{
bool test __attribute__((unused)) = true;
@@ -44,14 +56,20 @@ void test01()
s1.insert("belonging (no longer mix)");
s1.insert("one line behind");
VERIFY( s1.size() == 10 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
VERIFY( s1.erase("eeilo") == 1 );
VERIFY( s1.size() == 9 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
iterator it1 = s1.find("eeilo");
VERIFY( it1 == s1.end() );
VERIFY( s1.erase("tillsammans") == 1 );
VERIFY( s1.size() == 8 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
iterator it2 = s1.find("tillsammans");
VERIFY( it2 == s1.end() );
@@ -60,17 +78,23 @@ void test01()
VERIFY( it3 != s1.end() );
VERIFY( s1.erase(*it3) == 1 );
VERIFY( s1.size() == 7 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
it3 = s1.find("belonging (no longer mix)");
VERIFY( it3 == s1.end() );
VERIFY( !s1.erase("abra") );
VERIFY( s1.size() == 7 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
VERIFY( !s1.erase("eeilo") );
VERIFY( s1.size() == 7 );
VERIFY( s1.erase("because to why") == 1 );
VERIFY( s1.size() == 6 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
iterator it4 = s1.find("because to why");
VERIFY( it4 == s1.end() );
@@ -86,11 +110,15 @@ void test01()
VERIFY( s1.erase(*it5) == 1 );
VERIFY( s1.size() == 5 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
it5 = s1.find("umbra/penumbra");
VERIFY( it5 == s1.end() );
VERIFY( s1.erase(*it6) == 1 );
VERIFY( s1.size() == 4 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
it6 = s1.find("one line behind");
VERIFY( it6 == s1.end() );
@@ -102,6 +130,8 @@ void test01()
VERIFY( s1.erase(*it8) == 1 );
VERIFY( s1.size() == 3 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
VERIFY( ++it7 == it9 );
iterator it10 = it9;
@@ -109,15 +139,21 @@ void test01()
iterator it11 = it10;
VERIFY( s1.erase(*it9) == 1 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
VERIFY( s1.size() == 2 );
VERIFY( ++it10 == s1.end() );
VERIFY( s1.erase(s1.begin()) != s1.end() );
VERIFY( s1.size() == 1 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
VERIFY( s1.begin() == it11 );
VERIFY( s1.erase(*s1.begin()) == 1 );
VERIFY( s1.size() == 0 );
+ VERIFY( get_nb_bucket_elems(s1) == s1.size() );
+ VERIFY( distance(s1.begin(), s1.end()) == s1.size() );
VERIFY( s1.begin() == s1.end() );
}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
new file mode 100644
index 0000000000..ec5aeb1a23
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <unordered_set>
+
+struct X
+{
+ template<typename T>
+ X(T&) {}
+};
+
+struct X_hash
+{ std::size_t operator()(const X&) const { return 0; } };
+
+bool operator==(const X&, const X&) { return false; }
+
+// LWG 2059.
+void erasor(std::unordered_set<X, X_hash>& s, X x)
+{
+ std::unordered_set<X, X_hash>::iterator it = s.find(x);
+ if (it != s.end())
+ s.erase(it);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
new file mode 100644
index 0000000000..e661ee401f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <unordered_set>
+
+namespace
+{
+ template<typename _Tp>
+ struct final_hash final
+ {
+ std::size_t operator() (const _Tp&) const noexcept
+ { return 0; }
+ };
+}
+
+// A non-integral type:
+template class std::unordered_set<std::string, final_hash<std::string>>;
+
+// An integral type;
+template class std::unordered_set<int, final_hash<int>>;
+
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/load_factor.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/load_factor.cc
new file mode 100644
index 0000000000..818274a3d5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/load_factor.cc
@@ -0,0 +1,58 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ {
+ std::unordered_set<int> us;
+ for (int i = 0; i != 100000; ++i)
+ {
+ us.insert(i);
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ }
+ }
+ {
+ std::unordered_set<int> us;
+ us.max_load_factor(3.f);
+ for (int i = 0; i != 100000; ++i)
+ {
+ us.insert(i);
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ }
+ }
+ {
+ std::unordered_set<int> us;
+ us.max_load_factor(.3f);
+ for (int i = 0; i != 100000; ++i)
+ {
+ us.insert(i);
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ }
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc
new file mode 100644
index 0000000000..91dc0fd402
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc
@@ -0,0 +1,62 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::unordered_set<int> us;
+ typedef typename std::unordered_set<int>::size_type size_type;
+ bool rehashed = false;
+ for (int i = 0; i != 100000; ++i)
+ {
+ size_type bkt_count = us.bucket_count();
+ us.insert(i);
+ if (bkt_count != us.bucket_count())
+ {
+ // Container has been rehashed, lets check that it won't be rehash again
+ // if we remove and restore the last 2 inserted elements:
+ rehashed = true;
+ bkt_count = us.bucket_count();
+ VERIFY( us.erase(i) == 1 );
+ VERIFY( bkt_count == us.bucket_count() );
+ if (i > 0)
+ {
+ VERIFY( us.erase(i - 1) == 1 );
+ VERIFY( bkt_count == us.bucket_count() );
+
+ VERIFY( us.insert(i - 1).second );
+ VERIFY( bkt_count == us.bucket_count() );
+ }
+ VERIFY( us.insert(i).second );
+ VERIFY( bkt_count == us.bucket_count() );
+ }
+ }
+
+ // At lest we check a rehash once:
+ VERIFY( rehashed );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/insert/hash_policy.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/insert/hash_policy.cc
new file mode 100644
index 0000000000..3d3f55abc7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/insert/hash_policy.cc
@@ -0,0 +1,113 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <vector>
+#include <limits>
+#include <ext/throw_allocator.h>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::numeric_limits<std::size_t> nl_size_t;
+ std::unordered_set<int, std::hash<int>, std::equal_to<int>,
+ __gnu_cxx::throw_allocator_limit<int> > us;
+ const int nb = 100;
+ int scheduled_throw_counter = 0;
+ std::size_t thrown_exceptions = 0;
+ for (int i = 0; i != nb; ++i)
+ {
+ if ((float)(us.size() + 1)
+ / (float)us.bucket_count() >= us.max_load_factor())
+ {
+ // We are going to need a rehash, lets introduce allocation issues:
+ __gnu_cxx::limit_condition::set_limit(scheduled_throw_counter++);
+ }
+ try
+ {
+ VERIFY(us.insert(i).second);
+ scheduled_throw_counter = 0;
+ }
+ catch (const __gnu_cxx::forced_error&)
+ {
+ ++thrown_exceptions;
+ --i;
+ }
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ __gnu_cxx::limit_condition::set_limit(nl_size_t::max());
+ }
+
+ VERIFY( thrown_exceptions != 0 );
+ // Check that all values have been inserted:
+ for (int i = 0; i != nb; ++i)
+ {
+ VERIFY( us.count(i) == 1 );
+ }
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::numeric_limits<std::size_t> nl_size_t;
+ std::unordered_set<int, std::hash<int>, std::equal_to<int>,
+ __gnu_cxx::throw_allocator_limit<int> > us;
+ const int nb = 100;
+ int scheduled_throw_counter = 0;
+ std::size_t thrown_exceptions = 0;
+ for (int i = 0; i != nb; ++i)
+ {
+ if ((float)(us.size() + 2)
+ / (float)us.bucket_count() >= us.max_load_factor())
+ {
+ // We are going to need a rehash, lets introduce allocation issues:
+ __gnu_cxx::limit_condition::set_limit(scheduled_throw_counter++);
+ }
+ try
+ {
+ std::vector<int> v = { i, i };
+ // Check the insert range robustness
+ us.insert(v.begin(), v.end());
+ scheduled_throw_counter = 0;
+ }
+ catch (const __gnu_cxx::forced_error&)
+ {
+ ++thrown_exceptions;
+ --i;
+ }
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ __gnu_cxx::limit_condition::set_limit(nl_size_t::max());
+ }
+
+ VERIFY( thrown_exceptions != 0 );
+ // Check that all values have been inserted:
+ for (int i = 0; i != nb; ++i)
+ {
+ VERIFY( us.count(i) == 1 );
+ }
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
new file mode 100644
index 0000000000..9ef1c8134a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
@@ -0,0 +1,41 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-normal-mode "" }
+
+// Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-error "static assertion failed" "" { target *-*-* } 187 }
+
+#include <unordered_set>
+
+namespace
+{
+ struct hash_without_noexcept
+ {
+ std::size_t operator() (int) const
+ { return 0; }
+ };
+}
+
+void
+test01()
+{
+ std::__unordered_set<int, hash_without_noexcept,
+ std::equal_to<int>, std::allocator<int>,
+ false> us;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc
new file mode 100644
index 0000000000..7db51f79f3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc
@@ -0,0 +1,77 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <limits>
+#include <ext/throw_allocator.h>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::numeric_limits<std::size_t> nl_size_t;
+ std::unordered_set<int, std::hash<int>, std::equal_to<int>,
+ __gnu_cxx::throw_allocator_limit<int> > us;
+ int val = 0;
+ for (; val != 100; ++val)
+ {
+ VERIFY( us.insert(val).second) ;
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ }
+
+ float cur_max_load_factor = us.max_load_factor();
+ int counter = 0;
+ std::size_t thrown_exceptions = 0;
+ while (true)
+ {
+ __gnu_cxx::limit_condition::set_limit(counter++);
+ bool do_break = false;
+ try
+ {
+ us.max_load_factor(.5f);
+ do_break = true;
+ }
+ catch (const __gnu_cxx::forced_error&)
+ {
+ VERIFY( us.max_load_factor() == cur_max_load_factor );
+ ++thrown_exceptions;
+ }
+ // Lets check that unordered_set will still be correctly resized
+ // when needed
+ __gnu_cxx::limit_condition::set_limit(nl_size_t::max());
+ for (;;)
+ {
+ VERIFY( us.load_factor() <= us.max_load_factor() );
+ size_t nbkts = us.bucket_count();
+ VERIFY( us.insert(val++).second );
+ if (us.bucket_count() != nbkts)
+ break;
+ }
+ if (do_break)
+ break;
+ }
+ VERIFY( thrown_exceptions > 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc
new file mode 100644
index 0000000000..2ae4e763d6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc
@@ -0,0 +1,89 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// range insert
+
+#include <vector>
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+class PathPoint
+{
+public:
+ PathPoint(char t, const std::vector<double>& c)
+ : type(t), coords(c) { }
+ PathPoint(char t, std::vector<double>&& c)
+ : type(t), coords(std::move(c)) { }
+ char getType() const { return type; }
+ const std::vector<double>& getCoords() const { return coords; }
+private:
+ char type;
+ std::vector<double> coords;
+};
+
+struct PathPointHasher
+{
+ std::size_t operator() (const PathPoint& __pp) const
+ { return __pp.getType(); }
+};
+
+struct PathPointEqual
+{
+ bool operator() (const PathPoint& __lhs, const PathPoint& __rhs) const
+ { return __lhs.getType() == __rhs.getType(); }
+};
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ typedef std::unordered_set<PathPoint, PathPointHasher, PathPointEqual> Set;
+ Set s;
+
+ std::vector<double> coord1 = { 0.0, 1.0, 2.0 };
+
+ auto ret = s.emplace('a', coord1);
+ VERIFY( ret.second );
+ VERIFY( s.size() == 1 );
+ VERIFY( ret.first->getType() == 'a' );
+
+ coord1[0] = 3.0;
+ ret = s.emplace('a', coord1);
+ VERIFY( !ret.second );
+ VERIFY( s.size() == 1 );
+ VERIFY( ret.first->getType() == 'a' );
+ VERIFY( ret.first->getCoords()[0] == 0.0 );
+
+ auto it = s.emplace_hint(s.begin(), 'b', coord1);
+ VERIFY( it != s.end() );
+ VERIFY( it->getType() == 'b' );
+ VERIFY( it->getCoords()[0] == 3.0 );
+
+ double *px = &coord1[0];
+ ret = s.emplace('c', std::move(coord1));
+ VERIFY( ret.second );
+ VERIFY( ret.first->getType() == 'c' );
+ VERIFY( &(ret.first->getCoords()[0]) == px );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
new file mode 100644
index 0000000000..41f428a51d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
@@ -0,0 +1,67 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+void test01()
+{
+ const int N = 1000;
+
+ typedef std::unordered_set<int> Set;
+ Set s;
+ s.reserve(N);
+
+ std::size_t bkts = s.bucket_count();
+ for (int i = 0; i != N; ++i)
+ {
+ s.insert(i);
+ // As long as we insert less than the reserved number of elements we
+ // shouldn't experiment any rehash.
+ VERIFY( s.bucket_count() == bkts );
+ }
+}
+
+void test02()
+{
+ const int N = 1000;
+
+ typedef std::unordered_set<int> Set;
+ Set s;
+ s.reserve(N);
+ s.reserve(N);
+
+ std::size_t bkts = s.bucket_count();
+ for (int i = 0; i != N; ++i)
+ {
+ s.insert(i);
+ // As long as we insert less than the reserved number of elements we
+ // shouldn't experiment any rehash.
+ VERIFY( s.bucket_count() == bkts );
+ }
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
new file mode 100644
index 0000000000..a1c0c8474e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+
+void
+test01()
+{
+ std::unordered_set<int> us;
+
+ auto ke = us.key_eq();
+ auto h = us.hash_function();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc
new file mode 100644
index 0000000000..942338f9e5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc
@@ -0,0 +1,106 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-10-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+ unordered_set<int> us0;
+ VERIFY( us0.count(0) == 0 );
+ VERIFY( us0.count(1) == 0 );
+
+ us0.insert(1);
+ VERIFY( us0.count(0) == 0 );
+ VERIFY( us0.count(1) == 1 );
+
+ us0.insert(1);
+ VERIFY( us0.count(0) == 0 );
+ VERIFY( us0.count(1) == 1 );
+
+ us0.insert(2);
+ VERIFY( us0.count(2) == 1 );
+
+ us0.insert(3);
+ us0.insert(3);
+ us0.insert(3);
+ VERIFY( us0.count(3) == 1 );
+
+ us0.erase(2);
+ VERIFY( us0.count(2) == 0 );
+
+ us0.erase(0);
+ VERIFY( us0.count(0) == 0 );
+
+ unordered_set<int> us1(us0);
+ VERIFY( us1.count(0) == 0 );
+ VERIFY( us1.count(1) == 1 );
+ VERIFY( us1.count(2) == 0 );
+ VERIFY( us1.count(3) == 1 );
+
+ us0.clear();
+ VERIFY( us0.count(0) == 0 );
+ VERIFY( us0.count(1) == 0 );
+ VERIFY( us0.count(2) == 0 );
+ VERIFY( us0.count(3) == 0 );
+
+ us1.insert(4);
+ us1.insert(5);
+ us1.insert(5);
+ us1.insert(5);
+ us1.insert(5);
+ VERIFY( us1.count(4) == 1 );
+ VERIFY( us1.count(5) == 1 );
+
+ us1.erase(1);
+ VERIFY( us1.count(1) == 0 );
+
+ us1.erase(us1.find(5));
+ VERIFY( us1.count(5) == 0 );
+
+ us1.insert(1);
+ us1.insert(1);
+ VERIFY( us1.count(1) == 1 );
+
+ us1.erase(5);
+ VERIFY( us1.count(5) == 0 );
+
+ us1.erase(us1.find(4));
+ VERIFY( us1.count(4) == 0 );
+
+ us1.clear();
+ VERIFY( us1.count(0) == 0 );
+ VERIFY( us1.count(1) == 0 );
+ VERIFY( us1.count(2) == 0 );
+ VERIFY( us1.count(3) == 0 );
+ VERIFY( us1.count(4) == 0 );
+ VERIFY( us1.count(5) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc
new file mode 100644
index 0000000000..5b16f0b3cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+
+// libstdc++/52309
+struct value {};
+struct hash { std::size_t operator()(const value&) const; };
+bool operator==(value const&, value const&);
+std::unordered_set<value, hash> set;
+bool z = (set == set);
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
index ea116c364a..2bb738afd9 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
new file mode 100644
index 0000000000..9053b000e4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <functional>
+
+struct TFoo {};
+
+struct TFoo_hash
+{
+ std::size_t operator()(const TFoo &) const { return 0; }
+};
+
+void f1(std::unordered_set<TFoo, TFoo_hash> &) {}
+
+void f2()
+{
+ std::unordered_set<TFoo, TFoo_hash> set1;
+ std::bind(f1, std::ref(set1));
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
new file mode 100644
index 0000000000..7cfa4ad474
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <functional>
+
+void f()
+{
+ std::unordered_set<int> Foo;
+ ref(Foo);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc
new file mode 100644
index 0000000000..53ce07008d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_set>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+// libstdc++/50118
+template class std::unordered_set<int, std::hash<int>, std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<int>>;
+template class std::unordered_set<int, std::hash<int>, std::equal_to<int>,
+ __gnu_test::ExplicitConsAlloc<char>>;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/52591.cc b/libstdc++-v3/testsuite/23_containers/vector/52591.cc
new file mode 100644
index 0000000000..c018c72688
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/52591.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// libstdc++/52591
+
+#include <vector>
+
+// As an extension we allow move-assignment of std::vector when the element
+// type is not MoveAssignable, as long as the allocator type propagates or
+// is known to always compare equal.
+
+struct C
+{
+ C& operator=(C&&) = delete;
+};
+
+void test01()
+{
+ std::vector<C> a;
+ a = std::vector<C>();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc
new file mode 100644
index 0000000000..90a951e83c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc
@@ -0,0 +1,57 @@
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+using __gnu_test::propagating_allocator;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, false> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(v1);
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(0 == v2.get_allocator().get_personality());
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, true> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(v1);
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(1 == v2.get_allocator().get_personality());
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc
new file mode 100644
index 0000000000..4bc518956f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc
@@ -0,0 +1,61 @@
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+using __gnu_test::propagating_allocator;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, false> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(alloc_type(2));
+ v2.push_back(T());
+ v2 = v1;
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(2 == v2.get_allocator().get_personality());
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, true> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(alloc_type(2));
+ v2.push_back(T());
+ v2 = v1;
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(1 == v2.get_allocator().get_personality());
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc
new file mode 100644
index 0000000000..f5c3a1898b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+
+#include <vector>
+#include <memory>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+using __gnu_test::SimpleAllocator;
+
+template class std::vector<T, SimpleAllocator<T>>;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef SimpleAllocator<T> alloc_type;
+ typedef std::allocator_traits<alloc_type> traits_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v(alloc_type{});
+ v.push_back(T());
+ VERIFY( v.max_size() == traits_type::max_size(v.get_allocator()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
new file mode 100644
index 0000000000..def0b1a2ae
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
@@ -0,0 +1,61 @@
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+using __gnu_test::propagating_allocator;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, false> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(alloc_type(2));
+ v2.push_back(T());
+ v2 = std::move(v1);
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(2 == v2.get_allocator().get_personality());
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, true> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(alloc_type(2));
+ v2 = std::move(v1);
+ v2.push_back(T());
+ VERIFY(0 == v1.get_allocator().get_personality());
+ VERIFY(1 == v2.get_allocator().get_personality());
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
new file mode 100644
index 0000000000..8bde430e23
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
@@ -0,0 +1,76 @@
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+namespace __gnu_test
+{
+ inline void
+ swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
+ noexcept(false)
+ {
+ typedef uneq_allocator<T> base_alloc;
+ swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
+ }
+}
+
+using __gnu_test::propagating_allocator;
+
+void test01()
+{
+ typedef std::allocator<T> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1;
+ test_type v2;
+ // this is a GNU extension for std::allocator
+ static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
+ static_assert( noexcept( v1.swap(v2) ), "Swap cannot throw" );
+}
+
+void test02()
+{
+ typedef propagating_allocator<T, false> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ test_type v2(alloc_type(2));
+ static_assert( !noexcept( v1 = std::move(v2) ), "Move assign can throw" );
+ static_assert( noexcept( v1.swap(v2) ), "Swap cannot throw" );
+}
+
+void test03()
+{
+ typedef propagating_allocator<T, true> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ test_type v2(alloc_type(2));
+ static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
+ static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
+}
+
+int main()
+{
+ test01();
+ test02();
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
new file mode 100644
index 0000000000..79038d4305
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
@@ -0,0 +1,61 @@
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+struct T { int i; };
+
+using __gnu_test::propagating_allocator;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, false> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ v1.push_back(T());
+ test_type v2(alloc_type(2));
+ v2.push_back(T());
+ std::swap(v1, v2);
+ VERIFY(1 == v1.get_allocator().get_personality());
+ VERIFY(2 == v2.get_allocator().get_personality());
+ // swap back so assertions in uneq_allocator::deallocate don't fail
+ std::swap(v1, v2);
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ typedef propagating_allocator<T, true> alloc_type;
+ typedef std::vector<T, alloc_type> test_type;
+ test_type v1(alloc_type(1));
+ test_type v2(alloc_type(2));
+ std::swap(v1, v2);
+ VERIFY(2 == v1.get_allocator().get_personality());
+ VERIFY(1 == v2.get_allocator().get_personality());
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
index cd5a6a4248..f6d0e15edd 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc
new file mode 100644
index 0000000000..c3ae90e981
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::vector<bool> vb(__CHAR_BIT__ * sizeof(unsigned long) + 1);
+ vb.pop_back();
+
+ auto old_capacity = vb.capacity();
+ vb.shrink_to_fit();
+ VERIFY( vb.capacity() < old_capacity );
+ VERIFY( vb.size() == vb.capacity() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..3fc7075929
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+
+typedef std::vector<bool> vbtype;
+
+static_assert(std::is_nothrow_move_constructible<vbtype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
index 52f8ddf0f4..5cd3d0e131 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
@@ -17,6 +17,7 @@
// 23.2.5 class vector<bool> [lib.vector.bool]
+// { dg-skip-if "" { powerpc64-*-freebsd* } { "*" } { "" } }
// { dg-do run { xfail *-*-darwin8.[0-4].* } }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
index 7f6f9f252a..c48e474e93 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
index af6460a2bf..72fac56c2b 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable2.cc
new file mode 100644
index 0000000000..3a6c313813
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable2.cc
@@ -0,0 +1,45 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_rvalref.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace __gnu_test;
+
+ std::vector<throwing_move_constructor> v(5);
+
+ v.reserve(50);
+ VERIFY( v.capacity() >= 50 );
+
+ v.reserve(500);
+ VERIFY( v.capacity() >= 500 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable2.cc
new file mode 100644
index 0000000000..5bdb9815a2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable2.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_rvalref.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace __gnu_test;
+
+ std::vector<throwing_move_constructor> v(5);
+
+ v.resize(50);
+ VERIFY( v.size() == 50 );
+
+ v.reserve(200);
+ VERIFY( v.capacity() >= 200 );
+
+ v.resize(100);
+ VERIFY( v.size() == 100 );
+
+ v.resize(500, throwing_move_constructor());
+ VERIFY( v.size() == 500 );
+
+ v.reserve(2000);
+ VERIFY( v.capacity() >= 2000 );
+
+ v.resize(1000, throwing_move_constructor());
+ VERIFY( v.size() == 1000 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
index 2a737891b0..482166cab2 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
new file mode 100644
index 0000000000..2cc5a7d0ce
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
@@ -0,0 +1,61 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::propagating_allocator;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef propagating_allocator<int, true> alloc_type;
+ alloc_type alloc(5);
+
+ std::vector<int, alloc_type> v(10u, 1, alloc);
+ v.reserve(100);
+ VERIFY( v.size() < v.capacity() );
+ v.shrink_to_fit();
+ VERIFY( v.size() == v.capacity() );
+ VERIFY( v.get_allocator().get_personality() == alloc.get_personality() );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef propagating_allocator<int, false> alloc_type;
+ alloc_type alloc(5);
+
+ std::vector<int, alloc_type> v(10u, 1, alloc);
+ v.reserve(100);
+ VERIFY( v.size() < v.capacity() );
+ v.shrink_to_fit();
+ VERIFY( v.size() == v.capacity() );
+ VERIFY( v.get_allocator().get_personality() == alloc.get_personality() );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..b73a575a2b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+
+typedef std::vector<int> vtype;
+
+static_assert(std::is_nothrow_move_constructible<vtype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
new file mode 100644
index 0000000000..f1f5917d10
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
@@ -0,0 +1,43 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// PR libstdc++/52433
+
+#include <vector>
+
+struct X
+{
+ std::vector<int>::iterator i;
+
+ X() = default;
+ X(const X&) = default;
+ X(X&&) = default;
+ X& operator=(const X&) = default;
+ X& operator=(X&&) = default;
+};
+
+X test01()
+{
+ X x;
+ x = X();
+ return x;
+}
+
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/alloc_prop.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/alloc_prop.cc
new file mode 100644
index 0000000000..fffc466365
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/alloc_prop.cc
@@ -0,0 +1,89 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+#include <debug/vector>
+#include <type_traits>
+#include <testsuite_allocator.h>
+
+template<typename T, typename A>
+ void
+ test()
+ {
+ typedef std::vector<T, A> base;
+ typedef __gnu_debug::vector<T, A> debug;
+
+ using std::is_nothrow_default_constructible;
+ using std::is_nothrow_copy_constructible;
+ using std::is_nothrow_move_constructible;
+ using std::is_nothrow_copy_assignable;
+ using std::is_nothrow_move_assignable;
+
+ static_assert(
+ is_nothrow_default_constructible<base>::value
+ == is_nothrow_default_constructible<debug>::value,
+ "nothrow default constructible");
+
+ static_assert(
+ is_nothrow_copy_constructible<base>::value
+ == is_nothrow_copy_constructible<debug>::value,
+ "nothrow copy constructible");
+
+ static_assert(
+ is_nothrow_move_constructible<base>::value
+ == is_nothrow_move_constructible<debug>::value,
+ "nothrow move constructible");
+
+ static_assert(
+ is_nothrow_copy_assignable<base>::value
+ == is_nothrow_copy_assignable<debug>::value,
+ "nothrow move assignable");
+
+ static_assert(
+ is_nothrow_move_assignable<base>::value
+ == is_nothrow_move_assignable<debug>::value,
+ "nothrow move assignable");
+ }
+
+struct X
+{
+ X() { }
+ ~X() { }
+ X(const X&) { }
+ X(X&&) { }
+ X& operator=(const X&) { }
+ X& operator=(X&&) { }
+};
+
+int main()
+{
+ using __gnu_test::propagating_allocator;
+ using __gnu_test::SimpleAllocator;
+
+ test<int, std::allocator<int>>();
+ test<int, SimpleAllocator<int>>();
+ test<int, propagating_allocator<int, true>>();
+ test<int, propagating_allocator<int, false>>();
+ test<X, std::allocator<X>>();
+ test<X, SimpleAllocator<X>>();
+ test<X, propagating_allocator<X, true>>();
+ test<X, propagating_allocator<X, false>>();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc
new file mode 100644
index 0000000000..8206e0e567
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc
@@ -0,0 +1,42 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+
+void test01()
+{
+ using std::vector;
+
+ vector<bool> vb(__CHAR_BIT__ * sizeof(unsigned long) + 1);
+ vb.pop_back();
+
+ vector<bool>::iterator it = vb.begin();
+ vb.shrink_to_fit();
+
+ // Following line should assert
+ *it = true;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/shrink_to_fit.cc
new file mode 100644
index 0000000000..969c79a283
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/shrink_to_fit.cc
@@ -0,0 +1,40 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+
+void test01()
+{
+ using std::vector;
+ vector<int> v;
+ v.reserve(2);
+ v.push_back(0);
+ vector<int>::iterator it = v.begin();
+ v.shrink_to_fit();
+ // Following line should assert
+ *it = 1;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/2.cc b/libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/2.cc
new file mode 100644
index 0000000000..974f2c4bb5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/2.cc
@@ -0,0 +1,28 @@
+// Test for Container using non-standard pointer types.
+
+// Copyright (C) 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <vector>
+#include <ext/extptr_allocator.h>
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+template class std::vector<int, __gnu_cxx::_ExtPtr_allocator<int> >;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/2.cc b/libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/2.cc
new file mode 100644
index 0000000000..929e7d57cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/2.cc
@@ -0,0 +1,63 @@
+// Test for Container using non-standard pointer types.
+
+// Copyright (C) 2011
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// { dg-options "-std=gnu++0x" }
+
+// This is a copy of vector/types/1.cc with altered allocator.
+// The operator+()s in this test initially failed the test -
+// they stress the accurate recognition, by the compiler,
+// of _Pointer_adapter's own pointer arithmetic functions,
+// which have to match perfectly on the int type to get
+// chosen by the compiler when it sees: _Pointer_adapter<T> + int, etc.
+
+#include <vector>
+#include <ext/extptr_allocator.h>
+
+namespace N
+{
+ struct X { };
+
+ template<typename T>
+ X operator+(T, std::size_t)
+ { return X(); }
+
+ template<typename T>
+ X operator-(T, T)
+ { return X(); }
+}
+
+int main()
+{
+ std::vector<N::X, __gnu_cxx::_ExtPtr_allocator<N::X> > v(5);
+ const std::vector<N::X, __gnu_cxx::_ExtPtr_allocator<N::X> > w(1);
+
+ v[0];
+ w[0];
+ v.size();
+ v.capacity();
+ v.resize(1);
+ v.insert(v.begin(), N::X());
+ v.insert(v.begin(), 1, N::X());
+ v.insert(v.begin(), w.begin(), w.end());
+ v = w;
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/52799.cc b/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/52799.cc
new file mode 100644
index 0000000000..f43057e968
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/52799.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+
+// libstdc++/52799
+int main()
+{
+ std::vector<int> v;
+ v.emplace(v.begin());
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc b/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc
new file mode 100644
index 0000000000..000db2c856
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc
@@ -0,0 +1,77 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_rvalref.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace __gnu_test;
+
+ std::vector<throwing_move_constructor> v1;
+
+ throwing_move_constructor tmc;
+
+ v1.push_back(tmc);
+ VERIFY( v1.size() == 1 );
+
+ v1.push_back(tmc);
+ VERIFY( v1.size() == 2 );
+
+ v1.insert(v1.end(), tmc);
+ VERIFY( v1.size() == 3 );
+
+ v1.insert(v1.end(), 100, tmc);
+ VERIFY( v1.size() == 103 );
+
+ v1.insert(v1.end(), 10, tmc);
+ VERIFY( v1.size() == 113 );
+
+ v1.insert(v1.end(), 1, tmc);
+ VERIFY( v1.size() == 114 );
+
+ std::vector<throwing_move_constructor> v2;
+
+ throwing_move_constructor tmca[]
+ = { throwing_move_constructor(), throwing_move_constructor(),
+ throwing_move_constructor(), throwing_move_constructor() };
+
+ v2.insert(v2.end(), tmca, tmca + 1);
+ VERIFY( v2.size() == 1 );
+
+ v2.insert(v2.end(), tmca, tmca + 4);
+ VERIFY( v2.size() == 5 );
+
+ v2.insert(v2.end(), tmca, tmca + 2);
+ VERIFY( v2.size() == 7 );
+
+ v2.insert(v2.end(), tmca, tmca + 1);
+ VERIFY( v2.size() == 8 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc b/libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc
new file mode 100644
index 0000000000..0a6426ad54
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+// libstdc++/49836
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using __gnu_test::CopyConsOnlyType;
+ using __gnu_test::MoveConsOnlyType;
+
+ std::vector<CopyConsOnlyType> v1;
+ CopyConsOnlyType t1(1);
+ v1.push_back(t1);
+ v1.push_back(t1);
+ v1.push_back(t1);
+ VERIFY( v1.size() == 3 );
+
+ std::vector<MoveConsOnlyType> v2;
+ MoveConsOnlyType t2(1);
+ v2.push_back(std::move(t2));
+ v2.push_back(std::move(t2));
+ v2.push_back(std::move(t2));
+ VERIFY( v2.size() == 3 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
index 0a10959b24..cbcbf61449 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
index f13dd01638..1aebaa28b4 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1150 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1207 }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
index 471d4589bf..0d35bbfef0 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1080 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1137 }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
index 8d1b72c63e..cb96eced2f 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1080 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1137 }
#include <vector>
#include <utility>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
index 2f10c55036..c88b7634b5 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
@@ -18,8 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1191 }
-// { dg-excess-errors "" }
+// { dg-error "no matching" "" { target *-*-* } 1248 }
#include <vector>
diff --git a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc
index 5c7274579e..ce946f6a41 100644
--- a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc
+++ b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc
@@ -1,7 +1,8 @@
// { dg-do compile }
// 1999-06-28 bkoz
-// Copyright (C) 1999, 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2001, 2003, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,7 +32,14 @@ void test01()
// Check for required base class.
typedef istreambuf_iterator<char> test_iterator;
typedef char_traits<char>::off_type off_type;
- typedef iterator<input_iterator_tag, char, off_type, char*, char&> base_iterator;
+
+ typedef iterator<input_iterator_tag, char, off_type, char*,
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ char>
+#else
+ char&>
+#endif
+ base_iterator;
istringstream isstream("this tag");
test_iterator r_it(isstream);
diff --git a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc
new file mode 100644
index 0000000000..88d37bbf7b
--- /dev/null
+++ b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc
@@ -0,0 +1,27 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <iterator>
+
+using namespace std;
+
+// DR 445
+static_assert(is_same<istreambuf_iterator<char>::reference, char>::value, "");
diff --git a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc
new file mode 100644
index 0000000000..8bec8efd2e
--- /dev/null
+++ b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <iterator>
+
+// DR 2061
+void test01()
+{
+ int a[] = { 1, 2, 3, 4 };
+ std::make_move_iterator(a + 4);
+ std::make_move_iterator(a);
+}
diff --git a/libstdc++-v3/testsuite/24_iterators/range_access.cc b/libstdc++-v3/testsuite/24_iterators/range_access.cc
index 3bd1d2e5da..e2e37e34c6 100644
--- a/libstdc++-v3/testsuite/24_iterators/range_access.cc
+++ b/libstdc++-v3/testsuite/24_iterators/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/1.cc
index 92c5adebc7..d73c15427f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/2.cc
index 9a6e3036e2..08d3f59949 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/3.cc
index 5822b783d0..29caf3ae9a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/3.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc b/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
index ebc8d9c54a..612eb48724 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/4.cc
index e3de207f57..885561a2bf 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/4.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
index 5d100e8714..172c2aed2b 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
index e07c4920cd..4781ba1de3 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
index aef55f1a04..ab66f72514 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
index d1beb44574..201e278719 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
index 37eb415352..d8f5dbfc61 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
index 7b36e26f95..62ecf686dd 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
index c378c571fb..655b3242dc 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
index f4d8b8b825..d7871320b0 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
index 016f241ddb..ac50b87de3 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
index ad3aae527d..56a5cdef63 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
index 57405cc80e..211de81293 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
index aaf50064f1..2f697b0b35 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
index ce820bb2c7..85c5db792a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
index c59fdb5b67..8d3411badf 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
index b12e4b8518..75d139b8ff 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
index d6759fab58..21a95a076f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
new file mode 100644
index 0000000000..d6f0630a74
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <algorithm>
+#include <vector>
+#include <sstream>
+#include <iterator>
+#include <testsuite_hooks.h>
+
+// libstdc++/50119
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ vector<int> v;
+ istringstream s("1 2 3 4 5");
+
+ copy_n(istream_iterator<int>(s), 2, back_inserter(v));
+ VERIFY( v.size() == 2 );
+ VERIFY( v[0] == 1 );
+ VERIFY( v[1] == 2 );
+
+ copy_n(istream_iterator<int>(s), 2, back_inserter(v));
+ VERIFY( v.size() == 4 );
+ VERIFY( v[0] == 1 );
+ VERIFY( v[1] == 2 );
+ VERIFY( v[2] == 3 );
+ VERIFY( v[3] == 4 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
index 6c22ba672a..2db2479bd5 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/fill/4.cc b/libstdc++-v3/testsuite/25_algorithms/fill/4.cc
index bf7094e927..838a71720e 100644
--- a/libstdc++-v3/testsuite/25_algorithms/fill/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/fill/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc b/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
index edabe1fcc2..78a3c23122 100644
--- a/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
index 25206629a4..fca18d9161 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
index 695fe46d41..1a4b339d78 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
index 235a633838..8dc5742b3b 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
index 161b2250e7..9251d61177 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/1.cc b/libstdc++-v3/testsuite/25_algorithms/heap/1.cc
index 49d3dee1a8..1683a83f78 100644
--- a/libstdc++-v3/testsuite/25_algorithms/heap/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/heap/1.cc
@@ -8,7 +8,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
index 632d13ef5a..b16667911c 100644
--- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
@@ -24,10 +24,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
index 86eefbee63..562ab466ae 100644
--- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc
index 6509957da9..7d14c295e9 100644
--- a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,10 +19,6 @@
// 25.3.4 [lib.alg.merge]
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
index 954a65dfa6..605fc45ce7 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
index 7c612e659d..e4cc7a0676 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
index 41339b85bf..87efdeff38 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
index 1c3d7aa31d..cb756ca4f8 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/max/1.cc b/libstdc++-v3/testsuite/25_algorithms/max/1.cc
index 978466f1b0..1757b6a49f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/max/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/max/1.cc
@@ -25,13 +25,13 @@ void test01()
{
bool test __attribute__((unused)) = true;
- const int& x = std::max(1, 2);
- const int& y = std::max(4, 3);
+ const int x = std::max(1, 2);
+ const int y = std::max(4, 3);
VERIFY( x == 2 );
VERIFY( y == 4 );
- const int& xc = std::max(1, 2, std::greater<int>());
- const int& yc = std::max(4, 3, std::greater<int>());
+ const int xc = std::max(1, 2, std::greater<int>());
+ const int yc = std::max(4, 3, std::greater<int>());
VERIFY( xc == 1 );
VERIFY( yc == 3 );
}
diff --git a/libstdc++-v3/testsuite/25_algorithms/min/1.cc b/libstdc++-v3/testsuite/25_algorithms/min/1.cc
index 23bc721617..ca52e49724 100644
--- a/libstdc++-v3/testsuite/25_algorithms/min/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/min/1.cc
@@ -25,13 +25,13 @@ void test01()
{
bool test __attribute__((unused)) = true;
- const int& z = std::min(1, 2);
- const int& w = std::min(4, 3);
+ const int z = std::min(1, 2);
+ const int w = std::min(4, 3);
VERIFY( z == 1 );
VERIFY( w == 3 );
- const int& zc = std::min(1, 2, std::greater<int>());
- const int& wc = std::min(4, 3, std::greater<int>());
+ const int zc = std::min(1, 2, std::greater<int>());
+ const int wc = std::min(4, 3, std::greater<int>());
VERIFY( zc == 2 );
VERIFY( wc == 4 );
}
diff --git a/libstdc++-v3/testsuite/25_algorithms/minmax/1.cc b/libstdc++-v3/testsuite/25_algorithms/minmax/1.cc
index 52122415e7..5e581927d6 100644
--- a/libstdc++-v3/testsuite/25_algorithms/minmax/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/minmax/1.cc
@@ -27,15 +27,15 @@ void test01()
{
bool test __attribute__((unused)) = true;
- std::pair<const int&, const int&> z = std::minmax(1, 2);
- std::pair<const int&, const int&> w = std::minmax(4, 3);
+ std::pair<const int, const int> z = std::minmax(1, 2);
+ std::pair<const int, const int> w = std::minmax(4, 3);
VERIFY( z.first == 1 );
VERIFY( z.second == 2 );
VERIFY( w.first == 3 );
VERIFY( w.second == 4 );
- std::pair<const int&, const int&> zc = std::minmax(1, 2, std::greater<int>());
- std::pair<const int&, const int&> wc = std::minmax(4, 3, std::greater<int>());
+ std::pair<const int, const int> zc = std::minmax(1, 2, std::greater<int>());
+ std::pair<const int, const int> wc = std::minmax(4, 3, std::greater<int>());
VERIFY( zc.first == 2 );
VERIFY( zc.second == 1 );
VERIFY( wc.first == 4 );
diff --git a/libstdc++-v3/testsuite/25_algorithms/move/1.cc b/libstdc++-v3/testsuite/25_algorithms/move/1.cc
index b577cfa5d6..65c42d12d6 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
index 0e0debf7ba..a97dfc0111 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc b/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
index 436ccb0312..2112004664 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
index 9a8ba71206..f695a6d720 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc
index a227e13776..1994ddc6ec 100644
--- a/libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,10 +19,6 @@
// 25.3.9 [lib.alg.permutation.generators]
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
@@ -82,8 +78,13 @@ test4()
std::copy(array, array + 6, temp_array);
Container con(temp_array, temp_array + 6);
VERIFY( next_permutation(array, array + 6) );
+
+// XXX FIXME: parallel-mode should deal correctly with moveable-only types
+// per C++0x, at minimum smoothly fall back to serial.
+#ifndef _GLIBCXX_PARALLEL
VERIFY( std::lexicographical_compare(temp_array, temp_array + 6,
array, array + 6) );
+#endif
}
VERIFY( !next_permutation(array,array + 6) );
for(int i = 0; i < 6; ++i)
@@ -106,8 +107,13 @@ test5()
std::copy(array, array + 6, temp_array);
Container con(temp_array, temp_array + 6);
VERIFY( next_permutation(array, array + 6, are_ordered) );
+
+// XXX FIXME: parallel-mode should deal correctly with moveable-only types
+// per C++0x, at minimum smoothly fall back to serial.
+#ifndef _GLIBCXX_PARALLEL
VERIFY( std::lexicographical_compare(temp_array, temp_array + 6,
array, array + 6, are_ordered) );
+#endif
}
VERIFY( !next_permutation(array,array + 6, are_ordered) );
for(int i = 0; i < 6; ++i)
diff --git a/libstdc++-v3/testsuite/25_algorithms/partition/1.cc b/libstdc++-v3/testsuite/25_algorithms/partition/1.cc
index 0ea55ef3d8..bbad940a41 100644
--- a/libstdc++-v3/testsuite/25_algorithms/partition/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/partition/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
index ab57320194..94ef5a980f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
@@ -22,10 +22,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <functional>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
new file mode 100644
index 0000000000..de6b4765b1
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 25.3.6 Heap operations [lib.alg.heap.operations]
+
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <algorithm>
+#include <functional>
+
+void
+test01()
+{
+ int i = 0;
+ std::pop_heap(&i, &i, std::less<int>());
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
new file mode 100644
index 0000000000..e518301149
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
@@ -0,0 +1,37 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 25.3.6 Heap operations [lib.alg.heap.operations]
+
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <algorithm>
+
+void
+test01()
+{
+ int i = 0;
+ std::pop_heap(&i, &i);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc
index 5570239b01..fe3ea2c33a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,10 +19,6 @@
// 25.3.9 [lib.alg.permutation.generators]
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
@@ -82,8 +78,13 @@ test4()
std::copy(array, array + 6, temp_array);
Container con(temp_array, temp_array + 6);
VERIFY( prev_permutation(array, array + 6) );
+
+// XXX FIXME: parallel-mode should deal correctly with moveable-only types
+// per C++0x, at minimum smoothly fall back to serial.
+#ifndef _GLIBCXX_PARALLEL
VERIFY( !std::lexicographical_compare(temp_array, temp_array + 6,
array, array + 6) );
+#endif
}
VERIFY( !prev_permutation(array,array + 6)) ;
for(int i = 0; i < 6; ++i)
@@ -106,8 +107,13 @@ test5()
std::copy(array, array + 6, temp_array);
Container con(temp_array, temp_array + 6);
VERIFY( prev_permutation(array, array + 6, are_ordered) );
+
+// XXX FIXME: parallel-mode should deal correctly with moveable-only types
+// per C++0x, at minimum smoothly fall back to serial.
+#ifndef _GLIBCXX_PARALLEL
VERIFY( !std::lexicographical_compare(temp_array, temp_array + 6,
array, array + 6, are_ordered) );
+#endif
}
VERIFY( !prev_permutation(array,array + 6, are_ordered) );
for(int i = 0; i < 6; ++i)
diff --git a/libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc
index 94ceded741..42aa9971db 100644
--- a/libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -22,10 +22,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
diff --git a/libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc
index bb447d0559..8b2026f7ea 100644
--- a/libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -22,10 +22,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
diff --git a/libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc
index 9a871db5f4..ec6d241ac5 100644
--- a/libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,11 +27,11 @@
using __gnu_test::bidirectional_iterator_wrapper;
-class X
-{
- X();
- X(const X&);
- void operator=(const X&);
+struct X
+{
+ X() = delete;
+ X(const X&) = delete;
+ void operator=(const X&) = delete;
};
void
diff --git a/libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc
index ac9e0b3090..6b6665ae49 100644
--- a/libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -24,10 +24,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
@@ -43,8 +39,6 @@ typedef test_container<rvalstruct, forward_iterator_wrapper> Fcontainer;
typedef test_container<rvalstruct, bidirectional_iterator_wrapper> Bcontainer;
typedef test_container<rvalstruct, random_access_iterator_wrapper> Rcontainer;
-
-
void
test1()
{
diff --git a/libstdc++-v3/testsuite/25_algorithms/sort/35588.cc b/libstdc++-v3/testsuite/25_algorithms/sort/35588.cc
index c16b96dfd7..9dd28a5c4f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/sort/35588.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/sort/35588.cc
@@ -23,9 +23,8 @@
int main()
{
using namespace std;
- using namespace tr1;
using namespace std::tr1::placeholders;
int t[10];
- sort(t, t+10, bind(less<int>(), _1, _2));
+ sort(t, t+10, tr1::bind(less<int>(), _1, _2));
}
diff --git a/libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc b/libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc
index 32cff8fd85..bb61cffbb2 100644
--- a/libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc
@@ -19,10 +19,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
index 7ca9ea4d56..a77e889384 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc
index 81d816d36a..89965fa30f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,7 +31,7 @@ using __gnu_test::destructor;
typedef test_container<copy_tracker, random_access_iterator_wrapper> Container;
const int A[] = {10, 20, 1, 11, 2, 21, 28, 29, 12, 35, 15, 27, 6, 16, 7,
- 25, 17, 8, 23, 18, 9, 19, 24, 30, 13, 4, 14, 22, 26};
+ 25, 17, 8, 23, 18, 9, 19, 24, 30, 13, 4, 14, 22, 26, 0};
bool even(const copy_tracker& ct)
{ return ct.id() < 19; }
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
index fe46463df4..6a98a72ac2 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
@@ -19,10 +19,6 @@
// 25.2.12 [lib.alg.partitions] Partitions.
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <algorithm>
#include <functional>
#include <testsuite_hooks.h>
@@ -39,6 +35,11 @@ const int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
const int B[] = {2, 4, 6, 8, 10, 12, 14, 16, 1, 3, 5, 7, 9, 11, 13, 15, 17};
const int N = sizeof(A) / sizeof(int);
+// Check that starting with a true predicate works too. (PR52822)
+const int A2[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
+const int B2[] = {2, 4, 6, 8, 10, 12, 14, 16, 3, 5, 7, 9, 11, 13, 15, 17};
+const int N2 = sizeof(A2) / sizeof(int);
+
struct Pred
{
bool
@@ -46,7 +47,7 @@ struct Pred
{ return (x.val % 2) == 0; }
};
-// 25.2.12 stable_partition()
+// 25.2.12 stable_partition(), starting with a false predicate.
void
test01()
{
@@ -60,9 +61,24 @@ test01()
VERIFY( std::equal(s1, s1 + N, B) );
}
+// 25.2.12 stable_partition(), starting with a true predicate.
+void
+test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ rvalstruct s1[N2];
+ std::copy(A2, A2 + N2, s1);
+ Container con(s1, s1 + N2);
+
+ std::stable_partition(con.begin(), con.end(), Pred());
+ VERIFY( std::equal(s1, s1 + N2, B2) );
+}
+
int
main()
{
test01();
+ test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
new file mode 100644
index 0000000000..7a3d214e33
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 25.2.12 [lib.alg.partitions] Partitions.
+
+#include <algorithm>
+#include <vector>
+#include <testsuite_hooks.h>
+
+bool true_vector_pred(const std::vector<int>&) { return true; }
+
+void
+test01()
+{
+ std::vector<std::vector<int> > v(1);
+ v[0].push_back(7);
+ VERIFY( v[0].size() == 1 );
+ std::stable_partition(v.begin(), v.end(), &true_vector_pred);
+ VERIFY( v[0].size() == 1 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc b/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
index 78c14b43ec..8b36f7a331 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,7 +31,7 @@ using __gnu_test::destructor;
typedef test_container<copy_tracker, random_access_iterator_wrapper> Container;
const int A[] = {10, 20, 1, 11, 2, 21, 28, 29, 12, 35, 15, 27, 6, 16, 7,
- 25, 17, 8, 23, 18, 9, 19, 24, 30, 13, 4, 14, 22, 26};
+ 25, 17, 8, 23, 18, 9, 19, 24, 30, 13, 4, 14, 22, 26, 0};
void
test_mem1(int throw_count)
diff --git a/libstdc++-v3/testsuite/25_algorithms/swap/noexcept.cc b/libstdc++-v3/testsuite/25_algorithms/swap/noexcept.cc
new file mode 100644
index 0000000000..4d8c87aaed
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/swap/noexcept.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+
+static_assert(noexcept(std::swap(std::declval<int&>(),
+ std::declval<int&>())), "Error");
+static_assert(noexcept(std::swap(std::declval<int(&)[5]>(),
+ std::declval<int(&)[5]>())), "Error");
diff --git a/libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc
index 5377ea838f..78750f29b4 100644
--- a/libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,11 +27,11 @@
using __gnu_test::forward_iterator_wrapper;
-class X
+struct X
{
- X();
- X(const X&);
- void operator=(const X&);
+ X() = delete;
+ X(const X&) = delete;
+ void operator=(const X&) = delete;
};
void
diff --git a/libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc
index fd6da1168e..75e1eb5258 100644
--- a/libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -22,10 +22,6 @@
#undef _GLIBCXX_CONCEPT_CHECKS
-// XXX FIXME: parallel-mode should deal correctly with moveable-only types
-// per C++0x, at minimum smoothly fall back to serial.
-#undef _GLIBCXX_PARALLEL
-
#include <vector>
#include <algorithm>
#include <functional>
diff --git a/libstdc++-v3/testsuite/26_numerics/cmath/51083.cc b/libstdc++-v3/testsuite/26_numerics/cmath/51083.cc
new file mode 100644
index 0000000000..8ba9b10e5d
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/cmath/51083.cc
@@ -0,0 +1,62 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <cmath>
+
+namespace a
+{
+ template<typename> class Mat { };
+
+ template<typename T> struct Mat2 : Mat<T> { };
+
+ template<typename T>
+ int fdim(Mat<T>) { return 1; }
+
+ template<typename T, typename U>
+ int floor(Mat<T>, U) { return 1; }
+ template<typename T, typename U>
+ int floor(T, Mat<U>) { return 1; }
+
+ template<typename T, typename U, typename V>
+ int fma(Mat<T>, U, V) { return 1; }
+ template<typename T, typename U, typename V>
+ int fma(T, Mat<U>, V) { return 1; }
+ template<typename T, typename U, typename V>
+ int fma(T, U, Mat<V>) { return 1; }
+}
+
+int main()
+{
+ int __attribute__((unused)) i;
+
+ using namespace std;
+
+ a::Mat2<double> c;
+ i = fdim(c);
+ i = floor(c, 0.);
+ i = floor(0., c);
+ i = floor(c, 1);
+ i = floor(1, c);
+ i = fma(c, 0., 1.);
+ i = fma(0., c, 1.);
+ i = fma(0., 1., c);
+ i = fma(c, 0., 1);
+ i = fma(0., c, 1);
+ i = fma(0., 1, c);
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/50880.cc b/libstdc++-v3/testsuite/26_numerics/complex/50880.cc
new file mode 100644
index 0000000000..2b70a99ddc
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/complex/50880.cc
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <complex>
+#include <testsuite_hooks.h>
+
+template<typename T>
+ void test01_do()
+ {
+ bool test __attribute__((unused)) = true;
+
+ const std::complex<T> ca(T(-2), T(2));
+ const std::complex<T> cb(T(-2), T(0));
+ const std::complex<T> cc(T(-2), T(-2));
+
+ std::complex<T> cra = std::acosh(ca);
+ std::complex<T> crb = std::acosh(cb);
+ std::complex<T> crc = std::acosh(cc);
+
+ VERIFY( cra.real() > T(0) );
+ VERIFY( crb.real() > T(0) );
+ VERIFY( crc.real() > T(0) );
+ }
+
+// libstdc++/50880
+void test01()
+{
+ test01_do<float>();
+ test01_do<double>();
+ test01_do<long double>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/51083.cc b/libstdc++-v3/testsuite/26_numerics/complex/51083.cc
new file mode 100644
index 0000000000..54e781ba1a
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/complex/51083.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <complex>
+
+namespace a
+{
+ template<typename> class Mat { };
+
+ template<typename T> struct Mat2 : Mat<T> { };
+
+ template<typename T> int arg(Mat<T>) { return 1; }
+ template<typename T> int conj(Mat<T>) { return 1; }
+ template<typename T> int imag(Mat<T>) { return 1; }
+ template<typename T> int norm(Mat<T>) { return 1; }
+ template<typename T> int proj(Mat<T>) { return 1; }
+ template<typename T> int real(Mat<T>) { return 1; }
+
+ template<typename T, typename U> int pow(Mat<T>, U) { return 1; }
+ template<typename T, typename U> int pow(T, Mat<U>) { return 1; }
+}
+
+int main()
+{
+ int __attribute__((unused)) i;
+
+ using namespace std;
+
+ a::Mat2< std::complex<double> > c;
+ i = arg(c);
+ i = conj(c);
+ i = imag(c);
+ i = norm(c);
+ i = proj(c);
+ i = real(c);
+ i = pow(std::complex<float>(), c);
+ i = pow(c, std::complex<float>());
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/cons/48760_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/complex/cons/48760_c++0x.cc
new file mode 100644
index 0000000000..3500dbaaf1
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/complex/cons/48760_c++0x.cc
@@ -0,0 +1,59 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-c-std "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <complex>
+#include <limits>
+#include <testsuite_hooks.h>
+
+template<typename T>
+ void do_test01()
+ {
+ bool test __attribute__((unused)) = true;
+
+ if (std::numeric_limits<T>::has_quiet_NaN)
+ {
+ std::complex<T> c1(T(0), std::numeric_limits<T>::quiet_NaN());
+ VERIFY( c1.real() == T(0) );
+ VERIFY( std::isnan(c1.imag()) );
+
+ std::complex<T> c2(std::numeric_limits<T>::quiet_NaN(), T(0));
+ VERIFY( std::isnan(c2.real()) );
+ VERIFY( c2.imag() == T(0) );
+
+ std::complex<T> c3(std::numeric_limits<T>::quiet_NaN(),
+ std::numeric_limits<T>::quiet_NaN());
+ VERIFY( std::isnan(c3.real()) );
+ VERIFY( std::isnan(c3.imag()) );
+ }
+ }
+
+// libstdc++/48760
+void test01()
+{
+ do_test01<float>();
+ do_test01<double>();
+ do_test01<long double>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
index 29e8dac5fa..2f1226f3e1 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <ccomplex>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
index 3a19106920..36e19d05af 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <cfenv>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/53503.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/53503.cc
new file mode 100644
index 0000000000..b55dcb0c4a
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/53503.cc
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++11 -fno-trapping-math" }
+// { dg-do compile }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <cmath>
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc
new file mode 100644
index 0000000000..0433ee3f81
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc
@@ -0,0 +1,62 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cmath "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <cmath>
+
+// libstdc++/48933
+
+struct Foo { };
+
+template Foo std::atan2<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::acosh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::asinh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::atanh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::cbrt<Foo>(Foo); // { dg-error "not match" }
+template Foo std::copysign<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::erf<Foo>(Foo); // { dg-error "not match" }
+template Foo std::erfc<Foo>(Foo); // { dg-error "not match" }
+template Foo std::exp2<Foo>(Foo); // { dg-error "not match" }
+template Foo std::expm1<Foo>(Foo); // { dg-error "not match" }
+template Foo std::fdim<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::fma<Foo, Foo, Foo>(Foo(), Foo(), Foo()); // { dg-error "not match" }
+template Foo std::fmax<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::fmin<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::hypot<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template int std::ilogb<Foo>(Foo); // { dg-error "not match" }
+template Foo std::lgamma<Foo>(Foo); // { dg-error "not match" }
+template long long std::llrint<Foo>(Foo); // { dg-error "not match" }
+template long long std::llround<Foo>(Foo); // { dg-error "not match" }
+template Foo std::log1p<Foo>(Foo); // { dg-error "not match" }
+template Foo std::log2<Foo>(Foo); // { dg-error "not match" }
+template Foo std::logb<Foo>(Foo); // { dg-error "not match" }
+template long std::lrint<Foo>(Foo); // { dg-error "not match" }
+template long std::lround<Foo>(Foo); // { dg-error "not match" }
+template Foo std::nearbyint<Foo>(Foo); // { dg-error "not match" }
+template Foo std::nextafter<Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::nexttoward<Foo>(Foo, long double); // { dg-error "not match" }
+template Foo std::remainder<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::remquo<Foo>(Foo, Foo, int*); // { dg-error "not match" }
+template Foo std::rint<Foo>(Foo); // { dg-error "not match" }
+template Foo std::round<Foo>(Foo); // { dg-error "not match" }
+template Foo std::scalbln<Foo>(Foo, long); // { dg-error "not match" }
+template Foo std::scalbn<Foo>(Foo, int); // { dg-error "not match" }
+template Foo std::tgamma<Foo>(Foo); // { dg-error "not match" }
+template Foo std::trunc<Foo>(Foo); // { dg-error "not match" }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc b/libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc
index 4d885930b4..ecdbee0d1c 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc
@@ -44,15 +44,20 @@ namespace std {
template<class T> complex<T> operator/(const T&, const complex<T>&);
template<class T> complex<T> operator+(const complex<T>&);
template<class T> complex<T> operator-(const complex<T>&);
- template<class T> bool operator==
+ template<class T> _GLIBCXX_CONSTEXPR bool operator==
(const complex<T>&, const complex<T>&);
- template<class T> bool operator==(const complex<T>&, const T&);
- template<class T> bool operator==(const T&, const complex<T>&);
+ template<class T> _GLIBCXX_CONSTEXPR bool operator==
+ (const complex<T>&, const T&);
+ template<class T> _GLIBCXX_CONSTEXPR bool operator==
+ (const T&, const complex<T>&);
- template<class T> bool operator!=(const complex<T>&, const complex<T>&);
- template<class T> bool operator!=(const complex<T>&, const T&);
- template<class T> bool operator!=(const T&, const complex<T>&);
+ template<class T> _GLIBCXX_CONSTEXPR bool operator!=
+ (const complex<T>&, const complex<T>&);
+ template<class T> _GLIBCXX_CONSTEXPR bool operator!=
+ (const complex<T>&, const T&);
+ template<class T> _GLIBCXX_CONSTEXPR bool operator!=
+ (const T&, const complex<T>&);
template<class T, class charT, class traits>
basic_istream<charT, traits>&
operator>>(basic_istream<charT, traits>&, complex<T>&);
@@ -61,8 +66,8 @@ namespace std {
operator<<(basic_ostream<charT, traits>&, const complex<T>&);
// 26.2.7 values:
- template<class T> T real(const complex<T>&);
- template<class T> T imag(const complex<T>&);
+ template<class T> _GLIBCXX_CONSTEXPR T real(const complex<T>&);
+ template<class T> _GLIBCXX_CONSTEXPR T imag(const complex<T>&);
template<class T> T abs(const complex<T>&);
template<class T> T arg(const complex<T>&);
template<class T> T norm(const complex<T>&);
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
index 23b266e856..b8238df959 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <ctgmath>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
index 1f83cdac69..467caa0736 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <random>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/values.cc
new file mode 100644
index 0000000000..513b5a6bde
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/values.cc
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.2.1 Class template bernoulli_distribution [rand.dist.bern.bernoulli]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::bernoulli_distribution bd1(0.25);
+ auto bbd1 = std::bind(bd1, eng);
+ testDiscreteDist(bbd1, [](int n) { return bernoulli_pdf(n, 0.25); } );
+
+ std::bernoulli_distribution bd2(0.5);
+ auto bbd2 = std::bind(bd2, eng);
+ testDiscreteDist(bbd2, [](int n) { return bernoulli_pdf(n, 0.5); } );
+
+ std::bernoulli_distribution bd3(0.75);
+ auto bbd3 = std::bind(bd3, eng);
+ testDiscreteDist(bbd3, [](int n) { return bernoulli_pdf(n, 0.75); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc
index adea635e96..71cffdbb9b 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::bernoulli_distribution test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc
new file mode 100644
index 0000000000..9fa8f033df
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-cmath "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.2.2 Class template binomial_distribution [rand.dist.bern.bin]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::binomial_distribution<> bd1(5, 0.3);
+ auto bbd1 = std::bind(bd1, eng);
+ testDiscreteDist(bbd1, [](int n) { return binomial_pdf(n, 5, 0.3); } );
+
+ std::binomial_distribution<> bd2(55, 0.3);
+ auto bbd2 = std::bind(bd2, eng);
+ testDiscreteDist(bbd2, [](int n) { return binomial_pdf(n, 55, 0.3); } );
+
+ // libstdc++/48114
+ std::binomial_distribution<> bd3(10, 0.75);
+ auto bbd3 = std::bind(bd3, eng);
+ testDiscreteDist(bbd3, [](int n) { return binomial_pdf(n, 10, 0.75); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..9bdad10a9a
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::binomial_distribution<int>;
+template class std::binomial_distribution<long>;
+template class std::binomial_distribution<unsigned int>;
+template class std::binomial_distribution<unsigned long>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc
index e60fac13c7..1f14321c6e 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::binomial_distribution<int> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..ad33135e78
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::cauchy_distribution<float>;
+template class std::cauchy_distribution<double>;
+template class std::cauchy_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc
index 3d80d2ddf0..933fcde929 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::cauchy_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..626d538b26
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::chi_squared_distribution<float>;
+template class std::chi_squared_distribution<double>;
+template class std::chi_squared_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc
index 271e0fe451..d4720328ee 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::chi_squared_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc
new file mode 100644
index 0000000000..c655b26206
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+#include <testsuite_hooks.h>
+
+int f(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::ranlux24(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+int g(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::ranlux24();
+ rnd.seed(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int f1 = f(0);
+ const int f2 = f(0);
+
+ const int g1 = g(0);
+ const int g2 = g(0);
+
+ VERIFY( f1 == f2 );
+ VERIFY( g1 == g2 );
+ VERIFY( f1 == g1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc
index 7aec649c03..4249d975a8 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc
@@ -3,7 +3,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,6 +46,20 @@ test01()
str >> v;
VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
+
+ str.clear();
+ str << v;
+
+ u();
+ u();
+ u();
+
+ str >> u;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc
new file mode 100644
index 0000000000..171087554d
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.6.1 Class template discrete_distribution [rand.dist.samp.discrete]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::discrete_distribution<> dd1({ });
+ auto bdd1 = std::bind(dd1, eng);
+ testDiscreteDist(bdd1, [](int n) { return discrete_pdf(n, { }); } );
+
+ std::discrete_distribution<> dd2({ 1.0, 3.0, 2.0});
+ auto bdd2 = std::bind(dd2, eng);
+ testDiscreteDist(bdd2, [](int n)
+ { return discrete_pdf(n, { 1.0, 3.0, 2.0}); } );
+
+ std::discrete_distribution<> dd3({ 2.0, 2.0, 1.0, 0.0, 4.0});
+ auto bdd3 = std::bind(dd3, eng);
+ testDiscreteDist(bdd3, [](int n)
+ { return discrete_pdf(n, { 2.0, 2.0, 1.0, 0.0, 4.0}); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..2041218cb5
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::discrete_distribution<int>;
+template class std::discrete_distribution<long>;
+template class std::discrete_distribution<unsigned int>;
+template class std::discrete_distribution<unsigned long>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc
index 7c5977b380..ef4739badd 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::discrete_distribution<> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..5addabcc3f
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::exponential_distribution<float>;
+template class std::exponential_distribution<double>;
+template class std::exponential_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc
index 7c696e2524..a2357b5a4f 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::exponential_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..02125e920f
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::extreme_value_distribution<float>;
+template class std::extreme_value_distribution<double>;
+template class std::extreme_value_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc
index 8f5d99da49..28fe4063f2 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::extreme_value_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..f6c62e9076
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::fisher_f_distribution<float>;
+template class std::fisher_f_distribution<double>;
+template class std::fisher_f_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc
index a92727d706..0a9b2be479 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::fisher_f_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..c6ad617f67
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::gamma_distribution<float>;
+template class std::gamma_distribution<double>;
+template class std::gamma_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc
index a1d15575e9..35b4976262 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::gamma_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/values.cc
new file mode 100644
index 0000000000..f6eaaf6bd1
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/values.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.2.3 Class template geometric_distribution [rand.dist.bern.geom]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::geometric_distribution<> gd1(0.5);
+ auto bgd1 = std::bind(gd1, eng);
+ testDiscreteDist(bgd1, [](int n) { return geometric_pdf(n, 0.5); } );
+
+ std::geometric_distribution<> gd2(0.75);
+ auto bgd2 = std::bind(gd2, eng);
+ testDiscreteDist(bgd2, [](int n) { return geometric_pdf(n, 0.75); } );
+
+ // libstdc++/48114
+ std::geometric_distribution<> gd3(0.25);
+ auto bgd3 = std::bind(gd3, eng);
+ testDiscreteDist(bgd3, [](int n) { return geometric_pdf(n, 0.25); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..7a8e31d987
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::geometric_distribution<int>;
+template class std::geometric_distribution<long>;
+template class std::geometric_distribution<unsigned int>;
+template class std::geometric_distribution<unsigned long>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc
index cc03ebf0dd..6e2a4205c5 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::geometric_distribution<int> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc b/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc
new file mode 100644
index 0000000000..4b502b7d7c
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+#include <testsuite_hooks.h>
+
+int f(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::independent_bits_engine<std::mt19937, 9,
+ std::uint_fast32_t>(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+int g(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::independent_bits_engine<std::mt19937, 9,
+ std::uint_fast32_t>();
+ rnd.seed(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int f1 = f(0);
+ const int f2 = f(0);
+
+ const int g1 = g(0);
+ const int g2 = g(0);
+
+ VERIFY( f1 == f2 );
+ VERIFY( g1 == g2 );
+ VERIFY( f1 == g1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc
index 332931addf..32a5157608 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc
@@ -3,7 +3,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -44,6 +44,20 @@ test01()
str >> v;
VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
+
+ str.clear();
+ str << v;
+
+ u();
+ u();
+ u();
+
+ str >> u;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc
new file mode 100644
index 0000000000..21333fba97
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+#include <testsuite_hooks.h>
+
+int f(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::minstd_rand(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+int g(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::minstd_rand();
+ rnd.seed(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int f1 = f(0);
+ const int f2 = f(0);
+
+ const int g1 = g(0);
+ const int g2 = g(0);
+
+ VERIFY( f1 == f2 );
+ VERIFY( g1 == g2 );
+ VERIFY( f1 == g1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc
index 8b67e5f3a3..a83b22ef65 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc
@@ -3,7 +3,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,15 +33,29 @@ test01()
bool test __attribute__((unused)) = true;
std::stringstream str;
- std::minstd_rand0 a;
- std::minstd_rand0 b;
+ std::minstd_rand0 u;
+ std::minstd_rand0 v;
- a(); // advance
- str << a;
- VERIFY( !(a == b) );
+ u(); // advance
+ str << u;
+ VERIFY( !(u == v) );
- str >> b;
- VERIFY( a == b );
+ str >> v;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
+
+ str.clear();
+ str << v;
+
+ u();
+ u();
+ u();
+
+ str >> u;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..20ba45838b
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::lognormal_distribution<float>;
+template class std::lognormal_distribution<double>;
+template class std::lognormal_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc
index 2e3ade699c..4122877674 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::lognormal_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc
new file mode 100644
index 0000000000..3453d9f727
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+#include <testsuite_hooks.h>
+
+int f(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::mt19937(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+int g(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::mt19937();
+ rnd.seed(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int f1 = f(0);
+ const int f2 = f(0);
+
+ const int g1 = g(0);
+ const int g2 = g(0);
+
+ VERIFY( f1 == f2 );
+ VERIFY( g1 == g2 );
+ VERIFY( f1 == g1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc
index 03fb8b04fa..7c90e3d390 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc
@@ -3,7 +3,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -47,6 +47,20 @@ test01()
str >> v;
VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
+
+ str.clear();
+ str << v;
+
+ u();
+ u();
+ u();
+
+ str >> u;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc
new file mode 100644
index 0000000000..fb5194aebc
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc
@@ -0,0 +1,55 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-cmath "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.3.4 Class template negative_binomial_distribution
+// [rand.dist.bern.negbin]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::negative_binomial_distribution<> nbd1(5, 0.3);
+ auto bnbd1 = std::bind(nbd1, eng);
+ testDiscreteDist(bnbd1, [](int n)
+ { return negative_binomial_pdf(n, 5, 0.3); } );
+
+ std::negative_binomial_distribution<> nbd2(55, 0.3);
+ auto bnbd2 = std::bind(nbd2, eng);
+ testDiscreteDist(bnbd2, [](int n)
+ { return negative_binomial_pdf(n, 55, 0.3); } );
+
+ std::negative_binomial_distribution<> nbd3(10, 0.75);
+ auto bnbd3 = std::bind(nbd3, eng);
+ testDiscreteDist(bnbd3, [](int n)
+ { return negative_binomial_pdf(n, 10, 0.75); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..36f4873500
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::negative_binomial_distribution<int>;
+template class std::negative_binomial_distribution<long>;
+template class std::negative_binomial_distribution<unsigned int>;
+template class std::negative_binomial_distribution<unsigned long>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc
index 5b30fda671..2097da2bf8 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::negative_binomial_distribution<int> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..9fe18ba614
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::normal_distribution<float>;
+template class std::normal_distribution<double>;
+template class std::normal_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc
index 471379d552..f0c04791ce 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::normal_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..e2a04d771b
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::piecewise_constant_distribution<float>;
+template class std::piecewise_constant_distribution<double>;
+template class std::piecewise_constant_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
index c0d458ef6a..633cd540c3 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::piecewise_constant_distribution<> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..d3b52a3ebf
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::piecewise_linear_distribution<float>;
+template class std::piecewise_linear_distribution<double>;
+template class std::piecewise_linear_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc
index cb1d016dce..1a4f5f66f1 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::piecewise_linear_distribution<> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/values.cc
new file mode 100644
index 0000000000..adfe9b7528
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/values.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-cmath "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.4.1 Class template poisson_distribution [rand.dist.pois.poisson]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::poisson_distribution<> pd1(3.0);
+ auto bpd1 = std::bind(pd1, eng);
+ testDiscreteDist(bpd1, [](int n) { return poisson_pdf(n, 3.0); } );
+
+ std::poisson_distribution<> pd2(15.0);
+ auto bpd2 = std::bind(pd2, eng);
+ testDiscreteDist(bpd2, [](int n) { return poisson_pdf(n, 15.0); } );
+
+ std::poisson_distribution<> pd3(30.0);
+ auto bpd3 = std::bind(pd3, eng);
+ testDiscreteDist(bpd3, [](int n) { return poisson_pdf(n, 30.0); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..2f762a27a9
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::poisson_distribution<int>;
+template class std::poisson_distribution<long>;
+template class std::poisson_distribution<unsigned int>;
+template class std::poisson_distribution<unsigned long>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc
index d6a600293d..2fcf598054 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::poisson_distribution<int> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc
new file mode 100644
index 0000000000..d7db635d8e
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+#include <testsuite_hooks.h>
+
+int f(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::knuth_b(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+int g(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::knuth_b();
+ rnd.seed(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int f1 = f(0);
+ const int f2 = f(0);
+
+ const int g1 = g(0);
+ const int g2 = g(0);
+
+ VERIFY( f1 == f2 );
+ VERIFY( g1 == g2 );
+ VERIFY( f1 == g1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc
index 578e495937..c7b15d1ba1 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc
@@ -3,7 +3,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,6 +46,20 @@ test01()
str >> v;
VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
+
+ str.clear();
+ str << v;
+
+ u();
+ u();
+ u();
+
+ str >> u;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..a11280b835
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::student_t_distribution<float>;
+template class std::student_t_distribution<double>;
+template class std::student_t_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc
index e090b35420..6ee131f5ba 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::student_t_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc
new file mode 100644
index 0000000000..4927d77166
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+#include <testsuite_hooks.h>
+
+int f(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::ranlux24_base(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+int g(int x)
+{
+ std::seed_seq sq(&x, &x + 1);
+ auto rnd = std::ranlux24_base();
+ rnd.seed(sq);
+ return std::uniform_int_distribution<int>()(rnd);
+}
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const int f1 = f(0);
+ const int f2 = f(0);
+
+ const int g1 = g(0);
+ const int g2 = g(0);
+
+ VERIFY( f1 == f2 );
+ VERIFY( g1 == g2 );
+ VERIFY( f1 == g1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc
index e4129fc8df..1e2e53ac59 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc
@@ -3,7 +3,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -43,6 +43,20 @@ test01()
str >> v;
VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
+
+ str.clear();
+ str << v;
+
+ u();
+ u();
+ u();
+
+ str >> u;
+ VERIFY( u == v );
+ for (unsigned i = 0; i < 1000; ++i)
+ VERIFY( u() == v() );
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/values.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/values.cc
new file mode 100644
index 0000000000..8cb99a1a55
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/values.cc
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.5.8.2.1 Class template uniform_int_distribution [rand.dist.uni.int]
+
+#include <random>
+#include <functional>
+#include <testsuite_random.h>
+
+void test01()
+{
+ using namespace __gnu_test;
+
+ std::mt19937 eng;
+
+ std::uniform_int_distribution<> uid1(0, 2);
+ auto buid1 = std::bind(uid1, eng);
+ testDiscreteDist(buid1, [](int n) { return uniform_int_pdf(n, 0, 2); } );
+
+ std::uniform_int_distribution<> uid2(3, 7);
+ auto buid2 = std::bind(uid2, eng);
+ testDiscreteDist(buid2, [](int n) { return uniform_int_pdf(n, 3, 7); } );
+
+ std::uniform_int_distribution<> uid3(1, 20);
+ auto buid3 = std::bind(uid3, eng);
+ testDiscreteDist(buid3, [](int n) { return uniform_int_pdf(n, 1, 20); } );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..b985118636
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::uniform_int_distribution<int>;
+template class std::uniform_int_distribution<long>;
+template class std::uniform_int_distribution<unsigned int>;
+template class std::uniform_int_distribution<unsigned long>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc
index 3d584b525c..fb4075954b 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::uniform_int_distribution<int> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..011fa34a49
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::uniform_real_distribution<float>;
+template class std::uniform_real_distribution<double>;
+template class std::uniform_real_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc
index c14182f723..147bd0da7d 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::uniform_real_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/explicit_instantiation/1.cc
new file mode 100644
index 0000000000..8e268ef80b
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/explicit_instantiation/1.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+// { dg-require-cstdint "" }
+//
+// Copyright (C) 2012 Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <random>
+
+template class std::weibull_distribution<float>;
+template class std::weibull_distribution<double>;
+template class std::weibull_distribution<long double>;
diff --git a/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc
index 5c8d8e0769..05cc31f507 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc
@@ -4,7 +4,7 @@
//
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,4 +32,5 @@ test01()
typedef std::weibull_distribution<double> test_type;
typedef test_type::result_type result_type;
+ typedef test_type::param_type param_type;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc b/libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
new file mode 100644
index 0000000000..4f145dba20
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <valarray>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::valarray<int> a(1, 1), b(-1, 2);
+ b = std::move(a);
+ VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
+
+ std::valarray<int> c(std::move(b));
+ VERIFY( c.size() == 1 && c[0] == 1 );
+ VERIFY( b.size() == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/noexcept_move_construct.cc b/libstdc++-v3/testsuite/26_numerics/valarray/noexcept_move_construct.cc
new file mode 100644
index 0000000000..3d7fdc382e
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-14 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <valarray>
+
+typedef std::valarray<int> vtype;
+
+static_assert(std::is_nothrow_move_constructible<vtype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
index be08d0298d..10f67dac86 100644
--- a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/swap.cc b/libstdc++-v3/testsuite/26_numerics/valarray/swap.cc
new file mode 100644
index 0000000000..03f6f01ab6
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/swap.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <valarray>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::valarray<int> a(1, 1), b(-1, 2);
+ b.swap(a);
+ VERIFY( b.size() == 1 && b[0] == 1
+ && a.size() == 2 && a[0] == -1 && a[1] == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
index c770313224..1d82413596 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
@@ -20,6 +20,7 @@
// { dg-do run { xfail arm*-*-elf arm*-*-eabi } }
// { dg-require-binary-io "" }
+// { dg-require-fileio "" }
// 27.6.1.3 unformatted input functions
// @require@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
index 2aa7260e79..7781d89d3a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-fileio "" }
+
// 27.6.1.3 unformatted input functions
// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
// @require@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc
index 798b7fe6f3..6c293775a3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-fileio "" }
+
// 27.6.1.3 unformatted input functions
// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
// @require@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc
index 9878e47724..aacf367d67 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-fileio "" }
+
// 27.6.1.3 unformatted input functions
// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
// @require@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
index e37cec8f6e..a9f49974d7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-fileio "" }
+
// 27.6.2.4 basic_ostream seek members [lib.ostream.seeks]
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc
index 65affb91e8..42dfb37ff7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-fileio "" }
+
// 27.6.2.4 basic_ostream seek members
#include <ostream>
diff --git a/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc b/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
index 21da0770b9..0285417ab1 100644
--- a/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <cinttypes>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
index 4bbe5b1192..488e393d2a 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
@@ -18,21 +18,18 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <ios>
// Library defect report
//50. Copy constructor and assignment operator of ios_base
-class test_base : public std::ios_base { };
+class test_base : public std::ios_base { }; // { dg-error "within this context|deleted" }
void test01()
{
// assign
test_base io1;
test_base io2;
- io1 = io2;
+ io1 = io2; // { dg-error "synthesized|deleted" }
}
-// { dg-error "synthesized" "" { target *-*-* } 33 }
-// { dg-error "within this context" "" { target *-*-* } 26 }
-// { dg-error "is private" "" { target *-*-* } 791 }
-// { dg-error "operator=" "" { target *-*-* } 0 }
+
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
index 6f453736e8..22caadc649 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
@@ -18,21 +18,18 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <ios>
// Library defect report
//50. Copy constructor and assignment operator of ios_base
-struct test_base : public std::ios_base
+struct test_base : public std::ios_base // { dg-error "within this context|deleted" }
{ };
void test02()
{
// copy ctor
test_base io1;
- test_base io2 = io1;
+ test_base io2 = io1; // { dg-error "synthesized|deleted" }
}
-// { dg-error "within this context" "" { target *-*-* } 26 }
-// { dg-error "synthesized" "" { target *-*-* } 33 }
-// { dg-error "is private" "" { target *-*-* } 788 }
-// { dg-error "copy constructor" "" { target *-*-* } 0 }
+
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/51288.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/51288.cc
new file mode 100644
index 0000000000..281a2e2d39
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/51288.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-namedlocale "en_US.UTF-8" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/51288
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::locale loc_us = std::locale("en_US.UTF-8");
+
+ std::istringstream iss;
+ iss.imbue(loc_us);
+
+ iss.str(" $1.23");
+
+ std::string str;
+ iss >> std::get_money(str);
+
+ VERIFY( str == "123" );
+ VERIFY( iss.eof() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc
new file mode 100644
index 0000000000..2ec02302c3
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-namedlocale "en_US.UTF-8" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/51288
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::locale loc_us = std::locale("en_US.UTF-8");
+
+ std::wistringstream iss;
+ iss.imbue(loc_us);
+
+ iss.str(L" $1.23");
+
+ std::wstring str;
+ iss >> std::get_money(str);
+
+ VERIFY( str == L"123" );
+ VERIFY( iss.eof() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/51288.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/51288.cc
new file mode 100644
index 0000000000..d2cc9cb701
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/51288.cc
@@ -0,0 +1,49 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-namedlocale "en_US.UTF-8" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/51288
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::locale loc_us = std::locale("en_US.UTF-8");
+
+ std::ostringstream oss;
+ oss.imbue(loc_us);
+
+ const std::string str("123");
+
+ oss.setstate(std::ios_base::failbit);
+
+ oss << std::put_money(str);
+
+ VERIFY( oss.str().empty() );
+ VERIFY( oss.fail() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc
new file mode 100644
index 0000000000..548c0a7c2b
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc
@@ -0,0 +1,49 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-namedlocale "en_US.UTF-8" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/51288
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::locale loc_us = std::locale("en_US.UTF-8");
+
+ std::wostringstream oss;
+ oss.imbue(loc_us);
+
+ const std::wstring str(L"123");
+
+ oss.setstate(std::ios_base::failbit);
+
+ oss << std::put_money(str);
+
+ VERIFY( oss.str().empty() );
+ VERIFY( oss.fail() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc
new file mode 100644
index 0000000000..5532713cea
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <regex>
+#include <string>
+
+// libstdc++/51711
+void test01()
+{
+ std::string toProcess("Bug\r\n");
+ std::string result __attribute__((unused))
+ = std::regex_replace(toProcess, std::regex("\\r"), std::string("\\r"));
+}
diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc
new file mode 100644
index 0000000000..66b74e4586
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <regex>
+#include <string>
+
+// libstdc++/51711
+void test01()
+{
+ std::wstring toProcess(L"Bug\r\n");
+ std::wstring result __attribute__((unused))
+ = std::regex_replace(toProcess, std::wregex(L"\\r"), std::wstring(L"\\r"));
+}
diff --git a/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
index 21a98b8ae6..b5289f802b 100644
--- a/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <regex>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
index 4c897d7a4a..bdf7d984c6 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
@@ -2,7 +2,7 @@
// 2009-06-10 Stephen M. Webb <stephen.webb@bregmasoft.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,18 +29,18 @@ void test01()
{
bool test __attribute__((unused)) = true;
- std::cmatch cm;
+ std::cmatch cm;
VERIFY( cm.size() == 0 );
- VERIFY( cm.str() == std::cmatch::string_type() );
+ VERIFY( !cm.ready() );
}
void test02()
{
bool test __attribute__((unused)) = true;
- std::smatch sm;
+ std::smatch sm;
VERIFY( sm.size() == 0 );
- VERIFY( sm.str() == std::smatch::string_type() );
+ VERIFY( !sm.ready() );
}
int
@@ -49,4 +49,4 @@ main()
test01();
test02();
return 0;
-};
+}
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
index f8b3d45e86..f797cab274 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
@@ -2,7 +2,7 @@
// 2009-06-05 Stephen M. Webb <stephen.webb@bregmasoft.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,18 +29,18 @@ void test01()
{
bool test __attribute__((unused)) = true;
- std::wcmatch cm;
+ std::wcmatch cm;
VERIFY( cm.size() == 0 );
- VERIFY( cm.str() == std::wcmatch::string_type() );
+ VERIFY( !cm.ready() );
}
void test02()
{
bool test __attribute__((unused)) = true;
- std::wsmatch sm;
+ std::wsmatch sm;
VERIFY( sm.size() == 0 );
- VERIFY( sm.str() == std::wsmatch::string_type() );
+ VERIFY( !sm.ready() );
}
int
@@ -49,4 +49,4 @@ main()
test01();
test02();
return 0;
-};
+}
diff --git a/libstdc++-v3/testsuite/28_regex/range_access.cc b/libstdc++-v3/testsuite/28_regex/range_access.cc
index 0bd620f0bd..b913bc47c0 100644
--- a/libstdc++-v3/testsuite/28_regex/range_access.cc
+++ b/libstdc++-v3/testsuite/28_regex/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
new file mode 100644
index 0000000000..569df4a665
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+
+enum class tacos : int
+{
+ cancun = 4,
+ el_loco = 5,
+ sabor = 6,
+ papalote = 9,
+ licious = 44,
+ jarritos = 55
+};
+
+// should minimally compile and link
+int main()
+{
+ std::atomic<float> af(0.0f);
+ float non_af = af;
+
+ std::atomic<tacos> ae(tacos::sabor);
+ tacos non_ae = ae;
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
index 68b64f020c..b2f3f3418b 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
@@ -28,5 +28,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 572 }
+// { dg-error "deleted" "" { target *-*-* } 616 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
index 79182bba34..fd506e1b3d 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
@@ -28,5 +28,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 611 }
+// { dg-error "deleted" "" { target *-*-* } 655 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
index 4ace9f0cd6..ba6c1c244b 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
-// { dg-do link { xfail *-*-* } }
+// { dg-do link }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ struct dwordp
void atomics()
{
std::atomic<dwordp> a;
- bool b = a.is_lock_free(); // { dg-excess-errors "undefined reference to" }
+ bool b __attribute__((unused)) = a.is_lock_free();
}
int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc
new file mode 100644
index 0000000000..934f1c6881
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc
@@ -0,0 +1,91 @@
+// { dg-require-atomic-builtins "" }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+#include <cstdlib> //std::abs
+#include <testsuite_hooks.h>
+
+// libstdc++/51811
+// pointer arithimetic vs. atomic<_Tp*> specialization
+int main(void)
+{
+ bool test __attribute__((unused)) = true;
+
+ using namespace std;
+
+ typedef int value_type;
+ const size_t n = 2;
+ value_type value = 42;
+ atomic<value_type*> p, p2, p3;
+
+ // operator++
+ {
+ p = &value;
+ p2 = p++;
+ VERIFY (p != p2);
+
+ value_type* vp(p);
+ value_type* vp2(p2);
+ ptrdiff_t dist = reinterpret_cast<char*>(vp) - reinterpret_cast<char*>(vp2);
+ VERIFY ( std::abs(dist) == sizeof(value_type));
+
+ p = &value;
+ p3 = ++p;
+ VERIFY (p == p3);
+ }
+
+ // operator--
+ {
+ p = &value;
+ p2 = p--;
+ VERIFY (p != p2);
+
+ value_type* vp(p);
+ value_type* vp2(p2);
+ ptrdiff_t dist = reinterpret_cast<char*>(vp) - reinterpret_cast<char*>(vp2);
+ VERIFY ( std::abs(dist) == sizeof(value_type));
+
+ p = &value;
+ p3 = --p;
+ VERIFY (p == p3);
+ }
+
+ // operator+=
+ {
+ p = &value;
+ value_type* vp(p);
+ p+=n;
+ value_type* vp2(p);
+ ptrdiff_t dist = reinterpret_cast<char*>(vp) - reinterpret_cast<char*>(vp2);
+ VERIFY ( std::abs(dist) == sizeof(value_type) * n);
+ }
+
+ // operator-=
+ {
+ p = &value;
+ value_type* vp(p);
+ p-=n;
+ value_type* vp2(p);
+ ptrdiff_t dist = reinterpret_cast<char*>(vp) - reinterpret_cast<char*>(vp2);
+ VERIFY ( std::abs(dist) == sizeof(value_type) * n);
+ }
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc
new file mode 100644
index 0000000000..1d77a55b21
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+void test01()
+{
+ using namespace std;
+ volatile atomic<bool> ab1 __attribute__((unused));
+ ab1 = true;
+ volatile atomic_bool ab2 __attribute__((unused));
+ ab2 = true;
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
new file mode 100644
index 0000000000..fcc9708da4
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
@@ -0,0 +1,71 @@
+// { dg-require-atomic-builtins "" }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+#include <cstdlib> //std::abs
+#include <testsuite_hooks.h>
+
+// pointer arithimetic vs. atomic<void*>.
+// atomic<void*> vs. explicitly specialized w/o operators, like atomic_bool?
+int main(void)
+{
+ // bool test __attribute__((unused)) = true;
+
+ using namespace std;
+
+ typedef int value_type;
+ const size_t n = 2;
+ value_type value = 42;
+ value_type* p = &value;
+ void* vp = p;
+ ptrdiff_t dist(0);
+
+ atomic<void*> a(vp);
+
+ // operator++
+ void* vp2(a);
+ a++;
+ void* vp3(a);
+ dist = reinterpret_cast<char*>(vp2) - reinterpret_cast<char*>(vp3);
+ // VERIFY ( std::abs(dist) == sizeof(void*));
+
+ // operator--
+ void* vp4(a);
+ a--;
+ void* vp5(a);
+ dist = reinterpret_cast<char*>(vp4) - reinterpret_cast<char*>(vp5);
+ // VERIFY ( std::abs(dist) == sizeof(void*));
+
+ // operator+=
+ void* vp6(a);
+ a+=n;
+ void* vp7(a);
+ dist = reinterpret_cast<char*>(vp6) - reinterpret_cast<char*>(vp7);
+ // VERIFY ( std::abs(dist) == sizeof(void*) * n);
+
+ // operator-=
+ void* vp8(a);
+ a-=n;
+ void* vp9(a);
+ dist = reinterpret_cast<char*>(vp8) - reinterpret_cast<char*>(vp9);
+ //VERIFY ( std::abs(dist) == sizeof(void*) * n);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
index 72bd5dd3a9..690f121535 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
@@ -23,5 +23,5 @@
#include <atomic>
#include <testsuite_character.h>
-template class std::atomic<__gnu_test::pod_char>;
+template class std::atomic<__gnu_test::pod_state>;
template class std::atomic<__gnu_test::pod_char*>;
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc
new file mode 100644
index 0000000000..64f3b97293
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc
@@ -0,0 +1,26 @@
+// { dg-options "-std=gnu++0x -Wsystem-headers -Wnarrowing" }
+// { dg-do compile }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+void test01()
+{
+ using namespace std;
+ atomic_flag af __attribute__((unused)) = ATOMIC_FLAG_INIT;
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
index 306fd4c890..aa94cef59e 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
@@ -29,5 +29,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 572 }
+// { dg-error "deleted" "" { target *-*-* } 616 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
index 56a41d1f2c..df705d29b4 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
@@ -29,5 +29,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 611 }
+// { dg-error "deleted" "" { target *-*-* } 655 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
index 4ee4e7fd6f..f4b4f8fd0c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
@@ -27,7 +27,10 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 428 }
-// { dg-error "operator" "" { target *-*-* } 429 }
-// { dg-error "operator" "" { target *-*-* } 430 }
-// { dg-excess-errors "In file included from" }
+// { dg-error "deleted" "" { target *-*-* } 470 }
+// { dg-error "deleted" "" { target *-*-* } 471 }
+// { dg-error "operator" "" { target *-*-* } 472 }
+// { dg-error "operator" "" { target *-*-* } 473 }
+// { dg-error "operator" "" { target *-*-* } 474 }
+
+// { dg-prune-output "declared here" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
index 3e0a97578f..5b31fc0fe7 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
@@ -28,6 +28,6 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 385 }
-// { dg-error "operator" "" { target *-*-* } 386 }
-// { dg-error "operator" "" { target *-*-* } 387 }
+// { dg-error "operator" "" { target *-*-* } 429 }
+// { dg-error "operator" "" { target *-*-* } 430 }
+// { dg-error "operator" "" { target *-*-* } 431 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
index 5047be7987..9624eefe09 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
@@ -28,6 +28,6 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 363 }
-// { dg-error "operator" "" { target *-*-* } 364 }
-// { dg-error "operator" "" { target *-*-* } 365 }
+// { dg-error "operator" "" { target *-*-* } 407 }
+// { dg-error "operator" "" { target *-*-* } 408 }
+// { dg-error "operator" "" { target *-*-* } 409 }
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
index e2461a1113..fe78cff28a 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
@@ -20,78 +20,44 @@
#include <atomic>
-namespace gnu
-{
+#ifndef ATOMIC_BOOL_LOCK_FREE
+# error "ATOMIC_BOOL_LOCK_FREE must be a macro"
+#endif
+
#ifndef ATOMIC_CHAR_LOCK_FREE
# error "ATOMIC_CHAR_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_CHAR_LOCK_FREE != 0 \
- && ATOMIC_CHAR_LOCK_FREE != 1 && ATOMIC_CHAR_LOCK_FREE != 2
-# error "ATOMIC_CHAR_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_CHAR16_T_LOCK_FREE
# error "ATOMIC_CHAR16_T_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_CHAR16_T_LOCK_FREE != 0 \
- && ATOMIC_CHAR16_T_LOCK_FREE != 1 && ATOMIC_CHAR16_T_LOCK_FREE != 2
-# error "ATOMIC_CHAR16_T_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_CHAR32_T_LOCK_FREE
# error "ATOMIC_CHAR32_T_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_CHAR32_T_LOCK_FREE != 0 \
- && ATOMIC_CHAR32_T_LOCK_FREE != 1 && ATOMIC_CHAR32_T_LOCK_FREE != 2
-# error "ATOMIC_CHAR32_T_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_WCHAR_T_LOCK_FREE
# error "ATOMIC_WCHAR_T_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_WCHAR_T_LOCK_FREE != 0 \
- && ATOMIC_WCHAR_T_LOCK_FREE != 1 && ATOMIC_WCHAR_T_LOCK_FREE != 2
-# error "ATOMIC_WCHAR_T_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_SHORT_LOCK_FREE
# error "ATOMIC_SHORT_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_SHORT_LOCK_FREE != 0 \
- && ATOMIC_SHORT_LOCK_FREE != 1 && ATOMIC_SHORT_LOCK_FREE != 2
-# error "ATOMIC_SHORT_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_INT_LOCK_FREE
# error "ATOMIC_INT_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_INT_LOCK_FREE != 0 \
- && ATOMIC_INT_LOCK_FREE != 1 && ATOMIC_INT_LOCK_FREE != 2
-# error "ATOMIC_INT_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_LONG_LOCK_FREE
# error "ATOMIC_LONG_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_LONG_LOCK_FREE != 0 \
- && ATOMIC_LONG_LOCK_FREE != 1 && ATOMIC_LONG_LOCK_FREE != 2
-# error "ATOMIC_LONG_LOCK_FREE must be 0, 1, or 2"
-# endif
#endif
#ifndef ATOMIC_LLONG_LOCK_FREE
# error "ATOMIC_LLONG_LOCK_FREE must be a macro"
-#else
-# if ATOMIC_LLONG_LOCK_FREE != 0 \
- && ATOMIC_LLONG_LOCK_FREE != 1 && ATOMIC_LLONG_LOCK_FREE != 2
-# error "ATOMIC_LLONG_LOCK_FREE must be 0, 1, or 2"
-# endif
+#endif
+
+#ifndef ATOMIC_POINTER_LOCK_FREE
+# error "ATOMIC_POINTER_LOCK_FREE must be a macro"
#endif
#ifndef ATOMIC_FLAG_INIT
@@ -101,4 +67,49 @@ namespace gnu
#ifndef ATOMIC_VAR_INIT
#error "ATOMIC_VAR_INIT_must_be_a_macro"
#endif
+
+
+extern void abort(void);
+
+int main ()
+{
+#if (ATOMIC_BOOL_LOCK_FREE != 1 && ATOMIC_BOOL_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_CHAR_LOCK_FREE != 1 && ATOMIC_CHAR_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_CHAR16_T_LOCK_FREE != 1 && ATOMIC_CHAR16_T_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_CHAR32_T_LOCK_FREE != 1 && ATOMIC_CHAR32_T_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_WCHAR_T_LOCK_FREE != 1 && ATOMIC_WCHAR_T_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_SHORT_LOCK_FREE != 1 && ATOMIC_SHORT_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_INT_LOCK_FREE != 1 && ATOMIC_INT_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_LONG_LOCK_FREE != 1 && ATOMIC_LONG_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_LLONG_LOCK_FREE != 1 && ATOMIC_LLONG_LOCK_FREE != 2)
+ abort ();
+#endif
+
+#if (ATOMIC_POINTER_LOCK_FREE != 1 && ATOMIC_POINTER_LOCK_FREE != 2)
+ abort ();
+#endif
}
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
index be390b0f71..38b49b6db1 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <atomic> // { dg-excess-errors "In file included from" }
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/30_threads/async/42819.cc b/libstdc++-v3/testsuite/30_threads/async/42819.cc
index c41606ec63..7b7a409ec0 100644
--- a/libstdc++-v3/testsuite/30_threads/async/42819.cc
+++ b/libstdc++-v3/testsuite/30_threads/async/42819.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/async/49668.cc b/libstdc++-v3/testsuite/30_threads/async/49668.cc
new file mode 100644
index 0000000000..a8bd399d1b
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/async/49668.cc
@@ -0,0 +1,62 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <future>
+#include <functional>
+#include <testsuite_hooks.h>
+
+struct moveable
+{
+ moveable() = default;
+ moveable(moveable&&) = default;
+ moveable(const moveable&) = delete;
+};
+
+using std::launch;
+namespace ph = std::placeholders;
+
+typedef decltype(ph::_1) placeholder_type;
+
+bool f(moveable, placeholder_type) { return true; }
+
+void test01()
+{
+ auto fut = std::async(launch::async, f, moveable(), ph::_1);
+ bool test = fut.get();
+ VERIFY( test );
+}
+
+void test02()
+{
+ auto fut = std::async(launch::deferred, f, moveable(), ph::_1);
+ bool test = fut.get();
+ VERIFY( test );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/async/54297.cc b/libstdc++-v3/testsuite/30_threads/async/54297.cc
new file mode 100644
index 0000000000..ff35a6778a
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/async/54297.cc
@@ -0,0 +1,51 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+// { dg-require-nanosleep "" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <thread>
+#include <future>
+#include <set>
+#include <testsuite_hooks.h>
+
+struct Task;
+
+std::set<const Task*> dead_tasks;
+
+struct Task
+{
+ ~Task() { dead_tasks.insert(this); }
+
+ void operator()() const
+ {
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ VERIFY( dead_tasks.count(this) == 0 );
+ }
+};
+
+int main()
+{
+ std::async(std::launch::async, Task());
+}
diff --git a/libstdc++-v3/testsuite/30_threads/async/any.cc b/libstdc++-v3/testsuite/30_threads/async/any.cc
index 40c103f960..1e3616ef37 100644
--- a/libstdc++-v3/testsuite/30_threads/async/any.cc
+++ b/libstdc++-v3/testsuite/30_threads/async/any.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test01()
int a = 1;
int b = 10;
int c = 100;
- future<int> f1 = async(launch::any, sum(), a, ref(b), cref(c));
+ future<int> f1 = async(launch::async|launch::deferred, sum(), a, ref(b), cref(c));
future<int> f2 = async(sum(), a, ref(b), cref(c));
VERIFY( f1.valid() );
diff --git a/libstdc++-v3/testsuite/30_threads/async/async.cc b/libstdc++-v3/testsuite/30_threads/async/async.cc
index 5335dfc57a..93dc57dce7 100644
--- a/libstdc++-v3/testsuite/30_threads/async/async.cc
+++ b/libstdc++-v3/testsuite/30_threads/async/async.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/async/launch.cc b/libstdc++-v3/testsuite/30_threads/async/launch.cc
new file mode 100644
index 0000000000..e17b4bc61a
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/async/launch.cc
@@ -0,0 +1,94 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <future>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ using std::launch;
+
+ const launch none{};
+ const launch both = launch::async|launch::deferred;
+ const launch all = ~none;
+
+ VERIFY( (none & both) == none );
+ VERIFY( (none | both) == both );
+ VERIFY( (none ^ both) == both );
+
+ VERIFY( (none & all) == none );
+ VERIFY( (none | all) == all );
+ VERIFY( (none ^ all) == all );
+
+ VERIFY( (both & all) == both );
+ VERIFY( (both | all) == all );
+ VERIFY( (both ^ all) == ~both );
+
+ VERIFY( (none & launch::async) == none );
+ VERIFY( (none & launch::deferred) == none );
+
+ VERIFY( (none | launch::async) == launch::async );
+ VERIFY( (none | launch::deferred) == launch::deferred );
+
+ VERIFY( (none ^ launch::async) == launch::async );
+ VERIFY( (none ^ launch::deferred) == launch::deferred );
+
+ VERIFY( (none & none) == none );
+ VERIFY( (none | none) == none );
+ VERIFY( (none ^ none) == none );
+
+ VERIFY( (both & both) == both );
+ VERIFY( (both | both) == both );
+ VERIFY( (both ^ both) == none );
+
+ VERIFY( (all & all) == all );
+ VERIFY( (all | all) == all );
+ VERIFY( (all ^ all) == none );
+
+ launch l = none;
+
+ l &= none;
+ VERIFY( l == none );
+ l |= none;
+ VERIFY( l == none );
+ l ^= none;
+ VERIFY( l == none );
+
+ l &= both;
+ VERIFY( l == none );
+ l |= both;
+ VERIFY( l == both );
+ l ^= both;
+ VERIFY( l == none );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/30_threads/async/sync.cc b/libstdc++-v3/testsuite/30_threads/async/sync.cc
index f1d1377377..8b51992366 100644
--- a/libstdc++-v3/testsuite/30_threads/async/sync.cc
+++ b/libstdc++-v3/testsuite/30_threads/async/sync.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test01()
int a = 1;
int b = 10;
int c = 100;
- future<int> f1 = async(launch::sync, sum(), a, ref(b), cref(c));
+ future<int> f1 = async(launch::deferred, sum(), a, ref(b), cref(c));
VERIFY( f1.valid() );
VERIFY( f1.get() == 111 );
diff --git a/libstdc++-v3/testsuite/30_threads/call_once/39909.cc b/libstdc++-v3/testsuite/30_threads/call_once/39909.cc
index aa125919bf..3fced50c4b 100644
--- a/libstdc++-v3/testsuite/30_threads/call_once/39909.cc
+++ b/libstdc++-v3/testsuite/30_threads/call_once/39909.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/call_once/49668.cc b/libstdc++-v3/testsuite/30_threads/call_once/49668.cc
new file mode 100644
index 0000000000..63b15c7f63
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/call_once/49668.cc
@@ -0,0 +1,51 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <mutex>
+#include <functional>
+#include <testsuite_hooks.h>
+
+struct moveable
+{
+ moveable() = default;
+ moveable(moveable&&) = default;
+ moveable(const moveable&) = delete;
+};
+
+typedef decltype(std::placeholders::_1) placeholder_type;
+
+void f(moveable, placeholder_type, bool& b) { b = true; }
+
+void test01()
+{
+ bool test = false;
+ std::once_flag once;
+ std::call_once(once, f, moveable(), std::placeholders::_1, std::ref(test));
+ VERIFY( test );
+}
+
+int main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc b/libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
index 4374ea2796..23eb27455a 100644
--- a/libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
+++ b/libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc
new file mode 100644
index 0000000000..5769670876
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc
@@ -0,0 +1,62 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <mutex>
+#include <condition_variable>
+#include <thread>
+
+// PR libstdc++/54185
+
+std::condition_variable* cond = nullptr;
+std::mutex mx;
+int started = 0;
+int constexpr NUM_THREADS = 10;
+
+void do_thread_a()
+{
+ std::unique_lock<std::mutex> lock(mx);
+ if(++started >= NUM_THREADS)
+ {
+ cond->notify_all();
+ delete cond;
+ cond = nullptr;
+ }
+ else
+ cond->wait(lock);
+}
+
+int main(){
+ std::vector<std::thread> vec;
+ for(int j = 0; j < 1000; ++j)
+ {
+ started = 0;
+ cond = new std::condition_variable;
+ for (int i = 0; i < NUM_THREADS; ++i)
+ vec.emplace_back(&do_thread_a);
+ for (int i = 0; i < NUM_THREADS; ++i)
+ vec[i].join();
+ vec.clear();
+ }
+}
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
index 10ac6e2103..1dc23041ac 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc
index 3b94c236f5..1ae7abf0b0 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc
index f4904ada54..08ad213863 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,10 +38,10 @@ void test01()
std::mutex m;
std::unique_lock<std::mutex> l(m);
- auto then = std::chrono::monotonic_clock::now();
+ auto then = std::chrono::steady_clock::now();
std::cv_status result = c1.wait_until(l, then + ms);
VERIFY( result == std::cv_status::timeout );
- VERIFY( (std::chrono::monotonic_clock::now() - then) >= ms );
+ VERIFY( (std::chrono::steady_clock::now() - then) >= ms );
VERIFY( l.owns_lock() );
}
catch (const std::system_error& e)
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
new file mode 100644
index 0000000000..f91509c492
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
@@ -0,0 +1,50 @@
+// { dg-do compile }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* hppa*-hp-hpux11* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// PR libstdc++/53841
+
+#include <chrono>
+#include <mutex>
+#include <condition_variable>
+
+namespace ch = std::chrono;
+
+struct FPClock : ch::system_clock
+{
+ typedef double rep;
+ typedef std::ratio<1> period;
+ typedef ch::duration<rep, period> duration;
+ typedef ch::time_point<FPClock> time_point;
+
+ static time_point now()
+ { return time_point(duration(system_clock::now().time_since_epoch())); }
+};
+
+void f()
+{
+ std::mutex mx;
+ std::unique_lock<std::mutex> l(mx);
+ std::condition_variable cv;
+ cv.wait_until(l, FPClock::now());
+}
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc
index 1f1243d4b7..5b8cb881d3 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc
new file mode 100644
index 0000000000..afc6bb7898
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc
@@ -0,0 +1,80 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-sched-yield "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <condition_variable>
+#include <thread>
+#include <mutex>
+#include <array>
+#include <sstream>
+
+struct scoped_thread
+{
+ ~scoped_thread() { if (t.joinable()) t.join(); }
+ std::thread t;
+};
+
+int main()
+{
+ typedef std::unique_lock<std::mutex> Lock;
+
+ std::mutex m;
+ std::condition_variable_any cond;
+ unsigned int product = 0;
+ const unsigned int count = 10;
+
+ // writing to stream causes timing changes which makes deadlock easier
+ // to reproduce - do not remove
+ std::ostringstream out;
+
+ // create consumers
+ std::array<scoped_thread, 2> threads;
+ for (std::size_t i = 0; i < threads.size(); ++i)
+ threads[i].t
+ = std::thread( [&]
+ {
+ for (unsigned int i = 0; i < count; ++i)
+ {
+ std::this_thread::yield();
+ Lock lock(m);
+ while(product == 0)
+ cond.wait(lock);
+ out << "got product "
+ << std::this_thread::get_id()
+ << ' ' << product << std::endl;
+ --product;
+ }
+ } );
+
+ // single producer
+ for (std::size_t i = 0; i < threads.size() * count; ++i)
+ {
+ std::this_thread::yield();
+ Lock lock(m);
+ ++product;
+ out << "setting product " << std::this_thread::get_id()
+ << ' ' << product << std::endl;
+ cond.notify_one();
+ }
+}
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/53830.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/53830.cc
new file mode 100644
index 0000000000..91aa348f90
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/53830.cc
@@ -0,0 +1,68 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-sched-yield "" }
+// { dg-require-nanosleep "" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// PR libstdc++/53830
+// Test for deadlock in condition_variable_any::wait_for
+
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <chrono>
+#include <atomic>
+
+std::mutex mutex;
+std::condition_variable_any cv;
+
+std::atomic<int> barrier(0);
+
+// waits for data from another thread
+void wait_for_data()
+{
+ std::unique_lock<std::mutex> lock(mutex);
+ barrier = 1;
+ cv.wait_for(lock, std::chrono::milliseconds(100), []{ return false; });
+ // read data
+}
+
+// passes data to waiting thread
+void provide_data()
+{
+ while (barrier == 0)
+ std::this_thread::yield();
+ std::unique_lock<std::mutex> lock(mutex);
+ // pass data
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ cv.notify_one();
+}
+
+int main()
+{
+ std::thread thread1(wait_for_data);
+ provide_data();
+ thread1.join();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc
index 38b4dbad5f..3f019da124 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc
index 07743928a2..f7322f65a4 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc
index 8e58dce818..6cecdb9d93 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -63,10 +63,10 @@ void test01()
Mutex m;
m.lock();
- auto then = std::chrono::monotonic_clock::now();
+ auto then = std::chrono::steady_clock::now();
std::cv_status result = c1.wait_until(m, then + ms);
VERIFY( result == std::cv_status::timeout );
- VERIFY( (std::chrono::monotonic_clock::now() - then) >= ms );
+ VERIFY( (std::chrono::steady_clock::now() - then) >= ms );
VERIFY( m.locked );
}
catch (const std::system_error& e)
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/requirements/typedefs.cc
deleted file mode 100644
index 8a6fd82ccf..0000000000
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/requirements/typedefs.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// { dg-do compile }
-// { dg-options "-std=gnu++0x" }
-// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <condition_variable>
-
-void test01()
-{
- // Check for required typedefs
- typedef std::condition_variable_any test_type;
- typedef test_type::native_handle_type type;
-}
diff --git a/libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc b/libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc
index a56d585242..d35e6aaba3 100644
--- a/libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc
@@ -1,12 +1,12 @@
// { dg-do compile }
-// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps -g0" }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
// { dg-final { scan-assembler-not "_ZNSt6futureIvEC2Ev" } }
// { dg-final { scan-assembler-not "_ZNSt6futureIiEC2Ev" } }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/cons/move.cc b/libstdc++-v3/testsuite/30_threads/future/cons/move.cc
index 26493141e1..49846a7d80 100644
--- a/libstdc++-v3/testsuite/30_threads/future/cons/move.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/cons/move.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/45133.cc b/libstdc++-v3/testsuite/30_threads/future/members/45133.cc
index aca902d581..af8cce6f65 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/45133.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/45133.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/get.cc b/libstdc++-v3/testsuite/30_threads/future/members/get.cc
index a0e4a4326d..45c706b311 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/get.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/get.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/get2.cc b/libstdc++-v3/testsuite/30_threads/future/members/get2.cc
index 22ca15c396..2ae83b147a 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/get2.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/get2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/share.cc b/libstdc++-v3/testsuite/30_threads/future/members/share.cc
new file mode 100644
index 0000000000..91325970fa
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/future/members/share.cc
@@ -0,0 +1,73 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <future>
+#include <testsuite_hooks.h>
+
+int value = 99;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::promise<int> p1;
+ std::future<int> f1(p1.get_future());
+ std::shared_future<int> f2 = f1.share();
+
+ p1.set_value(value);
+ VERIFY( f2.get() == value );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::promise<int&> p1;
+ std::future<int&> f1(p1.get_future());
+ std::shared_future<int&> f2 = f1.share();
+
+ p1.set_value(value);
+ VERIFY( &f2.get() == &value );
+}
+
+void test03()
+{
+ std::promise<void> p1;
+ std::future<void> f1(p1.get_future());
+ std::shared_future<void> f2 = f1.share();
+
+ p1.set_value();
+ f2.get();
+}
+
+int main()
+{
+ test01();
+ test02();
+ test03();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/valid.cc b/libstdc++-v3/testsuite/30_threads/future/members/valid.cc
index df5b57f5dc..977b37954d 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/valid.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/valid.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/wait.cc b/libstdc++-v3/testsuite/30_threads/future/members/wait.cc
index d1b44dbffc..e1a5a941b2 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/wait.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/wait.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc b/libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc
index 0123caad34..476bfd9541 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,12 +37,12 @@ void test01()
std::chrono::milliseconds delay(100);
- VERIFY( !f1.wait_for(delay) );
+ VERIFY( f1.wait_for(delay) == std::future_status::timeout );
p1.set_value(1);
auto before = std::chrono::system_clock::now();
- VERIFY( f1.wait_for(delay) );
+ VERIFY( f1.wait_for(delay) == std::future_status::ready );
VERIFY( std::chrono::system_clock::now() < (before + delay) );
}
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc b/libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc
index bea1e0ea70..c588be8b6c 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,13 +41,13 @@ void test01()
std::future<int> f1(p1.get_future());
auto when = make_time(10);
- VERIFY( !f1.wait_until(when) );
+ VERIFY( f1.wait_until(when) == std::future_status::timeout );
VERIFY( std::chrono::system_clock::now() >= when );
p1.set_value(1);
when = make_time(100);
- VERIFY( f1.wait_until(when) );
+ VERIFY( f1.wait_until(when) == std::future_status::ready );
VERIFY( std::chrono::system_clock::now() < when );
}
diff --git a/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
index 6e345243c2..5df33d943a 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <condition_variable>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
index 5dbaffdefd..ec018f7363 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <future>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
index 31bf41c06a..3d7a09d829 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
@@ -20,7 +20,7 @@
#include <mutex>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
index cc8a3877de..6089f33171 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
@@ -22,4 +22,4 @@
#include <thread>
-// { dg-error "upcoming ISO" "" { target *-*-* } 32 }
+// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 }
diff --git a/libstdc++-v3/testsuite/30_threads/lock/1.cc b/libstdc++-v3/testsuite/30_threads/lock/1.cc
index 3f4f657aaf..29406b0377 100644
--- a/libstdc++-v3/testsuite/30_threads/lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/lock/2.cc b/libstdc++-v3/testsuite/30_threads/lock/2.cc
index bf3c8a86ac..c39e817aac 100644
--- a/libstdc++-v3/testsuite/30_threads/lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/lock/3.cc b/libstdc++-v3/testsuite/30_threads/lock/3.cc
index 18681c0d70..33e39bfa5d 100644
--- a/libstdc++-v3/testsuite/30_threads/lock/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/lock/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/lock/4.cc b/libstdc++-v3/testsuite/30_threads/lock/4.cc
index c71a8a0aea..397c424fab 100644
--- a/libstdc++-v3/testsuite/30_threads/lock/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/lock/4.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc b/libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc
index f450d51b80..470fc4c49c 100644
--- a/libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc
@@ -1,11 +1,8 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
-// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-do run }
+// { dg-options " -std=gnu++11 " }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc
index b743b99808..5e8ec117a7 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc b/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc
index ee0ddd8f2f..a3730c593c 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc
index 6c4a0a0d30..bebbd222ae 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc
index d1700e3d30..aefdeff3fb 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc b/libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc
index 44349acb60..bf6d5d78ac 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc
index 5a3589c203..e05c236f44 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc
index ab5cf7c0e5..d6a08f77e2 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc b/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
index 228f2bcdbd..1d3c05068b 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc
new file mode 100644
index 0000000000..5c217dff99
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc
@@ -0,0 +1,51 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <future>
+#include <testsuite_hooks.h>
+
+struct moveable
+{
+ moveable() = default;
+ moveable(moveable&&) = default;
+};
+
+typedef decltype(std::placeholders::_1) placeholder_type;
+
+bool f(moveable, placeholder_type) { return true; }
+
+void test01()
+{
+ std::packaged_task<bool(moveable, placeholder_type)> p(f);
+ p(moveable(), std::placeholders::_1);
+ bool test = p.get_future().get();
+ VERIFY( test );
+}
+
+int main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
index b6ea492536..d7fefe7548 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
index 9dc9757902..fd1daf881a 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc
new file mode 100644
index 0000000000..33cec40d61
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc
@@ -0,0 +1,56 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// LWG 2067. packaged_task should have deleted copy c'tor with const parameter
+
+#include <future>
+#include <thread>
+#include <testsuite_hooks.h>
+
+template<typename F>
+std::future<typename std::result_of<F()>::type> spawn_task(F f)
+{
+ typedef typename std::result_of<F()>::type result_type;
+ std::packaged_task<result_type()> task(std::move(f));
+ std::future<result_type> res(task.get_future());
+ std::thread(std::move(task)).detach();
+ return res;
+}
+
+int get_res()
+{
+ return 42;
+}
+
+void test01()
+{
+ auto f = spawn_task(get_res);
+ VERIFY( f.get() == get_res() );
+}
+
+int main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
index 5318714170..f16af2d33b 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc2.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc2.cc
new file mode 100644
index 0000000000..40d30705a6
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc2.cc
@@ -0,0 +1,40 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Test that packaged_task can be default-constructed or move-constructed
+// in a context that does uses-allocator construction.
+
+#include <future>
+#include <memory>
+#include <tuple>
+
+using std::packaged_task;
+using std::allocator_arg;
+using std::allocator;
+using std::tuple;
+
+typedef packaged_task<void()> task;
+allocator<task> a;
+
+tuple<task> t1{ allocator_arg, a };
+tuple<task> t2{ allocator_arg, a, task{} };
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc
new file mode 100644
index 0000000000..aa8934d47e
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc
@@ -0,0 +1,34 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Test that packaged_task can use a minimal C++11 allocator
+// and doesn't rely on C++98 allocator interface.
+
+#include <future>
+#include <testsuite_allocator.h>
+
+using std::packaged_task;
+using std::allocator_arg;
+
+__gnu_test::SimpleAllocator<int> a;
+packaged_task<int()> p(allocator_arg, a, []() { return 1; });
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc
index 599caf9092..961a9cef70 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc
index 1c5dfc3b9b..ecbf2cf775 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc
index b44891be86..79d4c1f641 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,8 +36,9 @@ void test01()
std::packaged_task<int&(int&)> p1(inc);
std::future<int&> f1 = p1.get_future();
+ std::chrono::milliseconds delay(1);
VERIFY( f1.valid() );
- VERIFY( !f1.wait_for(std::chrono::milliseconds(1)) );
+ VERIFY( f1.wait_for(delay) == std::future_status::timeout );
int i1 = 0;
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc
index 5c6d67b977..ffcca11981 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc
index 238568fe3d..f6b676ae74 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc
index e29852c483..fc780339b3 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc
index 7ae6106a24..9fc2bdb710 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc
index 6f0013f300..d94f810eb9 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc
index 925dc108fe..d4866a4d98 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc
index 01a06d6a3c..ed67943479 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009. 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009. 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc
index 2fac366377..19d66c3b3c 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc
index 9055d9837f..9c016a9fb0 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
index d7f1ed13d1..df251bdfa3 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2011 Free Software Foundation, Inc.
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/requirements/typedefs.cc
deleted file mode 100644
index 3c83a3fe7d..0000000000
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/requirements/typedefs.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// { dg-do compile }
-// { dg-options "-std=gnu++0x" }
-// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
-// { dg-require-atomic-builtins "" }
-
-// Copyright (C) 2009 Free Software Foundation
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <future>
-
-void test01()
-{
- // Check for required typedefs
- typedef std::packaged_task<int()> test_type;
- typedef test_type::result_type result_type;
-}
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc
new file mode 100644
index 0000000000..f6fb2aef9f
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc
@@ -0,0 +1,32 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <future>
+#include <memory>
+
+using std::uses_allocator;
+using std::allocator;
+using std::packaged_task;
+static_assert( uses_allocator<packaged_task<int()>, allocator<int>>::value,
+ "packaged_task supports uses-allocator construction" );
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/1.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
index 79120b7cd2..1a22c74c8a 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
index 0ac560df47..c704b5a646 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc
new file mode 100644
index 0000000000..a22fd20343
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Test that promise can be default-constructed or move-constructed
+// in a context that does uses-allocator construction.
+
+#include <future>
+#include <memory>
+#include <tuple>
+
+using std::promise;
+using std::allocator_arg;
+using std::allocator;
+using std::tuple;
+
+typedef promise<int> p;
+typedef promise<int&> pr;
+typedef promise<void> pv;
+allocator<p> a;
+
+tuple<p, pr, pv> t1{ allocator_arg, a };
+tuple<p, pr, pv> t2{ allocator_arg, a, p{}, pr{}, pv{} };
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/alloc_min.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc_min.cc
new file mode 100644
index 0000000000..ba7c55334f
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc_min.cc
@@ -0,0 +1,40 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Test that promise can use a minimal C++11 allocator
+// and doesn't rely on C++98 allocator interface.
+
+#include <future>
+#include <testsuite_allocator.h>
+
+using std::promise;
+using std::allocator_arg;
+using std::tuple;
+
+typedef promise<int> p;
+typedef promise<int&> pr;
+typedef promise<void> pv;
+__gnu_test::SimpleAllocator<p> a;
+
+tuple<p, pr, pv> t1{ allocator_arg, a };
+tuple<p, pr, pv> t2{ allocator_arg, a, p{}, pr{}, pv{} };
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/move.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/move.cc
index 5fc2cae44a..5ea2695887 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/move.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/move.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc
index 5d96e8ffcd..165d252ed8 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc b/libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc
index b09e302ccd..59882bfbbc 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc b/libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc
index cc44fc4791..0b2b99683b 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
index 4d2a1ec024..8fd599c971 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
index 872a4792fd..ab12800764 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
index 9d3f8ead30..981343ebc9 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
index 09c8a52fa1..7dbf079d95 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +48,8 @@ void test01()
test = true;
}
- VERIFY( f1.wait_for(std::chrono::milliseconds(1)) );
+ std::chrono::milliseconds delay(1);
+ VERIFY( f1.wait_for(delay) == std::future_status::ready );
VERIFY( f1.get() == 1 );
VERIFY( test );
}
@@ -74,7 +75,8 @@ void test02()
test = true;
}
- VERIFY( f1.wait_for(std::chrono::milliseconds(1)) );
+ std::chrono::milliseconds delay(1);
+ VERIFY( f1.wait_for(delay) == std::future_status::ready );
VERIFY( f1.get() == 3 );
VERIFY( test );
}
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc
index 5dabff97df..268d162b3a 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,24 +41,26 @@ struct tester
std::promise<tester> pglobal;
std::future<tester> fglobal = pglobal.get_future();
+auto delay = std::chrono::milliseconds(1);
+
tester::tester(int)
{
bool test __attribute__((unused)) = true;
- VERIFY (!fglobal.wait_for(std::chrono::milliseconds(1)));
+ VERIFY (fglobal.wait_for(delay) == std::future_status::timeout);
}
tester::tester(const tester&)
{
bool test __attribute__((unused)) = true;
// if this copy happens while a mutex is locked next line could deadlock:
- VERIFY (!fglobal.wait_for(std::chrono::milliseconds(1)));
+ VERIFY (fglobal.wait_for(delay) == std::future_status::timeout);
}
tester& tester::operator=(const tester&)
{
bool test __attribute__((unused)) = true;
// if this copy happens while a mutex is locked next line could deadlock:
- VERIFY (!fglobal.wait_for(std::chrono::milliseconds(1)));
+ VERIFY (fglobal.wait_for(delay) == std::future_status::timeout);
return *this;
}
@@ -68,7 +70,7 @@ void test01()
pglobal.set_value( tester(1) );
- VERIFY( fglobal.wait_for(std::chrono::milliseconds(1)) );
+ VERIFY (fglobal.wait_for(delay) == std::future_status::ready);
}
int main()
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/swap.cc b/libstdc++-v3/testsuite/30_threads/promise/members/swap.cc
index b27ee2be7b..93a0026643 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/swap.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/swap.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,8 +35,9 @@ void test01()
std::promise<int> p2;
p1.set_value(1);
p1.swap(p2);
- VERIFY( !p1.get_future().wait_for(std::chrono::milliseconds(1)) );
- VERIFY( p2.get_future().wait_for(std::chrono::milliseconds(1)) );
+ auto delay = std::chrono::milliseconds(1);
+ VERIFY( p1.get_future().wait_for(delay) == std::future_status::timeout );
+ VERIFY( p2.get_future().wait_for(delay) == std::future_status::ready );
}
int main()
diff --git a/libstdc++-v3/testsuite/30_threads/promise/uses_allocator.cc b/libstdc++-v3/testsuite/30_threads/promise/uses_allocator.cc
new file mode 100644
index 0000000000..385058d724
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/promise/uses_allocator.cc
@@ -0,0 +1,32 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <future>
+#include <memory>
+
+using std::uses_allocator;
+using std::allocator;
+using std::promise;
+static_assert( uses_allocator<promise<int>, allocator<int>>::value,
+ "promise supports uses-allocator construction" );
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc
index 3abff9a5d8..29211d93ed 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc
index 7cc84c124f..1855495a44 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc
index 770f155209..a1c4447e5c 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc
index a961c44b5d..993d214918 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc
index c66e75182b..5fa4a48ae7 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc
index 0a0057a676..f1dc3b535a 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc
index fc4dbc1d52..41dcecda58 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc
index 1cdc706bbc..1c8f1063c0 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc
index cc257956ce..6663b92a56 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
index 1694423cb1..291a469d6b 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
@@ -1,9 +1,9 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
index c729d5b76a..6c7d31cae4 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
@@ -1,9 +1,9 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc
index 8442fbfa52..0518a2b6a7 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc
index 2fc97e019f..4872886a63 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc
index c725b63b63..1937a6e6ea 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc
index 96e64f34c7..55fd76533e 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc
index d2fd9f6e0e..16945d49b7 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc
index 46a27d6da3..cb70ab3f06 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc
@@ -1,11 +1,11 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
// 2008-03-18 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc
index d61f821c69..8e57e80119 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc
index 0e95bab943..9cd30638f0 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options "-std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options "-std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options "-std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options "-std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc
index d4e7d0a2f9..378dc14c4d 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc
index 207cad6ace..239af23168 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc
index d4a93484b2..06634d83ed 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc
index d61f821c69..8e57e80119 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc
index 911686c76a..f7c3741913 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc
index a1e4458f28..48a7279acb 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc b/libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc
index 159077bc82..6f06ffeb64 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc
@@ -1,12 +1,12 @@
// { dg-do compile }
-// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps -g0" }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
// { dg-final { scan-assembler-not "_ZNSt13shared_futureIvEC2Ev" } }
// { dg-final { scan-assembler-not "_ZNSt13shared_futureIiEC2Ev" } }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc b/libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc
index bb9b62b1dc..d08dd697df 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc
index f6f533a5dc..ba3f00f398 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc
index bf773c31d5..c49cafb296 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
index 80dd368a97..0077fed64e 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc
index c70ed38ffe..3cbb898960 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
index e690878b48..6e445c2d0f 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc
index 408b646022..2c4ec1d009 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,14 +38,14 @@ void test01()
std::chrono::milliseconds delay(100);
- VERIFY( !f1.wait_for(delay) );
- VERIFY( !f2.wait_for(delay) );
+ VERIFY( f1.wait_for(delay) == std::future_status::timeout );
+ VERIFY( f2.wait_for(delay) == std::future_status::timeout );
p1.set_value(1);
auto before = std::chrono::system_clock::now();
- VERIFY( f1.wait_for(delay) );
- VERIFY( f2.wait_for(delay) );
+ VERIFY( f1.wait_for(delay) == std::future_status::ready );
+ VERIFY( f2.wait_for(delay) == std::future_status::ready );
VERIFY( std::chrono::system_clock::now() < (before + 2*delay) );
}
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc
index 561fb20952..c6fcb93150 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-atomic-builtins "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,18 +42,18 @@ void test01()
std::shared_future<int> f2(f1);
auto when = make_time(10);
- VERIFY( !f1.wait_until(make_time(10)) );
+ VERIFY( f1.wait_until(make_time(10)) == std::future_status::timeout );
VERIFY( std::chrono::system_clock::now() >= when );
when = make_time(10);
- VERIFY( !f2.wait_until(make_time(10)) );
+ VERIFY( f2.wait_until(make_time(10)) == std::future_status::timeout );
VERIFY( std::chrono::system_clock::now() >= when );
p1.set_value(1);
when = make_time(100);
- VERIFY( f1.wait_until(when) );
- VERIFY( f2.wait_until(when) );
+ VERIFY( f1.wait_until(when) == std::future_status::ready );
+ VERIFY( f2.wait_until(when) == std::future_status::ready );
VERIFY( std::chrono::system_clock::now() < when );
}
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/1.cc b/libstdc++-v3/testsuite/30_threads/this_thread/1.cc
index 8e3dcac7c5..2ba099302a 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/2.cc b/libstdc++-v3/testsuite/30_threads/this_thread/2.cc
index 634238127a..49aa9c0181 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/2.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-sched-yield "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/3.cc b/libstdc++-v3/testsuite/30_threads/this_thread/3.cc
index fe960d74ce..3a3a025ed8 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/3.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-nanosleep "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/4.cc b/libstdc++-v3/testsuite/30_threads/this_thread/4.cc
index 5462283b50..f015986c78 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/4.cc
@@ -1,12 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-nanosleep "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/adl.cc b/libstdc++-v3/testsuite/30_threads/thread/adl.cc
new file mode 100644
index 0000000000..5332aed051
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/thread/adl.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <thread>
+#include <memory>
+#include <functional>
+
+template<typename, typename...P>
+void make_shared(P&&...)
+{}
+
+struct C {};
+
+void f(C){}
+
+// PR libstdc++/53872
+int main()
+{
+ std::thread t(std::bind(&::f, C()));
+}
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/1.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
index 94f1d7db48..04c453a1c7 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/2.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
index 87b4476f6c..db8f289331 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/3.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/3.cc
index b35f28eea9..0f85b4018c 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/4.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/4.cc
index 982a49b053..54ef516444 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/4.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc
new file mode 100644
index 0000000000..7f0fdf1196
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc
@@ -0,0 +1,51 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <thread>
+#include <functional>
+#include <testsuite_hooks.h>
+
+struct moveable
+{
+ moveable() = default;
+ moveable(moveable&&) = default;
+ moveable(const moveable&) = delete;
+};
+
+typedef decltype(std::placeholders::_1) placeholder_type;
+
+void f(moveable, placeholder_type, bool& b) { b = true; }
+
+void test01()
+{
+ bool test = false;
+ std::thread t(f, moveable(), std::placeholders::_1, std::ref(test));
+ t.join();
+ VERIFY( test );
+}
+
+int main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/5.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/5.cc
index 000e558c9f..a99a386cbc 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/5.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/5.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/6.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/6.cc
index b21892cd82..e0b15f7cb1 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/6.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/6.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/7.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/7.cc
index 5aa4c32a2d..c75114db95 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/7.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/7.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/8.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/8.cc
index b0ed1eda1a..cd0cc659db 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/8.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/8.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/9.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
index 04394b2625..7877f05d4d 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc
index f3f5c7baf3..1d74e2074b 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,8 +27,6 @@
#include <utility>
#include <testsuite_hooks.h>
-bool functor_was_called = false;
-
struct moveable
{
moveable() = default;
diff --git a/libstdc++-v3/testsuite/30_threads/thread/members/1.cc b/libstdc++-v3/testsuite/30_threads/thread/members/1.cc
index 64cdfd9d1a..a6a9805033 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/members/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/members/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/members/2.cc b/libstdc++-v3/testsuite/30_threads/thread/members/2.cc
index b8e3eb2e02..bd35fff4e1 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/members/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/members/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/members/3.cc b/libstdc++-v3/testsuite/30_threads/thread/members/3.cc
index 006ccdf4d3..e71ea7e33f 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/members/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/members/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/members/4.cc b/libstdc++-v3/testsuite/30_threads/thread/members/4.cc
index b0b0cfaa89..3ef570d824 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/members/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/members/4.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/members/5.cc b/libstdc++-v3/testsuite/30_threads/thread/members/5.cc
index 1daaaef881..57ad3aa589 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/members/5.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/members/5.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc b/libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc
index c2917ca6f1..345b9852e3 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc
@@ -1,11 +1,12 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
+// { dg-require-nprocs "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,8 +30,7 @@ int main()
{
bool test __attribute__((unused)) = true;
- // Current implementation punts on this.
- VERIFY( std::thread::hardware_concurrency() == 0 );
+ VERIFY( std::thread::hardware_concurrency() >= 1 );
return 0;
}
diff --git a/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc b/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
new file mode 100644
index 0000000000..26ff4b42bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
@@ -0,0 +1,45 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-nanosleep "" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <pthread.h>
+#include <thread>
+#include <atomic>
+
+void f(std::atomic<bool>& started)
+{
+ started = true;
+ while (true)
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
+}
+
+int main()
+{
+ std::atomic<bool> started{ false };
+ std::thread t(f, std::ref(started));
+ while (!started)
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
+ pthread_cancel(t.native_handle());
+ t.join();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc b/libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
index ffc0e40f63..3e105d4c38 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
@@ -1,11 +1,10 @@
-// { dg-do run { target *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-linux* *-*-solaris* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-linux* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
-// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/thread/swap/1.cc b/libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
index 2a820ad079..19f97f107c 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
index 5f122c21f4..072d1d2c5a 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
index 7c9199f321..220f29af7d 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
@@ -1,9 +1,9 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
index 2c388962e4..b2c33dbbef 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
@@ -1,9 +1,9 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc
index 2e4d42bbbf..3af01f1fc8 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc
index b7223ee585..a93e8edf73 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc
index dc5c60964c..0ecbe240b8 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc
index 56f98b1004..84a1cc6a7e 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc
index 2da736ed14..763fec2b9a 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc
@@ -1,9 +1,9 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc
index f8a2851e72..820d22a32a 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc
@@ -1,11 +1,11 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
// 2008-07-23 Chris Fairles <chris.fairles@gmail.com>
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc
index 16aed12565..9ea019d7b8 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc
index e12a706afb..a46de65147 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc
index a40fd6ab08..2a03cfee9f 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc
index 77fead751d..f98dc00473 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
index 7a5e42d4fb..265b574805 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
index 16aed12565..9ea019d7b8 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
index e12a706afb..a46de65147 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
index 5706bcc191..7dc5f8da4a 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/try_lock/1.cc b/libstdc++-v3/testsuite/30_threads/try_lock/1.cc
index ec3b6321ca..ca1f9ec341 100644
--- a/libstdc++-v3/testsuite/30_threads/try_lock/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/try_lock/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/try_lock/2.cc
index b24e7e3965..154ae91b8e 100644
--- a/libstdc++-v3/testsuite/30_threads/try_lock/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/try_lock/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/try_lock/3.cc b/libstdc++-v3/testsuite/30_threads/try_lock/3.cc
index 66e1542773..2c5aabca02 100644
--- a/libstdc++-v3/testsuite/30_threads/try_lock/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/try_lock/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/try_lock/4.cc b/libstdc++-v3/testsuite/30_threads/try_lock/4.cc
index 7750fc9247..09ed5e7da6 100644
--- a/libstdc++-v3/testsuite/30_threads/try_lock/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/try_lock/4.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc
index 9197fd81fe..ca2c8e38dd 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc
index ad869c4436..87a44253ed 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc
index d393cfaea7..3dca85a3ad 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc
index f8bc1346be..ae51bc04ac 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc
index 100a2a76a2..808521f0e4 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc
index 049eaa56e1..5278a4d639 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc
index f32ec2e624..36a7945f73 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc
index 28d1955a67..9882f78164 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc
index bb0bd0d700..f5cc74b2cc 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc
index a5e9581a6f..43cae03fbf 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
-// { dg-require-gthreads "" }
+// { dg-require-gthreads-timed "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
index 4cc803734a..1c96ef1766 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc
index 4a2508cadc..4b7080a8d1 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc
@@ -1,11 +1,11 @@
-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* powerpc-ibm-aix* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am
index 4e297e0f66..0cf8de501c 100644
--- a/libstdc++-v3/testsuite/Makefile.am
+++ b/libstdc++-v3/testsuite/Makefile.am
@@ -1,7 +1,7 @@
## Makefile for the testsuite subdirectory of the GNU C++ Standard library.
##
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-## 2011 Free Software Foundation, Inc.
+## 2011, 2012 Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
## Process this file with automake to produce Makefile.in.
@@ -59,6 +59,8 @@ site.exp: Makefile
@echo 'set target_triplet $(target_triplet)' >>site.tmp
@echo 'set libiconv "$(LIBICONV)"' >>site.tmp
@echo 'set baseline_dir "$(baseline_dir)"' >> site.tmp
+ @echo 'set baseline_subdir_switch "$(baseline_subdir_switch)"' >> site.tmp
+ @echo 'set TEST_GCC_EXEC_PREFIX "$(libdir)/gcc/"' >> site.tmp
@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
@test ! -f site.exp || \
sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
@@ -69,7 +71,7 @@ site.exp: Makefile
extract_symvers = $(glibcxx_builddir)/scripts/extract_symvers
-baseline_subdir := $(shell $(CXX) --print-multi-dir)
+baseline_subdir := $(shell $(CXX) $(baseline_subdir_switch))
baseline_symbols:
-@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
@@ -100,7 +102,7 @@ new-abi-baseline:
@test ! -f $*/site.exp || mv $*/site.exp $*/site.bak
@mv $*/site.exp.tmp $*/site.exp
-check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
+check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3 4 5 6 7 8 9)
$(check_DEJAGNU_normal_targets): check-DEJAGNUnormal%: normal%/site.exp
# Run the testsuite in normal mode.
@@ -109,22 +111,17 @@ check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
RANLIB="$(RANLIB)"; export RANLIB; \
if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
&& [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
- $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
- check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
- for idx in 0 1 2 3; do \
+ $(MAKE) $(AM_MAKEFLAGS) $(check_DEJAGNU_normal_targets); \
+ for idx in 0 1 2 3 4 5 6 7 8 9; do \
mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
done; \
mv -f libstdc++.sum libstdc++.sum.sep; \
mv -f libstdc++.log libstdc++.log.sep; \
$(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
- libstdc++.sum.sep normal0/libstdc++.sum.sep \
- normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
- normal3/libstdc++.sum.sep > libstdc++.sum; \
+ libstdc++.sum.sep normal[0-9]/libstdc++.sum.sep > libstdc++.sum; \
$(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
- libstdc++.log.sep normal0/libstdc++.log.sep \
- normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
- normal3/libstdc++.log.sep > libstdc++.log; \
+ libstdc++.log.sep normal[0-9]/libstdc++.log.sep > libstdc++.log; \
exit 0; \
fi; \
srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
@@ -137,16 +134,28 @@ check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
normal0) \
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
$$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
- $(RUNTESTFLAGS) abi.exp; \
+ $(RUNTESTFLAGS) abi.exp prettyprinters.exp; \
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi; \
- dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [ab]* de* [ep]*/*`";; \
+ dirs="`cd $$srcdir; echo [013-9][0-9]_*/*`";; \
normal1) \
- dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
+ dirs="`cd $$srcdir; echo [ab]* de* [ep]*/*`";; \
normal2) \
- dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
+ dirs="`cd $$srcdir; echo 2[01]_*/*`";; \
normal3) \
- dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
+ dirs="`cd $$srcdir; echo 22_*/*`";; \
+ normal4) \
+ dirs="`cd $$srcdir; echo 23_*/[a-km-tw-z]*`";; \
+ normal5) \
+ dirs="`cd $$srcdir; echo 23_*/[luv]*`";; \
+ normal6) \
+ dirs="`cd $$srcdir; echo 2[459]_*/*`";; \
+ normal7) \
+ dirs="`cd $$srcdir; echo 2[68]_*/*`";; \
+ normal8) \
+ dirs="`cd $$srcdir; echo 27_*/*`";; \
+ normal9) \
+ dirs="`cd $$srcdir; echo t*/*`";; \
esac; \
if [ -n "$*" ]; then cd "$*"; fi; \
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
@@ -247,8 +256,8 @@ check-profile: site.exp
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
- *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out
+ *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb
# To remove directories.
clean-local:
- rm -rf de fr debug parallel profile binaries normal*
+ rm -rf de fr debug parallel profile binaries normal*
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index 2a98814de8..3c4f39ec32 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -107,7 +107,6 @@ CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
DBLATEX = @DBLATEX@
-DBTOEPUB = @DBTOEPUB@
DEBUG_FLAGS = @DEBUG_FLAGS@
DEFS = @DEFS@
DOT = @DOT@
@@ -135,7 +134,6 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
@@ -163,7 +161,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
RANLIB = @RANLIB@
-RUBY = @RUBY@
SECTION_FLAGS = @SECTION_FLAGS@
SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
@@ -190,6 +187,7 @@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@
am__untar = @am__untar@
baseline_dir = @baseline_dir@
+baseline_subdir_switch = @baseline_subdir_switch@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -209,10 +207,12 @@ glibcxx_MOFILES = @glibcxx_MOFILES@
glibcxx_PCHFLAGS = @glibcxx_PCHFLAGS@
glibcxx_POFILES = @glibcxx_POFILES@
glibcxx_builddir = @glibcxx_builddir@
+glibcxx_compiler_pic_flag = @glibcxx_compiler_pic_flag@
+glibcxx_compiler_shared_flag = @glibcxx_compiler_shared_flag@
glibcxx_localedir = @glibcxx_localedir@
+glibcxx_lt_pic_flag = @glibcxx_lt_pic_flag@
glibcxx_prefixdir = @glibcxx_prefixdir@
glibcxx_srcdir = @glibcxx_srcdir@
-glibcxx_thread_h = @glibcxx_thread_h@
glibcxx_toolexecdir = @glibcxx_toolexecdir@
glibcxx_toolexeclibdir = @glibcxx_toolexeclibdir@
gxx_include_dir = @gxx_include_dir@
@@ -240,6 +240,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+python_mod_dir = @python_mod_dir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -252,6 +253,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
AUTOMAKE_OPTIONS = nostdinc
RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
@@ -265,14 +267,16 @@ PWD_COMMAND = $${PWDCMD-pwd}
STAMP = echo timestamp >
toolexecdir = $(glibcxx_toolexecdir)
toolexeclibdir = $(glibcxx_toolexeclibdir)
+@ENABLE_WERROR_FALSE@WERROR_FLAG =
+@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR)
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS.
CONFIG_CXXFLAGS = \
- $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS)
+ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@
WARN_CXXFLAGS = \
- $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once
# -I/-D flags to pass when compiling.
@@ -286,8 +290,8 @@ lists_of_files = \
testsuite_files_performance
extract_symvers = $(glibcxx_builddir)/scripts/extract_symvers
-baseline_subdir := $(shell $(CXX) --print-multi-dir)
-check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
+baseline_subdir := $(shell $(CXX) $(baseline_subdir_switch))
+check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3 4 5 6 7 8 9)
# Runs the testsuite, but in compile only mode.
# Can be used to test sources with non-GNU FE's at various warning
@@ -320,7 +324,7 @@ profile_flags = "unix/-D_GLIBCXX_PROFILE"
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
- *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out
+ *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb
all: all-am
@@ -502,6 +506,8 @@ site.exp: Makefile
@echo 'set target_triplet $(target_triplet)' >>site.tmp
@echo 'set libiconv "$(LIBICONV)"' >>site.tmp
@echo 'set baseline_dir "$(baseline_dir)"' >> site.tmp
+ @echo 'set baseline_subdir_switch "$(baseline_subdir_switch)"' >> site.tmp
+ @echo 'set TEST_GCC_EXEC_PREFIX "$(libdir)/gcc/"' >> site.tmp
@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
@test ! -f site.exp || \
sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
@@ -545,22 +551,17 @@ check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
RANLIB="$(RANLIB)"; export RANLIB; \
if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
&& [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
- $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
- check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
- for idx in 0 1 2 3; do \
+ $(MAKE) $(AM_MAKEFLAGS) $(check_DEJAGNU_normal_targets); \
+ for idx in 0 1 2 3 4 5 6 7 8 9; do \
mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
done; \
mv -f libstdc++.sum libstdc++.sum.sep; \
mv -f libstdc++.log libstdc++.log.sep; \
$(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
- libstdc++.sum.sep normal0/libstdc++.sum.sep \
- normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
- normal3/libstdc++.sum.sep > libstdc++.sum; \
+ libstdc++.sum.sep normal[0-9]/libstdc++.sum.sep > libstdc++.sum; \
$(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
- libstdc++.log.sep normal0/libstdc++.log.sep \
- normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
- normal3/libstdc++.log.sep > libstdc++.log; \
+ libstdc++.log.sep normal[0-9]/libstdc++.log.sep > libstdc++.log; \
exit 0; \
fi; \
srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
@@ -573,16 +574,28 @@ check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
normal0) \
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
$$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
- $(RUNTESTFLAGS) abi.exp; \
+ $(RUNTESTFLAGS) abi.exp prettyprinters.exp; \
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi; \
- dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [ab]* de* [ep]*/*`";; \
+ dirs="`cd $$srcdir; echo [013-9][0-9]_*/*`";; \
normal1) \
- dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
+ dirs="`cd $$srcdir; echo [ab]* de* [ep]*/*`";; \
normal2) \
- dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
+ dirs="`cd $$srcdir; echo 2[01]_*/*`";; \
normal3) \
- dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
+ dirs="`cd $$srcdir; echo 22_*/*`";; \
+ normal4) \
+ dirs="`cd $$srcdir; echo 23_*/[a-km-tw-z]*`";; \
+ normal5) \
+ dirs="`cd $$srcdir; echo 23_*/[luv]*`";; \
+ normal6) \
+ dirs="`cd $$srcdir; echo 2[459]_*/*`";; \
+ normal7) \
+ dirs="`cd $$srcdir; echo 2[68]_*/*`";; \
+ normal8) \
+ dirs="`cd $$srcdir; echo 27_*/*`";; \
+ normal9) \
+ dirs="`cd $$srcdir; echo t*/*`";; \
esac; \
if [ -n "$*" ]; then cd "$*"; fi; \
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
@@ -653,7 +666,7 @@ check-profile: site.exp
# To remove directories.
clean-local:
- rm -rf de fr debug parallel profile binaries normal*
+ rm -rf de fr debug parallel profile binaries normal*
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc b/libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc
index 49d44bc22d..12fa6fe40e 100644
--- a/libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc
+++ b/libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc
@@ -39,7 +39,7 @@ verify_demangle("_Z1fPFYPFiiEiE",
verify_demangle("_Z1fI1XENT_1tES2_",
"X::t f<X>(X::t)");
verify_demangle("_Z1fILi5E1AEvN1CIXstN1T1tEEXszsrS2_1tEE1qE",
- "void f<5, A>(C<sizeof (T::t), sizeof (T::t)>::q)");
+ "void f<5, A>(C<sizeof (T::t), sizeof T::t>::q)");
// 2003/12/03, libstdc++/13045
verify_demangle("_Z1fILi1ELc120EEv1AIXplT_cviLd4028ae147ae147aeEEE",
"void f<1, (char)120>(A<(1)+((int)((double)[4028ae147ae147ae]))>)");
diff --git a/libstdc++-v3/testsuite/backward/hash_set/49060.cc b/libstdc++-v3/testsuite/backward/hash_set/49060.cc
new file mode 100644
index 0000000000..985cfcf6af
--- /dev/null
+++ b/libstdc++-v3/testsuite/backward/hash_set/49060.cc
@@ -0,0 +1,35 @@
+// { dg-options "-Wno-deprecated" }
+
+#include <backward/hashtable.h>
+#include <utility>
+
+struct modulo2_hash
+{
+ size_t operator()(int const key) const
+ {
+ return key % 2;
+ }
+};
+
+struct modulo2_eq
+{
+ bool operator()(int const left, int const right) const
+ {
+ return left % 2 == right % 2;
+ }
+};
+
+int main()
+{
+ typedef std::_Select1st<std::pair<int const, int> > extract_type;
+ typedef
+ __gnu_cxx::hashtable<std::pair<int const, int>, int, modulo2_hash,
+ extract_type, modulo2_eq, std::allocator<int> >
+ table_type;
+ table_type table(4, modulo2_hash(), modulo2_eq(), extract_type(),
+ std::allocator<int>());
+
+ table.insert_equal(std::make_pair(2, 1));
+ table_type::iterator it(table.insert_equal(std::make_pair(4, 2)));
+ table.erase(it->first);
+}
diff --git a/libstdc++-v3/testsuite/data/make_graph_htmls.xml b/libstdc++-v3/testsuite/data/make_graph_htmls.xml
deleted file mode 100644
index 1eb87cf2df..0000000000
--- a/libstdc++-v3/testsuite/data/make_graph_htmls.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version = "1.0"?>
-<htmls>
- <html name = "tree_random_int_find_find_timing_test.html">
- </html>
- <html name = "assoc_performance_tests.html">
- </html>
- <html name = "pq_performance_tests.html">
- </html>
- <html name = "hash_text_find_find_timing_test.html">
- </html>
- <html name = "hash_random_int_find_find_timing_test.html">
- </html>
- <html name = "hash_random_int_subscript_find_timing_test.html">
- </html>
- <html name = "hash_random_int_subscript_insert_timing_test.html">
- </html>
- <html name = "hash_zlob_random_int_find_find_timing_test.html">
- </html>
- <html name = "hash_random_int_erase_mem_usage_test.html">
- </html>
- <html name = "tree_text_insert_timing_test.html">
- </html>
- <html name = "tree_text_find_find_timing_test.html">
- </html>
- <html name = "tree_text_lor_find_find_timing_test.html">
- </html>
- <html name = "tree_split_join_timing_test.html">
- </html>
- <html name = "tree_order_statistics_timing_test.html">
- </html>
- <html name = "priority_queue_text_push_timing_test.html">
- </html>
- <html name = "priority_queue_text_push_pop_timing_test.html">
- </html>
- <html name = "priority_queue_random_int_push_timing_test.html">
- </html>
- <html name = "priority_queue_random_int_push_pop_timing_test.html">
- </html>
- <html name = "priority_queue_text_pop_mem_usage_test.html">
- </html>
- <html name = "priority_queue_text_join_timing_test.html">
- </html>
- <html name = "priority_queue_text_modify_up_timing_test.html">
- </html>
- <html name = "priority_queue_text_modify_down_timing_test.html">
- </html>
- <html name = "multimap_text_insert_mem_usage_test_small.html">
- </html>
- <html name = "multimap_text_insert_timing_test_small.html">
- </html>
- <html name = "multimap_text_find_timing_test_small.html">
- </html>
- <html name = "multimap_text_insert_mem_usage_test_large.html">
- </html>
- <html name = "multimap_text_insert_timing_test_large.html">
- </html>
- <html name = "multimap_text_find_timing_test_large.html">
- </html>
-</htmls>
-
diff --git a/libstdc++-v3/testsuite/data/make_graph_test_infos.xml b/libstdc++-v3/testsuite/data/make_graph_test_infos.xml
index cffc3a0393..66e9fc54cf 100644
--- a/libstdc++-v3/testsuite/data/make_graph_test_infos.xml
+++ b/libstdc++-v3/testsuite/data/make_graph_test_infos.xml
@@ -1,129 +1,128 @@
<?xml version = "1.0"?>
<tests>
- <test name = "random_int_find_find_timing_test_tree">
- <file name = "random_int_find_timing.xml"></file>
+ <test name = "tree_int_find">
+ <file name = "all_int_find.xml"></file>
<cntnr name = "n_map"></cntnr>
<cntnr name = "splay_tree_map"></cntnr>
<cntnr name = "ov_tree_map"></cntnr>
<cntnr name = "rb_tree_map"></cntnr>
</test>
- <test name = "tree_split_join_timing_test">
- <file name = "tree_split_join_timing.xml"></file>
+ <test name = "tree_split_join">
+ <file name = "tree_split_join.xml"></file>
<cntnr name = "n_set"></cntnr>
<cntnr name = "splay_tree_set"></cntnr>
<cntnr name = "ov_tree_set"></cntnr>
<cntnr name = "rb_tree_set"></cntnr>
</test>
- <test name = "tree_order_statistics_timing_test">
- <file name = "tree_order_statistics_timing.xml"></file>
+ <test name = "tree_order_statistics">
+ <file name = "tree_order_statistics.xml"></file>
<cntnr name = "n_set"></cntnr>
<cntnr name = "splay_tree_ost_set"></cntnr>
<cntnr name = "rb_tree_ost_set"></cntnr>
</test>
- <test name = "hash_random_int_erase_mem_usage_test">
- <file name = "hash_random_int_erase_mem_usage.xml"></file>
+ <test name = "hash_int_erase_mem">
+ <file name = "hash_int_erase_mem.xml"></file>
<cntnr name = "n_hash_set_ncah"></cntnr>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
</test>
- <test name = "cc_hash_random_int_subscript_timing_test_insert">
- <file name = "random_int_subscript_insert_timing.xml"></file>
+ <test name = "cc_hash_int_subscript_insert">
+ <file name = "all_int_subscript_insert.xml"></file>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "cc_hash_random_int_subscript_timing_test_find">
- <file name = "random_int_subscript_find_timing.xml"></file>
+ <test name = "cc_hash_int_subscript_find">
+ <file name = "all_int_subscript_find.xml"></file>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "gp_hash_random_int_subscript_timing_test_insert">
- <file name = "random_int_subscript_insert_timing.xml"></file>
+ <test name = "gp_hash_int_subscript_insert">
+ <file name = "all_int_subscript_insert.xml"></file>
<cntnr name = "gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "gp_hash_random_int_subscript_timing_test_find">
- <file name = "random_int_subscript_find_timing.xml"></file>
+ <test name = "gp_hash_int_subscript_find">
+ <file name = "all_int_subscript_find.xml"></file>
<cntnr name = "gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "ccgp_hash_random_int_subscript_timing_test_insert">
- <file name = "random_int_subscript_insert_timing.xml"></file>
+ <test name = "ccgp_hash_int_subscript_insert">
+ <file name = "all_int_subscript_insert.xml"></file>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "cc_hash_random_int_find_timing_test">
- <file name = "random_int_find_timing.xml"></file>
+ <test name = "cc_hash_int_find">
+ <file name = "all_int_find.xml"></file>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "gp_hash_random_int_find_timing_test">
- <file name = "random_int_find_timing.xml"></file>
+ <test name = "gp_hash_int_find">
+ <file name = "all_int_find.xml"></file>
<cntnr name = "gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "hash_zlob_random_int_find_timing_test">
- <file name = "hash_zlob_random_int_find_timing.xml"></file>
+ <test name = "hash_zlob_int_find">
+ <file name = "hash_zlob_int_find.xml"></file>
<cntnr name = "n_hash_map_ncah"></cntnr>
<cntnr name = "gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map"></cntnr>
</test>
- <test name = "text_find_timing_test_hash">
- <file name = "text_find_timing.xml"></file>
- <cntnr name = "n_hash_map_ncah"></cntnr>
+ <test name = "hash_text_find">
+ <file name = "all_text_find.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map"></cntnr>
</test>
- <test name = "text_find_timing_test_tree_like">
- <file name = "text_find_timing.xml"></file>
+ <test name = "tree_text_find">
+ <file name = "all_text_find.xml"></file>
<cntnr name = "n_map"></cntnr>
<cntnr name = "rb_tree_map"></cntnr>
<cntnr name = "splay_tree_map"></cntnr>
<cntnr name = "ov_tree_map"></cntnr>
<cntnr name = "pat_trie_map"></cntnr>
</test>
- <test name = "tree_text_insert_timing_test_node_tree">
- <file name = "tree_text_insert_timing.xml"></file>
+ <test name = "tree_text_insert_node">
+ <file name = "tree_text_insert.xml"></file>
<cntnr name = "n_map"></cntnr>
<cntnr name = "rb_tree_map"></cntnr>
<cntnr name = "splay_tree_map"></cntnr>
</test>
- <test name = "tree_text_insert_timing_test_vector_tree">
- <file name = "tree_text_insert_timing.xml"></file>
+ <test name = "tree_text_insert_vector">
+ <file name = "tree_text_insert.xml"></file>
<cntnr name = "n_map"></cntnr>
<cntnr name = "ov_tree_map"></cntnr>
</test>
- <test name = "tree_text_insert_timing_test_pat_trie">
- <file name = "tree_text_insert_timing.xml"></file>
+ <test name = "tree_text_insert_trie">
+ <file name = "tree_text_insert.xml"></file>
<cntnr name = "n_map"></cntnr>
<cntnr name = "pat_trie_map"></cntnr>
</test>
- <test name = "tree_text_lor_find_timing_test">
- <file name = "tree_text_lor_find_timing.xml"></file>
+ <test name = "tree_text_lor_find">
+ <file name = "tree_text_lor_find.xml"></file>
<cntnr name = "n_map"></cntnr>
<cntnr name = "rb_tree_map"></cntnr>
<cntnr name = "splay_tree_map"></cntnr>
<cntnr name = "ov_tree_map"></cntnr>
</test>
- <test name = "priority_queue_random_int_push_timing_test">
- <file name = "priority_queue_random_int_push_timing.xml"></file>
+ <test name = "priority_queue_int_push">
+ <file name = "priority_queue_int_push.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -132,14 +131,14 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "binary_priority_queue_random_int_push_timing_test">
- <file name = "priority_queue_random_int_push_timing.xml"></file>
+ <test name = "binary_priority_queue_int_push">
+ <file name = "priority_queue_int_push.xml"></file>
<cntnr name = "binary_heap"></cntnr>
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_random_int_push_pop_timing_test">
- <file name = "priority_queue_random_int_push_pop_timing.xml"></file>
+ <test name = "priority_queue_int_push_pop">
+ <file name = "priority_queue_int_push_pop.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -148,15 +147,15 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "binary_priority_queue_random_int_push_pop_timing_test">
- <file name = "priority_queue_random_int_push_pop_timing.xml"></file>
+ <test name = "binary_priority_queue_int_push_pop">
+ <file name = "priority_queue_int_push_pop.xml"></file>
<cntnr name = "binary_heap"></cntnr>
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_text_push_timing_test">
- <file name = "priority_queue_text_push_timing.xml"></file>
+ <test name = "priority_queue_text_push">
+ <file name = "priority_queue_text_push.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -165,15 +164,15 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "pairing_priority_queue_text_push_timing_test">
- <file name = "priority_queue_text_push_timing.xml"></file>
+ <test name = "pairing_priority_queue_text_push">
+ <file name = "priority_queue_text_push.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_text_push_pop_timing_test">
- <file name = "priority_queue_text_push_pop_timing.xml"></file>
+ <test name = "priority_queue_text_push_pop">
+ <file name = "priority_queue_text_push_pop.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -182,14 +181,14 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "pairing_priority_queue_text_push_pop_timing_test">
- <file name = "priority_queue_text_push_pop_timing.xml"></file>
+ <test name = "pairing_priority_queue_text_push_pop">
+ <file name = "priority_queue_text_push_pop.xml"></file>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_text_modify_up_timing_test">
- <file name = "priority_queue_text_modify_up_timing.xml"></file>
+ <test name = "priority_queue_text_modify_up">
+ <file name = "priority_queue_text_modify_up.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -198,8 +197,8 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_text_modify_down_timing_test">
- <file name = "priority_queue_text_modify_down_timing.xml"></file>
+ <test name = "priority_queue_text_modify_down">
+ <file name = "priority_queue_text_modify_down.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -208,18 +207,18 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_text_modify_up_timing_test_pairing_thin">
- <file name = "priority_queue_text_modify_up_timing.xml"></file>
+ <test name = "pairing_priority_queue_text_modify_up_thin">
+ <file name = "priority_queue_text_modify_up.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
</test>
- <test name = "priority_queue_text_modify_down_timing_test_pairing_thin">
- <file name = "priority_queue_text_modify_down_timing.xml"></file>
+ <test name = "pairing_priority_queue_text_modify_down_thin">
+ <file name = "priority_queue_text_modify_down.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
</test>
- <test name = "priority_queue_text_join_timing_test">
- <file name = "priority_queue_text_join_timing.xml"></file>
+ <test name = "priority_queue_text_join">
+ <file name = "priority_queue_text_join.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -228,8 +227,8 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "priority_queue_text_pop_mem_usage_test">
- <file name = "priority_queue_text_pop_mem_usage.xml"></file>
+ <test name = "priority_queue_text_pop_mem">
+ <file name = "priority_queue_text_pop_mem.xml"></file>
<cntnr name = "thin_heap"></cntnr>
<cntnr name = "pairing_heap"></cntnr>
<cntnr name = "binomial_heap"></cntnr>
@@ -238,74 +237,74 @@
<cntnr name = "n_pq_vector"></cntnr>
<cntnr name = "n_pq_deque"></cntnr>
</test>
- <test name = "multimap_text_insert_mem_usage_test_small_s2p_hash">
- <file name = "multimap_text_insert_mem_usage_small.xml"></file>
+ <test name = "multimap_text_insert_mem_small_s2p_hash">
+ <file name = "multimap_text_insert_mem_small.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_hash_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_timing_test_small_s2p_hash">
- <file name = "multimap_text_insert_timing_small.xml"></file>
+ <test name = "multimap_text_insert_small_s2p_hash">
+ <file name = "multimap_text_insert_small.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_hash_mmap"></cntnr>
</test>
- <test name = "multimap_text_find_timing_test_small_s2p_hash">
- <file name = "multimap_text_find_timing_small.xml"></file>
+ <test name = "multimap_text_find_small_s2p_hash">
+ <file name = "multimap_text_find_small.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_hash_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_mem_usage_test_large_s2p_tree">
- <file name = "multimap_text_insert_mem_usage_large.xml"></file>
+ <test name = "multimap_text_insert_mem_large_s2p_tree">
+ <file name = "multimap_text_insert_mem_large.xml"></file>
<cntnr name = "rb_tree_mmap_lu_mtf_set"></cntnr>
<cntnr name = "rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_timing_test_large_s2p_tree">
- <file name = "multimap_text_insert_timing_large.xml"></file>
+ <test name = "multimap_text_insert_large_s2p_tree">
+ <file name = "multimap_text_insert_large.xml"></file>
<cntnr name = "rb_tree_mmap_lu_mtf_set"></cntnr>
<cntnr name = "rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_mmap"></cntnr>
</test>
- <test name = "multimap_text_find_timing_test_large_s2p_tree">
- <file name = "multimap_text_find_timing_large.xml"></file>
+ <test name = "multimap_text_find_large_s2p_tree">
+ <file name = "multimap_text_find_large.xml"></file>
<cntnr name = "rb_tree_mmap_lu_mtf_set"></cntnr>
<cntnr name = "rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_mem_usage_test_large_s2p_hash">
- <file name = "multimap_text_insert_mem_usage_large.xml"></file>
+ <test name = "multimap_text_insert_mem_large_s2p_hash">
+ <file name = "multimap_text_insert_mem_large.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_hash_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_timing_test_large_s2p_hash">
- <file name = "multimap_text_insert_timing_large.xml"></file>
+ <test name = "multimap_text_insert_large_s2p_hash">
+ <file name = "multimap_text_insert_large.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_hash_mmap"></cntnr>
</test>
- <test name = "multimap_text_find_timing_test_large_s2p_hash">
- <file name = "multimap_text_find_timing_large.xml"></file>
+ <test name = "multimap_text_find_large_s2p_hash">
+ <file name = "multimap_text_find_large.xml"></file>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set"></cntnr>
<cntnr name = "cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_hash_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_mem_usage_test_small_s2p_tree">
- <file name = "multimap_text_insert_mem_usage_small.xml"></file>
+ <test name = "multimap_text_insert_mem_small_s2p_tree">
+ <file name = "multimap_text_insert_mem_small.xml"></file>
<cntnr name = "rb_tree_mmap_lu_mtf_set"></cntnr>
<cntnr name = "rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_mmap"></cntnr>
</test>
- <test name = "multimap_text_insert_timing_test_small_s2p_tree">
- <file name = "multimap_text_insert_timing_small.xml"></file>
+ <test name = "multimap_text_insert_small_s2p_tree">
+ <file name = "multimap_text_insert_small.xml"></file>
<cntnr name = "rb_tree_mmap_lu_mtf_set"></cntnr>
<cntnr name = "rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_mmap"></cntnr>
</test>
- <test name = "multimap_text_find_timing_test_small_s2p_tree">
- <file name = "multimap_text_find_timing_small.xml"></file>
+ <test name = "multimap_text_find_small_s2p_tree">
+ <file name = "multimap_text_find_small.xml"></file>
<cntnr name = "rb_tree_mmap_lu_mtf_set"></cntnr>
<cntnr name = "rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set"></cntnr>
<cntnr name = "n_mmap"></cntnr>
diff --git a/libstdc++-v3/testsuite/decimal/mixed-mode-arith_neg.cc b/libstdc++-v3/testsuite/decimal/mixed-mode-arith_neg.cc
new file mode 100644
index 0000000000..afdc0382cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/decimal/mixed-mode-arith_neg.cc
@@ -0,0 +1,139 @@
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+// { dg-require-effective-target dfp }
+
+// Test that binary arithmetic operators do not accept mixed decimal
+// and generic floating-point operands. This isn't explicity
+// prohibited in ISO/IEC TR 24733 but it is prohibited in C, and in C++
+// there should not be an implicit conversion from a decimal
+// floating-point type to a generic floating-point type.
+
+#include <decimal/decimal>
+#include <testsuite_hooks.h>
+
+using namespace std::decimal;
+
+decimal32 a32, b32, c32;
+decimal64 a64, b64, c64;
+decimal128 a128, b128, c128;
+float f;
+double d;
+long double ld;
+bool b1, b2, b3, b4, b5, b6;
+
+void
+bad_add (void)
+{
+ a32 = b32 + f; // { dg-error "error" }
+ a32 = ld + b32; // { dg-error "error" }
+ a64 = b64 + d; // { dg-error "error" }
+ a64 = ld + b64; // { dg-error "error" }
+ a128 = b128 + ld; // { dg-error "error" }
+ a128 = d + b128; // { dg-error "error" }
+}
+
+void
+bad_subtract (void)
+{
+ a32 = b32 - f; // { dg-error "error" }
+ a32 = ld - b32; // { dg-error "error" }
+ a64 = b64 - d; // { dg-error "error" }
+ a64 = ld - b64; // { dg-error "error" }
+ a128 = b128 - ld; // { dg-error "error" }
+ a128 = d - b128; // { dg-error "error" }
+}
+
+void
+bad_multiply (void)
+{
+ a32 = b32 * f; // { dg-error "error" }
+ a32 = ld * b32; // { dg-error "error" }
+ a64 = b64 * d; // { dg-error "error" }
+ a64 = ld * b64; // { dg-error "error" }
+ a128 = b128 * ld; // { dg-error "error" }
+ a128 = d * b128; // { dg-error "error" }
+}
+
+void
+bad_divide (void)
+{
+ a32 = b32 / f; // { dg-error "error" }
+ a32 = ld / b32; // { dg-error "error" }
+ a64 = b64 / d; // { dg-error "error" }
+ a64 = ld / b64; // { dg-error "error" }
+ a128 = b128 / ld; // { dg-error "error" }
+ a128 = d / b128; // { dg-error "error" }
+}
+
+void
+bad_pluseq (void)
+{
+ a32 += f; // { dg-error "error" }
+ a32 += d; // { dg-error "error" }
+ a32 += ld; // { dg-error "error" }
+ a64 += f; // { dg-error "error" }
+ a64 += d; // { dg-error "error" }
+ a64 += ld; // { dg-error "error" }
+ a128 += f; // { dg-error "error" }
+ a128 += d; // { dg-error "error" }
+ a128 += ld; // { dg-error "error" }
+}
+
+void
+bad_minuseq (void)
+{
+ a32 -= f; // { dg-error "error" }
+ a32 -= d; // { dg-error "error" }
+ a32 -= ld; // { dg-error "error" }
+ a64 -= f; // { dg-error "error" }
+ a64 -= d; // { dg-error "error" }
+ a64 -= ld; // { dg-error "error" }
+ a128 -= f; // { dg-error "error" }
+ a128 -= d; // { dg-error "error" }
+ a128 -= ld; // { dg-error "error" }
+}
+
+void
+bad_timeseq (void)
+{
+ a32 *= f; // { dg-error "error" }
+ a32 *= d; // { dg-error "error" }
+ a32 *= ld; // { dg-error "error" }
+ a64 *= f; // { dg-error "error" }
+ a64 *= d; // { dg-error "error" }
+ a64 *= ld; // { dg-error "error" }
+ a128 *= f; // { dg-error "error" }
+ a128 *= d; // { dg-error "error" }
+ a128 *= ld; // { dg-error "error" }
+}
+
+void
+bad_divideeq (void)
+{
+ a32 /= f; // { dg-error "error" }
+ a32 /= d; // { dg-error "error" }
+ a32 /= ld; // { dg-error "error" }
+ a64 /= f; // { dg-error "error" }
+ a64 /= d; // { dg-error "error" }
+ a64 /= ld; // { dg-error "error" }
+ a128 /= f; // { dg-error "error" }
+ a128 /= d; // { dg-error "error" }
+ a128 /= ld; // { dg-error "error" }
+}
+
diff --git a/libstdc++-v3/testsuite/decimal/mixed-mode-cmp_neg.cc b/libstdc++-v3/testsuite/decimal/mixed-mode-cmp_neg.cc
new file mode 100644
index 0000000000..5ff9a71a7e
--- /dev/null
+++ b/libstdc++-v3/testsuite/decimal/mixed-mode-cmp_neg.cc
@@ -0,0 +1,105 @@
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+// { dg-require-effective-target dfp }
+
+// Test that binary comparison operators do not accept mixed decimal
+// and generic floating-point operands. This isn't explicity prohibited
+// in ISO/IEC TR 24733 but it is prohibited in C, and in C++ there should
+// not be an implicit conversion from a decimal floating-point type to a
+// generic floating-point type.
+
+#include <decimal/decimal>
+#include <testsuite_hooks.h>
+
+using namespace std::decimal;
+
+decimal32 a32, b32, c32;
+decimal64 a64, b64, c64;
+decimal128 a128, b128, c128;
+float f;
+double d;
+long double ld;
+bool b1, b2, b3, b4, b5, b6;
+
+void
+bad_eq (void)
+{
+ b1 = b32 == f; // { dg-error "error" }
+ b2 = ld == b32; // { dg-error "error" }
+ b3 = b64 == d; // { dg-error "error" }
+ b4 = ld == b64; // { dg-error "error" }
+ b5 = b128 == ld; // { dg-error "error" }
+ b6 = d == b128; // { dg-error "error" }
+}
+
+void
+bad_ne (void)
+{
+ b1 = b32 != f; // { dg-error "error" }
+ b2 = ld != b32; // { dg-error "error" }
+ b3 = b64 != d; // { dg-error "error" }
+ b4 = ld != b64; // { dg-error "error" }
+ b5 = b128 != ld; // { dg-error "error" }
+ b6 = d != b128; // { dg-error "error" }
+}
+
+void
+bad_lt (void)
+{
+ b1 = b32 < f; // { dg-error "error" }
+ b2 = ld < b32; // { dg-error "error" }
+ b3 = b64 < d; // { dg-error "error" }
+ b4 = ld < b64; // { dg-error "error" }
+ b5 = b128 < ld; // { dg-error "error" }
+ b6 = d < b128; // { dg-error "error" }
+}
+
+void
+bad_le (void)
+{
+ b1 = b32 <= f; // { dg-error "error" }
+ b2 = ld <= b32; // { dg-error "error" }
+ b3 = b64 <= d; // { dg-error "error" }
+ b4 = ld <= b64; // { dg-error "error" }
+ b5 = b128 <= ld; // { dg-error "error" }
+ b6 = d <= b128; // { dg-error "error" }
+}
+
+void
+bad_gt (void)
+{
+ b1 = b32 > f; // { dg-error "error" }
+ b2 = ld > b32; // { dg-error "error" }
+ b3 = b64 > d; // { dg-error "error" }
+ b4 = ld > b64; // { dg-error "error" }
+ b5 = b128 > ld; // { dg-error "error" }
+ b6 = d > b128; // { dg-error "error" }
+}
+
+void
+bad_ge (void)
+{
+ b1 = b32 >= f; // { dg-error "error" }
+ b2 = ld >= b32; // { dg-error "error" }
+ b3 = b64 >= d; // { dg-error "error" }
+ b4 = ld >= b64; // { dg-error "error" }
+ b5 = b128 >= ld; // { dg-error "error" }
+ b6 = d >= b128; // { dg-error "error" }
+}
+
diff --git a/libstdc++-v3/testsuite/decimal/mixed-mode_neg.cc b/libstdc++-v3/testsuite/decimal/mixed-mode_neg.cc
deleted file mode 100644
index 7f9da43ed4..0000000000
--- a/libstdc++-v3/testsuite/decimal/mixed-mode_neg.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (C) 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// { dg-do compile }
-// { dg-require-effective-target dfp }
-
-// Test that binary operators do not accept mixed decimal and generic
-// floating-point operands. This isn't explicity prohibited in
-// ISO/IEC TR 24733 but it is prohibited in C, and in C++ there should
-// not be an implicit conversion from a decimal floating-point type to
-// a generic floating-point type.
-
-#include <decimal/decimal>
-#include <testsuite_hooks.h>
-
-using namespace std::decimal;
-
-decimal32 a32, b32, c32;
-decimal64 a64, b64, c64;
-decimal128 a128, b128, c128;
-float f;
-double d;
-long double ld;
-bool b1, b2, b3, b4, b5, b6;
-
-void
-bad_add (void)
-{
- a32 = b32 + f; // { dg-error "error" }
- a32 = ld + b32; // { dg-error "error" }
- a64 = b64 + d; // { dg-error "error" }
- a64 = ld + b64; // { dg-error "error" }
- a128 = b128 + ld; // { dg-error "error" }
- a128 = d + b128; // { dg-error "error" }
-}
-
-void
-bad_subtract (void)
-{
- a32 = b32 - f; // { dg-error "error" }
- a32 = ld - b32; // { dg-error "error" }
- a64 = b64 - d; // { dg-error "error" }
- a64 = ld - b64; // { dg-error "error" }
- a128 = b128 - ld; // { dg-error "error" }
- a128 = d - b128; // { dg-error "error" }
-}
-
-void
-bad_multiply (void)
-{
- a32 = b32 * f; // { dg-error "error" }
- a32 = ld * b32; // { dg-error "error" }
- a64 = b64 * d; // { dg-error "error" }
- a64 = ld * b64; // { dg-error "error" }
- a128 = b128 * ld; // { dg-error "error" }
- a128 = d * b128; // { dg-error "error" }
-}
-
-void
-bad_divide (void)
-{
- a32 = b32 / f; // { dg-error "error" }
- a32 = ld / b32; // { dg-error "error" }
- a64 = b64 / d; // { dg-error "error" }
- a64 = ld / b64; // { dg-error "error" }
- a128 = b128 / ld; // { dg-error "error" }
- a128 = d / b128; // { dg-error "error" }
-}
-
-void
-bad_eq (void)
-{
- b1 = b32 == f; // { dg-error "error" }
- b2 = ld == b32; // { dg-error "error" }
- b3 = b64 == d; // { dg-error "error" }
- b4 = ld == b64; // { dg-error "error" }
- b5 = b128 == ld; // { dg-error "error" }
- b6 = d == b128; // { dg-error "error" }
-}
-
-void
-bad_ne (void)
-{
- b1 = b32 != f; // { dg-error "error" }
- b2 = ld != b32; // { dg-error "error" }
- b3 = b64 != d; // { dg-error "error" }
- b4 = ld != b64; // { dg-error "error" }
- b5 = b128 != ld; // { dg-error "error" }
- b6 = d != b128; // { dg-error "error" }
-}
-
-void
-bad_lt (void)
-{
- b1 = b32 < f; // { dg-error "error" }
- b2 = ld < b32; // { dg-error "error" }
- b3 = b64 < d; // { dg-error "error" }
- b4 = ld < b64; // { dg-error "error" }
- b5 = b128 < ld; // { dg-error "error" }
- b6 = d < b128; // { dg-error "error" }
-}
-
-void
-bad_le (void)
-{
- b1 = b32 <= f; // { dg-error "error" }
- b2 = ld <= b32; // { dg-error "error" }
- b3 = b64 <= d; // { dg-error "error" }
- b4 = ld <= b64; // { dg-error "error" }
- b5 = b128 <= ld; // { dg-error "error" }
- b6 = d <= b128; // { dg-error "error" }
-}
-
-void
-bad_gt (void)
-{
- b1 = b32 > f; // { dg-error "error" }
- b2 = ld > b32; // { dg-error "error" }
- b3 = b64 > d; // { dg-error "error" }
- b4 = ld > b64; // { dg-error "error" }
- b5 = b128 > ld; // { dg-error "error" }
- b6 = d > b128; // { dg-error "error" }
-}
-
-void
-bad_ge (void)
-{
- b1 = b32 >= f; // { dg-error "error" }
- b2 = ld >= b32; // { dg-error "error" }
- b3 = b64 >= d; // { dg-error "error" }
- b4 = ld >= b64; // { dg-error "error" }
- b5 = b128 >= ld; // { dg-error "error" }
- b6 = d >= b128; // { dg-error "error" }
-}
-
-void
-bad_pluseq (void)
-{
- a32 += f; // { dg-error "error" }
- a32 += d; // { dg-error "error" }
- a32 += ld; // { dg-error "error" }
- a64 += f; // { dg-error "error" }
- a64 += d; // { dg-error "error" }
- a64 += ld; // { dg-error "error" }
- a128 += f; // { dg-error "error" }
- a128 += d; // { dg-error "error" }
- a128 += ld; // { dg-error "error" }
-}
-
-void
-bad_minuseq (void)
-{
- a32 -= f; // { dg-error "error" }
- a32 -= d; // { dg-error "error" }
- a32 -= ld; // { dg-error "error" }
- a64 -= f; // { dg-error "error" }
- a64 -= d; // { dg-error "error" }
- a64 -= ld; // { dg-error "error" }
- a128 -= f; // { dg-error "error" }
- a128 -= d; // { dg-error "error" }
- a128 -= ld; // { dg-error "error" }
-}
-
-void
-bad_timeseq (void)
-{
- a32 *= f; // { dg-error "error" }
- a32 *= d; // { dg-error "error" }
- a32 *= ld; // { dg-error "error" }
- a64 *= f; // { dg-error "error" }
- a64 *= d; // { dg-error "error" }
- a64 *= ld; // { dg-error "error" }
- a128 *= f; // { dg-error "error" }
- a128 *= d; // { dg-error "error" }
- a128 *= ld; // { dg-error "error" }
-}
-
-void
-bad_divideeq (void)
-{
- a32 /= f; // { dg-error "error" }
- a32 /= d; // { dg-error "error" }
- a32 /= ld; // { dg-error "error" }
- a64 /= f; // { dg-error "error" }
- a64 /= d; // { dg-error "error" }
- a64 /= ld; // { dg-error "error" }
- a128 /= f; // { dg-error "error" }
- a128 /= d; // { dg-error "error" }
- a128 /= ld; // { dg-error "error" }
-}
-
-// { dg-excess-errors "notes about candidates" }
diff --git a/libstdc++-v3/testsuite/decimal/operator_neg.cc b/libstdc++-v3/testsuite/decimal/operator_neg.cc
index fff81d1c06..d1db024d96 100644
--- a/libstdc++-v3/testsuite/decimal/operator_neg.cc
+++ b/libstdc++-v3/testsuite/decimal/operator_neg.cc
@@ -157,4 +157,3 @@ logical_not (void)
a128 = !b128; // { dg-error "error" }
}
-// { dg-excess-errors "" { target *-*-* } }
diff --git a/libstdc++-v3/testsuite/decimal/pr54036-1.cc b/libstdc++-v3/testsuite/decimal/pr54036-1.cc
new file mode 100644
index 0000000000..8514ab05cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/decimal/pr54036-1.cc
@@ -0,0 +1,70 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-require-effective-target dfp }
+
+#include <decimal/decimal>
+#include <testsuite_hooks.h>
+
+using namespace std::decimal;
+
+decimal32
+__attribute__ ((noinline))
+my_nan32 (void)
+{
+ decimal32 z = 0;
+ decimal32 v = z/z;
+ return v;
+}
+
+decimal32
+__attribute__ ((noinline))
+my_inf32 (void)
+{
+ decimal32 o = 1;
+ decimal32 z = 0;
+ decimal32 v = o/z;
+ return v;
+}
+
+int
+main ()
+{
+ decimal32 v;
+
+ v = my_nan32 ();
+
+ VERIFY (__builtin_isnand32 (v.__getval ()));
+ VERIFY (!__builtin_signbitd32 (v.__getval ()));
+
+ v = -v;
+
+ VERIFY (__builtin_isnand32 (v.__getval ()));
+ VERIFY (__builtin_signbitd32 (v.__getval ()));
+
+ v = my_inf32 ();
+
+ VERIFY (__builtin_isinfd32 (v.__getval ()));
+ VERIFY (!__builtin_signbitd32 (v.__getval ()));
+
+ v = -v;
+
+ VERIFY (__builtin_isinfd32 (v.__getval ()));
+ VERIFY (__builtin_signbitd32 (v.__getval ()));
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/decimal/pr54036-2.cc b/libstdc++-v3/testsuite/decimal/pr54036-2.cc
new file mode 100644
index 0000000000..2a625d6884
--- /dev/null
+++ b/libstdc++-v3/testsuite/decimal/pr54036-2.cc
@@ -0,0 +1,70 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-require-effective-target dfp }
+
+#include <decimal/decimal>
+#include <testsuite_hooks.h>
+
+using namespace std::decimal;
+
+decimal64
+__attribute__ ((noinline))
+my_nan64 (void)
+{
+ decimal64 z = 0;
+ decimal64 v = z/z;
+ return v;
+}
+
+decimal64
+__attribute__ ((noinline))
+my_inf64 (void)
+{
+ decimal64 o = 1;
+ decimal64 z = 0;
+ decimal64 v = o/z;
+ return v;
+}
+
+int
+main ()
+{
+ decimal64 v;
+
+ v = my_nan64 ();
+
+ VERIFY (__builtin_isnand64 (v.__getval ()));
+ VERIFY (!__builtin_signbitd64 (v.__getval ()));
+
+ v = -v;
+
+ VERIFY (__builtin_isnand64 (v.__getval ()));
+ VERIFY (__builtin_signbitd64 (v.__getval ()));
+
+ v = my_inf64 ();
+
+ VERIFY (__builtin_isinfd64 (v.__getval ()));
+ VERIFY (!__builtin_signbitd64 (v.__getval ()));
+
+ v = -v;
+
+ VERIFY (__builtin_isinfd64 (v.__getval ()));
+ VERIFY (__builtin_signbitd64 (v.__getval ()));
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/decimal/pr54036-3.cc b/libstdc++-v3/testsuite/decimal/pr54036-3.cc
new file mode 100644
index 0000000000..0d74446623
--- /dev/null
+++ b/libstdc++-v3/testsuite/decimal/pr54036-3.cc
@@ -0,0 +1,70 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-require-effective-target dfp }
+
+#include <decimal/decimal>
+#include <testsuite_hooks.h>
+
+using namespace std::decimal;
+
+decimal128
+__attribute__ ((noinline))
+my_nan128 (void)
+{
+ decimal128 z = 0;
+ decimal128 v = z/z;
+ return v;
+}
+
+decimal128
+__attribute__ ((noinline))
+my_inf128 (void)
+{
+ decimal128 o = 1;
+ decimal128 z = 0;
+ decimal128 v = o/z;
+ return v;
+}
+
+int
+main ()
+{
+ decimal128 v;
+
+ v = my_nan128 ();
+
+ VERIFY (__builtin_isnand128 (v.__getval ()));
+ VERIFY (!__builtin_signbitd128 (v.__getval ()));
+
+ v = -v;
+
+ VERIFY (__builtin_isnand128 (v.__getval ()));
+ VERIFY (__builtin_signbitd128 (v.__getval ()));
+
+ v = my_inf128 ();
+
+ VERIFY (__builtin_isinfd128 (v.__getval ()));
+ VERIFY (!__builtin_signbitd128 (v.__getval ()));
+
+ v = -v;
+
+ VERIFY (__builtin_isinfd128 (v.__getval ()));
+ VERIFY (__builtin_signbitd128 (v.__getval ()));
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/codecvt/char-1.cc b/libstdc++-v3/testsuite/ext/codecvt/char-1.cc
index 733dff8a07..8e0d56f55a 100644
--- a/libstdc++-v3/testsuite/ext/codecvt/char-1.cc
+++ b/libstdc++-v3/testsuite/ext/codecvt/char-1.cc
@@ -4,6 +4,7 @@
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// 2010, 2011
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -69,10 +70,14 @@ void test01()
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
{
- 0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20,
- 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20,
- 0x00, 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e,
- 0x00, 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0
+ char(0x00), char(0x62), char(0x00), char(0x6c), char(0x00), char(0x61),
+ char(0x00), char(0x63), char(0x00), char(0x6b), char(0x00), char(0x20),
+ char(0x00), char(0x70), char(0x00), char(0x65), char(0x00), char(0x61),
+ char(0x00), char(0x72), char(0x00), char(0x6c), char(0x00), char(0x20),
+ char(0x00), char(0x6a), char(0x00), char(0x61), char(0x00), char(0x73),
+ char(0x00), char(0x6d), char(0x00), char(0x69), char(0x00), char(0x6e),
+ char(0x00), char(0x65), char(0x00), char(0x20), char(0x00), char(0x74),
+ char(0x00), char(0x65), char(0x00), char(0x61), char(0x00), char(0xa0)
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
diff --git a/libstdc++-v3/testsuite/ext/codecvt/char-2.cc b/libstdc++-v3/testsuite/ext/codecvt/char-2.cc
index b6bfde01e8..81c42e25f0 100644
--- a/libstdc++-v3/testsuite/ext/codecvt/char-2.cc
+++ b/libstdc++-v3/testsuite/ext/codecvt/char-2.cc
@@ -4,6 +4,7 @@
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// 2010, 2011
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -69,10 +70,14 @@ void test02()
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
{
- 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00,
- 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20, 0x00,
- 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00,
- 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0, 0x00
+ char(0x62), char(0x00), char(0x6c), char(0x00), char(0x61), char(0x00),
+ char(0x63), char(0x00), char(0x6b), char(0x00), char(0x20), char(0x00),
+ char(0x70), char(0x00), char(0x65), char(0x00), char(0x61), char(0x00),
+ char(0x72), char(0x00), char(0x6c), char(0x00), char(0x20), char(0x00),
+ char(0x6a), char(0x00), char(0x61), char(0x00), char(0x73), char(0x00),
+ char(0x6d), char(0x00), char(0x69), char(0x00), char(0x6e), char(0x00),
+ char(0x65), char(0x00), char(0x20), char(0x00), char(0x74), char(0x00),
+ char(0x65), char(0x00), char(0x61), char(0x00), char(0xa0), char(0x00)
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
diff --git a/libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc b/libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc
index 4040f876b1..ae8e47be12 100644
--- a/libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc
+++ b/libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc
@@ -3,7 +3,8 @@
// 2000-08-23 Benjamin Kosnik <bkoz@cygnus.com>
-// Copyright (C) 2000, 2001, 2002, 2003, 2007, 2009 Free Software Foundation
+// Copyright (C) 2000, 2001, 2002, 2003, 2007, 2009, 2010, 2011
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -43,23 +44,35 @@ void test01()
int size = 23;
char e_lit_base[96] __attribute__((aligned(__alignof__(ext_type)))) =
{
- 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x61,
- 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61,
- 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x73,
- 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6e,
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x74,
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0xa0
+ char(0x00), char(0x00), char(0x00), char(0x62), char(0x00), char(0x00),
+ char(0x00), char(0x6c), char(0x00), char(0x00), char(0x00), char(0x61),
+ char(0x00), char(0x00), char(0x00), char(0x63), char(0x00), char(0x00),
+ char(0x00), char(0x6b), char(0x00), char(0x00), char(0x00), char(0x20),
+ char(0x00), char(0x00), char(0x00), char(0x70), char(0x00), char(0x00),
+ char(0x00), char(0x65), char(0x00), char(0x00), char(0x00), char(0x61),
+ char(0x00), char(0x00), char(0x00), char(0x72), char(0x00), char(0x00),
+ char(0x00), char(0x6c), char(0x00), char(0x00), char(0x00), char(0x20),
+ char(0x00), char(0x00), char(0x00), char(0x6a), char(0x00), char(0x00),
+ char(0x00), char(0x61), char(0x00), char(0x00), char(0x00), char(0x73),
+ char(0x00), char(0x00), char(0x00), char(0x6d), char(0x00), char(0x00),
+ char(0x00), char(0x69), char(0x00), char(0x00), char(0x00), char(0x6e),
+ char(0x00), char(0x00), char(0x00), char(0x65), char(0x00), char(0x00),
+ char(0x00), char(0x20), char(0x00), char(0x00), char(0x00), char(0x74),
+ char(0x00), char(0x00), char(0x00), char(0x65), char(0x00), char(0x00),
+ char(0x00), char(0x61), char(0x00), char(0x00), char(0x00), char(0xa0)
};
const ext_type* e_lit = reinterpret_cast<ext_type*>(e_lit_base);
char i_lit_base[48] __attribute__((aligned(__alignof__(int_type)))) =
{
- 0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20,
- 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20,
- 0x00, 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e,
- 0x00, 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0
+ char(0x00), char(0x62), char(0x00), char(0x6c), char(0x00), char(0x61),
+ char(0x00), char(0x63), char(0x00), char(0x6b), char(0x00), char(0x20),
+ char(0x00), char(0x70), char(0x00), char(0x65), char(0x00), char(0x61),
+ char(0x00), char(0x72), char(0x00), char(0x6c), char(0x00), char(0x20),
+ char(0x00), char(0x6a), char(0x00), char(0x61), char(0x00), char(0x73),
+ char(0x00), char(0x6d), char(0x00), char(0x69), char(0x00), char(0x6e),
+ char(0x00), char(0x65), char(0x00), char(0x20), char(0x00), char(0x74),
+ char(0x00), char(0x65), char(0x00), char(0x61), char(0x00), char(0xa0)
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
diff --git a/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc b/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
index 0ceb9a6597..c87e35de0f 100644
--- a/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
+++ b/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
@@ -54,16 +54,16 @@ void test01(void) {
A_pointer aptr( &a );
// Can't implicitly cast from A* to B*
- B_pointer bptr1(aptr); // { dg-error "instantiated from here" 31 }
- B_pointer bptr2(&a); // { dg-error "instantiated from here" 32 }
+ B_pointer bptr1(aptr); // { dg-error "required from here" 31 }
+ B_pointer bptr2(&a); // { dg-error "required from here" 32 }
// but explicit cast/conversion is OK.
B_pointer bptr3(__static_pointer_cast<B_pointer>(aptr)); // ok
B_pointer bptr4(__static_pointer_cast<B_pointer>(&a)); // ok
// Can't implicitly cast from A* to B*
- bptr1 = aptr; // { dg-error "instantiated from here" 39 }
- bptr1 = &a; // { dg-error "instantiated from here" 40 }
+ bptr1 = aptr; // { dg-error "required from here" 39 }
+ bptr1 = &a; // { dg-error "required from here" 40 }
// but explicit cast/conversion is OK.
bptr1 = __static_pointer_cast<B_pointer>(aptr); // ok
@@ -71,21 +71,21 @@ void test01(void) {
// Similarly, can't shed constness via implicit cast
const_A_pointer captr(&a);
- A_pointer aptr2(captr); // { dg-error "instantiated from here" 48 }
+ A_pointer aptr2(captr); // { dg-error "required from here" 48 }
// but explicit cast/conversion is OK.
A_pointer aptr3(__const_pointer_cast<A_pointer>(captr)); // ok
// Similarly, can't shed constness via implicit cast
- aptr2 = captr; // { dg-error "instantiated from here" 54 }
+ aptr2 = captr; // { dg-error "required from here" 54 }
// but explicit cast/conversion is OK.
aptr3 = __const_pointer_cast<A_pointer>(captr); // ok
// Combine explicit const cast with implicit downcast.
const_B_pointer cbptr(&b);
- A_pointer aptr4(cbptr); // { dg-error "instantiated from here" 61 }
- aptr4 = cbptr; // { dg-error "instantiated from here" 62 }
+ A_pointer aptr4(cbptr); // { dg-error "required from here" 61 }
+ aptr4 = cbptr; // { dg-error "required from here" 62 }
A_pointer aptr5(__const_pointer_cast<B_pointer>(cbptr)); // ok
aptr5 = __const_pointer_cast<B_pointer>(cbptr); // ok
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc
index bdc423a26b..ba593f2354 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc
@@ -123,7 +123,7 @@ int main()
acc["a"][160] = 142;
// Verify the number of accounts that "a" holds.
- accounts_t::const_point_iterator it = acc.find("a");
+ accounts_t::point_const_iterator it = acc.find("a");
assert(it != acc.end());
assert(it->second.size() == 2);
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc
index 24ebe2e289..b516bb7853 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -62,7 +62,7 @@ some_op_sequence(Cntnr& r_c)
typedef typename Cntnr::const_iterator const_iterator;
for (const_iterator it = r_c.begin(); it != r_c.end(); ++it)
- cout <<* it << endl;
+ cout << *it << endl;
assert(!r_c.empty());
assert(r_c.size() == 10);
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc
index 3d2cf14db3..07c74e6430 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc
@@ -80,19 +80,19 @@ int main()
{
{
// Perform operations on a collision-chaining hash set.
- cc_hash_table<int, null_mapped_type> c;
+ cc_hash_table<int, null_type> c;
some_op_sequence(c);
}
{
// Perform operations on a general-probing hash set.
- gp_hash_table<int, null_mapped_type> c;
+ gp_hash_table<int, null_type> c;
some_op_sequence(c);
}
{
// Perform operations on a red-black tree set.
- tree<int, null_mapped_type> c;
+ tree<int, null_type> c;
some_op_sequence(c);
}
@@ -100,7 +100,7 @@ int main()
// Perform operations on a splay tree set.
tree<
int,
- null_mapped_type,
+ null_type,
less<int>,
splay_tree_tag> c;
some_op_sequence(c);
@@ -110,7 +110,7 @@ int main()
// Perform operations on a splay tree set.
tree<
int,
- null_mapped_type,
+ null_type,
less<int>,
ov_tree_tag> c;
some_op_sequence(c);
@@ -118,7 +118,7 @@ int main()
{
// Perform operations on a list-update set.
- list_update<int, null_mapped_type> c;
+ list_update<int, null_type> c;
some_op_sequence(c);
}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
index 9577dfbc03..e4c922af4f 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
@@ -1,7 +1,8 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -57,7 +58,7 @@ int main()
// The following line won't compile. The resize policy needs to be
// configured to allow external resize (by default, this is not
// available).
- h.resize(20); // { dg-error "instantiated from" }
+ h.resize(20); // { dg-error "required from" }
}
-// { dg-error "invalid" "" { target *-*-* } 187 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc
index e9f33b1130..e752242faf 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc
@@ -125,8 +125,8 @@ main()
typedef
cc_hash_table<
string,
- null_mapped_type,
- null_hash_fn,
+ null_type,
+ null_type,
equal_to<string>,
simple_string_ranged_hash_fn>
set_t;
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc
index 406ab8e0c1..a29756fd05 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc
@@ -71,10 +71,10 @@ typedef pair< unsigned int, unsigned int> interval;
// Functor updating maximal endpoints of entries. Algorithm taken from
// "Introduction to Algorithms" by Cormen, Leiserson, and Rivest.
-template<class Const_Node_Iterator,
- class Node_Iterator,
+template<class Node_CItr,
+ class Node_Itr,
class Cmp_Fn,
- class Allocator>
+ typename _Alloc>
struct intervals_node_update
{
public:
@@ -88,8 +88,8 @@ public:
bool
overlaps(const interval& r_interval)
{
- Const_Node_Iterator nd_it = node_begin();
- Const_Node_Iterator end_it = node_end();
+ Node_CItr nd_it = node_begin();
+ Node_CItr end_it = node_end();
while (nd_it != end_it)
{
@@ -99,7 +99,7 @@ public:
return true;
// Get the const node iterator of the node's left child.
- Const_Node_Iterator l_nd_it = nd_it.get_l_child();
+ Node_CItr l_nd_it = nd_it.get_l_child();
// Calculate the maximal endpoint of the left child. If the
// node has no left child, then this is the node's maximal
@@ -122,7 +122,7 @@ protected:
// updated; end_nd_it is a const node iterator to a just-after leaf
// node.
inline void
- operator()(Node_Iterator nd_it, Const_Node_Iterator end_nd_it)
+ operator()(Node_Itr nd_it, Node_CItr end_nd_it)
{
// The left maximal endpoint is 0 if there is no left child.
const unsigned int l_max_endpoint =(nd_it.get_l_child() == end_nd_it)?
@@ -138,10 +138,10 @@ protected:
max((*nd_it)->second, max<unsigned int>(l_max_endpoint, r_max_endpoint));
}
- virtual Const_Node_Iterator
+ virtual Node_CItr
node_begin() const = 0;
- virtual Const_Node_Iterator
+ virtual Node_CItr
node_end() const = 0;
virtual
@@ -186,7 +186,7 @@ int main()
// Test a red-black tree.
some_op_sequence(tree<
interval,
- null_mapped_type,
+ null_type,
less<interval>,
rb_tree_tag,
intervals_node_update>());
@@ -194,7 +194,7 @@ int main()
// Test an ordered-vector tree.
some_op_sequence(tree<
interval,
- null_mapped_type,
+ null_type,
less<interval>,
ov_tree_tag,
intervals_node_update>());
@@ -202,7 +202,7 @@ int main()
// Test a splay tree.
some_op_sequence(tree<
interval,
- null_mapped_type,
+ null_type,
less<interval>,
splay_tree_tag,
intervals_node_update>());
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc
index 584574030b..68ef8b7438 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc
@@ -57,7 +57,7 @@ using namespace __gnu_pbds;
typedef
tree<
int,
- null_mapped_type,
+ null_type,
less<int>,
rb_tree_tag,
// This policy updates nodes' metadata for order statistics.
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
index 28c895680e..06ae5399cc 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
@@ -53,12 +53,12 @@ using namespace __gnu_pbds;
typedef string dna_t;
// Following is an element access traits for a DNA string.
-struct dna_string_e_access_traits
+struct dna_string_access_traits
{
public:
typedef size_t size_type;
typedef dna_t key_type;
- typedef const key_type& const_key_reference;
+ typedef const key_type& key_const_reference;
typedef char e_type;
typedef string::const_iterator const_iterator;
@@ -70,12 +70,12 @@ public:
// Returns a const_iterator to the firstelement of r_key.
inline static const_iterator
- begin(const_key_reference r_key)
+ begin(key_const_reference r_key)
{ return r_key.begin(); }
// Returns a const_iterator to the after-lastelement of r_key.
inline static const_iterator
- end(const_key_reference r_key)
+ end(key_const_reference r_key)
{ return r_key.end(); }
// Maps an element to a position.
@@ -99,7 +99,7 @@ public:
};
// A PATRICIA trie with DNA string element-access traits.
-typedef dna_string_e_access_traits traits_type;
+typedef dna_string_access_traits traits_type;
typedef trie<dna_t, string, traits_type> trie_type;
int main()
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc
index 98b99a76ab..09e025aff7 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc
@@ -52,8 +52,8 @@ using namespace __gnu_pbds;
// A PATRICIA trie with a prefix-search node-updator type. Note that
// since the node updator is trie_prefix_search_node_update, then the
// container includes its method prefix_range.
-typedef null_mapped_type mapped_type;
-typedef string_trie_e_access_traits<> cmp_fn;
+typedef null_type mapped_type;
+typedef trie_string_access_traits<> cmp_fn;
typedef pat_trie_tag tag_type;
typedef trie<string, mapped_type, cmp_fn, tag_type,
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc
index 5656a5b299..5656a5b299 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc
new file mode 100644
index 0000000000..65d9c11ac5
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc
@@ -0,0 +1,189 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file hash_data_map_rand.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 100
+#endif
+
+#ifndef KEYS
+# define KEYS 200
+#endif
+
+// Debug version of the rand regression tests, based on hash_data_map_rand
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by priority_queue_types, from
+// regression/common_type.hpp. This is just a compile-time list of 5
+// hash tables, with different policies for the type of table
+// (gp_hash, cc_hash), for the resize policies and probe functions.
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+typedef std::equal_to<basic_type> equal_type;
+
+
+typedef __gnu_pbds::test::direct_mod_range_hashing_t_<allocator_type>
+ cprobe_type1;
+
+typedef __gnu_pbds::test::direct_mask_range_hashing_t_<allocator_type>
+ cprobe_type2;
+
+
+typedef __gnu_pbds::test::quadratic_probe_fn_t_<basic_type, allocator_type>
+ probe_type1;
+
+typedef __gnu_pbds::test::linear_probe_fn_t_<basic_type, allocator_type>
+ probe_type2;
+
+
+typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_<allocator_type,
+ 1, 8, 1, 2, false>
+ trigger_type1;
+
+typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_<allocator_type,
+ 1, 8, 1, 2, true>
+ trigger_type2;
+
+typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_<allocator_type,
+ 1, 8, 1, 1, false>
+ trigger_type3;
+
+typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<allocator_type, 1, 2, false>
+ trigger_type4;
+
+typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<allocator_type, 1, 2, true>
+ trigger_type5;
+
+
+typedef hash_standard_resize_policy<__gnu_pbds::test::hash_prime_size_policy_t_, trigger_type1, false, unsigned long> resize_type1;
+
+typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_<allocator_type>, trigger_type2, true, unsigned long>
+ resize_type2;
+
+typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_<allocator_type>, trigger_type5, false, unsigned long>
+ resize_type3;
+
+
+
+// gp_hash 1
+typedef gp_hash_table<basic_type, basic_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type1, probe_type1, resize_type1,
+ false, allocator_type>
+ gp_hash_type1;
+
+// gp_hash 2
+typedef gp_hash_table<basic_type, basic_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type2, probe_type2, resize_type2,
+ true, allocator_type>
+ gp_hash_type2;
+
+
+// cc_hash 1
+typedef cc_hash_table<basic_type, basic_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type2, resize_type3,
+ false, allocator_type>
+ cc_hash_type1;
+
+// cc_hash 2
+typedef cc_hash_table<basic_type, basic_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type2, resize_type2,
+ false, allocator_type>
+ cc_hash_type2;
+
+// cc_hash 3
+typedef cc_hash_table<basic_type, basic_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type1, resize_type1,
+ true, allocator_type>
+ cc_hash_type3;
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef cc_hash_type1 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+ }
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(gp_hash_type1());
+ test(gp_hash_type2());
+
+ test(cc_hash_type1());
+ test(cc_hash_type2());
+ test(cc_hash_type3());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc
index e0530f579d..e0530f579d 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc
new file mode 100644
index 0000000000..bc5a596b4f
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc
@@ -0,0 +1,189 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file hash_data_map_rand.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 100
+#endif
+
+#ifndef KEYS
+# define KEYS 200
+#endif
+
+// Debug version of the rand regression tests, based on hash_data_map_rand
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by priority_queue_types, from
+// regression/common_type.hpp. This is just a compile-time list of 5
+// hash tables, with different policies for the type of table
+// (gp_hash, cc_hash), for the resize policies and probe functions.
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+typedef std::equal_to<basic_type> equal_type;
+
+
+typedef __gnu_pbds::test::direct_mod_range_hashing_t_<allocator_type>
+ cprobe_type1;
+
+typedef __gnu_pbds::test::direct_mask_range_hashing_t_<allocator_type>
+ cprobe_type2;
+
+
+typedef __gnu_pbds::test::quadratic_probe_fn_t_<basic_type, allocator_type>
+ probe_type1;
+
+typedef __gnu_pbds::test::linear_probe_fn_t_<basic_type, allocator_type>
+ probe_type2;
+
+
+typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_<allocator_type,
+ 1, 8, 1, 2, false>
+ trigger_type1;
+
+typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_<allocator_type,
+ 1, 8, 1, 2, true>
+ trigger_type2;
+
+typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_<allocator_type,
+ 1, 8, 1, 1, false>
+ trigger_type3;
+
+typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<allocator_type, 1, 2, false>
+ trigger_type4;
+
+typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<allocator_type, 1, 2, true>
+ trigger_type5;
+
+
+typedef hash_standard_resize_policy<__gnu_pbds::test::hash_prime_size_policy_t_, trigger_type1, false, unsigned long> resize_type1;
+
+typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_<allocator_type>, trigger_type2, true, unsigned long>
+ resize_type2;
+
+typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_<allocator_type>, trigger_type5, false, unsigned long>
+ resize_type3;
+
+
+
+// gp_hash 1
+typedef gp_hash_table<basic_type, null_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type1, probe_type1, resize_type1,
+ false, allocator_type>
+ gp_hash_type1;
+
+// gp_hash 2
+typedef gp_hash_table<basic_type, null_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type2, probe_type2, resize_type2,
+ true, allocator_type>
+ gp_hash_type2;
+
+
+// cc_hash 1
+typedef cc_hash_table<basic_type, null_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type2, resize_type3,
+ false, allocator_type>
+ cc_hash_type1;
+
+// cc_hash 2
+typedef cc_hash_table<basic_type, null_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type2, resize_type2,
+ false, allocator_type>
+ cc_hash_type2;
+
+// cc_hash 3
+typedef cc_hash_table<basic_type, null_type, __gnu_pbds::test::hash,
+ equal_type, cprobe_type1, resize_type1,
+ true, allocator_type>
+ cc_hash_type3;
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef cc_hash_type1 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+ }
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(gp_hash_type1());
+ test(gp_hash_type2());
+
+ test(cc_hash_type1());
+ test(cc_hash_type2());
+ test(cc_hash_type3());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc
deleted file mode 100644
index 8bd77816c0..0000000000
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// { dg-require-time "" }
-
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file lu_data_map_rand_regression_test.cpp
- * Contains a random-operation test for maps and sets.
- */
-
-#define PB_DS_REGRESSION
-
-#include <regression/rand/assoc/rand_regression_test.hpp>
-#include <regression/common_type.hpp>
-
-int
-main(int argc, char* a_p_argv[])
-{
- using namespace __gnu_pbds::test;
- typedef lu_map_tl_t map_tl_t;
-
- return rand_regression_test(50, 10,
- "lu_data_map_rand_regression_test",
- map_tl_t());
-}
-
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc
new file mode 100644
index 0000000000..e91a753ebb
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc
@@ -0,0 +1,54 @@
+// { dg-require-time "" }
+
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file list_update_data_map_rand.cc
+ * Contains a random-operation test for maps and sets.
+ */
+
+#define PB_DS_REGRESSION
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+
+int
+main(int argc, char* a_p_argv[])
+{
+ using namespace __gnu_pbds::test;
+ typedef lu_map_tl_t map_tl_t;
+
+ return rand_regression_test(50, 10,
+ "lu_data_map_rand_regression_test",
+ map_tl_t());
+}
+
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc
new file mode 100644
index 0000000000..3a9fc3c631
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc
@@ -0,0 +1,116 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file list_update_data_map_rand_debug.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+// Debug version of the rand regression tests, based on list_update_data_map.
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by list_update_types, from
+// regression/common_type.hpp. This is just a compile-time list of
+// list_update types, with different policies for the type of
+// update (lu_move_to_front_policy, lu_counter_policy).
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+typedef std::equal_to<basic_type> equal_type;
+
+typedef __gnu_pbds::test::lu_move_to_front_policy_t_ policy_type1;
+
+typedef __gnu_pbds::test::lu_counter_policy_t_<allocator_type, 5u>
+ policy_type2;
+
+
+typedef list_update<basic_type, basic_type, equal_type, policy_type1,
+ allocator_type>
+ list_type1;
+
+typedef list_update<basic_type, basic_type, equal_type, policy_type2,
+ allocator_type>
+ list_type2;
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef list_type1 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+ }
+
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, 50, 10, .2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(list_type1());
+ test(list_type2());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc
index 72273a8bc3..72273a8bc3 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc
new file mode 100644
index 0000000000..065ca9de35
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc
@@ -0,0 +1,116 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file list_update_data_map_rand_debug.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+// Debug version of the rand regression tests, based on list_update_data_map.
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by list_update_types, from
+// regression/common_type.hpp. This is just a compile-time list of
+// list_update types, with different policies for the type of
+// update (lu_move_to_front_policy, lu_counter_policy).
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+typedef std::equal_to<basic_type> equal_type;
+
+typedef __gnu_pbds::test::lu_move_to_front_policy_t_ policy_type1;
+
+typedef __gnu_pbds::test::lu_counter_policy_t_<allocator_type, 5u>
+ policy_type2;
+
+
+typedef list_update<basic_type, null_type, equal_type, policy_type1,
+ allocator_type>
+ list_type1;
+
+typedef list_update<basic_type, null_type, equal_type, policy_type2,
+ allocator_type>
+ list_type2;
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef list_type1 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+ }
+
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, 50, 10, .2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(list_type1());
+ test(list_type2());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc
new file mode 100644
index 0000000000..1d6dcf1bdb
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc
@@ -0,0 +1,142 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file priority_queue_rand_debug.cc
+ * Contains a random-operation test for priority queues.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/priority_queue/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 500
+#endif
+
+#ifndef KEYS
+# define KEYS 1000
+#endif
+
+// Debug version of the rand regression tests, based on priority_queue_rand
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by priority_queue_types, from
+// regression/common_type.hpp. This is just a compile-time list of 5
+// priority_queue types, with different policies for the type of priority_queue
+// (pairing_heap_tag, binomial_heap_tag, rc_binomial_heap_tag,
+// binary_heap_tag, thin_heap_tag).
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+
+// pairing_heap_tag
+typedef priority_queue<basic_type, std::less<basic_type>,
+ pairing_heap_tag, allocator_type>
+ priority_queue_type1;
+
+// binomial_heap_tag
+typedef priority_queue<basic_type, std::less<basic_type>,
+ binomial_heap_tag, allocator_type>
+ priority_queue_type2;
+
+// rc_binomial_heap_tag
+typedef priority_queue<basic_type, std::less<basic_type>,
+ rc_binomial_heap_tag, allocator_type>
+ priority_queue_type3;
+
+// binary_heap_tag
+typedef priority_queue<basic_type, std::less<basic_type>,
+ binary_heap_tag, allocator_type>
+ priority_queue_type4;
+
+// thin_heap_tag
+typedef priority_queue<basic_type, std::less<basic_type>,
+ thin_heap_tag, allocator_type>
+ priority_queue_type5;
+
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef priority_queue_type4 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+
+ }
+
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1304368293;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .1, .2, .001, 1, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(priority_queue_type1());
+ test(priority_queue_type2());
+ test(priority_queue_type3());
+ test(priority_queue_type4());
+ test(priority_queue_type5());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc
index 01751e39fc..01751e39fc 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc
new file mode 100644
index 0000000000..75b31f037b
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc
@@ -0,0 +1,144 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file tree_data_map_rand_debug.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 100
+#endif
+
+#ifndef KEYS
+# define KEYS 200
+#endif
+
+// Debug version of the rand regression tests, based on tree_data_map.
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by tree_types, from
+// regression/common_type.hpp. This is just a compile-time list of 6
+// tree types, with different policies for the type of tree
+// (ov_tree_tag, rb_tree_tag, splay_tree_tag) and for the node
+// update (null_node_update, tree_order_statistics_node_update)
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+
+// ov_tree_tag
+typedef tree<basic_type, basic_type, std::less<basic_type>,
+ ov_tree_tag, null_node_update,
+ allocator_type> ov_tree_type1;
+
+typedef tree<basic_type, basic_type, std::less<basic_type>,
+ ov_tree_tag, tree_order_statistics_node_update,
+ allocator_type> ov_tree_type2;
+
+// rb_tree_tag
+typedef tree<basic_type, basic_type, std::less<basic_type>,
+ rb_tree_tag, null_node_update,
+ allocator_type> rb_tree_type1;
+
+typedef tree<basic_type, basic_type, std::less<basic_type>,
+ rb_tree_tag, tree_order_statistics_node_update,
+ allocator_type> rb_tree_type2;
+
+// splay_tree_tag
+typedef tree<basic_type, basic_type, std::less<basic_type>,
+ splay_tree_tag, null_node_update,
+ allocator_type> splay_tree_type1;
+
+typedef tree<basic_type, basic_type, std::less<basic_type>,
+ splay_tree_tag, tree_order_statistics_node_update,
+ allocator_type> splay_tree_type2;
+
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef ov_tree_type2 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+ }
+
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(ov_tree_type1());
+ test(ov_tree_type2());
+ test(rb_tree_type1());
+ test(rb_tree_type2());
+ test(splay_tree_type1());
+ test(splay_tree_type2());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc
index c7dadb0d81..c7dadb0d81 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc
new file mode 100644
index 0000000000..1e85d01612
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc
@@ -0,0 +1,144 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file tree_data_map_rand_debug.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 100
+#endif
+
+#ifndef KEYS
+# define KEYS 200
+#endif
+
+// Debug version of the rand regression tests, based on tree_data_map.
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by tree_types, from
+// regression/common_type.hpp. This is just a compile-time list of 6
+// tree types, with different policies for the type of tree
+// (ov_tree_tag, rb_tree_tag, splay_tree_tag) and for the node
+// update (null_node_update, tree_order_statistics_node_update)
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+
+// ov_tree_tag
+typedef tree<basic_type, null_type, std::less<basic_type>,
+ ov_tree_tag, null_node_update,
+ allocator_type> ov_tree_type1;
+
+typedef tree<basic_type, null_type, std::less<basic_type>,
+ ov_tree_tag, tree_order_statistics_node_update,
+ allocator_type> ov_tree_type2;
+
+// rb_tree_tag
+typedef tree<basic_type, null_type, std::less<basic_type>,
+ rb_tree_tag, null_node_update,
+ allocator_type> rb_tree_type1;
+
+typedef tree<basic_type, null_type, std::less<basic_type>,
+ rb_tree_tag, tree_order_statistics_node_update,
+ allocator_type> rb_tree_type2;
+
+// splay_tree_tag
+typedef tree<basic_type, null_type, std::less<basic_type>,
+ splay_tree_tag, null_node_update,
+ allocator_type> splay_tree_type1;
+
+typedef tree<basic_type, null_type, std::less<basic_type>,
+ splay_tree_tag, tree_order_statistics_node_update,
+ allocator_type> splay_tree_type2;
+
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef ov_tree_type2 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+ }
+
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(ov_tree_type1());
+ test(ov_tree_type2());
+ test(rb_tree_type1());
+ test(rb_tree_type2());
+ test(splay_tree_type1());
+ test(splay_tree_type2());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc
index 8a3902812f..8a3902812f 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc
new file mode 100644
index 0000000000..701e7d8e09
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc
@@ -0,0 +1,131 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file trie_data_map_rand_debug.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 100
+#endif
+
+#ifndef KEYS
+# define KEYS 200
+#endif
+
+// Debug version of the rand regression tests, based on trie_no_data_map.
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by tree_types, from
+// regression/common_type.hpp. This is just a compile-time list of 6
+// tree types, with different policies for the type of tree
+// (pat_trie_tag) and for the node
+// update (null_node_update, trie_order_statistics_node_update,
+// trie_order_staticstics_node_update, trie_prefix_search_node_update)
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+typedef __gnu_pbds::trie_string_access_traits<basic_type, char('a'), 100,
+ false, allocator_type>
+ etraits_type;
+
+// pat_trie_tag
+typedef trie<basic_type, basic_type, etraits_type, pat_trie_tag,
+ null_node_update, allocator_type>
+ trie_type1;
+
+typedef trie<basic_type, basic_type, etraits_type, pat_trie_tag,
+ trie_order_statistics_node_update, allocator_type>
+ trie_type2;
+
+typedef trie<basic_type, basic_type, etraits_type, pat_trie_tag,
+ trie_prefix_search_node_update, allocator_type>
+ trie_type3;
+
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef trie_type1 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+
+ }
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(trie_type1());
+ test(trie_type2());
+ test(trie_type3());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc
index 2414118da8..2414118da8 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc
new file mode 100644
index 0000000000..19a201da44
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc
@@ -0,0 +1,131 @@
+// { dg-require-debug-mode "" }
+// { dg-require-time "" }
+// This can take long on simulators, timing out the test.
+// { dg-options "-DITERATIONS=5" { target simulator } }
+// { dg-timeout-factor 2.0 }
+
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file trie_data_map_rand_debug.cc
+ * Contains a random-operation test for maps and sets, separated out.
+ */
+
+#define PB_DS_REGRESSION
+//#define PB_DS_REGRESSION_TRACE
+
+#include <regression/rand/assoc/rand_regression_test.hpp>
+#include <regression/common_type.hpp>
+#include <ext/throw_allocator.h>
+#include <ext/pb_ds/tag_and_trait.hpp>
+
+#ifndef ITERATIONS
+# define ITERATIONS 100
+#endif
+
+#ifndef KEYS
+# define KEYS 200
+#endif
+
+// Debug version of the rand regression tests, based on trie_no_data_map.
+
+// 1
+// Simplify things by unrolling the typelist of the different
+// container types into individual statements.
+//
+// Unroll the typelist represented by tree_types, from
+// regression/common_type.hpp. This is just a compile-time list of 6
+// tree types, with different policies for the type of tree
+// (pat_trie_tag) and for the node
+// update (null_node_update, trie_order_statistics_node_update,
+// trie_order_staticstics_node_update, trie_prefix_search_node_update)
+
+using namespace __gnu_pbds::test::detail;
+using namespace __gnu_pbds;
+typedef __gnu_pbds::test::basic_type basic_type;
+typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
+typedef __gnu_pbds::trie_string_access_traits<basic_type, char('a'), 100,
+ false, allocator_type>
+ etraits_type;
+
+// pat_trie_tag
+typedef trie<basic_type, null_type, etraits_type, pat_trie_tag,
+ null_node_update, allocator_type>
+ trie_type1;
+
+typedef trie<basic_type, null_type, etraits_type, pat_trie_tag,
+ trie_order_statistics_node_update, allocator_type>
+ trie_type2;
+
+typedef trie<basic_type, null_type, etraits_type, pat_trie_tag,
+ trie_prefix_search_node_update, allocator_type>
+ trie_type3;
+
+
+// 2
+// Specialize container_rand_regression_test for specific container
+// type and test function.
+
+#ifdef SPECIALIZE
+// For testing one specific container type.
+typedef trie_type1 test_type;
+
+void debug_break_here() { }
+
+namespace __gnu_pbds {
+ namespace test {
+ namespace detail {
+
+ template<>
+ void
+ container_rand_regression_test<test_type>::operator()()
+ {
+
+ }
+ }
+ }
+}
+#endif
+
+int
+main()
+{
+ // Set up the test object.
+ size_t sd = 1303948889;
+ rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
+
+ // 1
+ // Determine the problem container, function that fails.
+ test(trie_type1());
+ test(trie_type2());
+ test(trie_type3());
+
+#ifdef SPECIALIZE
+ // 2
+ // With specified problem container set test_type typedef
+ // appropriately above. Then, specialize operator()(), also
+ // above. Finally, run this below.
+ using namespace std;
+ test_type obj;
+ test(obj);
+#endif
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
index 58cab3a667..c6e6feac6c 100644
--- a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
+++ b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
@@ -25,4 +25,4 @@
#include <vector>
-// { dg-error "multiple inlined namespaces" "" { target *-*-* } 242 }
+// { dg-error "multiple inlined namespaces" "" { target *-*-* } 263 }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
index 98202bdb86..fbd5f1d704 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
@@ -30,9 +30,9 @@ template<typename T>
int main()
{
- check_add_unsigned<float>(); // { dg-error "instantiated from" }
+ check_add_unsigned<float>(); // { dg-error "required from" }
return 0;
}
-// { dg-error "instantiated from" "" { target *-*-* } 28 }
+// { dg-error "required from" "" { target *-*-* } 28 }
// { dg-error "no type" "" { target *-*-* } 69 }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
index f08c879e5a..b976de022b 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
@@ -30,8 +30,8 @@ template<typename T>
int main()
{
- check_add_unsigned<bool>(); // { dg-error "instantiated from" }
- check_add_unsigned<wchar_t>(); // { dg-error "instantiated from" }
+ check_add_unsigned<bool>(); // { dg-error "required from" }
+ check_add_unsigned<wchar_t>(); // { dg-error "required from" }
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
index 486baad93b..2e04046965 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
@@ -30,9 +30,9 @@ template<typename T>
int main()
{
- check_remove_unsigned<float>(); // { dg-error "instantiated from" }
+ check_remove_unsigned<float>(); // { dg-error "required from" }
return 0;
}
-// { dg-error "instantiated from" "" { target *-*-* } 28 }
+// { dg-error "required from" "" { target *-*-* } 28 }
// { dg-error "no type" "" { target *-*-* } 112 }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
index 1ad1d93bfb..bd5c4237e0 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
@@ -30,8 +30,8 @@ template<typename T>
int main()
{
- check_remove_unsigned<bool>(); // { dg-error "instantiated from" }
- check_remove_unsigned<wchar_t>(); // { dg-error "instantiated from" }
+ check_remove_unsigned<bool>(); // { dg-error "required from" }
+ check_remove_unsigned<wchar_t>(); // { dg-error "required from" }
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc b/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
index 337df66706..b572f1eb7a 100644
--- a/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
index e6737de0e3..bed965a5e5 100644
--- a/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc b/libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc
new file mode 100644
index 0000000000..3e592d7d1a
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2011-06-01 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <ext/vstring.h>
+
+typedef __gnu_cxx::__sso_string sstype;
+
+static_assert(std::is_nothrow_move_constructible<sstype>::value, "Error");
diff --git a/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc b/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
index db0bc03f09..94dce3787f 100644
--- a/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc b/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
index 83edbe11a8..d23a882de3 100644
--- a/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/ext/vstring/modifiers/char/pop_back.cc b/libstdc++-v3/testsuite/ext/vstring/modifiers/char/pop_back.cc
new file mode 100644
index 0000000000..4dfa2f6fed
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/vstring/modifiers/char/pop_back.cc
@@ -0,0 +1,45 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 21.4.6.5 basic_string::pop_back
+// { dg-options "-std=gnu++0x" }
+
+#include <ext/vstring.h>
+#include <testsuite_hooks.h>
+
+template<typename StrT>
+int test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const StrT cstr("Badger");
+ StrT str = cstr;
+ str.pop_back();
+ VERIFY( str.size() == cstr.size() - 1 );
+
+ str += cstr.back();
+ VERIFY( str == cstr );
+
+ return test;
+}
+
+int main()
+{
+ test01<__gnu_cxx::__sso_string>();
+ test01<__gnu_cxx::__rc_string>();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc b/libstdc++-v3/testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc
new file mode 100644
index 0000000000..ae607b61de
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc
@@ -0,0 +1,45 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 21.4.6.5 basic_string::pop_back
+// { dg-options "-std=gnu++0x" }
+
+#include <ext/vstring.h>
+#include <testsuite_hooks.h>
+
+template<typename StrT>
+int test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const StrT cstr(L"Badger");
+ StrT str = cstr;
+ str.pop_back();
+ VERIFY( str.size() == cstr.size() - 1 );
+
+ str += cstr.back();
+ VERIFY( str == cstr );
+
+ return test;
+}
+
+int main()
+{
+ test01<__gnu_cxx::__wsso_string>();
+ test01<__gnu_cxx::__wrc_string>();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/ext/vstring/range_access.cc b/libstdc++-v3/testsuite/ext/vstring/range_access.cc
index 3232292470..f734e92c72 100644
--- a/libstdc++-v3/testsuite/ext/vstring/range_access.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc
index a0042d4882..5bc6f2744c 100644
--- a/libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc
@@ -3,7 +3,7 @@
// 2009-11-10 Benjamin Kosnik <benjamin@redhat.com>
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,14 +26,9 @@
void
value()
{
-#if 1
+ // NB: Instantiating with __gnu_cxx::throw_value_limit would be illegal,
+ // isn't a POD type.
typedef char value_type;
-#else
- // XXX
- // __gnu_cxx::__rc_string_base<>::_Rep::_M_align’ with constructor
- // not allowed in union
- // typedef __gnu_cxx::throw_value_limit value_type;
-#endif
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::char_traits<value_type> traits_type;
diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc
index 09d8618ab8..e609329ea7 100644
--- a/libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc
@@ -3,7 +3,7 @@
// 2009-09-14 Benjamin Kosnik <benjamin@redhat.com>
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,14 +26,9 @@
void
value()
{
-#if 1
+ // NB: Instantiating with __gnu_cxx::throw_value_limit would be illegal,
+ // isn't a POD type.
typedef char value_type;
-#else
- // XXX
- // __gnu_cxx::__rc_string_base<>::_Rep::_M_align’ with constructor
- // not allowed in union
- // typedef __gnu_cxx::throw_value_limit value_type;
-#endif
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::char_traits<value_type> traits_type;
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index b75f516c41..d5eb5e827a 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -1,6 +1,6 @@
# Handlers for additional dg-xxx keywords in tests.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
# Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -107,6 +107,15 @@ proc dg-require-cstdint { args } {
return
}
+proc dg-require-cmath { args } {
+ if { ![ check_v3_target_cmath ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
proc dg-require-atomic-builtins { args } {
if { ![ check_v3_target_atomic_builtins ] } {
upvar dg-do-what dg-do-what
@@ -125,6 +134,15 @@ proc dg-require-gthreads { args } {
return
}
+proc dg-require-gthreads-timed { args } {
+ if { ![ check_v3_target_gthreads_timed ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
proc dg-require-nanosleep { args } {
if { ![ check_v3_target_nanosleep ] } {
upvar dg-do-what dg-do-what
@@ -170,6 +188,15 @@ proc dg-require-binary-io { args } {
return
}
+proc dg-require-nprocs { args } {
+ if { ![ check_v3_target_nprocs ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
proc add_options_for_no_pch { flags } {
# This forces any generated and possibly included PCH to be invalid.
return "-D__GLIBCXX__=99999999"
diff --git a/libstdc++-v3/testsuite/lib/gdb-test.exp b/libstdc++-v3/testsuite/lib/gdb-test.exp
new file mode 100644
index 0000000000..b9d4742d39
--- /dev/null
+++ b/libstdc++-v3/testsuite/lib/gdb-test.exp
@@ -0,0 +1,217 @@
+# Copyright (C) 2009, 2011, 2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+global gdb_tests
+set gdb_tests {}
+
+# Scan a file for markers and fill in the gdb_marker array for that
+# file. Any error in this script is simply thrown; errors here are
+# programming errors in the test suite itself and should not be
+# caught.
+proc scan_gdb_markers {filename} {
+ global gdb_markers
+
+ if {[info exists gdb_markers($filename,-)]} {
+ return
+ }
+
+ set fd [open $filename]
+ set lineno 1
+ while {! [eof $fd]} {
+ set line [gets $fd]
+ if {[regexp -- "Mark (\[a-zA-Z0-9\]+)" $line ignore marker]} {
+ set gdb_markers($filename,$marker) $lineno
+ }
+ incr lineno
+ }
+ close $fd
+
+ set gdb_markers($filename,-) {}
+}
+
+# Find a marker in a source file, and return the marker's line number.
+proc get_line_number {filename marker} {
+ global gdb_markers
+
+ scan_gdb_markers $filename
+ return $gdb_markers($filename,$marker)
+}
+
+# Make note of a gdb test. A test consists of a variable name and an
+# expected result.
+proc note-test {var result} {
+ global gdb_tests
+
+ lappend gdb_tests $var $result 0
+}
+
+# A test that uses a regular expression. This is like note-test, but
+# the result is a regular expression that is matched against the
+# output.
+proc regexp-test {var result} {
+ global gdb_tests
+
+ lappend gdb_tests $var $result 1
+}
+
+# Utility for testing variable values using gdb, invoked via dg-final.
+# Tests all tests indicated by note-test and regexp-test.
+#
+# Argument 0 is the marker on which to put a breakpoint
+# Argument 2 handles expected failures and the like
+proc gdb-test { marker {selector {}} } {
+ if { ![isnative] || [is_remote target] } { return }
+
+ if {[string length $selector] > 0} {
+ switch [dg-process-target $selector] {
+ "S" { }
+ "N" { return }
+ "F" { setup_xfail "*-*-*" }
+ "P" { }
+ }
+ }
+
+ # This assumes that we are three frames down from dg-test, and that
+ # it still stores the filename of the testcase in a local variable "name".
+ # A cleaner solution would require a new DejaGnu release.
+ upvar 2 name testcase
+ upvar 2 prog prog
+
+ set line [get_line_number $prog $marker]
+
+ set gdb_name $::env(GUALITY_GDB_NAME)
+ set testname "$testcase"
+ set output_file "[file rootname [file tail $prog]].exe"
+ set cmd_file "[file rootname [file tail $prog]].gdb"
+
+ global srcdir
+ set pycode [file join $srcdir .. python libstdcxx v6 printers.py]
+
+ global gdb_tests
+
+ set fd [open $cmd_file "w"]
+ puts $fd "source $pycode"
+ puts $fd "python register_libstdcxx_printers(None)"
+ puts $fd "break $line"
+ puts $fd "run"
+
+ set count 0
+ foreach {var result is_regexp} $gdb_tests {
+ puts $fd "print $var"
+ incr count
+ set gdb_var($count) $var
+ set gdb_expected($count) $result
+ set gdb_is_regexp($count) $is_regexp
+ }
+ set gdb_tests {}
+
+ puts $fd "quit"
+ close $fd
+
+ send_log "Spawning: $gdb_name -nx -nw -quiet -batch -x $cmd_file ./$output_file\n"
+ set res [remote_spawn target "$gdb_name -nx -nw -quiet -batch -x $cmd_file ./$output_file"]
+ if { $res < 0 || $res == "" } {
+ unsupported "$testname"
+ return
+ }
+
+ remote_expect target [timeout_value] {
+ -re {^\$([0-9]+) = ([^\n\r]*)[\n\r]+} {
+ send_log "got: $expect_out(buffer)"
+
+ set num $expect_out(1,string)
+ set first $expect_out(2,string)
+
+ if {$gdb_is_regexp($num)} {
+ set match [regexp -- $gdb_expected($num) $first]
+ } else {
+ set match [expr {![string compare $first $gdb_expected($num)]}]
+ }
+
+ if {$match} {
+ pass "$testname print $gdb_var($num)"
+ } else {
+ fail "$testname print $gdb_var($num)"
+ verbose " got =>$first<="
+ verbose "expected =>$gdb_expected($num)<="
+ }
+
+ if {$num == $count} {
+ remote_close target
+ return
+ } else {
+ exp_continue
+ }
+ }
+
+ -re {Python scripting is not supported in this copy of GDB.[\n\r]+} {
+ unsupported "$testname"
+ remote_close target
+ return
+ }
+
+ -re {^[^$][^\n\r]*[\n\r]+} {
+ send_log "skipping: $expect_out(buffer)"
+ exp_continue
+ }
+
+ timeout {
+ unsupported "$testname"
+ remote_close target
+ return
+ }
+ }
+
+ remote_close target
+ unsupported "$testname"
+ return
+}
+
+# Check for a new-enough version of gdb. The pretty-printer tests
+# require gdb 7.3, but we don't want to test versions, so instead we
+# check for the python "lookup_global_symbol" method, which is in 7.3
+# but not earlier versions.
+# Return 1 if the version is ok, 0 otherwise.
+proc gdb_version_check {} {
+ global gdb_version
+
+ set gdb_name $::env(GUALITY_GDB_NAME)
+ set cmd "$gdb_name -nw -nx -quiet -batch -ex \"python print gdb.lookup_global_symbol\""
+ send_log "Spawning: $cmd\n"
+ set res [remote_spawn target "$cmd"]
+ if { $res < 0 || $res == "" } {
+ return 0
+ }
+
+ remote_expect target [timeout_value] {
+ -re "<built-in function lookup_global_symbol>" {
+ return 1
+ }
+
+ -re {^[^\n\r]*[\n\r]+} {
+ verbose "skipping: $expect_out(buffer)"
+ exp_continue
+ }
+
+ timeout {
+ remote_close target
+ return 0
+ }
+ }
+
+ remote_close target
+ return 0
+}
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 2b96e29048..abb92bf358 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -1,6 +1,7 @@
# libstdc++ "tool init file" for DejaGNU
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+# 2009, 2010, 2011
# Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -823,7 +824,6 @@ proc check_v3_target_time { } {
# Set up and compile a C++ test program that tries to use
# the time function
set src time[pid].cc
- set exe time[pid].x
set f [open $src "w"]
puts $f "#include <time.h>"
@@ -834,13 +834,12 @@ proc check_v3_target_time { } {
puts $f "}"
close $f
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null executable ""]
file delete $src
if [string match "" $lines] {
# No error message, compilation succeeded.
verbose "check_v3_target_time: compilation succeeded" 2
- remote_file build delete $exe
set et_time_saved 1
} else {
verbose "check_v3_target_time: compilation failed" 2
@@ -926,25 +925,21 @@ proc check_v3_target_debug_mode { } {
} else {
set et_debug_mode 0
- # Set up and compile a C++ test program that depends
+ # Set up and preprocess a C++ test program that depends
# on debug mode activated.
set src debug_mode[pid].cc
- set exe debug_mode[pid].exe
set f [open $src "w"]
puts $f "#ifndef _GLIBCXX_DEBUG"
puts $f "# error No debug mode"
puts $f "#endif"
- puts $f "int main()"
- puts $f "{ return 0; }"
close $f
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
- remote_file build delete $exe
+ # No error message, preprocessing succeeded.
set et_debug_mode 1
}
}
@@ -976,25 +971,21 @@ proc check_v3_target_profile_mode { } {
} else {
set et_profile_mode 0
- # Set up and compile a C++ test program that depends
+ # Set up and preprocess a C++ test program that depends
# on profile mode activated.
set src profile_mode[pid].cc
- set exe profile_mode[pid].exe
set f [open $src "w"]
puts $f "#ifndef _GLIBCXX_PROFILE"
puts $f "# error No profile mode"
puts $f "#endif"
- puts $f "int main()"
- puts $f "{ return 0; }"
close $f
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
- remote_file build delete $exe
+ # No error message, preprocessing succeeded.
set et_profile_mode 1
}
}
@@ -1029,17 +1020,14 @@ proc check_v3_target_normal_mode { } {
# Set up and compile a C++ test program that depends
# on normal mode activated.
set src normal_mode[pid].cc
- set exe normal_mode[pid].exe
set f [open $src "w"]
puts $f "#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE) || defined(_GLIBCXX_PARALLEL)"
puts $f "# error No normal mode"
puts $f "#endif"
- puts $f "int main()"
- puts $f "{ return 0; }"
close $f
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
file delete $src
if [string match "" $lines] {
@@ -1114,28 +1102,26 @@ proc check_v3_target_cstdint { } {
} else {
set et_cstdint 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on the C99 stdint facilities to be available.
set src cstdint[pid].cc
- set exe cstdint[pid].exe
set f [open $src "w"]
puts $f "#include <tr1/cstdint>"
- puts $f "int main()"
- puts $f "#ifdef _GLIBCXX_USE_C99_STDINT_TR1"
- puts $f "{ return 0; }"
+ puts $f "#ifndef _GLIBCXX_USE_C99_STDINT_TR1"
+ puts $f "# error No C99 stdint"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocess succeeded.
set et_cstdint 1
} else {
verbose "check_v3_target_cstdint: compilation failed" 2
@@ -1145,12 +1131,68 @@ proc check_v3_target_cstdint { } {
return $et_cstdint
}
+proc check_v3_target_cmath { } {
+ global cxxflags
+ global DEFAULT_CXXFLAGS
+ global et_c99_math
+
+ global tool
+
+ if { ![info exists et_c99_math_target_name] } {
+ set et_c99_math_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_c99_math_target_name } {
+ verbose "check_v3_target_c99_math: `$et_c99_math_target_name'" 2
+ set et_c99_math_target_name $current_target
+ if [info exists et_c99_math] {
+ verbose "check_v3_target_c99_math: removing cached result" 2
+ unset et_c99_math
+ }
+ }
+
+ if [info exists et_c99_math] {
+ verbose "check_v3_target_c99_math: using cached result" 2
+ } else {
+ set et_c99_math 0
+
+ # Set up and preprocess a C++0x test program that depends
+ # on the C99 math facilities to be available.
+ set src c99_math[pid].cc
+
+ set f [open $src "w"]
+ puts $f "#include <tr1/cmath>"
+ puts $f "#ifndef _GLIBCXX_USE_C99_MATH_TR1"
+ puts $f "# error No C99 math"
+ puts $f "#endif"
+ close $f
+
+ set cxxflags_saved $cxxflags
+ set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+
+ set lines [v3_target_compile $src /dev/null preprocess ""]
+ set cxxflags $cxxflags_saved
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, preprocess succeeded.
+ set et_c99_math 1
+ } else {
+ verbose "check_v3_target_c99_math: compilation failed" 2
+ }
+ }
+ verbose "check_v3_target_c99_math: $et_c99_math" 2
+ return $et_c99_math
+}
+
proc check_v3_target_atomic_builtins { } {
global cxxflags
global DEFAULT_CXXFLAGS
- global et_cstdint
+ global et_atomic_builtins
- global tool
+ global tool
if { ![info exists et_atomic_builtins_target_name] } {
set et_atomic_builtins_target_name ""
@@ -1172,28 +1214,28 @@ proc check_v3_target_atomic_builtins { } {
} else {
set et_atomic_builtins 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on the atomic builtin facilities to be available.
set src atomic_builtins[pid].cc
- set exe atomic_builtins[pid].exe
set f [open $src "w"]
- puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#ifdef _GLIBCXX_ATOMIC_BUILTINS_4"
- puts $f "{ return 0; }"
+ puts $f "#if __GCC_ATOMIC_BOOL_LOCK_FREE < 2"
+ puts $f "# error No atomic bool"
+ puts $f "#endif"
+ puts $f "#if __GCC_ATOMIC_INT_LOCK_FREE < 2"
+ puts $f "# error No atomic int"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
- set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+ set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror -std=gnu++0x"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocess succeeded.
set et_atomic_builtins 1
} else {
verbose "check_v3_target_atomic_builtins: compilation failed" 2
@@ -1230,28 +1272,26 @@ proc check_v3_target_gthreads { } {
} else {
set et_gthreads 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on the gthreads facilities to be available.
set src gthreads[pid].cc
- set exe gthreads[pid].exe
set f [open $src "w"]
puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#ifdef _GLIBCXX_HAS_GTHREADS"
- puts $f "{ return 0; }"
+ puts $f "#ifndef _GLIBCXX_HAS_GTHREADS"
+ puts $f "# error No gthread"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocessing succeeded.
set et_gthreads 1
} else {
verbose "check_v3_target_gthreads: compilation failed" 2
@@ -1261,6 +1301,66 @@ proc check_v3_target_gthreads { } {
return $et_gthreads
}
+proc check_v3_target_gthreads_timed { } {
+ global cxxflags
+ global DEFAULT_CXXFLAGS
+ global et_gthreads_timed
+
+ global tool
+
+ if { ![info exists et_gthreads_timed_target_name] } {
+ set et_gthreads_timed_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_gthreads_timed_target_name } {
+ verbose "check_v3_target_gthreads_timed: `$et_gthreads_timed_target_name'" 2
+ set et_gthreads_timed_target_name $current_target
+ if [info exists et_gthreads_timed] {
+ verbose "check_v3_target_gthreads_timed: removing cached result" 2
+ unset et_gthreads_timed
+ }
+ }
+
+ if [info exists et_gthreads_timed] {
+ verbose "check_v3_target_gthreads_timed: using cached result" 2
+ } else {
+ set et_gthreads_timed 0
+
+ # Set up and preprocess a C++0x test program that depends
+ # on the gthreads timed mutex facilities to be available.
+ set src gthreads_timed[pid].cc
+
+ set f [open $src "w"]
+ puts $f "#include <bits/c++config.h>"
+ puts $f "#ifndef _GLIBCXX_HAS_GTHREADS"
+ puts $f "# error No gthread"
+ puts $f "#endif"
+ puts $f "#if !_GTHREAD_USE_MUTEX_TIMEDLOCK"
+ puts $f "# error No gthread timed mutexes"
+ puts $f "#endif"
+ close $f
+
+ set cxxflags_saved $cxxflags
+ set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+
+ set lines [v3_target_compile $src /dev/null preprocess ""]
+ set cxxflags $cxxflags_saved
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, preprocessing succeeded.
+ set et_gthreads_timed 1
+ } else {
+ verbose "check_v3_target_gthreads_timed: compilation failed" 2
+ }
+ }
+ verbose "check_v3_target_gthreads_timed: $et_gthreads_timed" 2
+ return $et_gthreads_timed
+}
+
+
proc check_v3_target_nanosleep { } {
global cxxflags
global DEFAULT_CXXFLAGS
@@ -1288,28 +1388,26 @@ proc check_v3_target_nanosleep { } {
} else {
set et_nanosleep 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on the nanosleep facilities to be available.
set src nanosleep[pid].cc
- set exe nanosleep[pid].exe
set f [open $src "w"]
puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#ifdef _GLIBCXX_USE_NANOSLEEP"
- puts $f "{ return 0; }"
+ puts $f "#ifndef _GLIBCXX_USE_NANOSLEEP"
+ puts $f "# error No nanosleep"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocessing succeeded.
set et_nanosleep 1
} else {
verbose "check_v3_target_nanosleep: compilation failed" 2
@@ -1346,28 +1444,26 @@ proc check_v3_target_sched_yield { } {
} else {
set et_sched_yield 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on the sched_yield facility to be available.
set src sched_yield[pid].cc
- set exe sched_yield[pid].exe
set f [open $src "w"]
puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#ifdef _GLIBCXX_USE_SCHED_YIELD"
- puts $f "{ return 0; }"
+ puts $f "#ifndef _GLIBCXX_USE_SCHED_YIELD"
+ puts $f "# error No sched yield"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocessing succeeded.
set et_sched_yield 1
} else {
verbose "check_v3_target_sched_yield: compilation failed" 2
@@ -1404,28 +1500,26 @@ proc check_v3_target_string_conversions { } {
} else {
set et_string_conversions 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on the string_conversions facilities to be available.
set src string_conversions[pid].cc
- set exe string_conversions[pid].exe
set f [open $src "w"]
puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#if defined(_GLIBCXX_USE_C99) && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)"
- puts $f "{ return 0; }"
+ puts $f "#if !defined(_GLIBCXX_USE_C99) || defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)"
+ puts $f "# error No string conversions"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocessing succeeded.
set et_string_conversions 1
} else {
verbose "check_v3_target_string_conversions: compilation failed" 2
@@ -1462,28 +1556,26 @@ proc check_v3_target_swprintf { } {
} else {
set et_swprintf 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on a standard swprintf function to be available.
set src swprintf[pid].cc
- set exe swprintf[pid].exe
set f [open $src "w"]
puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#if !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)"
- puts $f "{ return 0; }"
+ puts $f "#if defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)"
+ puts $f "# error No swprintf"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocessing succeeded.
set et_swprintf 1
} else {
verbose "check_v3_target_swprintf: compilation failed" 2
@@ -1520,28 +1612,26 @@ proc check_v3_target_binary_io { } {
} else {
set et_binary_io 0
- # Set up and compile a C++0x test program that depends
+ # Set up and preprocess a C++0x test program that depends
# on text and binary I/O being the same.
set src binary_io[pid].cc
- set exe binary_io[pid].exe
set f [open $src "w"]
puts $f "#include <bits/c++config.h>"
- puts $f "int main()"
- puts $f "#if !defined(_GLIBCXX_HAVE_DOS_BASED_FILESYSTEM)"
- puts $f "{ return 0; }"
+ puts $f "#if defined(_GLIBCXX_HAVE_DOS_BASED_FILESYSTEM)"
+ puts $f "# error No binary io"
puts $f "#endif"
close $f
set cxxflags_saved $cxxflags
set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
- set lines [v3_target_compile $src $exe executable ""]
+ set lines [v3_target_compile $src /dev/null preprocess ""]
set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
- # No error message, compilation succeeded.
+ # No error message, preprocessing succeeded.
set et_binary_io 1
} else {
verbose "check_v3_target_binary_io: compilation failed" 2
@@ -1551,4 +1641,66 @@ proc check_v3_target_binary_io { } {
return $et_binary_io
}
+proc check_v3_target_nprocs { } {
+ global cxxflags
+ global DEFAULT_CXXFLAGS
+ global et_nprocs
+
+ global tool
+
+ if { ![info exists et_nprocs_target_name] } {
+ set et_nprocs_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_nprocs_target_name } {
+ verbose "check_v3_target_nprocs: `$et_nprocs_target_name'" 2
+ set et_nprocs_target_name $current_target
+ if [info exists et_nprocs] {
+ verbose "check_v3_target_nprocs: removing cached result" 2
+ unset et_nprocs
+ }
+ }
+
+ if [info exists et_nprocs] {
+ verbose "check_v3_target_nprocs: using cached result" 2
+ } else {
+ set et_nprocs 0
+
+ # Set up and preprocess a C++0x test program that depends
+ # on either get_nprocs or sysconf to be available.
+ set src nprocs[pid].cc
+
+ set f [open $src "w"]
+ puts $f "#include <bits/c++config.h>"
+ puts $f "#if defined(_GLIBCXX_USE_GET_NPROCS)"
+ puts $f "#elif defined(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP)"
+ puts $f "#elif defined(_GLIBCXX_USE_SYSCTL_HW_NCPU)"
+ puts $f "#elif defined(_GLIBCXX_USE_SC_NPROCESSORS_ONLN)"
+ puts $f "#elif defined(_GLIBCXX_USE_SC_NPROC_ONLN)"
+ puts $f "#else"
+ puts $f "# error hardware_concurrency not implemented"
+ puts $f "#endif"
+ close $f
+
+ set cxxflags_saved $cxxflags
+ set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+
+ set lines [v3_target_compile $src /dev/null preprocess ""]
+ set cxxflags $cxxflags_saved
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, preprocess succeeded.
+ set et_nprocs 1
+ } else {
+ verbose "check_v3_target_nprocs: compilation failed" 2
+ }
+ }
+ verbose "check_v3_target_nprocs: $et_nprocs" 2
+ return $et_nprocs
+}
+
+
set additional_prunes ""
diff --git a/libstdc++-v3/testsuite/lib/prune.exp b/libstdc++-v3/testsuite/lib/prune.exp
index a1d8d083e5..a5644061d2 100644
--- a/libstdc++-v3/testsuite/lib/prune.exp
+++ b/libstdc++-v3/testsuite/lib/prune.exp
@@ -39,13 +39,16 @@ proc libstdc++-dg-prune { system text } {
# definitions, etc as these confuse dejagnu
regsub -all "(^|\n)(\[^\n\]*: )?In ((static member |lambda )?function|member|method|(copy )?constructor|destructor|instantiation|program|subroutine|block-data)\[^\n\]*" $text "" text
regsub -all "(^|\n)\[^\n\]*(: )?At (top level|global scope):\[^\n\]*" $text "" text
- regsub -all "(^|\n)\[^\n\]*: (recursively )?instantiated from \[^\n\]*" $text "" text
+ regsub -all "(^|\n)\[^\n\]*: (recursively )?required \[^\n\]*" $text "" text
regsub -all "(^|\n)\[^\n\]*: . skipping \[0-9\]* instantiation contexts \[^\n\]*" $text "" text
regsub -all "(^|\n) inlined from \[^\n\]*" $text "" text
# Why doesn't GCC need these to strip header context?
regsub -all "(^|\n)In file included from \[^\n\]*" $text "" text
regsub -all "(^|\n)\[ \t\]*from \[^\n\]*" $text "" text
+ # Ignore informational notes.
+ regsub -all "(^|\n)\[^\n\]*: note: \[^\n\]*" $text "" text
+
# Ignore errata warning from IA64 assembler.
regsub -all "(^|\n)\[^\n\]*: Additional NOP may be necessary to workaround Itanium processor A/B step errata" $text "" text
regsub -all "(^|\n)\[^\n*\]*: Assembler messages:\[^\n\]*" $text "" text
@@ -55,6 +58,9 @@ proc libstdc++-dg-prune { system text } {
regsub -all "(^|\n)\[^\n\]*warning: DWARFDebugInfoEntry::AppendDependants\[^\n\]*AT_\[^\n\]*_bound\[^\n\]*FORM_ref4\[^\n\]*" $text "" text
regsub -all "(^|\n)\[^\n\]*warning:\[^\n\]*TAG_variable: AT_location\[^\n\]*didn't have valid function low pc\[^\n\]*" $text "" text
+ # Ignore harmless warnings from Xcode 4.0.
+ regsub -all "(^|\n)\[^\n\]*ld: warning: could not create compact unwind for\[^\n\]*" $text "" text
+
foreach p $additional_prunes {
if { [string length $p] > 0 } {
# Following regexp matches a complete line containing $p.
diff --git a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
index d05851f0ab..eea39cf6a0 100644
--- a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
+++ b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@ if { [string match "*-*-darwin*" $target_triplet] } {
set lib $blddir/src/.libs/libstdc++.so
}
-set baseline_subdir "[eval exec $cxx --print-multi-dir]"
+set baseline_subdir "[eval exec $cxx $baseline_subdir_switch]"
# Build the support objects.
v3-build_support
diff --git a/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp b/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
index 8642eb7eea..19fa0e2cc7 100644
--- a/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
+++ b/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
@@ -58,6 +58,7 @@ if {[info exists tests_file] && [file exists $tests_file]} {
lappend subdirs "$srcdir/ext"
lappend subdirs "$srcdir/performance"
lappend subdirs "$srcdir/tr1"
+ lappend subdirs "$srcdir/tr2"
lappend subdirs "$srcdir/decimal"
verbose "subdirs are $subdirs"
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/48362.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/48362.cc
new file mode 100644
index 0000000000..97607f1b88
--- /dev/null
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/48362.cc
@@ -0,0 +1,36 @@
+// { dg-do run }
+// { dg-options "-g -std=gnu++11 -O0" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+#include <string>
+
+int
+main()
+{
+ std::tuple<> t1;
+// { dg-final { regexp-test t1 {empty std::(__7::)?tuple} } }
+
+ std::tuple<std::string, int, std::tuple<>> t2{ "Johnny", 5, {} };
+// { dg-final { regexp-test t2 {std::(__7::)?tuple containing = {\[1\] = "Johnny", \[2\] = 5, \[3\] = {<std::(__7::)?tuple<>> = empty std::(__7::)?tuple, <No data fields>}}} } }
+
+ return 0; // Mark SPOT
+}
+
+// { dg-final { gdb-test SPOT } }
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
new file mode 100644
index 0000000000..54b3275789
--- /dev/null
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
@@ -0,0 +1,100 @@
+// { dg-do run }
+// { dg-options "-std=gnu++11 -g" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <forward_list>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <iostream>
+
+template<class T>
+void
+placeholder(const T &s)
+{
+ std::cout << s;
+}
+
+template<class T, class S>
+void
+placeholder(const std::pair<T,S> &s)
+{
+ std::cout << s.first;
+}
+
+template<class T>
+void
+use(const T &container)
+{
+ for (typename T::const_iterator i = container.begin();
+ i != container.end();
+ ++i)
+ placeholder(*i);
+}
+
+int
+main()
+{
+ std::forward_list<int> efl;
+// { dg-final { note-test efl "empty std::forward_list" } }
+
+ std::forward_list<int> fl;
+ fl.push_front(2);
+ fl.push_front(1);
+// { dg-final { note-test fl {std::forward_list = {[0] = 1, [1] = 2}} } }
+
+ std::unordered_map<int, std::string> eum;
+// { dg-final { note-test eum "std::unordered_map with 0 elements" } }
+ std::unordered_multimap<int, std::string> eumm;
+// { dg-final { note-test eumm "std::unordered_multimap with 0 elements" } }
+ std::unordered_set<int> eus;
+// { dg-final { note-test eus "std::unordered_set with 0 elements" } }
+ std::unordered_multiset<int> eums;
+// { dg-final { note-test eums "std::unordered_multiset with 0 elements" } }
+
+ std::unordered_map<int, std::string> uom;
+ uom[5] = "three";
+ uom[3] = "seven";
+// { dg-final { note-test uom {std::unordered_map with 2 elements = {[3] = "seven", [5] = "three"}} } }
+
+ std::unordered_multimap<int, std::string> uomm;
+ uomm.insert(std::pair<int, std::string> (5, "three"));
+ uomm.insert(std::pair<int, std::string> (5, "seven"));
+// { dg-final { note-test uomm {std::unordered_multimap with 2 elements = {[5] = "seven", [5] = "three"}} } }
+
+ std::unordered_set<int> uos;
+ uos.insert(5);
+// { dg-final { note-test uos {std::unordered_set with 1 elements = {[0] = 5}} } }
+
+ std::unordered_multiset<int> uoms;
+ uoms.insert(5);
+// { dg-final { note-test uoms {std::unordered_multiset with 1 elements = {[0] = 5}} } }
+
+ placeholder(""); // Mark SPOT
+ use(efl);
+ use(fl);
+ use(eum);
+ use(eumm);
+ use(eus);
+ use(eums);
+
+ return 0;
+}
+
+// { dg-final { gdb-test SPOT } }
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
new file mode 100644
index 0000000000..bdc8eb974c
--- /dev/null
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
@@ -0,0 +1,92 @@
+// { dg-do run }
+// { dg-options "-g -O0" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#define _GLIBCXX_DEBUG
+
+#include <string>
+#include <deque>
+#include <bitset>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <ext/slist>
+
+int
+main()
+{
+ std::string tem;
+ std::string str = "zardoz";
+// { dg-final { note-test str "\"zardoz\"" } }
+
+ std::bitset<10> bs;
+ bs[0] = 1;
+ bs[5] = 1;
+ bs[7] = 1;
+// { dg-final { note-test bs {std::__debug::bitset = {[0] = 1, [5] = 1, [7] = 1}} } }
+
+ std::deque<std::string> deq;
+ deq.push_back("one");
+ deq.push_back("two");
+// { dg-final { note-test deq {std::__debug::deque with 2 elements = {"one", "two"}} } }
+
+ std::deque<std::string>::iterator deqiter = deq.begin();
+// { dg-final { note-test deqiter {"one"} } }
+
+ std::list<std::string> lst;
+ lst.push_back("one");
+ lst.push_back("two");
+// { dg-final { note-test lst {std::__debug::list = {[0] = "one", [1] = "two"}} } }
+
+ std::list<std::string>::iterator lstiter = lst.begin();
+ tem = *lstiter;
+// { dg-final { note-test lstiter {"one"}} }
+
+ std::list<std::string>::const_iterator lstciter = lst.begin();
+ tem = *lstciter;
+// { dg-final { note-test lstciter {"one"}} }
+
+ std::map<std::string, int> mp;
+ mp["zardoz"] = 23;
+// { dg-final { note-test mp {std::__debug::map with 1 elements = {["zardoz"] = 23}} } }
+
+ std::map<std::string, int>::iterator mpiter = mp.begin();
+// { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
+
+ std::set<std::string> sp;
+ sp.insert("clownfish");
+ sp.insert("barrel");
+// { dg-final { note-test sp {std::__debug::set with 2 elements = {[0] = "barrel", [1] = "clownfish"}} } }
+
+ std::set<std::string>::const_iterator spciter = sp.begin();
+// { dg-final { note-test spciter {"barrel"} } }
+
+ __gnu_cxx::slist<int> sll;
+ sll.push_front(23);
+ sll.push_front(47);
+// { dg-final { note-test sll {__gnu_cxx::slist = {[0] = 47, [1] = 23}} } }
+
+ __gnu_cxx::slist<int>::iterator slliter = sll.begin();
+// { dg-final { note-test slliter {47} } }
+
+ return 0; // Mark SPOT
+}
+
+// { dg-final { gdb-test SPOT } }
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
new file mode 100644
index 0000000000..4098dab70f
--- /dev/null
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
@@ -0,0 +1,51 @@
+# Copyright (C) 2011 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+load_lib gdb-test.exp
+
+dg-init
+v3-build_support
+
+global GDB
+if ![info exists ::env(GUALITY_GDB_NAME)] {
+ if [info exists GDB] {
+ set guality_gdb_name "$GDB"
+ } else {
+ set guality_gdb_name "[transform gdb]"
+ }
+ setenv GUALITY_GDB_NAME "$guality_gdb_name"
+}
+
+if {! [gdb_version_check]} {
+ unsupported "prettyprinters.exp"
+ return
+}
+
+# This can be used to keep the .exe around. dg-test has an option for
+# this but there is no way to pass it through dg-runtest.
+global dg-interpreter-batch-mode
+set dg-interpreter-batch-mode 1
+
+global DEFAULT_CXXFLAGS
+global PCH_CXXFLAGS
+dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
+ "" "$DEFAULT_CXXFLAGS $PCH_CXXFLAGS"
+
+if [info exists guality_gdb_name] {
+ unsetenv GUALITY_GDB_NAME
+}
+
+dg-finish
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc
new file mode 100644
index 0000000000..9328c5f96b
--- /dev/null
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc
@@ -0,0 +1,83 @@
+// { dg-do run }
+// { dg-options "-std=gnu++11 -g" }
+
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <iostream>
+
+template<class T>
+void
+placeholder(const T &s)
+{
+ std::cout << s;
+}
+
+template<class T>
+void
+use(const T &p)
+{
+ placeholder(&p);
+}
+
+struct deleter { void operator()(int*) {} };
+
+std::shared_ptr<int> make(uintptr_t p)
+{
+ return std::shared_ptr<int>(reinterpret_cast<int*>(p), deleter());
+}
+
+int
+main()
+{
+ typedef std::shared_ptr<int> shared;
+ typedef std::weak_ptr<int> weak;
+
+ shared esp;
+// { dg-final { note-test esp "std::shared_ptr (empty) 0x0" } }
+ weak ewp1;
+// { dg-final { note-test ewp1 "std::weak_ptr (empty) 0x0" } }
+ weak ewp2 = esp;
+// { dg-final { note-test ewp2 "std::weak_ptr (empty) 0x0" } }
+
+ shared sp1 = make(0x12345678);
+ shared sp2 = sp1;
+// { dg-final { note-test sp1 "std::shared_ptr (count 2, weak 0) 0x12345678" } }
+
+ shared sp3 = make(0x12344321);
+ weak sp4 = sp3;
+ weak wp1 = sp3;
+// { dg-final { note-test wp1 "std::weak_ptr (count 1, weak 2) 0x12344321" } }
+
+ shared sp5 = make(0x56788765);
+ weak wp2 = sp5;
+ sp5.reset();
+// { dg-final { note-test wp2 "std::weak_ptr (expired, weak 1) 0x56788765" } }
+
+ placeholder(""); // Mark SPOT
+ use(esp);
+ use(ewp1);
+ use(ewp2);
+ use(sp1);
+ use(wp1);
+ use(wp2);
+
+ return 0;
+}
+
+// { dg-final { gdb-test SPOT } }
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
new file mode 100644
index 0000000000..09badbbfe2
--- /dev/null
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
@@ -0,0 +1,92 @@
+// If you modify this, please update debug.cc as well.
+
+// { dg-do run }
+// { dg-options "-g -O0" }
+
+// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <deque>
+#include <bitset>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <ext/slist>
+
+int
+main()
+{
+ std::string tem;
+ std::string str = "zardoz";
+// { dg-final { note-test str "\"zardoz\"" } }
+
+ std::bitset<10> bs;
+ bs[0] = 1;
+ bs[5] = 1;
+ bs[7] = 1;
+// { dg-final { note-test bs {std::bitset = {[0] = 1, [5] = 1, [7] = 1}} } }
+
+ std::deque<std::string> deq;
+ deq.push_back("one");
+ deq.push_back("two");
+// { dg-final { note-test deq {std::deque with 2 elements = {"one", "two"}} } }
+
+ std::deque<std::string>::iterator deqiter = deq.begin();
+// { dg-final { note-test deqiter {"one"} } }
+
+ std::list<std::string> lst;
+ lst.push_back("one");
+ lst.push_back("two");
+// { dg-final { note-test lst {std::list = {[0] = "one", [1] = "two"}} } }
+
+ std::list<std::string>::iterator lstiter = lst.begin();
+ tem = *lstiter;
+// { dg-final { note-test lstiter {"one"}} }
+
+ std::list<std::string>::const_iterator lstciter = lst.begin();
+ tem = *lstciter;
+// { dg-final { note-test lstciter {"one"}} }
+
+ std::map<std::string, int> mp;
+ mp["zardoz"] = 23;
+// { dg-final { note-test mp {std::map with 1 elements = {["zardoz"] = 23}} } }
+
+ std::map<std::string, int>::iterator mpiter = mp.begin();
+// { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
+
+ std::set<std::string> sp;
+ sp.insert("clownfish");
+ sp.insert("barrel");
+// { dg-final { note-test sp {std::set with 2 elements = {[0] = "barrel", [1] = "clownfish"}} } }
+
+ std::set<std::string>::const_iterator spciter = sp.begin();
+// { dg-final { note-test spciter {"barrel"} } }
+
+ __gnu_cxx::slist<int> sll;
+ sll.push_front(23);
+ sll.push_front(47);
+// { dg-final { note-test sll {__gnu_cxx::slist = {[0] = 47, [1] = 23}} } }
+
+ __gnu_cxx::slist<int>::iterator slliter = sll.begin();
+// { dg-final { note-test slliter {47} } }
+
+ return 0; // Mark SPOT
+}
+
+// { dg-final { gdb-test SPOT } }
diff --git a/libstdc++-v3/testsuite/performance/23_containers/copy_construct/unordered_set.cc b/libstdc++-v3/testsuite/performance/23_containers/copy_construct/unordered_set.cc
new file mode 100644
index 0000000000..f214d1dd66
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/copy_construct/unordered_set.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <unordered_set>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ std::unordered_set<int> ref;
+ for (int i = 0; i != 500000; ++i)
+ ref.insert(i);
+
+ start_counters(time, resource);
+
+ for (unsigned i = 0; i < 500; ++i)
+ std::unordered_set<int> v(ref);
+
+ stop_counters(time, resource);
+ report_performance(__FILE__, "unordered_set<int> copy", time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/23_containers/insert/unordered_set.cc b/libstdc++-v3/testsuite/performance/23_containers/insert/unordered_set.cc
new file mode 100644
index 0000000000..83d3935956
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/insert/unordered_set.cc
@@ -0,0 +1,42 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=c++11" }
+
+#include <unordered_set>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ const int sz = 10000000;
+
+ std::unordered_set<int> s;
+ start_counters(time, resource);
+
+ for (int i = 0; i != sz ; ++i)
+ s.insert(i);
+
+ stop_counters(time, resource);
+ report_performance(__FILE__, "unordered_set 10000000 insertions",
+ time, resource);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/23_containers/insert_erase/41975.cc b/libstdc++-v3/testsuite/performance/23_containers/insert_erase/41975.cc
new file mode 100644
index 0000000000..a5dae41dc6
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/insert_erase/41975.cc
@@ -0,0 +1,183 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <sstream>
+#include <unordered_set>
+#include <testsuite_performance.h>
+
+namespace
+{
+ // Bench using an unordered_set<int>. Hash functor for int is quite
+ // predictable so it helps bench very specific use cases.
+ template<bool use_cache>
+ void bench()
+ {
+ using namespace __gnu_test;
+ std::ostringstream ostr;
+ ostr << "unordered_set<int> " << (use_cache ? "with" : "without")
+ << " cache";
+ const std::string desc = ostr.str();
+
+ time_counter time;
+ resource_counter resource;
+
+ const int nb = 200000;
+ start_counters(time, resource);
+
+ std::__unordered_set<int, std::hash<int>, std::equal_to<int>,
+ std::allocator<int>, use_cache> us;
+ for (int i = 0; i != nb; ++i)
+ us.insert(i);
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": first insert";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+
+ start_counters(time, resource);
+
+ // Here is the worst erase use case when hashtable implementation was
+ // something like vector<forward_list<>>. Erasing from the end was very
+ // costly because we need to return the iterator following the erased
+ // one, as the hashtable is getting emptier at each step there are
+ // more and more empty bucket to loop through to reach the end of the
+ // container and find out that it was in fact the last element.
+ for (int j = nb - 1; j >= 0; --j)
+ {
+ auto it = us.find(j);
+ if (it != us.end())
+ us.erase(it);
+ }
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": erase from iterator";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+
+ start_counters(time, resource);
+
+ // This is a worst insertion use case for the current implementation as
+ // we insert an element at the begining of the hashtable and then we
+ // insert starting at the end so that each time we need to seek up to the
+ // first bucket to find the first non-empty one.
+ us.insert(0);
+ for (int i = nb - 1; i >= 0; --i)
+ us.insert(i);
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": second insert";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+
+ start_counters(time, resource);
+
+ for (int j = nb - 1; j >= 0; --j)
+ us.erase(j);
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": erase from key";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+ }
+
+ // Bench using unordered_set<string> that show how important it is to cache
+ // hash code as computing string hash code is quite expensive compared to
+ // computing it for int.
+ template<bool use_cache>
+ void bench_str()
+ {
+ using namespace __gnu_test;
+ std::ostringstream ostr;
+ ostr << "unordered_set<string> " << (use_cache ? "with" : "without")
+ << " cache";
+ const std::string desc = ostr.str();
+
+ time_counter time;
+ resource_counter resource;
+
+ const int nb = 200000;
+ // First generate once strings that are going to be used throughout the
+ // bench:
+ std::vector<std::string> strs;
+ strs.reserve(nb);
+ for (int i = 0; i != nb; ++i)
+ {
+ ostr.str("");
+ ostr << "string #" << i;
+ strs.push_back(ostr.str());
+ }
+
+ start_counters(time, resource);
+
+ std::__unordered_set<std::string, std::hash<std::string>,
+ std::equal_to<std::string>,
+ std::allocator<std::string>, use_cache> us;
+ for (int i = 0; i != nb; ++i)
+ us.insert(strs[i]);
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": first insert";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+
+ start_counters(time, resource);
+
+ for (int j = nb - 1; j >= 0; --j)
+ {
+ auto it = us.find(strs[j]);
+ if (it != us.end())
+ us.erase(it);
+ }
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": erase from iterator";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+
+ start_counters(time, resource);
+
+ us.insert(strs[0]);
+ for (int i = nb - 1; i >= 0; --i)
+ us.insert(strs[i]);
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": second insert";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+
+ start_counters(time, resource);
+
+ for (int j = nb - 1; j >= 0; --j)
+ us.erase(strs[j]);
+
+ stop_counters(time, resource);
+ ostr.str("");
+ ostr << desc << ": erase from key";
+ report_performance(__FILE__, ostr.str().c_str(), time, resource);
+ }
+}
+
+int main()
+{
+ bench<false>();
+ bench<true>();
+ bench_str<false>();
+ bench_str<true>();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc b/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
index c7dbdc006c..461dfc044a 100644
--- a/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
+++ b/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc b/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
index 4318bd4f46..35d5d79dec 100644
--- a/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
+++ b/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc b/libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
index 13bc6ad9f2..596ded8b20 100644
--- a/libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
+++ b/libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
@@ -31,7 +31,7 @@ using namespace __gnu_test;
const int length = 10000000;
const int match_length = 3;
-int array[length];
+int ary[length];
int
main(void)
@@ -41,10 +41,10 @@ main(void)
int match = rand() % (match_length - 1);
for(int i = 0; i < length; i++)
{
- array[i] = (match != 0) ? 1 : 0;
+ ary[i] = (match != 0) ? 1 : 0;
if(--match < 0) match = rand() % (match_length - 1);
}
- __gnu_test::test_container<int, forward_iterator_wrapper> fcon(array, array + length);
+ __gnu_test::test_container<int, forward_iterator_wrapper> fcon(ary, ary + length);
start_counters(time, resource);
for(int i = 0; i < 100; i++)
search_n(fcon.begin(), fcon.end(), 10, 1);
@@ -52,7 +52,7 @@ main(void)
report_performance(__FILE__, "forward iterator", time, resource);
clear_counters(time, resource);
- __gnu_test::test_container<int, random_access_iterator_wrapper> rcon(array, array + length);
+ __gnu_test::test_container<int, random_access_iterator_wrapper> rcon(ary, ary + length);
start_counters(time, resource);
for(int i = 0; i < 100; i++)
search_n(rcon.begin(), rcon.end(), 10, 1);
diff --git a/libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc b/libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc
index 40600d5a75..eafe67c9c2 100644
--- a/libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <cstdio>
#include <fstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc b/libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc
index 10b1746f7b..81f99a78a9 100644
--- a/libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <cstdio>
#include <fstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc b/libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
index f55d533775..f4e95ba21f 100644
--- a/libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <fstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc b/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc
index f12d497747..22e811ae3f 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <cstdio>
#include <fstream>
#include <string>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc b/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
index 2df70ccd5f..23636a2d99 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <fstream>
#include <sstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc b/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
index 7491ad331f..ac6f5985bc 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <fstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc b/libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc
index 8c9ebd3625..3fc5e23392 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <cstdio>
#include <fstream>
#include <string>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc b/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
index 203550db1f..6d558e51b8 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <fstream>
#include <sstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc b/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
index 22ac7982e7..60cedbb2a8 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
+#include <unistd.h>
#include <fstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc b/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
index 83fde27100..26cf632e42 100644
--- a/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
+++ b/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,7 +22,7 @@
inline bool is_ready(std::shared_future<void>& f)
{
- return f.wait_for(std::chrono::microseconds(1));
+ return f.wait_for(std::chrono::microseconds(1)) == std::future_status::ready;
}
void poll(std::shared_future<void> f)
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_find_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_find.cc
index cdf1510511..cdf1510511 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_find_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_find.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_find.cc
index 1680ff4ffc..1680ff4ffc 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_find.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_insert.cc
index 07d644e4fe..07d644e4fe 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_insert.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_text_find.cc
index b997a5ee9c..b997a5ee9c 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/all_text_find.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_int_erase_mem.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_int_erase_mem.cc
new file mode 100644
index 0000000000..f80c77b8a2
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_int_erase_mem.cc
@@ -0,0 +1,118 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file hash_random_int_erase_mem_usage_test.cpp
+ * Contains test for erasing random integers.
+ */
+
+#include <ext/typelist.h>
+#include <testsuite_allocator.h>
+#include <performance/io/xml_formatter.hpp>
+#include <io/verified_cmd_line_input.hpp>
+#include <testsuite_rng.h>
+#include <common_type/assoc/common_type.hpp>
+#include <performance/assoc/mem_usage/erase_test.hpp>
+#include <iostream>
+#include <vector>
+#include <functional>
+
+struct int_hash : public std::unary_function<int, int>
+{
+ inline int
+ operator()(int i) const
+ { return i; }
+};
+
+void
+usage();
+
+int
+main(int argc, char* a_p_argv[])
+{
+ using namespace __gnu_pbds::test;
+
+ size_t vn = 200;
+ size_t vs = 200;
+ size_t vm = 2100;
+ try
+ {
+ xml_test_performance_formatter fmt("Size", "Memory (bytes)");
+
+ typedef std::vector<int> vec_t;
+ vec_t a_v(vm);
+ twister_rand_gen g;
+ for (size_t i = 0; i < vm; ++i)
+ a_v[i] = static_cast<int>(g.get_unsigned_long());
+
+ vec_t::const_iterator b = a_v.begin();
+ erase_test<vec_t::const_iterator> tst(b, vn, vs, vm);
+ typedef __gnu_test::tracker_allocator<char> alloc_t;
+ {
+ typedef hash_common_types<int, __gnu_pbds::null_type, int_hash, std::equal_to<int>, alloc_t>::performance_tl tl_t;
+
+ tl_t tl;
+ __gnu_cxx::typelist::apply(tst, tl);
+ }
+
+ {
+ typedef native_hash_set<int, 8, int_hash, std::equal_to<int>, std::less<int>, alloc_t> native_t;
+
+ tst(native_t());
+ }
+ }
+ catch (...)
+ {
+ std::cerr << "Test failed" << std::endl;
+ return -1;
+ }
+ return 0;
+}
+
+void
+usage()
+{
+ using namespace std;
+ cerr << "usage: hash_random_int_erase_if_test <vn> <vs> <vm>"
+ << endl << endl;
+
+ cerr << "This test checks the performance of various associative containers "
+ "using their erase method. " << endl;
+ cerr << "Specifically, it does the following:" << endl;
+ cerr << "* Creates a vector of random integers " << endl;
+ cerr << "* Inserts the elements into the container" << endl;
+ cerr << "* Erases all the elements, except one, from the constainer"
+ << endl << endl;
+
+ cerr << "vn = minimum size of the vector" << endl;
+ cerr << "vs = step size of the vector" << endl;
+ cerr << "vm = maximum size of the vector" << endl;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc
deleted file mode 100644
index e1c7d9ec8d..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file hash_random_int_erase_mem_usage_test.cpp
- * Contains test for erasing random integers.
- */
-
-#include <ext/typelist.h>
-#include <testsuite_allocator.h>
-#include <performance/io/xml_formatter.hpp>
-#include <io/verified_cmd_line_input.hpp>
-#include <testsuite_rng.h>
-#include <common_type/assoc/common_type.hpp>
-#include <performance/assoc/mem_usage/erase_test.hpp>
-#include <iostream>
-#include <vector>
-#include <functional>
-
-struct int_hash : public std::unary_function<int, int>
-{
- inline int
- operator()(int i) const
- { return i; }
-};
-
-void
-usage();
-
-int
-main(int argc, char* a_p_argv[])
-{
- using namespace __gnu_pbds::test;
-
- size_t vn = 200;
- size_t vs = 200;
- size_t vm = 2100;
- try
- {
- xml_test_performance_formatter fmt("Size", "Memory (bytes)");
-
- typedef std::vector<int> vec_t;
- vec_t a_v(vm);
- twister_rand_gen g;
- for (size_t i = 0; i < vm; ++i)
- a_v[i] = static_cast<int>(g.get_unsigned_long());
-
- vec_t::const_iterator b = a_v.begin();
- erase_test<vec_t::const_iterator> tst(b, vn, vs, vm);
- typedef __gnu_test::tracker_allocator<char> alloc_t;
- {
- typedef hash_common_types<int, __gnu_pbds::null_mapped_type, int_hash, std::equal_to<int>, alloc_t>::performance_tl tl_t;
-
- tl_t tl;
- __gnu_cxx::typelist::apply(tst, tl);
- }
-
- {
- typedef native_hash_set<int, 8, int_hash, std::equal_to<int>, std::less<int>, alloc_t> native_t;
-
- tst(native_t());
- }
- }
- catch (...)
- {
- std::cerr << "Test failed" << std::endl;
- return -1;
- }
- return 0;
-}
-
-void
-usage()
-{
- using namespace std;
- cerr << "usage: hash_random_int_erase_if_test <vn> <vs> <vm>"
- << endl << endl;
-
- cerr << "This test checks the performance of various associative containers "
- "using their erase method. " << endl;
- cerr << "Specifically, it does the following:" << endl;
- cerr << "* Creates a vector of random integers " << endl;
- cerr << "* Inserts the elements into the container" << endl;
- cerr << "* Erases all the elements, except one, from the constainer"
- << endl << endl;
-
- cerr << "vn = minimum size of the vector" << endl;
- cerr << "vs = step size of the vector" << endl;
- cerr << "vm = maximum size of the vector" << endl;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_int_find.cc
index 82abb640bb..82abb640bb 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_int_find.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find.hpp
index 3b850840bf..3b850840bf 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find.hpp
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_large.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_large.cc
new file mode 100644
index 0000000000..68fd9792fb
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_large.cc
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "multimap_text_find.hpp"
+
+void
+set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
+{
+ prm = 100;
+ n = 3;
+ s = 4;
+ m = 20;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_small.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_small.cc
new file mode 100644
index 0000000000..113a01810d
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_small.cc
@@ -0,0 +1,42 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "multimap_text_find.hpp"
+
+void
+set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
+{
+ prm = 400;
+ n = 1;
+ s = 1;
+ m = 6;
+}
+
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc
deleted file mode 100644
index b4b2179e9d..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "multimap_text_find_timing.hpp"
-
-void
-set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
-{
- prm = 100;
- n = 3;
- s = 4;
- m = 20;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc
deleted file mode 100644
index 75cfa8ed32..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "multimap_text_find_timing.hpp"
-
-void
-set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
-{
- prm = 400;
- n = 1;
- s = 1;
- m = 6;
-}
-
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing.hpp b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert.hpp
index 79f0812634..79f0812634 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing.hpp
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert.hpp
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_large.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_large.cc
new file mode 100644
index 0000000000..1da0f2a0a3
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_large.cc
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "multimap_text_insert.hpp"
+
+void
+set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
+{
+ prm = 100;
+ n = 3;
+ s = 4;
+ m = 20;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage.hpp b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem.hpp
index 881960fc80..881960fc80 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage.hpp
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem.hpp
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_large.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_large.cc
new file mode 100644
index 0000000000..7143278e27
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_large.cc
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "multimap_text_insert_mem.hpp"
+
+void
+set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
+{
+ prm = 100;
+ n = 3;
+ s = 4;
+ m = 20;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_small.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_small.cc
new file mode 100644
index 0000000000..c152a84cb0
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_small.cc
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "multimap_text_insert_mem.hpp"
+
+void
+set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
+{
+ prm = 400;
+ n = 1;
+ s = 1;
+ m = 6;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc
deleted file mode 100644
index 3968645529..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "multimap_text_insert_mem_usage.hpp"
-
-void
-set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
-{
- prm = 100;
- n = 3;
- s = 4;
- m = 20;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc
deleted file mode 100644
index 1dd88df6c3..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "multimap_text_insert_mem_usage.hpp"
-
-void
-set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
-{
- prm = 400;
- n = 1;
- s = 1;
- m = 6;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_small.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_small.cc
new file mode 100644
index 0000000000..ef28c2d59e
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_small.cc
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "multimap_text_insert.hpp"
+
+void
+set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
+{
+ prm = 400;
+ n = 1;
+ s = 1;
+ m = 6;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_large.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_large.cc
deleted file mode 100644
index 70c3dafafc..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_large.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "multimap_text_insert_timing.hpp"
-
-void
-set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
-{
- prm = 100;
- n = 3;
- s = 4;
- m = 20;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc
deleted file mode 100644
index 57deebb144..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "multimap_text_insert_timing.hpp"
-
-void
-set_test_parameters(size_t& prm, size_t&n, size_t& s, size_t& m)
-{
- prm = 400;
- n = 1;
- s = 1;
- m = 6;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push.cc
index 5245521c85..5245521c85 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push_pop.cc
index 6e59bdcd83..6e59bdcd83 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push_pop.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join.cc
index cad1d3596b..cad1d3596b 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.hpp b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify.hpp
index 8f31e11d92..8f31e11d92 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.hpp
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify.hpp
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down.cc
new file mode 100644
index 0000000000..5435956ff4
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down.cc
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "priority_queue_text_modify.hpp"
+
+void
+set_test_parameters(bool& b)
+{ b = false; }
+
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc
deleted file mode 100644
index ce7f3ff497..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "priority_queue_text_modify_timing.hpp"
-
-void
-set_test_parameters(bool& b)
-{ b = false; }
-
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up.cc
new file mode 100644
index 0000000000..ecb786a3df
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up.cc
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+#include "priority_queue_text_modify.hpp"
+
+void
+set_test_parameters(bool& b)
+{ b = true; }
+
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc
deleted file mode 100644
index cf6e499936..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-#include "priority_queue_text_modify_timing.hpp"
-
-void
-set_test_parameters(bool& b)
-{ b = true; }
-
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem.cc
new file mode 100644
index 0000000000..50423db3d7
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem.cc
@@ -0,0 +1,122 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file priority_queue_text_push_pop_timing_test.cpp
+ * Contains test for finding text.
+ */
+
+#include <iostream>
+#include <vector>
+#include <ext/typelist.h>
+#include <testsuite_allocator.h>
+#include <performance/io/xml_formatter.hpp>
+#include <io/verified_cmd_line_input.hpp>
+#include <common_type/priority_queue/common_type.hpp>
+#include <performance/priority_queue/mem_usage/pop_test.hpp>
+#include <io/text_populate.hpp>
+#include <native_type/native_priority_queue.hpp>
+
+void
+usage();
+
+int
+main(int argc, char* a_p_argv[])
+{
+ using namespace __gnu_pbds::test;
+ std::string f_name = "thirty_years_among_the_dead_preproc.txt";
+
+ size_t vn = 200;
+ size_t vs = 200;
+ size_t vm = 2100;
+ try
+ {
+ xml_test_performance_formatter fmt("Size", "Memory (bytes)");
+ typedef __gnu_test::tracker_allocator<char> allocator_type;
+ typedef std::char_traits<char> traits_type;
+ typedef std::basic_string<char, traits_type, allocator_type> string_t;
+ typedef std::less<string_t> cmp_type;
+
+ typedef std::vector<std::pair<string_t, char> > vec_t;
+ vec_t a_v(vm);
+ text_populate(f_name, a_v);
+
+ typedef pop_test<vec_t::const_iterator> test_t;
+ vec_t::const_iterator b = a_v.begin();
+ test_t tst(b, vn, vs, vm);
+ {
+ typedef pq_common_types<string_t, cmp_type, allocator_type>::performance_tl pq_tl_t;
+ pq_tl_t tl;
+ __gnu_cxx::typelist::apply(tst, tl);
+ }
+
+ {
+ typedef native_priority_queue<string_t, true, cmp_type,
+ allocator_type> native_pq_t;
+ tst(native_pq_t());
+ }
+
+ {
+ typedef native_priority_queue<string_t, false, cmp_type,
+ allocator_type> native_pq_t;
+ tst(native_pq_t());
+ }
+ }
+ catch (...)
+ {
+ std::cerr << "Test failed" << std::endl;
+ return -1;
+ }
+ return 0;
+}
+
+void
+usage()
+{
+ using namespace std;
+ cerr << "usage: priority_queue_text_pop_mem_usage_test <f_name> <vn> <vs> <vm>" <<
+ endl << endl;
+
+ cerr <<
+ "This test checks the performance of various priority_queueiative containers "
+ "using their push method. " << endl;
+ cerr << "Specifically, it does the following:" << endl;
+ cerr << "* Creates a vector of text words " << endl;
+ cerr << "* Pushes the elements into the container, then pops until it's empty." << endl;
+
+ cerr << endl << endl;
+
+ cerr << "f_name = file name containing the text words. "
+ "Each line should contain one word." << endl;
+ cerr << "vn = minimum size of the vector" << endl;
+ cerr << "vs = step size of the vector" << endl;
+ cerr << "vm = maximum size of the vector" << endl;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc
deleted file mode 100644
index 8c0181e986..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc
+++ /dev/null
@@ -1,119 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file priority_queue_text_push_pop_timing_test.cpp
- * Contains test for finding text.
- */
-
-#include <iostream>
-#include <vector>
-#include <ext/typelist.h>
-#include <testsuite_allocator.h>
-#include <performance/io/xml_formatter.hpp>
-#include <io/verified_cmd_line_input.hpp>
-#include <common_type/priority_queue/common_type.hpp>
-#include <performance/priority_queue/mem_usage/pop_test.hpp>
-#include <io/text_populate.hpp>
-#include <native_type/native_priority_queue.hpp>
-
-void
-usage();
-
-int
-main(int argc, char* a_p_argv[])
-{
- using namespace __gnu_pbds::test;
- std::string f_name = "thirty_years_among_the_dead_preproc.txt";
-
- size_t vn = 200;
- size_t vs = 200;
- size_t vm = 2100;
- try
- {
- xml_test_performance_formatter fmt("Size", "Memory (bytes)");
- typedef __gnu_test::tracker_allocator<char> callocator_type;
- typedef __gnu_test::tracker_allocator<char> sallocator_type;
- typedef std::basic_string<char, std::char_traits<char>, callocator_type> string_t;
-
- typedef std::vector<std::pair<string_t, char> > vec_t;
- vec_t a_v(vm);
- text_populate(f_name, a_v);
-
- typedef pop_test<vec_t::const_iterator> test_t;
- vec_t::const_iterator b = a_v.begin();
- test_t tst(b, vn, vs, vm);
- {
- typedef pq_common_types<string_t, std::less<string_t>, callocator_type>::performance_tl pq_tl_t;
- pq_tl_t tl;
- __gnu_cxx::typelist::apply(tst, tl);
- }
-
- {
- typedef native_priority_queue<string_t, true, std::less<string_t>, sallocator_type> native_pq_t;
- tst(native_pq_t());
- }
-
- {
- typedef native_priority_queue<string_t, false, std::less<string_t>, sallocator_type> native_pq_t;
- tst(native_pq_t());
- }
- }
- catch (...)
- {
- std::cerr << "Test failed" << std::endl;
- return -1;
- }
- return 0;
-}
-
-void
-usage()
-{
- using namespace std;
- cerr << "usage: priority_queue_text_pop_mem_usage_test <f_name> <vn> <vs> <vm>" <<
- endl << endl;
-
- cerr <<
- "This test checks the performance of various priority_queueiative containers "
- "using their push method. " << endl;
- cerr << "Specifically, it does the following:" << endl;
- cerr << "* Creates a vector of text words " << endl;
- cerr << "* Pushes the elements into the container, then pops until it's empty." << endl;
-
- cerr << endl << endl;
-
- cerr << "f_name = file name containing the text words. "
- "Each line should contain one word." << endl;
- cerr << "vn = minimum size of the vector" << endl;
- cerr << "vs = step size of the vector" << endl;
- cerr << "vm = maximum size of the vector" << endl;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push.cc
index ca5ff6d2a8..ca5ff6d2a8 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop.cc
index a55a61e7b4..a55a61e7b4 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics.cc
new file mode 100644
index 0000000000..eab8950a9f
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics.cc
@@ -0,0 +1,105 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file tree_order_statistics_timing_test.cpp
+ * Contains test for order_statisticsing trees.
+ */
+
+#include <iostream>
+#include <vector>
+#include <ext/typelist.h>
+#include <performance/io/xml_formatter.hpp>
+#include <io/verified_cmd_line_input.hpp>
+#include <testsuite_rng.h>
+#include <common_type/assoc/common_type.hpp>
+#include <performance/assoc/timing/tree_order_statistics_test.hpp>
+
+void
+usage();
+
+int
+main(int argc, char* a_p_argv[])
+{
+ using namespace __gnu_pbds::test;
+ size_t vn = 200;
+ size_t vs = 200;
+ size_t vm = 2100;
+
+ try
+ {
+ xml_test_performance_formatter fmt("Size", "Average time (sec.)");
+
+ {
+ typedef tree_order_statistics_test< true> test_t;
+ test_t tst(vn, vs, vm);
+ typedef tree_common_types<int, __gnu_pbds::null_type, std::less<int>, __gnu_pbds::tree_order_statistics_node_update>::performance_tl tl_t;
+ tl_t tl;
+ __gnu_cxx::typelist::apply(tst, tl);
+ }
+
+ {
+ typedef tree_order_statistics_test<false> test_t;
+ test_t tst(vn, vs, vm);
+ typedef native_set<int> native_set_t;
+ tst(native_set_t());
+ }
+ }
+ catch(...)
+ {
+ std::cerr << "Test failed" << std::endl;
+ return -1;
+ }
+ return 0;
+}
+
+void
+usage()
+{
+ using namespace std;
+ cerr << "usage: tree_order_statistics_timing_test.out <vn> <vs> <vm>" <<
+ endl << endl;
+
+ cerr << "This test checks the performance of order statistics"
+ " in tree based containers. " << endl;
+ cerr << "Specifically, it does the following:" << endl;
+ cerr << "* Creates a tree" << endl;
+ cerr << "* Inserts integers into the tree" << endl;
+ cerr << "* Checks the order-statistics of each entry in the tree" << endl;
+ cerr << "* Repeats the above test some times"
+ << endl;
+
+ cerr << endl << endl;
+
+ cerr << "vn = minimum size of the tree" << endl;
+ cerr << "vs = step size of the tree" << endl;
+ cerr << "vm = maximum size of the tree" << endl;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc
deleted file mode 100644
index 95806685ba..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file tree_order_statistics_timing_test.cpp
- * Contains test for order_statisticsing trees.
- */
-
-#include <iostream>
-#include <vector>
-#include <ext/typelist.h>
-#include <performance/io/xml_formatter.hpp>
-#include <io/verified_cmd_line_input.hpp>
-#include <testsuite_rng.h>
-#include <common_type/assoc/common_type.hpp>
-#include <performance/assoc/timing/tree_order_statistics_test.hpp>
-
-void
-usage();
-
-int
-main(int argc, char* a_p_argv[])
-{
- using namespace __gnu_pbds::test;
- size_t vn = 200;
- size_t vs = 200;
- size_t vm = 2100;
-
- try
- {
- xml_test_performance_formatter fmt("Size", "Average time (sec.)");
-
- {
- typedef tree_order_statistics_test< true> test_t;
- test_t tst(vn, vs, vm);
- typedef tree_common_types<int, __gnu_pbds::null_mapped_type, std::less<int>, __gnu_pbds::tree_order_statistics_node_update>::performance_tl tl_t;
- tl_t tl;
- __gnu_cxx::typelist::apply(tst, tl);
- }
-
- {
- typedef tree_order_statistics_test<false> test_t;
- test_t tst(vn, vs, vm);
- typedef native_set<int> native_set_t;
- tst(native_set_t());
- }
- }
- catch(...)
- {
- std::cerr << "Test failed" << std::endl;
- return -1;
- }
- return 0;
-}
-
-void
-usage()
-{
- using namespace std;
- cerr << "usage: tree_order_statistics_timing_test.out <vn> <vs> <vm>" <<
- endl << endl;
-
- cerr << "This test checks the performance of order statistics"
- " in tree based containers. " << endl;
- cerr << "Specifically, it does the following:" << endl;
- cerr << "* Creates a tree" << endl;
- cerr << "* Inserts integers into the tree" << endl;
- cerr << "* Checks the order-statistics of each entry in the tree" << endl;
- cerr << "* Repeats the above test some times"
- << endl;
-
- cerr << endl << endl;
-
- cerr << "vn = minimum size of the tree" << endl;
- cerr << "vs = step size of the tree" << endl;
- cerr << "vm = maximum size of the tree" << endl;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join.cc
new file mode 100644
index 0000000000..a9423e2576
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join.cc
@@ -0,0 +1,107 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file tree_split_join_timing_test.cpp
+ * Contains test for joining trees.
+ */
+
+#include <ext/typelist.h>
+#include <performance/io/xml_formatter.hpp>
+#include <io/verified_cmd_line_input.hpp>
+#include <testsuite_rng.h>
+#include <common_type/assoc/common_type.hpp>
+#include <performance/assoc/timing/tree_split_join_test.hpp>
+#include <iostream>
+#include <vector>
+
+void
+usage();
+
+int
+main(int argc, char* a_p_argv[])
+{
+ using namespace __gnu_pbds::test;
+ size_t vn = 200;
+ size_t vs = 200;
+ size_t vm = 2100;
+
+ try
+ {
+ xml_test_performance_formatter fmt("Size", "Average time (sec.)");
+
+ {
+ typedef tree_split_join_test<true> test_t;
+ test_t tst(vn, vs, vm);
+
+ typedef tree_common_types<int, __gnu_pbds::null_type>::performance_tl tl_t;
+ tl_t tl;
+ __gnu_cxx::typelist::apply(tst, tl);
+ }
+
+ {
+ typedef tree_split_join_test<false> test_t;
+ test_t tst(vn, vs, vm);
+ typedef native_set<int> native_set_t;
+ tst(native_set_t());
+ }
+ }
+ catch(...)
+ {
+ std::cerr << "Test failed" << std::endl;
+ return -1;
+ }
+ return 0;
+}
+
+void
+usage()
+{
+ using namespace std;
+ cerr << "usage: tree_split_join_test.cpp <vn> <vs> <vm>" <<
+ endl << endl;
+
+ cerr << "This test checks the performance of splitting joining"
+ "tree based containers. " << endl;
+ cerr << "Specifically, it does the following:" << endl;
+ cerr << "* Creates a tree " << endl;
+ cerr << "* Inserts integers into the tree" << endl;
+ cerr << "* Splits half the tree into a different tree" << endl;
+ cerr << "* Joins the trees" << endl;
+ cerr << "* Repeats the above test a given number of times) "
+ << endl;
+
+ cerr << endl << endl;
+
+ cerr << "vn = minimum size of the tree" << endl;
+ cerr << "vs = step size of the tree" << endl;
+ cerr << "vm = maximum size of the tree" << endl;
+}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc
deleted file mode 100644
index c10fe01cd6..0000000000
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms
-// of the GNU General Public License as published by the Free Software
-// Foundation; either version 3, or (at your option) any later
-// version.
-
-// This library is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file tree_split_join_timing_test.cpp
- * Contains test for joining trees.
- */
-
-#include <ext/typelist.h>
-#include <performance/io/xml_formatter.hpp>
-#include <io/verified_cmd_line_input.hpp>
-#include <testsuite_rng.h>
-#include <common_type/assoc/common_type.hpp>
-#include <performance/assoc/timing/tree_split_join_test.hpp>
-#include <iostream>
-#include <vector>
-
-void
-usage();
-
-int
-main(int argc, char* a_p_argv[])
-{
- using namespace __gnu_pbds::test;
- size_t vn = 200;
- size_t vs = 200;
- size_t vm = 2100;
-
- try
- {
- xml_test_performance_formatter fmt("Size", "Average time (sec.)");
-
- {
- typedef tree_split_join_test<true> test_t;
- test_t tst(vn, vs, vm);
-
- typedef tree_common_types<int, __gnu_pbds::null_mapped_type>::performance_tl tl_t;
- tl_t tl;
- __gnu_cxx::typelist::apply(tst, tl);
- }
-
- {
- typedef tree_split_join_test<false> test_t;
- test_t tst(vn, vs, vm);
- typedef native_set<int> native_set_t;
- tst(native_set_t());
- }
- }
- catch(...)
- {
- std::cerr << "Test failed" << std::endl;
- return -1;
- }
- return 0;
-}
-
-void
-usage()
-{
- using namespace std;
- cerr << "usage: tree_split_join_test.cpp <vn> <vs> <vm>" <<
- endl << endl;
-
- cerr << "This test checks the performance of splitting joining"
- "tree based containers. " << endl;
- cerr << "Specifically, it does the following:" << endl;
- cerr << "* Creates a tree " << endl;
- cerr << "* Inserts integers into the tree" << endl;
- cerr << "* Splits half the tree into a different tree" << endl;
- cerr << "* Joins the trees" << endl;
- cerr << "* Repeats the above test a given number of times) "
- << endl;
-
- cerr << endl << endl;
-
- cerr << "vn = minimum size of the tree" << endl;
- cerr << "vs = step size of the tree" << endl;
- cerr << "vm = maximum size of the tree" << endl;
-}
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert.cc
index 43466a2bfd..43466a2bfd 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert.cc
diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find.cc
index dc205547d7..dc205547d7 100644
--- a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc
+++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find.cc
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc
index eb067a97b3..1950459a91 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc
@@ -46,4 +46,5 @@ main()
test01();
return 0;
}
-// { dg-excess-errors "In constructor" }
+
+// { dg-prune-output "cannot convert" }
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc
index f4d960da84..73ffdcbc10 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc
@@ -45,4 +45,3 @@ main()
test01();
return 0;
}
-// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
index 490cfc4cce..ec41e5be85 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
@@ -46,6 +46,6 @@ main()
test01();
return 0;
}
-// { dg-error "In member function" "" { target *-*-* } 0 }
+// { dg-error "In instantiation" "" { target *-*-* } 0 }
// { dg-error "cannot convert" "" { target *-*-* } 0 }
-// { dg-error "instantiated from" "" { target *-*-* } 0 }
+// { dg-error "required from" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
index 0b86e8eeb9..0309f8fc6b 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2012 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc
index 1d7b921a89..0990e5e3cc 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc
@@ -44,4 +44,3 @@ main()
test01();
return 0;
}
-// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc
index 27fbc70dc0..3cf9ba16f7 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc
@@ -1,5 +1,5 @@
-// { dg-do run { xfail *-*-* } }
-// Copyright (C) 2005, 2009 Free Software Foundation
+// { dg-do run }
+// Copyright (C) 2005, 2009, 2010, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ struct A { };
int
test01()
{
- bool test __attribute__((unused)) = true;
+ bool test = false;
std::tr1::shared_ptr<A> a1(new A);
std::tr1::weak_ptr<A> wa(a1);
@@ -42,12 +42,9 @@ test01()
catch (const std::tr1::bad_weak_ptr&)
{
// Expected.
- __throw_exception_again;
- }
- catch (...)
- {
- // Failed.
+ test = true;
}
+ VERIFY( test );
return 0;
}
diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/bind/cv_quals.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/bind/cv_quals.cc
new file mode 100644
index 0000000000..5ea373647f
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/3_function_objects/bind/cv_quals.cc
@@ -0,0 +1,53 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+#include <tr1/functional>
+
+struct X
+{
+ int operator()() const { return 0; }
+ int operator()() volatile { return 1; }
+ int operator()() const volatile { return 2; }
+ void operator()() { };
+};
+
+void test01()
+{
+ static_assert( std::tr1::is_placeholder<__typeof(std::tr1::placeholders::_1)>::value,
+ "decltype(_1) is a placeholder type" );
+
+ const auto b0 = std::tr1::bind(X());
+ static_assert( std::tr1::is_bind_expression<__typeof(b0)>::value,
+ "const-qualified wrapper is a bind expression" );
+
+ volatile auto b1 = std::tr1::bind(X());
+ static_assert( std::tr1::is_bind_expression<__typeof(b1)>::value,
+ "volatile-qualified wrapper is a bind expression" );
+
+ const volatile auto b2 = std::tr1::bind(X());
+ static_assert( std::tr1::is_bind_expression<__typeof(b2)>::value,
+ "const-volatile-qualified wrapper is a bind expression" );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/bind/mixed.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/bind/mixed.cc
new file mode 100644
index 0000000000..2d96bb7ec8
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/3_function_objects/bind/mixed.cc
@@ -0,0 +1,139 @@
+// { dg-options "-std=gnu++11" }
+// 2011-11-20 Jonathan Wakely <jwakely.gcc -at- gmail.com>
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 3.6 function object binders
+#include <tr1/functional>
+#include <functional>
+#include <testsuite_hooks.h>
+
+// std::tr1::bind and std::bind should work together
+
+namespace p1 = std::placeholders;
+namespace p2 = std::tr1::placeholders;
+
+using std::multiplies;
+using std::minus;
+
+void test01()
+{
+ static_assert( std::is_placeholder<decltype(p2::_2)>::value == 2,
+ "TR1 placeholder is a std placeholder" );
+ static_assert( std::tr1::is_placeholder<decltype(p1::_1)>::value == 1,
+ "std placeholder is a TR2 placeholder" );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ auto b1 = std::bind(minus<int>(), 6, p2::_2);
+ auto b2 = std::tr1::bind(minus<int>(), 6, p1::_2);
+
+ int five = 5;
+ int seven = 7;
+
+ VERIFY( std::tr1::bind(multiplies<int>(), p1::_1, b1)(five, seven) == -5 );
+ VERIFY( std::bind(multiplies<int>(), p2::_1, b2)(seven, five) == 7 );
+
+ VERIFY( std::tr1::bind<int>(multiplies<int>(), p1::_1, b1)(five, seven) == -5 );
+ VERIFY( std::bind<int>(multiplies<int>(), p2::_1, b2)(seven, five) == 7 );
+
+ static_assert( std::is_bind_expression<decltype(b2)>::value,
+ "TR1 bind expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(b1)>::value,
+ "std bind expression is a TR2 bind expression" );
+
+ const auto c1 = b1;
+ const auto c2 = b2;
+
+ static_assert( std::is_bind_expression<decltype(c2)>::value,
+ "const TR1 bind expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(c1)>::value,
+ "const std bind expression is a TR2 bind expression" );
+
+ volatile auto v1 = b1;
+ volatile auto v2 = b2;
+
+ static_assert( std::is_bind_expression<decltype(v2)>::value,
+ "volatile TR1 bind expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(v1)>::value,
+ "volatile std bind expression is a TR2 bind expression" );
+
+ const volatile auto cv1 = b1;
+ const volatile auto cv2 = b2;
+
+ static_assert( std::is_bind_expression<decltype(cv2)>::value,
+ "const volatile TR1 bind expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(cv1)>::value,
+ "const volatile std bind expression is a TR2 bind expression" );
+}
+
+void test03()
+{
+ bool test __attribute__((unused)) = true;
+
+ auto b1 = std::bind<int>(minus<int>(), 6, p2::_2);
+ auto b2 = std::tr1::bind<int>(minus<int>(), 6, p1::_2);
+
+ int five = 5;
+ int seven = 7;
+ VERIFY( std::tr1::bind(multiplies<int>(), p1::_1, b1)(five, seven) == -5 );
+ VERIFY( std::bind(multiplies<int>(), p2::_1, b2)(seven, five) == 7 );
+
+ VERIFY( std::tr1::bind<int>(multiplies<int>(), p1::_1, b1)(five, seven) == -5 );
+ VERIFY( std::bind<int>(multiplies<int>(), p2::_1, b2)(seven, five) == 7 );
+
+ static_assert( std::is_bind_expression<decltype(b2)>::value,
+ "TR1 bind<R> expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(b1)>::value,
+ "std bind<R> expression is a TR2 bind expression" );
+
+ const auto c1 = b1;
+ const auto c2 = b2;
+
+ static_assert( std::is_bind_expression<decltype(c2)>::value,
+ "const TR1 bind<R> expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(c1)>::value,
+ "const std bind<R> expression is a TR2 bind expression" );
+
+ volatile auto v1 = b1;
+ volatile auto v2 = b2;
+
+ static_assert( std::is_bind_expression<decltype(v2)>::value,
+ "volatile TR1 bind<R> expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(v1)>::value,
+ "volatile std bind<R> expression is a TR2 bind expression" );
+
+ const volatile auto cv1 = b1;
+ const volatile auto cv2 = b2;
+
+ static_assert( std::is_bind_expression<decltype(cv2)>::value,
+ "const volatile TR1 bind<R> expression is a std bind expression" );
+ static_assert( std::tr1::is_bind_expression<decltype(cv1)>::value,
+ "const volatile std bind<R> expression is a TR2 bind expression" );
+}
+
+int main()
+{
+ test01();
+ test02();
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc
new file mode 100644
index 0000000000..ca29e3cc3f
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+#include <tr1/functional>
+
+struct F
+{
+ void operator()() { }
+ void operator&() const { }
+};
+
+void test01()
+{
+ F f;
+ std::tr1::function<void()> f1 = f;
+ std::tr1::function<void()> f2 = std::tr1::ref(f);
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc b/libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc
index aff8e9a40b..9c693d4182 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc
@@ -29,4 +29,4 @@ void test01()
if ( t1 < t2 ) {} // { dg-error "here" }
if ( t1 == t2 ) {} // { dg-error "here" }
}
-// { dg-excess-errors "incomplete type" }
+// { dg-prune-output "incomplete type" }
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc b/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc
index 7aea51643f..ea9df08f17 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc
@@ -30,7 +30,7 @@ main()
int i;
std::string s;
- tie(i, ignore, s) = make_tuple(42, 3.14, "C++");
+ std::tr1::tie(i, ignore, s) = make_tuple(42, 3.14, "C++");
VERIFY( i == 42 );
VERIFY( s == "C++" );
}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
index 5d2927077e..08d87f2df2 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
index 4f1b060f80..970593e0d6 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
index 2a74c3c362..a0b3fd85c4 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
index 0831bd5295..63abcd41e9 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/51083.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/51083.cc
new file mode 100644
index 0000000000..504305a304
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/51083.cc
@@ -0,0 +1,62 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr1/cmath>
+
+namespace a
+{
+ template<typename> class Mat { };
+
+ template<typename T> struct Mat2 : Mat<T> { };
+
+ template<typename T>
+ int fdim(Mat<T>) { return 1; }
+
+ template<typename T, typename U>
+ int floor(Mat<T>, U) { return 1; }
+ template<typename T, typename U>
+ int floor(T, Mat<U>) { return 1; }
+
+ template<typename T, typename U, typename V>
+ int fma(Mat<T>, U, V) { return 1; }
+ template<typename T, typename U, typename V>
+ int fma(T, Mat<U>, V) { return 1; }
+ template<typename T, typename U, typename V>
+ int fma(T, U, Mat<V>) { return 1; }
+}
+
+int main()
+{
+ int __attribute__((unused)) i;
+
+ using namespace std::tr1;
+
+ a::Mat2<double> c;
+ i = fdim(c);
+ i = floor(c, 0.);
+ i = floor(0., c);
+ i = floor(c, 1);
+ i = floor(1, c);
+ i = fma(c, 0., 1.);
+ i = fma(0., c, 1.);
+ i = fma(0., 1., c);
+ i = fma(c, 0., 1);
+ i = fma(0., c, 1);
+ i = fma(0., 1, c);
+}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc
new file mode 100644
index 0000000000..ae83a00b03
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc
@@ -0,0 +1,63 @@
+// { dg-do compile }
+// { dg-require-cmath "" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 8.16.4 Additional overloads
+
+#include <tr1/cmath>
+
+// libstdc++/48933
+
+struct Foo { };
+
+template Foo std::tr1::atan2<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::acosh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::asinh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::atanh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::cbrt<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::copysign<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::erf<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::erfc<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::exp2<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::expm1<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::fdim<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::fma<Foo, Foo, Foo>(Foo(), Foo(), Foo()); // { dg-error "not match" }
+template Foo std::tr1::fmax<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::fmin<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::hypot<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template int std::tr1::ilogb<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::lgamma<Foo>(Foo); // { dg-error "not match" }
+template long long std::tr1::llrint<Foo>(Foo); // { dg-error "not match" }
+template long long std::tr1::llround<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::log1p<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::log2<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::logb<Foo>(Foo); // { dg-error "not match" }
+template long std::tr1::lrint<Foo>(Foo); // { dg-error "not match" }
+template long std::tr1::lround<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::nearbyint<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::nextafter<Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::nexttoward<Foo>(Foo, long double); // { dg-error "not match" }
+template Foo std::tr1::remainder<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::tr1::remquo<Foo>(Foo, Foo, int*); // { dg-error "not match" }
+template Foo std::tr1::rint<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::round<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::scalbln<Foo>(Foo, long); // { dg-error "not match" }
+template Foo std::tr1::scalbn<Foo>(Foo, int); // { dg-error "not match" }
+template Foo std::tr1::tgamma<Foo>(Foo); // { dg-error "not match" }
+template Foo std::tr1::trunc<Foo>(Foo); // { dg-error "not match" }
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
new file mode 100644
index 0000000000..eaa2f3d81f
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
@@ -0,0 +1,51 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr1/complex>
+#include <testsuite_hooks.h>
+
+template<typename T>
+ void test01_do()
+ {
+ bool test __attribute__((unused)) = true;
+
+ const std::complex<T> ca(T(-2), T(2));
+ const std::complex<T> cb(T(-2), T(0));
+ const std::complex<T> cc(T(-2), T(-2));
+
+ std::complex<T> cra = std::tr1::acosh(ca);
+ std::complex<T> crb = std::tr1::acosh(cb);
+ std::complex<T> crc = std::tr1::acosh(cc);
+
+ VERIFY( cra.real() > T(0) );
+ VERIFY( crb.real() > T(0) );
+ VERIFY( crc.real() > T(0) );
+ }
+
+// libstdc++/50880
+void test01()
+{
+ test01_do<float>();
+ test01_do<double>();
+ test01_do<long double>();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/51083.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/51083.cc
new file mode 100644
index 0000000000..f41914ee91
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/51083.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr1/complex>
+
+namespace a
+{
+ template<typename> class Mat { };
+
+ template<typename T> struct Mat2 : Mat<T> { };
+
+ template<typename T> int arg(Mat<T>) { return 1; }
+ template<typename T> int conj(Mat<T>) { return 1; }
+ template<typename T> int imag(Mat<T>) { return 1; }
+ template<typename T> int norm(Mat<T>) { return 1; }
+ template<typename T> int proj(Mat<T>) { return 1; }
+ template<typename T> int real(Mat<T>) { return 1; }
+
+ template<typename T, typename U> int pow(Mat<T>, U) { return 1; }
+ template<typename T, typename U> int pow(T, Mat<U>) { return 1; }
+}
+
+int main()
+{
+ int __attribute__((unused)) i;
+
+ using namespace std::tr1;
+
+ a::Mat2< std::complex<double> > c;
+ i = arg(c);
+ i = conj(c);
+ i = imag(c);
+ i = norm(c);
+ i = proj(c);
+ i = real(c);
+ i = pow(std::complex<float>(), c);
+ i = pow(c, std::complex<float>());
+}
diff --git a/libstdc++-v3/testsuite/tr2/bases/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr2/bases/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..ddd6d6fa38
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/bases/requirements/explicit_instantiation.cc
@@ -0,0 +1,32 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr2/type_traits>
+
+namespace std
+{
+ namespace tr2
+ {
+ typedef short test_type;
+ template struct bases<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr2/bases/requirements/typedefs.cc b/libstdc++-v3/testsuite/tr2/bases/requirements/typedefs.cc
new file mode 100644
index 0000000000..a62acffe89
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/bases/requirements/typedefs.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <tr2/type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::tr2::bases<int> test_type;
+ typedef test_type::type value_type;
+}
diff --git a/libstdc++-v3/testsuite/tr2/bases/value.cc b/libstdc++-v3/testsuite/tr2/bases/value.cc
new file mode 100644
index 0000000000..415e974a98
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/bases/value.cc
@@ -0,0 +1,97 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr2/type_traits>
+#include <typeinfo>
+#include <stdexcept>
+
+struct A { };
+struct B1 : virtual public A { };
+struct B2 : virtual public A { };
+struct C : public B1, public B2 { };
+
+void test()
+{
+ bool test __attribute__((unused)) = true;
+
+ // 1
+ {
+ typedef std::tr2::bases<A>::type tl;
+ static_assert(tl::empty::value, "error");
+ }
+
+ // 2
+ {
+ typedef std::tr2::bases<B1>::type tl1;
+ typedef std::tr2::bases<B2>::type tl2;
+
+ // Sanity check w/ runtime.
+ bool eq = typeid(tl1) == typeid(tl2);
+ if (!eq)
+ throw std::logic_error("typelist not equal");
+
+ // Sanity check.
+ static_assert(tl1::empty::value != std::true_type::value, "!empty");
+ static_assert(tl2::empty::value != std::true_type::value, "!empty");
+
+ typedef tl1::first::type tl1_first;
+ typedef tl1::rest::type tl1_rest;
+ typedef tl2::first::type tl2_first;
+ typedef tl2::rest::type tl2_rest;
+
+ eq = typeid(tl1_first) == typeid(tl2_first);
+ if (!eq)
+ throw std::logic_error("base not equal");
+
+ static_assert(tl1_rest::empty::value == std::true_type::value, "empty");
+ static_assert(tl2_rest::empty::value == std::true_type::value, "empty");
+ }
+
+ // 3
+ {
+ typedef std::tr2::bases<C>::type tl;
+
+ // Sanity check.
+ static_assert(tl::empty::value != std::true_type::value, "!empty");
+
+ typedef tl::first::type tl1_first;
+ typedef tl::rest::type tl2;
+ typedef tl2::first::type tl2_first;
+ typedef tl2::rest::type tl3;
+ typedef tl3::first::type tl3_first;
+ typedef tl3::rest::type tl4;
+
+ bool eq = typeid(tl1_first) == typeid(tl2_first);
+ if (eq)
+ throw std::logic_error("bases are not equal");
+
+ eq = typeid(tl2_first) == typeid(tl3_first);
+ if (eq)
+ throw std::logic_error("bases are not equal");
+
+ static_assert(tl4::empty::value == std::true_type::value, "empty");
+ }
+
+}
+
+int main()
+{
+ test();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr2/direct_bases/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr2/direct_bases/requirements/explicit_instantiation.cc
new file mode 100644
index 0000000000..d7fb96aff0
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/direct_bases/requirements/explicit_instantiation.cc
@@ -0,0 +1,32 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr2/type_traits>
+
+namespace std
+{
+ namespace tr2
+ {
+ typedef short test_type;
+ template struct direct_bases<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr2/direct_bases/requirements/typedefs.cc b/libstdc++-v3/testsuite/tr2/direct_bases/requirements/typedefs.cc
new file mode 100644
index 0000000000..7d219ea3ff
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/direct_bases/requirements/typedefs.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
+
+#include <tr2/type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::tr2::direct_bases<int> test_type;
+ typedef test_type::type value_type;
+}
diff --git a/libstdc++-v3/testsuite/tr2/direct_bases/value.cc b/libstdc++-v3/testsuite/tr2/direct_bases/value.cc
new file mode 100644
index 0000000000..81d0269c52
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/direct_bases/value.cc
@@ -0,0 +1,91 @@
+// { dg-options "-std=gnu++0x" }
+//
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr2/type_traits>
+#include <typeinfo>
+#include <stdexcept>
+
+struct A { };
+struct B1 : virtual public A { };
+struct B2 : virtual public A { };
+struct C : public B1, public B2 { };
+
+void test()
+{
+ bool test __attribute__((unused)) = true;
+
+ // 1
+ {
+ typedef std::tr2::direct_bases<A>::type tl;
+ static_assert(tl::empty::value, "error");
+ }
+
+ // 2
+ {
+ typedef std::tr2::direct_bases<B1>::type tl1;
+ typedef std::tr2::direct_bases<B2>::type tl2;
+
+ // Sanity check w/ runtime.
+ bool eq = typeid(tl1) == typeid(tl2);
+ if (!eq)
+ throw std::logic_error("typelist not equal");
+
+ // Sanity check.
+ static_assert(tl1::empty::value != std::true_type::value, "!empty");
+ static_assert(tl2::empty::value != std::true_type::value, "!empty");
+
+ typedef tl1::first::type tl1_first;
+ typedef tl1::rest::type tl1_rest;
+ typedef tl2::first::type tl2_first;
+ typedef tl2::rest::type tl2_rest;
+
+ eq = typeid(tl1_first) == typeid(tl2_first);
+ if (!eq)
+ throw std::logic_error("base not equal");
+
+ static_assert(tl1_rest::empty::value == std::true_type::value, "empty");
+ static_assert(tl2_rest::empty::value == std::true_type::value, "empty");
+ }
+
+ // 3
+ {
+ typedef std::tr2::direct_bases<C>::type tl;
+
+ // Sanity check.
+ static_assert(tl::empty::value != std::true_type::value, "!empty");
+
+ typedef tl::first::type tl1_first;
+ typedef tl::rest::type tl2;
+ typedef tl2::first::type tl2_first;
+ typedef tl2::rest::type tl3;
+
+ bool eq = typeid(tl1_first) == typeid(tl2_first);
+ if (eq)
+ throw std::logic_error("bases are not equal");
+
+ static_assert(tl3::empty::value == std::true_type::value, "empty");
+ }
+
+}
+
+int main()
+{
+ test();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr2/headers/all.cc b/libstdc++-v3/testsuite/tr2/headers/all.cc
new file mode 100644
index 0000000000..096cdc0624
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/headers/all.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr2/type_traits>
+#include <tr2/dynamic_bitset>
+#include <tr2/bool_set>
+#include <tr2/ratio>
diff --git a/libstdc++-v3/testsuite/tr2/headers/using_namespace_std_tr2.cc b/libstdc++-v3/testsuite/tr2/headers/using_namespace_std_tr2.cc
new file mode 100644
index 0000000000..b114327bb2
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr2/headers/using_namespace_std_tr2.cc
@@ -0,0 +1,26 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr2/type_traits>
+
+namespace gnu
+{
+ using namespace std::tr2;
+}
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp
index 562f418fa2..c95812207c 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -49,15 +49,15 @@ namespace __gnu_pbds
typename Data,
class Hash_Fn = typename __gnu_pbds::detail::default_hash_fn<Key>::type,
class Eq_Fn = std::equal_to<Key>,
- class Allocator = std::allocator<std::pair<const Key, Data> > >
+ typename _Alloc = std::allocator<std::pair<const Key, Data> > >
struct hash_common_types
{
private:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef
__gnu_pbds::test::hash_load_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 8,
1, 2,
false>
@@ -65,7 +65,7 @@ namespace __gnu_pbds
typedef
__gnu_pbds::test::hash_load_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 8,
1, 2,
true>
@@ -73,7 +73,7 @@ namespace __gnu_pbds
typedef
__gnu_pbds::test::hash_load_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 8,
1, 1,
false>
@@ -81,37 +81,34 @@ namespace __gnu_pbds
typedef
__gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 2,
false>
no_access_half_max_col_check_check_resize_trigger_policy;
typedef
__gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 2,
true>
access_half_max_col_check_check_resize_trigger_policy;
- typedef __gnu_pbds::test::linear_probe_fn_t_<Key, Allocator> lin_p_t;
+ typedef __gnu_pbds::test::linear_probe_fn_t_<Key, _Alloc> lin_p_t;
- typedef __gnu_pbds::test::quadratic_probe_fn_t_<Key, Allocator> quad_p_t;
+ typedef __gnu_pbds::test::quadratic_probe_fn_t_<Key, _Alloc> quad_p_t;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
no_access_half_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
performance_cc_policy0;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>,
no_access_half_load_check_resize_trigger_policy,
__gnu_pbds::test::hash_prime_size_policy_t_>::type
performance_cc_policy1;
@@ -119,18 +116,15 @@ namespace __gnu_pbds
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
no_access_one_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
performance_cc_policy2;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>,
no_access_one_load_check_resize_trigger_policy,
__gnu_pbds::test::hash_prime_size_policy_t_ >::type
performance_cc_policy3;
@@ -138,69 +132,57 @@ namespace __gnu_pbds
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::true_type,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
no_access_half_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
performance_cc_policy4;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
no_access_half_max_col_check_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
performance_cc_policy5;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
access_half_max_col_check_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
regression_cc_policy0;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::false_type,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
access_half_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
regression_cc_policy1;
typedef
typename __gnu_cxx::typelist::create4<
__gnu_pbds::detail::true_type,
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>,
no_access_half_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_prime_size_policy_t_ >::type
+ __gnu_pbds::test::hash_prime_size_policy_t_>::type
regression_cc_policy2;
typedef
typename __gnu_cxx::typelist::create5<
__gnu_pbds::detail::false_type,
lin_p_t,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
no_access_half_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
performance_gp_policy0;
typedef
typename __gnu_cxx::typelist::create5<
__gnu_pbds::detail::false_type,
quad_p_t,
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>,
no_access_half_load_check_resize_trigger_policy,
__gnu_pbds::test::hash_prime_size_policy_t_ >::type
performance_gp_policy1;
@@ -209,8 +191,7 @@ namespace __gnu_pbds
typename __gnu_cxx::typelist::create5<
__gnu_pbds::detail::false_type,
quad_p_t,
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>,
access_half_load_check_resize_trigger_policy,
__gnu_pbds::test::hash_prime_size_policy_t_>::type
regression_gp_policy0;
@@ -219,11 +200,9 @@ namespace __gnu_pbds
typename __gnu_cxx::typelist::create5<
__gnu_pbds::detail::true_type,
lin_p_t,
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator>,
+ __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>,
access_half_load_check_resize_trigger_policy,
- __gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator> >::type
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type
regression_gp_policy1;
typedef
@@ -260,8 +239,7 @@ namespace __gnu_pbds
{
private:
typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 0>::type
+ typename __gnu_cxx::typelist::at_index<Policy_Tl, 0>::type
store_hash_indicator;
enum
@@ -269,19 +247,13 @@ namespace __gnu_pbds
store_hash = store_hash_indicator::value
};
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 1>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 1>::type
comb_hash_fn;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 2>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 2>::type
trigger_policy;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 3>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 3>::type
size_policy;
public:
@@ -292,12 +264,10 @@ namespace __gnu_pbds
Hash_Fn,
Eq_Fn,
comb_hash_fn,
- __gnu_pbds::hash_standard_resize_policy<
- size_policy,
- trigger_policy,
- false>,
+ __gnu_pbds::hash_standard_resize_policy<size_policy, trigger_policy,
+ false>,
store_hash,
- Allocator>
+ _Alloc>
type;
};
@@ -306,8 +276,7 @@ namespace __gnu_pbds
{
private:
typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 0>::type
+ typename __gnu_cxx::typelist::at_index<Policy_Tl, 0>::type
store_hash_indicator;
enum
@@ -315,19 +284,13 @@ namespace __gnu_pbds
store_hash = store_hash_indicator::value
};
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 1>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 1>::type
comb_hash_fn;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 2>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 2>::type
trigger_policy;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 3>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 3>::type
size_policy;
public:
@@ -338,12 +301,10 @@ namespace __gnu_pbds
Hash_Fn,
Eq_Fn,
comb_hash_fn,
- __gnu_pbds::hash_standard_resize_policy<
- size_policy,
- trigger_policy,
- true>,
+ __gnu_pbds::hash_standard_resize_policy<size_policy, trigger_policy,
+ true>,
store_hash,
- Allocator>
+ _Alloc>
type;
};
@@ -351,9 +312,7 @@ namespace __gnu_pbds
struct no_access_generic_gp_hash_table_t
{
private:
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 0>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 0>::type
store_hash_indicator;
enum
@@ -361,24 +320,16 @@ namespace __gnu_pbds
store_hash = store_hash_indicator::value
};
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 1>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 1>::type
probe_fn;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 2>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 2>::type
comb_probe_fn;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 3>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 3>::type
trigger_policy;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 4>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 4>::type
size_policy;
public:
@@ -390,12 +341,10 @@ namespace __gnu_pbds
Eq_Fn,
comb_probe_fn,
probe_fn,
- __gnu_pbds::hash_standard_resize_policy<
- size_policy,
- trigger_policy,
- false>,
+ __gnu_pbds::hash_standard_resize_policy<size_policy, trigger_policy,
+ false>,
store_hash,
- Allocator>
+ _Alloc>
type;
};
@@ -403,9 +352,7 @@ namespace __gnu_pbds
struct access_generic_gp_hash_table_t
{
private:
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 0>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 0>::type
store_hash_indicator;
enum
@@ -413,24 +360,16 @@ namespace __gnu_pbds
store_hash = store_hash_indicator::value
};
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 1>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 1>::type
probe_fn;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 2>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 2>::type
comb_probe_fn;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 3>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 3>::type
trigger_policy;
- typedef
- typename __gnu_cxx::typelist::at_index<
- Policy_Tl, 4>::type
+ typedef typename __gnu_cxx::typelist::at_index<Policy_Tl, 4>::type
size_policy;
public:
@@ -442,12 +381,10 @@ namespace __gnu_pbds
Eq_Fn,
comb_probe_fn,
probe_fn,
- __gnu_pbds::hash_standard_resize_policy<
- size_policy,
- trigger_policy,
- true>,
+ __gnu_pbds::hash_standard_resize_policy<size_policy, trigger_policy,
+ true>,
store_hash,
- Allocator>
+ _Alloc>
type;
};
@@ -512,19 +449,15 @@ namespace __gnu_pbds
class Comb_Probe_Fn_TL,
class Eq_Fn =
std::equal_to<Key>,
- class Allocator =
- std::allocator<
- std::pair<
- const Key,
- Data> > >
+ typename _Alloc = std::allocator<std::pair<const Key, Data> > >
struct ranged_hash_common_types
{
private:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef
__gnu_pbds::test::hash_load_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 8,
1, 2,
false>
@@ -532,7 +465,7 @@ namespace __gnu_pbds
typedef
__gnu_pbds::test::hash_load_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
1, 8,
1, 1,
false>
@@ -541,14 +474,14 @@ namespace __gnu_pbds
typedef
__gnu_pbds::hash_standard_resize_policy<
__gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator>,
+ _Alloc>,
no_access_half_load_check_resize_trigger_policy>
mask_half_resize_policy_t;
typedef
__gnu_pbds::hash_standard_resize_policy<
__gnu_pbds::test::hash_exponential_size_policy_t_<
- Allocator>,
+ _Alloc>,
no_access_one_load_check_resize_trigger_policy>
mask_one_resize_policy_t;
@@ -567,18 +500,14 @@ namespace __gnu_pbds
template<typename Comb_Hash_Fn_>
struct half_resize_policy_selector;
- template<typename Allocator_>
- struct half_resize_policy_selector<
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator_> >
+ template<typename _Alloc_>
+ struct half_resize_policy_selector<__gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc_> >
{
typedef mask_half_resize_policy_t type;
};
- template<typename Allocator_>
- struct half_resize_policy_selector<
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator_> >
+ template<typename _Alloc_>
+ struct half_resize_policy_selector<__gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc_> >
{
typedef mod_half_resize_policy_t type;
};
@@ -586,18 +515,14 @@ namespace __gnu_pbds
template<typename Comb_Hash_Fn_>
struct one_resize_policy_selector;
- template<typename Allocator_>
- struct one_resize_policy_selector<
- __gnu_pbds::test::direct_mask_range_hashing_t_<
- Allocator_> >
+ template<typename _Alloc_>
+ struct one_resize_policy_selector<__gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc_> >
{
typedef mask_one_resize_policy_t type;
};
- template<typename Allocator_>
- struct one_resize_policy_selector<
- __gnu_pbds::test::direct_mod_range_hashing_t_<
- Allocator_> >
+ template<typename _Alloc_>
+ struct one_resize_policy_selector<__gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc_> >
{
typedef mod_one_resize_policy_t type;
};
@@ -609,13 +534,11 @@ namespace __gnu_pbds
__gnu_pbds::cc_hash_table<
Key,
Data,
- __gnu_pbds::null_hash_fn,
+ __gnu_pbds::null_type,
Eq_Fn,
Comb_Hash_Fn,
- typename one_resize_policy_selector<
- typename Comb_Hash_Fn::comb_fn>::type,
- false,
- Allocator>
+ typename one_resize_policy_selector<typename Comb_Hash_Fn::comb_fn>::type,
+ false, _Alloc>
type;
};
@@ -632,14 +555,13 @@ namespace __gnu_pbds
__gnu_pbds::gp_hash_table<
Key,
Data,
- __gnu_pbds::null_hash_fn,
+ __gnu_pbds::null_type,
Eq_Fn,
Comb_Probe_Fn,
- __gnu_pbds::null_probe_fn,
- typename half_resize_policy_selector<
- typename Comb_Probe_Fn::comb_fn>::type,
+ __gnu_pbds::null_type,
+ typename half_resize_policy_selector<typename Comb_Probe_Fn::comb_fn>::type,
false,
- Allocator>
+ _Alloc>
type;
};
@@ -658,16 +580,15 @@ namespace __gnu_pbds
};
template<typename Key, typename Data, class Eq_Fn = std::equal_to<Key>,
- class Allocator =
- std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class lu_common_types
{
private:
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
- typedef __gnu_pbds::test::move_to_front_lu_policy_t_ mtf_u;
+ typedef __gnu_pbds::test::lu_move_to_front_policy_t_ mtf_u;
- typedef __gnu_pbds::test::counter_lu_policy_t_<Allocator, 5> cnt_5_u;
+ typedef __gnu_pbds::test::lu_counter_policy_t_<_Alloc, 5> cnt_5_u;
typedef typename __gnu_cxx::typelist::create1<mtf_u>::type lu_policy0;
@@ -687,20 +608,17 @@ namespace __gnu_pbds
public:
typedef
- __gnu_pbds::list_update<Key, Data, Eq_Fn, update_policy_t, Allocator>
+ __gnu_pbds::list_update<Key, Data, Eq_Fn, update_policy_t, _Alloc>
type;
};
typedef
- typename __gnu_cxx::typelist::transform<
- lu_policies,
+ typename __gnu_cxx::typelist::transform<lu_policies,
generic_list_update_t>::type
lu_types;
typedef
- typename __gnu_cxx::typelist::at_index<
- lu_types,
- 0>::type
+ typename __gnu_cxx::typelist::at_index<lu_types, 0>::type
min_lu_type;
public:
@@ -711,12 +629,12 @@ namespace __gnu_pbds
};
template<typename Key, typename Data, class Cmp_Fn = std::less<Key>,
- template<typename Const_Node_Iterator,
- class Node_Iterator,
+ template<typename Node_CItr,
+ class Node_Itr,
class Cmp_Fn_,
- class Allocator_>
- class Node_Update = __gnu_pbds::null_tree_node_update,
- class Allocator = std::allocator<std::pair<const Key, Data> > >
+ typename _Alloc_>
+ class Node_Update = __gnu_pbds::null_node_update,
+ typename _Alloc = std::allocator<std::pair<const Key, Data> > >
struct tree_common_types
{
private:
@@ -727,7 +645,7 @@ namespace __gnu_pbds
Cmp_Fn,
__gnu_pbds::ov_tree_tag,
Node_Update,
- Allocator>
+ _Alloc>
ov_tree_assoc_container_t;
typedef
@@ -737,7 +655,7 @@ namespace __gnu_pbds
Cmp_Fn,
__gnu_pbds::rb_tree_tag,
Node_Update,
- Allocator>
+ _Alloc>
rb_tree_assoc_container_t;
typedef
@@ -747,7 +665,7 @@ namespace __gnu_pbds
Cmp_Fn,
__gnu_pbds::splay_tree_tag,
Node_Update,
- Allocator>
+ _Alloc>
splay_tree_assoc_container_t;
public:
@@ -773,19 +691,19 @@ namespace __gnu_pbds
template<typename Key,
typename Data,
- class E_Access_Traits =
- typename __gnu_pbds::detail::default_trie_e_access_traits<Key>::type,
+ class _ATraits =
+ typename __gnu_pbds::detail::default_trie_access_traits<Key>::type,
class Tag = __gnu_pbds::pat_trie_tag,
- template<typename Const_Node_Iterator,
- typename Node_Iterator,
- class E_Access_Traits_,
- typename Allocator_>
- class Node_Update = __gnu_pbds::null_trie_node_update,
- class Allocator = std::allocator<char> >
+ template<typename Node_CItr,
+ typename Node_Itr,
+ class _ATraits_,
+ typename _Alloc_>
+ class Node_Update = __gnu_pbds::null_node_update,
+ typename _Alloc = std::allocator<char> >
class trie_common_types
{
private:
- typedef __gnu_pbds::trie<Key, Data, E_Access_Traits, Tag, Node_Update, Allocator> type;
+ typedef __gnu_pbds::trie<Key, Data, _ATraits, Tag, Node_Update, _Alloc> type;
public:
typedef typename __gnu_cxx::typelist::create1<type>::type performance_tl;
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp
index 9ee5c4dd7d..b7650451f1 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -139,7 +139,7 @@ namespace __gnu_pbds
const std::string node_update_str =
make_xml_tag("Node_Update",
"value",(tree_supports_order_statistics<Cntnr>::value ?
- "tree_order_statistics_node_update" : "null_tree_node_update"));
+ "tree_order_statistics_node_update" : "null_node_update"));
return make_xml_tag("type", "value", "tree", category_str + node_update_str);
}
@@ -239,7 +239,7 @@ namespace __gnu_pbds
else if (trie_supports_prefix_search<Cntnr>::value)
s = "trie_prefix_search_node_update";
else
- s = "null_trie_node_update";
+ s = "null_node_update";
std::string node_s = make_xml_tag("Node_Update", "value", s);
return make_xml_tag("type", "value", "trie", category_s + node_s);
}
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp
index ed3747fa1c..9f3e6bdf9b 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp
@@ -54,7 +54,7 @@ namespace __gnu_pbds
struct lu_policy_string_form;
template<>
- struct lu_policy_string_form<move_to_front_lu_policy_t_>
+ struct lu_policy_string_form<lu_move_to_front_policy_t_>
{
static std::string
name()
@@ -64,12 +64,12 @@ namespace __gnu_pbds
desc()
{
return make_xml_tag("Update_Policy", "value",
- "move_to_front_lu_policy");
+ "lu_move_to_front_policy");
}
};
- template<typename Allocator, typename Allocator::size_type Max_Count>
- struct lu_policy_string_form<counter_lu_policy_t_<Allocator, Max_Count> >
+ template<typename _Alloc, typename _Alloc::size_type Max_Count>
+ struct lu_policy_string_form<lu_counter_policy_t_<_Alloc, Max_Count> >
{
static std::string
name()
@@ -82,7 +82,7 @@ namespace __gnu_pbds
static std::string
desc()
{
- return (make_xml_tag("Update_Policy", "value", "counter_lu_policy",
+ return (make_xml_tag("Update_Policy", "value", "lu_counter_policy",
"Max_Count", Max_Count));
}
};
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp
index 15cbbfda51..cb874d28b5 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp
@@ -53,8 +53,8 @@ namespace __gnu_pbds
template<typename Probe_Fn>
struct probe_fn_string_form;
- template<typename Key, class Allocator>
- struct probe_fn_string_form<linear_probe_fn_t_<Key, Allocator> >
+ template<typename Key, typename _Alloc>
+ struct probe_fn_string_form<linear_probe_fn_t_<Key, _Alloc> >
{
static std::string
name()
@@ -65,8 +65,8 @@ namespace __gnu_pbds
{ return make_xml_tag("Probe_Fn", "value", "linear_probe_fn"); }
};
- template<typename Key, class Allocator>
- struct probe_fn_string_form<quadratic_probe_fn_t_<Key, Allocator> >
+ template<typename Key, typename _Alloc>
+ struct probe_fn_string_form<quadratic_probe_fn_t_<Key, _Alloc> >
{
static std::string
name()
@@ -78,7 +78,7 @@ namespace __gnu_pbds
};
template<>
- struct probe_fn_string_form<__gnu_pbds::null_probe_fn>
+ struct probe_fn_string_form<__gnu_pbds::null_type>
{
static std::string
name()
@@ -86,7 +86,7 @@ namespace __gnu_pbds
static std::string
desc()
- { return make_xml_tag("Probe_Fn", "value", "null_probe_fn"); }
+ { return make_xml_tag("Probe_Fn", "value", "null_type"); }
};
} // namespace detail
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp
index d2b61facb2..65655d7138 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp
@@ -55,9 +55,9 @@ namespace __gnu_pbds
template<typename Size_Policy>
struct size_policy_string_form;
- template<typename Allocator>
+ template<typename _Alloc>
struct size_policy_string_form<
- __gnu_pbds::test::hash_exponential_size_policy_t_<Allocator> >
+ __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >
{
static std::string
name()
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp
index 80c1abe54a..a632279898 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp
@@ -56,7 +56,7 @@ namespace __gnu_pbds
value = __gnu_pbds::detail::is_same<
typename Tree_Cntnr::node_update,
__gnu_pbds::tree_order_statistics_node_update<
- typename Tree_Cntnr::const_node_iterator,
+ typename Tree_Cntnr::node_const_iterator,
typename Tree_Cntnr::node_iterator,
typename Tree_Cntnr::cmp_fn,
typename Tree_Cntnr::allocator_type> >::value
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp
index fc9cacc630..925be58d47 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp
@@ -56,9 +56,9 @@ namespace __gnu_pbds
value = __gnu_pbds::detail::is_same<
typename Tree_Cntnr::node_update,
__gnu_pbds::trie_order_statistics_node_update<
- typename Tree_Cntnr::const_node_iterator,
+ typename Tree_Cntnr::node_const_iterator,
typename Tree_Cntnr::node_iterator,
- typename Tree_Cntnr::e_access_traits,
+ typename Tree_Cntnr::access_traits,
typename Tree_Cntnr::allocator_type> >::value
};
};
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp
index 20c5210101..b73335e0aa 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp
@@ -56,9 +56,9 @@ namespace __gnu_pbds
value = __gnu_pbds::detail::is_same<
typename Tree_Cntnr::node_update,
__gnu_pbds::trie_prefix_search_node_update<
- typename Tree_Cntnr::const_node_iterator,
+ typename Tree_Cntnr::node_const_iterator,
typename Tree_Cntnr::node_iterator,
- typename Tree_Cntnr::e_access_traits,
+ typename Tree_Cntnr::access_traits,
typename Tree_Cntnr::allocator_type> >::value
};
};
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp
index be4fe264fa..0d98fea7fe 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp
@@ -53,15 +53,15 @@ namespace __gnu_pbds
template<typename Trigger_Policy>
struct trigger_policy_string_form;
- template<typename Allocator,
- typename Allocator::size_type Min_Load_Nom,
- typename Allocator::size_type Min_Load_Denom,
- typename Allocator::size_type Max_Load_Nom,
- typename Allocator::size_type Max_Load_Denom,
+ template<typename _Alloc,
+ typename _Alloc::size_type Min_Load_Nom,
+ typename _Alloc::size_type Min_Load_Denom,
+ typename _Alloc::size_type Max_Load_Nom,
+ typename _Alloc::size_type Max_Load_Denom,
bool External_Access>
struct trigger_policy_string_form<
__gnu_pbds::test::hash_load_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
Min_Load_Nom,
Min_Load_Denom,
Max_Load_Nom,
@@ -95,13 +95,13 @@ namespace __gnu_pbds
}
};
- template<typename Allocator,
- typename Allocator::size_type Load_Nom,
- typename Allocator::size_type Load_Denom,
+ template<typename _Alloc,
+ typename _Alloc::size_type Load_Nom,
+ typename _Alloc::size_type Load_Denom,
bool External_Access>
struct trigger_policy_string_form<
__gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_<
- Allocator,
+ _Alloc,
Load_Nom,
Load_Denom,
External_Access> >
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp
index a2655fe759..bcee0a8eb0 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp
@@ -47,11 +47,11 @@ namespace __gnu_pbds
namespace test
{
template<typename Key, class Cmp_Fn = std::less<Key>,
- class Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class native_set : public PB_DS_BASE_C_DEC
{
private:
- typedef std::set<Key, Cmp_Fn, typename Allocator::template rebind<Key>::other> base_type;
+ typedef std::set<Key, Cmp_Fn, typename _Alloc::template rebind<Key>::other> base_type;
public:
typedef native_tree_tag container_category;
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp
index d7825ac63f..35e7ddd152 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp
@@ -109,11 +109,11 @@ namespace __gnu_pbds
{ return (""); }
static std::string
- name(__gnu_pbds::null_mapped_type)
+ name(__gnu_pbds::null_type)
{ return ("set"); }
static std::string
- desc(__gnu_pbds::null_mapped_type)
+ desc(__gnu_pbds::null_type)
{ return (""); }
public:
diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp
index 86db029e22..14d20dc08b 100644
--- a/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp
@@ -46,33 +46,33 @@ namespace __gnu_pbds
{
namespace test
{
- template<typename Allocator>
+ template<typename _Alloc>
struct direct_mask_range_hashing_t_
- : public __gnu_pbds::direct_mask_range_hashing<typename Allocator::size_type>
+ : public __gnu_pbds::direct_mask_range_hashing<typename _Alloc::size_type>
{
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef __gnu_pbds::direct_mask_range_hashing<size_type> base_type;
};
- template<typename Allocator>
+ template<typename _Alloc>
struct direct_mod_range_hashing_t_
- : public __gnu_pbds::direct_mod_range_hashing<typename Allocator::size_type>
+ : public __gnu_pbds::direct_mod_range_hashing<typename _Alloc::size_type>
{
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef __gnu_pbds::direct_mod_range_hashing<size_type> base_type;
};
- template<typename Allocator,
- typename Allocator::size_type Min_Load_Nom,
- typename Allocator::size_type Min_Load_Denom,
- typename Allocator::size_type Max_Load_Nom,
- typename Allocator::size_type Max_Load_Denom,
+ template<typename _Alloc,
+ typename _Alloc::size_type Min_Load_Nom,
+ typename _Alloc::size_type Min_Load_Denom,
+ typename _Alloc::size_type Max_Load_Nom,
+ typename _Alloc::size_type Max_Load_Denom,
bool External_Access>
struct hash_load_check_resize_trigger_t_
: public __gnu_pbds::hash_load_check_resize_trigger<External_Access,
- typename Allocator::size_type>
+ typename _Alloc::size_type>
{
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef __gnu_pbds::hash_load_check_resize_trigger<External_Access, size_type> base_type;
inline
@@ -87,15 +87,15 @@ namespace __gnu_pbds
};
};
- template<typename Allocator,
- typename Allocator::size_type Load_Nom,
- typename Allocator::size_type Load_Denom,
+ template<typename _Alloc,
+ typename _Alloc::size_type Load_Nom,
+ typename _Alloc::size_type Load_Denom,
bool External_Access>
struct cc_hash_max_collision_check_resize_trigger_t_
: public __gnu_pbds::cc_hash_max_collision_check_resize_trigger<External_Access,
- typename Allocator::size_type>
+ typename _Alloc::size_type>
{
- typedef typename Allocator::size_type size_type;
+ typedef typename _Alloc::size_type size_type;
typedef __gnu_pbds::cc_hash_max_collision_check_resize_trigger<External_Access, size_type> base_type;
inline
@@ -113,30 +113,30 @@ namespace __gnu_pbds
struct hash_prime_size_policy_t_ : public __gnu_pbds::hash_prime_size_policy
{ };
- template<typename Allocator>
+ template<typename _Alloc>
struct hash_exponential_size_policy_t_
- : public __gnu_pbds::hash_exponential_size_policy<typename Allocator::size_type>
+ : public __gnu_pbds::hash_exponential_size_policy<typename _Alloc::size_type>
{ };
- template<typename Key, class Allocator>
+ template<typename Key, typename _Alloc>
struct linear_probe_fn_t_
- : public __gnu_pbds::linear_probe_fn<typename Allocator::size_type>
+ : public __gnu_pbds::linear_probe_fn<typename _Alloc::size_type>
{ };
- template<typename Key, class Allocator>
+ template<typename Key, typename _Alloc>
struct quadratic_probe_fn_t_
- : public __gnu_pbds::quadratic_probe_fn<typename Allocator::size_type>
+ : public __gnu_pbds::quadratic_probe_fn<typename _Alloc::size_type>
{ };
- template<typename Allocator, typename Allocator::size_type Max_Count>
- struct counter_lu_policy_t_
- : public __gnu_pbds::counter_lu_policy<Max_Count, Allocator>
+ template<typename _Alloc, typename _Alloc::size_type Max_Count>
+ struct lu_counter_policy_t_
+ : public __gnu_pbds::lu_counter_policy<Max_Count, _Alloc>
{
- typedef __gnu_pbds::counter_lu_policy<Max_Count, Allocator> base_type;
+ typedef __gnu_pbds::lu_counter_policy<Max_Count, _Alloc> base_type;
};
- struct move_to_front_lu_policy_t_
- : public __gnu_pbds::move_to_front_lu_policy<>
+ struct lu_move_to_front_policy_t_
+ : public __gnu_pbds::lu_move_to_front_policy<>
{ };
} // namespace test
} // namespace __gnu_pbds
diff --git a/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp b/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp
index cc79b3eeca..b486c8c9c9 100644
--- a/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp
+++ b/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp
@@ -46,19 +46,19 @@ namespace __gnu_pbds
namespace test
{
template<typename Value_Type, typename Cmp_Fn = std::less<Value_Type>,
- class Allocator = std::allocator<Value_Type> >
+ typename _Alloc = std::allocator<Value_Type> >
struct pq_common_types
{
private:
- typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::pairing_heap_tag, Allocator> pairing_heap_t;
+ typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::pairing_heap_tag, _Alloc> pairing_heap_t;
- typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::binomial_heap_tag, Allocator> binomial_heap_t;
+ typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::binomial_heap_tag, _Alloc> binomial_heap_t;
- typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::rc_binomial_heap_tag, Allocator> rc_binomial_heap_t;
+ typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::rc_binomial_heap_tag, _Alloc> rc_binomial_heap_t;
- typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::binary_heap_tag, Allocator> binary_heap_t;
+ typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::binary_heap_tag, _Alloc> binary_heap_t;
- typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::thin_heap_tag, Allocator> thin_heap_t;
+ typedef __gnu_pbds::priority_queue<Value_Type, Cmp_Fn, __gnu_pbds::thin_heap_tag, _Alloc> thin_heap_t;
typedef typename __gnu_cxx::typelist::create5<thin_heap_t, pairing_heap_t, binomial_heap_t, rc_binomial_heap_t, binary_heap_t>::type all_tl;
diff --git a/libstdc++-v3/testsuite/util/debug/checks.h b/libstdc++-v3/testsuite/util/debug/checks.h
index b42ef1a44c..dbf6d40b14 100644
--- a/libstdc++-v3/testsuite/util/debug/checks.h
+++ b/libstdc++-v3/testsuite/util/debug/checks.h
@@ -1,4 +1,4 @@
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -45,7 +45,7 @@ namespace __gnu_test
{
typedef _Tp value_type;
- operator value_type()
+ value_type build()
{
static value_type _S_;
++_S_;
@@ -60,7 +60,7 @@ namespace __gnu_test
typedef _Tp2 second_type;
typedef std::pair<_Tp1, _Tp2> pair_type;
- operator pair_type()
+ pair_type build()
{
static first_type _S_1;
static second_type _S_2;
@@ -86,7 +86,7 @@ namespace __gnu_test
vector_type v;
for (int i = 0; i != 5; ++i)
- v.push_back(gu);
+ v.push_back(gu.build());
VERIFY(v.size() == 5);
const val_type* first = &v.front() + 1;
@@ -116,7 +116,7 @@ namespace __gnu_test
vector_type v;
for (int i = 0; i != 5; ++i)
- v.push_back(gu);
+ v.push_back(gu.build());
VERIFY(v.size() == 5);
typename vector_type::iterator first = v.begin() + 1;
@@ -145,7 +145,7 @@ namespace __gnu_test
list_type l;
for (int i = 0; i != 5; ++i)
- l.push_back(gu);
+ l.push_back(gu.build());
VERIFY(l.size() == 5);
typename list_type::iterator first = l.begin(); ++first;
@@ -174,7 +174,7 @@ namespace __gnu_test
vector_type v;
for (int i = 0; i != 5; ++i)
- v.push_back(gu);
+ v.push_back(gu.build());
VERIFY(v.size() == 5);
val_type *first = &v.front() + 1;
@@ -201,7 +201,7 @@ namespace __gnu_test
vector_type v;
for (int i = 0; i != 5; ++i)
- v.push_back(gu);
+ v.push_back(gu.build());
VERIFY(v.size() == 5);
typename vector_type::iterator first = v.begin() + 1;
@@ -228,7 +228,7 @@ namespace __gnu_test
list_type l;
for (int i = 0; i != 5; ++i)
- l.push_back(gu);
+ l.push_back(gu.build());
VERIFY(l.size() == 5);
typename list_type::iterator first = l.begin(); ++first;
@@ -304,7 +304,7 @@ namespace __gnu_test
vector_type v;
for (int i = 0; i != 5; ++i)
- v.push_back(gu);
+ v.push_back(gu.build());
VERIFY(v.size() == 5);
const val_type* first = &v.front() + 1;
@@ -333,7 +333,7 @@ namespace __gnu_test
vector_type v;
for (int i = 0; i != 5; ++i)
- v.push_back(gu);
+ v.push_back(gu.build());
VERIFY(v.size() == 5);
typename vector_type::iterator first = v.begin() + 1;
@@ -362,7 +362,7 @@ namespace __gnu_test
list_type l;
for (int i = 0; i != 5; ++i)
- l.push_back(gu);
+ l.push_back(gu.build());
VERIFY(l.size() == 5);
typename list_type::iterator first = l.begin(); ++first;
@@ -375,5 +375,25 @@ namespace __gnu_test
cont_type c2;
InsertRangeHelper<cont_type>::Insert(c2, last, first); // Expected failure
}
+
+ template<typename _Tp>
+ void use_invalid_iterator()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ generate_unique<val_type> gu;
+
+ cont_type c;
+ for (size_t i = 0; i != 5; ++i)
+ c.insert(gu.build());
+
+ typename cont_type::iterator it = c.begin();
+ cont_val_type val = *it;
+ c.clear();
+ VERIFY( *it == val );
+ }
}
diff --git a/libstdc++-v3/testsuite/util/debug/unordered_checks.h b/libstdc++-v3/testsuite/util/debug/unordered_checks.h
new file mode 100644
index 0000000000..66841508fc
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/debug/unordered_checks.h
@@ -0,0 +1,190 @@
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <testsuite_hooks.h>
+
+namespace __gnu_test
+{
+ template<typename _Tp>
+ struct CopyableValueType
+ {
+ typedef _Tp value_type;
+ };
+
+ template<typename _Tp1, typename _Tp2>
+ struct CopyableValueType<std::pair<const _Tp1, _Tp2> >
+ {
+ typedef std::pair<_Tp1, _Tp2> value_type;
+ };
+
+ template<typename _Tp>
+ struct generate_unique
+ {
+ typedef _Tp value_type;
+
+ value_type build()
+ {
+ static value_type _S_;
+ ++_S_;
+ return _S_;
+ }
+ };
+
+ template<typename _Tp1, typename _Tp2>
+ struct generate_unique<std::pair<_Tp1, _Tp2> >
+ {
+ typedef _Tp1 first_type;
+ typedef _Tp2 second_type;
+ typedef std::pair<_Tp1, _Tp2> pair_type;
+
+ pair_type build()
+ {
+ static first_type _S_1;
+ static second_type _S_2;
+ ++_S_1;
+ ++_S_2;
+ return pair_type(_S_1, _S_2);
+ }
+ };
+
+ template<typename _Tp>
+ struct KeyExtractor
+ {
+ static _Tp get_key(const _Tp& val)
+ { return val; }
+ };
+
+ template<typename _Tp1, typename _Tp2>
+ struct KeyExtractor<std::pair<const _Tp1, _Tp2>>
+ {
+ static _Tp1 get_key(const std::pair<const _Tp1, _Tp2>& val)
+ { return val.first; }
+ };
+
+ template<typename _Tp>
+ void use_erased_local_iterator()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ generate_unique<val_type> gu;
+
+ cont_type c;
+ for (size_t i = 0; i != 5; ++i)
+ c.insert(gu.build());
+
+ typename cont_type::local_iterator it, end;
+ for (size_t i = 0; i != c.bucket_count(); ++i)
+ {
+ it = c.begin(i);
+ end = c.end(i);
+ if (it != end)
+ break;
+ }
+ typename cont_type::key_type key = KeyExtractor<cont_val_type>::get_key(*it);
+ c.erase(key);
+ VERIFY( it != end );
+ }
+
+ template<typename _Tp>
+ void use_invalid_local_iterator()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ generate_unique<val_type> gu;
+
+ cont_type c;
+ for (size_t i = 0; i != 5; ++i)
+ c.insert(gu.build());
+
+ typename cont_type::local_iterator it;
+ for (size_t i = 0; i != c.bucket_count(); ++i)
+ {
+ it = c.begin(i);
+ if (it != c.end(i))
+ break;
+ }
+ cont_val_type val = *it;
+ c.clear();
+ VERIFY( *it == val );
+ }
+
+ template<typename _Tp>
+ void invalid_local_iterator_compare()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ generate_unique<val_type> gu;
+
+ cont_type c;
+ for (size_t i = 0; i != 5; ++i)
+ c.insert(gu.build());
+
+ typename cont_type::local_iterator it1, it2;
+ size_t i;
+ for (i = 0; i != c.bucket_count(); ++i)
+ {
+ it1 = c.begin(i);
+ if (it1 != c.end(i))
+ break;
+ }
+ VERIFY( i != c.bucket_count() );
+ for (++i; i != c.bucket_count(); ++i)
+ {
+ it2 = c.begin(i);
+ if (it2 != c.end(i))
+ break;
+ }
+
+ VERIFY( it1 != it2 );
+ }
+
+ template<typename _Tp>
+ void invalid_local_iterator_range()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ generate_unique<val_type> gu;
+
+ cont_type c;
+ for (size_t i = 0; i != 5; ++i)
+ c.insert(gu.build());
+
+ typename cont_type::local_iterator it, end;
+ for (size_t i = 0; i != c.bucket_count(); ++i)
+ {
+ it = c.begin(i);
+ end = c.end(i);
+ if (it != end)
+ break;
+ }
+ c.insert(end, it);
+ }
+}
+
diff --git a/libstdc++-v3/testsuite/util/exception/safety.h b/libstdc++-v3/testsuite/util/exception/safety.h
index 9468bffd8d..50418983ca 100644
--- a/libstdc++-v3/testsuite/util/exception/safety.h
+++ b/libstdc++-v3/testsuite/util/exception/safety.h
@@ -826,6 +826,110 @@ namespace __gnu_test
operator()(_Tp&, _Tp&) { }
};
+ template<typename _Tp,
+ bool = traits<_Tp>::has_emplace::value>
+ struct emplace;
+
+ // Specialization for most containers.
+ template<typename _Tp>
+ struct emplace<_Tp, true>
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::size_type size_type;
+
+ void
+ operator()(_Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ __test.emplace(cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+
+ // Assumes containers start out equivalent.
+ void
+ operator()(_Tp& __control, _Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ __test.emplace(cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct emplace<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+
+ void
+ operator()(_Tp&, _Tp&) { }
+ };
+
+ template<typename _Tp,
+ bool = traits<_Tp>::has_emplace::value>
+ struct emplace_hint;
+
+ // Specialization for most containers.
+ template<typename _Tp>
+ struct emplace_hint<_Tp, true>
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::value_type value_type;
+
+ void
+ operator()(_Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ const size_type sz = std::distance(__test.begin(), __test.end());
+ size_type s = generate(sz);
+ auto i = __test.begin();
+ std::advance(i, s);
+ __test.emplace_hint(i, cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+
+ // Assumes containers start out equivalent.
+ void
+ operator()(_Tp& __control, _Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ const size_type sz = std::distance(__test.begin(), __test.end());
+ size_type s = generate(sz);
+ auto i = __test.begin();
+ std::advance(i, s);
+ __test.emplace_hint(i, cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct emplace_hint<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+
+ void
+ operator()(_Tp&, _Tp&) { }
+ };
template<typename _Tp, bool = traits<_Tp>::is_associative::value
|| traits<_Tp>::is_unordered::value>
@@ -1023,6 +1127,8 @@ namespace __gnu_test
typedef erase_point<container_type> erase_point;
typedef erase_range<container_type> erase_range;
typedef insert_point<container_type> insert_point;
+ typedef emplace<container_type> emplace;
+ typedef emplace_hint<container_type> emplace_hint;
typedef pop_front<container_type> pop_front;
typedef pop_back<container_type> pop_back;
typedef push_front<container_type> push_front;
@@ -1039,6 +1145,8 @@ namespace __gnu_test
erase_point _M_erasep;
erase_range _M_eraser;
insert_point _M_insertp;
+ emplace _M_emplace;
+ emplace_hint _M_emplaceh;
pop_front _M_popf;
pop_back _M_popb;
push_front _M_pushf;
@@ -1098,6 +1206,8 @@ namespace __gnu_test
_M_functions.push_back(function_type(base_type::_M_erasep));
_M_functions.push_back(function_type(base_type::_M_eraser));
_M_functions.push_back(function_type(base_type::_M_insertp));
+ _M_functions.push_back(function_type(base_type::_M_emplace));
+ _M_functions.push_back(function_type(base_type::_M_emplaceh));
_M_functions.push_back(function_type(base_type::_M_popf));
_M_functions.push_back(function_type(base_type::_M_popb));
_M_functions.push_back(function_type(base_type::_M_pushf));
@@ -1196,20 +1306,20 @@ namespace __gnu_test
// constructor or assignment operator of value_type throws.
if (!traits<container_type>::has_throwing_erase::value)
{
- _M_erasep(_M_container);
- _M_eraser(_M_container);
+ this->_M_erasep(_M_container);
+ this->_M_eraser(_M_container);
}
- _M_popf(_M_container);
- _M_popb(_M_container);
+ this->_M_popf(_M_container);
+ this->_M_popb(_M_container);
- _M_iops(_M_container);
- _M_ciops(_M_container);
+ this->_M_iops(_M_container);
+ this->_M_ciops(_M_container);
- _M_swap(_M_container);
+ this->_M_swap(_M_container);
// Last.
- _M_clear(_M_container);
+ this->_M_clear(_M_container);
}
}
};
diff --git a/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp b/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp
index 6fa3667f30..acfa584c6c 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp
@@ -50,7 +50,7 @@ namespace __gnu_pbds
{
#define PB_DS_BASE_C_DEC \
std::tr1::__unordered_map<Key, Data, Hash_Fn, Eq_Fn, \
- typename Allocator::template rebind<std::pair<const Key, Data> >::other, Cache_Hash>
+ typename _Alloc::template rebind<std::pair<const Key, Data> >::other, Cache_Hash>
template<typename Key,
typename Data,
@@ -58,7 +58,7 @@ namespace __gnu_pbds
typename Hash_Fn = typename __gnu_pbds::detail::default_hash_fn<Key>::type,
typename Eq_Fn = std::equal_to<Key>,
typename Less_Fn = std::less<Key>,
- typename Allocator = std::allocator<char>, bool Cache_Hash = false
+ typename _Alloc = std::allocator<char>, bool Cache_Hash = false
>
class native_hash_map : public PB_DS_BASE_C_DEC
{
diff --git a/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp b/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp
index 8273edf36d..8008a0e89b 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp
@@ -49,7 +49,7 @@ namespace __gnu_pbds
namespace test
{
#define PB_DS_BASE_C_DEC \
- std::tr1::unordered_multimap<Key, Data, Hash_Fn, Eq_Fn, Allocator>
+ std::tr1::unordered_multimap<Key, Data, Hash_Fn, Eq_Fn, _Alloc>
template<typename Key,
typename Data,
@@ -57,7 +57,7 @@ namespace __gnu_pbds
class Hash_Fn = typename __gnu_pbds::detail::default_hash_fn<Key>::type,
class Eq_Fn = std::equal_to<Key>,
class Less_Fn = std::less<Key>,
- class Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class native_hash_multimap : public PB_DS_BASE_C_DEC
{
private:
@@ -66,7 +66,7 @@ namespace __gnu_pbds
public:
typedef native_hash_tag container_category;
- typedef Allocator allocator;
+ typedef _Alloc allocator;
typedef typename base_type::iterator iterator;
typedef typename base_type::const_iterator const_iterator;
diff --git a/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp b/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp
index d3f4596249..dac0c11eab 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp
@@ -50,14 +50,14 @@ namespace __gnu_pbds
{
#define PB_DS_BASE_C_DEC \
std::tr1::__unordered_set<Key, Hash_Fn, Eq_Fn, \
- typename Allocator::template rebind<Key>::other, Cache_Hash>
+ typename _Alloc::template rebind<Key>::other, Cache_Hash>
template<typename Key,
size_t Init_Size = 8,
typename Hash_Fn = typename __gnu_pbds::detail::default_hash_fn<Key>::type,
typename Eq_Fn = std::equal_to<Key>,
typename Less_Fn = std::less<Key>,
- typename Allocator = std::allocator<char>, bool Cache_Hash = false
+ typename _Alloc = std::allocator<char>, bool Cache_Hash = false
>
class native_hash_set : public PB_DS_BASE_C_DEC
{
diff --git a/libstdc++-v3/testsuite/util/native_type/native_map.hpp b/libstdc++-v3/testsuite/util/native_type/native_map.hpp
index 29170cae8e..0fae6b15c1 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_map.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_map.hpp
@@ -50,10 +50,10 @@ namespace __gnu_pbds
{
#define PB_DS_BASE_C_DEC \
std::map<Key, Data, Cmp_Fn, \
-typename Allocator::template rebind<std::pair<const Key, Data > >::other >
+typename _Alloc::template rebind<std::pair<const Key, Data > >::other >
template<typename Key, typename Data, class Cmp_Fn = std::less<Key>,
- class Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class native_map : public PB_DS_BASE_C_DEC
{
private:
diff --git a/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp b/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp
index 4bda5562d1..c29bfb68e5 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp
@@ -48,10 +48,10 @@ namespace __gnu_pbds
{
#define PB_DS_BASE_C_DEC \
std::multimap<Key, Data, Less_Fn, \
- typename Allocator::template rebind<std::pair<const Key, Data> >::other>
+ typename _Alloc::template rebind<std::pair<const Key, Data> >::other>
template<typename Key, typename Data, class Less_Fn = std::less<Key>,
- class Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class native_multimap : public PB_DS_BASE_C_DEC
{
private:
@@ -60,10 +60,10 @@ namespace __gnu_pbds
public:
typedef native_tree_tag container_category;
- typedef Allocator allocator;
+ typedef _Alloc allocator;
typedef
- typename Allocator::template rebind<
+ typename _Alloc::template rebind<
std::pair<Key, Data> >::other::const_reference
const_reference;
diff --git a/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp b/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp
index 4367fca301..b2c7941034 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp
@@ -51,21 +51,21 @@ namespace __gnu_pbds
{
namespace detail
{
- template<typename Value_Type, bool Vector, typename Allocator>
+ template<typename Value_Type, bool Vector, typename _Alloc>
struct base_seq
{
private:
- typedef typename Allocator::template rebind<Value_Type> value_rebind;
+ typedef typename _Alloc::template rebind<Value_Type> value_rebind;
public:
typedef std::vector<Value_Type, typename value_rebind::other> type;
};
- template<typename Value_Type, typename Allocator>
- struct base_seq<Value_Type, false, Allocator>
+ template<typename Value_Type, typename _Alloc>
+ struct base_seq<Value_Type, false, _Alloc>
{
private:
- typedef typename Allocator::template rebind<Value_Type> value_rebind;
+ typedef typename _Alloc::template rebind<Value_Type> value_rebind;
public:
typedef std::deque<Value_Type, typename value_rebind::other> type;
@@ -76,20 +76,20 @@ namespace __gnu_pbds
{ };
#define PB_DS_CLASS_C_DEC \
- native_priority_queue<Value_Type, Vector, Cmp_Fn, Allocator>
+ native_priority_queue<Value_Type, Vector, Cmp_Fn, _Alloc>
#define PB_DS_BASE_C_DEC \
- std::priority_queue<Value_Type, typename detail::base_seq<Value_Type, Vector, Allocator>::type, Cmp_Fn>
+ std::priority_queue<Value_Type, typename detail::base_seq<Value_Type, Vector, _Alloc>::type, Cmp_Fn>
template<typename Value_Type,
bool Vector,
typename Cmp_Fn = std::less<Value_Type>,
- typename Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class native_priority_queue : public PB_DS_BASE_C_DEC
{
private:
typedef PB_DS_BASE_C_DEC base_type;
- typedef typename Allocator::template rebind<Value_Type> value_rebind;
+ typedef typename _Alloc::template rebind<Value_Type> value_rebind;
public:
typedef Value_Type value_type;
@@ -188,7 +188,7 @@ namespace __gnu_pbds
modify(const_reference r_old, const_reference r_new)
{
erase(r_old);
- push(r_new);
+ this->push(r_new);
}
void
diff --git a/libstdc++-v3/testsuite/util/native_type/native_set.hpp b/libstdc++-v3/testsuite/util/native_type/native_set.hpp
index c9f448bf16..c4909c726f 100644
--- a/libstdc++-v3/testsuite/util/native_type/native_set.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/native_set.hpp
@@ -48,10 +48,10 @@ namespace __gnu_pbds
namespace test
{
#define PB_DS_BASE_C_DEC \
- std::set<Key, Cmp_Fn, typename Allocator::template rebind<Key>::other>
+ std::set<Key, Cmp_Fn, typename _Alloc::template rebind<Key>::other>
template<typename Key, class Cmp_Fn = std::less<Key>,
- class Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
class native_set : public PB_DS_BASE_C_DEC
{
private:
diff --git a/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp b/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp
index e31abe106e..b4b07ea275 100644
--- a/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp
+++ b/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp
@@ -53,35 +53,35 @@ namespace __gnu_pbds
{ return (static_cast<size_t>(i)); }
};
- template<typename Key, typename Allocator = std::allocator<char> >
+ template<typename Key, typename _Alloc = std::allocator<char> >
struct hash_set_tl_t
{
typedef
typename __gnu_pbds::test::hash_common_types<
Key,
- __gnu_pbds::null_mapped_type,
+ __gnu_pbds::null_type,
int_hash,
std::equal_to<Key>,
- Allocator>::performance_min_tl
+ _Alloc>::performance_min_tl
type;
};
- template<typename Key, typename Allocator = std::allocator<char> >
+ template<typename Key, typename _Alloc = std::allocator<char> >
struct lu_set_tl_t
{
typedef
typename __gnu_pbds::test::lu_common_types<
Key,
- __gnu_pbds::null_mapped_type,
+ __gnu_pbds::null_type,
std::equal_to<
Key>,
- Allocator>::performance_min_tl
+ _Alloc>::performance_min_tl
type;
};
template<typename Key,
class Sec_Tl,
- typename Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
struct hash_mmap_tl_t
{
private:
@@ -104,7 +104,7 @@ namespace __gnu_pbds
hash_fn_t,
std::equal_to<
Key>,
- Allocator>::performance_min_tl
+ _Alloc>::performance_min_tl
type;
};
@@ -119,7 +119,7 @@ namespace __gnu_pbds
template<typename Key,
class Sec_Tl,
- typename Allocator = std::allocator<char> >
+ typename _Alloc = std::allocator<char> >
struct tree_mmap_tl_t
{
private:
@@ -132,8 +132,8 @@ namespace __gnu_pbds
Cntnr_T,
std::less<
Key>,
- __gnu_pbds::null_tree_node_update,
- Allocator>::performance_min_tl
+ __gnu_pbds::null_node_update,
+ _Alloc>::performance_min_tl
type;
};
@@ -146,65 +146,65 @@ namespace __gnu_pbds
type;
};
- template<typename Key, typename Mapped, typename Allocator>
+ template<typename Key, typename Mapped, typename _Alloc>
struct hash_hash_mmap_tl_t
{
private:
- typedef typename hash_set_tl_t<Mapped, Allocator>::type sec_tl_t;
+ typedef typename hash_set_tl_t<Mapped, _Alloc>::type sec_tl_t;
public:
- typedef typename hash_mmap_tl_t<Key, sec_tl_t, Allocator>::type type;
+ typedef typename hash_mmap_tl_t<Key, sec_tl_t, _Alloc>::type type;
};
- template<typename Key, typename Mapped, typename Allocator>
+ template<typename Key, typename Mapped, typename _Alloc>
struct tree_hash_mmap_tl_t
{
private:
- typedef typename hash_set_tl_t<Mapped, Allocator>::type sec_tl_t;
+ typedef typename hash_set_tl_t<Mapped, _Alloc>::type sec_tl_t;
public:
- typedef typename tree_mmap_tl_t<Key, sec_tl_t, Allocator>::type type;
+ typedef typename tree_mmap_tl_t<Key, sec_tl_t, _Alloc>::type type;
};
- template<typename Key, typename Mapped, typename Allocator>
+ template<typename Key, typename Mapped, typename _Alloc>
struct tree_lu_mmap_tl_t
{
private:
- typedef typename lu_set_tl_t<Mapped, Allocator>::type sec_tl_t;
+ typedef typename lu_set_tl_t<Mapped, _Alloc>::type sec_tl_t;
public:
- typedef typename tree_mmap_tl_t<Key, sec_tl_t, Allocator>::type type;
+ typedef typename tree_mmap_tl_t<Key, sec_tl_t, _Alloc>::type type;
};
- template<typename Key, typename Mapped, typename Allocator>
+ template<typename Key, typename Mapped, typename _Alloc>
struct hash_lu_mmap_tl_t
{
private:
- typedef typename lu_set_tl_t<Mapped, Allocator>::type sec_tl_t;
+ typedef typename lu_set_tl_t<Mapped, _Alloc>::type sec_tl_t;
public:
- typedef typename hash_mmap_tl_t<Key, sec_tl_t, Allocator>::type type;
+ typedef typename hash_mmap_tl_t<Key, sec_tl_t, _Alloc>::type type;
};
} // namespace detail
- template<typename Key, typename Mapped, typename Allocator>
+ template<typename Key, typename Mapped, typename _Alloc>
struct mmap_tl_t
{
private:
typedef
- typename detail::hash_hash_mmap_tl_t<Key, Mapped, Allocator>::type
+ typename detail::hash_hash_mmap_tl_t<Key, Mapped, _Alloc>::type
hh_mmap_tl_t;
typedef
- typename detail::hash_lu_mmap_tl_t<Key, Mapped, Allocator>::type
+ typename detail::hash_lu_mmap_tl_t<Key, Mapped, _Alloc>::type
hl_mmap_tl_t;
typedef
- typename detail::tree_hash_mmap_tl_t<Key, Mapped, Allocator>::type
+ typename detail::tree_hash_mmap_tl_t<Key, Mapped, _Alloc>::type
th_mmap_tl_t;
typedef
- typename detail::tree_lu_mmap_tl_t<Key, Mapped, Allocator>::type
+ typename detail::tree_lu_mmap_tl_t<Key, Mapped, _Alloc>::type
tl_mmap_tl_t;
public:
diff --git a/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp b/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp
index a553afeaba..298443d314 100644
--- a/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp
+++ b/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp
@@ -48,7 +48,7 @@ namespace __gnu_pbds
typedef
__gnu_pbds::test::hash_common_types<
int,
- __gnu_pbds::null_mapped_type>::tl
+ __gnu_pbds::null_type>::tl
hash_set_tl_t;
template<typename Cntnr_T>
@@ -72,7 +72,7 @@ namespace __gnu_pbds
typedef
__gnu_pbds::test::tree_common_types<
int,
- __gnu_pbds::null_mapped_type>::tl
+ __gnu_pbds::null_type>::tl
tree_set_tl_t;
template<typename Cntnr_T>
diff --git a/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp b/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
index 7e3f95bfc0..18d2c6badc 100644
--- a/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
+++ b/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
@@ -60,7 +60,7 @@ namespace __gnu_pbds
operator()(std::size_t resolution)
{
size_t not_found_count = 0;
- typedef typename Cntnr::const_point_iterator iterator_type;
+ typedef typename Cntnr::point_const_iterator iterator_type;
for (std::size_t i = 0; i < resolution; ++i)
{
iterator_type end = m_r_container.end();
diff --git a/libstdc++-v3/testsuite/util/regression/common_type.hpp b/libstdc++-v3/testsuite/util/regression/common_type.hpp
index 37705bc2d7..bcfc3bcd9f 100644
--- a/libstdc++-v3/testsuite/util/regression/common_type.hpp
+++ b/libstdc++-v3/testsuite/util/regression/common_type.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -64,13 +64,13 @@ namespace test
}
};
- typedef __gnu_pbds::string_trie_e_access_traits<basic_type, 'a', 'a' + basic_type::distinct_chars - 1, false, alloc_type> e_access_traits_t;
+ typedef __gnu_pbds::trie_string_access_traits<basic_type, 'a', 'a' + basic_type::distinct_chars - 1, false, alloc_type> access_traits_t;
template<typename Data_Type>
struct tree_types
{
private:
- typedef typename tree_common_types<basic_type, Data_Type, std::less<basic_type>, __gnu_pbds::null_tree_node_update, alloc_type>::regression_tl no_order_statistics_tl_t;
+ typedef typename tree_common_types<basic_type, Data_Type, std::less<basic_type>, __gnu_pbds::null_node_update, alloc_type>::regression_tl no_order_statistics_tl_t;
typedef typename tree_common_types<basic_type, Data_Type, std::less<basic_type>, __gnu_pbds::tree_order_statistics_node_update, alloc_type>::regression_tl order_statistics_tl_t;
@@ -84,11 +84,11 @@ namespace test
struct trie_types
{
private:
- typedef typename trie_common_types<basic_type, Data_Type, e_access_traits_t, __gnu_pbds::pat_trie_tag, __gnu_pbds::null_trie_node_update, alloc_type>::regression_tl no_updates_tl_t;
+ typedef typename trie_common_types<basic_type, Data_Type, access_traits_t, __gnu_pbds::pat_trie_tag, __gnu_pbds::null_node_update, alloc_type>::regression_tl no_updates_tl_t;
- typedef typename trie_common_types<basic_type, Data_Type, e_access_traits_t, __gnu_pbds::pat_trie_tag, __gnu_pbds::trie_order_statistics_node_update, alloc_type>::regression_tl order_statistics_tl_t;
+ typedef typename trie_common_types<basic_type, Data_Type, access_traits_t, __gnu_pbds::pat_trie_tag, __gnu_pbds::trie_order_statistics_node_update, alloc_type>::regression_tl order_statistics_tl_t;
- typedef typename trie_common_types<basic_type, Data_Type, e_access_traits_t, __gnu_pbds::pat_trie_tag, __gnu_pbds::trie_prefix_search_node_update, alloc_type>::regression_tl prefix_search_tl_t;
+ typedef typename trie_common_types<basic_type, Data_Type, access_traits_t, __gnu_pbds::pat_trie_tag, __gnu_pbds::trie_prefix_search_node_update, alloc_type>::regression_tl prefix_search_tl_t;
public:
typedef typename __gnu_cxx::typelist::append<no_updates_tl_t, typename __gnu_cxx::typelist::append<prefix_search_tl_t, order_statistics_tl_t>::type>::type tl_t;
@@ -160,32 +160,27 @@ namespace test
};
- namespace detail
- {
-
- };
-
typedef vector_adaptor<basic_type, alloc_type> vector_type;
typedef __gnu_cxx::typelist::create1<vector_type>::type vector_tl_t;
// Associative types.
- typedef tree_types<null_mapped_type>::tl_t tree_set_tl_t;
- typedef tree_types<null_mapped_type>::min_tl_t min_tree_set_tl_t;
+ typedef tree_types<null_type>::tl_t tree_set_tl_t;
+ typedef tree_types<null_type>::min_tl_t min_tree_set_tl_t;
typedef tree_types<basic_type>::tl_t tree_map_tl_t;
typedef tree_types<basic_type>::min_tl_t min_tree_map_tl_t;
- typedef hash_types<null_mapped_type>::tl_t hash_set_tl_t;
- typedef hash_types<null_mapped_type>::min_tl_t min_hash_set_tl_t;
+ typedef hash_types<null_type>::tl_t hash_set_tl_t;
+ typedef hash_types<null_type>::min_tl_t min_hash_set_tl_t;
typedef hash_types<basic_type>::tl_t hash_map_tl_t;
typedef hash_types<basic_type>::min_tl_t min_hash_map_tl_t;
- typedef lu_types<null_mapped_type>::tl_t lu_set_tl_t;
- typedef lu_types<null_mapped_type>::min_tl_t min_lu_set_tl_t;
+ typedef lu_types<null_type>::tl_t lu_set_tl_t;
+ typedef lu_types<null_type>::min_tl_t min_lu_set_tl_t;
typedef lu_types<basic_type>::tl_t lu_map_tl_t;
typedef lu_types<basic_type>::min_tl_t min_lu_map_tl_t;
- typedef trie_types<null_mapped_type>::tl_t trie_set_tl_t;
- typedef trie_types<null_mapped_type>::min_tl_t min_trie_set_tl_t;
+ typedef trie_types<null_type>::tl_t trie_set_tl_t;
+ typedef trie_types<null_type>::min_tl_t min_trie_set_tl_t;
typedef trie_types<basic_type>::tl_t trie_map_tl_t;
typedef trie_types<basic_type>::min_tl_t min_trie_map_tl_t;
} // namespace test
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
index ca44332121..48823bf04d 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
@@ -75,7 +75,7 @@ namespace detail
typedef typename cntnr::size_type size_type;
typedef regression_test_traits<Cntnr> test_traits;
typedef typename test_traits::key_type key_type;
- typedef typename test_traits::const_key_reference const_key_reference;
+ typedef typename test_traits::key_const_reference key_const_reference;
typedef typename test_traits::value_type value_type;
typedef typename test_traits::native_type native_type;
typedef twister_rand_gen gen;
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
index 0f15866485..7cc724a95f 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
@@ -131,7 +131,7 @@ assignment_operator()
try
{
p_c = new Cntnr();
- * p_c =* m_p_c;
+ *p_c = *m_p_c;
std::swap(p_c, m_p_c);
}
catch(__gnu_cxx::forced_error&)
@@ -379,12 +379,12 @@ it_constructor_imp(__gnu_pbds::pat_trie_tag)
switch(get_next_sub_op(2))
{
case 0:
- p_c = new Cntnr(m_p_c->get_e_access_traits());
+ p_c = new Cntnr(m_p_c->get_access_traits());
m_native_c.clear();
break;
case 1:
p_c = new Cntnr(m_p_c->begin(), m_p_c->end(),
- m_p_c->get_e_access_traits());
+ m_p_c->get_access_traits());
break;
default:
PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
@@ -450,7 +450,7 @@ basic_cmp_(const Cntnr& r_c, const native_type& r_native_c)
m_alloc.set_probability(0);
const key_type k = native_key;
m_alloc.set_probability(1);
- typename cntnr::const_point_iterator found_it = r_c.find(k);
+ typename cntnr::point_const_iterator found_it = r_c.find(k);
PB_DS_THROW_IF_FAILED(found_it != r_c.end(),
test_traits::native_val_to_string(*it),
&r_c, &r_native_c);
@@ -482,7 +482,7 @@ cmp_(const Cntnr& r_c, const native_type& r_native_c)
prefix_search = test_traits::prefix_search,
has_mapped = !__gnu_pbds::detail::is_same<
typename Cntnr::mapped_type,
- __gnu_pbds::null_mapped_type>::value
+ __gnu_pbds::null_type>::value
};
order_preserving_cmp_imp(r_c, r_native_c,
@@ -960,16 +960,16 @@ operator()()
break;
case 1:
PB_DS_RUN_MTHD(copy_constructor)
- break;
+ break;
case 2:
PB_DS_RUN_MTHD(it_constructor)
- break;
+ break;
case 3:
PB_DS_RUN_MTHD(assignment_operator)
- break;
+ break;
case 4:
PB_DS_RUN_MTHD(split_join)
- break;
+ break;
case 5:
resize();
break;
@@ -1072,8 +1072,8 @@ insert()
m_alloc.set_probability(0);
value_type v = test_traits::generate_value(m_g, m_m);
m_alloc.set_probability(m_tp);
- const_key_reference r_k = test_traits::extract_key(v);
- typename cntnr::const_point_iterator found_it = m_p_c->find(r_k);
+ key_const_reference r_k = test_traits::extract_key(v);
+ typename cntnr::point_const_iterator found_it = m_p_c->find(r_k);
const bool existed = (found_it != m_p_c->end());
const std::pair<typename cntnr::point_iterator, bool> ins_ret = m_p_c->insert(v);
@@ -1113,7 +1113,7 @@ subscript()
enum
{
no_data = __gnu_pbds::detail::is_same<
- typename Cntnr::const_key_reference,
+ typename Cntnr::key_const_reference,
typename Cntnr::const_reference>::value
};
@@ -1161,7 +1161,7 @@ subscript_imp(__gnu_pbds::detail::true_type)
m_alloc.set_probability(0);
value_type v = test_traits::generate_value(m_g, m_m);
m_alloc.set_probability(m_tp);
- (*m_p_c)[v] = __gnu_pbds::null_mapped_type();
+ (*m_p_c)[v] = __gnu_pbds::null_type();
m_native_c.insert(test_traits::native_value(v));
}
catch(__gnu_cxx::forced_error&)
@@ -1431,9 +1431,9 @@ key_defs()
{
typedef typename Cntnr::key_type test_key_type;
typedef typename Cntnr::key_reference test_key_reference;
- typedef typename Cntnr::const_key_reference test_const_key_reference;
+ typedef typename Cntnr::key_const_reference test_key_const_reference;
typedef typename Cntnr::key_pointer test_key_pointer;
- typedef typename Cntnr::const_key_pointer test_const_key_pointer;
+ typedef typename Cntnr::key_const_pointer test_key_const_pointer;
}
PB_DS_CLASS_T_DEC
@@ -1443,9 +1443,9 @@ mapped_defs()
{
typedef typename Cntnr::mapped_type test_mapped_type;
typedef typename Cntnr::mapped_reference test_mapped_reference;
- typedef typename Cntnr::const_mapped_reference test_const_mapped_reference;
+ typedef typename Cntnr::mapped_const_reference test_mapped_const_reference;
typedef typename Cntnr::mapped_pointer test_mapped_pointer;
- typedef typename Cntnr::const_mapped_pointer test_const_mapped_pointer;
+ typedef typename Cntnr::mapped_const_pointer test_mapped_const_pointer;
}
PB_DS_CLASS_T_DEC
@@ -1490,7 +1490,7 @@ PB_DS_CLASS_C_DEC::
iterator_defs()
{
typedef typename Cntnr::point_iterator test_point_iterator;
- typedef typename Cntnr::const_point_iterator const_test_point_iterator;
+ typedef typename Cntnr::point_const_iterator const_test_point_iterator;
typedef typename Cntnr::iterator test_iterator;
typedef typename Cntnr::const_iterator const_test_iterator;
}
@@ -1507,7 +1507,7 @@ PB_DS_CLASS_C_DEC::
node_iterator_defs(__gnu_pbds::detail::true_type)
{
typedef typename Cntnr::node_iterator test_node_iterator;
- typedef typename Cntnr::const_node_iterator test_const_node_iterator;
+ typedef typename Cntnr::node_const_iterator test_node_const_iterator;
}
PB_DS_CLASS_T_DEC
@@ -1571,7 +1571,7 @@ void
PB_DS_CLASS_C_DEC::
policy_defs(__gnu_pbds::pat_trie_tag)
{
- typedef typename Cntnr::e_access_traits e_access_traits;
+ typedef typename Cntnr::access_traits access_traits;
}
@@ -1690,7 +1690,7 @@ void
PB_DS_CLASS_C_DEC::
policy_access(__gnu_pbds::pat_trie_tag)
{
- typename Cntnr::e_access_traits& r_t = m_p_c->get_e_access_traits();
+ typename Cntnr::access_traits& r_t = m_p_c->get_access_traits();
assert(&r_t);
}
@@ -1706,7 +1706,8 @@ split_join()
split_join = container_traits::order_preserving
};
- return (split_join_imp(__gnu_pbds::detail::integral_constant<int,split_join>()));
+ typedef __gnu_pbds::detail::integral_constant<int, split_join> __true_type;
+ return split_join_imp(__true_type());
}
PB_DS_CLASS_T_DEC
@@ -1788,7 +1789,7 @@ it_copy()
PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
- typename cntnr::const_point_iterator const_find_it(it);
+ typename cntnr::point_const_iterator const_find_it(it);
PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
@@ -1799,14 +1800,14 @@ it_copy()
{
typename cntnr::const_iterator const_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it(const_it);
+ typename cntnr::point_const_iterator const_find_it(const_it);
PB_DS_THROW_IF_FAILED(const_find_it == const_it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_find_it != const_it), "", m_p_c, &m_native_c);
}
{
typename cntnr::point_iterator find_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it(find_it);
+ typename cntnr::point_const_iterator const_find_it(find_it);
PB_DS_THROW_IF_FAILED(find_it == const_find_it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(find_it != const_find_it), "", m_p_c, &m_native_c);
}
@@ -1824,7 +1825,7 @@ it_assign()
PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = it;
PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
@@ -1837,7 +1838,7 @@ it_assign()
{
typename cntnr::const_iterator const_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = const_it;
PB_DS_THROW_IF_FAILED(const_find_it == const_it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_find_it != const_it), "", m_p_c, &m_native_c);
@@ -1845,7 +1846,7 @@ it_assign()
{
typename cntnr::point_iterator find_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = find_it;
PB_DS_THROW_IF_FAILED(find_it == const_find_it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(find_it != const_find_it), "", m_p_c, &m_native_c);
@@ -1895,7 +1896,7 @@ rev_it_copy_imp(__gnu_pbds::detail::true_type)
PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
- typename cntnr::const_point_iterator const_find_it(it);
+ typename cntnr::point_const_iterator const_find_it(it);
PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
@@ -1923,7 +1924,7 @@ rev_it_assign_imp(__gnu_pbds::detail::true_type)
PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = it;
PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
index 5f23049523..936fbf5fca 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -62,7 +63,10 @@ namespace detail
double ep, double cp, double mp, bool d)
: m_sd(seed), m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_ep(ep), m_cp(cp),
m_mp(mp), m_disp(d)
- { }
+ {
+ if (m_disp)
+ xml_test_rand_regression_formatter(seed, n, m, tp, ip, ep, cp, mp);
+ }
template<typename Cntnr>
void
@@ -107,27 +111,22 @@ namespace detail
double ep = 0.2;
double cp = 0.001;
double mp = 0.25;
- bool disp = false; // show progress
+ bool disp = true; // show progress
try
{
detail::verify_params(sd, n, m, tp, ip, ep, cp, mp, disp);
}
- catch (__gnu_pbds::test::illegal_input_error&)
+ catch(__gnu_pbds::test::illegal_input_error&)
{
detail::usage(name);
return -1;
}
- catch (...)
+ catch(...)
{
return -2;
};
- // XXX RAII, constructor takes bool for display
- xml_test_rand_regression_formatter* p_fmt = 0;
- if (disp)
- p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip, ep, cp, mp);
-
try
{
detail::rand_reg_test tst(sd, n, m, tp, ip, ep, cp, mp, disp);
@@ -136,13 +135,9 @@ namespace detail
catch (...)
{
std::cerr << "Test failed with seed " << sd << std::endl;
- if (disp)
- delete p_fmt;
throw;
}
- if (disp)
- delete p_fmt;
return 0;
}
@@ -152,8 +147,9 @@ namespace detail
usage(const std::string& name)
{
using namespace std;
- cerr << "usage: " << name << " <sd> <n> <m> <tp> <ip> <ep> <cp> <mp> ['t' | 'f']" <<
- endl << endl;
+ cerr << "usage: " << name
+ << " <sd> <n> <m> <tp> <ip> <ep> <cp> <mp> ['t' | 'f']"
+ << endl << endl;
cerr << "This test performs basic regression tests on various associative containers."
"For each container, it performs a sequence of operations. At each iteration, it does "
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
index e929f3533f..19cc3906eb 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
@@ -643,7 +643,7 @@ PB_DS_CLASS_C_DEC::
iterator_defs()
{
typedef typename Cntnr::point_iterator test_point_iterator;
- typedef typename Cntnr::const_point_iterator const_test_point_iterator;
+ typedef typename Cntnr::point_const_iterator const_test_point_iterator;
typedef typename Cntnr::iterator test_iterator;
typedef typename Cntnr::const_iterator const_test_iterator;
}
@@ -744,14 +744,14 @@ it_copy()
{
typename cntnr::const_iterator const_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it(const_it);
+ typename cntnr::point_const_iterator const_find_it(const_it);
_GLIBCXX_THROW_IF(const_find_it != const_it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(const_find_it == const_it), "", m_p_c, &m_native_c);
}
{
typename cntnr::iterator it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it1(it);
+ typename cntnr::point_const_iterator const_find_it1(it);
_GLIBCXX_THROW_IF(const_find_it1 != it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(const_find_it1 == it), "", m_p_c, &m_native_c);
@@ -760,7 +760,7 @@ it_copy()
_GLIBCXX_THROW_IF(!(find_it1 == it), "", m_p_c, &m_native_c);
typename cntnr::point_iterator find_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it(find_it);
+ typename cntnr::point_const_iterator const_find_it(find_it);
_GLIBCXX_THROW_IF(find_it != const_find_it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(find_it == const_find_it), "", m_p_c, &m_native_c);
}
@@ -780,7 +780,7 @@ it_assign()
_GLIBCXX_THROW_IF(const_it != it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(const_it == it), "", m_p_c, &m_native_c);
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = it;
_GLIBCXX_THROW_IF(const_find_it != it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(const_find_it == it), "", m_p_c, &m_native_c);
@@ -793,7 +793,7 @@ it_assign()
{
typename cntnr::const_iterator const_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = const_it;
_GLIBCXX_THROW_IF(const_find_it != const_it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(const_find_it == const_it), "", m_p_c, &m_native_c);
@@ -801,7 +801,7 @@ it_assign()
{
typename cntnr::point_iterator find_it = m_p_c->end();
- typename cntnr::const_point_iterator const_find_it;
+ typename cntnr::point_const_iterator const_find_it;
const_find_it = find_it;
_GLIBCXX_THROW_IF(find_it != const_find_it, "", m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!(find_it == const_find_it), "", m_p_c, &m_native_c);
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
index 37f8d51af7..227f60b19d 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -60,7 +61,10 @@ namespace detail
double dp, double ep, double cp, double mp, bool d)
: m_sd(seed), m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_dp(dp), m_ep(ep),
m_cp(cp), m_mp(mp), m_disp(d)
- { }
+ {
+ if (m_disp)
+ xml_test_rand_regression_formatter(seed, n, m, tp, ip, ep, cp, mp);
+ }
template<typename Cntnr>
void
@@ -100,14 +104,14 @@ namespace detail
// Sane defaults.
size_t n = iter;
size_t m = keys;
- size_t sd = 0; // 0 = time-determined arbitrary
+ size_t sd = twister_rand_gen::get_time_determined_seed();
double tp = 0.2;
double ip = 0.6;
double dp = 0.1;
double ep = 0.2;
double cp = 0.001;
double mp = 1;
- bool disp = false; // show progress
+ bool disp = true; // show progress
try
{
@@ -123,13 +127,6 @@ namespace detail
return -2;
};
- xml_test_rand_regression_formatter* p_fmt = 0;
- if (sd == 0)
- sd = twister_rand_gen::get_time_determined_seed();
- if (disp)
- p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip, dp,
- ep, cp, mp);
-
try
{
detail::rand_reg_test tst(sd, n, m, tp, ip, dp, ep, cp, mp, disp);
@@ -138,13 +135,9 @@ namespace detail
catch(...)
{
std::cerr << "Test failed with seed " << sd << std::endl;
- if (disp)
- delete p_fmt;
- return -1;
+ throw;
}
- if (disp)
- delete p_fmt;
return 0;
}
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
index 38761a1778..f8f5bae0d2 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
@@ -47,58 +47,58 @@ namespace __gnu_pbds
namespace detail
{
- template<typename Key, class Allocator>
+ template<typename Key, typename _Alloc>
struct native_key_type;
- template<typename Allocator>
+ template<typename _Alloc>
struct native_key_type<
basic_type,
- Allocator>
+ _Alloc>
{
typedef std::string type;
static type
- native_key(typename Allocator::template rebind<
+ native_key(typename _Alloc::template rebind<
basic_type>::other::const_reference r_key)
{
return (std::string(r_key));
}
};
- template<typename Hd, class Tl, class Allocator>
+ template<typename Hd, class Tl, typename _Alloc>
struct native_key_type<
std::pair<
Hd,
Tl>,
- Allocator>
+ _Alloc>
{
- typedef typename native_key_type< Hd, Allocator>::type hd_type;
+ typedef typename native_key_type< Hd, _Alloc>::type hd_type;
- typedef typename native_key_type< Tl, Allocator>::type tl_type;
+ typedef typename native_key_type< Tl, _Alloc>::type tl_type;
typedef std::pair< hd_type, tl_type> type;
static type
- native_key(typename Allocator::template rebind< std::pair<Hd, Tl> >::other::const_reference r_key)
+ native_key(typename _Alloc::template rebind< std::pair<Hd, Tl> >::other::const_reference r_key)
{
return (std::make_pair(
- native_key_type<Hd, Allocator>::native_key(r_key.first),
- native_key_type<Tl, Allocator>::native_key(r_key.second)));
+ native_key_type<Hd, _Alloc>::native_key(r_key.first),
+ native_key_type<Tl, _Alloc>::native_key(r_key.second)));
}
};
template<typename Native_Key_Type,
class Key_Type,
class Data_Type,
- class Allocator>
+ typename _Alloc>
struct native_type_traits_base;
- template<typename Native_Key_Type, class Key_Type, class Allocator>
+ template<typename Native_Key_Type, class Key_Type, typename _Alloc>
struct native_type_traits_base<
Native_Key_Type,
Key_Type,
basic_type,
- Allocator>
+ _Alloc>
{
public:
typedef std::map< Native_Key_Type, std::string> type;
@@ -111,20 +111,20 @@ namespace __gnu_pbds
}
static typename type::value_type
- native_value(typename Allocator::template rebind< std::pair<Key_Type, basic_type> >::other::const_reference r_val)
+ native_value(typename _Alloc::template rebind< std::pair<Key_Type, basic_type> >::other::const_reference r_val)
{
return (std::make_pair(
- native_key_type<Key_Type, Allocator>::native_key(r_val.first),
+ native_key_type<Key_Type, _Alloc>::native_key(r_val.first),
std::string(r_val.second)));
}
};
- template<typename Native_Key_Type, class Key_Type, class Allocator>
+ template<typename Native_Key_Type, class Key_Type, typename _Alloc>
struct native_type_traits_base<
Native_Key_Type,
Key_Type,
- __gnu_pbds::null_mapped_type,
- Allocator>
+ __gnu_pbds::null_type,
+ _Alloc>
{
public:
typedef std::set< Native_Key_Type> type;
@@ -137,10 +137,10 @@ namespace __gnu_pbds
}
static typename type::value_type
- native_value(typename Allocator::template rebind<
+ native_value(typename _Alloc::template rebind<
Key_Type>::other::const_reference r_val)
{
- return (native_key_type<Key_Type, Allocator>::native_key(
+ return (native_key_type<Key_Type, _Alloc>::native_key(
r_val));
}
};
@@ -148,16 +148,16 @@ namespace __gnu_pbds
#define PB_DS_NATIVE_KEY_TYPE_C_DEC \
native_key_type< \
Key_Type, \
- Allocator>
+ _Alloc>
#define PB_DS_BASE_C_DEC \
native_type_traits_base< \
typename PB_DS_NATIVE_KEY_TYPE_C_DEC::type, \
Key_Type, \
Data_Type, \
- Allocator>
+ _Alloc>
- template<typename Key_Type, class Data_Type, class Allocator>
+ template<typename Key_Type, class Data_Type, typename _Alloc>
struct native_type_traits : public PB_DS_BASE_C_DEC
{
typedef typename PB_DS_BASE_C_DEC::type type;
@@ -165,7 +165,7 @@ namespace __gnu_pbds
typedef typename type::key_type key_type;
static typename PB_DS_NATIVE_KEY_TYPE_C_DEC::type
- native_key(typename Allocator::template rebind<
+ native_key(typename _Alloc::template rebind<
Key_Type>::other::const_reference r_key)
{
return (PB_DS_NATIVE_KEY_TYPE_C_DEC::native_key(r_key));
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
index a4a768e5e1..6074f38cd7 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
@@ -101,7 +101,7 @@ namespace detail
// Only associative containers.
typedef typename Cntnr::key_type key_type;
- typedef typename Cntnr::const_key_reference const_key_reference;
+ typedef typename Cntnr::key_const_reference key_const_reference;
typedef typename native_type::key_type native_key_type;
enum
@@ -149,12 +149,12 @@ namespace detail
generate_value(Gen& r_gen, size_t max)
{ return PB_DS_TYPE_TRAITS_C_DEC::generate_value(r_gen, max); }
- static const_key_reference
+ static key_const_reference
extract_key(const_reference r_val)
{ return type_traits_base::extract_key(r_val); }
static native_key_type
- native_key(const_key_reference r_key)
+ native_key(key_const_reference r_key)
{ return native_type_traits_base::native_key(r_key); }
static native_value_type
@@ -174,7 +174,7 @@ namespace detail
{ return to_string(r_val); }
static std::string
- key_to_string(const_key_reference r_key)
+ key_to_string(key_const_reference r_key)
{ return to_string(r_key); }
static std::string
@@ -182,7 +182,7 @@ namespace detail
{ return to_string(r_native_val); }
static bool
- prefix_match(const_key_reference r_key, const std::string& r_native_key)
+ prefix_match(key_const_reference r_key, const std::string& r_native_key)
{
const size_t len = std::min(r_key.length(), r_native_key.length());
const std::string substr = r_native_key.substr(0, len);
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
index c7ce5f7a31..4c3f7cabe7 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
@@ -51,11 +51,11 @@ namespace __gnu_pbds
{
typedef Cntnr cntnr;
typedef typename cntnr::key_type key_type;
- typedef typename cntnr::const_key_reference const_key_reference;
+ typedef typename cntnr::key_const_reference key_const_reference;
typedef typename cntnr::value_type value_type;
typedef typename cntnr::const_reference const_reference;
typedef typename cntnr::mapped_type mapped_type;
- typedef typename cntnr::const_mapped_reference const_mapped_reference;
+ typedef typename cntnr::mapped_const_reference mapped_const_reference;
template<typename Gen>
static key_type
@@ -67,7 +67,7 @@ namespace __gnu_pbds
generate_value(Gen& r_gen, size_t max)
{ return generate_value(r_gen, max, value_type()); }
- static const_key_reference
+ static key_const_reference
extract_key(const_reference r_val)
{ return extract_key_imp(r_val); }
@@ -82,7 +82,7 @@ namespace __gnu_pbds
template<typename Gen>
static value_type
- generate_value(Gen& r_gen, size_t max, __gnu_pbds::null_mapped_type)
+ generate_value(Gen& r_gen, size_t max, __gnu_pbds::null_type)
{ return basic_type(r_gen, max); }
template<typename Gen>
@@ -96,11 +96,11 @@ namespace __gnu_pbds
std::pair<const basic_type, basic_type>)
{ return std::make_pair(basic_type(gen, max), basic_type(gen, max)); }
- static const_key_reference
+ static key_const_reference
extract_key_imp(basic_type_const_reference r_val)
{ return r_val; }
- static const_key_reference
+ static key_const_reference
extract_key_imp(pair_type_const_reference r_val)
{ return r_val.first; }
};
diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc
index ea100b6817..a0294c694c 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
using namespace std;
-void
+void
symbol::init(string& data)
{
const char delim = ':';
@@ -119,9 +119,9 @@ symbol::print() const
}
cout << "version status: " << vers << endl;
- if (version_name.size()
+ if (version_name.size()
&& (version_status == compatible || version_status == incompatible))
- cout << version_name << endl;
+ cout << version_name << endl;
string type_string;
switch (type)
@@ -142,7 +142,7 @@ symbol::print() const
type_string = "<default>";
}
cout << "type: " << type_string << endl;
-
+
if (type == object || type == tls)
cout << "type size: " << size << endl;
@@ -181,7 +181,7 @@ check_version(symbol& test, bool added)
known_versions.push_back("GLIBCXX_3.4.1");
known_versions.push_back("GLIBCXX_3.4.2");
known_versions.push_back("GLIBCXX_3.4.3");
- known_versions.push_back("GLIBCXX_3.4.4");
+ known_versions.push_back("GLIBCXX_3.4.4");
known_versions.push_back("GLIBCXX_3.4.5");
known_versions.push_back("GLIBCXX_3.4.6");
known_versions.push_back("GLIBCXX_3.4.7");
@@ -194,6 +194,7 @@ check_version(symbol& test, bool added)
known_versions.push_back("GLIBCXX_3.4.14");
known_versions.push_back("GLIBCXX_3.4.15");
known_versions.push_back("GLIBCXX_3.4.16");
+ known_versions.push_back("GLIBCXX_3.4.17");
known_versions.push_back("GLIBCXX_LDBL_3.4");
known_versions.push_back("GLIBCXX_LDBL_3.4.7");
known_versions.push_back("GLIBCXX_LDBL_3.4.10");
@@ -203,7 +204,9 @@ check_version(symbol& test, bool added)
known_versions.push_back("CXXABI_1.3.3");
known_versions.push_back("CXXABI_1.3.4");
known_versions.push_back("CXXABI_1.3.5");
+ known_versions.push_back("CXXABI_1.3.6");
known_versions.push_back("CXXABI_LDBL_1.3");
+ known_versions.push_back("CXXABI_TM_1");
}
compat_list::iterator begin = known_versions.begin();
compat_list::iterator end = known_versions.end();
@@ -217,13 +220,12 @@ check_version(symbol& test, bool added)
test.version_status = symbol::compatible;
else
test.version_status = symbol::incompatible;
-
- // Check that added symbols aren't added in the base versions.
- if (added
- && (test.version_name == known_versions[0]
- || test.version_name == "CXXABI_1.3"
- || test.version_name == "GLIBCXX_LDBL_3.4"
- || test.version_name == "CXXABI_LDBL_1.3"))
+
+ // Check that added symbols are added in the latest pre-release version.
+ bool latestp = (test.version_name == "GLIBCXX_3.4.17"
+ || test.version_name == "CXXABI_1.3.6"
+ || test.version_name == "CXXABI_TM_1");
+ if (added && !latestp)
test.version_status = symbol::incompatible;
// Check that long double compatibility symbols demangled as
@@ -238,8 +240,8 @@ check_version(symbol& test, bool added)
// Check for weak label.
if (it1 == end && it2 == end)
test.version_status = symbol::incompatible;
-
- // Check that
+
+ // Check that
// GLIBCXX_3.4
// GLIBCXX_3.4.5
// version as compatible
@@ -260,7 +262,7 @@ check_version(symbol& test, bool added)
return test.version_status == symbol::compatible;
}
-bool
+bool
check_compatible(symbol& lhs, symbol& rhs, bool verbose)
{
bool ret = true;
@@ -273,7 +275,7 @@ check_compatible(symbol& lhs, symbol& rhs, bool verbose)
if (verbose)
cout << tab << "incompatible types" << endl;
}
-
+
if (lhs.name != rhs.name)
{
ret = false;
@@ -292,7 +294,7 @@ check_compatible(symbol& lhs, symbol& rhs, bool verbose)
}
}
- if (lhs.version_name != rhs.version_name
+ if (lhs.version_name != rhs.version_name
&& !check_version(lhs) && !check_version(rhs))
{
ret = false;
@@ -331,7 +333,7 @@ get_symbol(const string& name, const symbols& s)
}
}
-void
+void
examine_symbol(const char* name, const char* file)
{
try
@@ -345,7 +347,7 @@ examine_symbol(const char* name, const char* file)
}
int
-compare_symbols(const char* baseline_file, const char* test_file,
+compare_symbols(const char* baseline_file, const char* test_file,
bool verbose)
{
// Input both lists of symbols into container.
@@ -374,7 +376,7 @@ compare_symbols(const char* baseline_file, const char* test_file,
// duplicates.
//
// The names added to missing_names are baseline names not found in
- // test names
+ // test names
// -> symbols that have been deleted.
//
// The names added to added_names are test names not in
@@ -413,6 +415,9 @@ compare_symbols(const char* baseline_file, const char* test_file,
typedef pair<symbol, symbol> symbol_pair;
vector<symbol_pair> incompatible;
+ // Fill out list of undesignated symbols.
+ vector<symbol> undesignated;
+
// Check missing names for compatibility.
for (size_t j = 0; j < missing_names.size(); ++j)
{
@@ -437,11 +442,41 @@ compare_symbols(const char* baseline_file, const char* test_file,
for (size_t l = 0; l < added_size; ++l)
{
symbol& stest = test[added_names[l]];
- stest.status = symbol::added;
- if (!check_version(stest, true))
- incompatible.push_back(symbol_pair(stest, stest));
+
+ // Mark TLS as undesignated, remove from added.
+ if (stest.type == symbol::tls)
+ {
+ stest.status = symbol::undesignated;
+ if (!check_version(stest, false))
+ incompatible.push_back(symbol_pair(stest, stest));
+ else
+ undesignated.push_back(stest);
+ }
+ else
+ {
+ stest.status = symbol::added;
+ if (!check_version(stest, true))
+ incompatible.push_back(symbol_pair(stest, stest));
+ }
}
+ // Normalize added names and undesignated names.
+ const size_t undesignated_size = undesignated.size();
+ for (size_t l = 0; l < undesignated_size; ++l)
+ {
+ symbol& sundes = undesignated[l];
+ symbol_names::iterator end = added_names.end();
+ symbol_names::iterator it = find(added_names.begin(), end, sundes.name);
+ if (it != end)
+ {
+ // Found.
+ added_names.erase(it);
+ }
+ else
+ __throw_runtime_error(sundes.name.c_str());
+ }
+
+
// Report results.
if (verbose && added_names.size())
{
@@ -452,7 +487,7 @@ compare_symbols(const char* baseline_file, const char* test_file,
test[added_names[j]].print();
}
}
-
+
if (verbose && missing_names.size())
{
cout << endl << missing_names.size() << " missing symbols " << endl;
@@ -462,7 +497,21 @@ compare_symbols(const char* baseline_file, const char* test_file,
baseline[missing_names[j]].print();
}
}
-
+
+ if (verbose && undesignated.size())
+ {
+ cout << endl << undesignated.size() << " undesignated symbols " << endl;
+ for (size_t j = 0; j < undesignated.size() ; ++j)
+ {
+ // First, print index.
+ cout << j << endl;
+
+ // Second, report name.
+ symbol& s = undesignated[j];
+ s.print();
+ }
+ }
+
if (verbose && incompatible.size())
{
cout << endl << incompatible.size() << " incompatible symbols " << endl;
@@ -475,16 +524,17 @@ compare_symbols(const char* baseline_file, const char* test_file,
symbol& sbase = incompatible[j].first;
symbol& stest = incompatible[j].second;
stest.print();
-
- // Second, report reason or reasons incompatible.
+
+ // Third, report reason or reasons incompatible.
check_compatible(sbase, stest, true);
}
}
-
+
cout << "\n\t\t=== libstdc++-v3 check-abi Summary ===" << endl;
cout << endl;
cout << "# of added symbols:\t\t " << added_names.size() << endl;
cout << "# of missing symbols:\t\t " << missing_names.size() << endl;
+ cout << "# of undesignated symbols:\t " << undesignated.size() << endl;
cout << "# of incompatible symbols:\t " << incompatible.size() << endl;
cout << endl;
cout << "using: " << baseline_file << endl;
@@ -560,4 +610,3 @@ demangle(const std::string& mangled)
}
return name;
}
-
diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h
index a534d85845..c0b8ee3be9 100644
--- a/libstdc++-v3/testsuite/util/testsuite_allocator.h
+++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Testing allocator for the C++ library testsuite.
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -28,11 +28,8 @@
#define _GLIBCXX_TESTSUITE_ALLOCATOR_H
#include <tr1/unordered_map>
-#include <cassert>
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <bits/move.h>
-#endif
+#include <testsuite_hooks.h>
namespace __gnu_test
{
@@ -40,14 +37,15 @@ namespace __gnu_test
{
public:
typedef std::size_t size_type;
-
+
static void*
allocate(size_type blocksize)
{
+ void* p = ::operator new(blocksize);
allocationCount_ += blocksize;
- return ::operator new(blocksize);
+ return p;
}
-
+
static void
construct() { constructCount_++; }
@@ -60,19 +58,19 @@ namespace __gnu_test
::operator delete(p);
deallocationCount_ += blocksize;
}
-
+
static size_type
get_allocation_count() { return allocationCount_; }
-
+
static size_type
get_deallocation_count() { return deallocationCount_; }
-
+
static int
get_construct_count() { return constructCount_; }
static int
get_destruct_count() { return destructCount_; }
-
+
static void
reset()
{
@@ -110,34 +108,51 @@ namespace __gnu_test
template<class U> struct rebind { typedef tracker_allocator<U> other; };
pointer
- address(reference value) const
- { return &value; }
-
+ address(reference value) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(value); }
+
const_pointer
- address(const_reference value) const
- { return &value; }
-
- tracker_allocator() throw()
+ address(const_reference value) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(value); }
+
+ tracker_allocator() _GLIBCXX_USE_NOEXCEPT
{ }
- tracker_allocator(const tracker_allocator&) throw()
+ tracker_allocator(const tracker_allocator&) _GLIBCXX_USE_NOEXCEPT
{ }
template<class U>
- tracker_allocator(const tracker_allocator<U>&) throw()
+ tracker_allocator(const tracker_allocator<U>&) _GLIBCXX_USE_NOEXCEPT
{ }
- ~tracker_allocator() throw()
+ ~tracker_allocator() _GLIBCXX_USE_NOEXCEPT
{ }
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_type(-1) / sizeof(T); }
pointer
allocate(size_type n, const void* = 0)
{ return static_cast<pointer>(counter_type::allocate(n * sizeof(T))); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename U, typename... Args>
+ void
+ construct(U* p, Args&&... args)
+ {
+ ::new((void *)p) U(std::forward<Args>(args)...);
+ counter_type::construct();
+ }
+
+ template<typename U>
+ void
+ destroy(U* p)
+ {
+ p->~U();
+ counter_type::destroy();
+ }
+#else
void
construct(pointer p, const T& value)
{
@@ -145,22 +160,13 @@ namespace __gnu_test
counter_type::construct();
}
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... Args>
- void
- construct(pointer p, Args&&... args)
- {
- ::new((void *)p) T(std::forward<Args>(args)...);
- counter_type::construct();
- }
-#endif
-
void
destroy(pointer p)
{
p->~T();
counter_type::destroy();
}
+#endif
void
deallocate(pointer p, size_type num)
@@ -250,29 +256,38 @@ namespace __gnu_test
typedef Tp& reference;
typedef const Tp& const_reference;
typedef Tp value_type;
-
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ typedef std::true_type propagate_on_container_swap;
+#endif
+
template<typename Tp1>
struct rebind
{ typedef uneq_allocator<Tp1> other; };
- uneq_allocator() throw()
+ uneq_allocator() _GLIBCXX_USE_NOEXCEPT
: personality(0) { }
- uneq_allocator(int person) throw()
+ uneq_allocator(int person) _GLIBCXX_USE_NOEXCEPT
: personality(person) { }
template<typename Tp1>
- uneq_allocator(const uneq_allocator<Tp1>& b) throw()
+ uneq_allocator(const uneq_allocator<Tp1>& b) _GLIBCXX_USE_NOEXCEPT
: personality(b.get_personality()) { }
+ ~uneq_allocator() _GLIBCXX_USE_NOEXCEPT
+ { }
+
int get_personality() const { return personality; }
pointer
- address(reference x) const { return &x; }
+ address(reference x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(x); }
const_pointer
- address(const_reference x) const { return &x; }
-
+ address(const_reference x) const _GLIBCXX_NOEXCEPT
+ { return std::__addressof(x); }
+
pointer
allocate(size_type n, const void* = 0)
{
@@ -292,37 +307,46 @@ namespace __gnu_test
}
return p;
}
-
+
void
deallocate(pointer p, size_type)
{
- assert( p );
-
+ bool test __attribute__((unused)) = true;
+
+ VERIFY( p );
+
map_type::iterator it = get_map().find(reinterpret_cast<void*>(p));
- assert( it != get_map().end() );
+ VERIFY( it != get_map().end() );
// Enforce requirements in Table 32 about deallocation vs
// allocator equality.
- assert( it->second == personality );
-
+ VERIFY( it->second == personality );
+
get_map().erase(it);
::operator delete(p);
}
-
+
size_type
- max_size() const throw()
+ max_size() const _GLIBCXX_USE_NOEXCEPT
{ return size_type(-1) / sizeof(Tp); }
-
- void
- construct(pointer p, const Tp& val)
- { ::new((void *)p) Tp(val); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<typename... Args>
+ template<typename U, typename... Args>
void
- construct(pointer p, Args&&... args)
- { ::new((void *)p) Tp(std::forward<Args>(args)...); }
-#endif
+ construct(U* p, Args&&... args)
+ { ::new((void *)p) U(std::forward<Args>(args)...); }
+
+ template<typename U>
+ void
+ destroy(U* p) { p->~U(); }
+
+ // Not copy assignable...
+ uneq_allocator&
+ operator=(const uneq_allocator&) = delete;
+#else
+ void
+ construct(pointer p, const Tp& val)
+ { ::new((void *)p) Tp(val); }
void
destroy(pointer p) { p->~Tp(); }
@@ -331,6 +355,9 @@ namespace __gnu_test
// Not assignable...
uneq_allocator&
operator=(const uneq_allocator&);
+#endif
+
+ private:
// ... yet swappable!
friend inline void
@@ -349,6 +376,119 @@ namespace __gnu_test
int personality;
};
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // An uneq_allocator which can be used to test allocator propagation.
+ template<typename Tp, bool Propagate>
+ class propagating_allocator : public uneq_allocator<Tp>
+ {
+ typedef uneq_allocator<Tp> base_alloc;
+ base_alloc& base() { return *this; }
+ const base_alloc& base() const { return *this; }
+ void swap_base(base_alloc& b) { swap(b, this->base()); }
+
+ typedef std::integral_constant<bool, Propagate> trait_type;
+
+ public:
+ // default allocator_traits::rebind_alloc would select
+ // uneq_allocator::rebind so we must define rebind here
+ template<typename Up>
+ struct rebind { typedef propagating_allocator<Up, Propagate> other; };
+
+ propagating_allocator(int i) noexcept
+ : base_alloc(i)
+ { }
+
+ template<typename Up>
+ propagating_allocator(const propagating_allocator<Up, Propagate>& a)
+ noexcept
+ : base_alloc(a)
+ { }
+
+ propagating_allocator() noexcept = default;
+
+ propagating_allocator(const propagating_allocator&) noexcept = default;
+
+ propagating_allocator&
+ operator=(const propagating_allocator& a) noexcept
+ {
+ static_assert(Propagate, "assigning propagating_allocator<T, true>");
+ propagating_allocator(a).swap_base(*this);
+ return *this;
+ }
+
+ template<bool P2>
+ propagating_allocator&
+ operator=(const propagating_allocator<Tp, P2>& a) noexcept
+ {
+ static_assert(P2, "assigning propagating_allocator<T, true>");
+ propagating_allocator(a).swap_base(*this);
+ return *this;
+ }
+
+ // postcondition: a.get_personality() == 0
+ propagating_allocator(propagating_allocator&& a) noexcept
+ : base_alloc()
+ { swap_base(a); }
+
+ // postcondition: a.get_personality() == 0
+ propagating_allocator&
+ operator=(propagating_allocator&& a) noexcept
+ {
+ propagating_allocator(std::move(a)).swap_base(*this);
+ return *this;
+ }
+
+ typedef trait_type propagate_on_container_copy_assignment;
+ typedef trait_type propagate_on_container_move_assignment;
+ typedef trait_type propagate_on_container_swap;
+
+ propagating_allocator select_on_container_copy_construction() const
+ { return Propagate ? *this : propagating_allocator(); }
+ };
+
+ // Class template supporting the minimal interface that satisfies the
+ // Allocator requirements, from example in [allocator.requirements]
+ template <class Tp>
+ struct SimpleAllocator
+ {
+ typedef Tp value_type;
+
+ SimpleAllocator() { }
+
+ template <class T>
+ SimpleAllocator(const SimpleAllocator<T>& other) { }
+
+ Tp *allocate(std::size_t n)
+ { return std::allocator<Tp>().allocate(n); }
+
+ void deallocate(Tp *p, std::size_t n)
+ { std::allocator<Tp>().deallocate(p, n); }
+ };
+
+ template <class T, class U>
+ bool operator==(const SimpleAllocator<T>&, const SimpleAllocator<U>&)
+ { return true; }
+ template <class T, class U>
+ bool operator!=(const SimpleAllocator<T>&, const SimpleAllocator<U>&)
+ { return false; }
+
+#endif
+
+ template<typename Tp>
+ struct ExplicitConsAlloc : std::allocator<Tp>
+ {
+ ExplicitConsAlloc() { }
+
+ template<typename Up>
+ explicit
+ ExplicitConsAlloc(const ExplicitConsAlloc<Up>&) { }
+
+ template<typename Up>
+ struct rebind
+ { typedef ExplicitConsAlloc<Up> other; };
+ };
+
} // namespace __gnu_test
#endif // _GLIBCXX_TESTSUITE_ALLOCATOR_H
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index a4f59ac2ab..03be0acac2 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -257,7 +257,7 @@ namespace __gnu_test
typedef typename append<a1, a2>::type type;
};
- // A typelist of all integral types.
+ // A typelist of all standard integral types.
struct integral_types
{
typedef bool a1;
@@ -285,6 +285,50 @@ namespace __gnu_test
#endif
};
+ // A typelist of all standard integral types + the GNU 128-bit types.
+ struct integral_types_gnu
+ {
+ typedef bool a1;
+ typedef char a2;
+ typedef signed char a3;
+ typedef unsigned char a4;
+ typedef short a5;
+ typedef unsigned short a6;
+ typedef int a7;
+ typedef unsigned int a8;
+ typedef long a9;
+ typedef unsigned long a10;
+ typedef long long a11;
+ typedef unsigned long long a12;
+ typedef wchar_t a13;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ typedef char16_t a14;
+ typedef char32_t a15;
+# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ typedef __int128 a16;
+ typedef unsigned __int128 a17;
+
+ typedef node<_GLIBCXX_TYPELIST_CHAIN17(a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15,
+ a16, a17)> type;
+# else
+ typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15)> type;
+# endif
+#else
+# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
+ typedef __int128 a14;
+ typedef unsigned __int128 a15;
+
+ typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15)> type;
+# else
+ typedef node<_GLIBCXX_TYPELIST_CHAIN13(a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13)> type;
+# endif
+#endif
+ };
+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
struct atomic_integrals_no_bool
{
@@ -347,7 +391,7 @@ namespace __gnu_test
typedef std::numeric_limits<value_type> type;
};
- typedef transform<integral_types::type, numeric_limits>::type limits_tl;
+ typedef transform<integral_types_gnu::type, numeric_limits>::type limits_tl;
struct has_increment_operators
{
diff --git a/libstdc++-v3/testsuite/util/testsuite_container_traits.h b/libstdc++-v3/testsuite/util/testsuite_container_traits.h
index 4d8ff997ae..cce91b739b 100644
--- a/libstdc++-v3/testsuite/util/testsuite_container_traits.h
+++ b/libstdc++-v3/testsuite/util/testsuite_container_traits.h
@@ -43,6 +43,7 @@ namespace __gnu_test
typedef std::false_type has_throwing_erase;
typedef std::false_type has_insert;
typedef std::false_type has_insert_after;
+ typedef std::false_type has_emplace;
typedef std::false_type has_push_pop;
typedef std::false_type has_size_type_constructor;
};
@@ -216,6 +217,7 @@ namespace __gnu_test
typedef std::true_type has_erase;
typedef std::true_type has_insert;
+ typedef std::true_type has_emplace;
};
template<typename _Tp1, typename _Tp2, typename _Tp3,
@@ -230,6 +232,7 @@ namespace __gnu_test
typedef std::true_type has_erase;
typedef std::true_type has_insert;
+ typedef std::true_type has_emplace;
};
template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
@@ -242,6 +245,7 @@ namespace __gnu_test
typedef std::true_type has_erase;
typedef std::true_type has_insert;
+ typedef std::true_type has_emplace;
};
template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
@@ -254,6 +258,7 @@ namespace __gnu_test
typedef std::true_type has_erase;
typedef std::true_type has_insert;
+ typedef std::true_type has_emplace;
};
} // namespace __gnu_test
diff --git a/libstdc++-v3/testsuite/util/testsuite_containers.h b/libstdc++-v3/testsuite/util/testsuite_containers.h
index 24133cdc58..001c9c8659 100644
--- a/libstdc++-v3/testsuite/util/testsuite_containers.h
+++ b/libstdc++-v3/testsuite/util/testsuite_containers.h
@@ -56,7 +56,7 @@ namespace __gnu_test
template<typename _Tp, bool _Bt = traits<_Tp>::is_allocator_aware::value>
struct allocator_aware_types
{
- // Allocator-aware requirements (table 82)
+ // _Alloc-aware requirements (table 82)
typedef _Tp test_type;
typedef typename test_type::allocator_type allocator_type;
};
diff --git a/libstdc++-v3/testsuite/util/testsuite_error.h b/libstdc++-v3/testsuite/util/testsuite_error.h
index c2bfed737d..69a90fbecf 100644
--- a/libstdc++-v3/testsuite/util/testsuite_error.h
+++ b/libstdc++-v3/testsuite/util/testsuite_error.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Error handling utils for the C++ library testsuite.
//
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,11 +29,9 @@ namespace __gnu_test
{
struct test_category : public std::error_category
{
- test_category() {}
-
virtual const char*
- name() const
- {
+ name() const noexcept
+ {
const char* s = "__gnu_test::test_category";
return s;
}
@@ -45,11 +43,9 @@ namespace __gnu_test
struct test_derived_category : public test_category
{
- test_derived_category() {}
-
virtual const char*
- name() const
- {
+ name() const noexcept
+ {
const char* s = "__gnu_test::test_derived_category";
return s;
}
diff --git a/libstdc++-v3/testsuite/util/testsuite_io.h b/libstdc++-v3/testsuite/util/testsuite_io.h
index 681448aa51..4251b71071 100644
--- a/libstdc++-v3/testsuite/util/testsuite_io.h
+++ b/libstdc++-v3/testsuite/util/testsuite_io.h
@@ -144,7 +144,7 @@ namespace __gnu_test
{
p[0] = char_type('s');
p[1] = char_type();
- setg(p, p, p + 1);
+ this->setg(p, p, p + 1);
}
virtual int_type underflow()
diff --git a/libstdc++-v3/testsuite/util/testsuite_random.h b/libstdc++-v3/testsuite/util/testsuite_random.h
new file mode 100644
index 0000000000..950a9aeaa1
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/testsuite_random.h
@@ -0,0 +1,181 @@
+// -*- C++ -*-
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file testsuite_random.h
+ */
+
+#ifndef _GLIBCXX_TESTSUITE_RANDOM_H
+#define _GLIBCXX_TESTSUITE_RANDOM_H
+
+#include <cmath>
+#include <initializer_list>
+#include <testsuite_hooks.h>
+
+namespace __gnu_test
+{
+ // Adapted for libstdc++ from GNU gsl-1.14/randist/test.c
+ // Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010
+ // James Theiler, Brian Gough
+ template<unsigned long BINS = 100,
+ unsigned long N = 100000,
+ typename Distribution, typename Pdf>
+ void
+ testDiscreteDist(Distribution& f, Pdf pdf)
+ {
+ bool test __attribute__((unused)) = true;
+ double count[BINS], p[BINS];
+
+ for (unsigned long i = 0; i < BINS; i++)
+ count[i] = 0;
+
+ for (unsigned long i = 0; i < N; i++)
+ {
+ auto r = f();
+ if (r >= 0 && (unsigned long)r < BINS)
+ count[r]++;
+ }
+
+ for (unsigned long i = 0; i < BINS; i++)
+ p[i] = pdf(i);
+
+ for (unsigned long i = 0; i < BINS; i++)
+ {
+ bool status_i;
+ double d = std::abs(count[i] - N * p[i]);
+
+ if (p[i] != 0)
+ {
+ double s = d / std::sqrt(N * p[i]);
+ status_i = (s > 5) && (d > 1);
+ }
+ else
+ status_i = (count[i] != 0);
+
+ VERIFY( !status_i );
+ }
+ }
+
+ inline double
+ bernoulli_pdf(int k, double p)
+ {
+ if (k == 0)
+ return 1 - p;
+ else if (k == 1)
+ return p;
+ else
+ return 0.0;
+ }
+
+#ifdef _GLIBCXX_USE_C99_MATH_TR1
+ inline double
+ binomial_pdf(int k, int n, double p)
+ {
+ if (k < 0 || k > n)
+ return 0.0;
+ else
+ {
+ double q;
+
+ if (p == 0.0)
+ q = (k == 0) ? 1.0 : 0.0;
+ else if (p == 1.0)
+ q = (k == n) ? 1.0 : 0.0;
+ else
+ {
+ double ln_Cnk = (std::lgamma(n + 1.0) - std::lgamma(k + 1.0)
+ - std::lgamma(n - k + 1.0));
+ q = ln_Cnk + k * std::log(p) + (n - k) * std::log1p(-p);
+ q = std::exp(q);
+ }
+
+ return q;
+ }
+ }
+#endif
+
+ inline double
+ discrete_pdf(int k, std::initializer_list<double> wl)
+ {
+ if (!wl.size())
+ wl = { 1.0 };
+
+ if (k < 0 || (std::size_t)k >= wl.size())
+ return 0.0;
+ else
+ {
+ double sum = 0.0;
+ for (auto it = wl.begin(); it != wl.end(); ++it)
+ sum += *it;
+ return wl.begin()[k] / sum;
+ }
+ }
+
+ inline double
+ geometric_pdf(int k, double p)
+ {
+ if (k < 0)
+ return 0.0;
+ else if (k == 0)
+ return p;
+ else
+ return p * std::pow(1 - p, k);
+ }
+
+#ifdef _GLIBCXX_USE_C99_MATH_TR1
+ inline double
+ negative_binomial_pdf(int k, int n, double p)
+ {
+ if (k < 0)
+ return 0.0;
+ else
+ {
+ double f = std::lgamma(k + (double)n);
+ double a = std::lgamma(n);
+ double b = std::lgamma(k + 1.0);
+
+ return std::exp(f - a - b) * std::pow(p, n) * std::pow(1 - p, k);
+ }
+ }
+
+ inline double
+ poisson_pdf(int k, double mu)
+ {
+ if (k < 0)
+ return 0.0;
+ else
+ {
+ double lf = std::lgamma(k + 1.0);
+ return std::exp(std::log(mu) * k - lf - mu);
+ }
+ }
+#endif
+
+ inline double
+ uniform_int_pdf(int k, int a, int b)
+ {
+ if (k < 0 || k < a || k > b)
+ return 0.0;
+ else
+ return 1.0 / (b - a + 1.0);
+ }
+
+} // namespace __gnu_test
+
+#endif // #ifndef _GLIBCXX_TESTSUITE_RANDOM_H
diff --git a/libstdc++-v3/testsuite/util/testsuite_rvalref.h b/libstdc++-v3/testsuite/util/testsuite_rvalref.h
index 7725e580ab..73c70e0699 100644
--- a/libstdc++-v3/testsuite/util/testsuite_rvalref.h
+++ b/libstdc++-v3/testsuite/util/testsuite_rvalref.h
@@ -118,7 +118,7 @@ namespace __gnu_test
++copycount;
}
- copycounter(copycounter&& in)
+ copycounter(copycounter&& in) noexcept
{
bool test __attribute__((unused)) = true;
VERIFY( in.valid == true );
@@ -157,7 +157,7 @@ namespace __gnu_test
return *this;
}
- ~copycounter()
+ ~copycounter() noexcept
{ valid = false; }
};
@@ -247,6 +247,19 @@ namespace __gnu_test
return lh.val < rh.val;
}
+ struct throwing_move_constructor
+ {
+ throwing_move_constructor() = default;
+
+ throwing_move_constructor(throwing_move_constructor&&)
+ { throw 1; }
+
+ throwing_move_constructor(const throwing_move_constructor&) = default;
+
+ throwing_move_constructor&
+ operator=(const throwing_move_constructor&) = default;
+ };
+
} // namespace __gnu_test
namespace std
diff --git a/libstdc++-v3/testsuite/util/testsuite_tr1.h b/libstdc++-v3/testsuite/util/testsuite_tr1.h
index 6a48a309e1..1452e3e9f8 100644
--- a/libstdc++-v3/testsuite/util/testsuite_tr1.h
+++ b/libstdc++-v3/testsuite/util/testsuite_tr1.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Testing utilities for the tr1 testsuite.
//
-// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -68,13 +68,14 @@ namespace __gnu_test
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- template<template<typename...> class Property, typename... Types>
+ template<template<typename...> class Property,
+ typename Type1, typename... Types>
bool
- test_property(typename Property<Types...>::value_type value)
+ test_property(typename Property<Type1, Types...>::value_type value)
{
bool ret = true;
- ret &= Property<Types...>::value == value;
- ret &= Property<Types...>::type::value == value;
+ ret &= Property<Type1, Types...>::value == value;
+ ret &= Property<Type1, Types...>::type::value == value;
return ret;
}
#endif
@@ -145,7 +146,22 @@ namespace __gnu_test
ThrowExplicitClass(double&, int&, double&) throw(int);
};
+ struct ThrowDefaultClass
+ {
+ ThrowDefaultClass() throw(int);
+ };
+
+ struct ThrowCopyConsClass
+ {
+ ThrowCopyConsClass(const ThrowCopyConsClass&) throw(int);
+ };
+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ struct ThrowMoveConsClass
+ {
+ ThrowMoveConsClass(ThrowMoveConsClass&&) throw(int);
+ };
+
struct NoexceptExplicitClass
{
NoexceptExplicitClass(double&) noexcept(true);
@@ -159,6 +175,110 @@ namespace __gnu_test
explicit ExceptExplicitClass(int&) noexcept(false);
ExceptExplicitClass(double&, int&, double&) noexcept(false);
};
+
+ struct NoexceptDefaultClass
+ {
+ NoexceptDefaultClass() noexcept(true);
+ };
+
+ struct ExceptDefaultClass
+ {
+ ExceptDefaultClass() noexcept(false);
+ };
+
+ struct NoexceptCopyConsClass
+ {
+ NoexceptCopyConsClass(const NoexceptCopyConsClass&) noexcept(true);
+ };
+
+ struct ExceptCopyConsClass
+ {
+ ExceptCopyConsClass(const ExceptCopyConsClass&) noexcept(false);
+ };
+
+ struct NoexceptMoveConsClass
+ {
+ NoexceptMoveConsClass(NoexceptMoveConsClass&&) noexcept(true);
+ NoexceptMoveConsClass& operator=(NoexceptMoveConsClass&&) = default;
+ };
+
+ struct ExceptMoveConsClass
+ {
+ ExceptMoveConsClass(ExceptMoveConsClass&&) noexcept(false);
+ };
+
+ struct NoexceptCopyAssignClass
+ {
+ NoexceptCopyAssignClass&
+ operator=(const NoexceptCopyAssignClass&) noexcept(true);
+ };
+
+ struct ExceptCopyAssignClass
+ {
+ ExceptCopyAssignClass&
+ operator=(const ExceptCopyAssignClass&) noexcept(false);
+ };
+
+ struct NoexceptMoveAssignClass
+ {
+ NoexceptMoveAssignClass(NoexceptMoveAssignClass&&) = default;
+ NoexceptMoveAssignClass&
+ operator=(NoexceptMoveAssignClass&&) noexcept(true);
+ };
+
+ struct ExceptMoveAssignClass
+ {
+ ExceptMoveAssignClass&
+ operator=(ExceptMoveAssignClass&&) noexcept(false);
+ };
+
+ struct DeletedCopyAssignClass
+ {
+ DeletedCopyAssignClass&
+ operator=(const DeletedCopyAssignClass&) = delete;
+ };
+
+ struct DeletedMoveAssignClass
+ {
+ DeletedMoveAssignClass&
+ operator=(DeletedMoveAssignClass&&) = delete;
+ };
+
+ struct NoexceptMoveConsNoexceptMoveAssignClass
+ {
+ NoexceptMoveConsNoexceptMoveAssignClass
+ (NoexceptMoveConsNoexceptMoveAssignClass&&) noexcept(true);
+
+ NoexceptMoveConsNoexceptMoveAssignClass&
+ operator=(NoexceptMoveConsNoexceptMoveAssignClass&&) noexcept(true);
+ };
+
+ struct ExceptMoveConsNoexceptMoveAssignClass
+ {
+ ExceptMoveConsNoexceptMoveAssignClass
+ (ExceptMoveConsNoexceptMoveAssignClass&&) noexcept(false);
+
+ ExceptMoveConsNoexceptMoveAssignClass&
+ operator=(ExceptMoveConsNoexceptMoveAssignClass&&) noexcept(true);
+ };
+
+ struct NoexceptMoveConsExceptMoveAssignClass
+ {
+ NoexceptMoveConsExceptMoveAssignClass
+ (NoexceptMoveConsExceptMoveAssignClass&&) noexcept(true);
+
+ NoexceptMoveConsExceptMoveAssignClass&
+ operator=(NoexceptMoveConsExceptMoveAssignClass&&) noexcept(false);
+ };
+
+ struct ExceptMoveConsExceptMoveAssignClass
+ {
+ ExceptMoveConsExceptMoveAssignClass
+ (ExceptMoveConsExceptMoveAssignClass&&) noexcept(false);
+
+ ExceptMoveConsExceptMoveAssignClass&
+ operator=(ExceptMoveConsExceptMoveAssignClass&&) noexcept(false);
+ };
#endif
struct NType // neither trivial nor standard-layout
@@ -283,6 +403,322 @@ namespace __gnu_test
check_ret_type(T)
{ return true; }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ namespace construct_destruct
+ {
+ struct Empty {};
+
+ struct B { int i; B(){} };
+ struct D : B {};
+
+ enum E { ee1 };
+ enum E2 { ee2 };
+ enum class SE { e1 };
+ enum class SE2 { e2 };
+
+ enum OpE : int;
+ enum class OpSE : bool;
+
+ union U { int i; Empty b; };
+
+ struct Abstract
+ {
+ virtual ~Abstract() = 0;
+ };
+
+ struct AbstractDelDtor
+ {
+ ~AbstractDelDtor() = delete;
+ virtual void foo() = 0;
+ };
+
+ struct Ukn;
+
+ template<class To>
+ struct ImplicitTo
+ {
+ operator To();
+ };
+
+ template<class To>
+ struct DelImplicitTo
+ {
+ operator To() = delete;
+ };
+
+ template<class To>
+ struct ExplicitTo
+ {
+ explicit operator To();
+ };
+
+ struct Ellipsis
+ {
+ Ellipsis(...){}
+ };
+
+ struct DelEllipsis
+ {
+ DelEllipsis(...) = delete;
+ };
+
+ struct Any
+ {
+ template<class T>
+ Any(T&&){}
+ };
+
+ struct nAny
+ {
+ template<class... T>
+ nAny(T&&...){}
+ };
+
+ struct DelnAny
+ {
+ template<class... T>
+ DelnAny(T&&...) = delete;
+ };
+
+ template<class... Args>
+ struct FromArgs
+ {
+ FromArgs(Args...);
+ };
+
+ struct DelDef
+ {
+ DelDef() = delete;
+ };
+
+ struct DelCopy
+ {
+ DelCopy(const DelCopy&) = delete;
+ };
+
+ struct DelDtor
+ {
+ DelDtor() = default;
+ DelDtor(const DelDtor&) = default;
+ DelDtor(DelDtor&&) = default;
+ DelDtor(int);
+ DelDtor(int, B, U);
+ ~DelDtor() = delete;
+ };
+
+ struct Nontrivial
+ {
+ Nontrivial();
+ Nontrivial(const Nontrivial&);
+ Nontrivial& operator=(const Nontrivial&);
+ ~Nontrivial();
+ };
+
+ union NontrivialUnion
+ {
+ int i;
+ Nontrivial n;
+ };
+
+ struct UnusualCopy
+ {
+ UnusualCopy(UnusualCopy&);
+ };
+ }
+
+ namespace assign
+ {
+ struct Empty {};
+
+ struct B { int i; B(){} };
+ struct D : B {};
+
+ enum E { ee1 };
+ enum E2 { ee2 };
+ enum class SE { e1 };
+ enum class SE2 { e2 };
+
+ enum OpE : int;
+ enum class OpSE : bool;
+
+ union U { int i; Empty b; };
+
+ union UAssignAll
+ {
+ bool b;
+ char c;
+ template<class T>
+ void operator=(T&&);
+ };
+
+ union UDelAssignAll
+ {
+ bool b;
+ char c;
+ template<class T>
+ void operator=(T&&) = delete;
+ };
+
+ struct Abstract
+ {
+ virtual ~Abstract() = 0;
+ };
+
+ struct AbstractDelDtor
+ {
+ ~AbstractDelDtor() = delete;
+ virtual void foo() = 0;
+ };
+
+ struct Ukn;
+
+ template<class To>
+ struct ImplicitTo
+ {
+ operator To();
+ };
+
+ template<class To>
+ struct ExplicitTo
+ {
+ explicit operator To();
+ };
+
+ template<class To>
+ struct DelImplicitTo
+ {
+ operator To() = delete;
+ };
+
+ template<class To>
+ struct DelExplicitTo
+ {
+ explicit operator To() = delete;
+ };
+
+ struct Ellipsis
+ {
+ Ellipsis(...){}
+ };
+
+ struct DelEllipsis
+ {
+ DelEllipsis(...) = delete;
+ };
+
+ struct Any
+ {
+ template<class T>
+ Any(T&&){}
+ };
+
+ struct nAny
+ {
+ template<class... T>
+ nAny(T&&...){}
+ };
+
+ struct DelnAny
+ {
+ template<class... T>
+ DelnAny(T&&...) = delete;
+ };
+
+ template<class... Args>
+ struct FromArgs
+ {
+ FromArgs(Args...);
+ };
+
+ template<class... Args>
+ struct DelFromArgs
+ {
+ DelFromArgs(Args...) = delete;
+ };
+
+ struct DelDef
+ {
+ DelDef() = delete;
+ };
+
+ struct DelCopy
+ {
+ DelCopy(const DelCopy&) = delete;
+ };
+
+ struct DelDtor
+ {
+ DelDtor() = default;
+ DelDtor(const DelDtor&) = default;
+ DelDtor(DelDtor&&) = default;
+ DelDtor(int);
+ DelDtor(int, B, U);
+ ~DelDtor() = delete;
+ };
+
+ struct Nontrivial
+ {
+ Nontrivial();
+ Nontrivial(const Nontrivial&);
+ Nontrivial& operator=(const Nontrivial&);
+ ~Nontrivial();
+ };
+
+ union NontrivialUnion
+ {
+ int i;
+ Nontrivial n;
+ };
+
+ struct UnusualCopy
+ {
+ UnusualCopy(UnusualCopy&);
+ };
+
+ struct AnyAssign
+ {
+ template<class T>
+ void operator=(T&&);
+ };
+
+ struct DelAnyAssign
+ {
+ template<class T>
+ void operator=(T&&) = delete;
+ };
+
+ struct DelCopyAssign
+ {
+ DelCopyAssign& operator=(const DelCopyAssign&) = delete;
+ DelCopyAssign& operator=(DelCopyAssign&&) = default;
+ };
+
+ struct MO
+ {
+ MO(MO&&) = default;
+ MO& operator=(MO&&) = default;
+ };
+ }
+
+ struct CopyConsOnlyType
+ {
+ CopyConsOnlyType(int) { }
+ CopyConsOnlyType(CopyConsOnlyType&&) = delete;
+ CopyConsOnlyType(const CopyConsOnlyType&) = default;
+ CopyConsOnlyType& operator=(const CopyConsOnlyType&) = delete;
+ CopyConsOnlyType& operator=(CopyConsOnlyType&&) = delete;
+ };
+
+ struct MoveConsOnlyType
+ {
+ MoveConsOnlyType(int) { }
+ MoveConsOnlyType(const MoveConsOnlyType&) = delete;
+ MoveConsOnlyType(MoveConsOnlyType&&) = default;
+ MoveConsOnlyType& operator=(const MoveConsOnlyType&) = delete;
+ MoveConsOnlyType& operator=(MoveConsOnlyType&&) = delete;
+ };
+#endif
+
} // namespace __gnu_test
#endif // _GLIBCXX_TESTSUITE_TR1_H